diff --git a/SGGL/BLL/Common/Funs.cs b/SGGL/BLL/Common/Funs.cs
index cf58f845..adfb9664 100644
--- a/SGGL/BLL/Common/Funs.cs
+++ b/SGGL/BLL/Common/Funs.cs
@@ -1467,6 +1467,37 @@ namespace BLL
return "";
}
}
+ ///
+ /// 将List 中的数据平均拆分为多个List
+ ///
+ ///
+ /// 原始List
+ /// 拆分后的子列表数量
+ ///
+ /**们首先计算出每个子列表的大小chunkSize和余数remainder。然后,使用一个循环来创建并添加子列表到splitLists中。
+
+在每次迭代中,我们根据当前索引是否小于余数来确定子列表的大小。如果小于余数,则将子列表大小加1,以确保最后一个子列表包含余数部分。
+
+最后,我们更新startIndex以便正确获取下一个子列表的元素范围*/
+ public static List> SplitList(List originalList, int numberOfLists)
+ {
+ List> splitLists = new List>();
+ int chunkSize = originalList.Count / numberOfLists;
+ int remainder = originalList.Count % numberOfLists;
+
+ int startIndex = 0;
+ for (int i = 0; i < numberOfLists; i++)
+ {
+ int sublistSize = chunkSize + (i < remainder ? 1 : 0);
+ List sublist = originalList.GetRange(startIndex, sublistSize);
+ splitLists.Add(sublist);
+
+ startIndex += sublistSize;
+ }
+
+ return splitLists;
+ }
+
}
}
diff --git a/SGGL/BLL/PHTGL/ContractCompile/PhtglContracttrackService .cs b/SGGL/BLL/PHTGL/ContractCompile/PhtglContracttrackService .cs
index ce936b25..f9dfc9b8 100644
--- a/SGGL/BLL/PHTGL/ContractCompile/PhtglContracttrackService .cs
+++ b/SGGL/BLL/PHTGL/ContractCompile/PhtglContracttrackService .cs
@@ -3,6 +3,7 @@ using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
+using System.Threading.Tasks;
using EmitMapper;
using EmitMapper.MappingConfiguration;
using FineUIPro;
@@ -358,7 +359,8 @@ namespace BLL
{
var responeData = new ResponeData();
List rows;
- List goingAddList =new List();
+ List thisContractTracks =new List();
+
var sheetNames = MiniExcel.GetSheetNames(path);
foreach (var sheet in sheetNames) ////澶歴heet瀵煎叆
{
@@ -376,6 +378,7 @@ namespace BLL
ObjectMapperManager.DefaultInstance.GetMapper, List>();
var modeList = mapper.Map(rows);
+ List goingAddList = new List();
if (modeList.Count == 0)
{
responeData.code = 0;
@@ -401,6 +404,7 @@ namespace BLL
item.ProjectCode = item.MainItemCode + "-" + item.ProjectCode;
}
+
if (resultModel!=null)
{
item.Id = resultModel.Id;
@@ -409,10 +413,15 @@ namespace BLL
else
{
item.Id = SQLHelper.GetNewID();
- AddPHTGL_ContractTrack(item);
+ goingAddList.Add(item);
+ //AddPHTGL_ContractTrack(item);
}
- PhtglContracttrackprogressService.CreateTemplateByContractTrackId(item.Id);
+ thisContractTracks.Add(item);
+ //PhtglContracttrackprogressService.CreateTemplateByContractTrackId(item.Id);
}
+
+ AddBulkPHTGL_ContractTrack(goingAddList);
+ PhtglContracttrackprogressService.CreateTemplateByContractList(goingAddList,projectid);
}
return responeData;
diff --git a/SGGL/BLL/PHTGL/ContractCompile/PhtglContracttrackprogressService.cs b/SGGL/BLL/PHTGL/ContractCompile/PhtglContracttrackprogressService.cs
index 7f9a8c83..b5476a22 100644
--- a/SGGL/BLL/PHTGL/ContractCompile/PhtglContracttrackprogressService.cs
+++ b/SGGL/BLL/PHTGL/ContractCompile/PhtglContracttrackprogressService.cs
@@ -1,8 +1,10 @@
锘縰sing System;
using System.Collections;
+using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
+using System.Threading.Tasks;
using FineUIPro;
using Model;
@@ -110,6 +112,7 @@ namespace BLL
ContractTrackId = ContractTrackId,
Date= month.ToString("yyyy-MM")
};
+
if (!GetPHTGL_ContractTrackProgressByModle(querymodel).Any())
{
var newmodel = new Model.PHTGL_ContractTrackProgress();
@@ -122,6 +125,75 @@ namespace BLL
}
}
}
+ public static void CreateTemplateByContractList(List contractTrackList,string projectid)
+ {
+ var dbcontractTrack=(from x in Funs.DB.PHTGL_ContractTrack where x.ProjectId==projectid select x).ToList();
+ var dbContractTrackProgress=(from x in Funs.DB.PHTGL_ContractTrackProgress
+ join y in Funs.DB.PHTGL_ContractTrack on x.ContractTrackId equals y.Id
+ where y.ProjectId==projectid select x).ToList();
+
+ List> splitLists = new List>();
+ if (contractTrackList.Count>10)
+ {
+ splitLists = Funs.SplitList(contractTrackList, 10);
+ }
+ else
+ {
+ splitLists = Funs.SplitList(contractTrackList, 1);
+ }
+ ConcurrentBag contractTrackProgressList = new ConcurrentBag();//鐢ㄤ簬鎵归噺鏂板鐨勬暟鎹
+
+ ParallelOptions parallelOptions = new ParallelOptions();
+ parallelOptions.MaxDegreeOfParallelism = Environment.ProcessorCount;
+
+ Parallel.ForEach(splitLists, parallelOptions, sublist =>
+ {
+
+ foreach (var item in sublist)
+ {
+ var model =( from x in dbcontractTrack where x.Id==item.Id select x).FirstOrDefault() ;
+ if (model == null) return;
+ var contractNum = model.ContractNum;
+ var contractmode = ContractService.GetContractByContractNum(contractNum);
+ if (contractmode.ContractStartDate != null && contractmode.ContractEndDate != null)
+ {
+ var startDate = (DateTime)contractmode.ContractStartDate;
+ var endDate = (DateTime)contractmode.ContractEndDate;
+ List months = GetMonthsBetween(startDate, endDate);//鑾峰彇鍚堝悓璧锋鏃ユ湡
+
+ foreach (DateTime month in months)
+ {
+ var querymodel = new Model.PHTGL_ContractTrackProgress
+ {
+ ContractTrackId = item.Id,
+ Date = month.ToString("yyyy-MM")
+ };
+ var q = (from x in dbContractTrackProgress
+ where
+ (string.IsNullOrEmpty(querymodel.ContractTrackId) ||
+ x.ContractTrackId.Contains(querymodel.ContractTrackId)) &&
+ (string.IsNullOrEmpty(querymodel.Date) ||
+ x.Date.Contains(querymodel.Date))
+ orderby x.Date
+ select x).ToList()
+ ;
+ if (!q.Any())
+ {
+ var newmodel = new Model.PHTGL_ContractTrackProgress();
+ newmodel.ContractTrackProgressId = SQLHelper.GetNewID(typeof(Model.PHTGL_ContractTrackProgress));
+ newmodel.ContractTrackId = item.Id;
+ newmodel.Date = month.ToString("yyyy-MM");
+ contractTrackProgressList.Add(newmodel);
+ // AddPHTGL_ContractTrackProgress(newmodel);
+ }
+ }
+ }
+ } // 澶勭悊瀹屾垚鍚庯紝鍙互灏嗙粨鏋滀繚瀛樺埌闆嗗悎鎴栧叾浠栧湴鏂
+
+ });
+
+ AddBulkPHTGL_ContractTrackProgress(contractTrackProgressList.ToList());
+ }
public static List GetMonthsBetween(DateTime startDate, DateTime endDate)
{
@@ -157,6 +229,12 @@ namespace BLL
Funs.DB.SubmitChanges();
}
+ public static void AddBulkPHTGL_ContractTrackProgress(List newtableList)
+ {
+ Funs.DB.PHTGL_ContractTrackProgress.InsertAllOnSubmit(newtableList);
+ Funs.DB.SubmitChanges();
+ }
+
public static void UpdatePHTGL_ContractTrackProgress(PHTGL_ContractTrackProgress newtable)
{
var table = Funs.DB.PHTGL_ContractTrackProgress.FirstOrDefault(x =>