From f1be4eaf5f0e82a0267cf25ca05f717b5340dc46 Mon Sep 17 00:00:00 2001
From: hang <87227557@qq.com>
Date: Sun, 13 Oct 2024 02:38:43 +0800
Subject: [PATCH] =?UTF-8?q?=E5=8A=A8=E6=80=81=E7=A7=BB=E5=8A=A8=E8=A1=A8?=
=?UTF-8?q?=E6=A0=BC+=E5=8A=A8=E6=80=81=E5=88=A0=E9=99=A4=E6=8C=87?=
=?UTF-8?q?=E5=AE=9A=E5=88=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Helper/ExcelExportHelper.cs | 138 +++++++++++++-----
.../IRaCIS.Core.Application.xml | 35 +++++
.../Service/Common/ExcelExportService.cs | 18 ++-
.../Service/QC/DTO/QCListViewModel.cs | 1 +
.../_IRaCIS/ObjectExtension.cs | 15 +-
5 files changed, 161 insertions(+), 46 deletions(-)
diff --git a/IRaCIS.Core.Application/Helper/ExcelExportHelper.cs b/IRaCIS.Core.Application/Helper/ExcelExportHelper.cs
index 4372fc35f..8f8346527 100644
--- a/IRaCIS.Core.Application/Helper/ExcelExportHelper.cs
+++ b/IRaCIS.Core.Application/Helper/ExcelExportHelper.cs
@@ -199,29 +199,45 @@ public static class ExcelExportHelper
public class DynamicColumnConfig
{
- //标题动态修改的行 从0 开始算
+ ///
+ /// 增加动态列开始索引 从0 开始算
+ ///
public int AutoColumnStartIndex { get; set; }
- //动态列开始的index 从0开始
- public int AutoColumnRowIndex { get; set; }
+ ///
+ /// 动态列开始的行index 从0开始
+ ///
+ public int AutoColumnTitleRowIndex { get; set; }
- //动态列后面还有几列数据
- public int BackMoveCount { get; set; }
- //动态的列名
- public List ColumnNameList { get; set; }
+ public int TempalteLastColumnIndex { get; set; }
- //动态翻译的字典名
- public List TranslateDicNameList { get; set; }
+ ///
+ /// 动态的列名
+ ///
+ public List ColumnNameList { get; set; } = new List();
- //动态取数据的集合名
+ ///
+ /// 动态翻译的字典名
+ ///
+ public List TranslateDicNameList { get; set; } = new List();
+
+ ///
+ /// 动态取数据的集合名
+ ///
public string DynamicListName { get; set; }
- //动态数据翻译的取字典的属性名
+ ///
+ /// 动态数据翻译的取字典的属性名
+ ///
public string DynamicItemDicName { get; set; }
- //取值的属性名
+ ///
+ /// 取值的属性名
+ ///
public string DynamicItemValueName { get; set; }
+
+ public List RemoveColunmIndexList { get; set; } = new List();
}
@@ -355,42 +371,92 @@ public static class ExcelExportHelper
{
var sheet = workbook.GetSheetAt(0);
- var row = sheet.GetRow(dynamicColumnConfig.AutoColumnRowIndex);
- var templateRow = sheet.GetRow(dynamicColumnConfig.AutoColumnRowIndex + 1);
+ var titelRow = sheet.GetRow(dynamicColumnConfig.AutoColumnTitleRowIndex);
+ var templateRow = sheet.GetRow(dynamicColumnConfig.AutoColumnTitleRowIndex + 1);
+ //动态移除列的数量
+ var dynamicRemoveColunmCount = dynamicColumnConfig.RemoveColunmIndexList.Count();
+
+ var beforeDynamicRemoveCount = dynamicColumnConfig.RemoveColunmIndexList.Where(t => t < dynamicColumnConfig.AutoColumnStartIndex).Count();
+
+ //动态添加列的数量
var needAddCount = dynamicColumnConfig.ColumnNameList.Count;
- var colunmAddIndex = dynamicColumnConfig.AutoColumnStartIndex + dynamicColumnConfig.BackMoveCount;
+ //原始表 最终索引
+ var originTotalEndIndex = dynamicColumnConfig.TempalteLastColumnIndex;
+
+ var originRemoveEndIndex= originTotalEndIndex- dynamicRemoveColunmCount;
+
+ //最终表 动态列开始索引
+ var dynamicColunmStartIndex = dynamicColumnConfig.AutoColumnStartIndex - beforeDynamicRemoveCount;
+
+ //最终表 动态列的终止索引
+ var dynamicColunmEndIndex = dynamicColunmStartIndex + needAddCount - 1;
+
+ //最终表 最终索引
+ var totalColunmEndIndex = originTotalEndIndex + needAddCount - dynamicRemoveColunmCount;
+
+
+ //动态列后需要移动的数量
+ var backMoveCount = totalColunmEndIndex - dynamicColunmEndIndex;
+
+ //删除需要动态删除的列 从大到小移除,否则索引会变
+ foreach (var removeIndex in dynamicColumnConfig.RemoveColunmIndexList.OrderByDescending(t => t))
+ {
+ //将后面的列向前移动
+ for (var i = 0; i < originTotalEndIndex - removeIndex; i++)
+ {
+ Console.WriteLine(titelRow.GetCell(removeIndex + i + 1).StringCellValue);
+ titelRow.GetCell(removeIndex + i).SetCellValue(titelRow.GetCell(removeIndex + i + 1).StringCellValue);
+ templateRow.GetCell(removeIndex + i).SetCellValue(templateRow.GetCell(removeIndex + i + 1).StringCellValue);
+
+ //后面的数据要清空
+ titelRow.GetCell(removeIndex + i + 1).SetCellValue("");
+ templateRow.GetCell(removeIndex + i + 1).SetCellValue("");
+
+ }
+
+ }
//创建新的列
- for (int i = 0; i < needAddCount; i++)
+ for (int i = originTotalEndIndex; i < originTotalEndIndex + needAddCount; i++)
{
- row.CreateCell(i + colunmAddIndex);
+ titelRow.CreateCell(i + 1);
}
//移动Title 和下面的模板标识
- for (int i = colunmAddIndex + needAddCount; i < colunmAddIndex; i--)
- {
- row.GetCell(i).SetCellValue(row.GetCell(i - needAddCount).StringCellValue);
+ var gap = totalColunmEndIndex - originRemoveEndIndex;
- templateRow.GetCell(i).SetCellValue(templateRow.GetCell(i - needAddCount).StringCellValue);
+ for (int i = totalColunmEndIndex; i > dynamicColunmEndIndex; i--)
+ {
+
+ titelRow.GetCell(i).SetCellValue(titelRow.GetCell(i - gap).StringCellValue);
+
+ templateRow.GetCell(i).SetCellValue(templateRow.GetCell(i - gap).StringCellValue);
}
+
+
+
//设置动态Tilte
- for (int i = dynamicColumnConfig.AutoColumnStartIndex; i < dynamicColumnConfig.AutoColumnStartIndex + needAddCount; i++)
+ for (int i = dynamicColunmStartIndex; i < dynamicColunmStartIndex + needAddCount; i++)
{
- var name = dynamicColumnConfig.ColumnNameList[i - dynamicColumnConfig.AutoColumnStartIndex];
- row.GetCell(i).SetCellValue(name);
+ var name = dynamicColumnConfig.ColumnNameList[i - dynamicColunmStartIndex];
+
+ titelRow.GetCell(i).SetCellValue(name);
}
}
+ using (var memoryStream2 = new MemoryStream())
+ {
+ workbook.Write(memoryStream2, true);
- var memoryStream2 = new MemoryStream();
- workbook.Write(memoryStream2, true);
+ memoryStream2.Seek(0, SeekOrigin.Begin);
+
+ templateStream = memoryStream2;
+ }
- memoryStream2.Seek(0, SeekOrigin.Begin);
- templateStream = memoryStream2;
}
#endregion
@@ -408,7 +474,6 @@ public static class ExcelExportHelper
memoryStream.Seek(0, SeekOrigin.Begin);
-
if (dynamicColumnConfig != null)
{
var dynamicTranslateDataList = await _dictionaryService.GetBasicDataSelect(dynamicColumnConfig.TranslateDicNameList.ToArray());
@@ -424,19 +489,21 @@ public static class ExcelExportHelper
var index = list.IndexOf(itemResult);
//从第四行开始处理动态列
- var row = sheet.GetRow(index + dynamicColumnConfig.AutoColumnRowIndex + 1);
+ var row = sheet.GetRow(index + dynamicColumnConfig.AutoColumnTitleRowIndex + 1);
- var itemDic = itemResult.ConvertToDictionary();
+ var itemDic = itemResult.ToDictionary();
var itemList = itemDic[dynamicColumnConfig.DynamicListName] as IList;
- foreach (var item in itemList)
+ foreach (var itemObj in itemList)
{
- var writeIndex = itemList.IndexOf(item) + dynamicColumnConfig.AutoColumnStartIndex;
+ var writeIndex = itemList.IndexOf(itemObj) + dynamicColumnConfig.AutoColumnStartIndex;
+ var iteObjDic = itemObj.ToDictionary();
+
+ var itemDicName = iteObjDic[dynamicColumnConfig.DynamicItemDicName].ToString();
+ var itemValue = iteObjDic[dynamicColumnConfig.DynamicItemValueName].ToString();
- var itemDicName = itemDic[dynamicColumnConfig.DynamicItemDicName].ToString();
- var itemValue = itemDic[dynamicColumnConfig.DynamicItemValueName].ToString();
if (itemDicName.IsNotNullOrEmpty())
{
@@ -458,6 +525,7 @@ public static class ExcelExportHelper
memoryStream2.Seek(0, SeekOrigin.Begin);
memoryStream = memoryStream2;
+
}
diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index 9d2723f14..05029cdb8 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -57,6 +57,41 @@
+
+
+ 增加动态列开始索引 从0 开始算
+
+
+
+
+ 动态列开始的行index 从0开始
+
+
+
+
+ 动态的列名
+
+
+
+
+ 动态翻译的字典名
+
+
+
+
+ 动态取数据的集合名
+
+
+
+
+ 动态数据翻译的取字典的属性名
+
+
+
+
+ 取值的属性名
+
+
导出文件模板
diff --git a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs
index 0c3353e86..b3fe8dc23 100644
--- a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs
+++ b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs
@@ -2077,12 +2077,14 @@ namespace IRaCIS.Core.Application.Service.Common
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list.Where(t => t.ReadingCategory != ReadingCategory.Global).ToList(), _userInfo.TimeZoneId);
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
- var dynamicColumnConfig = new DynamicColumnConfig() { AutoColumnRowIndex = 2, AutoColumnStartIndex = 6, BackMoveCount=3,
- DynamicItemDicName= "QuestionName",
- DynamicItemValueName= "QuestionValue",
- DynamicListName= "JudgeQuestionAnswerList",
- ColumnNameList = list.FirstOrDefault()?.JudgeQuestionAnswerList.Select(t => t.QuestionName).ToList(),
- TranslateDicNameList= list.FirstOrDefault()?.JudgeQuestionAnswerList.Select(t => t.TranslateDicName).ToList()
+ var dynamicColumnConfig = new DynamicColumnConfig() { AutoColumnTitleRowIndex = 2, AutoColumnStartIndex = 6,
+ TempalteLastColumnIndex = 8,
+ DynamicItemDicName = "TranslateDicName",
+ DynamicItemValueName = "QuestionValue",
+ DynamicListName = "JudgeQuestionAnswerList",
+ RemoveColunmIndexList = new List() { 1, 7 },
+ ColumnNameList = list.FirstOrDefault()?.JudgeQuestionAnswerList.Select(t => t.QuestionName).ToList() ?? new List(),
+ TranslateDicNameList = list.FirstOrDefault()?.JudgeQuestionAnswerList.Select(t => t.TranslateDicName).ToList() ?? new List()
};
var (memoryStream, fileName) = await ExcelExportHelper.DataExport_NpoiTestAsync(StaticData.Export.CommonReading_Export, exportInfo, _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(CommonEvaluationExport), criterion.CriterionType, dynamicColumnConfig);
@@ -2196,7 +2198,7 @@ namespace IRaCIS.Core.Application.Service.Common
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list.Where(t => t.ReadingCategory != ReadingCategory.Global).ToList(), _userInfo.TimeZoneId);
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
- var dynamicColumnConfig = new DynamicColumnConfig() { AutoColumnRowIndex = 2, AutoColumnStartIndex = 6, ColumnNameList = list.FirstOrDefault()?.JudgeQuestionAnswerList.Select(t => t.QuestionName).ToList() };
+ var dynamicColumnConfig = new DynamicColumnConfig() { AutoColumnTitleRowIndex = 2, AutoColumnStartIndex = 6, ColumnNameList = list.FirstOrDefault()?.JudgeQuestionAnswerList.Select(t => t.QuestionName).ToList() };
var (memoryStream, fileName) = await ExcelExportHelper.DataExport_NpoiTestAsync(StaticData.Export.CommonJudgeReadingDetail_Export, exportInfo, _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(CommonEvaluationExport), criterion.CriterionType, dynamicColumnConfig);
@@ -2259,7 +2261,7 @@ namespace IRaCIS.Core.Application.Service.Common
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list.Where(t => t.ReadingCategory != ReadingCategory.Global).ToList(), _userInfo.TimeZoneId);
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
- var dynamicColumnConfig = new DynamicColumnConfig() { AutoColumnRowIndex = 2, AutoColumnStartIndex = 6, ColumnNameList = list.FirstOrDefault()?.QuestionAnswerList.Select(t => t.QuestionName).ToList() };
+ var dynamicColumnConfig = new DynamicColumnConfig() { AutoColumnTitleRowIndex = 2, AutoColumnStartIndex = 6, ColumnNameList = list.FirstOrDefault()?.QuestionAnswerList.Select(t => t.QuestionName).ToList() };
var (memoryStream, fileName) = await ExcelExportHelper.DataExport_NpoiTestAsync(StaticData.Export.CommonReadingDetail_Export, exportInfo, _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(CommonEvaluationExport), criterion.CriterionType, dynamicColumnConfig);
diff --git a/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs b/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs
index 65c118c37..0431f047b 100644
--- a/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs
+++ b/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs
@@ -1149,6 +1149,7 @@ namespace IRaCIS.Core.Application.Contracts
//在当前访视触发裁判,或者在截止日期小于等于当前访视的阅片期触发裁判
+ [DictionaryTranslateAttribute("YesOrNo")]
public bool IsTrigerJudge { get; set; }
//(如果是访视点裁判,则仅在所选阅片人对应访视 显示;如果是阅片期裁判,则在所选阅片人 阅片期内的所有访视 显示此原因)
diff --git a/IRaCIS.Core.Infrastructure/_IRaCIS/ObjectExtension.cs b/IRaCIS.Core.Infrastructure/_IRaCIS/ObjectExtension.cs
index 9e82dfcbd..0e08f7634 100644
--- a/IRaCIS.Core.Infrastructure/_IRaCIS/ObjectExtension.cs
+++ b/IRaCIS.Core.Infrastructure/_IRaCIS/ObjectExtension.cs
@@ -32,12 +32,23 @@ namespace IRaCIS.Core.Infrastructure.Extention
return JsonConvert.SerializeObject(obj, new JsonSerializerSettings { DateFormatString = "yyyy-MM-dd HH:mm:ss", ReferenceLoopHandling = ReferenceLoopHandling.Ignore, NullValueHandling = NullValueHandling.Ignore });
}
- // 通过类型参数反序列化 JSON 字符串为指定类型的对象
+ ///
+ /// 通过类型参数反序列化 JSON 字符串为指定类型的对象
+ ///
+ ///
+ ///
+ ///
public static object JsonStrToObject(this string jsonStr, Type type)
{
return JsonConvert.DeserializeObject(jsonStr, type);
}
+
+ public static Dictionary ToDictionary(this object obj)
+ {
+ var json = JsonConvert.SerializeObject(obj, new JsonSerializerSettings { DateFormatString = "yyyy-MM-dd HH:mm:ss", Formatting = Formatting.Indented, ReferenceLoopHandling = ReferenceLoopHandling.Ignore, NullValueHandling = NullValueHandling.Include });
+ return JsonConvert.DeserializeObject>(json);
+ }
///
/// 将对象序列化成稽查需要的Json字符串
///
@@ -64,9 +75,7 @@ namespace IRaCIS.Core.Infrastructure.Extention
foreach (PropertyInfo property in properties)
{
string propertyName = property.Name;
- Console.WriteLine(propertyName);
object propertyValue = property.GetValue(obj);
- Console.WriteLine(propertyName);
// 如果属性的类型是枚举,将其值保留为整数
if (property.PropertyType.IsEnum || (Nullable.GetUnderlyingType(property.PropertyType)?.IsEnum == true && propertyValue!=null) )
{