From b6b20da09e72e9e287b252348e7700641d9745e8 Mon Sep 17 00:00:00 2001 From: 啊鑫 <t2856754968@163.com> Date: 星期一, 11 八月 2025 18:31:14 +0800 Subject: [PATCH] 11 --- MESApplication/Controllers/QC/XJController.cs | 22 +++ MES.Service/Modes/VDab.cs | 56 ++++++++ MES.Service/service/QC/XJService.cs | 196 ++++++++++++++++++++++++--- MES.Service/service/QC/BaseService.cs | 9 + MES.Service/Modes/QsQaItemXj.cs | 78 +++++----- MESApplication/Controllers/QC/BaseController.cs | 26 +++ 6 files changed, 324 insertions(+), 63 deletions(-) diff --git a/MES.Service/Modes/QsQaItemXj.cs b/MES.Service/Modes/QsQaItemXj.cs index 28c435a..a54b53a 100644 --- a/MES.Service/Modes/QsQaItemXj.cs +++ b/MES.Service/Modes/QsQaItemXj.cs @@ -21,108 +21,112 @@ public decimal? Id { get; set; } /// <summary> - /// 妫�楠屽崟鍙� + /// 妫�楠屽崟鍙� /// </summary> - [SugarColumn(ColumnName = "RELEASE_NO")] + [SugarColumn(ColumnName = "RELEASE_NO", Length = 100)] public string? ReleaseNo { get; set; } /// <summary> - /// 妫�楠屾棩鏈� + /// 妫�楠屾棩鏈� /// </summary> [SugarColumn(ColumnName = "FCHECK_DATE")] - public DateTime? FcheckDate { get; set; } + public DateTime? CheckDate { get; set; } /// <summary> - /// 妫�楠屼汉鍛� + /// 妫�楠屼汉鍛� /// </summary> - [SugarColumn(ColumnName = "FCHECK_BY")] - public string? FcheckBy { get; set; } + [SugarColumn(ColumnName = "FCHECK_BY", Length = 100)] + public string? CheckBy { get; set; } /// <summary> - /// 鐗╂枡缂栫爜 + /// 鐗╂枡缂栫爜 /// </summary> - [SugarColumn(ColumnName = "ITEM_NO")] + [SugarColumn(ColumnName = "ITEM_NO", Length = 100)] public string? ItemNo { get; set; } /// <summary> - /// 妫�楠岀粨鏋� + /// 妫�楠岀粨鏋� /// </summary> - [SugarColumn(ColumnName = "FCHECK_RESU")] - public string? FcheckResu { get; set; } + [SugarColumn(ColumnName = "FCHECK_RESU", Length = 100)] + public string? CheckResult { get; set; } /// <summary> - /// 鍒涘缓浜� + /// 鍒涘缓浜� /// </summary> - [SugarColumn(ColumnName = "CREATE_BY")] + [SugarColumn(ColumnName = "CREATE_BY", Length = 100)] public string? CreateBy { get; set; } /// <summary> - /// 鍒涘缓鏃ユ湡 + /// 鍒涘缓鏃ユ湡 /// </summary> [SugarColumn(ColumnName = "CREATE_DATE")] public DateTime? CreateDate { get; set; } /// <summary> - /// 鏇存柊浜� + /// 鏇存柊浜� /// </summary> - [SugarColumn(ColumnName = "LASTUPDATE_BY")] - public string? LastupdateBy { get; set; } + [SugarColumn(ColumnName = "LASTUPDATE_BY", Length = 100)] + public string? LastUpdateBy { get; set; } /// <summary> - /// 鏇存柊鏃ユ湡 + /// 鏇存柊鏃ユ湡 /// </summary> [SugarColumn(ColumnName = "LASTUPDATE_DATE")] - public DateTime? LastupdateDate { get; set; } + public DateTime? LastUpdateDate { get; set; } /// <summary> + /// 淇敼浜� /// </summary> - [SugarColumn(ColumnName = "MODIFY1_BY")] - public string? Modify1By { get; set; } + [SugarColumn(ColumnName = "MODIFY1_BY", Length = 100)] + public string? ModifyBy { get; set; } /// <summary> - /// 鍗曚綅 + /// 鐗╂枡鍗曚綅 /// </summary> - [SugarColumn(ColumnName = "ITEM_UNIT")] + [SugarColumn(ColumnName = "ITEM_UNIT", Length = 100)] public string? ItemUnit { get; set; } /// <summary> - /// 宸ュ崟鍙� + /// 宸ュ崟鍙� /// </summary> - [SugarColumn(ColumnName = "BILL_NO")] + [SugarColumn(ColumnName = "BILL_NO", Length = 50)] public string? BillNo { get; set; } /// <summary> - /// 妯″叿鍙� + /// 妯″叿鍙� /// </summary> - [SugarColumn(ColumnName = "MOID_NUM")] - public string? MoidNum { get; set; } + [SugarColumn(ColumnName = "MOID_NUM", Length = 50)] + public string? MoldNum { get; set; } /// <summary> + /// 鎻愪氦浜� /// </summary> - [SugarColumn(ColumnName = "FSUBMIT_BY")] - public string? FsubmitBy { get; set; } + [SugarColumn(ColumnName = "FSUBMIT_BY", Length = 50)] + public string? SubmitBy { get; set; } /// <summary> + /// 鎻愪氦鏃ユ湡 /// </summary> [SugarColumn(ColumnName = "FSUBMIT_DATE")] - public DateTime? FsubmitDate { get; set; } + public DateTime? SubmitDate { get; set; } /// <summary> + /// 鎻愪氦鐘舵�侊紙0/1锛� /// </summary> [SugarColumn(ColumnName = "FSUBMIT")] - public decimal? Fsubmit { get; set; } + public int? SubmitStatus { get; set; } /// <summary> - /// 澶囨敞 + /// 澶囨敞 /// </summary> - [SugarColumn(ColumnName = "REMARKS")] + [SugarColumn(ColumnName = "REMARKS", Length = 200)] public string? Remarks { get; set; } /// <summary> - /// 鐗╂枡ID + /// 鐗╂枡ID /// </summary> [SugarColumn(ColumnName = "ITEM_ID")] - public decimal? ItemId { get; set; } + public long? ItemId { get; set; } [SugarColumn(IsIgnore = true)] public string? Daa020 { get; set; } [SugarColumn(IsIgnore = true)] public decimal? PlanQty { get; set; } diff --git a/MES.Service/Modes/VDab.cs b/MES.Service/Modes/VDab.cs new file mode 100644 index 0000000..96de544 --- /dev/null +++ b/MES.Service/Modes/VDab.cs @@ -0,0 +1,56 @@ +锘縰sing SqlSugar; + +namespace MES.Service.Modes; + +[SugarTable("V_DAB")] +public class VDab +{ + + /// <summary> + /// 宸ュ崟 瀛楁 + /// </summary> + [SugarColumn(ColumnName = "DAB001")] + public string? Dab001 { get; set; } + + /// <summary> + /// 搴忓彿 瀛楁 + /// </summary> + [SugarColumn(ColumnName = "DAB002")] + public decimal? Dab002 { get; set; } + + /// <summary> + /// 闇�棰嗙敤閲� 瀛楁 + /// </summary> + [SugarColumn(ColumnName = "DAB006")] + public string? Dab006 { get; set; } + + /// <summary> + /// 鏉愭枡鍚嶇О 瀛楁 + /// </summary> + [SugarColumn(ColumnName = "DAB004")] + public string? Dab004 { get; set; } + + /// <summary> + /// 鏉愭枡瑙勬牸 瀛楁 + /// </summary> + [SugarColumn(ColumnName = "DAB005")] + public string? Dab005 { get; set; } + + /// <summary> + /// PID 瀛楁 + /// </summary> + [SugarColumn(ColumnName = "PID")] + public string? Pid { get; set; } + + /// <summary> + /// 鐗╂枡缂栧彿 瀛楁 + /// </summary> + [SugarColumn(ColumnName = "ITEM_NO")] + public string? ItemNo { get; set; } + + /// <summary> + /// 鍗曚綅 瀛楁 + /// </summary> + [SugarColumn(ColumnName = "FNUMBER")] + public string? FNumber { get; set; } +} \ No newline at end of file diff --git a/MES.Service/service/QC/BaseService.cs b/MES.Service/service/QC/BaseService.cs index a827168..4d25386 100644 --- a/MES.Service/service/QC/BaseService.cs +++ b/MES.Service/service/QC/BaseService.cs @@ -49,4 +49,13 @@ }); return mesQsImages; } + + public List<VDab> GetDabs(VDab queryObj) + { + var db = SqlSugarHelper.GetInstance(); + return db.Queryable<VDab>() + .Where(s => s.Dab001 == queryObj.Dab001) + .OrderBy(s => s.Dab002) + .ToList(); + } } \ No newline at end of file diff --git a/MES.Service/service/QC/XJService.cs b/MES.Service/service/QC/XJService.cs index 52fe9bc..d4c8dc3 100644 --- a/MES.Service/service/QC/XJService.cs +++ b/MES.Service/service/QC/XJService.cs @@ -134,11 +134,11 @@ .WhereIF( StringUtil.IsNotNullOrEmpty(queryObj.result) && "鏈畬鎴�".Equals(queryObj.result), - (s, a, c, b) => s.FcheckResu == null) + (s, a, c, b) => s.SubmitStatus == 0 || s.SubmitStatus == null) .WhereIF( StringUtil.IsNotNullOrEmpty(queryObj.result) && !"鏈畬鎴�".Equals(queryObj.result), - (s, a, c, b) => s.FcheckResu != null) + (s, a, c, b) => s.SubmitStatus == 1) .WhereIF(id > 0, (s, a, c, b) => s.Id == id) .Select((s, a, c, b) => new QsQaItemXj { @@ -152,8 +152,8 @@ BillNo = s.BillNo, ItemName = b.ItemName, ItemModel = b.ItemModel, - FcheckBy = s.FcheckBy, - FcheckResu = s.FcheckResu, + CheckBy = s.CheckBy, + CheckResult = s.CheckResult, Remarks = s.Remarks }).OrderBy(s => s.CreateDate, OrderByType.Desc); var items = query.ToPageList(queryObj.PageIndex, queryObj.Limit,ref totalCount); @@ -292,36 +292,180 @@ return Convert.ToInt32(xj.Id); } + + public bool XJQaSubmit(LLJDto rkjDto) + { + var useTransactionWithOracle = + SqlSugarHelper.UseTransactionWithOracle(db => + { + return db.Updateable<QsQaItemXj>() + .SetColumns(s => s.SubmitStatus == 1) + .SetColumns(s => s.SubmitBy == rkjDto.userNo) + .SetColumns(s => s.SubmitDate == DateTime.Now) + .Where(s => s.Id == rkjDto.gid) + .ExecuteCommand(); + }); + return useTransactionWithOracle > 0; + } + + // public int saveItem(XJDto xjDto) + // { + // var items = xjDto.items; + // var userNo = xjDto.userNo; + // + // SqlSugarHelper.UseTransactionWithOracle(db => + // { + // foreach (var item in items) item.Pid = xjDto.gid; + // + // return db.Insertable(items).ExecuteCommand(); + // }); + // + // xjDto.items = getJYItem(xjDto.gid, null); + // + // xjDto.items.ForEach(s => + // { + // if (s.MaxValue != null || s.StandardValue != null || + // s.MinValue != null) return; + // var detail = new QsQaItemXj02(); + // detail.Pid = s.Id; + // detail.Gid = xjDto.gid; + // detail.Fstand = "鈭�"; + // detail.FcheckResu = "1"; + // detail.UpdateBy = xjDto.userNo; + // detail.count = (int?)s.LevelNum; + // SetQSItemDetail(detail); + // }); + // + // return Convert.ToInt32(xjDto.gid); + // } public int saveItem(XJDto xjDto) { var items = xjDto.items; var userNo = xjDto.userNo; - SqlSugarHelper.UseTransactionWithOracle(db => + // 鏁版嵁楠岃瘉 + var validationResult = ValidateItemsData(items); + if (!validationResult.isValid) + throw new Exception($"妫�楠岄」鐩獙璇佸け璐�: {validationResult.errorMsg}"); + + return SqlSugarHelper.UseTransactionWithOracle(db => { + // 璁剧疆澶栭敭鍏宠仈骞舵壒閲忔彃鍏ュ瓙琛� foreach (var item in items) item.Pid = xjDto.gid; + db.Insertable(items).ExecuteCommand(); - return db.Insertable(items).ExecuteCommand(); + // 鑾峰彇妫�楠岄」鐩暟鎹� + var jyItems = getJYItemOptimized(db, xjDto.gid.Value); + + if (jyItems.Any()) + { + // 澶勭悊涓氬姟閫昏緫璁$畻 + var allDetails = PrepareDetailsData(jyItems, xjDto.gid.Value, userNo); + + if (allDetails.Count > 0) + { + // 鎵归噺鎻掑叆妫�楠岃鎯� + db.Insertable(allDetails).ExecuteCommand(); + + // 璁$畻缁撴灉 + var (pidResults, fcheckResu) = CalculateResults(allDetails, jyItems); + + // 鎵归噺鏇存柊妫�楠岄」鐩粨鏋� + foreach (var (pidValue, result) in pidResults) + { + db.Updateable<QsQaItemXj01>() + .SetColumns(s => s.IsPass == result) + .Where(s => s.Id == pidValue) + .ExecuteCommand(); + } + + // 鏇存柊涓昏〃妫�楠岀粨鏋� + var totalSum = jyItems.Where(x => x.MaxValue == null && x.StandardValue == null && x.MinValue == null) + .Sum(x => x.LevelNum); + if (totalSum == allDetails.Count) + { + db.Updateable<QsQaItemXj>() + .SetColumns(s => s.CheckResult == fcheckResu) + .SetColumns(s => s.CheckDate == DateTime.Now) + .SetColumns(s => s.CheckBy == userNo) + .SetColumns(s => s.LastUpdateBy == userNo) + .SetColumns(s => s.LastUpdateDate == DateTime.Now) + .Where(s => s.Id == xjDto.gid) + .ExecuteCommand(); + } + } + } + + return Convert.ToInt32(xjDto.gid); }); + } + + private List<QsQaItemXj01> getJYItemOptimized(ISqlSugarClient db, decimal xjId) + { + return db.Queryable<QsQaItemXj01>() + .Where(a => a.Pid == xjId) + .ToList(); + } + + private (bool isValid, string errorMsg) ValidateItemsData(List<QsQaItemXj01> items) + { + if (items == null || !items.Any()) return (false, "妫�楠岄」鐩笉鑳戒负绌�"); + + var invalidItems = items.Where(x => x.LevelNum <= 0 || string.IsNullOrEmpty(x.ProjName)).ToList(); + if (invalidItems.Any()) + return (false, $"瀛樺湪{invalidItems.Count}涓棤鏁堢殑妫�楠岄」鐩�"); + + return (true, ""); + } - xjDto.items = getJYItem(xjDto.gid, null); - - xjDto.items.ForEach(s => + private List<QsQaItemXj02> PrepareDetailsData(List<QsQaItemXj01> jyItems, decimal gid, string userNo) + { + var allDetails = new List<QsQaItemXj02>(); + var now = DateTime.Now; + + foreach (var s in jyItems) { - if (s.MaxValue != null || s.StandardValue != null || - s.MinValue != null) return; - var detail = new QsQaItemXj02(); - detail.Pid = s.Id; - detail.Gid = xjDto.gid; - detail.Fstand = "鈭�"; - detail.FcheckResu = "1"; - detail.UpdateBy = xjDto.userNo; - detail.count = (int?)s.LevelNum; - SetQSItemDetail(detail); - }); + if (s.MaxValue != null || s.StandardValue != null || s.MinValue != null) + continue; - return Convert.ToInt32(xjDto.gid); + for (var i = 0; i < s.LevelNum; i++) + { + allDetails.Add(new QsQaItemXj02 + { + Gid = gid, + Pid = s.Id, + Fstand = "鈭�", + FcheckResu = "1", + CreateBy = userNo, + CreateDate = now + }); + } + } + return allDetails; + } + + private (List<(decimal pid, int result)> pidResults, string fcheckResu) CalculateResults( + List<QsQaItemXj02> allDetails, List<QsQaItemXj01> jyItems) + { + var pidGroups = allDetails.GroupBy(x => x.Pid).ToList(); + var pidResults = new List<(decimal pid, int result)>(); + + foreach (var group in pidGroups) + { + var count = group.Count(); + var passCount = group.Count(x => x.Fstand == "鈭�"); + var result = (count == passCount) ? 1 : 0; + pidResults.Add((group.Key.Value, result)); + } + + var totalSum = jyItems.Where(x => x.MaxValue == null && x.StandardValue == null && x.MinValue == null) + .Sum(x => x.LevelNum); + var totalCount = allDetails.Count; + var totalPassCount = allDetails.Count(x => x.Fstand == "鈭�"); + var fcheckResu = (totalSum == totalCount && totalCount == totalPassCount) ? "鍚堟牸" : "涓嶅悎鏍�"; + + return (pidResults, fcheckResu); } @@ -442,11 +586,11 @@ SqlSugarHelper.UseTransactionWithOracle(db => { return db.Updateable<QsQaItemXj>() - .SetColumns(s => s.FcheckResu == FcheckResu) - .SetColumns(s => s.FcheckDate == DateTime.Now) - .SetColumns(s => s.FcheckBy == detail.CreateBy) - .SetColumns(s => s.LastupdateBy == detail.CreateBy) - .SetColumns(s => s.LastupdateDate == DateTime.Now) + .SetColumns(s => s.CheckResult == FcheckResu) + .SetColumns(s => s.CheckDate == DateTime.Now) + .SetColumns(s => s.CheckBy == detail.CreateBy) + .SetColumns(s => s.LastUpdateBy == detail.CreateBy) + .SetColumns(s => s.LastUpdateDate == DateTime.Now) .Where(s => s.Id == detail.Gid) .ExecuteCommand(); }); diff --git a/MESApplication/Controllers/QC/BaseController.cs b/MESApplication/Controllers/QC/BaseController.cs index dd54e7f..122d0df 100644 --- a/MESApplication/Controllers/QC/BaseController.cs +++ b/MESApplication/Controllers/QC/BaseController.cs @@ -1,5 +1,6 @@ 锘縰sing System.Dynamic; using MES.Service.Dto.service; +using MES.Service.Modes; using MES.Service.service.QC; using MES.Service.util; using Microsoft.AspNetCore.Mvc; @@ -81,4 +82,29 @@ return ResponseResult.ResponseError(ex); } } + + + // GetDabs(VDab queryObj) + [HttpPost("getDabs")] + public ResponseResult GetDabs(VDab queryObj) + { + + try + { + dynamic resultInfos = new ExpandoObject(); + var tbBillList = + new BaseService().GetDabs(queryObj); + resultInfos.tbBillList = tbBillList; + return new ResponseResult + { + status = 0, + message = "OK", + data = resultInfos + }; + } + catch (Exception ex) + { + return ResponseResult.ResponseError(ex); + } + } } \ No newline at end of file diff --git a/MESApplication/Controllers/QC/XJController.cs b/MESApplication/Controllers/QC/XJController.cs index 6ae5b7b..6e3a36d 100644 --- a/MESApplication/Controllers/QC/XJController.cs +++ b/MESApplication/Controllers/QC/XJController.cs @@ -442,4 +442,26 @@ return ResponseResult.ResponseError(ex); } } + + [HttpPost("XJQaSubmit")] + public ResponseResult XJQaSubmit(LLJDto rkjDto) + { + try + { + dynamic resultInfos = new ExpandoObject(); + var tbBillList = + new XJService().XJQaSubmit(rkjDto); + resultInfos.tbBillList = tbBillList; + return new ResponseResult + { + status = 0, + message = "OK", + data = resultInfos + }; + } + catch (Exception ex) + { + return ResponseResult.ResponseError(ex); + } + } } \ No newline at end of file -- Gitblit v1.9.3