From 73d7a70b0d6cabe3065b62c9a8c7ea1624156678 Mon Sep 17 00:00:00 2001 From: shecs <408299694@qq.com> Date: Thu, 13 Jun 2024 10:42:27 +0800 Subject: [PATCH] 111 --- HJGL/.vs/HJGL/v17/.suo | Bin 1177088 -> 1411584 bytes .../WelderManage/WelderQualifiedService.cs | 196 +++++++++++++++++ HJGL/FineUIPro.Web/Global.asax.cs | 128 ++++++++++- .../PublicInfo/BaseInfo/MaterialEdit.aspx | 2 +- .../FineUIPro.Web/PublicInfo/WPQ/WPQList.aspx | 3 + .../PublicInfo/WPQ/WPQList.aspx.cs | 43 ++++ .../PublicInfo/WPQ/WPQList.aspx.designer.cs | 65 +++--- .../WeldingManage/SuperQueWelding.aspx | 28 ++- .../WeldingManage/SuperQueWelding.aspx.cs | 142 +++++++++++- .../WeldingManage/WeldReport.aspx.cs | 205 +----------------- .../WeldingManage/WeldReportEdit.aspx.cs | 205 +----------------- 11 files changed, 567 insertions(+), 450 deletions(-) diff --git a/HJGL/.vs/HJGL/v17/.suo b/HJGL/.vs/HJGL/v17/.suo index f4eb68f204b3545a28e753838c152c3c47b3bc51..1a226067b7ec742ec9b3145760a93bb48c6026e0 100644 GIT binary patch delta 61103 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 delta 14885 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 diff --git a/HJGL/BLL/WelderManage/WelderQualifiedService.cs b/HJGL/BLL/WelderManage/WelderQualifiedService.cs index e2f6e45..87bc350 100644 --- a/HJGL/BLL/WelderManage/WelderQualifiedService.cs +++ b/HJGL/BLL/WelderManage/WelderQualifiedService.cs @@ -117,5 +117,201 @@ namespace BLL db.SubmitChanges(); } } + + #region 资质分析 + public static bool IsOK(List welderQualifys, string wmeCode, string location, string weldTypeGroup, string ste, decimal? dia, decimal? sch) + { + bool isok = false; + foreach (var welderQualify in welderQualifys) + { + int okNum = 0; + + if (!string.IsNullOrEmpty(wmeCode)) //焊接方法 + { + if (wmeCode.Contains(welderQualify.WeldingMethodId)) + { + okNum++; + } + } + else + { + okNum++; + } + + if (welderQualify.WeldingLocationId == "ALL") //焊接位置 + { + okNum++; + } + else + { + if (!string.IsNullOrEmpty(location)) + { + if (welderQualify.WeldingLocationId.Contains(location)) + { + okNum++; + } + } + else + { + okNum++; + } + } + + if (!string.IsNullOrEmpty(weldTypeGroup)) + { + if (welderQualify.WeldType.Contains(weldTypeGroup)) + { + okNum++; + } + } + else + { + okNum++; + } + + var steel = BLL.Base_MaterialService.GetMaterialByMaterialId(ste); + if (steel != null) //钢材类型 + { + if (welderQualify.MaterialType.Contains(steel.MaterialType ?? "")) + { + okNum++; + } + } + else + { + okNum++; + } + + if (weldTypeGroup != "2") // 承插焊 + { + if (welderQualify.SizesMin == 0) // 0表示不限 + { + okNum++; + } + else //最小寸径 + { + if (dia != null) + { + if (dia >= welderQualify.SizesMin) + { + okNum++; + } + } + else + { + okNum++; + } + } + + if (welderQualify.ThicknessMax == 0) // 0表示不限 + { + okNum++; + } + else + { + if (sch != null) //最大壁厚 + { + if (sch <= welderQualify.ThicknessMax) + { + okNum++; + } + } + else + { + okNum++; + } + } + } + else // 当为角焊缝时,管径和壁厚不限制 + { + okNum++; + okNum++; + } + + + if (okNum == 6) //全部条件符合 + { + isok = true; + break; + } + } + + return isok; + } + + /// + /// 两种焊接方法的资质判断 + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static bool TwoWmeIsOK(List floorWelderQualifys, List cellWelderQualifys, string wmeCode1, string wmeCode2, string location, string weldTypeGroup, string ste, decimal? dia, decimal? sch) + { + bool isok = false; + + decimal? fThicknessMax = 0; + decimal? cThicknessMax = 0; + + var steel = BLL.Base_MaterialService.GetMaterialByMaterialId(ste); + var floorQ = from x in floorWelderQualifys + where wmeCode1.Contains(x.WeldingMethodId) + && (x.WeldingLocationId == "ALL" || (location == null || location == "" || x.WeldingLocationId.Contains(location))) + && (steel == null || x.MaterialType.Contains(steel.MaterialType ?? "")) + && (weldTypeGroup == null || x.WeldType.Contains(weldTypeGroup)) + // && (dia == null || x.SizesMin<=dia) + select x; + var cellQ = from x in cellWelderQualifys + where wmeCode2.Contains(x.WeldingMethodId) + && (x.WeldingLocationId == "ALL" || (location == null || location == "" || x.WeldingLocationId.Contains(location))) + && (steel == null || x.MaterialType.Contains(steel.MaterialType ?? "")) + && (weldTypeGroup == null || x.WeldType.Contains(weldTypeGroup)) + // && (dia == null || x.SizesMin <= dia) + select x; + if (floorQ.Count() > 0 && cellQ.Count() > 0) + { + if (weldTypeGroup != "2") // 当为角焊缝时,管径和壁厚不限制 + { + var floorDiaQ = floorQ.Where(x => x.SizesMin <= dia); + var cellDiaQ = cellQ.Where(x => x.SizesMin <= dia); + + if (floorDiaQ.Count() > 0 && cellDiaQ.Count() > 0) + { + var fThick = floorDiaQ.Where(x => x.ThicknessMax == 0); + var cThick = cellDiaQ.Where(x => x.ThicknessMax == 0); + + // 只要有一个不限(为0)就通过 + if (fThick.Count() > 0 || cThick.Count() > 0) + { + isok = true; + } + + else + { + fThicknessMax = floorQ.Max(x => x.ThicknessMax); + cThicknessMax = cellQ.Max(x => x.ThicknessMax); + + if ((fThicknessMax + cThicknessMax) >= sch) + { + isok = true; + } + } + } + } + else + { + isok = true; + } + } + + return isok; + } + #endregion + } } diff --git a/HJGL/FineUIPro.Web/Global.asax.cs b/HJGL/FineUIPro.Web/Global.asax.cs index a99c92b..4e22262 100644 --- a/HJGL/FineUIPro.Web/Global.asax.cs +++ b/HJGL/FineUIPro.Web/Global.asax.cs @@ -50,7 +50,9 @@ System.Threading.Thread LoadServiceData = new System.Threading.Thread(new System.Threading.ThreadStart(ExpirePoint)); LoadServiceData.Start(); - + // 开启超焊信息提取 + System.Threading.Thread LoadServiceSuperQue = new System.Threading.Thread(new System.Threading.ThreadStart(SuperQueWelding)); + LoadServiceData.Start(); } private void ExpirePoint() @@ -146,8 +148,128 @@ } } - - + + private void SuperQueWelding() + { + //定义一个定时器,并开启和配置相关属性 + System.Timers.Timer ExpirePoint = new System.Timers.Timer(); + //执行任务的周期 ,3小时 + ExpirePoint.Interval = 1000 * 60 * 60 * 3; + ExpirePoint.Enabled = true; + ExpirePoint.Start(); + ExpirePoint.Elapsed += new System.Timers.ElapsedEventHandler(SuperQueWelding_Elapsed); + } + + void SuperQueWelding_Elapsed(object sender, System.Timers.ElapsedEventArgs e) + { + bool canWPS = true; + var jotList = (from x in Funs.DB.Pipeline_WeldJoint where x.WeldingDailyId != null && x.WeldingMethodId != null select x).ToList(); + foreach (var jot in jotList) + { + var wps = BLL.WPQListServiceService.GetWPQById(jot.WPQId); + string floorWelder = jot.BackingWelderId; + string cellWelder = jot.CoverWelderId; + if (wps != null) + { + // 验证焊工WPS资质 + if (floorWelder == cellWelder) + { + if (!wps.WelderIds.Contains(floorWelder)) + { + canWPS = false; + } + } + else + { + if (!wps.WelderIds.Contains(floorWelder)) + { + canWPS = false; + } + if (!wps.WelderIds.Contains(cellWelder)) + { + canWPS = false; + } + } + } + + // 验证焊工合格项目资质 + bool canSave = false; + var joty = BLL.Base_WeldTypeService.GetWeldTypeByWeldTypeId(jot.WeldTypeId); + var mat = BLL.Base_WeldingMethodService.GetWeldingMethodByWeldingMethodId(jot.WeldingMethodId); + var loc = BLL.Base_WeldingLocationServie.GetWeldingLocationById(jot.WeldingLocationId); + string weldTypeGroup = joty.Flag; + string weldTypeCode = joty.WeldTypeCode; + decimal? dia = jot.Dia; + decimal? sch = jot.Thickness; + + string[] wmeCodes = mat.WeldingMethodCode.Split('+'); + string location = loc.WeldingLocationCode; + string ste = jot.Material1Id; + + List floorWelderQualifys = (from x in Funs.DB.Welder_WelderQualify + where x.WelderId == floorWelder && x.WeldingMethodId != null + && x.WeldingLocationId != null && x.MaterialType != null + && x.WeldType != null + && x.ThicknessMax != null && x.SizesMin != null + select x).ToList(); + + List cellWelderQualifys = (from x in Funs.DB.Welder_WelderQualify + where x.WelderId == cellWelder && x.WeldingMethodId != null + && x.WeldingLocationId != null && x.MaterialType != null + && x.WeldType != null + && x.ThicknessMax != null && x.SizesMin != null + select x).ToList(); + // 打底和盖面同一焊工 + if (floorWelder == cellWelder) + { + if (floorWelderQualifys != null && floorWelderQualifys.Count() > 0) + { + if (wmeCodes.Count() <= 1) // 一种焊接方法 + { + canSave = BLL.WelderQualifiedService.IsOK(floorWelderQualifys, wmeCodes[0], location, weldTypeGroup, ste, dia, sch); + } + else // 大于一种焊接方法,如氩电联焊 + { + canSave = BLL.WelderQualifiedService.TwoWmeIsOK(floorWelderQualifys, cellWelderQualifys, wmeCodes[0], wmeCodes[1], location, weldTypeGroup, ste, dia, sch); + } + } + } + // 打底和盖面焊工不同 + else + { + bool isok1 = false; + bool isok2 = false; + + if (wmeCodes.Count() <= 1) // 一种焊接方法 + { + if (floorWelderQualifys != null && floorWelderQualifys.Count() > 0) + { + isok1 = BLL.WelderQualifiedService.IsOK(floorWelderQualifys, wmeCodes[0], location, weldTypeGroup, ste, dia, sch); + } + if (cellWelderQualifys != null && cellWelderQualifys.Count() > 0) + { + isok2 = BLL.WelderQualifiedService.IsOK(cellWelderQualifys, wmeCodes[0], location, weldTypeGroup, ste, dia, sch); + } + if (isok1 && isok2) + { + canSave = true; + } + } + else + { + canSave = BLL.WelderQualifiedService.TwoWmeIsOK(floorWelderQualifys, cellWelderQualifys, wmeCodes[0], wmeCodes[1], location, weldTypeGroup, ste, dia, sch); + } + } + + + if (canWPS == false || canSave == false) + { + jot.IsSuperQueWelding = true; + Funs.DB.SubmitChanges(); + } + } + } + protected void Session_Start(object sender, EventArgs e) { Session.Timeout = 36000; diff --git a/HJGL/FineUIPro.Web/PublicInfo/BaseInfo/MaterialEdit.aspx b/HJGL/FineUIPro.Web/PublicInfo/BaseInfo/MaterialEdit.aspx index 0b3c521..9a97264 100644 --- a/HJGL/FineUIPro.Web/PublicInfo/BaseInfo/MaterialEdit.aspx +++ b/HJGL/FineUIPro.Web/PublicInfo/BaseInfo/MaterialEdit.aspx @@ -22,7 +22,7 @@ - diff --git a/HJGL/FineUIPro.Web/PublicInfo/WPQ/WPQList.aspx b/HJGL/FineUIPro.Web/PublicInfo/WPQ/WPQList.aspx index f28741e..b38e1dc 100644 --- a/HJGL/FineUIPro.Web/PublicInfo/WPQ/WPQList.aspx +++ b/HJGL/FineUIPro.Web/PublicInfo/WPQ/WPQList.aspx @@ -33,6 +33,9 @@ + + diff --git a/HJGL/FineUIPro.Web/PublicInfo/WPQ/WPQList.aspx.cs b/HJGL/FineUIPro.Web/PublicInfo/WPQ/WPQList.aspx.cs index de9508f..ff1df69 100644 --- a/HJGL/FineUIPro.Web/PublicInfo/WPQ/WPQList.aspx.cs +++ b/HJGL/FineUIPro.Web/PublicInfo/WPQ/WPQList.aspx.cs @@ -4,6 +4,7 @@ using System.Data.SqlClient; using BLL; using System.Data; using System.Text; +using System.Linq; using AspNet = System.Web.UI.WebControls; namespace FineUIPro.Web.PublicInfo.WPQ @@ -330,6 +331,48 @@ namespace FineUIPro.Web.PublicInfo.WPQ } #endregion + #region 提取可焊焊工 + protected void BtnExtract_Click(object sender, EventArgs e) + { + if (Grid1.SelectedRowIndexArray.Length == 0) + { + Alert.ShowInTop("请至少选择一条记录!", MessageBoxIcon.Warning); + return; + } + string wpsId = Grid1.SelectedRowID; + var wps=BLL.WPQListServiceService.GetWPQById(wpsId); + var welderList = from x in Funs.DB.Welder_ProjectWelder where x.ProjectId == this.CurrUser.LoginProjectId select x; + + if (welderList.Count() > 0) + { + string testWelder = string.Empty; + // 焊工考试情况 + foreach (var welder in welderList) + { + var welderTestList = from x in Funs.DB.Welder_TestInfo where x.WelderId == welder.WelderId select x; + if (welderTestList.Count() > 0) + { + foreach (var t in welderTestList) + { + if (wps.MaterialId1.Contains(t.MaterialId) && wps.WeldingMethodId != null && wps.WeldingMethodId.Contains(t.WeldMethodId) && t.IsPass == true) + { + testWelder += welder.WelderId+"|"; + break; + } + } + } + + } + if (testWelder != string.Empty) + { + testWelder = testWelder.Substring(0, testWelder.Length - 1); + wps.WelderIds = testWelder; + Funs.DB.SubmitChanges(); + } + } + } + #endregion + #region 格式化字符串 diff --git a/HJGL/FineUIPro.Web/PublicInfo/WPQ/WPQList.aspx.designer.cs b/HJGL/FineUIPro.Web/PublicInfo/WPQ/WPQList.aspx.designer.cs index 6a7eba5..2085aec 100644 --- a/HJGL/FineUIPro.Web/PublicInfo/WPQ/WPQList.aspx.designer.cs +++ b/HJGL/FineUIPro.Web/PublicInfo/WPQ/WPQList.aspx.designer.cs @@ -7,11 +7,13 @@ // //------------------------------------------------------------------------------ -namespace FineUIPro.Web.PublicInfo.WPQ { - - - public partial class WPQList { - +namespace FineUIPro.Web.PublicInfo.WPQ +{ + + + public partial class WPQList + { + /// /// form1 控件。 /// @@ -20,7 +22,7 @@ namespace FineUIPro.Web.PublicInfo.WPQ { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::System.Web.UI.HtmlControls.HtmlForm form1; - + /// /// PageManager1 控件。 /// @@ -29,7 +31,7 @@ namespace FineUIPro.Web.PublicInfo.WPQ { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.PageManager PageManager1; - + /// /// Panel1 控件。 /// @@ -38,7 +40,7 @@ namespace FineUIPro.Web.PublicInfo.WPQ { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Panel Panel1; - + /// /// Grid1 控件。 /// @@ -47,7 +49,7 @@ namespace FineUIPro.Web.PublicInfo.WPQ { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Grid Grid1; - + /// /// Toolbar2 控件。 /// @@ -56,7 +58,7 @@ namespace FineUIPro.Web.PublicInfo.WPQ { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Toolbar Toolbar2; - + /// /// txtWeldingProcedureCode 控件。 /// @@ -65,7 +67,7 @@ namespace FineUIPro.Web.PublicInfo.WPQ { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.TextBox txtWeldingProcedureCode; - + /// /// ToolbarFill1 控件。 /// @@ -74,7 +76,7 @@ namespace FineUIPro.Web.PublicInfo.WPQ { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.ToolbarFill ToolbarFill1; - + /// /// btnNew 控件。 /// @@ -83,7 +85,7 @@ namespace FineUIPro.Web.PublicInfo.WPQ { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Button btnNew; - + /// /// btnImport 控件。 /// @@ -92,7 +94,7 @@ namespace FineUIPro.Web.PublicInfo.WPQ { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Button btnImport; - + /// /// btnExport 控件。 /// @@ -101,7 +103,16 @@ namespace FineUIPro.Web.PublicInfo.WPQ { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Button btnExport; - + + /// + /// btnExtract 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Button btnExtract; + /// /// lblNumber 控件。 /// @@ -110,7 +121,7 @@ namespace FineUIPro.Web.PublicInfo.WPQ { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::System.Web.UI.WebControls.Label lblNumber; - + /// /// Label1 控件。 /// @@ -119,7 +130,7 @@ namespace FineUIPro.Web.PublicInfo.WPQ { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::System.Web.UI.WebControls.Label Label1; - + /// /// Label2 控件。 /// @@ -128,7 +139,7 @@ namespace FineUIPro.Web.PublicInfo.WPQ { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::System.Web.UI.WebControls.Label Label2; - + /// /// Label3 控件。 /// @@ -137,7 +148,7 @@ namespace FineUIPro.Web.PublicInfo.WPQ { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::System.Web.UI.WebControls.Label Label3; - + /// /// lbWelderName 控件。 /// @@ -146,7 +157,7 @@ namespace FineUIPro.Web.PublicInfo.WPQ { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::System.Web.UI.WebControls.Label lbWelderName; - + /// /// ToolbarSeparator1 控件。 /// @@ -155,7 +166,7 @@ namespace FineUIPro.Web.PublicInfo.WPQ { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.ToolbarSeparator ToolbarSeparator1; - + /// /// ToolbarText1 控件。 /// @@ -164,7 +175,7 @@ namespace FineUIPro.Web.PublicInfo.WPQ { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.ToolbarText ToolbarText1; - + /// /// ddlPageSize 控件。 /// @@ -173,7 +184,7 @@ namespace FineUIPro.Web.PublicInfo.WPQ { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.DropDownList ddlPageSize; - + /// /// Window1 控件。 /// @@ -182,7 +193,7 @@ namespace FineUIPro.Web.PublicInfo.WPQ { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Window Window1; - + /// /// Window2 控件。 /// @@ -191,7 +202,7 @@ namespace FineUIPro.Web.PublicInfo.WPQ { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Window Window2; - + /// /// Menu1 控件。 /// @@ -200,7 +211,7 @@ namespace FineUIPro.Web.PublicInfo.WPQ { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Menu Menu1; - + /// /// btnMenuEdit 控件。 /// @@ -209,7 +220,7 @@ namespace FineUIPro.Web.PublicInfo.WPQ { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.MenuButton btnMenuEdit; - + /// /// btnMenuDelete 控件。 /// diff --git a/HJGL/FineUIPro.Web/WeldingProcess/WeldingManage/SuperQueWelding.aspx b/HJGL/FineUIPro.Web/WeldingProcess/WeldingManage/SuperQueWelding.aspx index 41e2dc5..bdd1972 100644 --- a/HJGL/FineUIPro.Web/WeldingProcess/WeldingManage/SuperQueWelding.aspx +++ b/HJGL/FineUIPro.Web/WeldingProcess/WeldingManage/SuperQueWelding.aspx @@ -4,14 +4,16 @@ - 超资质焊接预警 +
@@ -23,7 +25,7 @@ EnableCollapse="true" runat="server" BoxFlex="1" EnableColumnLines="true" AllowSorting="true" SortField="PipelineCode,WeldJointCode" OnSort="Grid1_Sort" AllowPaging="true" IsDatabasePaging="true" PageSize="15" OnPageIndexChange="Grid1_PageIndexChange" - EnableTextSelection="True" EnableSummary="true" SummaryPosition="Flow"> + EnableTextSelection="True" OnRowDataBound="Grid1_RowDataBound"> @@ -46,7 +48,7 @@ - @@ -71,6 +73,10 @@ DataField="WeldJointCode" SortField="WeldJointCode" FieldType="String" HeaderTextAlign="Center" Width="120px"> + + @@ -87,8 +93,8 @@ DataField="WeldingLocationCode" FieldType="String" HeaderTextAlign="Center" Width="100px"> - - diff --git a/HJGL/FineUIPro.Web/WeldingProcess/WeldingManage/SuperQueWelding.aspx.cs b/HJGL/FineUIPro.Web/WeldingProcess/WeldingManage/SuperQueWelding.aspx.cs index cab0877..1270f6c 100644 --- a/HJGL/FineUIPro.Web/WeldingProcess/WeldingManage/SuperQueWelding.aspx.cs +++ b/HJGL/FineUIPro.Web/WeldingProcess/WeldingManage/SuperQueWelding.aspx.cs @@ -10,6 +10,7 @@ using System.IO; using System.Linq; using Newtonsoft.Json.Linq; using BorderStyle = NPOI.SS.UserModel.BorderStyle; +using System.Diagnostics; namespace FineUIPro.Web.WeldingProcess.WeldingManage { @@ -38,13 +39,12 @@ namespace FineUIPro.Web.WeldingProcess.WeldingManage /// private DataTable GetDataTable() { - string strSql = @"SELECT weldJoint.WeldJointId,weldJoint.ProjectId,WorkArea.WorkAreaId, + string strSql = @"SELECT weldJoint.WeldJointId,weldJoint.ProjectId,WorkArea.WorkAreaId,wps.WPQCode, WorkArea.WorkAreaCode,pipeline.SingleNumber,pipeline.PipelineCode,weldJoint.WeldJointCode, weldType.WeldTypeCode,wl.WeldingLocationCode,weldJoint.Size,weldJoint.Thickness, weldJoint.Specification,mat1.MaterialCode AS MaterialCode1,mat2.MaterialCode AS MaterialCode2, - WeldMethod.WeldingMethodName,cw.WelderCode AS CoverWelderCode,fw.WelderCode AS BackingWelderCode, - weldJoint.BackingWelderId,weldJoint.CoverWelderId,weldingDaily.WeldingDate, - weldJoint.IsSuperQueWelding + WeldMethod.WeldingMethodCode,cw.WelderCode AS CoverWelderCode,fw.WelderCode AS BackingWelderCode, + weldingDaily.WeldingDate, weldJoint.IsSuperQueWelding FROM Pipeline_WeldJoint AS weldJoint LEFT JOIN Pipeline_Pipeline AS pipeline ON pipeline.PipelineId = weldJoint.PipelineId LEFT JOIN Project_WorkArea AS WorkArea ON WorkArea.WorkAreaId = pipeline.WorkAreaId @@ -54,8 +54,9 @@ namespace FineUIPro.Web.WeldingProcess.WeldingManage LEFT JOIN dbo.Base_WeldType weldType ON weldType.WeldTypeId = weldJoint.WeldTypeId LEFT JOIN dbo.Base_WeldingLocation wl ON wl.WeldingLocationId = weldJoint.WeldingLocationId LEFT JOIN Pipeline_WeldingDaily AS weldingDaily ON weldingDaily.WeldingDailyId = weldJoint.WeldingDailyId - left join Welder_Welder AS fw on weldJoint.BackingWelderId = fw.WelderId - left join Welder_Welder AS cw on weldJoint.CoverWelderId = cw.WelderId + LEFT JOIN Welder_Welder AS fw on weldJoint.BackingWelderId = fw.WelderId + LEFT JOIN Welder_Welder AS cw on weldJoint.CoverWelderId = cw.WelderId + LEFT JOIN dbo.WPQ_WPQList wps ON wps.WPQId = weldJoint.WPQId WHERE weldJoint.WeldingDailyId IS NOT NULL AND weldJoint.ProjectId=@projectId"; List listStr = new List(); @@ -98,13 +99,138 @@ namespace FineUIPro.Web.WeldingProcess.WeldingManage BindGrid(); } + protected void BtnExtract_Click(object sender, EventArgs e) { - DataTable dt = GetDataTable(); - + bool canWPS = true; + var jotList = (from x in Funs.DB.Pipeline_WeldJoint where x.ProjectId == this.CurrUser.LoginProjectId && x.WeldingDailyId != null && x.WeldingMethodId != null select x).ToList(); + foreach (var jot in jotList) + { + var wps = BLL.WPQListServiceService.GetWPQById(jot.WPQId); + string floorWelder = jot.BackingWelderId; + string cellWelder = jot.CoverWelderId; + if (wps != null) + { + // 验证焊工WPS资质 + if (floorWelder == cellWelder) + { + if (!wps.WelderIds.Contains(floorWelder)) + { + canWPS = false; + } + } + else + { + if (!wps.WelderIds.Contains(floorWelder)) + { + canWPS = false; + } + if (!wps.WelderIds.Contains(cellWelder)) + { + canWPS = false; + } + } + } + + // 验证焊工合格项目资质 + bool canSave = false; + var joty = BLL.Base_WeldTypeService.GetWeldTypeByWeldTypeId(jot.WeldTypeId); + var mat=BLL.Base_WeldingMethodService.GetWeldingMethodByWeldingMethodId(jot.WeldingMethodId); + var loc=BLL.Base_WeldingLocationServie.GetWeldingLocationById(jot.WeldingLocationId); + string weldTypeGroup = joty.Flag; + string weldTypeCode = joty.WeldTypeCode; + decimal? dia = jot.Dia; + decimal? sch = jot.Thickness; + + string[] wmeCodes = mat.WeldingMethodCode.Split('+'); + string location = loc.WeldingLocationCode; + string ste = jot.Material1Id; + + List floorWelderQualifys = (from x in Funs.DB.Welder_WelderQualify + where x.WelderId == floorWelder && x.WeldingMethodId != null + && x.WeldingLocationId != null && x.MaterialType != null + && x.WeldType != null + && x.ThicknessMax != null && x.SizesMin != null + select x).ToList(); + + List cellWelderQualifys = (from x in Funs.DB.Welder_WelderQualify + where x.WelderId == cellWelder && x.WeldingMethodId != null + && x.WeldingLocationId != null && x.MaterialType != null + && x.WeldType != null + && x.ThicknessMax != null && x.SizesMin != null + select x).ToList(); + // 打底和盖面同一焊工 + if (floorWelder == cellWelder) + { + if (floorWelderQualifys != null && floorWelderQualifys.Count() > 0) + { + if (wmeCodes.Count() <= 1) // 一种焊接方法 + { + canSave = BLL.WelderQualifiedService.IsOK(floorWelderQualifys, wmeCodes[0], location, weldTypeGroup, ste, dia, sch); + } + else // 大于一种焊接方法,如氩电联焊 + { + canSave = BLL.WelderQualifiedService.TwoWmeIsOK(floorWelderQualifys, cellWelderQualifys, wmeCodes[0], wmeCodes[1], location, weldTypeGroup, ste, dia, sch); + } + } + } + // 打底和盖面焊工不同 + else + { + bool isok1 = false; + bool isok2 = false; + + if (wmeCodes.Count() <= 1) // 一种焊接方法 + { + if (floorWelderQualifys != null && floorWelderQualifys.Count() > 0) + { + isok1 = BLL.WelderQualifiedService.IsOK(floorWelderQualifys, wmeCodes[0], location, weldTypeGroup, ste, dia, sch); + } + if (cellWelderQualifys != null && cellWelderQualifys.Count() > 0) + { + isok2 = BLL.WelderQualifiedService.IsOK(cellWelderQualifys, wmeCodes[0], location, weldTypeGroup, ste, dia, sch); + } + if (isok1 && isok2) + { + canSave = true; + } + } + else + { + canSave = BLL.WelderQualifiedService.TwoWmeIsOK(floorWelderQualifys, cellWelderQualifys, wmeCodes[0], wmeCodes[1], location, weldTypeGroup, ste, dia, sch); + } + } + + + if (canWPS==false || canSave == false) + { + jot.IsSuperQueWelding = true; + Funs.DB.SubmitChanges(); + } + } + + ShowNotify("提取完成"); + return; + } #endregion + + protected void Grid1_RowDataBound(object sender, GridRowEventArgs e) + { + DataRowView row = e.DataItem as DataRowView; + + if (row["IsSuperQueWelding"].ToString() != "") + { + Boolean isSup = Convert.ToBoolean(row["IsSuperQueWelding"]); + if (isSup==true) + { + e.RowCssClass = "color1"; + } + } + + } + #region /// /// 改变索引事件 diff --git a/HJGL/FineUIPro.Web/WeldingProcess/WeldingManage/WeldReport.aspx.cs b/HJGL/FineUIPro.Web/WeldingProcess/WeldingManage/WeldReport.aspx.cs index cf77ec9..b0f1878 100644 --- a/HJGL/FineUIPro.Web/WeldingProcess/WeldingManage/WeldReport.aspx.cs +++ b/HJGL/FineUIPro.Web/WeldingProcess/WeldingManage/WeldReport.aspx.cs @@ -1307,11 +1307,11 @@ namespace FineUIPro.Web.WeldingProcess.WeldingManage { if (wmeCodes.Count() <= 1) // 一种焊接方法 { - canSave = IsOK(floorWelderQualifys, wmeCodes[0], location, weldTypeGroup, ste, dia, sch); + canSave = BLL.WelderQualifiedService.IsOK(floorWelderQualifys, wmeCodes[0], location, weldTypeGroup, ste, dia, sch); } else // 大于一种焊接方法,如氩电联焊 { - canSave = TwoWmeIsOK(floorWelderQualifys, cellWelderQualifys, wmeCodes[0], wmeCodes[1], location, weldTypeGroup, ste, dia, sch); + canSave = BLL.WelderQualifiedService.TwoWmeIsOK(floorWelderQualifys, cellWelderQualifys, wmeCodes[0], wmeCodes[1], location, weldTypeGroup, ste, dia, sch); } } } @@ -1325,11 +1325,11 @@ namespace FineUIPro.Web.WeldingProcess.WeldingManage { if (floorWelderQualifys != null && floorWelderQualifys.Count() > 0) { - isok1 = IsOK(floorWelderQualifys, wmeCodes[0], location, weldTypeGroup, ste, dia, sch); + isok1 = BLL.WelderQualifiedService.IsOK(floorWelderQualifys, wmeCodes[0], location, weldTypeGroup, ste, dia, sch); } if (cellWelderQualifys != null && cellWelderQualifys.Count() > 0) { - isok2 = IsOK(cellWelderQualifys, wmeCodes[0], location, weldTypeGroup, ste, dia, sch); + isok2 = BLL.WelderQualifiedService.IsOK(cellWelderQualifys, wmeCodes[0], location, weldTypeGroup, ste, dia, sch); } if (isok1 && isok2) { @@ -1338,7 +1338,7 @@ namespace FineUIPro.Web.WeldingProcess.WeldingManage } else { - canSave = TwoWmeIsOK(floorWelderQualifys, cellWelderQualifys, wmeCodes[0], wmeCodes[1], location, weldTypeGroup, ste, dia, sch); + canSave = BLL.WelderQualifiedService.TwoWmeIsOK(floorWelderQualifys, cellWelderQualifys, wmeCodes[0], wmeCodes[1], location, weldTypeGroup, ste, dia, sch); } } @@ -1650,201 +1650,6 @@ namespace FineUIPro.Web.WeldingProcess.WeldingManage } #endregion - #region 资质分析 - private bool IsOK(List welderQualifys, string wmeCode, string location, string weldTypeGroup, string ste, decimal? dia, decimal? sch) - { - bool isok = false; - foreach (var welderQualify in welderQualifys) - { - int okNum = 0; - - if (!string.IsNullOrEmpty(wmeCode)) //焊接方法 - { - if (wmeCode.Contains(welderQualify.WeldingMethodId)) - { - okNum++; - } - } - else - { - okNum++; - } - - if (welderQualify.WeldingLocationId == "ALL") //焊接位置 - { - okNum++; - } - else - { - if (!string.IsNullOrEmpty(location)) - { - if (welderQualify.WeldingLocationId.Contains(location)) - { - okNum++; - } - } - else - { - okNum++; - } - } - - if (!string.IsNullOrEmpty(weldTypeGroup)) - { - if (welderQualify.WeldType.Contains(weldTypeGroup)) - { - okNum++; - } - } - else - { - okNum++; - } - - var steel = BLL.Base_MaterialService.GetMaterialByMaterialId(ste); - if (steel != null) //钢材类型 - { - if (welderQualify.MaterialType.Contains(steel.MaterialType ?? "")) - { - okNum++; - } - } - else - { - okNum++; - } - - if (weldTypeGroup != "2") // 承插焊 - { - if (welderQualify.SizesMin == 0) // 0表示不限 - { - okNum++; - } - else //最小寸径 - { - if (dia != null) - { - if (dia >= welderQualify.SizesMin) - { - okNum++; - } - } - else - { - okNum++; - } - } - - if (welderQualify.ThicknessMax == 0) // 0表示不限 - { - okNum++; - } - else - { - if (sch != null) //最大壁厚 - { - if (sch <= welderQualify.ThicknessMax) - { - okNum++; - } - } - else - { - okNum++; - } - } - } - else // 当为角焊缝时,管径和壁厚不限制 - { - okNum++; - okNum++; - } - - - if (okNum == 6) //全部条件符合 - { - isok = true; - break; - } - } - - return isok; - } - - /// - /// 两种焊接方法的资质判断 - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - private bool TwoWmeIsOK(List floorWelderQualifys, List cellWelderQualifys, string wmeCode1, string wmeCode2, string location, string weldTypeGroup, string ste, decimal? dia, decimal? sch) - { - bool isok = false; - - decimal? fThicknessMax = 0; - decimal? cThicknessMax = 0; - - var steel = BLL.Base_MaterialService.GetMaterialByMaterialId(ste); - var floorQ = from x in floorWelderQualifys - where wmeCode1.Contains(x.WeldingMethodId) - && (x.WeldingLocationId == "ALL" || (location == null || location == "" || x.WeldingLocationId.Contains(location))) - && (steel == null || x.MaterialType.Contains(steel.MaterialType ?? "")) - && (weldTypeGroup == null || x.WeldType.Contains(weldTypeGroup)) - // && (dia == null || x.SizesMin<=dia) - select x; - var cellQ = from x in cellWelderQualifys - where wmeCode2.Contains(x.WeldingMethodId) - && (x.WeldingLocationId == "ALL" || (location == null || location == "" || x.WeldingLocationId.Contains(location))) - && (steel == null || x.MaterialType.Contains(steel.MaterialType ?? "")) - && (weldTypeGroup == null || x.WeldType.Contains(weldTypeGroup)) - // && (dia == null || x.SizesMin <= dia) - select x; - if (floorQ.Count() > 0 && cellQ.Count() > 0) - { - if (weldTypeGroup != "2") // 当为角焊缝时,管径和壁厚不限制 - { - var floorDiaQ = floorQ.Where(x => x.SizesMin <= dia); - var cellDiaQ = cellQ.Where(x => x.SizesMin <= dia); - - if (floorDiaQ.Count() > 0 && cellDiaQ.Count() > 0) - { - var fThick = floorDiaQ.Where(x => x.ThicknessMax == 0); - var cThick = cellDiaQ.Where(x => x.ThicknessMax == 0); - - // 只要有一个不限(为0)就通过 - if (fThick.Count() > 0 || cThick.Count() > 0) - { - isok = true; - } - - else - { - fThicknessMax = floorQ.Max(x => x.ThicknessMax); - cThicknessMax = cellQ.Max(x => x.ThicknessMax); - - if ((fThicknessMax + cThicknessMax) >= sch) - { - isok = true; - } - } - } - } - else - { - isok = true; - } - } - - return isok; - } - #endregion - #region 关闭弹出窗口及刷新页面 /// /// 关闭弹出窗口 diff --git a/HJGL/FineUIPro.Web/WeldingProcess/WeldingManage/WeldReportEdit.aspx.cs b/HJGL/FineUIPro.Web/WeldingProcess/WeldingManage/WeldReportEdit.aspx.cs index 79c24c6..a5bc38c 100644 --- a/HJGL/FineUIPro.Web/WeldingProcess/WeldingManage/WeldReportEdit.aspx.cs +++ b/HJGL/FineUIPro.Web/WeldingProcess/WeldingManage/WeldReportEdit.aspx.cs @@ -471,11 +471,11 @@ namespace FineUIPro.Web.WeldingProcess.WeldingManage { if (wmeCodes.Count() <= 1) // 一种焊接方法 { - canSave = IsOK(floorWelderQualifys, wmeCodes[0], location, weldTypeGroup, ste, dia, sch); + canSave = BLL.WelderQualifiedService.IsOK(floorWelderQualifys, wmeCodes[0], location, weldTypeGroup, ste, dia, sch); } else // 大于一种焊接方法,如氩电联焊 { - canSave = TwoWmeIsOK(floorWelderQualifys, cellWelderQualifys, wmeCodes[0], wmeCodes[1], location, weldTypeGroup, ste, dia, sch); + canSave = BLL.WelderQualifiedService.TwoWmeIsOK(floorWelderQualifys, cellWelderQualifys, wmeCodes[0], wmeCodes[1], location, weldTypeGroup, ste, dia, sch); } } } @@ -489,11 +489,11 @@ namespace FineUIPro.Web.WeldingProcess.WeldingManage { if (floorWelderQualifys != null && floorWelderQualifys.Count() > 0) { - isok1 = IsOK(floorWelderQualifys, wmeCodes[0], location, weldTypeGroup, ste, dia, sch); + isok1 = BLL.WelderQualifiedService.IsOK(floorWelderQualifys, wmeCodes[0], location, weldTypeGroup, ste, dia, sch); } if (cellWelderQualifys != null && cellWelderQualifys.Count() > 0) { - isok2 = IsOK(cellWelderQualifys, wmeCodes[0], location, weldTypeGroup, ste, dia, sch); + isok2 = BLL.WelderQualifiedService.IsOK(cellWelderQualifys, wmeCodes[0], location, weldTypeGroup, ste, dia, sch); } if (isok1 && isok2) { @@ -502,7 +502,7 @@ namespace FineUIPro.Web.WeldingProcess.WeldingManage } else { - canSave = TwoWmeIsOK(floorWelderQualifys, cellWelderQualifys, wmeCodes[0], wmeCodes[1], location, weldTypeGroup, ste, dia, sch); + canSave = BLL.WelderQualifiedService.TwoWmeIsOK(floorWelderQualifys, cellWelderQualifys, wmeCodes[0], wmeCodes[1], location, weldTypeGroup, ste, dia, sch); } } } @@ -1412,201 +1412,6 @@ namespace FineUIPro.Web.WeldingProcess.WeldingManage } #endregion - #region 资质分析 - private bool IsOK(List welderQualifys, string wmeCode, string location, string weldTypeGroup, string ste, decimal? dia, decimal? sch) - { - bool isok = false; - foreach (var welderQualify in welderQualifys) - { - int okNum = 0; - - if (!string.IsNullOrEmpty(wmeCode)) //焊接方法 - { - if (wmeCode.Contains(welderQualify.WeldingMethodId)) - { - okNum++; - } - } - else - { - okNum++; - } - - if (welderQualify.WeldingLocationId == "ALL") //焊接位置 - { - okNum++; - } - else - { - if (!string.IsNullOrEmpty(location)) - { - if (welderQualify.WeldingLocationId.Contains(location)) - { - okNum++; - } - } - else - { - okNum++; - } - } - - if (!string.IsNullOrEmpty(weldTypeGroup)) - { - if (welderQualify.WeldType.Contains(weldTypeGroup)) - { - okNum++; - } - } - else - { - okNum++; - } - - var steel = BLL.Base_MaterialService.GetMaterialByMaterialId(ste); - if (steel != null) //钢材类型 - { - if (welderQualify.MaterialType.Contains(steel.MaterialType ?? "")) - { - okNum++; - } - } - else - { - okNum++; - } - - if (weldTypeGroup != "2") // 承插焊 - { - if (welderQualify.SizesMin == 0) // 0表示不限 - { - okNum++; - } - else //最小寸径 - { - if (dia != null) - { - if (dia >= welderQualify.SizesMin) - { - okNum++; - } - } - else - { - okNum++; - } - } - - if (welderQualify.ThicknessMax == 0) // 0表示不限 - { - okNum++; - } - else - { - if (sch != null) //最大壁厚 - { - if (sch <= welderQualify.ThicknessMax) - { - okNum++; - } - } - else - { - okNum++; - } - } - } - else // 当为角焊缝时,管径和壁厚不限制 - { - okNum++; - okNum++; - } - - - if (okNum == 6) //全部条件符合 - { - isok = true; - break; - } - } - - return isok; - } - - /// - /// 两种焊接方法的资质判断 - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - private bool TwoWmeIsOK(List floorWelderQualifys, List cellWelderQualifys, string wmeCode1, string wmeCode2, string location, string weldTypeGroup, string ste, decimal? dia, decimal? sch) - { - bool isok = false; - - decimal? fThicknessMax = 0; - decimal? cThicknessMax = 0; - - var steel = BLL.Base_MaterialService.GetMaterialByMaterialId(ste); - var floorQ = from x in floorWelderQualifys - where wmeCode1.Contains(x.WeldingMethodId) - && (x.WeldingLocationId == "ALL" || (location == null || location == "" || x.WeldingLocationId.Contains(location))) - && (steel == null || x.MaterialType.Contains(steel.MaterialType ?? "")) - && (weldTypeGroup == null || x.WeldType.Contains(weldTypeGroup)) - // && (dia == null || x.SizesMin<=dia) - select x; - var cellQ = from x in cellWelderQualifys - where wmeCode2.Contains(x.WeldingMethodId) - && (x.WeldingLocationId == "ALL" || (location == null || location == "" || x.WeldingLocationId.Contains(location))) - && (steel == null || x.MaterialType.Contains(steel.MaterialType ?? "")) - && (weldTypeGroup == null || x.WeldType.Contains(weldTypeGroup)) - // && (dia == null || x.SizesMin <= dia) - select x; - if (floorQ.Count() > 0 && cellQ.Count() > 0) - { - if (weldTypeGroup != "2") // 当为角焊缝时,管径和壁厚不限制 - { - var floorDiaQ = floorQ.Where(x => x.SizesMin <= dia); - var cellDiaQ = cellQ.Where(x => x.SizesMin <= dia); - - if (floorDiaQ.Count() > 0 && cellDiaQ.Count() > 0) - { - var fThick = floorDiaQ.Where(x => x.ThicknessMax == 0); - var cThick = cellDiaQ.Where(x => x.ThicknessMax == 0); - - // 只要有一个不限(为0)就通过 - if (fThick.Count() > 0 || cThick.Count() > 0) - { - isok = true; - } - - else - { - fThicknessMax = floorQ.Max(x => x.ThicknessMax); - cThicknessMax = cellQ.Max(x => x.ThicknessMax); - - if ((fThicknessMax + cThicknessMax) >= sch) - { - isok = true; - } - } - } - } - else - { - isok = true; - } - } - - return isok; - } - #endregion - #region 查找 /// /// 查找未焊接焊口