焊接达因数、完成达因数汇总逻辑优化

This commit is contained in:
夏菊 2025-07-02 11:15:49 +08:00
parent c40e74e47e
commit 52dec49b5e
5 changed files with 277 additions and 57 deletions

View File

@ -1,4 +1,6 @@
using FineUIPro;
using Aspose.Words.Lists;
using EmitMapper;
using FineUIPro;
using Model;
using Newtonsoft.Json;
using NPOI.SS.Formula.Functions;
@ -319,6 +321,144 @@ namespace BLL
if (thisUnit != null) thisUnitId = thisUnit.UnitId;
var baseUnit = UnitService.GetUnitByUnitId(thisUnitId);
Project_HJGLData_DefectService.StatisticalAllProjectData();
//// 并行执行异步方法
var welderNumTask = HJGLData_HJGLService.GetWelderNumAsync(); //获取焊工总数
var dineInfoListTask = HJGLData_HJGLService.GetDineInfoAsync(); //获达因数信息
var chCheckItemListTask = HJGLData_HJGLService.GetCHCheckItemAsync(); //获取焊接检查信息
// 等待所有异步方法执行完成
await Task.WhenAll(
welderNumTask,
dineInfoListTask,
chCheckItemListTask
);
// 统一获取异步方法的返回值
var welderNum = await welderNumTask;
var dineInfoList = await dineInfoListTask;
var chCheckItemList = await chCheckItemListTask;
var table = new HJGLData_HJGL
{
UnitId = thisUnitId,
CollCropCode = baseUnit.CollCropCode,
UnitName = baseUnit.UnitName,
ReportDate = DateTime.Now.Date,
WelderNum = welderNum.Count(),
TotalDineNum = Convert.ToInt32(dineInfoList.Sum(x => x.Size)),
CompleteDineNum = Convert.ToInt32(dineInfoList.Sum(x => x.DoneDin)),
TotalFilmNum = Convert.ToInt32(chCheckItemList.Sum(x => x.CHT_TotalFilm)),
OKFilmNum = Convert.ToInt32(chCheckItemList.Sum(x => x.CHT_PassFilm)),
CreateMan = Const.sysglyId,
CreateDate = DateTime.Now
};
Project_HJGLData_HJGLService.DeleteProject_HJGLData_HJGLByDate(DateTime.Now.Date);
// 预先对 dineInfoList 和 chCheckItemList 按 ProjectId 进行分组
var dineInfoDict = dineInfoList
.Where(x => BeUnderConstructionList.Contains(x.ProjectId))
.GroupBy(x => x.ProjectId)
.ToDictionary(g => g.Key, g => new
{
TotalDineNum = g.Sum(x => x.Size),
CompleteDineNum = g.Sum(x => x.DoneDin)
});
var chCheckItemDict = chCheckItemList
.Where(x => BeUnderConstructionList.Contains(x.ProjectId))
.GroupBy(x => x.ProjectId)
.ToDictionary(g => g.Key, g => new
{
TotalFilmNum = g.Sum(x => x.CHT_TotalFilm),
OKFilmNum = g.Sum(x => x.CHT_PassFilm)
});
foreach (var projectid in BeUnderConstructionList)
{
// 获取焊工数量
int welderCount = welderNum.Count(x => x.ProjectId == projectid);
// 获取达因信息
var dineInfo = dineInfoDict.TryGetValue(projectid, out var dineData)
? dineData
: new { TotalDineNum = (double?)0, CompleteDineNum = (double?)0 };
// 获取拍片信息
var chCheckItem = chCheckItemDict.TryGetValue(projectid, out var checkData)
? checkData
: new { TotalFilmNum = (int?)0, OKFilmNum = (int?)0 };
var projectCqmsData = new Project_HJGLData_HJGL()
{
Id = SQLHelper.GetNewID(),
ProjectId = projectid,
UnitId = thisUnitId,
CollCropCode = baseUnit.CollCropCode,
UnitName = baseUnit.UnitName,
ReportDate = DateTime.Now.Date,
WelderNum = welderCount,
TotalDineNum = Convert.ToInt32(dineInfo.TotalDineNum),
CompleteDineNum = Convert.ToInt32(dineInfo.CompleteDineNum),
TotalFilmNum = chCheckItem.TotalFilmNum,
OKFilmNum = chCheckItem.OKFilmNum,
};
Project_HJGLData_HJGLService.AddProject_HJGLData_HJGL(projectCqmsData);
}
if (IsReportByToday())
{
table.Id = GetTodayData().Id;
table.State = Const.CNCEC_State_1;
UpdateHJGLData_HJGL(table);
}
else
{
table.Id = SQLHelper.GetNewID();
table.State = Const.CNCEC_State_0;
AddHJGLData_HJGL(table);
}
var mapper = ObjectMapperManager.DefaultInstance.GetMapper<HJGLData_HJGL, HJGLDataItem>();
var item = mapper.Map(table);
// 手动处理特殊字段
item.ReportDate = table.ReportDate.Value.ToShortDateString();
item.HJGLDataDefectItems = Project_HJGLData_DefectService.getTodayProject_HJGLData_Defect();
var hJGLDataItems = new List<HJGLDataItem>();
hJGLDataItems.Add(item);
data.HJGLDataItems = hJGLDataItems;
return data;
//var item = new HJGLDataItem();
//item.CollCropCode = table.CollCropCode;
//item.CompleteDineNum = table.CompleteDineNum;
//item.Id = table.Id;
//item.OKFilmNum = table.OKFilmNum;
//item.ReportDate = table.ReportDate.Value.ToShortDateString();
//item.TotalDineNum = table.TotalDineNum;
//item.TotalFilmNum = table.TotalFilmNum;
//item.UnitId = table.UnitId;
//item.WelderNum = table.WelderNum;
//item.HJGLDataDefectItems = Project_HJGLData_DefectService.getTodayProject_HJGLData_Defect();
//var hJGLDataItems = new List<HJGLDataItem>();
//hJGLDataItems.Add(item);
//data.HJGLDataItems = hJGLDataItems;
//return data;
}
public static async Task<HJGLData> StatisticalDataAsyncold()
{
var data = new HJGLData();
var thisUnitId = string.Empty;
var thisUnit = CommonService.GetIsThisUnit();
if (thisUnit != null) thisUnitId = thisUnit.UnitId;
var baseUnit = UnitService.GetUnitByUnitId(thisUnitId);
Project_HJGLData_HJGLService.StatisticalAllProjectData();
Project_HJGLData_DefectService.StatisticalAllProjectData();
// 并行执行异步方法
@ -507,20 +647,65 @@ namespace BLL
/// 获取总达因数和完成达因数
/// </summary>
/// <returns></returns>
public static IEnumerable<WeldDineOutput> GetDineInfo()
public static List<WeldDineOutput> GetDineInfo()
{
var result = (from x in Funs.DB.HJGL_FL_TotalQuantity
where BeUnderConstructionList.Contains(x.ProjectId)
group x by x.ProjectId into g
select new Model.WeldDineOutput()
{
ProjectId = g.Key,
Size = g.Sum(x => Convert.ToDouble(x.TotalWeldQuantity)),
DoneDin = g.Sum(x => Convert.ToDouble(x.TotalCompleted))
});
var result = new List<WeldDineOutput>();
var getD1 = from x in Funs.DB.HJGL_FL_TotalQuantity
where BeUnderConstructionList.Contains(x.ProjectId)
select x;
var projectIds = getD1.Select(x => x.ProjectId).Distinct();
foreach (var pro in projectIds)
{
double pTotalWeldQuantity = 0;
double pTotalCompleted = 0;
var proD1 = getD1.Where(x => x.ProjectId == pro);
foreach (var item in getD1)
{
var dAll = !string.IsNullOrWhiteSpace(item.TotalWeldQuantity) ? Convert.ToDouble(item.TotalWeldQuantity) : 0;
var dCompleted = !string.IsNullOrWhiteSpace(item.TotalCompleted) ? Convert.ToDouble(item.TotalCompleted) : 0;
pTotalWeldQuantity += dAll;
pTotalCompleted += dCompleted;
}
result.Add(new WeldDineOutput
{
ProjectId = pro,
Size = pTotalWeldQuantity,
DoneDin = pTotalCompleted
});
}
var differenceProjectIds = BeUnderConstructionList.Except(projectIds).ToList();
foreach (var pro in differenceProjectIds)
{
double pTotalWeldQuantity = 0;
double pTotalCompleted = 0;
var getD2 = (from x in Funs.DB.HJGL_FL_Data
where x.ProjectId == pro
orderby x.CompileDate descending
select x).FirstOrDefault();
if (getD2 != null)
{
pTotalWeldQuantity = !string.IsNullOrWhiteSpace(getD2.TotalWeldQuantity) ? Convert.ToDouble(getD2.TotalWeldQuantity) : 0;
pTotalCompleted = !string.IsNullOrWhiteSpace(getD2.TotalCompleted) ? Convert.ToDouble(getD2.TotalCompleted) : 0;
}
result.Add(new WeldDineOutput
{
ProjectId = pro,
Size = pTotalWeldQuantity,
DoneDin = pTotalCompleted
});
}
return result;
}
public static async Task<IEnumerable<WeldDineOutput>> GetDineInfoAsync()
/// <summary>
/// 获取总达因数和完成达因数
/// </summary>
/// <returns></returns>
public static async Task<List<WeldDineOutput>> GetDineInfoAsync()
{
return await Task.Run(GetDineInfo);
}
@ -531,19 +716,6 @@ namespace BLL
/// <returns></returns>
public static List<CHCheckItemOutput> GetCHCheckItem()
{
//var result = (from x in Funs.DB.CH_CheckItem
// join y in Funs.DB.CH_Check on x.CHT_CheckID equals y.CHT_CheckID
// where BeUnderConstructionList.Contains(y.ProjectId)
// select new Model.CHCheckItemOutput()
// {
// Id = x.CHT_CheckItemID,
// ProjectId = y.ProjectId,
// UnitId = y.UnitId,
// CHT_TotalFilm = x.CHT_TotalFilm,
// CHT_PassFilm = x.CHT_PassFilm
// //UnitName = UnitService.getUnitNamesUnitIds(x.UnitIds),
// }).ToList();
List<CHCheckItemOutput> list = new List<CHCheckItemOutput>();
var ndtLists = (from x in Funs.DB.ProcessControl_NondestructiveTest_New where BeUnderConstructionList.Contains(x.ProjectId) select x).ToList();

View File

@ -259,7 +259,8 @@ namespace BLL
{
var db = Funs.DB;
var projectids = ProjectService.GetProjectWorkList().Select(x => x.ProjectId).ToList();
var projectids = HJGLData_HJGLService.BeUnderConstructionList;
//var projectids = ProjectService.GetProjectWorkList().Select(x => x.ProjectId).ToList();
var thisUnitId = string.Empty;
var thisUnit = CommonService.GetIsThisUnit();
if (thisUnit != null) thisUnitId = thisUnit.UnitId;

View File

@ -411,21 +411,6 @@ namespace BLL
/// <returns></returns>
public static int GetTotalFilmNum(string projectid)
{
//int result = Convert.ToInt32((from x in Funs.DB.CH_CheckItem
// join y in Funs.DB.CH_Check on x.CHT_CheckID equals y.CHT_CheckID
// where y.ProjectId == projectid
// select x.CHT_TotalFilm).ToList().Sum());
//int result = 0;
//var getD2 = (from x in Funs.DB.HJGL_FL_Data
// where x.ProjectId == projectid
// orderby x.CompileDate descending
// select x).FirstOrDefault();
//if (getD2 != null)
//{
// result = Funs.GetNewIntOrZero(getD2.OneTimeFilmAmount.Split('.')[0]);
//}
int result = Convert.ToInt32((from x in Funs.DB.ProcessControl_NondestructiveTest_New
where x.ProjectId == projectid && x.ProfessionalName == "工艺管道"
orderby x.CreateDate descending
@ -439,20 +424,6 @@ namespace BLL
/// <returns></returns>
public static int GetOKFilmNum(string projectid)
{
//int result = Convert.ToInt32((from x in Funs.DB.CH_CheckItem
// join y in Funs.DB.CH_Check on x.CHT_CheckID equals y.CHT_CheckID
// where
// select x.CHT_PassFilm).ToList().Sum());
//int result = 0;
//var getD2 = (from x in Funs.DB.HJGL_FL_Data
// where x.ProjectId == projectid
// orderby x.CompileDate descending
// select x).FirstOrDefault();
//if (getD2 != null)
//{
// result = Funs.GetNewIntOrZero(getD2.OneTimeFilmQualifiedAmount.Split('.')[0]);
//}
int result = 0;
var ndt = (from x in db.ProcessControl_NondestructiveTest_New where x.ProjectId == projectid && x.ProfessionalName == "工艺管道" orderby x.CreateDate descending select x).FirstOrDefault();
if (ndt != null)

View File

@ -163,11 +163,13 @@
<div class="hj-box_label"><asp:Literal runat="server" Text="<%$ Resources:Lan,main_new1_HjData_WelderNum_Label%>"/></div>
</div>
<div class="y_column">
<div class="hj-box_number"><%=GetTotalDineNum() %></div>
<%--<div class="hj-box_number"><%=GetTotalDineNum() %></div>--%>
<div class="hj-box_number"><%=WeldDine.Size %></div>
<div class="hj-box_label"><asp:Literal runat="server" Text="<%$ Resources:Lan,main_new1_HjData_TotalDineNum_Label%>"/></div>
</div>
<div class="y_column">
<div class="hj-box_number" style="color: #12CDA2;"><%=GetCompleteDineNum() %></div>
<%--<div class="hj-box_number" style="color: #12CDA2;"><%=GetCompleteDineNum() %></div>--%>
<div class="hj-box_number" style="color: #12CDA2;"><%=WeldDine.DoneDin %></div>
<div class="hj-box_label"><asp:Literal runat="server" Text="<%$ Resources:Lan,main_new1_HjData_CompleteDineNum_Label%>"/></div>
</div>
<div class="y_column">

View File

@ -1,6 +1,7 @@
using BLL;
using FineUIPro.Web.BaseInfo;
using FineUIPro.Web.DataShow;
using Model;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
@ -68,6 +69,9 @@ namespace FineUIPro.Web.common
getCNEN();
//焊接达因数
GetWeldDineOutput();
//焊接数据
double result = 0;
Model.SGGLDB db = Funs.DB;
@ -554,6 +558,76 @@ namespace FineUIPro.Web.common
return result;
}
}
protected WeldDineOutput WeldDine = new WeldDineOutput();
/// <summary>
/// 获取总达因数和完成达因数
/// </summary>
/// <returns></returns>
public WeldDineOutput GetWeldDineOutput()
{
var projectIds = new List<string>();
if (pids == null)
{
//加载所有在建项目的数据
projectIds = Funs.DB.Base_Project.Where(x => x.ProjectState == "1").Select(x => x.ProjectId).ToList();
}
else
{
projectIds = new List<string>(pids);
}
var result = new List<WeldDineOutput>();
var getD1 = from x in Funs.DB.HJGL_FL_TotalQuantity
where projectIds.Contains(x.ProjectId)
select x;
var proIds = getD1.Select(x => x.ProjectId).Distinct();
foreach (var pro in proIds)
{
double pTotalWeldQuantity = 0;
double pTotalCompleted = 0;
var proD1 = getD1.Where(x => x.ProjectId == pro);
foreach (var item in getD1)
{
var dAll = !string.IsNullOrWhiteSpace(item.TotalWeldQuantity) ? Convert.ToDouble(item.TotalWeldQuantity) : 0;
var dCompleted = !string.IsNullOrWhiteSpace(item.TotalCompleted) ? Convert.ToDouble(item.TotalCompleted) : 0;
pTotalWeldQuantity += dAll;
pTotalCompleted += dCompleted;
}
result.Add(new WeldDineOutput
{
ProjectId = pro,
Size = pTotalWeldQuantity,
DoneDin = pTotalCompleted
});
}
var differenceProjectIds = projectIds.Except(proIds).ToList();
foreach (var pro in differenceProjectIds)
{
double pTotalWeldQuantity = 0;
double pTotalCompleted = 0;
var getD2 = (from x in Funs.DB.HJGL_FL_Data
where x.ProjectId == pro
orderby x.CompileDate descending
select x).FirstOrDefault();
if (getD2 != null)
{
pTotalWeldQuantity = !string.IsNullOrWhiteSpace(getD2.TotalWeldQuantity) ? Convert.ToDouble(getD2.TotalWeldQuantity) : 0;
pTotalCompleted = !string.IsNullOrWhiteSpace(getD2.TotalCompleted) ? Convert.ToDouble(getD2.TotalCompleted) : 0;
}
result.Add(new WeldDineOutput
{
ProjectId = pro,
Size = pTotalWeldQuantity,
DoneDin = pTotalCompleted
});
}
WeldDine.Size = Convert.ToInt32(result.Sum(x => x.Size));
WeldDine.DoneDin = Convert.ToInt32(result.Sum(x => x.DoneDin));
return WeldDine;
}
/// <summary>
/// 获取总达因数
/// </summary>