From 201443e437bb38c042e05a47955f2494453a43e1 Mon Sep 17 00:00:00 2001 From: fei550 <1420031550@qq.com> Date: Thu, 11 Jun 2026 10:39:58 +0800 Subject: [PATCH] =?UTF-8?q?feat(hjgl):=20=E6=94=AF=E6=8C=81=E6=8C=89?= =?UTF-8?q?=E7=84=8A=E5=8F=A3=E5=8C=B9=E9=85=8D=E5=92=8C=E5=9B=9E=E5=86=99?= =?UTF-8?q?=E7=AE=A1=E7=BA=BF=E6=9D=90=E6=96=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 管线材料导入需要关联到具体焊口,并允许按材料编码匹配库存后回写 材料主编码。新增 HJGL_PipeLineMat 的焊口和材料编码字段,材料匹配、 任务生成和出库关系同步按焊口维度处理,避免仅按组件匹配导致材料 范围不准确。 --- DataBase/版本日志/SGGLDB_V2026-06-11-lpf.sql | 3 + SGGL/BLL/CLGL/TwArrivalStatisticsService.cs | 121 +++++++--- .../CLGL/TwInOutplandetailRelationService.cs | 52 +---- SGGL/BLL/CLGL/TwInOutplanmasterService.cs | 30 +-- .../HJGL/WeldingManage/PipelineMatService.cs | 38 +++ .../File/Excel/DataIn/PipelineMat.xlsx | Bin 8986 -> 9134 bytes SGGL/FineUIPro.Web/FineUIPro.Web.csproj | 2 +- .../HJGL/DataImport/MaterialInformation.aspx | 12 + .../DataImport/MaterialInformation.aspx.cs | 43 +++- .../HJGL/WeldingManage/PipelineMatIn.aspx.cs | 63 +++-- .../HJGL/WeldingManage/WeldMatMatch.aspx | 27 ++- .../HJGL/WeldingManage/WeldMatMatch.aspx.cs | 218 +++++++++++++----- .../WeldMatMatch.aspx.designer.cs | 9 + SGGL/Model/CLGL/Tw_PipeMatMatchOutput.cs | 4 + SGGL/Model/Model.cs | 72 ++++++ 15 files changed, 488 insertions(+), 206 deletions(-) create mode 100644 DataBase/版本日志/SGGLDB_V2026-06-11-lpf.sql diff --git a/DataBase/版本日志/SGGLDB_V2026-06-11-lpf.sql b/DataBase/版本日志/SGGLDB_V2026-06-11-lpf.sql new file mode 100644 index 00000000..4a70683b --- /dev/null +++ b/DataBase/版本日志/SGGLDB_V2026-06-11-lpf.sql @@ -0,0 +1,3 @@ +ALTER table HJGL_PipeLineMat add WeldJointId nvarchar(50); +ALTER table HJGL_PipeLineMat add MaterialCode2 nvarchar(50); +ALTER table Tw_InOutPlanDetail_Relation add WeldJointId nvarchar(50); diff --git a/SGGL/BLL/CLGL/TwArrivalStatisticsService.cs b/SGGL/BLL/CLGL/TwArrivalStatisticsService.cs index 896701d7..e515799d 100644 --- a/SGGL/BLL/CLGL/TwArrivalStatisticsService.cs +++ b/SGGL/BLL/CLGL/TwArrivalStatisticsService.cs @@ -94,14 +94,14 @@ namespace BLL /// /// /// - public static List GetMatMatchOutput(List requiredMaterials, string warehouseCode, string projectId) + public static List GetMatMatchOutput(List requiredMaterials, string warehouseCode, string projectId, bool matchByMaterialCodeLibCode = false) { Tw_MaterialStockOutput twMaterialStockOutput = new Tw_MaterialStockOutput { WarehouseCode = warehouseCode, ProjectId = projectId }; -var stockList = TwMaterialstockService.GetTw_MaterialStockByModle(twMaterialStockOutput).ToList();//获取库存列表 + var stockList = TwMaterialstockService.GetTw_MaterialStockByModle(twMaterialStockOutput).ToList();//获取库存列表 // 预扣除出库申请单中状态为待审核/已审核的材料数量 using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) @@ -133,7 +133,14 @@ var stockList = TwMaterialstockService.GetTw_MaterialStockByModle(twMaterialStoc foreach (var material in requiredMaterials) { material.Id = Guid.NewGuid().ToString(); - var thisMaterialStockNum = stockList.FirstOrDefault(x => x.PipeLineMatCode == material.MaterialCode)?.StockNum ?? 0; + var stock = matchByMaterialCodeLibCode + ? stockList + .Where(x => x.Code == material.MaterialCode && (x.StockNum ?? 0) > 0) + .OrderByDescending(x => (x.StockNum ?? 0) >= (material.NeedNum ?? 0)) + .ThenBy(x => x.PipeLineMatCode) + .FirstOrDefault() + : stockList.FirstOrDefault(x => x.PipeLineMatCode == material.MaterialCode); + var thisMaterialStockNum = stock?.StockNum ?? 0; if (thisMaterialStockNum >= material.NeedNum) { material.MatchNum = material.NeedNum; @@ -147,8 +154,8 @@ var stockList = TwMaterialstockService.GetTw_MaterialStockByModle(twMaterialStoc material.MatchRateString = Math.Round((decimal)(material.MatchRate ?? 0) * 100, 2).ToString() + "%"; } + material.MatchMaterialCode = stock?.PipeLineMatCode; //修改stockList对应的库存数量 - var stock = stockList.FirstOrDefault(x => x.PipeLineMatCode == material.MaterialCode); if (stock != null) { stock.StockNum -= material.MatchNum; @@ -246,56 +253,104 @@ var stockList = TwMaterialstockService.GetTw_MaterialStockByModle(twMaterialStoc /// /// /// - public static List GetPipeMatMatch(string projectId, List pipelineIds, string warehouseCode, Dictionary> priorityComponents = null) + public static List GetPipeMatMatch(string projectId, List pipelineIds, string warehouseCode, Dictionary> priorityWeldJoints = null) { using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) { var results = new List(); // 获取所需材料列表 - var requiredMaterials = (from x in db.HJGL_PipeLineMat - join y in db.HJGL_MaterialCodeLib on x.MaterialCode equals y.MaterialCode + var pipeLineMats = (from x in db.HJGL_PipeLineMat join z in db.HJGL_Pipeline on x.PipelineId equals z.PipelineId join m in db.WBS_UnitWork on z.UnitWorkId equals m.UnitWorkId - where z.ProjectId == projectId && pipelineIds.Contains(z.PipelineId) && x.PrefabricatedComponents != "" //x.PrefabricatedComponents!="" 用于筛选非散件材料 - select new Tw_PipeMatMatchOutput - { - Id = Guid.NewGuid().ToString(), - PipelineId = x.PipelineId, - PipelineCode = z.PipelineCode, - UnitWorkId = z.UnitWorkId, - UnitWorkName = m.UnitWorkName, - PrefabricatedComponents = x.PrefabricatedComponents, - MaterialCode = x.MaterialCode, - Code = y.Code, - HeatNo = y.HeatNo, - BatchNo = y.BatchNo, - MaterialName = y.MaterialName, - MaterialSpec = y.MaterialSpec, - MaterialUnit = y.MaterialUnit, - MaterialDef = y.MaterialDef, - NeedNum = x.Number, - } - ).ToList(); + join w in db.HJGL_WeldJoint on x.WeldJointId equals w.WeldJointId into weldJoin + from w in weldJoin.DefaultIfEmpty() + where z.ProjectId == projectId && pipelineIds.Contains(z.PipelineId) && x.PrefabricatedComponents != "" //x.PrefabricatedComponents!="" 用于筛选非散件材料 + select new + { + PipeLineMat = x, + PipelineCode = z.PipelineCode, + UnitWorkId = z.UnitWorkId, + UnitWorkName = m.UnitWorkName, + WeldJointCode = w == null ? null : w.WeldJointCode + }).ToList(); + + var materialCodes = pipeLineMats + .Where(x => !string.IsNullOrEmpty(x.PipeLineMat.MaterialCode)) + .Select(x => x.PipeLineMat.MaterialCode) + .Distinct() + .ToList(); + var materialCode2s = pipeLineMats + .Where(x => !string.IsNullOrEmpty(x.PipeLineMat.MaterialCode2)) + .Select(x => x.PipeLineMat.MaterialCode2) + .Distinct() + .ToList(); + var libByMaterialCode = db.HJGL_MaterialCodeLib + .Where(x => materialCodes.Contains(x.MaterialCode)) + .ToList() + .GroupBy(x => x.MaterialCode) + .ToDictionary(x => x.Key, x => x.First()); + var libByCode = db.HJGL_MaterialCodeLib + .Where(x => materialCode2s.Contains(x.Code)) + .ToList() + .GroupBy(x => x.Code) + .ToDictionary(x => x.Key, x => x.First()); + + var requiredMaterials = pipeLineMats.Select(x => + { + HJGL_MaterialCodeLib lib = null; + if (!string.IsNullOrEmpty(x.PipeLineMat.MaterialCode) && libByMaterialCode.ContainsKey(x.PipeLineMat.MaterialCode)) + { + lib = libByMaterialCode[x.PipeLineMat.MaterialCode]; + } + else if (!string.IsNullOrEmpty(x.PipeLineMat.MaterialCode2) && libByCode.ContainsKey(x.PipeLineMat.MaterialCode2)) + { + lib = libByCode[x.PipeLineMat.MaterialCode2]; + } + + string code = !string.IsNullOrEmpty(x.PipeLineMat.MaterialCode2) ? x.PipeLineMat.MaterialCode2 : lib?.Code; + return new Tw_PipeMatMatchOutput + { + Id = Guid.NewGuid().ToString(), + PipeLineMatId = x.PipeLineMat.PipeLineMatId, + PipelineId = x.PipeLineMat.PipelineId, + PipelineCode = x.PipelineCode, + UnitWorkId = x.UnitWorkId, + UnitWorkName = x.UnitWorkName, + PrefabricatedComponents = x.PipeLineMat.PrefabricatedComponents, + WeldJointId = x.PipeLineMat.WeldJointId, + WeldJointCode = x.WeldJointCode, + MaterialCode = code, + MatchMaterialCode = x.PipeLineMat.MaterialCode, + Code = code, + HeatNo = lib?.HeatNo, + BatchNo = lib?.BatchNo, + MaterialName = lib?.MaterialName, + MaterialSpec = lib?.MaterialSpec, + MaterialUnit = lib?.MaterialUnit, + MaterialDef = lib?.MaterialDef, + NeedNum = x.PipeLineMat.Number, + }; + }).ToList(); var newRequiredMaterials = new List(); foreach (string id in pipelineIds) { var pipelineMaterials = requiredMaterials.Where(x => x.PipelineId == id).ToList(); - if (priorityComponents != null && priorityComponents.ContainsKey(id) && priorityComponents[id] != null && priorityComponents[id].Any()) + if (priorityWeldJoints != null && priorityWeldJoints.ContainsKey(id) && priorityWeldJoints[id] != null && priorityWeldJoints[id].Any()) { - var components = priorityComponents[id]; + var weldJointIds = priorityWeldJoints[id]; newRequiredMaterials.AddRange(pipelineMaterials - .Where(x => components.Contains(x.PrefabricatedComponents)) - .OrderBy(x => components.IndexOf(x.PrefabricatedComponents))); + .Where(x => weldJointIds.Contains(x.WeldJointId)) + .OrderBy(x => weldJointIds.IndexOf(x.WeldJointId))); newRequiredMaterials.AddRange(pipelineMaterials - .Where(x => !components.Contains(x.PrefabricatedComponents))); + .Where(x => !weldJointIds.Contains(x.WeldJointId))); } else { newRequiredMaterials.AddRange(pipelineMaterials); } } - results = GetMatMatchOutput(newRequiredMaterials, warehouseCode, projectId); + results = GetMatMatchOutput(newRequiredMaterials, warehouseCode, projectId, true); return results; } } diff --git a/SGGL/BLL/CLGL/TwInOutplandetailRelationService.cs b/SGGL/BLL/CLGL/TwInOutplandetailRelationService.cs index ea011d04..7ce7ca5e 100644 --- a/SGGL/BLL/CLGL/TwInOutplandetailRelationService.cs +++ b/SGGL/BLL/CLGL/TwInOutplandetailRelationService.cs @@ -102,6 +102,7 @@ namespace BLL MaterialCode = newtable.MaterialCode, PrefabricatedComponents = newtable.PrefabricatedComponents, Number = newtable.Number, + WeldJointId = newtable.WeldJointId, }; Funs.DB.Tw_InOutPlanDetail_Relation.InsertOnSubmit(table); Funs.DB.SubmitChanges(); @@ -133,6 +134,7 @@ namespace BLL table.MaterialCode = newtable.MaterialCode; table.PrefabricatedComponents = newtable.PrefabricatedComponents; table.Number = newtable.Number; + table.WeldJointId = newtable.WeldJointId; Funs.DB.SubmitChanges(); } @@ -158,56 +160,6 @@ namespace BLL } } - public static void InsertByPipeLineMat(string inOutPlanMasterId, List tw_PipeLineMats) - { - var master = TwInOutplanmasterService.GetById(inOutPlanMasterId); - if (master == null) - { - return; - } - var outMateriaList = from x in tw_PipeLineMats - group x by new { x.MaterialCode, x.MaterialUnit } - into g - select new - { - g.Key.MaterialCode, - planNum = g.Sum(x => x.Number) ?? 0, - MaterialName = g.Key.MaterialUnit, - }; - - switch (master.Category) - { - case (int)TwConst.Category.管段: - outMateriaList.Where(x => x.MaterialName.Contains("米"));//管段 - break; - case (int)TwConst.Category.管件: - outMateriaList.Where(x => x.MaterialName.Contains("个"));//管件 - break; - } - - foreach (var item in outMateriaList) - { - Model.Tw_InOutPlanDetail detail = new Model.Tw_InOutPlanDetail - { - Id = Guid.NewGuid().ToString(), - InOutPlanMasterId = inOutPlanMasterId, - MaterialCode = item.MaterialCode, - PlanNum = item.planNum, - }; - TwInOutplandetailService.Add(detail); - } - var twinoutplandetailRelationList = tw_PipeLineMats.Select(x => new Tw_InOutPlanDetail_Relation - { - PipelineId = x.PipelineId, - MaterialCode = x.MaterialCode, - Number = x.Number, - PrefabricatedComponents = x.PrefabricatedComponents, - }).ToList(); - TwInoutplandetailRelationService.AddList(twinoutplandetailRelationList, inOutPlanMasterId); - - } - - public static IEnumerable GetPrintListByOutputMasterIds(List outputMasterIds) { var q = from x in Funs.DB.Tw_InOutPlanDetail_Relation diff --git a/SGGL/BLL/CLGL/TwInOutplanmasterService.cs b/SGGL/BLL/CLGL/TwInOutplanmasterService.cs index 052dd234..539252f2 100644 --- a/SGGL/BLL/CLGL/TwInOutplanmasterService.cs +++ b/SGGL/BLL/CLGL/TwInOutplanmasterService.cs @@ -992,36 +992,22 @@ namespace BLL .Select(e => e.WeldJointId) .Distinct() .ToList(); - var taskComponents = (from relation in db.HJGL_Pipeline_ComponentJoint - join component in db.HJGL_Pipeline_Component on relation.PipelineComponentId equals component.PipelineComponentId into componentJoin - from componentItem in componentJoin.DefaultIfEmpty() - join weldJointItem in db.HJGL_WeldJoint on relation.WeldJointId equals weldJointItem.WeldJointId - where taskWeldJointIds.Contains(relation.WeldJointId) - && weldJointItem.PipelineId != null - && (relation.PipelineComponentCode != null || (componentItem != null && componentItem.PipelineComponentCode != null)) - select new - { - PipelineId = weldJointItem.PipelineId, - PipelineComponentCode = componentItem != null && componentItem.PipelineComponentCode != null ? componentItem.PipelineComponentCode : relation.PipelineComponentCode - }).Distinct().ToList(); //领料出库需要排除散件材料 var allMaterDatial = (from x in db.HJGL_PipeLineMat join y in db.HJGL_MaterialCodeLib on x.MaterialCode equals y.MaterialCode - where pipelineList.Contains(x.PipelineId) && x.PrefabricatedComponents != null + where pipelineList.Contains(x.PipelineId) + && taskWeldJointIds.Contains(x.WeldJointId) + && x.PrefabricatedComponents != null select new { x.PipelineId, x.PrefabricatedComponents, + x.WeldJointId, x.MaterialCode, x.Number, y.MaterialUnit, }).ToList(); - var componentPipelineIds = taskComponents.Select(x => x.PipelineId).Distinct().ToList(); - var MaterDatial = taskComponents.Any() - ? allMaterDatial.Where(mat => !componentPipelineIds.Contains(mat.PipelineId) - || taskComponents.Any(component => component.PipelineId == mat.PipelineId - && component.PipelineComponentCode == mat.PrefabricatedComponents)).ToList() - : allMaterDatial; + var MaterDatial = allMaterDatial; //var outMateriaList = from x in db.HJGL_PipeLineMat // join y in db.HJGL_MaterialCodeLib on x.MaterialCode equals y.MaterialCode // where pipelineList.Contains(x.PipelineId) @@ -1077,12 +1063,13 @@ namespace BLL }; TwInOutplandetailService.Add(detail); } - var twinoutplandetailRelationList = MaterDatial.Select(x => new Tw_InOutPlanDetail_Relation + var twinoutplandetailRelationList = MaterDatial.Where(x => x.MaterialUnit.Contains("个")).Select(x => new Tw_InOutPlanDetail_Relation { PipelineId = x.PipelineId, MaterialCode = x.MaterialCode, Number = x.Number, PrefabricatedComponents = x.PrefabricatedComponents, + WeldJointId = x.WeldJointId, }).ToList(); TwInoutplandetailRelationService.AddList(twinoutplandetailRelationList, table.Id); } @@ -1116,12 +1103,13 @@ namespace BLL }; TwInOutplandetailService.Add(detail); } - var twinoutplandetailRelationList = MaterDatial.Select(x => new Tw_InOutPlanDetail_Relation + var twinoutplandetailRelationList = MaterDatial.Where(x => x.MaterialUnit.Contains("米")).Select(x => new Tw_InOutPlanDetail_Relation { PipelineId = x.PipelineId, MaterialCode = x.MaterialCode, Number = x.Number, PrefabricatedComponents = x.PrefabricatedComponents, + WeldJointId = x.WeldJointId, }).ToList(); TwInoutplandetailRelationService.AddList(twinoutplandetailRelationList, table.Id); } diff --git a/SGGL/BLL/HJGL/WeldingManage/PipelineMatService.cs b/SGGL/BLL/HJGL/WeldingManage/PipelineMatService.cs index 5a1b7b27..07b2b998 100644 --- a/SGGL/BLL/HJGL/WeldingManage/PipelineMatService.cs +++ b/SGGL/BLL/HJGL/WeldingManage/PipelineMatService.cs @@ -31,6 +31,8 @@ namespace BLL { PipeLineMatId = pipelineMat.PipeLineMatId, MaterialCode = pipelineMat.MaterialCode, + MaterialCode2 = pipelineMat.MaterialCode2, + WeldJointId = pipelineMat.WeldJointId, PipelineId = pipelineMat.PipelineId, Number = pipelineMat.Number, PrefabricatedComponents = pipelineMat.PrefabricatedComponents, @@ -50,12 +52,48 @@ namespace BLL if (newPipelineMat != null) { newPipelineMat.MaterialCode = pipelineMat.MaterialCode; + newPipelineMat.MaterialCode2 = pipelineMat.MaterialCode2; + newPipelineMat.WeldJointId = pipelineMat.WeldJointId; newPipelineMat.PipelineId = pipelineMat.PipelineId; newPipelineMat.Number = pipelineMat.Number; newPipelineMat.PrefabricatedComponents = pipelineMat.PrefabricatedComponents; db.SubmitChanges(); } } + + /// + /// 根据材料匹配结果反写材料主编码 + /// + /// 匹配成功的管线材料 + /// 反写数量 + public static int UpdateMaterialCodeByMatchOutputs(IEnumerable matchedMaterials) + { + Model.SGGLDB db = Funs.DB; + int count = 0; + foreach (var item in matchedMaterials) + { + if (item == null || string.IsNullOrEmpty(item.PipeLineMatId) || string.IsNullOrEmpty(item.MatchMaterialCode)) + { + continue; + } + + var pipeLineMat = db.HJGL_PipeLineMat.FirstOrDefault(e => e.PipeLineMatId == item.PipeLineMatId); + if (pipeLineMat == null) + { + continue; + } + + pipeLineMat.MaterialCode = item.MatchMaterialCode; + count++; + } + + if (count > 0) + { + db.SubmitChanges(); + } + + return count; + } /// /// 根据unitworkid删除焊口 /// diff --git a/SGGL/FineUIPro.Web/File/Excel/DataIn/PipelineMat.xlsx b/SGGL/FineUIPro.Web/File/Excel/DataIn/PipelineMat.xlsx index d21e1b9b26b67131f1ba5a4d3aadc30a8e7adb28..f5949321ad7f988ec0aa04f8a6428067d7db18a0 100644 GIT binary patch literal 9134 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 --> - + \ No newline at end of file diff --git a/SGGL/FineUIPro.Web/HJGL/DataImport/MaterialInformation.aspx b/SGGL/FineUIPro.Web/HJGL/DataImport/MaterialInformation.aspx index ff4b0ce8..46d743df 100644 --- a/SGGL/FineUIPro.Web/HJGL/DataImport/MaterialInformation.aspx +++ b/SGGL/FineUIPro.Web/HJGL/DataImport/MaterialInformation.aspx @@ -119,6 +119,10 @@ FieldType="String" HeaderText="预制组件" HeaderTextAlign="Center" TextAlign="Left"> + + @@ -178,6 +182,10 @@ + + @@ -235,6 +243,10 @@ + + diff --git a/SGGL/FineUIPro.Web/HJGL/DataImport/MaterialInformation.aspx.cs b/SGGL/FineUIPro.Web/HJGL/DataImport/MaterialInformation.aspx.cs index 36f6deb8..c4889bdc 100644 --- a/SGGL/FineUIPro.Web/HJGL/DataImport/MaterialInformation.aspx.cs +++ b/SGGL/FineUIPro.Web/HJGL/DataImport/MaterialInformation.aspx.cs @@ -195,7 +195,7 @@ namespace FineUIPro.Web.HJGL.DataImport return (from x in Funs.DB.HJGL_Pipeline join y in Funs.DB.PTP_PipelineList on x.PipelineId equals y.PipelineId join z in Funs.DB.PTP_TestPackage on y.PTP_ID equals z.PTP_ID - join m in Funs.DB.HJGL_PipeLineMat.Where(e => e.MaterialCode.Contains(txtMaterialCode.Text.Trim())) + join m in Funs.DB.HJGL_PipeLineMat.Where(e => (e.MaterialCode != null && e.MaterialCode.Contains(txtMaterialCode.Text.Trim())) || (e.MaterialCode2 != null && e.MaterialCode2.Contains(txtMaterialCode.Text.Trim()))) on x.PipelineId equals m.PipelineId into temp from m in temp.DefaultIfEmpty() where x.ProjectId == this.CurrUser.LoginProjectId @@ -241,7 +241,7 @@ namespace FineUIPro.Web.HJGL.DataImport { return (from x in Funs.DB.HJGL_Pipeline join y in Funs.DB.PTP_PipelineList on x.PipelineId equals y.PipelineId - join m in Funs.DB.HJGL_PipeLineMat.Where(e => e.MaterialCode.Contains(txtMaterialCode.Text.Trim())) + join m in Funs.DB.HJGL_PipeLineMat.Where(e => (e.MaterialCode != null && e.MaterialCode.Contains(txtMaterialCode.Text.Trim())) || (e.MaterialCode2 != null && e.MaterialCode2.Contains(txtMaterialCode.Text.Trim()))) on x.PipelineId equals m.PipelineId into temp from m in temp.DefaultIfEmpty() where y.PTP_ID == ptpId @@ -320,11 +320,18 @@ namespace FineUIPro.Web.HJGL.DataImport /// private void BindGrid1(string pipelineId, string unitworkid) { - string strSql = @" SELECT pipe.PipeLineMatId, lib.MaterialCode,lib.Code,lib.HeatNo,lib.BatchNo,lib.MaterialName,lib.MaterialUnit, - lib.MaterialSpec,lib.MaterialMade,lib.MaterialDef,pipe.Number,pipe.PrefabricatedComponents + string strSql = @" SELECT pipe.PipeLineMatId, pipe.MaterialCode,ISNULL(pipe.MaterialCode2, lib.Code) AS Code,lib.HeatNo,lib.BatchNo, + ISNULL(lib.MaterialName, libCode.MaterialName) AS MaterialName, + ISNULL(lib.MaterialUnit, libCode.MaterialUnit) AS MaterialUnit, + ISNULL(lib.MaterialSpec, libCode.MaterialSpec) AS MaterialSpec, + ISNULL(lib.MaterialMade, libCode.MaterialMade) AS MaterialMade, + ISNULL(lib.MaterialDef, libCode.MaterialDef) AS MaterialDef, + pipe.Number,pipe.PrefabricatedComponents,weld.WeldJointCode FROM dbo.HJGL_PipeLineMat pipe LEFT JOIN dbo.HJGL_MaterialCodeLib lib ON lib.MaterialCode = pipe.MaterialCode LEFT JOIN HJGL_Pipeline line ON pipe.PipelineId=line.PipelineId + OUTER APPLY (SELECT TOP 1 * FROM dbo.HJGL_MaterialCodeLib codeLib WHERE codeLib.ProjectId=line.ProjectId AND codeLib.Code=pipe.MaterialCode2 ORDER BY codeLib.MaterialCode) libCode + LEFT JOIN dbo.HJGL_WeldJoint weld ON weld.WeldJointId = pipe.WeldJointId WHERE line.UnitWorkId=@UnitWorkId and line.PipeArea='1' and pipe.PrefabricatedComponents !='' "; List listStr = new List(); //if (!string.IsNullOrEmpty(txtMaterialCode.Text.Trim())) @@ -340,7 +347,7 @@ namespace FineUIPro.Web.HJGL.DataImport } if (!string.IsNullOrEmpty(txtMaterialCode2.Text.Trim())) { - strSql += " and lib.MaterialCode like @MaterialCode "; + strSql += " and (pipe.MaterialCode2 like @MaterialCode or lib.MaterialCode like @MaterialCode or lib.Code like @MaterialCode) "; listStr.Add(new SqlParameter("@MaterialCode", "%" + txtMaterialCode2.Text.Trim() + "%")); } @@ -355,11 +362,18 @@ namespace FineUIPro.Web.HJGL.DataImport } private void BindGrid2(string pipelineId, string unitworkid) { - string strSql = @" SELECT pipe.PipeLineMatId, lib.MaterialCode,lib.Code,lib.HeatNo,lib.BatchNo,lib.MaterialName,lib.MaterialUnit, - lib.MaterialSpec,lib.MaterialMade,lib.MaterialDef,pipe.Number + string strSql = @" SELECT pipe.PipeLineMatId, pipe.MaterialCode,ISNULL(pipe.MaterialCode2, lib.Code) AS Code,lib.HeatNo,lib.BatchNo, + ISNULL(lib.MaterialName, libCode.MaterialName) AS MaterialName, + ISNULL(lib.MaterialUnit, libCode.MaterialUnit) AS MaterialUnit, + ISNULL(lib.MaterialSpec, libCode.MaterialSpec) AS MaterialSpec, + ISNULL(lib.MaterialMade, libCode.MaterialMade) AS MaterialMade, + ISNULL(lib.MaterialDef, libCode.MaterialDef) AS MaterialDef, + pipe.Number,weld.WeldJointCode FROM dbo.HJGL_PipeLineMat pipe LEFT JOIN dbo.HJGL_MaterialCodeLib lib ON lib.MaterialCode = pipe.MaterialCode LEFT JOIN HJGL_Pipeline line ON pipe.PipelineId=line.PipelineId + OUTER APPLY (SELECT TOP 1 * FROM dbo.HJGL_MaterialCodeLib codeLib WHERE codeLib.ProjectId=line.ProjectId AND codeLib.Code=pipe.MaterialCode2 ORDER BY codeLib.MaterialCode) libCode + LEFT JOIN dbo.HJGL_WeldJoint weld ON weld.WeldJointId = pipe.WeldJointId WHERE line.UnitWorkId=@UnitWorkId and line.PipeArea='2' "; List listStr = new List(); if (!string.IsNullOrEmpty(pipelineId)) @@ -370,7 +384,7 @@ namespace FineUIPro.Web.HJGL.DataImport } if (!string.IsNullOrEmpty(txtMaterialCode2.Text.Trim())) { - strSql += " and lib.MaterialCode like @MaterialCode "; + strSql += " and (pipe.MaterialCode2 like @MaterialCode or lib.MaterialCode like @MaterialCode or lib.Code like @MaterialCode) "; listStr.Add(new SqlParameter("@MaterialCode", "%" + txtMaterialCode2.Text.Trim() + "%")); } @@ -386,11 +400,18 @@ namespace FineUIPro.Web.HJGL.DataImport private void BindGrid3(string pipelineId, string unitworkid) { - string strSql = @" SELECT pipe.PipeLineMatId, lib.MaterialCode,lib.Code,lib.HeatNo,lib.BatchNo,lib.MaterialName,lib.MaterialUnit, - lib.MaterialSpec,lib.MaterialMade,lib.MaterialDef,pipe.Number,pipe.PrefabricatedComponents + string strSql = @" SELECT pipe.PipeLineMatId, pipe.MaterialCode,ISNULL(pipe.MaterialCode2, lib.Code) AS Code,lib.HeatNo,lib.BatchNo, + ISNULL(lib.MaterialName, libCode.MaterialName) AS MaterialName, + ISNULL(lib.MaterialUnit, libCode.MaterialUnit) AS MaterialUnit, + ISNULL(lib.MaterialSpec, libCode.MaterialSpec) AS MaterialSpec, + ISNULL(lib.MaterialMade, libCode.MaterialMade) AS MaterialMade, + ISNULL(lib.MaterialDef, libCode.MaterialDef) AS MaterialDef, + pipe.Number,pipe.PrefabricatedComponents,weld.WeldJointCode FROM dbo.HJGL_PipeLineMat pipe LEFT JOIN dbo.HJGL_MaterialCodeLib lib ON lib.MaterialCode = pipe.MaterialCode LEFT JOIN HJGL_Pipeline line ON pipe.PipelineId=line.PipelineId + OUTER APPLY (SELECT TOP 1 * FROM dbo.HJGL_MaterialCodeLib codeLib WHERE codeLib.ProjectId=line.ProjectId AND codeLib.Code=pipe.MaterialCode2 ORDER BY codeLib.MaterialCode) libCode + LEFT JOIN dbo.HJGL_WeldJoint weld ON weld.WeldJointId = pipe.WeldJointId WHERE line.UnitWorkId=@UnitWorkId and line.PipeArea='1' and (pipe.PrefabricatedComponents is null or pipe.PrefabricatedComponents='') "; List listStr = new List(); //if (!string.IsNullOrEmpty(txtMaterialCode.Text.Trim())) @@ -406,7 +427,7 @@ namespace FineUIPro.Web.HJGL.DataImport } if (!string.IsNullOrEmpty(txtMaterialCode2.Text.Trim())) { - strSql += " and lib.MaterialCode like @MaterialCode "; + strSql += " and (pipe.MaterialCode2 like @MaterialCode or lib.MaterialCode like @MaterialCode or lib.Code like @MaterialCode) "; listStr.Add(new SqlParameter("@MaterialCode", "%" + txtMaterialCode2.Text.Trim() + "%")); } diff --git a/SGGL/FineUIPro.Web/HJGL/WeldingManage/PipelineMatIn.aspx.cs b/SGGL/FineUIPro.Web/HJGL/WeldingManage/PipelineMatIn.aspx.cs index 719ec24c..34e12ba8 100644 --- a/SGGL/FineUIPro.Web/HJGL/WeldingManage/PipelineMatIn.aspx.cs +++ b/SGGL/FineUIPro.Web/HJGL/WeldingManage/PipelineMatIn.aspx.cs @@ -138,7 +138,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage Model.ResponeData responeData = new Model.ResponeData(); List result = new List(); - if (count < 6) + if (count < 5) { responeData.code = 0; responeData.message = "导入Excel格式错误!Excel只有" + count.ToString().Trim() + "列"; @@ -182,43 +182,48 @@ namespace FineUIPro.Web.HJGL.WeldingManage if (pds[i].C != null && !string.IsNullOrEmpty(pds[i].C.ToString())) { - string materialCode = pds[i].C.ToString().Trim(); - string furnaceNo = pds[i].D == null ? string.Empty : pds[i].D.ToString().Trim(); - string batchNo = pds[i].E == null ? string.Empty : pds[i].E.ToString().Trim(); - if (pds[i].D == null || string.IsNullOrEmpty(pds[i].D.ToString())) + if (!string.IsNullOrEmpty(item.PipelineId)) { - result.Add((i + 2) + "Line, [炉号] 不能为空
"); - } - if (pds[i].E == null || string.IsNullOrEmpty(pds[i].E.ToString())) - { - result.Add((i + 2) + "Line, [批号] 不能为空
"); - } - if (!string.IsNullOrEmpty(materialCode) && !string.IsNullOrEmpty(furnaceNo) && !string.IsNullOrEmpty(batchNo)) - { - string fullMaterialCode = materialCode + "-" + furnaceNo + "-" + batchNo; - var lib = from x in Funs.DB.HJGL_MaterialCodeLib where x.MaterialCode == fullMaterialCode select x; - if (lib.Count() > 0) + string weldJointCode = pds[i].C.ToString().Trim(); + var weldJoint = BLL.WeldJointService.GetWeldJointsByWeldJointCode(item.PipelineId, weldJointCode); + if (weldJoint != null) { - item.MaterialCode = fullMaterialCode; + item.WeldJointId = weldJoint.WeldJointId; } else { - result.Add("不存在此材料:" + fullMaterialCode); - + result.Add("第" + (i + 2).ToString() + "行,当前管线不存在此焊口号-" + weldJointCode + "
"); } } + } + else + { + result.Add((i + 2) + "Line, [焊口号] 不能为空
"); + } + if (pds[i].D != null && !string.IsNullOrEmpty(pds[i].D.ToString())) + { + string materialCode = pds[i].D.ToString().Trim(); + var lib = from x in Funs.DB.HJGL_MaterialCodeLib where x.Code == materialCode select x; + if (lib.Count() > 0) + { + item.MaterialCode2 = materialCode; + } + else + { + result.Add("第" + (i + 2).ToString() + "行,材料编码库不存在此材料编码-" + materialCode + "
"); + } } else { result.Add((i + 2) + "Line, [材料编码] 不能为空
"); } - if (pds[i].F != null && !string.IsNullOrEmpty(pds[i].F.ToString())) + if (pds[i].E != null && !string.IsNullOrEmpty(pds[i].E.ToString())) { try { - var number = Funs.GetNewDecimal(pds[i].F.ToString()); + var number = Funs.GetNewDecimal(pds[i].E.ToString()); item.Number = number; } catch (Exception) @@ -247,7 +252,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage // result.Add((i + 2) + "Line, [预制组件] 不能为空
"); } } - var model = matList.Where(x => x.PipelineId == item.PipelineId && x.MaterialCode == item.MaterialCode && x.PrefabricatedComponents == item.PrefabricatedComponents); + var model = matList.Where(x => x.PipelineId == item.PipelineId && x.MaterialCode2 == item.MaterialCode2 && x.WeldJointId == item.WeldJointId && x.PrefabricatedComponents == item.PrefabricatedComponents); if (model.Count() == 0) { matList.Add(item); @@ -478,7 +483,12 @@ namespace FineUIPro.Web.HJGL.WeldingManage { foreach (var item in matList) { - var pipeLineMat = from x in Funs.DB.HJGL_PipeLineMat where x.MaterialCode == item.MaterialCode && x.PipelineId == item.PipelineId && x.PrefabricatedComponents == item.PrefabricatedComponents select x; + var pipeLineMat = from x in Funs.DB.HJGL_PipeLineMat + where x.MaterialCode2 == item.MaterialCode2 + && x.WeldJointId == item.WeldJointId + && x.PipelineId == item.PipelineId + && x.PrefabricatedComponents == item.PrefabricatedComponents + select x; if (pipeLineMat.Count() == 0 || pipeLineMat == null) { item.PipeLineMatId = SQLHelper.GetNewID(typeof(Model.HJGL_PipeLineMat)); @@ -486,7 +496,12 @@ namespace FineUIPro.Web.HJGL.WeldingManage } else { - item.PipeLineMatId = pipeLineMat.First().PipeLineMatId; + var oldPipeLineMat = pipeLineMat.First(); + item.PipeLineMatId = oldPipeLineMat.PipeLineMatId; + if (string.IsNullOrEmpty(item.MaterialCode)) + { + item.MaterialCode = oldPipeLineMat.MaterialCode; + } BLL.PipelineMatService.UpdatePipeLineMat(item); } BLL.HJGL_PipelineComponentService.SyncPipelineComponentByMatId(item.PipeLineMatId); diff --git a/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldMatMatch.aspx b/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldMatMatch.aspx index e49f353f..edfe3aae 100644 --- a/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldMatMatch.aspx +++ b/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldMatMatch.aspx @@ -27,16 +27,19 @@ } .f-grid-row.red { - background-color: red; + color: red; + font-weight: bold; } .f-grid-row.green { - background-color: green; + color: green; + font-weight: bold; } .f-grid-row.priority { - background-color: #1e88e5; + /* background-color: #1e88e5;*/ color: #fff; + font-weight: bold; } .f-grid-row { @@ -143,10 +146,12 @@ - - + + - + + + @@ -181,7 +186,7 @@ @@ -193,10 +198,18 @@ FieldType="String" HeaderText="预制组件号" HeaderTextAlign="Center" TextAlign="Left">
+ + + + diff --git a/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldMatMatch.aspx.cs b/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldMatMatch.aspx.cs index 884a1bb0..b188911d 100644 --- a/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldMatMatch.aspx.cs +++ b/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldMatMatch.aspx.cs @@ -70,21 +70,21 @@ namespace FineUIPro.Web.HJGL.WeldingManage } } - public Dictionary> priorityComponents + public Dictionary> priorityWeldJoints { get { - var value = ViewState["priorityComponents"] as Dictionary>; + var value = ViewState["priorityWeldJoints"] as Dictionary>; if (value == null) { value = new Dictionary>(); - ViewState["priorityComponents"] = value; + ViewState["priorityWeldJoints"] = value; } return value; } set { - ViewState["priorityComponents"] = value; + ViewState["priorityWeldJoints"] = value; } } @@ -104,7 +104,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage ; HJGL_MaterialService.materialStockItems_FIELD = new List(); HJGL_MaterialService.materialStockItems_SHOP = new List(); dicSeclectPipeLine = new Dictionary(); - priorityComponents = new Dictionary>(); + priorityWeldJoints = new Dictionary>(); var pipeline = (from x in Funs.DB.HJGL_Pipeline where x.ProjectId == this.CurrUser.LoginProjectId select x.FlowingSection).Distinct().ToList(); @@ -377,14 +377,25 @@ namespace FineUIPro.Web.HJGL.WeldingManage #region 数据绑定 private void BindGrid() { - string strSql = @"SELECT lib.MaterialCode,lib.MaterialName,lib.MaterialUnit, - lib.MaterialSpec,lib.MaterialMade,lib.MaterialDef,sum(pipe.Number)as Number , + string strSql = @"SELECT ISNULL(pipe.MaterialCode2, lib.Code) AS MaterialCode, + ISNULL(lib.MaterialName, libCode.MaterialName) AS MaterialName, + ISNULL(lib.MaterialUnit, libCode.MaterialUnit) AS MaterialUnit, + ISNULL(lib.MaterialSpec, libCode.MaterialSpec) AS MaterialSpec, + ISNULL(lib.MaterialMade, libCode.MaterialMade) AS MaterialMade, + ISNULL(lib.MaterialDef, libCode.MaterialDef) AS MaterialDef, + sum(pipe.Number)as Number , '0' as MatchNum,'否' AS CheckState FROM dbo.HJGL_PipeLineMat pipe LEFT JOIN dbo.HJGL_MaterialCodeLib lib ON lib.MaterialCode = pipe.MaterialCode + LEFT JOIN dbo.HJGL_Pipeline line ON line.PipelineId = pipe.PipelineId + OUTER APPLY (SELECT TOP 1 * FROM dbo.HJGL_MaterialCodeLib codeLib WHERE codeLib.ProjectId=line.ProjectId AND codeLib.Code=pipe.MaterialCode2 ORDER BY codeLib.MaterialCode) libCode WHERE PipelineId=@PipelineId - group by lib.MaterialCode,lib.MaterialName,lib.MaterialUnit, - lib.MaterialSpec,lib.MaterialMade,lib.MaterialDef "; + group by ISNULL(pipe.MaterialCode2, lib.Code), + ISNULL(lib.MaterialName, libCode.MaterialName), + ISNULL(lib.MaterialUnit, libCode.MaterialUnit), + ISNULL(lib.MaterialSpec, libCode.MaterialSpec), + ISNULL(lib.MaterialMade, libCode.MaterialMade), + ISNULL(lib.MaterialDef, libCode.MaterialDef) "; List listStr = new List(); listStr.Add(new SqlParameter("@PipelineId", this.tvControlItem.SelectedNodeID)); SqlParameter[] parameter = listStr.ToArray(); @@ -394,7 +405,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage Grid1.DataSource = dt; Grid1.DataBind(); } - void BindGrid2() + void BindGrid2(IEnumerable keepSelectedPipelineIds = null) { //var result = tw_PipeMatMatchOutputs // .GroupBy(item => new { item.PipelineId, item.PipelineCode,item.UnitWorkName }) // 按 PipelineId 和 PipelineCode 分组 @@ -424,6 +435,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage Rate = Math.Round((decimal)output.Average(item => item.MatchRate) * 100, 2); lbRate.Text = "匹配率:" + Rate.ToString() + "%"; }*/ + var keepSelectedList = keepSelectedPipelineIds == null ? new List() : keepSelectedPipelineIds.Where(x => !string.IsNullOrEmpty(x)).Distinct().ToList(); var selectList = new List(); for (int i = 0; i < Grid2.Rows.Count; i++) { @@ -443,7 +455,12 @@ namespace FineUIPro.Web.HJGL.WeldingManage } if (cbSelectCom.Checked) { - Grid2.SelectedRowIDArray = selectList.ToArray(); + selectList.AddRange(keepSelectedList); + Grid2.SelectedRowIDArray = selectList.Distinct().ToArray(); + } + else if (keepSelectedList.Any()) + { + Grid2.SelectedRowIDArray = keepSelectedList.ToArray(); } } @@ -486,7 +503,9 @@ namespace FineUIPro.Web.HJGL.WeldingManage private void BindMaterialDetail(string pipelineId) { - var tb = tw_PipeMatMatchOutputs.Where(x => x.PipelineId == pipelineId).ToList(); + var tb = GetNoTaskMaterialDetails() + .Where(x => x.PipelineId == pipelineId) + .ToList(); Grid1.DataSource = tb; Grid1.DataBind(); @@ -499,7 +518,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage continue; } - if (IsPriorityComponent(model.PipelineId, model.PrefabricatedComponents)) + if (IsPriorityWeldJoint(model.PipelineId, model.WeldJointId)) { Grid1.Rows[i].RowCssClass = "priority"; selectList.Add(model.Id); @@ -513,30 +532,54 @@ namespace FineUIPro.Web.HJGL.WeldingManage Grid1.SelectedRowIDArray = selectList.ToArray(); } - private bool IsPriorityComponent(string pipelineId, string prefabricatedComponents) + private List GetNoTaskMaterialDetails() { - return !string.IsNullOrEmpty(pipelineId) - && !string.IsNullOrEmpty(prefabricatedComponents) - && priorityComponents.ContainsKey(pipelineId) - && priorityComponents[pipelineId].Contains(prefabricatedComponents); + var matchOutputs = tw_PipeMatMatchOutputs ?? new List(); + var weldJointIds = matchOutputs + .Where(x => !string.IsNullOrEmpty(x.WeldJointId)) + .Select(x => x.WeldJointId) + .Distinct() + .ToList(); + if (!weldJointIds.Any()) + { + return matchOutputs; + } + + var taskWeldJointIds = Funs.DB.HJGL_WeldTask + .Where(x => weldJointIds.Contains(x.WeldJointId)) + .Select(x => x.WeldJointId) + .Distinct() + .ToList(); + return matchOutputs + .Where(x => string.IsNullOrEmpty(x.WeldJointId) || !taskWeldJointIds.Contains(x.WeldJointId)) + .ToList(); } - private Dictionary> GetPriorityComponentList() + private bool IsPriorityWeldJoint(string pipelineId, string weldJointId) { - return priorityComponents + return !string.IsNullOrEmpty(pipelineId) + && !string.IsNullOrEmpty(weldJointId) + && priorityWeldJoints.ContainsKey(pipelineId) + && priorityWeldJoints[pipelineId].Contains(weldJointId); + } + + private Dictionary> GetPriorityWeldJointList() + { + return priorityWeldJoints .Where(x => x.Value != null && x.Value.Any()) .ToDictionary(x => x.Key, x => x.Value.ToList()); } private void RefreshMatchResult() { + var keepSelectedPipelineIds = Grid2.SelectedRowIDArray == null ? new List() : Grid2.SelectedRowIDArray.ToList(); tw_PipeMatMatchOutputs = TwArrivalStatisticsService.GetPipeMatMatch( this.CurrUser.LoginProjectId, dicSeclectPipeLine.Keys.ToList(), drpWarehouse.SelectedValue, - GetPriorityComponentList()); + GetPriorityWeldJointList()); BindGrid3(); - BindGrid2(); + BindGrid2(keepSelectedPipelineIds); } protected void Grid2_RowClick(object sender, GridRowClickEventArgs e) @@ -692,7 +735,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage foreach (string rowId in Grid3.SelectedRowIDArray) { dicSeclectPipeLine.Remove(rowId); - priorityComponents.Remove(rowId); + priorityWeldJoints.Remove(rowId); var node = tvControlItem.FindNode(rowId); if (node != null) { @@ -713,38 +756,85 @@ namespace FineUIPro.Web.HJGL.WeldingManage return; } - var selectedComponents = new HashSet(); + var selectedWeldJoints = new HashSet(); foreach (int rowIndex in Grid1.SelectedRowIndexArray) { - if (Grid1.DataKeys[rowIndex].Length < 3) + if (Grid1.DataKeys[rowIndex].Length < 4) { continue; } string pipelineId = Grid1.DataKeys[rowIndex][1]?.ToString(); - string componentCode = Grid1.DataKeys[rowIndex][2]?.ToString(); - if (pipelineId == selectedPipelineId && !string.IsNullOrEmpty(componentCode)) + string weldJointId = Grid1.DataKeys[rowIndex][3]?.ToString(); + if (pipelineId == selectedPipelineId && !string.IsNullOrEmpty(weldJointId)) { - selectedComponents.Add(componentCode); + selectedWeldJoints.Add(weldJointId); } } - if (selectedComponents.Any()) + if (selectedWeldJoints.Any()) { - priorityComponents[selectedPipelineId] = selectedComponents; + priorityWeldJoints[selectedPipelineId] = selectedWeldJoints; } else { - priorityComponents.Remove(selectedPipelineId); + priorityWeldJoints.Remove(selectedPipelineId); } + var keepSelectedPipelineIds = Grid2.SelectedRowIDArray == null ? new List() : Grid2.SelectedRowIDArray.ToList(); + if (!keepSelectedPipelineIds.Contains(selectedPipelineId)) + { + keepSelectedPipelineIds.Add(selectedPipelineId); + } RefreshMatchResult(); + Grid2.SelectedRowIDArray = keepSelectedPipelineIds.Distinct().ToArray(); BindMaterialDetail(selectedPipelineId); } + protected void btnConfirmMaterialCode_Click(object sender, EventArgs e) + { + if (Grid2.SelectedRowIDArray == null || !Grid2.SelectedRowIDArray.Any()) + { + ShowNotify("请先选择需要保存匹配结果的管线!", MessageBoxIcon.Warning); + return; + } + + if (tw_PipeMatMatchOutputs == null || !tw_PipeMatMatchOutputs.Any()) + { + RefreshMatchResult(); + } + + var selectedPipelineIds = Grid2.SelectedRowIDArray.ToList(); + var matchedMaterials = tw_PipeMatMatchOutputs + .Where(x => selectedPipelineIds.Contains(x.PipelineId)) + .ToList(); + if (!matchedMaterials.Any()) + { + ShowNotify("未找到保存的材料匹配明细!", MessageBoxIcon.Warning); + return; + } + + var invalidMaterials = matchedMaterials + .Where(x => string.IsNullOrEmpty(x.MatchMaterialCode) || (x.MatchRate ?? 0) < 1) + .ToList(); + /* if (invalidMaterials.Any()) + { + ShowNotify("存在未100%匹配的材料,不能反写材料主编码!", MessageBoxIcon.Warning); + return; + }*/ + + int count = BLL.PipelineMatService.UpdateMaterialCodeByMatchOutputs(matchedMaterials); + ShowNotify("已保存材料主编码" + count.ToString() + "条!", MessageBoxIcon.Success); + RefreshMatchResult(); + if (Grid2.SelectedRowIDArray.Any()) + { + BindMaterialDetail(Grid2.SelectedRowIDArray.First()); + } + } + protected void btnGenTask_Click(object sender, EventArgs e) { - if (Grid2.SelectedRowIDArray.Count() > 0) + if (GetSelectedWeldJointIdsFromGrid1().Any()) { if (SaveTask()) { @@ -760,23 +850,30 @@ namespace FineUIPro.Web.HJGL.WeldingManage } else { - ShowNotify("请先选择需要发起任单的管线!", MessageBoxIcon.Warning); + ShowNotify("请先在材料匹配明细中选择需要生成任务单的焊口!", MessageBoxIcon.Warning); } } private bool SaveTask() { + var selectedWeldJointIds = GetSelectedWeldJointIdsFromGrid1(); + if (!selectedWeldJointIds.Any()) + { + ShowNotify("请先在材料匹配明细中选择需要生成任务单的焊口!", MessageBoxIcon.Warning); + return false; + } var weldingRods = from x in Funs.DB.Base_Consumables where x.ConsumablesType == "2" select x; var weldingWires = from x in Funs.DB.Base_Consumables where x.ConsumablesType == "1" select x; + var selectedWeldJointIdList = selectedWeldJointIds.ToList(); var selectRowId = (from x in Funs.DB.View_HJGL_NoWeldJointFind - where Grid2.SelectedRowIDArray.ToList().Contains(x.PipelineId) && x.WeldingDailyId == null && + where selectedWeldJointIdList.Contains(x.WeldJointId) && x.WeldingDailyId == null && x.WeldTaskId == null && x.WeldingMethodCode != null select x).ToList(); Dictionary unitworkTaskCode = new Dictionary(); Dictionary unitworkSerialNumber = new Dictionary(); Dictionary matchPipeline = new Dictionary(); - foreach (var rowIndex in Grid2.SelectedRowIndexArray) + for (int rowIndex = 0; rowIndex < Grid2.Rows.Count; rowIndex++) { matchPipeline.Add(rowIndex + 1, Grid2.Rows[rowIndex].RowID); } @@ -784,16 +881,6 @@ namespace FineUIPro.Web.HJGL.WeldingManage { selectRowId = selectRowId.Where(x => x.JointAttribute == "预制口").ToList(); } - var priorityWeldJointIds = GetPriorityWeldJointIds(Grid2.SelectedRowIDArray.ToList()); - if (priorityWeldJointIds.Any()) - { - if (priorityWeldJointIds.Any(x => !x.Value.Any())) - { - ShowNotify("选中组件未找到关联焊口,无法按组件生成任务单!", MessageBoxIcon.Warning); - return false; - } - selectRowId = selectRowId.Where(x => !priorityWeldJointIds.ContainsKey(x.PipelineId) || priorityWeldJointIds[x.PipelineId].Contains(x.WeldJointId)).ToList(); - } if (!selectRowId.Any()) { ShowNotify("未找到可生成任务单的焊口!", MessageBoxIcon.Warning); @@ -909,28 +996,41 @@ namespace FineUIPro.Web.HJGL.WeldingManage return true; } + private HashSet GetSelectedWeldJointIdsFromGrid1() + { + var selectedWeldJointIds = new HashSet(); + if (Grid1.SelectedRowIndexArray == null) + { + return selectedWeldJointIds; + } + + foreach (int rowIndex in Grid1.SelectedRowIndexArray) + { + if (Grid1.DataKeys[rowIndex].Length < 4) + { + continue; + } + + string weldJointId = Grid1.DataKeys[rowIndex][3]?.ToString(); + if (!string.IsNullOrEmpty(weldJointId)) + { + selectedWeldJointIds.Add(weldJointId); + } + } + + return selectedWeldJointIds; + } + private Dictionary> GetPriorityWeldJointIds(List selectedPipelineIds) { var result = new Dictionary>(); - var selectedPriority = priorityComponents + var selectedPriority = priorityWeldJoints .Where(x => selectedPipelineIds.Contains(x.Key) && x.Value != null && x.Value.Any()) .ToList(); foreach (var item in selectedPriority) { - string pipelineId = item.Key; - var componentCodes = item.Value.ToList(); - var weldJointIds = (from joint in Funs.DB.HJGL_Pipeline_ComponentJoint - join weldJoint in Funs.DB.HJGL_WeldJoint on joint.WeldJointId equals weldJoint.WeldJointId - join component in Funs.DB.HJGL_Pipeline_Component on joint.PipelineComponentId equals component.PipelineComponentId into componentJoin - from componentItem in componentJoin.DefaultIfEmpty() - where joint.WeldJointId != null - && weldJoint.PipelineId == pipelineId - && ((componentItem != null && componentCodes.Contains(componentItem.PipelineComponentCode)) - || componentCodes.Contains(joint.PipelineComponentCode)) - select joint.WeldJointId).Distinct().ToList(); - - result[pipelineId] = new HashSet(weldJointIds); + result[item.Key] = new HashSet(item.Value); } return result; diff --git a/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldMatMatch.aspx.designer.cs b/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldMatMatch.aspx.designer.cs index 1095bf1c..d66e65e6 100644 --- a/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldMatMatch.aspx.designer.cs +++ b/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldMatMatch.aspx.designer.cs @@ -266,6 +266,15 @@ namespace FineUIPro.Web.HJGL.WeldingManage /// protected global::FineUIPro.Button btnPriorityComponents; + /// + /// btnConfirmMaterialCode 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Button btnConfirmMaterialCode; + /// /// btnGenTask 控件。 /// diff --git a/SGGL/Model/CLGL/Tw_PipeMatMatchOutput.cs b/SGGL/Model/CLGL/Tw_PipeMatMatchOutput.cs index eb058fda..63b6fa80 100644 --- a/SGGL/Model/CLGL/Tw_PipeMatMatchOutput.cs +++ b/SGGL/Model/CLGL/Tw_PipeMatMatchOutput.cs @@ -11,12 +11,16 @@ namespace Model public class Tw_PipeMatMatchOutput { public string Id { get; set; } + public string PipeLineMatId { get; set; } public string PipelineId { get; set; } public string PipelineCode { get; set; } public string UnitWorkId { get; set; } public string UnitWorkName { get; set; } public string PrefabricatedComponents { get; set; } + public string WeldJointId { get; set; } + public string WeldJointCode { get; set; } public string MaterialCode { get; set; } + public string MatchMaterialCode { get; set; } public string Code { get; set; } public string HeatNo { get; set; } public string BatchNo { get; set; } diff --git a/SGGL/Model/Model.cs b/SGGL/Model/Model.cs index 8f3f6bdb..616c58fa 100644 --- a/SGGL/Model/Model.cs +++ b/SGGL/Model/Model.cs @@ -105869,6 +105869,10 @@ namespace Model private System.Nullable _IsLooseParts; + private string _WeldJointId; + + private string _MaterialCode2; + private EntityRef _HJGL_MaterialCodeLib; private EntityRef _HJGL_Pipeline; @@ -105889,6 +105893,10 @@ namespace Model partial void OnPrefabricatedComponentsChanged(); partial void OnIsLoosePartsChanging(System.Nullable value); partial void OnIsLoosePartsChanged(); + partial void OnWeldJointIdChanging(string value); + partial void OnWeldJointIdChanged(); + partial void OnMaterialCode2Changing(string value); + partial void OnMaterialCode2Changed(); #endregion public HJGL_PipeLineMat() @@ -106026,6 +106034,46 @@ namespace Model } } + [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_WeldJointId", DbType="NVarChar(50)")] + public string WeldJointId + { + get + { + return this._WeldJointId; + } + set + { + if ((this._WeldJointId != value)) + { + this.OnWeldJointIdChanging(value); + this.SendPropertyChanging(); + this._WeldJointId = value; + this.SendPropertyChanged("WeldJointId"); + this.OnWeldJointIdChanged(); + } + } + } + + [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_MaterialCode2", DbType="NVarChar(50)")] + public string MaterialCode2 + { + get + { + return this._MaterialCode2; + } + set + { + if ((this._MaterialCode2 != value)) + { + this.OnMaterialCode2Changing(value); + this.SendPropertyChanging(); + this._MaterialCode2 = value; + this.SendPropertyChanged("MaterialCode2"); + this.OnMaterialCode2Changed(); + } + } + } + [global::System.Data.Linq.Mapping.AssociationAttribute(Name="FK_HJGL_PipeLineMat_HJGL_MaterialCodeLib", Storage="_HJGL_MaterialCodeLib", ThisKey="MaterialCode", OtherKey="MaterialCode", IsForeignKey=true)] public HJGL_MaterialCodeLib HJGL_MaterialCodeLib { @@ -277039,6 +277087,8 @@ namespace Model private System.Nullable _Number; + private string _WeldJointId; + #region 可扩展性方法定义 partial void OnLoaded(); partial void OnValidate(System.Data.Linq.ChangeAction action); @@ -277055,6 +277105,8 @@ namespace Model partial void OnPrefabricatedComponentsChanged(); partial void OnNumberChanging(System.Nullable value); partial void OnNumberChanged(); + partial void OnWeldJointIdChanging(string value); + partial void OnWeldJointIdChanged(); #endregion public Tw_InOutPlanDetail_Relation() @@ -277182,6 +277234,26 @@ namespace Model } } + [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_WeldJointId", DbType="NVarChar(50)")] + public string WeldJointId + { + get + { + return this._WeldJointId; + } + set + { + if ((this._WeldJointId != value)) + { + this.OnWeldJointIdChanging(value); + this.SendPropertyChanging(); + this._WeldJointId = value; + this.SendPropertyChanged("WeldJointId"); + this.OnWeldJointIdChanged(); + } + } + } + public event PropertyChangingEventHandler PropertyChanging; public event PropertyChangedEventHandler PropertyChanged;