From 4670220614a09bf6f469bc867eadd529c925a2de Mon Sep 17 00:00:00 2001 From: fei550 <1420031550@qq.com> Date: Wed, 24 Jun 2026 16:56:00 +0800 Subject: [PATCH] =?UTF-8?q?feat(hjgl)=E7=84=8A=E5=89=8D=E5=87=86=E5=A4=87?= =?UTF-8?q?=EF=BC=8C=E6=97=A5=E6=8A=A5=E7=AE=A1=E7=90=86=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E9=99=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SGGL/BLL/API/HJGL/APIPipeJointService.cs | 42 ++++++- .../API/HJGL/APIPreWeldInspectionService.cs | 78 +++++++++++- .../BLL/API/HJGL/APIPreWeldingDailyService.cs | 71 +++++++++++ SGGL/FineUIPro.Web/CLGL/InputMaster.aspx | 4 +- .../Excel/DataOut/管道数据表导出模板.xlsx | Bin 9426 -> 13988 bytes .../File/Fastreport/材料入库条码.frx | 10 +- SGGL/FineUIPro.Web/FineUIPro.Web.csproj | 2 +- .../HJGL/InfoQuery/PipelineQuery.aspx.cs | 6 +- .../HJGL/PreWeld/CuttingCheckEdit.aspx | 11 ++ .../HJGL/PreWeld/CuttingCheckEdit.aspx.cs | 19 +++ .../PreWeld/CuttingCheckEdit.aspx.designer.cs | 18 +++ .../HJGL/PreWeld/FitupCheckEdit.aspx | 11 ++ .../HJGL/PreWeld/FitupCheckEdit.aspx.cs | 17 +++ .../PreWeld/FitupCheckEdit.aspx.designer.cs | 18 +++ .../HJGL/WeldingManage/WeldMatMatch.aspx | 12 +- .../HJGL/WeldingManage/WeldReport.aspx | 86 +++++++++++++- .../HJGL/WeldingManage/WeldReport.aspx.cs | 47 ++++++-- .../WeldingManage/WeldReport.aspx.designer.cs | 112 ++++++++++++------ .../APIItem/HJGL/HJGL_PreWeldingDailyItem.cs | 41 +++++++ .../APIItem/HJGL/PreWeldInspectionItem.cs | 14 +++ .../APIItem/HJGL/ViewHJGLWeldJointExtend.cs | 15 +++ SGGL/Model/Model.csproj | 1 + .../PreWeldingDailyController.cs | 28 +++++ 23 files changed, 598 insertions(+), 65 deletions(-) create mode 100644 SGGL/Model/APIItem/HJGL/ViewHJGLWeldJointExtend.cs diff --git a/SGGL/BLL/API/HJGL/APIPipeJointService.cs b/SGGL/BLL/API/HJGL/APIPipeJointService.cs index 712ef839..39478ac5 100644 --- a/SGGL/BLL/API/HJGL/APIPipeJointService.cs +++ b/SGGL/BLL/API/HJGL/APIPipeJointService.cs @@ -54,10 +54,50 @@ namespace BLL var weldjoint = db.View_HJGL_WeldJoint .Where(p => p.WeldJointId == WeldJointId) .FirstOrDefault(); + if (weldjoint != null) + { + SetWeldingDailyAttachUrl(db, weldjoint); + } return weldjoint; } } + /// + /// 回填小程序日报上传的焊前、焊后附件路径 + /// + /// 数据库上下文 + /// 焊口详情 + private static void SetWeldingDailyAttachUrl(Model.SGGLDB db, Model.View_HJGL_WeldJoint weldJoint) + { + var tempDetail = db.HJGL_WeldingDailyTempDetail + .Where(x => x.WeldJointId == weldJoint.WeldJointId) + .OrderByDescending(x => x.SubmitDate) + .FirstOrDefault(); + if (tempDetail == null) + { + return; + } + + weldJoint.PreWeldAttachUrl = GetAttachUrl(db, Const.HJGL_WeldReportMenuId, tempDetail.TempDetailId + "#Before"); + weldJoint.PostWeldAttachUrl = GetAttachUrl(db, Const.HJGL_WeldReportMenuId, tempDetail.TempDetailId + "#After"); + } + + /// + /// 按菜单和业务ID获取附件路径 + /// + /// 数据库上下文 + /// 菜单ID + /// 业务ID + /// 附件路径 + private static string GetAttachUrl(Model.SGGLDB db, string menuId, string toKeyId) + { + var attachUrl = db.AttachFile + .Where(x => x.MenuId == menuId && x.ToKeyId == toKeyId) + .Select(x => x.AttachUrl) + .FirstOrDefault(); + return string.IsNullOrEmpty(attachUrl) ? attachUrl : attachUrl.Replace('\\', '/'); + } + #region 获取未焊接的焊口信息 @@ -626,4 +666,4 @@ namespace BLL } } } -} \ No newline at end of file +} diff --git a/SGGL/BLL/API/HJGL/APIPreWeldInspectionService.cs b/SGGL/BLL/API/HJGL/APIPreWeldInspectionService.cs index 9c1e7901..815ffb76 100644 --- a/SGGL/BLL/API/HJGL/APIPreWeldInspectionService.cs +++ b/SGGL/BLL/API/HJGL/APIPreWeldInspectionService.cs @@ -41,10 +41,58 @@ namespace BLL Misalignment = x.Misalignment }; - return query.FirstOrDefault(); + var item = query.FirstOrDefault(); + if (item != null) + { + SetInspectionAttachUrl(db, item); + } + + return item; } } + /// + /// 回填下料、组对抽检附件路径 + /// + /// 数据库上下文 + /// 焊前抽检基础信息 + private static void SetInspectionAttachUrl(Model.SGGLDB db, Model.PreWeldJointItem item) + { + var cuttingCheckId = db.HJGL_PreWeldCuttingCheck + .Where(x => x.WeldJointId == item.WeldJointId) + .Select(x => x.CuttingCheckId) + .FirstOrDefault(); + if (!string.IsNullOrEmpty(cuttingCheckId)) + { + item.CuttingAttachUrl1 = GetAttachUrl(db, Const.HJGL_PreWeldCuttingCheckMenuId, cuttingCheckId); + } + + var fitupCheckId = db.HJGL_PreWeldFitupCheck + .Where(x => x.WeldJointId == item.WeldJointId) + .Select(x => x.FitupCheckId) + .FirstOrDefault(); + if (!string.IsNullOrEmpty(fitupCheckId)) + { + item.FitupAttachUrl1 = GetAttachUrl(db, Const.HJGL_PreWeldFitupCheckMenuId, fitupCheckId); + } + } + + /// + /// 按菜单和业务ID获取附件路径 + /// + /// 数据库上下文 + /// 菜单ID + /// 业务ID + /// 附件路径 + private static string GetAttachUrl(Model.SGGLDB db, string menuId, string toKeyId) + { + var attachUrl = db.AttachFile + .Where(x => x.MenuId == menuId && x.ToKeyId == toKeyId) + .Select(x => x.AttachUrl) + .FirstOrDefault(); + return string.IsNullOrEmpty(attachUrl) ? attachUrl : attachUrl.Replace('\\', '/'); + } + /// /// 保存下料抽检,已存在同一焊口记录时更新原记录 /// @@ -92,6 +140,8 @@ namespace BLL check.Remark = item.Remark; db.SubmitChanges(); + + SaveInspectionAttachUrl(item.AttachUrl1, Const.HJGL_PreWeldCuttingCheckMenuId, check.CuttingCheckId); } } @@ -158,6 +208,32 @@ namespace BLL weldJoint.Misalignment = item.Misalignment; db.SubmitChanges(); + + SaveInspectionAttachUrl(item.AttachUrl1, Const.HJGL_PreWeldFitupCheckMenuId, check.FitupCheckId); + } + } + + /// + /// 保存焊前抽检附件,空附件时清理原附件。 + /// + /// 附件路径 + /// 菜单ID + /// 业务数据ID + private static void SaveInspectionAttachUrl(string attachUrl, string menuId, string dataId) + { + // AttachUrl1 为 null 表示旧调用方未传附件参数,避免误删已有附件;空字符串表示明确清空附件。 + if (attachUrl == null) + { + return; + } + + if (!string.IsNullOrEmpty(attachUrl)) + { + UploadFileService.SaveAttachUrl(UploadFileService.GetSourceByAttachUrl(attachUrl, 10, null), attachUrl, menuId, dataId); + } + else + { + CommonService.DeleteAttachFileById(menuId, dataId); } } } diff --git a/SGGL/BLL/API/HJGL/APIPreWeldingDailyService.cs b/SGGL/BLL/API/HJGL/APIPreWeldingDailyService.cs index c0c884f1..180a31ff 100644 --- a/SGGL/BLL/API/HJGL/APIPreWeldingDailyService.cs +++ b/SGGL/BLL/API/HJGL/APIPreWeldingDailyService.cs @@ -277,6 +277,77 @@ namespace BLL return BLL.WeldingDailyService.SaveWeldingDailyTempDetailByMobile(WeldJointId, Personid, time, weldingLocation, welderType); } + /// + /// 保存焊接日报并维护焊前、焊后附件 + /// + /// 焊接日报及附件参数 + /// 错误信息 + public static string SaveWeldingDailyByWeldJointIdWithAttach(Model.WeldingDailyByWeldJointAttachItem newItem) + { + if (newItem == null) + { + return "参数不能为空"; + } + + string res = BLL.WeldingDailyService.SaveWeldingDailyTempDetailByMobile(newItem.WeldJointId, newItem.Personid, newItem.time, newItem.weldingLocation, newItem.welderType); + if (!string.IsNullOrEmpty(res)) + { + return res; + } + + DateTime weldingDate; + if (!DateTime.TryParse(newItem.time, out weldingDate)) + { + return "焊接日期不正确"; + } + weldingDate = weldingDate.Date; + + using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) + { + var tempDetail = db.HJGL_WeldingDailyTempDetail.FirstOrDefault(x => x.WeldJointId == newItem.WeldJointId + && x.WeldingDate >= weldingDate + && x.WeldingDate < weldingDate.AddDays(1) + && x.AuditState == 0); + if (tempDetail == null) + { + return "未找到待审核日报明细"; + } + + SaveWeldingDailyTempAttachUrl(newItem.PreWeldAttachUrl, tempDetail.TempDetailId + "#Before"); + SaveWeldingDailyTempAttachUrl(newItem.PostWeldAttachUrl, tempDetail.TempDetailId + "#After"); + + // 明细表仅有一个附件字段,合并记录焊前、焊后附件路径,便于台账直接展示。 + var preWeldAttachUrl = APIUpLoadFileService.getFileUrl(Const.HJGL_WeldReportMenuId, tempDetail.TempDetailId + "#Before", null); + var postWeldAttachUrl = APIUpLoadFileService.getFileUrl(Const.HJGL_WeldReportMenuId, tempDetail.TempDetailId + "#After", null); + tempDetail.AttachUrl = string.Join(",", new[] { preWeldAttachUrl, postWeldAttachUrl }.Where(x => !string.IsNullOrEmpty(x))); + db.SubmitChanges(); + } + + return string.Empty; + } + + /// + /// 保存焊接日报待审核附件,null 表示不变,空字符串表示清空。 + /// + /// 附件路径 + /// 附件关联业务ID + private static void SaveWeldingDailyTempAttachUrl(string attachUrl, string toKeyId) + { + if (attachUrl == null) + { + return; + } + + if (!string.IsNullOrEmpty(attachUrl)) + { + UploadFileService.SaveAttachUrl(UploadFileService.GetSourceByAttachUrl(attachUrl, 10, null), attachUrl, Const.HJGL_WeldReportMenuId, toKeyId); + } + else + { + CommonService.DeleteAttachFileById(Const.HJGL_WeldReportMenuId, toKeyId); + } + } + #region 保存焊接日报明细 /// /// 保存焊接日报明细 diff --git a/SGGL/FineUIPro.Web/CLGL/InputMaster.aspx b/SGGL/FineUIPro.Web/CLGL/InputMaster.aspx index e2c7d0bf..25ca93f9 100644 --- a/SGGL/FineUIPro.Web/CLGL/InputMaster.aspx +++ b/SGGL/FineUIPro.Web/CLGL/InputMaster.aspx @@ -176,7 +176,7 @@ + AllowPaging="true" IsDatabasePaging="true" PageSize="10000" OnRowCommand="Grid3_RowCommand" AllowColumnLocking="true"> @@ -214,7 +214,7 @@ - + diff --git a/SGGL/FineUIPro.Web/File/Excel/DataOut/管道数据表导出模板.xlsx b/SGGL/FineUIPro.Web/File/Excel/DataOut/管道数据表导出模板.xlsx index 6662b4ad95f945be7a058d01c441268f9ffe9d18..cf58099401573e18a9c31981cc195dd870f4469b 100644 GIT binary patch literal 13988 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 WO?hM>WFYA`ZTt*B`TieKwD(;A literal 9426 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 - + @@ -7,14 +7,20 @@ + + + + - + + + diff --git a/SGGL/FineUIPro.Web/FineUIPro.Web.csproj b/SGGL/FineUIPro.Web/FineUIPro.Web.csproj index 581de11a..662b9dd6 100644 --- a/SGGL/FineUIPro.Web/FineUIPro.Web.csproj +++ b/SGGL/FineUIPro.Web/FineUIPro.Web.csproj @@ -17240,7 +17240,7 @@ - + diff --git a/SGGL/FineUIPro.Web/HJGL/InfoQuery/PipelineQuery.aspx.cs b/SGGL/FineUIPro.Web/HJGL/InfoQuery/PipelineQuery.aspx.cs index fd0373ad..22194ba8 100644 --- a/SGGL/FineUIPro.Web/HJGL/InfoQuery/PipelineQuery.aspx.cs +++ b/SGGL/FineUIPro.Web/HJGL/InfoQuery/PipelineQuery.aspx.cs @@ -474,7 +474,7 @@ namespace FineUIPro.Web.HJGL.InfoQuery var weldJointData = weldJoints.Select((x, index) => new { No = index + 1, - SingleNumber = SafeText(x.SingleNumber), + SingleNumber = SafeText(x.PipelineCode), WeldJointCode = SafeText(x.WeldJointCode), Dia = x.Dia, Thickness = x.Thickness, @@ -485,8 +485,8 @@ namespace FineUIPro.Web.HJGL.InfoQuery WelderCode = JoinTexts(x.BackingWelderCode, x.CoverWelderCode), WelderExamDate = "/", TestJointDate = "/", - RootWeldingData = FormatWeldingData(x.WeldingMethodCode, x.WeldingRodCode, x.WeldingWireCode), - RemainingWeldingData = FormatWeldingData(x.WeldingMethodCode, x.WeldingRodCode, x.WeldingWireCode), + RootWeldingData = FormatWeldingData(x.WeldingMethodCode), + RemainingWeldingData = FormatWeldingData(x.WeldingMethodCode), // P列和V列按“管线需要热处理”判断,不按单个焊口判断。 PWHT = hotPipelineIdSet.Contains(x.PipelineId) ? "PWHT" : "/", HotProcessAccept = hotPipelineIdSet.Contains(x.PipelineId) ? "ACC." : "/", diff --git a/SGGL/FineUIPro.Web/HJGL/PreWeld/CuttingCheckEdit.aspx b/SGGL/FineUIPro.Web/HJGL/PreWeld/CuttingCheckEdit.aspx index b6fe93ad..e7d586b9 100644 --- a/SGGL/FineUIPro.Web/HJGL/PreWeld/CuttingCheckEdit.aspx +++ b/SGGL/FineUIPro.Web/HJGL/PreWeld/CuttingCheckEdit.aspx @@ -47,6 +47,13 @@ + + + + + + @@ -60,6 +67,10 @@ + diff --git a/SGGL/FineUIPro.Web/HJGL/PreWeld/CuttingCheckEdit.aspx.cs b/SGGL/FineUIPro.Web/HJGL/PreWeld/CuttingCheckEdit.aspx.cs index ee6b9114..ac7ba15b 100644 --- a/SGGL/FineUIPro.Web/HJGL/PreWeld/CuttingCheckEdit.aspx.cs +++ b/SGGL/FineUIPro.Web/HJGL/PreWeld/CuttingCheckEdit.aspx.cs @@ -88,5 +88,24 @@ namespace FineUIPro.Web.HJGL.PreWeld ShowNotify("保存成功!", MessageBoxIcon.Success); PageContext.RegisterStartupScript(ActiveWindow.GetHideRefreshReference()); } + + protected void btnAttachUrl_Click(object sender, EventArgs e) + { + string cuttingCheckId = CuttingCheckId; + if (string.IsNullOrEmpty(cuttingCheckId) && !string.IsNullOrEmpty(drpWeldJoint.SelectedValue)) + { + var check = Funs.DB.HJGL_PreWeldCuttingCheck.FirstOrDefault(x => x.WeldJointId == drpWeldJoint.SelectedValue); + cuttingCheckId = check == null ? string.Empty : check.CuttingCheckId; + } + if (string.IsNullOrEmpty(cuttingCheckId)) + { + Alert.ShowInTop("请先保存下料抽检记录后再上传附件!", MessageBoxIcon.Warning); + return; + } + + PageContext.RegisterStartupScript(WindowAtt.GetShowReference( + string.Format("../../AttachFile/webuploader.aspx?toKeyId={0}&path=FileUpload/HJGL/PreWeld/CuttingCheck&menuId={1}&edit=1&type=-1", + cuttingCheckId, Const.HJGL_PreWeldCuttingCheckMenuId))); + } } } diff --git a/SGGL/FineUIPro.Web/HJGL/PreWeld/CuttingCheckEdit.aspx.designer.cs b/SGGL/FineUIPro.Web/HJGL/PreWeld/CuttingCheckEdit.aspx.designer.cs index d337f239..8a6ef848 100644 --- a/SGGL/FineUIPro.Web/HJGL/PreWeld/CuttingCheckEdit.aspx.designer.cs +++ b/SGGL/FineUIPro.Web/HJGL/PreWeld/CuttingCheckEdit.aspx.designer.cs @@ -86,6 +86,15 @@ namespace FineUIPro.Web.HJGL.PreWeld /// protected global::FineUIPro.TextArea txtRemark; + /// + /// btnAttachUrl 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Button btnAttachUrl; + /// /// Toolbar1 控件。 /// @@ -112,5 +121,14 @@ namespace FineUIPro.Web.HJGL.PreWeld /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Button btnClose; + + /// + /// WindowAtt 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Window WindowAtt; } } diff --git a/SGGL/FineUIPro.Web/HJGL/PreWeld/FitupCheckEdit.aspx b/SGGL/FineUIPro.Web/HJGL/PreWeld/FitupCheckEdit.aspx index 280c2da3..9c312d33 100644 --- a/SGGL/FineUIPro.Web/HJGL/PreWeld/FitupCheckEdit.aspx +++ b/SGGL/FineUIPro.Web/HJGL/PreWeld/FitupCheckEdit.aspx @@ -64,6 +64,13 @@ + + + + + + @@ -77,6 +84,10 @@ + diff --git a/SGGL/FineUIPro.Web/HJGL/PreWeld/FitupCheckEdit.aspx.cs b/SGGL/FineUIPro.Web/HJGL/PreWeld/FitupCheckEdit.aspx.cs index dd4ab52e..b161881f 100644 --- a/SGGL/FineUIPro.Web/HJGL/PreWeld/FitupCheckEdit.aspx.cs +++ b/SGGL/FineUIPro.Web/HJGL/PreWeld/FitupCheckEdit.aspx.cs @@ -129,5 +129,22 @@ namespace FineUIPro.Web.HJGL.PreWeld ShowNotify("保存成功!", MessageBoxIcon.Success); PageContext.RegisterStartupScript(ActiveWindow.GetHideRefreshReference()); } + + protected void btnAttachUrl_Click(object sender, EventArgs e) + { + string weldJointId = drpWeldJoint.SelectedValue; + var check = string.IsNullOrEmpty(weldJointId) + ? null + : Funs.DB.HJGL_PreWeldFitupCheck.FirstOrDefault(x => x.WeldJointId == weldJointId); + if (check == null) + { + Alert.ShowInTop("请先保存组对抽检记录后再上传附件!", MessageBoxIcon.Warning); + return; + } + + PageContext.RegisterStartupScript(WindowAtt.GetShowReference( + string.Format("../../AttachFile/webuploader.aspx?toKeyId={0}&path=FileUpload/HJGL/PreWeld/FitupCheck&menuId={1}&edit=1&type=-1", + check.FitupCheckId, Const.HJGL_PreWeldFitupCheckMenuId))); + } } } diff --git a/SGGL/FineUIPro.Web/HJGL/PreWeld/FitupCheckEdit.aspx.designer.cs b/SGGL/FineUIPro.Web/HJGL/PreWeld/FitupCheckEdit.aspx.designer.cs index 988ac02b..b4521ce2 100644 --- a/SGGL/FineUIPro.Web/HJGL/PreWeld/FitupCheckEdit.aspx.designer.cs +++ b/SGGL/FineUIPro.Web/HJGL/PreWeld/FitupCheckEdit.aspx.designer.cs @@ -113,6 +113,15 @@ namespace FineUIPro.Web.HJGL.PreWeld /// protected global::FineUIPro.TextArea txtRemark; + /// + /// btnAttachUrl 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Button btnAttachUrl; + /// /// Toolbar1 控件。 /// @@ -139,5 +148,14 @@ namespace FineUIPro.Web.HJGL.PreWeld /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Button btnClose; + + /// + /// WindowAtt 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Window WindowAtt; } } diff --git a/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldMatMatch.aspx b/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldMatMatch.aspx index edfe3aae..fb520189 100644 --- a/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldMatMatch.aspx +++ b/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldMatMatch.aspx @@ -38,7 +38,7 @@ .f-grid-row.priority { /* background-color: #1e88e5;*/ - color: #fff; + color: blue; font-weight: bold; } @@ -135,11 +135,11 @@ - - @@ -181,13 +181,13 @@ - 焊接日报 + + +
@@ -177,6 +203,18 @@ DataField="WeldingLocationCode" SortField="WeldingLocationCode" FieldType="String" HeaderTextAlign="Center" TextAlign="Left" Width="100px"> + + + + + + + + + + @@ -205,7 +243,7 @@ + LabelWidth="90px" Width="220px" AutoPostBack="true" OnTextChanged="PendingFilter_TextChanged" AutoShowClearIcon="true"> @@ -265,6 +303,18 @@ + + + + + + + + + + @@ -329,8 +379,38 @@ return false; } function reloadGrid() { - __doPostBack(null, 'reloadGrid'); - } + __doPostBack(null, 'reloadGrid'); +} +var imgIDs = ['<%=Grid1.ClientID %>', '<%=GridPending.ClientID %>']; +function showImg() { + $.each(imgIDs, function(_, imgID) { + var $wrap = $("#" + imgID); + $wrap.find('img').off('click.weldreport').on('click.weldreport', function() { + var src = $(this).attr('src'); + if (!src || src.indexOf("/res/icon") != -1) { + return; + } + var div = document.createElement('div'); + div.style.display = 'none'; + div.innerHTML = ''; // 创建一个包含图片的 div 元素 + document.body.appendChild(div); // 将 div 元素添加到页面中 + + var viewer = new Viewer(div.firstChild); // 创建 Viewer 实例并传入图片元素 + viewer.show(); // 显示图片预览 + + // 在 Viewer 关闭后移除添加的 div 元素 + viewer.on('hidden', function() { + document.body.removeChild(div); + }); + }); + }); + $('.imgPreview').on('click', function() { + // $('.imgPreview').hide() + }); +} +F.ready(function() { + showImg(); + }) diff --git a/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldReport.aspx.cs b/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldReport.aspx.cs index 269c9052..76d23bbc 100644 --- a/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldReport.aspx.cs +++ b/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldReport.aspx.cs @@ -202,23 +202,36 @@ namespace FineUIPro.Web.HJGL.WeldingManage Grid1.DataBind(); return; } - string strSql = @"SELECT WeldingDailyId,WeldJointId,PipelineCode,WeldJointCode, - BackingWelderCode,CoverWelderCode,Material1Code,Material2Code, - Dia,DNDia,Thickness,WeldTypeCode,WeldingMethodCode,WeldingWireCode,WeldingMode, - WeldingRodCode,Size,JointAttribute,CoverWelderTeamGroupName,BackingWelderTeamGroupName,WeldingLocationCode + string strSql = @"SELECT jot.WeldingDailyId,jot.WeldJointId,jot.PipelineCode,jot.WeldJointCode, + jot.BackingWelderCode,jot.CoverWelderCode,jot.Material1Code,jot.Material2Code, + jot.Dia,jot.DNDia,jot.Thickness,jot.WeldTypeCode,jot.WeldingMethodCode,jot.WeldingWireCode,jot.WeldingMode, + jot.WeldingRodCode,jot.Size,jot.JointAttribute,jot.CoverWelderTeamGroupName,jot.BackingWelderTeamGroupName,jot.WeldingLocationCode, + beforeAtt.AttachUrl AS BeforePhotoUrl, + afterAtt.AttachUrl AS AfterPhotoUrl - FROM dbo.View_HJGL_WeldJoint - WHERE WeldingDailyId=@WeldingDailyId"; + FROM dbo.View_HJGL_WeldJoint AS jot + OUTER APPLY ( + SELECT TOP 1 temp.TempDetailId + FROM dbo.HJGL_WeldingDailyTempDetail AS temp + WHERE temp.WeldJointId = jot.WeldJointId AND temp.AuditState = 1 + ORDER BY temp.AuditDate DESC, temp.SubmitDate DESC + ) AS reportTemp + LEFT JOIN dbo.AttachFile AS beforeAtt ON beforeAtt.MenuId = @WeldReportMenuId + AND beforeAtt.ToKeyId = reportTemp.TempDetailId + '#Before' + LEFT JOIN dbo.AttachFile AS afterAtt ON afterAtt.MenuId = @WeldReportMenuId + AND afterAtt.ToKeyId = reportTemp.TempDetailId + '#After' + WHERE jot.WeldingDailyId=@WeldingDailyId"; List listStr = new List(); listStr.Add(new SqlParameter("@WeldingDailyId", tvControlItem.SelectedNodeID)); + listStr.Add(new SqlParameter("@WeldReportMenuId", Const.HJGL_WeldReportMenuId)); if (!string.IsNullOrEmpty(txtPipelineCode.Text.Trim())) { - strSql += " AND PipelineCode LIKE @pipelineCode "; + strSql += " AND jot.PipelineCode LIKE @pipelineCode "; listStr.Add(new SqlParameter("@pipelineCode", "%" + this.txtPipelineCode.Text.Trim() + "%")); } if (!string.IsNullOrEmpty(txtWelderCode.Text.Trim())) { - strSql += " AND (BackingWelderCode LIKE @welderCode OR CoverWelderCode LIKE @welderCode)"; + strSql += " AND (jot.BackingWelderCode LIKE @welderCode OR jot.CoverWelderCode LIKE @welderCode)"; listStr.Add(new SqlParameter("@welderCode", "%" + this.txtWelderCode.Text.Trim() + "%")); } SqlParameter[] parameter = listStr.ToArray(); @@ -263,16 +276,23 @@ namespace FineUIPro.Web.HJGL.WeldingManage jot.Thickness, jot.WeldingMethodCode, submitPerson.PersonName AS SubmitPersonName, - temp.SubmitDate + 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) @@ -380,7 +400,16 @@ namespace FineUIPro.Web.HJGL.WeldingManage #endregion #endregion + protected string ConvertImageUrlByImage(object photoUrl) + { + string url = string.Empty; + if (photoUrl != null) + { + url = BLL.UploadAttachmentService.ShowImage("../../", photoUrl.ToString()); + } + return url; + } #region 焊接日报 维护事件 /// diff --git a/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldReport.aspx.designer.cs b/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldReport.aspx.designer.cs index d8bee4a9..277e222b 100644 --- a/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldReport.aspx.designer.cs +++ b/SGGL/FineUIPro.Web/HJGL/WeldingManage/WeldReport.aspx.designer.cs @@ -7,11 +7,13 @@ // //------------------------------------------------------------------------------ -namespace FineUIPro.Web.HJGL.WeldingManage { - - - public partial class WeldReport { - +namespace FineUIPro.Web.HJGL.WeldingManage +{ + + + public partial class WeldReport + { + /// /// form1 控件。 /// @@ -20,7 +22,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::System.Web.UI.HtmlControls.HtmlForm form1; - + /// /// PageManager1 控件。 /// @@ -29,7 +31,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.PageManager PageManager1; - + /// /// Panel1 控件。 /// @@ -38,7 +40,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Panel Panel1; - + /// /// panelLeftRegion 控件。 /// @@ -47,7 +49,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Panel panelLeftRegion; - + /// /// Toolbar1 控件。 /// @@ -56,7 +58,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Toolbar Toolbar1; - + /// /// txtMonth 控件。 /// @@ -65,7 +67,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.DatePicker txtMonth; - + /// /// tvControlItem 控件。 /// @@ -74,7 +76,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Tree tvControlItem; - + /// /// Panel2 控件。 /// @@ -83,7 +85,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Panel Panel2; - + /// /// panelCenterRegion 控件。 /// @@ -101,7 +103,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Grid Grid1; - + /// /// Toolbar2 控件。 /// @@ -110,7 +112,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Toolbar Toolbar2; - + /// /// txtUnitName 控件。 /// @@ -119,7 +121,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Label txtUnitName; - + /// /// txtTabler 控件。 /// @@ -128,7 +130,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Label txtTabler; - + /// /// txtTableDate 控件。 /// @@ -137,7 +139,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Label txtTableDate; - + /// /// txtWeldingDate 控件。 /// @@ -146,7 +148,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Label txtWeldingDate; - + /// /// txtSumSize 控件。 /// @@ -155,7 +157,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Label txtSumSize; - + /// /// txtTeam 控件。 /// @@ -164,7 +166,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Label txtTeam; - + /// /// txtRemark 控件。 /// @@ -173,7 +175,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Label txtRemark; - + /// /// Toolbar3 控件。 /// @@ -182,7 +184,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Toolbar Toolbar3; - + /// /// txtPipelineCode 控件。 /// @@ -191,7 +193,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.TextBox txtPipelineCode; - + /// /// txtWelderCode 控件。 /// @@ -200,7 +202,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.TextBox txtWelderCode; - + /// /// ToolbarFill1 控件。 /// @@ -209,7 +211,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.ToolbarFill ToolbarFill1; - + /// /// hdWeldingDailyCode 控件。 /// @@ -218,7 +220,25 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.HiddenField hdWeldingDailyCode; - + + /// + /// lbReportBeforePhotoUrl 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.Label lbReportBeforePhotoUrl; + + /// + /// lbReportAfterPhotoUrl 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.Label lbReportAfterPhotoUrl; + /// /// ToolbarSeparator1 控件。 /// @@ -227,7 +247,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.ToolbarSeparator ToolbarSeparator1; - + /// /// ToolbarText1 控件。 /// @@ -236,7 +256,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.ToolbarText ToolbarText1; - + /// /// ddlPageSize 控件。 /// @@ -318,6 +338,24 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// protected global::FineUIPro.Button btnPendingDelete; + /// + /// lbPendingBeforePhotoUrl 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.Label lbPendingBeforePhotoUrl; + + /// + /// lbPendingAfterPhotoUrl 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.Label lbPendingAfterPhotoUrl; + /// /// ToolbarSeparatorPending 控件。 /// @@ -344,7 +382,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.DropDownList ddlPendingPageSize; - + /// /// Window1 控件。 /// @@ -353,7 +391,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Window Window1; - + /// /// Menu1 控件。 /// @@ -362,7 +400,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Menu Menu1; - + /// /// btnMenuAdd 控件。 /// @@ -371,7 +409,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.MenuButton btnMenuAdd; - + /// /// btnMenuEdit 控件。 /// @@ -389,7 +427,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.MenuButton btnMenuImport; - + /// /// btnMenuOut 控件。 /// @@ -398,7 +436,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.MenuButton btnMenuOut; - + /// /// btnMenuDelete 控件。 /// @@ -407,7 +445,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.MenuButton btnMenuDelete; - + /// /// Menu2 控件。 /// @@ -416,7 +454,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Menu Menu2; - + /// /// btnMenuDeleteDetail 控件。 /// diff --git a/SGGL/Model/APIItem/HJGL/HJGL_PreWeldingDailyItem.cs b/SGGL/Model/APIItem/HJGL/HJGL_PreWeldingDailyItem.cs index b8bb103f..f9569f01 100644 --- a/SGGL/Model/APIItem/HJGL/HJGL_PreWeldingDailyItem.cs +++ b/SGGL/Model/APIItem/HJGL/HJGL_PreWeldingDailyItem.cs @@ -77,4 +77,45 @@ // get; set; // } } + + /// + /// 小程序按焊口保存焊接日报及焊前、焊后附件参数 + /// + public class WeldingDailyByWeldJointAttachItem + { + /// + /// 焊口ID + /// + public string WeldJointId { get; set; } + + /// + /// 人员ID + /// + public string Personid { get; set; } + + /// + /// 焊接日期 + /// + public string time { get; set; } + + /// + /// 焊接位置ID + /// + public string weldingLocation { get; set; } + + /// + /// 焊工类型 0 全部 1 打底 2 盖面 + /// + public int welderType { get; set; } + + /// + /// 焊前附件路径 + /// + public string PreWeldAttachUrl { get; set; } + + /// + /// 焊后附件路径 + /// + public string PostWeldAttachUrl { get; set; } + } } diff --git a/SGGL/Model/APIItem/HJGL/PreWeldInspectionItem.cs b/SGGL/Model/APIItem/HJGL/PreWeldInspectionItem.cs index e2fd9872..17f3c2f7 100644 --- a/SGGL/Model/APIItem/HJGL/PreWeldInspectionItem.cs +++ b/SGGL/Model/APIItem/HJGL/PreWeldInspectionItem.cs @@ -32,6 +32,16 @@ namespace Model public decimal? FitupGap { get; set; } public decimal? Misalignment { get; set; } + + /// + /// 下料抽检附件路径 + /// + public string CuttingAttachUrl1 { get; set; } + + /// + /// 组对抽检附件路径 + /// + public string FitupAttachUrl1 { get; set; } } /// @@ -65,6 +75,8 @@ namespace Model public DateTime? CreateTime { get; set; } + public string AttachUrl1 { get; set; } + public string Remark { get; set; } } @@ -107,6 +119,8 @@ namespace Model public DateTime? CreateTime { get; set; } + public string AttachUrl1 { get; set; } + public string Remark { get; set; } } } diff --git a/SGGL/Model/APIItem/HJGL/ViewHJGLWeldJointExtend.cs b/SGGL/Model/APIItem/HJGL/ViewHJGLWeldJointExtend.cs new file mode 100644 index 00000000..ad99f657 --- /dev/null +++ b/SGGL/Model/APIItem/HJGL/ViewHJGLWeldJointExtend.cs @@ -0,0 +1,15 @@ +namespace Model +{ + public partial class View_HJGL_WeldJoint + { + /// + /// 焊前附件路径 + /// + public string PreWeldAttachUrl { get; set; } + + /// + /// 焊后附件路径 + /// + public string PostWeldAttachUrl { get; set; } + } +} diff --git a/SGGL/Model/Model.csproj b/SGGL/Model/Model.csproj index e293ab7c..5edae2cc 100644 --- a/SGGL/Model/Model.csproj +++ b/SGGL/Model/Model.csproj @@ -127,6 +127,7 @@ + diff --git a/SGGL/WebAPI/Controllers/HJGL/WeldingManage/PreWeldingDailyController.cs b/SGGL/WebAPI/Controllers/HJGL/WeldingManage/PreWeldingDailyController.cs index 27e2ca3a..c489dc19 100644 --- a/SGGL/WebAPI/Controllers/HJGL/WeldingManage/PreWeldingDailyController.cs +++ b/SGGL/WebAPI/Controllers/HJGL/WeldingManage/PreWeldingDailyController.cs @@ -233,6 +233,34 @@ namespace WebAPI.Controllers return responeData; } + /// + /// 根据焊口id保存到日报,并保存焊前、焊后附件 + /// + /// 焊口日报和附件参数 + /// + [HttpPost] + public Model.ResponeData SaveWeldingDailyByWeldJointId([FromBody] Model.WeldingDailyByWeldJointAttachItem newItem) + { + var responeData = new Model.ResponeData(); + try + { + string res = APIPreWeldingDailyService.SaveWeldingDailyByWeldJointIdWithAttach(newItem); + + if (!string.IsNullOrEmpty(res)) + { + responeData.code = 0; + responeData.message = res; + } + + } + catch (Exception ex) + { + responeData.code = 0; + responeData.message = ex.Message; + } + return responeData; + } + #endregion #region 更新焊接日报焊口信息