diff --git a/DataBase/版本日志/SGGLDB_V2026-08-02-lpf.sql b/DataBase/版本日志/SGGLDB_V2026-08-02-lpf.sql new file mode 100644 index 00000000..12c16c05 --- /dev/null +++ b/DataBase/版本日志/SGGLDB_V2026-08-02-lpf.sql @@ -0,0 +1,25 @@ +/* + 材料用途和材料编码来源字段 + PipeArea: 1=工厂预制,2=现场安装 +*/ +IF COL_LENGTH(N'dbo.HJGL_PipeLineMat', N'PipeArea') IS NULL +BEGIN + ALTER TABLE dbo.HJGL_PipeLineMat ADD PipeArea NCHAR(1) NULL; +END; +GO + +IF COL_LENGTH(N'dbo.HJGL_MaterialCodeLib', N'DesignInstitute') IS NULL +BEGIN + ALTER TABLE dbo.HJGL_MaterialCodeLib ADD DesignInstitute NVARCHAR(200) NULL; +END; +GO + +/* 历史材料按所属管线区域回填;无法关联管线的历史数据保留为空。 */ +UPDATE mat +SET mat.PipeArea = pipe.PipeArea +FROM dbo.HJGL_PipeLineMat mat +INNER JOIN dbo.HJGL_Pipeline pipe ON pipe.PipelineId = mat.PipelineId +WHERE mat.PipeArea IS NULL + AND pipe.PipeArea IN (N'1', N'2'); +GO + \ No newline at end of file diff --git a/SGGL/BLL/API/HJGL/APIWeldReportService.cs b/SGGL/BLL/API/HJGL/APIWeldReportService.cs new file mode 100644 index 00000000..b5dfc4af --- /dev/null +++ b/SGGL/BLL/API/HJGL/APIWeldReportService.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; + +namespace BLL +{ + /// + /// 焊接日报待审核接口服务适配层。 + /// + public static class APIWeldReportService + { + /// + /// 获取焊接日报待审核列表。 + /// + public static List GetPendingWeldingDailyTempDetailList( + string projectId, string unitWorkId, string weldingDate, string pipelineCode, string welderCode) + { + return WeldingDailyService.GetWeldingDailyTempDetailList(projectId, unitWorkId, + ParseWeldingDate(weldingDate), pipelineCode, welderCode); + } + + /// + /// 查看单条焊接日报待审核明细。 + /// + public static Model.WeldingDailyTempDetailItem GetPendingWeldingDailyTempDetail(string tempDetailId) + { + return WeldingDailyService.GetWeldingDailyTempDetailById(tempDetailId); + } + + /// + /// 批量审核通过焊接日报待审核明细。 + /// + public static string AuditPendingWeldingDailyTempDetails(string[] tempDetailIds, string auditMan) + { + // 审核规则、建日报、组批及状态回写统一由PC端已经使用的公共服务处理。 + return WeldingDailyService.AuditWeldingDailyTempDetails(tempDetailIds, auditMan); + } + + /// + /// 批量删除焊接日报待审核明细。 + /// + public static string DeletePendingWeldingDailyTempDetails(string[] tempDetailIds) + { + return WeldingDailyService.DeleteWeldingDailyTempDetails(tempDetailIds); + } + + private static DateTime? ParseWeldingDate(string weldingDate) + { + if (string.IsNullOrWhiteSpace(weldingDate)) + { + return null; + } + + DateTime parsedDate; + if (!DateTime.TryParse(weldingDate, out parsedDate)) + { + throw new ArgumentException("焊接日期格式不正确"); + } + + return parsedDate.Date; + } + } +} diff --git a/SGGL/BLL/BLL.csproj b/SGGL/BLL/BLL.csproj index 25a9b42c..d06c89e6 100644 --- a/SGGL/BLL/BLL.csproj +++ b/SGGL/BLL/BLL.csproj @@ -205,6 +205,7 @@ + @@ -918,4 +919,4 @@ --> - \ No newline at end of file + diff --git a/SGGL/BLL/CLGL/TwArrivalStatisticsService.cs b/SGGL/BLL/CLGL/TwArrivalStatisticsService.cs index 81697dda..adb8ce8e 100644 --- a/SGGL/BLL/CLGL/TwArrivalStatisticsService.cs +++ b/SGGL/BLL/CLGL/TwArrivalStatisticsService.cs @@ -259,28 +259,60 @@ namespace BLL /// /// /// - public static List GetPipeMatMatch(string projectId, List pipelineIds, string warehouseCode, Dictionary> priorityWeldJoints = null) + public static List GetPipeMatMatch(string projectId, List pipelineIds, string warehouseCode, Dictionary> priorityWeldJoints = null, string pipeArea = null) { using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) { var results = new List(); + if (pipelineIds == null || !pipelineIds.Any()) + { + return results; + } + pipelineIds = pipelineIds.Where(x => !string.IsNullOrEmpty(x)).Distinct().ToList(); + if (!pipelineIds.Any()) + { + return results; + } - // 获取所需材料列表 - 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 - join w in db.HJGL_WeldJoint on x.WeldJointId equals w.WeldJointId into weldJoin - from w in weldJoin.DefaultIfEmpty() - // 材料匹配只处理所需量大于0的非散件材料,避免零用量明细占用库存或影响焊口生成任务单判断。 - where z.ProjectId == projectId && pipelineIds.Contains(z.PipelineId) && x.PrefabricatedComponents != "" && (x.Number ?? 0) > 0 - select new - { - PipeLineMat = x, - PipelineCode = z.PipelineCode, - UnitWorkId = z.UnitWorkId, - UnitWorkName = m.UnitWorkName, - WeldJointCode = w == null ? null : w.WeldJointCode - }).ToList(); + // 先保留当前区域内已焊和未焊数据,用于识别“已经开工但尚未完成”的续作组件。 + var pipeLineMatQuery = 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 + join w in db.HJGL_WeldJoint on x.WeldJointId equals w.WeldJointId into weldJoin + from w in weldJoin.DefaultIfEmpty() + // 先保留组件全部材料行,避免数量为0的历史已焊口导致续作组件识别遗漏。 + where z.ProjectId == projectId && pipelineIds.Contains(z.PipelineId) + && x.PrefabricatedComponents != null && x.PrefabricatedComponents != "" + select new + { + PipeLineMat = x, + PipelineCode = z.PipelineCode, + UnitWorkId = z.UnitWorkId, + UnitWorkName = m.UnitWorkName, + WeldJoint = w + }; + + string jointAttribute = GetJointAttributeByPipeArea(pipeArea); + bool filterByPipeArea = !string.IsNullOrEmpty(jointAttribute); + if (filterByPipeArea) + { + // 页面用途以材料表 PipeArea 为准,工厂/现场只能匹配相应类型的焊口。 + pipeLineMatQuery = pipeLineMatQuery.Where(x => x.PipeLineMat.PipeArea == pipeArea + && x.WeldJoint != null + && x.WeldJoint.JointAttribute == jointAttribute); + } + + var allPipeLineMats = pipeLineMatQuery.ToList(); + var continuationComponentKeys = new HashSet(allPipeLineMats + .Where(x => x.WeldJoint != null && !string.IsNullOrEmpty(x.WeldJoint.WeldingDailyId)) + .Select(x => GetComponentKey(x.PipeLineMat.PipelineId, x.PipeLineMat.PrefabricatedComponents))); + + // 页面匹配只展示并消耗尚未焊接的焊口材料;不传区域的旧调用保留原查询行为。 + var pipeLineMats = filterByPipeArea + ? allPipeLineMats.Where(x => x.WeldJoint != null + && x.WeldJoint.WeldingDailyId==null + && (x.PipeLineMat.Number ?? 0) > 0).ToList() + : allPipeLineMats.Where(x => (x.PipeLineMat.Number ?? 0) > 0).ToList(); var materialCodes = pipeLineMats .Where(x => !string.IsNullOrEmpty(x.PipeLineMat.MaterialCode)) @@ -311,17 +343,16 @@ namespace BLL { lib = libByMaterialCode[x.PipeLineMat.MaterialCode]; } - // 未反写时只能按导入材料编码 Code 找候选材料库,用于展示材料名称、规格等基础信息。 + // 未反写时只能按导入材料编码 Code 找候选材料库。 else if (!string.IsNullOrEmpty(x.PipeLineMat.MaterialCode2) && libByCode.ContainsKey(x.PipeLineMat.MaterialCode2)) { lib = libByCode[x.PipeLineMat.MaterialCode2]; } - // MaterialCode 对外展示导入材料编码,避免把临时匹配出的材料主编码误当成已确认结果。 string code = !string.IsNullOrEmpty(x.PipeLineMat.MaterialCode2) ? x.PipeLineMat.MaterialCode2 : lib?.Code; return new Tw_PipeMatMatchOutput - { - Id = Guid.NewGuid().ToString(), + { + Id = Guid.NewGuid().ToString(), PipeLineMatId = x.PipeLineMat.PipeLineMatId, PipelineId = x.PipeLineMat.PipelineId, PipelineCode = x.PipelineCode, @@ -329,7 +360,7 @@ namespace BLL UnitWorkName = x.UnitWorkName, PrefabricatedComponents = x.PipeLineMat.PrefabricatedComponents, WeldJointId = x.PipeLineMat.WeldJointId, - WeldJointCode = x.WeldJointCode, + WeldJointCode = x.WeldJoint == null ? null : x.WeldJoint.WeldJointCode, MaterialCode = code, MatchMaterialCode = x.PipeLineMat.MaterialCode, Code = code, @@ -342,29 +373,179 @@ namespace BLL NeedNum = x.PipeLineMat.Number, }; }).ToList(); - var newRequiredMaterials = new List(); + + var orderedPipelineMaterials = new Dictionary>(); + foreach (string id in pipelineIds) + { + orderedPipelineMaterials[id] = requiredMaterials + .Where(x => x.PipelineId == id) + .OrderBy(x => x.PrefabricatedComponents) + .ThenBy(x => x.WeldJointCode) + .ThenBy(x => x.MaterialCode) + .ThenBy(x => x.PipeLineMatId) + .ToList(); + } + + var newRequiredMaterials = new List(); + var addedMaterialIds = new HashSet(); + + // 先处理全部管线的手动优先焊口,保证人工选择始终高于任何自动优先规则。 foreach (string id in pipelineIds) { - var pipelineMaterials = requiredMaterials.Where(x => x.PipelineId == id).ToList(); if (priorityWeldJoints != null && priorityWeldJoints.ContainsKey(id) && priorityWeldJoints[id] != null && priorityWeldJoints[id].Any()) { - // 手动优先焊口只改变本次匹配消耗顺序,不写入长期规则。 var weldJointIds = priorityWeldJoints[id]; - newRequiredMaterials.AddRange(pipelineMaterials + var manualPriorityMaterials = orderedPipelineMaterials[id] .Where(x => weldJointIds.Contains(x.WeldJointId)) - .OrderBy(x => weldJointIds.IndexOf(x.WeldJointId))); - newRequiredMaterials.AddRange(pipelineMaterials - .Where(x => !weldJointIds.Contains(x.WeldJointId))); - } - else - { - newRequiredMaterials.AddRange(pipelineMaterials); + .OrderBy(x => weldJointIds.IndexOf(x.WeldJointId)) + .ThenBy(x => x.PrefabricatedComponents) + .ThenBy(x => x.WeldJointCode) + .ThenBy(x => x.MaterialCode) + .ToList(); + newRequiredMaterials.AddRange(manualPriorityMaterials); + foreach (var item in manualPriorityMaterials) + { + addedMaterialIds.Add(item.PipeLineMatId); + } } } + + // 再处理全部续作组件,避免前一条管线的未开工组件抢占后一条管线续作组件的库存。 + foreach (string id in pipelineIds) + { + var continuationMaterials = orderedPipelineMaterials[id] + .Where(x => !addedMaterialIds.Contains(x.PipeLineMatId) + && continuationComponentKeys.Contains(GetComponentKey(x.PipelineId, x.PrefabricatedComponents))) + .ToList(); + newRequiredMaterials.AddRange(continuationMaterials); + foreach (var item in continuationMaterials) + { + addedMaterialIds.Add(item.PipeLineMatId); + } + } + + // 最后处理所有尚未开工组件,保持管线及组件内的稳定排序。 + foreach (string id in pipelineIds) + { + newRequiredMaterials.AddRange(orderedPipelineMaterials[id].Where(x => !addedMaterialIds.Contains(x.PipeLineMatId))); + } + results = GetMatMatchOutput(newRequiredMaterials, warehouseCode, projectId, true); + // 组件匹配率以当前区域剩余未焊口的材料需求为口径,并回填到每条明细供表格合并展示。 + foreach (var componentGroup in results.GroupBy(x => new { x.PipelineId, x.PrefabricatedComponents })) + { + decimal needNum = componentGroup.Sum(x => x.NeedNum) ?? 0; + decimal matchNum = componentGroup.Sum(x => x.MatchNum) ?? 0; + decimal componentMatchRate = needNum > 0 ? matchNum / needNum : 0; + string componentMatchRateString = Math.Round(componentMatchRate * 100, 2).ToString() + "%"; + foreach (var item in componentGroup) + { + item.ComponentMatchRate = componentMatchRate; + item.ComponentMatchRateString = componentMatchRateString; + } + } return results; } } + + /// + /// 获取单位工程下当前区域内同时存在已焊口和未焊口的组件汇总。 + /// + public static List GetPartialWeldedComponents(string projectId, string unitWorkId, string pipeArea, string warehouseCode) + { + string jointAttribute = GetJointAttributeByPipeArea(pipeArea); + if (string.IsNullOrEmpty(projectId) || string.IsNullOrEmpty(unitWorkId) || string.IsNullOrEmpty(jointAttribute)) + { + return new List(); + } + + using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) + { + var componentWeldRows = (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 + join w in db.HJGL_WeldJoint on x.WeldJointId equals w.WeldJointId + where z.ProjectId == projectId && z.UnitWorkId == unitWorkId + && x.PipeArea == pipeArea + && x.PrefabricatedComponents != null && x.PrefabricatedComponents != "" + && w.JointAttribute == jointAttribute + select new + { + z.PipelineId, + z.PipelineCode, + z.UnitWorkId, + m.UnitWorkName, + x.PrefabricatedComponents, + w.WeldJointId, + w.WeldingDailyId + }).ToList(); + + var partialComponents = componentWeldRows + .GroupBy(x => new { x.PipelineId, x.PipelineCode, x.UnitWorkId, x.UnitWorkName, x.PrefabricatedComponents }) + .Select(group => + { + var weldJoints = group.GroupBy(x => x.WeldJointId).Select(x => x.First()).ToList(); + int weldedCount = weldJoints.Count(x => !string.IsNullOrEmpty(x.WeldingDailyId)); + int totalCount = weldJoints.Count; + return new Tw_PartialWeldedComponentOutput + { + UnitWorkId = group.Key.UnitWorkId, + UnitWorkName = group.Key.UnitWorkName, + PipelineId = group.Key.PipelineId, + PipelineCode = group.Key.PipelineCode, + PrefabricatedComponents = group.Key.PrefabricatedComponents, + PipeArea = pipeArea, + PipeAreaText = pipeArea == PipelineService.PipeArea_SHOP ? "工厂预制" : "现场安装", + TotalWeldJointCount = totalCount, + WeldedWeldJointCount = weldedCount, + UnweldedWeldJointCount = totalCount - weldedCount + }; + }) + .Where(x => x.WeldedWeldJointCount > 0 && x.UnweldedWeldJointCount > 0) + .OrderBy(x => x.PipelineCode) + .ThenBy(x => x.PrefabricatedComponents) + .ToList(); + + if (!partialComponents.Any()) + { + return partialComponents; + } + + // 导出匹配率复用页面匹配规则,保证区域、未焊口及续作组件优先级完全一致。 + var pipelineIds = partialComponents.Select(x => x.PipelineId).Distinct().ToList(); + var matchOutputs = GetPipeMatMatch(projectId, pipelineIds, warehouseCode, null, pipeArea); + var componentRates = matchOutputs + .GroupBy(x => GetComponentKey(x.PipelineId, x.PrefabricatedComponents)) + .ToDictionary(x => x.Key, x => x.First().ComponentMatchRate ?? 0); + foreach (var component in partialComponents) + { + decimal componentRate; + componentRates.TryGetValue(GetComponentKey(component.PipelineId, component.PrefabricatedComponents), out componentRate); + component.ComponentMatchRate = componentRate; + component.ComponentMatchRateString = Math.Round(componentRate * 100, 2).ToString() + "%"; + } + + return partialComponents; + } + } + + private static string GetJointAttributeByPipeArea(string pipeArea) + { + if (pipeArea == PipelineService.PipeArea_SHOP) + { + return "预制口"; + } + if (pipeArea == PipelineService.PipeArea_FIELD) + { + return "安装口"; + } + return null; + } + + private static string GetComponentKey(string pipelineId, string componentCode) + { + return (pipelineId ?? string.Empty) + "\u001f" + (componentCode ?? string.Empty); + } /// /// 根据管线材料匹配结果,获取管线匹配率 /// diff --git a/SGGL/BLL/HJGL/BaseInfo/MaterialCodeLibService.cs b/SGGL/BLL/HJGL/BaseInfo/MaterialCodeLibService.cs index 1972854d..1886d8eb 100644 --- a/SGGL/BLL/HJGL/BaseInfo/MaterialCodeLibService.cs +++ b/SGGL/BLL/HJGL/BaseInfo/MaterialCodeLibService.cs @@ -59,7 +59,8 @@ PipeGrade = codeLib.PipeGrade, MaterialUnit = codeLib.MaterialUnit, ProjectId = codeLib.ProjectId, - Code = codeLib.Code + Code = codeLib.Code, + DesignInstitute = codeLib.DesignInstitute }; db.HJGL_MaterialCodeLib.InsertOnSubmit(newCodeLib); db.SubmitChanges(); @@ -89,6 +90,7 @@ newCodeLib.PipeGrade = codeLib.PipeGrade; newCodeLib.MaterialUnit = codeLib.MaterialUnit; newCodeLib.Code = codeLib.Code; + newCodeLib.DesignInstitute = codeLib.DesignInstitute; db.SubmitChanges(); } } @@ -231,6 +233,12 @@ /// [ExcelColumnName("类型")] public string MaterialName { get; set; } + + /// + /// 材料编码来源设计院。 + /// + [ExcelColumnName("所属设计院")] + public string DesignInstitute { get; set; } } } diff --git a/SGGL/BLL/HJGL/WeldingManage/PipelineMatService.cs b/SGGL/BLL/HJGL/WeldingManage/PipelineMatService.cs index 0c00a027..ca07e9bc 100644 --- a/SGGL/BLL/HJGL/WeldingManage/PipelineMatService.cs +++ b/SGGL/BLL/HJGL/WeldingManage/PipelineMatService.cs @@ -36,6 +36,7 @@ namespace BLL PipelineId = pipelineMat.PipelineId, Number = pipelineMat.Number, PrefabricatedComponents = pipelineMat.PrefabricatedComponents, + PipeArea = pipelineMat.PipeArea, }; db.HJGL_PipeLineMat.InsertOnSubmit(newPipelineMat); db.SubmitChanges(); @@ -57,6 +58,7 @@ namespace BLL newPipelineMat.PipelineId = pipelineMat.PipelineId; newPipelineMat.Number = pipelineMat.Number; newPipelineMat.PrefabricatedComponents = pipelineMat.PrefabricatedComponents; + newPipelineMat.PipeArea = pipelineMat.PipeArea; db.SubmitChanges(); } } @@ -80,6 +82,20 @@ namespace BLL } } + /// + /// 更新材料用途,1 为工厂预制,2 为现场安装。 + /// + public static void UpdatePipeArea(string pipelineMatId, string pipeArea) + { + Model.SGGLDB db = Funs.DB; + Model.HJGL_PipeLineMat pipeLineMat = db.HJGL_PipeLineMat.FirstOrDefault(e => e.PipeLineMatId == pipelineMatId); + if (pipeLineMat != null) + { + pipeLineMat.PipeArea = pipeArea; + db.SubmitChanges(); + } + } + /// /// 根据材料匹配结果反写材料主编码 /// diff --git a/SGGL/BLL/HJGL/WeldingManage/WeldingDailyService.cs b/SGGL/BLL/HJGL/WeldingManage/WeldingDailyService.cs index b55df11b..eada6c80 100644 --- a/SGGL/BLL/HJGL/WeldingManage/WeldingDailyService.cs +++ b/SGGL/BLL/HJGL/WeldingManage/WeldingDailyService.cs @@ -295,6 +295,179 @@ namespace BLL } #region 焊接日报待审核 + /// + /// 获取焊接日报待审核明细列表。 + /// + /// 项目ID + /// 单位工程ID,为空时不按单位工程过滤 + /// 焊接日期,为空时不按日期过滤 + /// 管线编号关键字 + /// 焊工编号关键字 + /// 待审核明细列表 + public static List GetWeldingDailyTempDetailList(string projectId, + string unitWorkId, DateTime? weldingDate, string pipelineCode, string welderCode) + { + if (string.IsNullOrEmpty(projectId)) + { + return new List(); + } + + using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) + { + var query = QueryPendingWeldingDailyTempDetails(db); + query = query.Where(x => x.ProjectId == projectId); + if (!string.IsNullOrEmpty(unitWorkId)) + { + query = query.Where(x => x.UnitWorkId == unitWorkId); + } + if (weldingDate.HasValue) + { + DateTime startDate = weldingDate.Value.Date; + DateTime endDate = startDate.AddDays(1); + query = query.Where(x => x.WeldingDate >= startDate && x.WeldingDate < endDate); + } + if (!string.IsNullOrEmpty(pipelineCode)) + { + query = query.Where(x => x.PipelineCode != null && x.PipelineCode.Contains(pipelineCode)); + } + if (!string.IsNullOrEmpty(welderCode)) + { + query = query.Where(x => (x.CoverWelderCode != null && x.CoverWelderCode.Contains(welderCode)) + || (x.BackingWelderCode != null && x.BackingWelderCode.Contains(welderCode))); + } + + var data = query.OrderBy(x => x.PipelineCode).ThenBy(x => x.WeldJointCode).ToList(); + SetWeldingDailyTempDetailAttachUrls(db, data); + return data; + } + } + + /// + /// 获取单条焊接日报待审核明细。 + /// + /// 待审核明细ID + /// 待审核明细,不存在时返回空 + public static Model.WeldingDailyTempDetailItem GetWeldingDailyTempDetailById(string tempDetailId) + { + if (string.IsNullOrEmpty(tempDetailId)) + { + return null; + } + + using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) + { + var data = QueryPendingWeldingDailyTempDetails(db) + .Where(x => x.TempDetailId == tempDetailId) + .Take(1) + .ToList(); + SetWeldingDailyTempDetailAttachUrls(db, data); + return data.FirstOrDefault(); + } + } + + /// + /// 构造待审核查询。PC端列表和接口列表、明细均从这里读取,确保字段映射和待审核状态一致。 + /// + private static System.Linq.IQueryable QueryPendingWeldingDailyTempDetails(Model.SGGLDB db) + { + // 待审核模块只展示 AuditState=0;审核、删除仍复用本类下方已有批量业务方法。 + return from temp in db.HJGL_WeldingDailyTempDetail + join jotItem in db.View_HJGL_WeldJoint on temp.WeldJointId equals jotItem.WeldJointId into jotItems + from jot in jotItems.DefaultIfEmpty() + join coverItem in db.SitePerson_Person on temp.CoverWelderId equals coverItem.PersonId into coverItems + from coverWelder in coverItems.DefaultIfEmpty() + join backingItem in db.SitePerson_Person on temp.BackingWelderId equals backingItem.PersonId into backingItems + from backingWelder in backingItems.DefaultIfEmpty() + join locationItem in db.Base_WeldingLocation on temp.WeldingLocationId equals locationItem.WeldingLocationId into locationItems + from location in locationItems.DefaultIfEmpty() + join submitItem in db.Person_Persons on temp.SubmitPersonId equals submitItem.PersonId into submitItems + from submitPerson in submitItems.DefaultIfEmpty() + where temp.AuditState == 0 + select new Model.WeldingDailyTempDetailItem + { + TempDetailId = temp.TempDetailId, + ProjectId = temp.ProjectId, + UnitId = temp.UnitId, + UnitWorkId = temp.UnitWorkId, + WeldJointId = temp.WeldJointId, + PipelineId = jot == null ? null : jot.PipelineId, + PipelineCode = jot == null ? null : jot.PipelineCode, + WeldJointCode = jot == null ? null : jot.WeldJointCode, + WeldingDate = temp.WeldingDate, + CoverWelderId = temp.CoverWelderId, + CoverWelderCode = coverWelder == null ? null : coverWelder.WelderCode, + BackingWelderId = temp.BackingWelderId, + BackingWelderCode = backingWelder == null ? null : backingWelder.WelderCode, + JointAttribute = temp.JointAttribute, + WeldingLocationId = temp.WeldingLocationId, + WeldingLocationCode = location == null ? null : location.WeldingLocationCode, + WeldingMode = temp.WeldingMode, + Material1Code = jot == null ? null : jot.Material1Code, + Material2Code = jot == null ? null : jot.Material2Code, + DNDia = jot == null ? null : jot.DNDia, + Size = jot == null ? (decimal?)null : jot.Size, + Dia = jot == null ? (decimal?)null : jot.Dia, + Thickness = jot == null ? (decimal?)null : jot.Thickness, + WeldTypeCode = jot == null ? null : jot.WeldTypeCode, + WeldingMethodCode = jot == null ? null : jot.WeldingMethodCode, + WeldingWireCode = jot == null ? null : jot.WeldingWireCode, + WeldingRodCode = jot == null ? null : jot.WeldingRodCode, + SubmitPersonId = temp.SubmitPersonId, + SubmitPersonName = submitPerson == null ? null : submitPerson.PersonName, + SubmitDate = temp.SubmitDate, + AttachUrl = temp.AttachUrl, + AuditState = temp.AuditState, + AuditMan = temp.AuditMan, + AuditDate = temp.AuditDate, + AuditRemark = temp.AuditRemark + }; + } + + /// + /// 按待审核明细ID批量回写焊前、焊后附件地址。 + /// + private static void SetWeldingDailyTempDetailAttachUrls(Model.SGGLDB db, + List data) + { + if (data == null || data.Count == 0) + { + return; + } + + var toKeyIds = data.SelectMany(x => new[] + { + x.TempDetailId + "#Before", + x.TempDetailId + "#After" + }).ToList(); + var attachUrlMap = db.AttachFile + .Where(x => x.MenuId == Const.HJGL_WeldReportMenuId && toKeyIds.Contains(x.ToKeyId)) + .Select(x => new { x.ToKeyId, x.AttachUrl }) + .ToList() + .GroupBy(x => x.ToKeyId) + .ToDictionary(x => x.Key, x => x.Select(y => y.AttachUrl).FirstOrDefault()); + + foreach (var item in data) + { + string beforeUrl; + if (attachUrlMap.TryGetValue(item.TempDetailId + "#Before", out beforeUrl)) + { + // API统一返回斜杠路径,PC端继续兼容原有反斜杠路径显示逻辑。 + item.BeforePhotoUrl = NormalizeAttachUrl(beforeUrl); + } + + string afterUrl; + if (attachUrlMap.TryGetValue(item.TempDetailId + "#After", out afterUrl)) + { + item.AfterPhotoUrl = NormalizeAttachUrl(afterUrl); + } + } + } + + private static string NormalizeAttachUrl(string attachUrl) + { + return string.IsNullOrEmpty(attachUrl) ? attachUrl : attachUrl.Replace('\\', '/'); + } + /// /// 移动端按焊口保存焊接日报待审核明细 /// @@ -610,9 +783,9 @@ namespace BLL return weldingDaily; } - var submitPerson = Funs.DB.Person_Persons.FirstOrDefault(x => x.PersonId == tempDetail.SubmitPersonId); - string personName = submitPerson != null ? submitPerson.PersonName : string.Empty; - string perfix = string.Format("{0:yyyyMMdd}", tempDetail.WeldingDate) + "-" + personName + "-"; + var submitUnitwork = Funs.DB.WBS_UnitWork.FirstOrDefault(x => x.UnitWorkId == tempDetail.UnitWorkId); + string unitWorkName = submitUnitwork != null ? submitUnitwork.UnitWorkName : string.Empty; + string perfix = string.Format("{0:yyyyMMdd}", tempDetail.WeldingDate) + "-" + unitWorkName + "-"; weldingDaily = new Model.HJGL_WeldingDaily { WeldingDailyId = Guid.NewGuid().ToString(), diff --git a/SGGL/FineUIPro.Web/File/Excel/DataIn/MaterialCodeLib.xlsx b/SGGL/FineUIPro.Web/File/Excel/DataIn/MaterialCodeLib.xlsx index d03e27fb..e5222ed6 100644 Binary files a/SGGL/FineUIPro.Web/File/Excel/DataIn/MaterialCodeLib.xlsx and b/SGGL/FineUIPro.Web/File/Excel/DataIn/MaterialCodeLib.xlsx differ diff --git a/SGGL/FineUIPro.Web/File/Excel/DataIn/PipelineMat.xlsx b/SGGL/FineUIPro.Web/File/Excel/DataIn/PipelineMat.xlsx index f5949321..def3989f 100644 Binary files a/SGGL/FineUIPro.Web/File/Excel/DataIn/PipelineMat.xlsx and b/SGGL/FineUIPro.Web/File/Excel/DataIn/PipelineMat.xlsx differ diff --git a/SGGL/FineUIPro.Web/File/Excel/DataIn/PipelineMatWithBatch.xlsx b/SGGL/FineUIPro.Web/File/Excel/DataIn/PipelineMatWithBatch.xlsx index fe6cc8cd..f8ca3c32 100644 Binary files a/SGGL/FineUIPro.Web/File/Excel/DataIn/PipelineMatWithBatch.xlsx and b/SGGL/FineUIPro.Web/File/Excel/DataIn/PipelineMatWithBatch.xlsx differ diff --git a/SGGL/FineUIPro.Web/File/Fastreport/无损检测委托单_附件6.frx b/SGGL/FineUIPro.Web/File/Fastreport/无损检测委托单_附件6.frx new file mode 100644 index 00000000..868c0f75 --- /dev/null +++ b/SGGL/FineUIPro.Web/File/Fastreport/无损检测委托单_附件6.frx @@ -0,0 +1,344 @@ + + + using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Windows.Forms; +using System.Drawing; +using System.Data; +using FastReport; +using FastReport.Data; +using FastReport.Dialog; +using FastReport.Barcode; +using FastReport.Table; +using FastReport.Utils; + +namespace FastReport +{ + public class ReportScript + { + + + private void Table4_ManualBuild(object sender, EventArgs e) + { + DataSourceBase rowData = Report.GetDataSource("Table1"); + // init the data source + rowData.Init(); + + // print the first table row - it is a header + Table4.PrintRow(0); + // each PrintRow call must be followed by either PrintColumn or PrintColumns call + // to print cells on the row + Table4.PrintColumns(); + + // now enumerate the data source and print the table body + + // print the table body + Table4.PrintRow(1); + Table4.PrintColumns(); + Table4.PrintRow(2); + Table4.PrintColumns(); + Table4.PrintRow(3); + Table4.PrintColumns(); + Table4.PrintRow(4); + Table4.PrintColumns(); + Table4.PrintRow(5); + Table4.PrintColumns(); + + // go next data source row + rowData.Next(); + + } + + private void Table5_ManualBuild(object sender, EventArgs e) + { + Table5.PrintRow(0); + Table5.PrintColumns(); + Table5.PrintRow(1); + Table5.PrintColumns(); + } + + + private int x; + private void Tabel_Data_ManualBuild(object sender, EventArgs e) + { + DataSourceBase rowData = Report.GetDataSource("Data"); + // init the data source + rowData.Init(); + + // print the first table row - it is a header + Tabel_Data.PrintRow(0); + // each PrintRow call must be followed by either PrintColumn or PrintColumns call + // to print cells on the row + Tabel_Data.PrintColumns(); + x=0; + // now enumerate the data source and print the table body + while (rowData.HasMoreRows) + { + x++; + // print the table body + Tabel_Data.PrintRow(1); + Tabel_Data.PrintColumns(); + + // go next data source row + rowData.Next(); + } + } + } +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SGGL/FineUIPro.Web/File/Fastreport/管道焊口检测委托单_附件4.frx b/SGGL/FineUIPro.Web/File/Fastreport/管道焊口检测委托单_附件4.frx new file mode 100644 index 00000000..ee74b1e8 --- /dev/null +++ b/SGGL/FineUIPro.Web/File/Fastreport/管道焊口检测委托单_附件4.frx @@ -0,0 +1,360 @@ + + + using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Windows.Forms; +using System.Drawing; +using System.Data; +using FastReport; +using FastReport.Data; +using FastReport.Dialog; +using FastReport.Barcode; +using FastReport.Table; +using FastReport.Utils; + +namespace FastReport +{ + public class ReportScript + { + + + private void Table4_ManualBuild(object sender, EventArgs e) + { + DataSourceBase rowData = Report.GetDataSource("Table1"); + // init the data source + rowData.Init(); + + // print the first table row - it is a header + Table4.PrintRow(0); + // each PrintRow call must be followed by either PrintColumn or PrintColumns call + // to print cells on the row + Table4.PrintColumns(); + + // now enumerate the data source and print the table body + + // print the table body + Table4.PrintRow(1); + Table4.PrintColumns(); + Table4.PrintRow(2); + Table4.PrintColumns(); + Table4.PrintRow(3); + Table4.PrintColumns(); + Table4.PrintRow(4); + Table4.PrintColumns(); + Table4.PrintRow(5); + Table4.PrintColumns(); + Table4.PrintRow(6); + Table4.PrintColumns(); + // go next data source row + rowData.Next(); + + } + + private void Table5_ManualBuild(object sender, EventArgs e) + { + Table5.PrintRow(0); + Table5.PrintColumns(); + Table5.PrintRow(1); + Table5.PrintColumns(); + } + + + private int x; + private void Tabel_Data_ManualBuild(object sender, EventArgs e) + { + DataSourceBase rowData = Report.GetDataSource("Data"); + // init the data source + rowData.Init(); + + // print the first table row - it is a header + Tabel_Data.PrintRow(0); + // each PrintRow call must be followed by either PrintColumn or PrintColumns call + // to print cells on the row + Tabel_Data.PrintColumns(); + x=0; + // now enumerate the data source and print the table body + while (rowData.HasMoreRows) + { + x++; + // print the table body + Tabel_Data.PrintRow(1); + Tabel_Data.PrintColumns(); + + // go next data source row + rowData.Next(); + } + } + } +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SGGL/FineUIPro.Web/File/Fastreport/管道焊缝热处理委托_附件5.frx b/SGGL/FineUIPro.Web/File/Fastreport/管道焊缝热处理委托_附件5.frx new file mode 100644 index 00000000..c758bce4 --- /dev/null +++ b/SGGL/FineUIPro.Web/File/Fastreport/管道焊缝热处理委托_附件5.frx @@ -0,0 +1,239 @@ + + + using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Windows.Forms; +using System.Drawing; +using System.Data; +using FastReport; +using FastReport.Data; +using FastReport.Dialog; +using FastReport.Barcode; +using FastReport.Table; +using FastReport.Utils; + +namespace FastReport +{ + public class ReportScript + { + + + + private int x; + private void Tabel_Data_ManualBuild(object sender, EventArgs e) + { + DataSourceBase rowData = Report.GetDataSource("Data"); + // init the data source + rowData.Init(); + + // print the first table row - it is a header + Tabel_Data.PrintRow(0); + // each PrintRow call must be followed by either PrintColumn or PrintColumns call + // to print cells on the row + Tabel_Data.PrintColumns(); + x=0; + // now enumerate the data source and print the table body + while (rowData.HasMoreRows) + { + x++; + // print the table body + Tabel_Data.PrintRow(1); + Tabel_Data.PrintColumns(); + + // go next data source row + rowData.Next(); + } + } + } +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SGGL/FineUIPro.Web/FineUIPro.Web.csproj b/SGGL/FineUIPro.Web/FineUIPro.Web.csproj index 2c8589e7..66a80cd3 100644 --- a/SGGL/FineUIPro.Web/FineUIPro.Web.csproj +++ b/SGGL/FineUIPro.Web/FineUIPro.Web.csproj @@ -17444,7 +17444,7 @@ - + diff --git a/SGGL/FineUIPro.Web/HJGL/BaseInfo/MaterialCodeLib.aspx b/SGGL/FineUIPro.Web/HJGL/BaseInfo/MaterialCodeLib.aspx index 4c64fc73..95e5f521 100644 --- a/SGGL/FineUIPro.Web/HJGL/BaseInfo/MaterialCodeLib.aspx +++ b/SGGL/FineUIPro.Web/HJGL/BaseInfo/MaterialCodeLib.aspx @@ -70,6 +70,9 @@ + + diff --git a/SGGL/FineUIPro.Web/HJGL/BaseInfo/MaterialCodeLibEdit.aspx b/SGGL/FineUIPro.Web/HJGL/BaseInfo/MaterialCodeLibEdit.aspx index 9cbad1bc..085173be 100644 --- a/SGGL/FineUIPro.Web/HJGL/BaseInfo/MaterialCodeLibEdit.aspx +++ b/SGGL/FineUIPro.Web/HJGL/BaseInfo/MaterialCodeLibEdit.aspx @@ -55,13 +55,20 @@ - + + + + + + + diff --git a/SGGL/FineUIPro.Web/HJGL/BaseInfo/MaterialCodeLibEdit.aspx.cs b/SGGL/FineUIPro.Web/HJGL/BaseInfo/MaterialCodeLibEdit.aspx.cs index 52dda9b8..64e4c0aa 100644 --- a/SGGL/FineUIPro.Web/HJGL/BaseInfo/MaterialCodeLibEdit.aspx.cs +++ b/SGGL/FineUIPro.Web/HJGL/BaseInfo/MaterialCodeLibEdit.aspx.cs @@ -31,6 +31,7 @@ namespace FineUIPro.Web.HJGL.BaseInfo txtMaterialSpec.Text = lib.MaterialSpec; txtMaterialDef.Text = lib.MaterialDef; txtMaterialUnit.Text = lib.MaterialUnit; + txtDesignInstitute.Text = lib.DesignInstitute; //txtMaterialCode.Enabled = false; } else @@ -71,7 +72,10 @@ namespace FineUIPro.Web.HJGL.BaseInfo MaterialMade = this.txtMaterialMade.Text.Trim(), MaterialDef = this.txtMaterialDef.Text.Trim(), MaterialUnit = txtMaterialUnit.Text.Trim(), - Code = this.txtCode.Text.Trim() + Code = this.txtCode.Text.Trim(), + DesignInstitute = string.IsNullOrWhiteSpace(txtDesignInstitute.Text) + ? null + : txtDesignInstitute.Text.Trim() }; if (!string.IsNullOrEmpty(materialCode)) @@ -91,4 +95,4 @@ namespace FineUIPro.Web.HJGL.BaseInfo } #endregion } -} \ No newline at end of file +} diff --git a/SGGL/FineUIPro.Web/HJGL/BaseInfo/MaterialCodeLibEdit.aspx.designer.cs b/SGGL/FineUIPro.Web/HJGL/BaseInfo/MaterialCodeLibEdit.aspx.designer.cs index 13ad643c..0fc32ebd 100644 --- a/SGGL/FineUIPro.Web/HJGL/BaseInfo/MaterialCodeLibEdit.aspx.designer.cs +++ b/SGGL/FineUIPro.Web/HJGL/BaseInfo/MaterialCodeLibEdit.aspx.designer.cs @@ -101,6 +101,11 @@ namespace FineUIPro.Web.HJGL.BaseInfo { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.TextBox txtMaterialUnit; + + /// + /// txtDesignInstitute 控件。 + /// + protected global::FineUIPro.TextBox txtDesignInstitute; /// /// txtMaterialDef 控件。 diff --git a/SGGL/FineUIPro.Web/HJGL/BaseInfo/MaterialCodeLibIn.aspx.cs b/SGGL/FineUIPro.Web/HJGL/BaseInfo/MaterialCodeLibIn.aspx.cs index d9d8796b..8c4eea67 100644 --- a/SGGL/FineUIPro.Web/HJGL/BaseInfo/MaterialCodeLibIn.aspx.cs +++ b/SGGL/FineUIPro.Web/HJGL/BaseInfo/MaterialCodeLibIn.aspx.cs @@ -153,6 +153,9 @@ namespace FineUIPro.Web.HJGL.BaseInfo // item.MaterialMade = dv[i]["材质"].ToString(); item.MaterialUnit = rows[i].MaterialUnit; item.MaterialName = rows[i].MaterialName; + item.DesignInstitute = string.IsNullOrWhiteSpace(rows[i].DesignInstitute) + ? null + : rows[i].DesignInstitute.Trim(); //item.PipeGrade = dv[i]["管道等级"].ToString(); //item.ProjectId = CurrUser.LoginProjectId; //= SQLHelper.GetNewID(typeof(Model.Editor_CostReport)); @@ -236,6 +239,7 @@ namespace FineUIPro.Web.HJGL.BaseInfo MaterialSpec = x.MaterialSpec, MaterialUnit = x.MaterialUnit, MaterialName = x.MaterialName, + DesignInstitute = x.DesignInstitute, }).DistinctBy(temp => new { @@ -243,7 +247,8 @@ namespace FineUIPro.Web.HJGL.BaseInfo temp.MaterialDef, temp.MaterialSpec, temp.MaterialUnit, - temp.MaterialName + temp.MaterialName, + temp.DesignInstitute }).ToList(); codeLib_update = (from x in codeLib_update select new HJGL_MaterialCodeLib @@ -253,6 +258,7 @@ namespace FineUIPro.Web.HJGL.BaseInfo MaterialSpec = x.MaterialSpec, MaterialUnit = x.MaterialUnit, MaterialName = x.MaterialName, + DesignInstitute = x.DesignInstitute, }).DistinctBy(temp => new { @@ -260,7 +266,8 @@ namespace FineUIPro.Web.HJGL.BaseInfo temp.MaterialDef, temp.MaterialSpec, temp.MaterialUnit, - temp.MaterialName + temp.MaterialName, + temp.DesignInstitute }).ToList(); foreach (var item in codeLib_update) { @@ -281,4 +288,4 @@ namespace FineUIPro.Web.HJGL.BaseInfo } #endregion } -} \ 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 38502bbb..e712935e 100644 --- a/SGGL/FineUIPro.Web/HJGL/DataImport/MaterialInformation.aspx +++ b/SGGL/FineUIPro.Web/HJGL/DataImport/MaterialInformation.aspx @@ -88,13 +88,7 @@ - - - - + @@ -156,6 +150,9 @@ FieldType="String" HeaderText="数量" HeaderTextAlign="Center" TextAlign="Left"> + + @@ -218,6 +215,9 @@ FieldType="String" HeaderText="数量" HeaderTextAlign="Center" TextAlign="Left"> + + @@ -279,6 +279,9 @@ FieldType="String" HeaderText="数量" HeaderTextAlign="Center" TextAlign="Left"> + + diff --git a/SGGL/FineUIPro.Web/HJGL/DataImport/MaterialInformation.aspx.cs b/SGGL/FineUIPro.Web/HJGL/DataImport/MaterialInformation.aspx.cs index ee75bb0e..c0333797 100644 --- a/SGGL/FineUIPro.Web/HJGL/DataImport/MaterialInformation.aspx.cs +++ b/SGGL/FineUIPro.Web/HJGL/DataImport/MaterialInformation.aspx.cs @@ -327,13 +327,15 @@ namespace FineUIPro.Web.HJGL.DataImport 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 + pipe.Number,pipe.PrefabricatedComponents, + CASE pipe.PipeArea WHEN '1' THEN N'工厂预制' WHEN '2' THEN N'现场安装' END AS PipeAreaText, + 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 !='' "; + WHERE line.UnitWorkId=@UnitWorkId and pipe.PipeArea='1' and pipe.PrefabricatedComponents !='' "; List listStr = new List(); //if (!string.IsNullOrEmpty(txtMaterialCode.Text.Trim())) //{ @@ -369,13 +371,15 @@ namespace FineUIPro.Web.HJGL.DataImport 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 + pipe.Number, + CASE pipe.PipeArea WHEN '1' THEN N'工厂预制' WHEN '2' THEN N'现场安装' END AS PipeAreaText, + 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' "; + WHERE line.UnitWorkId=@UnitWorkId and pipe.PipeArea='2' "; List listStr = new List(); if (!string.IsNullOrEmpty(pipelineId)) { @@ -407,13 +411,15 @@ namespace FineUIPro.Web.HJGL.DataImport 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 + pipe.Number,pipe.PrefabricatedComponents, + CASE pipe.PipeArea WHEN '1' THEN N'工厂预制' WHEN '2' THEN N'现场安装' END AS PipeAreaText, + 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='') "; + WHERE line.UnitWorkId=@UnitWorkId and pipe.PipeArea='1' and (pipe.PrefabricatedComponents is null or pipe.PrefabricatedComponents='') "; List listStr = new List(); //if (!string.IsNullOrEmpty(txtMaterialCode.Text.Trim())) //{ @@ -1006,64 +1012,10 @@ namespace FineUIPro.Web.HJGL.DataImport this.BindGrid2(this.tvControlItem.SelectedNodeID, this.hdUnitWorkId.Text); } - #region 导入 - /// - /// 导入按钮 - /// - /// - /// - protected void btnImport_Click(object sender, EventArgs e) - { - Model.WBS_UnitWork unitWork = BLL.UnitWorkService.GetUnitWorkByUnitWorkId(this.tvControlItem.SelectedNodeID); - if (unitWork != null) - { - PageContext.RegisterStartupScript(Window2.GetShowReference(String.Format("PipelineListIn.aspx?UnitWorkId={0}", this.tvControlItem.SelectedNodeID, "导入 - "))); - } - else - { - ShowNotify("请先选择单位工程!", MessageBoxIcon.Warning); - } - } - #endregion - #region 更新导入 - /// - /// 更新导入按钮 - /// - /// - /// - protected void btnUpdateImport_Click(object sender, EventArgs e) - { - Model.WBS_UnitWork unitWork = BLL.UnitWorkService.GetUnitWorkByUnitWorkId(this.tvControlItem.SelectedNodeID); - if (unitWork != null) - { - PageContext.RegisterStartupScript(Window2.GetShowReference(String.Format("PipelineListUpdateIn.aspx?UnitWorkId={0}", this.tvControlItem.SelectedNodeID, "更新导入 - "))); - } - else - { - ShowNotify("请先选择单位工程!", MessageBoxIcon.Warning); - } - } - #endregion - #region PDMS导入 - /// - /// 导入按钮 - /// - /// - /// - protected void btnPDMSImport_Click(object sender, EventArgs e) - { - Model.WBS_UnitWork unitWork = BLL.UnitWorkService.GetUnitWorkByUnitWorkId(this.tvControlItem.SelectedNodeID); - if (unitWork != null) - { - PageContext.RegisterStartupScript(Window2.GetShowReference(String.Format("PipelineListPDMSIn.aspx?UnitWorkId={0}", this.tvControlItem.SelectedNodeID, "导入 - "))); - } - else - { - ShowNotify("请先选择单位工程!", MessageBoxIcon.Warning); - } - } + + #region 管线材料导入 /// /// 管线材料导入 diff --git a/SGGL/FineUIPro.Web/HJGL/DataImport/MaterialInformation.aspx.designer.cs b/SGGL/FineUIPro.Web/HJGL/DataImport/MaterialInformation.aspx.designer.cs index 2bf6f2b7..f8071939 100644 --- a/SGGL/FineUIPro.Web/HJGL/DataImport/MaterialInformation.aspx.designer.cs +++ b/SGGL/FineUIPro.Web/HJGL/DataImport/MaterialInformation.aspx.designer.cs @@ -185,33 +185,6 @@ namespace FineUIPro.Web.HJGL.DataImport /// protected global::FineUIPro.Button btnPrint; - /// - /// btnImport 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUIPro.Button btnImport; - - /// - /// btnUpdateImport 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUIPro.Button btnUpdateImport; - - /// - /// btnPDMSImport 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::FineUIPro.Button btnPDMSImport; - /// /// btnMatImport 控件。 /// diff --git a/SGGL/FineUIPro.Web/HJGL/DataImport/MaterialInformationEdit.aspx b/SGGL/FineUIPro.Web/HJGL/DataImport/MaterialInformationEdit.aspx index 57ea73d4..8701edce 100644 --- a/SGGL/FineUIPro.Web/HJGL/DataImport/MaterialInformationEdit.aspx +++ b/SGGL/FineUIPro.Web/HJGL/DataImport/MaterialInformationEdit.aspx @@ -44,6 +44,15 @@ + + + + + + + + diff --git a/SGGL/FineUIPro.Web/HJGL/DataImport/MaterialInformationEdit.aspx.cs b/SGGL/FineUIPro.Web/HJGL/DataImport/MaterialInformationEdit.aspx.cs index 386787b0..94cc7a3f 100644 --- a/SGGL/FineUIPro.Web/HJGL/DataImport/MaterialInformationEdit.aspx.cs +++ b/SGGL/FineUIPro.Web/HJGL/DataImport/MaterialInformationEdit.aspx.cs @@ -44,6 +44,9 @@ namespace FineUIPro.Web.HJGL.DataImport ? Const._Null : pipeLineMat.MaterialCode; this.txtMaterialCode.Text = pipeLineMat.MaterialCode2; + this.drpPipeArea.SelectedValue = string.IsNullOrEmpty(pipeLineMat.PipeArea) + ? PipelineService.PipeArea_SHOP + : pipeLineMat.PipeArea; BindMaterialDetails(pipeLineMat.MaterialCode, false); } } @@ -118,6 +121,7 @@ namespace FineUIPro.Web.HJGL.DataImport this.PipeLineMatId, mainMaterialCode, this.txtMaterialCode.Text.Trim()); + PipelineMatService.UpdatePipeArea(this.PipeLineMatId, this.drpPipeArea.SelectedValue); ShowNotify("保存成功!", MessageBoxIcon.Success); PageContext.RegisterStartupScript(ActiveWindow.GetHidePostBackReference()); } diff --git a/SGGL/FineUIPro.Web/HJGL/DataImport/MaterialInformationEdit.aspx.designer.cs b/SGGL/FineUIPro.Web/HJGL/DataImport/MaterialInformationEdit.aspx.designer.cs index ea018533..13bc9da0 100644 --- a/SGGL/FineUIPro.Web/HJGL/DataImport/MaterialInformationEdit.aspx.designer.cs +++ b/SGGL/FineUIPro.Web/HJGL/DataImport/MaterialInformationEdit.aspx.designer.cs @@ -77,6 +77,11 @@ namespace FineUIPro.Web.HJGL.DataImport /// protected global::FineUIPro.TextBox txtBatchNo; + /// + /// drpPipeArea 控件。 + /// + protected global::FineUIPro.DropDownList drpPipeArea; + /// /// Toolbar1 控件。 /// diff --git a/SGGL/FineUIPro.Web/HJGL/HotProcessHard/HotProessTrust.aspx.cs b/SGGL/FineUIPro.Web/HJGL/HotProcessHard/HotProessTrust.aspx.cs index cc477ae6..cb65760b 100644 --- a/SGGL/FineUIPro.Web/HJGL/HotProcessHard/HotProessTrust.aspx.cs +++ b/SGGL/FineUIPro.Web/HJGL/HotProcessHard/HotProessTrust.aspx.cs @@ -674,7 +674,7 @@ namespace FineUIPro.Web.HJGL.HotProcessHard string initTemplatePath = ""; string rootPath = Server.MapPath("~/"); - initTemplatePath = "File\\Fastreport\\管道焊口热处理委托单NoPic.frx"; + initTemplatePath = "File\\Fastreport\\管道焊缝热处理委托_附件5.frx"; if (File.Exists(rootPath + initTemplatePath)) { diff --git a/SGGL/FineUIPro.Web/HJGL/InfoQuery/JointQuery.aspx b/SGGL/FineUIPro.Web/HJGL/InfoQuery/JointQuery.aspx index 9b77e328..c1ecbeea 100644 --- a/SGGL/FineUIPro.Web/HJGL/InfoQuery/JointQuery.aspx +++ b/SGGL/FineUIPro.Web/HJGL/InfoQuery/JointQuery.aspx @@ -233,11 +233,10 @@ - - - - + OnSelectedIndexChanged="ddlPageSize_SelectedIndexChanged"> + + + diff --git a/SGGL/FineUIPro.Web/HJGL/PointTrust/TrustBatch.aspx b/SGGL/FineUIPro.Web/HJGL/PointTrust/TrustBatch.aspx index 6c781a35..b3960430 100644 --- a/SGGL/FineUIPro.Web/HJGL/PointTrust/TrustBatch.aspx +++ b/SGGL/FineUIPro.Web/HJGL/PointTrust/TrustBatch.aspx @@ -77,7 +77,7 @@ OnClick="btnDelete_Click"> @@ -115,7 +115,7 @@ + MenuID="MenuPrint" ShowMenuIcon="true"> @@ -200,6 +200,10 @@ + + + + diff --git a/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldMatMatch.aspx.cs b/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldMatMatch.aspx.cs index f31a673a..61700c2a 100644 --- a/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldMatMatch.aspx.cs +++ b/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldMatMatch.aspx.cs @@ -1,10 +1,12 @@ using BLL; using FineUIPro.Web.DataShow; +using MiniExcelLibs; using Model; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; +using System.IO; using System.Linq; namespace FineUIPro.Web.HJGL.WeldingManage @@ -13,6 +15,19 @@ namespace FineUIPro.Web.HJGL.WeldingManage { public int pageSize = PipelineService.pageSize; + private const string TreeCommandBuilding = "建筑工程"; + private const string TreeCommandInstallation = "安装工程"; + private const string TreeCommandUnitWork = "单位工程"; + private const string TreeCommandPipeline = "管线"; + private const string TreeCommandLoad = "加载"; + private const string PrefabricationJointAttribute = "预制口"; + private const string InstallationJointAttribute = "安装口"; + private const string WeldingRodConsumablesType = "2"; + private const string WeldingWireConsumablesType = "1"; + private const string ManualWeldingMode = "手动"; + private const string CoverMaterialClassFe1 = "Fe-1"; + private const string CoverMaterialClassFe3 = "Fe-3"; + public string WarehouseId { get @@ -89,29 +104,61 @@ namespace FineUIPro.Web.HJGL.WeldingManage //ctlAuditFlow.Url = BLL.Project_SysSetService.GetAvevaNetUrl(this.CurrUser.LoginProjectId); if (!IsPostBack) { - tw_PipeMatMatchOutputs = new List(); - PipeArea = Request.Params["PipeArea"]; - drpWarehouse.DataTextField = "Key"; - drpWarehouse.DataValueField = "Value"; - drpWarehouse.DataSource = BLL.TwInOutplanmasterService.GetWarehouseCode(this.CurrUser.LoginProjectId); - drpWarehouse.DataBind(); - drpWarehouse_SelectedIndexChanged(null, null); - HJGL_MaterialService.materialStockItems_FIELD = new List(); - HJGL_MaterialService.materialStockItems_SHOP = new List(); - dicSeclectPipeLine = 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(); - this.drpFlowingSection.DataTextField = "Value"; - this.drpFlowingSection.DataValueField = "Value"; - this.drpFlowingSection.DataSource = pipeline; - this.drpFlowingSection.DataBind(); - Funs.FineUIPleaseSelect(drpFlowingSection); - this.InitTreeMenu();//加载树 + InitializePage(); } } + /// + /// 初始化页面状态、筛选项和左侧管线树。 + /// + private void InitializePage() + { + tw_PipeMatMatchOutputs = new List(); + PipeArea = Request.Params["PipeArea"]; + BindWarehouseOptions(); + ResetMaterialStockCache(); + dicSeclectPipeLine = new Dictionary(); + priorityWeldJoints = new Dictionary>(); + BindFlowingSectionOptions(); + InitTreeMenu(); + } + + /// + /// 绑定当前项目可用仓库,并触发仓库切换后的树刷新。 + /// + private void BindWarehouseOptions() + { + drpWarehouse.DataTextField = "Key"; + drpWarehouse.DataValueField = "Value"; + drpWarehouse.DataSource = BLL.TwInOutplanmasterService.GetWarehouseCode(this.CurrUser.LoginProjectId); + drpWarehouse.DataBind(); + drpWarehouse_SelectedIndexChanged(null, null); + } + + /// + /// 清空材料库存缓存,避免首次加载沿用其他入口的区域缓存。 + /// + private void ResetMaterialStockCache() + { + HJGL_MaterialService.materialStockItems_FIELD = new List(); + HJGL_MaterialService.materialStockItems_SHOP = new List(); + } + + /// + /// 绑定当前项目的流水段筛选项。 + /// + private void BindFlowingSectionOptions() + { + var flowingSections = (from x in Funs.DB.HJGL_Pipeline + where x.ProjectId == this.CurrUser.LoginProjectId + select x.FlowingSection).Distinct().ToList(); + drpFlowingSection.DataTextField = "Value"; + drpFlowingSection.DataValueField = "Value"; + drpFlowingSection.DataSource = flowingSections; + drpFlowingSection.DataBind(); + Funs.FineUIPleaseSelect(drpFlowingSection); + } + #region 加载树装置-单位-工作区 /// @@ -121,20 +168,10 @@ namespace FineUIPro.Web.HJGL.WeldingManage { this.tvControlItem.Nodes.Clear(); - TreeNode rootNode1 = new TreeNode(); - rootNode1.NodeID = "1"; - rootNode1.Text = "建筑工程"; - rootNode1.CommandName = "建筑工程"; - rootNode1.Selectable = false; - rootNode1.EnableCheckBox = false; + TreeNode rootNode1 = CreateRootNode("1", TreeCommandBuilding, false, false); this.tvControlItem.Nodes.Add(rootNode1); - TreeNode rootNode2 = new TreeNode(); - rootNode2.NodeID = "2"; - rootNode2.Text = "安装工程"; - rootNode2.CommandName = "安装工程"; - rootNode2.Expanded = true; - rootNode2.EnableCheckBox = false; + TreeNode rootNode2 = CreateRootNode("2", TreeCommandInstallation, true, null); this.tvControlItem.Nodes.Add(rootNode2); var unitWorkList = (from x in Funs.DB.WBS_UnitWork @@ -143,57 +180,54 @@ namespace FineUIPro.Web.HJGL.WeldingManage orderby x.UnitWorkCode select x).ToList(); - List unitWork1 = null; - List unitWork2 = null; + BindUnitWorkNodes(rootNode1, unitWorkList.Where(x => x.ProjectType == "1"), false); + BindUnitWorkNodes(rootNode2, unitWorkList.Where(x => x.ProjectType == "2"), true); + } - unitWork1 = (from x in unitWorkList where x.ProjectType == "1" select x).ToList(); - unitWork2 = (from x in unitWorkList where x.ProjectType == "2" select x).ToList(); - - if (unitWork1.Count() > 0) + /// + /// 创建建筑工程或安装工程根节点。 + /// + private TreeNode CreateRootNode(string nodeId, string text, bool expanded, bool? selectable) + { + var rootNode = new TreeNode { - foreach (var q in unitWork1) - { - int a = GetUnitWorkTestPackagePipelineCount(q.UnitWorkId); - var unitNamesUnitIds = BLL.UnitService.getUnitNamesUnitIds(q.UnitId); - TreeNode tn1 = new TreeNode(); - tn1.NodeID = q.UnitWorkId; - tn1.Text = q.UnitWorkName + "【" + a.ToString() + "】" + "管线"; - tn1.ToolTip = "施工单位:" + unitNamesUnitIds; - tn1.CommandName = "单位工程"; - tn1.EnableExpandEvent = true; - tn1.EnableClickEvent = true; - tn1.EnableCheckBox = false; - rootNode1.Nodes.Add(tn1); - if (a > 0) - { - BindTestPackageNodes(tn1); - } - } + NodeID = nodeId, + Text = text, + CommandName = text, + Expanded = expanded, + EnableCheckBox = false + }; + if (selectable.HasValue) + { + rootNode.Selectable = selectable.Value; } - if (unitWork2.Count() > 0) - { - foreach (var q in unitWork2) - { - int a = GetUnitWorkTestPackagePipelineCount(q.UnitWorkId); - var unitNamesUnitIds = BLL.UnitService.getUnitNamesUnitIds(q.UnitId); - TreeNode tn2 = new TreeNode(); - tn2.NodeID = q.UnitWorkId; - tn2.Text = q.UnitWorkName + "【" + a.ToString() + "】" + "管线"; - if (q.UnitWorkId == this.hdUnitWorkId.Text) - { - tn2.Expanded = true; - } - tn2.ToolTip = "施工单位:" + unitNamesUnitIds; - tn2.CommandName = "单位工程"; - tn2.EnableExpandEvent = true; - tn2.EnableClickEvent = true; - tn2.EnableCheckBox = false; + return rootNode; + } - rootNode2.Nodes.Add(tn2); - if (a > 0) - { - BindTestPackageNodes(tn2); - } + /// + /// 将单位工程节点绑定到指定工程根节点。 + /// + private void BindUnitWorkNodes(TreeNode parentNode, IEnumerable unitWorks, bool expandSelectedNode) + { + foreach (var unitWork in unitWorks) + { + int pipelineCount = GetUnitWorkTestPackagePipelineCount(unitWork.UnitWorkId); + var unitNamesUnitIds = BLL.UnitService.getUnitNamesUnitIds(unitWork.UnitId); + TreeNode unitWorkNode = new TreeNode + { + NodeID = unitWork.UnitWorkId, + Text = unitWork.UnitWorkName + "【" + pipelineCount.ToString() + "】管线", + ToolTip = "施工单位:" + unitNamesUnitIds, + CommandName = TreeCommandUnitWork, + EnableExpandEvent = true, + EnableClickEvent = true, + EnableCheckBox = false, + Expanded = expandSelectedNode && unitWork.UnitWorkId == hdUnitWorkId.Text + }; + parentNode.Nodes.Add(unitWorkNode); + if (pipelineCount > 0) + { + BindTestPackageNodes(unitWorkNode); } } } @@ -219,16 +253,16 @@ namespace FineUIPro.Web.HJGL.WeldingManage TreeNode newNode = new TreeNode(); newNode.Text = item.PipelineCode; newNode.NodeID = item.PipelineId; - newNode.CommandName = "管线"; + newNode.CommandName = TreeCommandPipeline; newNode.EnableClickEvent = true; node.Nodes.Add(newNode); } if (pageindex < pageCount) { TreeNode newNode = new TreeNode(); - newNode.Text = "加载"; + newNode.Text = TreeCommandLoad; newNode.NodeID = SQLHelper.GetNewID(); - newNode.CommandName = "加载"; + newNode.CommandName = TreeCommandLoad; newNode.Icon = Icon.ArrowDown; newNode.EnableClickEvent = true; node.Nodes.Add(newNode); @@ -288,7 +322,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage } /// - /// 获取指定试压包下当前仓库、区域和筛选条件内尚未完成出库的管线。 + /// 获取指定试压包下当前仓库和页面筛选条件内尚未完成出库的管线;材料区域由匹配服务按材料明细过滤。 /// /// 试压包ID。 /// 符合材料匹配入口条件的管线列表。 @@ -306,7 +340,6 @@ namespace FineUIPro.Web.HJGL.WeldingManage where y == null && p.PTP_ID == ptpId && x.ProjectId == this.CurrUser.LoginProjectId - && x.PipeArea == PipeArea && x.PipelineCode.Contains(this.txtPipelineCode.Text.Trim()) && x.WarehouseId == WarehouseId orderby x.PipelineCode @@ -353,7 +386,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage /// protected void tvControlItem_NodeCommand(object sender, TreeCommandEventArgs e) { - if (e.CommandName == "加载") + if (e.CommandName == TreeCommandLoad) { string CommandName = e.Node.ParentNode.CommandName; e.Node.ParentNode.CommandName = (int.Parse(CommandName.Split('|')[0]) + 1) + "|" + int.Parse(CommandName.Split('|')[1]); @@ -475,7 +508,12 @@ namespace FineUIPro.Web.HJGL.WeldingManage selectList.Add(model.Id); } - if (IsMaterialCodeConfirmed(model, confirmedPipeLineMatIds)) + // 匹配率优先级高于历史确认状态,0% 或未满配材料不能再显示为绿色。 + if (model.MatchRate == null || model.MatchRate < 1) + { + Grid1.Rows[i].RowCssClass = "red"; + } + else if (IsMaterialCodeConfirmed(model, confirmedPipeLineMatIds)) { Grid1.Rows[i].RowCssClass = "green"; } @@ -483,10 +521,6 @@ namespace FineUIPro.Web.HJGL.WeldingManage { Grid1.Rows[i].RowCssClass = "priority"; } - else if (model.MatchRate < 1 || model.MatchRate == null) - { - Grid1.Rows[i].RowCssClass = "red"; - } } Grid1.SelectedRowIDArray = selectList.ToArray(); @@ -531,10 +565,11 @@ namespace FineUIPro.Web.HJGL.WeldingManage .Distinct() .ToList(); var reportWeldJointIds = Funs.DB.HJGL_WeldJoint - .Where(x => weldJointIds.Contains(x.WeldJointId)&& x.WeldingDailyId !=null) + .Where(x => weldJointIds.Contains(x.WeldJointId) && x.WeldingDailyId != null && x.WeldingDailyId != "") .Select(x => x.WeldJointId).Distinct().ToList(); return matchOutputs - .Where(x => string.IsNullOrEmpty(x.WeldJointId) || !taskWeldJointIds.Contains(x.WeldJointId) || reportWeldJointIds.Contains(x.WeldJointId)) + .Where(x => string.IsNullOrEmpty(x.WeldJointId) + || (!taskWeldJointIds.Contains(x.WeldJointId) && !reportWeldJointIds.Contains(x.WeldJointId))) .ToList(); } @@ -600,7 +635,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage /// 事件参数。 protected void btnMatchHelp_Click(object sender, EventArgs e) { - Alert.ShowInTop("1、管线绿色为匹配率100%,明细绿色为已反写材料主编码,红色为匹配率小于100%,蓝色为手动优先焊口。
2、一个焊口可能对应多条材料明细,该焊口全部有效明细已反写材料主编码后才允许一键生成任务单。
3、焊口已进行焊前准备,匹配了焊评才能生成任务单", "说明", MessageBoxIcon.Information); + Alert.ShowInTop("1、管线绿色为匹配率100%,明细绿色为已反写材料主编码,红色为匹配率小于100%,蓝色为手动优先焊口。
2、库存匹配顺序为手动优先焊口、存在已焊口的续作组件、其他未开工组件。
3、一个焊口可能对应多条材料明细,该焊口全部有效明细已反写材料主编码后才允许一键生成任务单。
4、焊口已进行焊前准备,匹配了焊评才能生成任务单", "说明", MessageBoxIcon.Information); } /// @@ -625,7 +660,8 @@ namespace FineUIPro.Web.HJGL.WeldingManage this.CurrUser.LoginProjectId, dicSeclectPipeLine.Keys.ToList(), drpWarehouse.SelectedValue, - GetPriorityWeldJointList()); + GetPriorityWeldJointList(), + PipeArea); BindGrid3(); BindGrid2(keepSelectedPipelineIds); } @@ -692,7 +728,74 @@ namespace FineUIPro.Web.HJGL.WeldingManage } /// - /// 按树节点获取可加入本次匹配的管线。单位工程节点会展开到其下所有试压包,再套用当前仓库、区域和页面筛选条件。 + /// 按当前材料区域导出所选单位工程下全部部分已焊接组件。 + /// + protected void btnExportPartialComponents_Click(object sender, EventArgs e) + { + Model.WBS_UnitWork unitWork = tvControlItem.SelectedNode == null + ? null + : BLL.UnitWorkService.GetUnitWorkByUnitWorkId(tvControlItem.SelectedNode.NodeID); + if (unitWork == null) + { + ShowNotify("请先选择需要导出的单位工程!", MessageBoxIcon.Warning); + return; + } + + var components = TwArrivalStatisticsService.GetPartialWeldedComponents( + this.CurrUser.LoginProjectId, + unitWork.UnitWorkId, + PipeArea, + drpWarehouse.SelectedValue); + if (!components.Any()) + { + ShowNotify("当前单位工程和区域下没有部分已焊接组件!", MessageBoxIcon.Warning); + return; + } + + var exportData = components.Select(x => new + { + 单位工程 = x.UnitWorkName, + 区域 = x.PipeAreaText, + 管线号 = x.PipelineCode, + 预制组件号 = x.PrefabricatedComponents, + 总焊口数 = x.TotalWeldJointCount, + 已焊口数 = x.WeldedWeldJointCount, + 未焊口数 = x.UnweldedWeldJointCount, + 组件匹配率 = x.ComponentMatchRateString + }).ToList(); + + string areaText = PipeArea == PipelineService.PipeArea_SHOP ? "工厂预制" : "现场安装"; + string fileName = GetSafeFileName(unitWork.UnitWorkName) + "_" + areaText + "_部分已焊组件_" + DateTime.Now.ToString("yyyyMMdd") + ".xlsx"; + string tempDirectory = Path.Combine(Funs.RootPath, @"File\Excel\Temp"); + Directory.CreateDirectory(tempDirectory); + string filePath = Path.Combine(tempDirectory, Guid.NewGuid().ToString("N") + ".xlsx"); + + MiniExcel.SaveAs(filePath, exportData); + FileInfo fileInfo = new FileInfo(filePath); + System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; + response.Clear(); + response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; + response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8)); + response.AddHeader("Content-Length", fileInfo.Length.ToString()); + // 先读取到响应缓冲区再删除临时文件,避免 TransmitFile 异步发送期间文件仍被占用。 + response.BinaryWrite(File.ReadAllBytes(filePath)); + File.Delete(filePath); + response.Flush(); + System.Web.HttpContext.Current.ApplicationInstance.CompleteRequest(); + } + + private static string GetSafeFileName(string fileName) + { + string safeFileName = string.IsNullOrEmpty(fileName) ? "单位工程" : fileName; + foreach (char invalidChar in Path.GetInvalidFileNameChars()) + { + safeFileName = safeFileName.Replace(invalidChar, '_'); + } + return safeFileName; + } + + /// + /// 按树节点获取可加入本次匹配的管线。单位工程节点会展开到其下所有试压包,再套用当前仓库和页面筛选条件。 /// /// 左侧树节点。 /// 符合材料匹配入口条件的管线列表。 @@ -703,13 +806,13 @@ namespace FineUIPro.Web.HJGL.WeldingManage return new List(); } - if (node.CommandName == "管线") + if (node.CommandName == TreeCommandPipeline) { var pipeline = PipelineService.GetPipelineByPipelineId(node.NodeID); return pipeline == null ? new List() : new List { pipeline }; } - if (node.CommandName == "单位工程") + if (node.CommandName == TreeCommandUnitWork) { var testPackageIds = (from x in Funs.DB.PTP_TestPackage where x.ProjectId == this.CurrUser.LoginProjectId @@ -743,7 +846,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage var selectNodes = tvControlItem.GetCheckedNodes(); foreach (var node in selectNodes) { - if (dicSeclectPipeLine.Where(x => x.Key == node.NodeID).Count() == 0 && node.CommandName == "管线") + if (dicSeclectPipeLine.Where(x => x.Key == node.NodeID).Count() == 0 && node.CommandName == TreeCommandPipeline) { dicSeclectPipeLine.Add(node.NodeID, node.Text); addCount++; @@ -978,19 +1081,14 @@ namespace FineUIPro.Web.HJGL.WeldingManage 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 weldingRods = from x in Funs.DB.Base_Consumables where x.ConsumablesType == WeldingRodConsumablesType select x; + var weldingWires = from x in Funs.DB.Base_Consumables where x.ConsumablesType == WeldingWireConsumablesType select x; var selectedWeldJointIdList = selectedWeldJointIds.ToList(); var selectRowId = GetTaskableWeldJointRows(selectedWeldJointIdList); Dictionary unitworkTaskCode = new Dictionary(); Dictionary unitworkSerialNumber = new Dictionary(); - Dictionary matchPipeline = new Dictionary(); - // 生成任务单仍保留管线在匹配结果中的排序,用于任务单列表按管线顺序展示。 - for (int rowIndex = 0; rowIndex < Grid2.Rows.Count; rowIndex++) - { - matchPipeline.Add(rowIndex + 1, Grid2.Rows[rowIndex].RowID); - } + Dictionary matchPipeline = GetMatchPipelineOrder(); if (!selectRowId.Any()) { ShowNotify("未找到可生成任务单的焊口!", MessageBoxIcon.Warning); @@ -998,8 +1096,6 @@ namespace FineUIPro.Web.HJGL.WeldingManage } foreach (var weldjoint in selectRowId) { - string canWeldingRodName = string.Empty; - string canWeldingWireName = string.Empty; Model.HJGL_WeldTask NewTask = new Model.HJGL_WeldTask(); NewTask.ProjectId = this.CurrUser.LoginProjectId; NewTask.UnitWorkId = PipelineService.GetPipelineByPipelineId(weldjoint.PipelineId)?.UnitWorkId; @@ -1038,59 +1134,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage NewTask.PipeLineSortIndex = matchPipeline.FirstOrDefault(x => x.Value == weldJoint.PipelineId).Key; NewTask.WeldingRod = weldJoint.WeldingRod; NewTask.WeldingWire = weldJoint.WeldingWire; - //获取可替代焊丝焊条 - var mat = BLL.Base_MaterialService.GetMaterialByMaterialId(weldJoint.Material1Id); - string matClass = mat.MaterialClass; - var matRod = weldingRods.FirstOrDefault(x => x.ConsumablesId == weldJoint.WeldingRod); - if (matRod != null) - { - foreach (var item in weldingRods) - { - if (matClass == "Fe-1" || matClass == "Fe-3") - { - if (IsCoverClass(matRod.SteelType, item.SteelType)) - { - canWeldingRodName = canWeldingRodName + item.ConsumablesName + ","; - } - } - else - { - if (matRod.SteelType == item.SteelType) - { - canWeldingRodName = canWeldingRodName + item.ConsumablesName + ","; - } - } - } - if (!string.IsNullOrEmpty(canWeldingRodName)) - { - NewTask.CanWeldingRodName = canWeldingRodName.Substring(0, canWeldingRodName.Length - 1); - } - } - var matWire = weldingWires.FirstOrDefault(x => x.ConsumablesId == weldJoint.WeldingWire); - if (matWire != null) - { - foreach (var item in weldingWires) - { - if (matClass == "Fe-1" || matClass == "Fe-3") - { - if (IsCoverClass(matWire.SteelType, item.SteelType)) - { - canWeldingWireName = canWeldingWireName + item.ConsumablesName + ","; - } - } - else - { - if (matWire.SteelType == item.SteelType) - { - canWeldingWireName = canWeldingWireName + item.ConsumablesName + ","; - } - } - } - if (!string.IsNullOrEmpty(canWeldingWireName)) - { - NewTask.CanWeldingWireName = canWeldingWireName.Substring(0, canWeldingWireName.Length - 1); - } - } + PopulateAlternativeConsumables(NewTask, weldJoint, weldingRods, weldingWires); } NewTask.JointAttribute = weldJoint.JointAttribute; @@ -1098,7 +1142,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage NewTask.Tabler = this.CurrUser.PersonId; NewTask.TableDate = DateTime.Now; - weldJoint.WeldingMode = "手动"; + weldJoint.WeldingMode = ManualWeldingMode; BLL.WeldJointService.UpdateWeldJoint(weldJoint); BLL.WeldTaskService.AddWeldTask(NewTask); } @@ -1106,6 +1150,61 @@ namespace FineUIPro.Web.HJGL.WeldingManage return true; } + /// + /// 获取当前管线汇总表中的显示顺序,供任务单保存管线排序使用。 + /// + private Dictionary GetMatchPipelineOrder() + { + var matchPipeline = new Dictionary(); + for (int rowIndex = 0; rowIndex < Grid2.Rows.Count; rowIndex++) + { + matchPipeline.Add(rowIndex + 1, Grid2.Rows[rowIndex].RowID); + } + return matchPipeline; + } + + /// + /// 根据母材类别计算任务单可替代的焊条和焊丝。 + /// + private void PopulateAlternativeConsumables( + Model.HJGL_WeldTask task, + Model.HJGL_WeldJoint weldJoint, + IEnumerable weldingRods, + IEnumerable weldingWires) + { + // 获取可替代焊材时沿用原有母材类别和焊材钢号判断规则。 + var material = BLL.Base_MaterialService.GetMaterialByMaterialId(weldJoint.Material1Id); + string materialClass = material.MaterialClass; + var selectedRod = weldingRods.FirstOrDefault(x => x.ConsumablesId == weldJoint.WeldingRod); + var selectedWire = weldingWires.FirstOrDefault(x => x.ConsumablesId == weldJoint.WeldingWire); + + task.CanWeldingRodName = GetAlternativeConsumableNames(materialClass, selectedRod, weldingRods); + task.CanWeldingWireName = GetAlternativeConsumableNames(materialClass, selectedWire, weldingWires); + } + + /// + /// 返回与当前焊材钢号兼容的候选名称,保持原有逗号分隔格式。 + /// + private string GetAlternativeConsumableNames( + string materialClass, + Model.Base_Consumables selectedConsumable, + IEnumerable candidateConsumables) + { + if (selectedConsumable == null) + { + return null; + } + + bool useCoverClass = materialClass == CoverMaterialClassFe1 || materialClass == CoverMaterialClassFe3; + var names = candidateConsumables + .Where(item => useCoverClass + ? IsCoverClass(selectedConsumable.SteelType, item.SteelType) + : selectedConsumable.SteelType == item.SteelType) + .Select(item => item.ConsumablesName) + .ToList(); + return names.Any() ? string.Join(",", names) : null; + } + /// /// 按任务单实际生成规则过滤可生成任务单的焊口视图数据。 /// @@ -1128,10 +1227,13 @@ namespace FineUIPro.Web.HJGL.WeldingManage && x.WeldTaskId == null && x.WeldingMethodCode != null select x).ToList(); - if (PipeArea == "1") + if (PipeArea == PipelineService.PipeArea_SHOP) { - // 工厂预制材料匹配只允许预制口生成任务单,现场安装页面不套用该限制。 - taskableRows = taskableRows.Where(x => x.JointAttribute == "预制口").ToList(); + taskableRows = taskableRows.Where(x => x.JointAttribute == PrefabricationJointAttribute).ToList(); + } + else if (PipeArea == PipelineService.PipeArea_FIELD) + { + taskableRows = taskableRows.Where(x => x.JointAttribute == InstallationJointAttribute).ToList(); } return taskableRows; @@ -1193,26 +1295,16 @@ namespace FineUIPro.Web.HJGL.WeldingManage /// 能覆盖返回 true,否则返回 false。 private bool IsCoverClass(string wpsClass, string matClass) { - bool isCover = false; - int wpsSn = 0; - int matSn = 0; - if (wpsClass.Length > 2 && matClass.Length > 2) + if (wpsClass.Length <= 2 || matClass.Length <= 2) { - string wpsPre = wpsClass.Substring(0, wpsClass.Length - 2); - string matPre = matClass.Substring(0, matClass.Length - 2); - - string wps = wpsClass.Substring(wpsClass.Length - 1, 1); - wpsSn = Funs.GetNewInt(wps).HasValue ? Funs.GetNewInt(wps).Value : 0; - - string mat = matClass.Substring(matClass.Length - 1, 1); - matSn = Funs.GetNewInt(mat).HasValue ? Funs.GetNewInt(mat).Value : 0; - - if (wpsPre == matPre && matSn >= wpsSn) - { - return true; - } + return false; } - return isCover; + + string wpsPre = wpsClass.Substring(0, wpsClass.Length - 2); + string matPre = matClass.Substring(0, matClass.Length - 2); + int wpsSn = Funs.GetNewInt(wpsClass.Substring(wpsClass.Length - 1, 1)) ?? 0; + int matSn = Funs.GetNewInt(matClass.Substring(matClass.Length - 1, 1)) ?? 0; + return wpsPre == matPre && matSn >= wpsSn; } #endregion 按钮事件 diff --git a/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldMatMatch.aspx.designer.cs b/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldMatMatch.aspx.designer.cs index 5b398b11..a35cbe29 100644 --- a/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldMatMatch.aspx.designer.cs +++ b/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldMatMatch.aspx.designer.cs @@ -140,6 +140,15 @@ namespace FineUIPro.Web.HJGL.WeldingManage /// protected global::FineUIPro.Button btnStatisticsMat; + /// + /// btnExportPartialComponents 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Button btnExportPartialComponents; + /// /// tvControlItem 控件。 /// diff --git a/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldReport.aspx b/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldReport.aspx index fc42d2fe..d2663f66 100644 --- a/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldReport.aspx +++ b/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldReport.aspx @@ -78,11 +78,11 @@ --%> diff --git a/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldReport.aspx.cs b/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldReport.aspx.cs index e0b295c3..e3d533f3 100644 --- a/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldReport.aspx.cs +++ b/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldReport.aspx.cs @@ -264,38 +264,6 @@ namespace FineUIPro.Web.HJGL.WeldingManage /// private void BindPendingGrid() { - string strSql = @"SELECT temp.TempDetailId, - temp.WeldJointId, - temp.WeldingDate, - jot.PipelineCode, - jot.WeldJointCode, - coverWelder.WelderCode AS CoverWelderCode, - backingWelder.WelderCode AS BackingWelderCode, - temp.JointAttribute, - location.WeldingLocationCode, - jot.Size, - jot.Dia, - jot.Thickness, - jot.WeldingMethodCode, - submitPerson.PersonName AS SubmitPersonName, - temp.SubmitDate, - beforeAtt.AttachUrl AS BeforePhotoUrl, - afterAtt.AttachUrl AS AfterPhotoUrl - FROM dbo.HJGL_WeldingDailyTempDetail AS temp - LEFT JOIN dbo.View_HJGL_WeldJoint AS jot ON jot.WeldJointId = temp.WeldJointId - LEFT JOIN dbo.SitePerson_Person AS coverWelder ON coverWelder.PersonId = temp.CoverWelderId - LEFT JOIN dbo.SitePerson_Person AS backingWelder ON backingWelder.PersonId = temp.BackingWelderId - LEFT JOIN dbo.Base_WeldingLocation AS location ON location.WeldingLocationId = temp.WeldingLocationId - LEFT JOIN dbo.Person_Persons AS submitPerson ON submitPerson.PersonId = temp.SubmitPersonId - LEFT JOIN dbo.AttachFile AS beforeAtt ON beforeAtt.MenuId = @WeldReportMenuId - AND beforeAtt.ToKeyId = temp.TempDetailId + '#Before' - LEFT JOIN dbo.AttachFile AS afterAtt ON afterAtt.MenuId = @WeldReportMenuId - AND afterAtt.ToKeyId = temp.TempDetailId + '#After' - WHERE temp.ProjectId = @ProjectId AND temp.AuditState = 0"; - List listStr = new List(); - listStr.Add(new SqlParameter("@ProjectId", this.CurrUser.LoginProjectId)); - listStr.Add(new SqlParameter("@WeldReportMenuId", Const.HJGL_WeldReportMenuId)); - var unitWork = BLL.UnitWorkService.getUnitWorkByUnitWorkId(tvControlItem.SelectedNodeID); if (unitWork == null) { @@ -305,31 +273,30 @@ namespace FineUIPro.Web.HJGL.WeldingManage unitWork = BLL.UnitWorkService.getUnitWorkByUnitWorkId(daily.UnitWorkId); } } - if (unitWork != null) - { - strSql += " AND temp.UnitWorkId = @UnitWorkId"; - listStr.Add(new SqlParameter("@UnitWorkId", unitWork.UnitWorkId)); - } + + DateTime? weldingDate = null; if (!string.IsNullOrEmpty(txtPendingWeldingDate.Text.Trim())) { - strSql += " AND temp.WeldingDate >= @WeldingDate AND temp.WeldingDate < @WeldingDateEnd"; - DateTime weldingDate = Convert.ToDateTime(txtPendingWeldingDate.Text.Trim()).Date; - listStr.Add(new SqlParameter("@WeldingDate", weldingDate)); - listStr.Add(new SqlParameter("@WeldingDateEnd", weldingDate.AddDays(1))); + DateTime parsedDate; + if (!DateTime.TryParse(txtPendingWeldingDate.Text.Trim(), out parsedDate)) + { + GridPending.RecordCount = 0; + GridPending.DataSource = null; + GridPending.DataBind(); + Alert.ShowInTop("焊接日期格式不正确!", MessageBoxIcon.Warning); + return; + } + weldingDate = parsedDate.Date; } - if (!string.IsNullOrEmpty(txtPendingPipelineCode.Text.Trim())) - { - strSql += " AND jot.PipelineCode LIKE @PendingPipelineCode"; - listStr.Add(new SqlParameter("@PendingPipelineCode", "%" + txtPendingPipelineCode.Text.Trim() + "%")); - } - if (!string.IsNullOrEmpty(txtPendingWelderCode.Text.Trim())) - { - strSql += " AND (coverWelder.WelderCode LIKE @PendingWelderCode OR backingWelder.WelderCode LIKE @PendingWelderCode)"; - listStr.Add(new SqlParameter("@PendingWelderCode", "%" + txtPendingWelderCode.Text.Trim() + "%")); - } - strSql += " ORDER BY jot.PipelineCode, jot.WeldJointCode"; - DataTable tb = SQLHelper.GetDataTableRunText(strSql, listStr.ToArray()); + // 待审核列表与接口共用同一套查询和字段映射,避免PC端SQL与接口逐渐分叉。 + var pendingItems = BLL.WeldingDailyService.GetWeldingDailyTempDetailList( + this.CurrUser.LoginProjectId, + unitWork == null ? null : unitWork.UnitWorkId, + weldingDate, + txtPendingPipelineCode.Text.Trim(), + txtPendingWelderCode.Text.Trim()); + DataTable tb = this.LINQToDataTable(pendingItems); GridPending.RecordCount = tb.Rows.Count; tb = GetFilteredTable(GridPending.FilteredData, tb); var table = this.GetPagedDataTable(GridPending, tb); diff --git a/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldingConDate.aspx b/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldingConDate.aspx index 25671cc4..a3141cc4 100644 --- a/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldingConDate.aspx +++ b/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldingConDate.aspx @@ -55,7 +55,7 @@ + EnableTextSelection="true" OnNodeExpand="tvControlItem_TreeNodeExpanded" OnNodeCheck="tvControlItem_NodeCheck" EnableCheckBox="true" OnlyLeafCheck="false"> diff --git a/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldingConDate.aspx.cs b/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldingConDate.aspx.cs index 246cf467..ffa181e0 100644 --- a/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldingConDate.aspx.cs +++ b/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldingConDate.aspx.cs @@ -10,7 +10,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage public partial class WeldingConDate : PageBase { public int pageSize = PipelineService.pageSize; - + public List GridWeldJointIdList { get; set; } protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) @@ -27,7 +27,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage this.drpPipeArea.DataSource = BLL.PipelineService.GetPipeArea(); this.drpPipeArea.DataBind(); Funs.FineUIPleaseSelect(this.drpPipeArea); - this.InitTreeMenu(); + this.InitTreeMenu(); } } @@ -44,6 +44,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage rootNode1.Text = "建筑工程"; rootNode1.CommandName = "建筑工程"; rootNode1.Selectable = false; + rootNode1.EnableCheckBox = false; this.tvControlItem.Nodes.Add(rootNode1); TreeNode rootNode2 = new TreeNode(); @@ -51,6 +52,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage rootNode2.Text = "安装工程"; rootNode2.CommandName = "安装工程"; rootNode2.Expanded = true; + rootNode2.EnableCheckBox = false; this.tvControlItem.Nodes.Add(rootNode2); var pUnits = (from x in Funs.DB.Project_ProjectUnit where x.ProjectId == this.CurrUser.LoginProjectId select x).ToList(); @@ -121,7 +123,8 @@ namespace FineUIPro.Web.HJGL.WeldingManage tn1.CommandName = 1 + "|" + Funs.GetEndPageNumber(a, pageSize); tn1.EnableExpandEvent = true; tn1.EnableClickEvent = true; - tn1.EnableCheckBox = false; + // 单位工程复选框表示“当前筛选条件下的全部管线”,不能只依赖已加载的分页节点。 + tn1.EnableCheckBox = true; rootNode1.Nodes.Add(tn1); if (a > 0) { @@ -183,7 +186,8 @@ namespace FineUIPro.Web.HJGL.WeldingManage tn2.CommandName = 1 + "|" + Funs.GetEndPageNumber(a, pageSize); tn2.EnableExpandEvent = true; tn2.EnableClickEvent = true; - tn2.EnableCheckBox = false; + // 单位工程复选框表示“当前筛选条件下的全部管线”,不能只依赖已加载的分页节点。 + tn2.EnableCheckBox = true; rootNode2.Nodes.Add(tn2); if (a > 0) { @@ -206,6 +210,14 @@ namespace FineUIPro.Web.HJGL.WeldingManage } } + + /// + /// 单位工程节点允许勾选;不展开分页子节点,批量自动录入时会按当前筛选条件重新查询全部管线。 + /// + protected void tvControlItem_NodeCheck(object sender, TreeCheckEventArgs e) + { + // FineUI 会处理父子节点的视觉状态,这里不强制勾选未加载的子节点,避免分页节点遗漏。 + } private void BindNodes(TreeNode node) { BLL.PipelineService.BindTreeNodes(node, ckNOEdit.Checked, this.txtPipelineCode.Text.Trim(), this.CurrUser.LoginProjectId, pageSize, this.drpPipeArea.SelectedValue); @@ -261,12 +273,18 @@ namespace FineUIPro.Web.HJGL.WeldingManage #region 数据绑定 private void BindGrid() - { + { + GridWeldJointIdList = new List(); + if (string.IsNullOrEmpty(tvControlItem.SelectedNodeID)) + { + return; + + } string strSql = @"SELECT WeldJointId,WeldJointCode,PipelineId,PipelineCode,JointAttribute, IsWelding,IsHotProessStr,Material1Code,Material2Code,WeldTypeCode, Specification,HeartNo1,HeartNo2,Size,Dia,DNDia,Thickness,GrooveTypeCode, WeldingMethodCode,WeldingWireCode,WeldingRodCode,WeldingDate,WeldingDailyCode, - BackingWelderCode,CoverWelderCode,MediumCode ,PreTemperature,JointArea,WPQCode,Remark,CAST(WeldJointCode as int) as WeldJointCodeInt + BackingWelderCode,CoverWelderCode,MediumCode ,PreTemperature,JointArea,WPQCode,Remark,TRY_CAST(WeldJointCode AS INT) AS WeldJointCodeInt FROM View_HJGL_WeldJoint WHERE IsTwoJoint IS NULL "; List listStr = new List { }; @@ -309,7 +327,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage } SqlParameter[] parameter = listStr.ToArray(); System.Data.DataTable dt = SQLHelper.GetDataTableRunText(strSql, parameter); - + GridWeldJointIdList = dt.AsEnumerable().Select(row => row.Field("WeldJointId")).ToList(); // 2.获取当前分页数据 Grid1.RecordCount = dt.Rows.Count; var table = this.GetPagedDataTable(Grid1, dt); @@ -412,58 +430,19 @@ namespace FineUIPro.Web.HJGL.WeldingManage ShowNotify("请选择工艺规程编制单位!", MessageBoxIcon.Warning); return; } - if (!string.IsNullOrEmpty(tvControlItem.SelectedNodeID)) + + // BindGrid() 上一次请求中的赋值不会保留到本次回发,按钮处理前重新查询当前筛选结果。 + BindGrid(); + if (GridWeldJointIdList.Any()) { - var jotList = from x in Funs.DB.HJGL_WeldJoint where x.PipelineId == tvControlItem.SelectedNodeID && x.JointAttribute == drpJointAttribute.SelectedValue select x; - if (jotList.Count() > 0) - { - foreach (var jot in jotList) - { - List wpqList = BLL.WPQListServiceService.GetMatchWPQ(jot, this.CurrUser.LoginProjectId, drpUnit.SelectedValue); - Model.HJGL_WeldJoint newJot = new Model.HJGL_WeldJoint(); - if (wpqList != null) - { - Model.WPQ_WPQList wps = new Model.WPQ_WPQList(); - var a = wpqList.FirstOrDefault(x => x.WeldingMethodId == "feb1234c-a538-476f-99ac-7b3ab15997c1"); //优先匹配GTAW+SMAW的焊评 - if (a == null) - { - wps = BLL.WPQListServiceService.GetWPQById(wpqList.First().WPQId); - } - else - { - wps = BLL.WPQListServiceService.GetWPQById(a.WPQId); - } - - newJot.WPQId = wps.WPQId; - newJot.WeldJointId = jot.WeldJointId; - newJot.WeldingRod = wps.WeldingRod; - newJot.WeldingWire = wps.WeldingWire; - newJot.WeldingMethodId = wps.WeldingMethodId; - newJot.GrooveTypeId = wps.GrooveType; - newJot.PreTemperature = wps.PreTemperature; - newJot.IsHotProess = wps.IsHotProess; - newJot.MatchableWPQ = string.Join(",", wpqList.Select(x => x.WPQCode)); - - - } - else - { - newJot.WPQId = null; - newJot.WeldJointId = jot.WeldJointId; - newJot.WeldingRod = null; - newJot.WeldingWire = null; - newJot.WeldingMethodId = null; - newJot.GrooveTypeId = null; - newJot.PreTemperature = null; - newJot.IsHotProess = null; - newJot.MatchableWPQ = null; - } - BLL.WeldJointService.UpdateConWeldJoint(newJot); - } - } + AutoInputWeldJoints(GridWeldJointIdList); BindGrid(); ShowNotify("该管线焊口已完成自动录入!", MessageBoxIcon.Success); } + else + { + ShowNotify("当前筛选条件下没有可自动录入的焊口!", MessageBoxIcon.Warning); + } } protected void btnAutoInput2_Click(object sender, EventArgs e) { @@ -473,64 +452,23 @@ namespace FineUIPro.Web.HJGL.WeldingManage return; } TreeNode[] nodes = tvControlItem.GetCheckedNodes(); - if (nodes.Length > 0) + var pipelineIds = new List(); + foreach (TreeNode node in nodes) { - foreach (TreeNode node in nodes) + if (node.CommandName == "管线") { - if (!string.IsNullOrEmpty(node.NodeID)) - { - var jotList = from x in Funs.DB.HJGL_WeldJoint where x.PipelineId == node.NodeID && x.JointAttribute == drpJointAttribute.SelectedValue select x; - if (jotList.Count() > 0) - { - foreach (var jot in jotList) - { - List wpqList = BLL.WPQListServiceService.GetMatchWPQ(jot, this.CurrUser.LoginProjectId, drpUnit.SelectedValue); - Model.HJGL_WeldJoint newJot = new Model.HJGL_WeldJoint(); - if (wpqList != null) - { - Model.WPQ_WPQList wps = new Model.WPQ_WPQList(); - var a = wpqList.FirstOrDefault(x => x.WeldingMethodId == "feb1234c-a538-476f-99ac-7b3ab15997c1"); //优先匹配GTAW+SMAW的焊评 - if (a == null) - { - wps = BLL.WPQListServiceService.GetWPQById(wpqList.First().WPQId); - } - else - { - wps = BLL.WPQListServiceService.GetWPQById(a.WPQId); - } - - newJot.WPQId = wps.WPQId; - newJot.WeldJointId = jot.WeldJointId; - newJot.WeldingRod = wps.WeldingRod; - newJot.WeldingWire = wps.WeldingWire; - newJot.WeldingMethodId = wps.WeldingMethodId; - newJot.GrooveTypeId = wps.GrooveType; - newJot.PreTemperature = wps.PreTemperature; - newJot.IsHotProess = wps.IsHotProess; - newJot.MatchableWPQ = string.Join(",", wpqList.Select(x => x.WPQCode)); - - - } - else - { - newJot.WPQId = null; - newJot.WeldJointId = jot.WeldJointId; - newJot.WeldingRod = null; - newJot.WeldingWire = null; - newJot.WeldingMethodId = null; - newJot.GrooveTypeId = null; - newJot.PreTemperature = null; - newJot.IsHotProess = null; - newJot.MatchableWPQ = null; - } - BLL.WeldJointService.UpdateConWeldJoint(newJot); - } - } - - } - + if (!string.IsNullOrEmpty(node.NodeID)) pipelineIds.Add(node.NodeID); } - // BindGrid(); + else if (node.CommandName != null && node.CommandName.Split('|').Length == 2) + { + // 单位工程节点覆盖全部分页数据,不能只取树上当前已经展开的叶子节点。 + pipelineIds.AddRange(GetPipelineIdsByUnitWork(node.NodeID)); + } + } + pipelineIds = pipelineIds.Where(x => !string.IsNullOrEmpty(x)).Distinct().ToList(); + if (pipelineIds.Count > 0) + { + AutoInputWeldJoints(GetAutoInputWeldJoints(pipelineIds)); ShowNotify("该管线焊口已完成自动录入!", MessageBoxIcon.Success); } else @@ -539,6 +477,69 @@ namespace FineUIPro.Web.HJGL.WeldingManage } } + /// + /// 按当前树筛选条件查询单位工程下的全部管线,覆盖分页和未展开节点。 + /// + private List GetPipelineIdsByUnitWork(string unitWorkId) + { + var query = Funs.DB.HJGL_Pipeline.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.UnitWorkId == unitWorkId); + if (this.drpPipeArea.SelectedValue != BLL.Const._Null) + { + query = query.Where(x => x.PipeArea == this.drpPipeArea.SelectedValue); + } + if (!string.IsNullOrEmpty(this.txtPipelineCode.Text.Trim())) + { + query = query.Where(x => x.PipelineCode.Contains(this.txtPipelineCode.Text.Trim())); + } + if (ckNOEdit.Checked) + { + query = query.Where(p => Funs.DB.HJGL_WeldJoint.Any(w => w.PipelineId == p.PipelineId && w.IsTwoJoint == null && w.WPQId == null)); + } + return query.Select(x => x.PipelineId).ToList(); + } + + /// + /// “全部”表示不增加焊口属性条件;预制口和安装口仍按选择值精确筛选。 + /// + private List GetAutoInputWeldJoints(IEnumerable pipelineIds) + { + var ids = pipelineIds.Where(x => !string.IsNullOrEmpty(x)).Distinct().ToList(); + var query = Funs.DB.HJGL_WeldJoint.Where(x => ids.Contains(x.PipelineId)); + if (!string.IsNullOrEmpty(drpJointAttribute.SelectedValue)) + { + query = query.Where(x => x.JointAttribute == drpJointAttribute.SelectedValue); + } + return query.Select(x=>x.WeldJointId).ToList(); + } + + private void AutoInputWeldJoints(List weldJoints) + { + foreach (var weldJointId in weldJoints) + { + + List wpqList = BLL.WPQListServiceService.GetMatchWPQ(WeldJointService.GetWeldJointByWeldJointId(weldJointId), this.CurrUser.LoginProjectId, drpUnit.SelectedValue); + Model.HJGL_WeldJoint newJot = new Model.HJGL_WeldJoint { WeldJointId = weldJointId }; + if (wpqList != null && wpqList.Count > 0) + { + // 优先匹配 GTAW+SMAW 的焊评,保持原有业务优先级。 + var match = wpqList.FirstOrDefault(x => x.WeldingMethodId == "feb1234c-a538-476f-99ac-7b3ab15997c1") ?? wpqList.First(); + Model.WPQ_WPQList wps = BLL.WPQListServiceService.GetWPQById(match.WPQId); + if (wps != null) + { + newJot.WPQId = wps.WPQId; + newJot.WeldingRod = wps.WeldingRod; + newJot.WeldingWire = wps.WeldingWire; + newJot.WeldingMethodId = wps.WeldingMethodId; + newJot.GrooveTypeId = wps.GrooveType; + newJot.PreTemperature = wps.PreTemperature; + newJot.IsHotProess = wps.IsHotProess; + newJot.MatchableWPQ = string.Join(",", wpqList.Select(x => x.WPQCode)); + } + } + BLL.WeldJointService.UpdateConWeldJoint(newJot); + } + } + protected void btnEdit_Click(object sender, EventArgs e) { if (BLL.CommonService.GetAllButtonPowerList(this.CurrUser.LoginProjectId, this.CurrUser.PersonId, BLL.Const.HJGL_WeldJointMenuId, BLL.Const.BtnModify)) diff --git a/SGGL/Model/APIItem/HJGL/WeldingDailyTempDetailItem.cs b/SGGL/Model/APIItem/HJGL/WeldingDailyTempDetailItem.cs new file mode 100644 index 00000000..f8b776ff --- /dev/null +++ b/SGGL/Model/APIItem/HJGL/WeldingDailyTempDetailItem.cs @@ -0,0 +1,211 @@ +using System; + +namespace Model +{ + /// + /// 焊接日报待审核明细。 + /// + public class WeldingDailyTempDetailItem + { + /// + /// 待审核明细ID。 + /// + public string TempDetailId { get; set; } + + /// + /// 项目ID。 + /// + public string ProjectId { get; set; } + + /// + /// 单位ID。 + /// + public string UnitId { get; set; } + + /// + /// 单位工程ID。 + /// + public string UnitWorkId { get; set; } + + /// + /// 焊口ID。 + /// + public string WeldJointId { get; set; } + + /// + /// 管线ID。 + /// + public string PipelineId { get; set; } + + /// + /// 管线编号。 + /// + public string PipelineCode { get; set; } + + /// + /// 焊口编号。 + /// + public string WeldJointCode { get; set; } + + /// + /// 焊接日期。 + /// + public DateTime WeldingDate { get; set; } + + /// + /// 盖面焊工ID。 + /// + public string CoverWelderId { get; set; } + + /// + /// 盖面焊工编号。 + /// + public string CoverWelderCode { get; set; } + + /// + /// 打底焊工ID。 + /// + public string BackingWelderId { get; set; } + + /// + /// 打底焊工编号。 + /// + public string BackingWelderCode { get; set; } + + /// + /// 焊口属性。 + /// + public string JointAttribute { get; set; } + + /// + /// 焊接位置ID。 + /// + public string WeldingLocationId { get; set; } + + /// + /// 焊接位置编号。 + /// + public string WeldingLocationCode { get; set; } + + /// + /// 焊接模式。 + /// + public string WeldingMode { get; set; } + + /// + /// 材质1编号。 + /// + public string Material1Code { get; set; } + + /// + /// 材质2编号。 + /// + public string Material2Code { get; set; } + + /// + /// 公称直径字符串。 + /// + public string DNDia { get; set; } + + /// + /// 焊口尺寸。 + /// + public decimal? Size { get; set; } + + /// + /// 外径。 + /// + public decimal? Dia { get; set; } + + /// + /// 壁厚。 + /// + public decimal? Thickness { get; set; } + + /// + /// 焊口类型编号。 + /// + public string WeldTypeCode { get; set; } + + /// + /// 焊接方法编号。 + /// + public string WeldingMethodCode { get; set; } + + /// + /// 焊丝编号。 + /// + public string WeldingWireCode { get; set; } + + /// + /// 焊条编号。 + /// + public string WeldingRodCode { get; set; } + + /// + /// 提交人ID。 + /// + public string SubmitPersonId { get; set; } + + /// + /// 提交人姓名。 + /// + public string SubmitPersonName { get; set; } + + /// + /// 提交时间。 + /// + public DateTime SubmitDate { get; set; } + + /// + /// 焊前照片地址。 + /// + public string BeforePhotoUrl { get; set; } + + /// + /// 焊后照片地址。 + /// + public string AfterPhotoUrl { get; set; } + + /// + /// 明细附件地址。 + /// + public string AttachUrl { get; set; } + + /// + /// 审核状态:0待审核,1已审核。 + /// + public int AuditState { get; set; } + + /// + /// 审核人ID。 + /// + public string AuditMan { get; set; } + + /// + /// 审核时间。 + /// + public DateTime? AuditDate { get; set; } + + /// + /// 审核备注。 + /// + public string AuditRemark { get; set; } + } + + /// + /// 焊接日报待审核批量操作参数。 + /// + public class WeldingDailyTempDetailBatchRequest + { + /// + /// 待审核明细ID集合。 + /// + public string[] TempDetailIds { get; set; } + + /// + /// 审核人ID,批量删除时无需填写。 + /// + public string AuditMan { get; set; } + } +} diff --git a/SGGL/Model/CLGL/Tw_PipeMatMatchOutput.cs b/SGGL/Model/CLGL/Tw_PipeMatMatchOutput.cs index 63b6fa80..e63bfefb 100644 --- a/SGGL/Model/CLGL/Tw_PipeMatMatchOutput.cs +++ b/SGGL/Model/CLGL/Tw_PipeMatMatchOutput.cs @@ -32,6 +32,8 @@ namespace Model public decimal? MatchNum { get; set; } public decimal? MatchRate { get; set; } public string MatchRateString { get; set; } + public decimal? ComponentMatchRate { get; set; } + public string ComponentMatchRateString { get; set; } public int? PipeLineSortIndex { get; set; } } @@ -48,4 +50,23 @@ namespace Model public decimal? MatchRate { get; set; } public string MatchRateString { get; set; } } + + /// + /// 单位工程下部分已焊接组件的导出汇总。 + /// + public class Tw_PartialWeldedComponentOutput + { + public string UnitWorkId { get; set; } + public string UnitWorkName { get; set; } + public string PipelineId { get; set; } + public string PipelineCode { get; set; } + public string PrefabricatedComponents { get; set; } + public string PipeArea { get; set; } + public string PipeAreaText { get; set; } + public int TotalWeldJointCount { get; set; } + public int WeldedWeldJointCount { get; set; } + public int UnweldedWeldJointCount { get; set; } + public decimal? ComponentMatchRate { get; set; } + public string ComponentMatchRateString { get; set; } + } } diff --git a/SGGL/Model/Model.cs b/SGGL/Model/Model.cs index 5fdc5605..416ab46a 100644 --- a/SGGL/Model/Model.cs +++ b/SGGL/Model/Model.cs @@ -101668,6 +101668,8 @@ namespace Model private string _Code; + private string _DesignInstitute; + private EntityRef _Base_Project; private EntitySet _HJGL_PipeLineMat; @@ -101698,6 +101700,8 @@ namespace Model partial void OnBatchNoChanged(); partial void OnCodeChanging(string value); partial void OnCodeChanged(); + partial void OnDesignInstituteChanging(string value); + partial void OnDesignInstituteChanged(); #endregion public HJGL_MaterialCodeLib() @@ -101931,6 +101935,26 @@ namespace Model } } + [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DesignInstitute", DbType="NVarChar(200)")] + public string DesignInstitute + { + get + { + return this._DesignInstitute; + } + set + { + if ((this._DesignInstitute != value)) + { + this.OnDesignInstituteChanging(value); + this.SendPropertyChanging(); + this._DesignInstitute = value; + this.SendPropertyChanged("DesignInstitute"); + this.OnDesignInstituteChanged(); + } + } + } + [global::System.Data.Linq.Mapping.AssociationAttribute(Name="FK_HJGL_MaterialCodeLib_Base_Project", Storage="_Base_Project", ThisKey="ProjectId", OtherKey="ProjectId", IsForeignKey=true)] public Base_Project Base_Project { @@ -106844,6 +106868,8 @@ namespace Model private string _WeldJointId; private string _MaterialCode2; + + private string _PipeArea; private EntityRef _HJGL_MaterialCodeLib; @@ -106869,6 +106895,8 @@ namespace Model partial void OnWeldJointIdChanged(); partial void OnMaterialCode2Changing(string value); partial void OnMaterialCode2Changed(); + partial void OnPipeAreaChanging(string value); + partial void OnPipeAreaChanged(); #endregion public HJGL_PipeLineMat() @@ -107045,6 +107073,26 @@ namespace Model } } } + + [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_PipeArea", DbType="NChar(1)")] + public string PipeArea + { + get + { + return this._PipeArea; + } + set + { + if ((this._PipeArea != value)) + { + this.OnPipeAreaChanging(value); + this.SendPropertyChanging(); + this._PipeArea = value; + this.SendPropertyChanged("PipeArea"); + this.OnPipeAreaChanged(); + } + } + } [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 diff --git a/SGGL/Model/Model.csproj b/SGGL/Model/Model.csproj index edf2293d..4cb6a34b 100644 --- a/SGGL/Model/Model.csproj +++ b/SGGL/Model/Model.csproj @@ -105,6 +105,7 @@ + diff --git a/SGGL/WebAPI/Controllers/HJGL/WeldingManage/PreWeldingDailyController.cs b/SGGL/WebAPI/Controllers/HJGL/WeldingManage/PreWeldingDailyController.cs index c489dc19..5f0b86f5 100644 --- a/SGGL/WebAPI/Controllers/HJGL/WeldingManage/PreWeldingDailyController.cs +++ b/SGGL/WebAPI/Controllers/HJGL/WeldingManage/PreWeldingDailyController.cs @@ -310,5 +310,145 @@ namespace WebAPI.Controllers return responeData; } #endregion + + #region 焊接日报待审核 + /// + /// 获取焊接日报待审核列表。 + /// + /// 项目ID + /// 单位工程ID,可为空 + /// 焊接日期,可为空,格式如 yyyy-MM-dd + /// 管线编号关键字,可为空 + /// 焊工编号关键字,可为空 + /// 页码,从1开始;小于等于0时返回全部记录 + /// 待审核明细列表及总记录数 + [HttpGet] + public Model.ResponeData GetPendingWeldingDailyTempDetailList(string projectId, + string unitWorkId = null, string weldingDate = null, string pipelineCode = null, + string welderCode = null, int pageIndex = 0) + { + var responeData = new Model.ResponeData(); + try + { + if (string.IsNullOrWhiteSpace(projectId)) + { + responeData.code = 0; + responeData.message = "项目ID不能为空"; + return responeData; + } + + var getDataList = APIWeldReportService.GetPendingWeldingDailyTempDetailList( + projectId, unitWorkId, weldingDate, pipelineCode, welderCode); + int pageCount = getDataList.Count; + if (pageCount > 0 && pageIndex > 0) + { + getDataList = getDataList.Skip(Funs.PageSize * (pageIndex - 1)) + .Take(Funs.PageSize).ToList(); + } + + responeData.data = new { pageCount, getDataList }; + } + catch (Exception ex) + { + responeData.code = 0; + responeData.message = ex.Message; + } + + return responeData; + } + + /// + /// 查看单条焊接日报待审核明细。 + /// + /// 待审核明细ID + /// 待审核明细 + [HttpGet] + public Model.ResponeData GetPendingWeldingDailyTempDetail(string tempDetailId) + { + var responeData = new Model.ResponeData(); + try + { + responeData.data = APIWeldReportService.GetPendingWeldingDailyTempDetail(tempDetailId); + } + catch (Exception ex) + { + responeData.code = 0; + responeData.message = ex.Message; + } + + return responeData; + } + + /// + /// 批量审核通过焊接日报待审核明细。 + /// + /// 批量审核参数 + /// 批量处理结果 + [HttpPost] + public Model.ResponeData AuditPendingWeldingDailyTempDetails( + [FromBody] Model.WeldingDailyTempDetailBatchRequest request) + { + var responeData = new Model.ResponeData(); + try + { + if (request == null) + { + responeData.code = 0; + responeData.message = "参数不能为空"; + return responeData; + } + + string errlog = APIWeldReportService.AuditPendingWeldingDailyTempDetails( + request.TempDetailIds, request.AuditMan); + if (!string.IsNullOrEmpty(errlog)) + { + responeData.code = 0; + responeData.message = errlog; + } + } + catch (Exception ex) + { + responeData.code = 0; + responeData.message = ex.Message; + } + + return responeData; + } + + /// + /// 批量删除焊接日报待审核明细。 + /// + /// 批量删除参数 + /// 批量处理结果 + [HttpPost] + public Model.ResponeData DeletePendingWeldingDailyTempDetails( + [FromBody] Model.WeldingDailyTempDetailBatchRequest request) + { + var responeData = new Model.ResponeData(); + try + { + if (request == null) + { + responeData.code = 0; + responeData.message = "参数不能为空"; + return responeData; + } + + string errlog = APIWeldReportService.DeletePendingWeldingDailyTempDetails(request.TempDetailIds); + if (!string.IsNullOrEmpty(errlog)) + { + responeData.code = 0; + responeData.message = errlog; + } + } + catch (Exception ex) + { + responeData.code = 0; + responeData.message = ex.Message; + } + + return responeData; + } + #endregion } } diff --git a/SGGL/WebAPI/WebAPI.csproj b/SGGL/WebAPI/WebAPI.csproj index a8ec9bea..db27a6dd 100644 --- a/SGGL/WebAPI/WebAPI.csproj +++ b/SGGL/WebAPI/WebAPI.csproj @@ -409,4 +409,4 @@ --> - \ No newline at end of file +