From a17575585c4620d65feb7eb90bcec65c58d04385 Mon Sep 17 00:00:00 2001 From: wendy <408182087@qq.com> Date: Mon, 16 Jun 2025 14:17:56 +0800 Subject: [PATCH 01/10] =?UTF-8?q?20250616=20=E8=AF=84=E4=BB=B7=E6=8A=A5?= =?UTF-8?q?=E5=91=8A=E5=AF=BC=E5=87=BA=E5=A2=9E=E5=8A=A0=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E6=97=A5=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CreateModel.bat | 2 +- .../Evaluation/PerformanceReport.aspx.cs | 8 +++ .../File/Excel/Performance Report_CN.xlsx | Bin 85552 -> 82777 bytes .../File/Excel/Performance Report_EN.xlsx | Bin 85324 -> 82563 bytes FCL/FineUIPro.Web/FineUIPro.Web.csproj.user | 2 +- FCL/FineUIPro.Web/Web.config | 2 +- FCL/Model/Model.cs | 66 +++++++++++------- FCL/WebApi/WebApi.csproj.user | 2 +- 8 files changed, 54 insertions(+), 28 deletions(-) diff --git a/CreateModel.bat b/CreateModel.bat index 55640a5..115b938 100644 --- a/CreateModel.bat +++ b/CreateModel.bat @@ -27,7 +27,7 @@ REM -------------- @echo. @call "%VS100COMNTOOLS%"vsvars32.bat -SqlMetal /views /server:.\SQL2016 /database:FCLDB /code:%Model_ROOT%\Model.cs /namespace:Model +SqlMetal /views /server:.\SQL2022 /database:FCLDB /code:%Model_ROOT%\Model.cs /namespace:Model @ECHO pause diff --git a/FCL/FineUIPro.Web/Evaluation/PerformanceReport.aspx.cs b/FCL/FineUIPro.Web/Evaluation/PerformanceReport.aspx.cs index 3afe246..d75b85f 100644 --- a/FCL/FineUIPro.Web/Evaluation/PerformanceReport.aspx.cs +++ b/FCL/FineUIPro.Web/Evaluation/PerformanceReport.aspx.cs @@ -2120,6 +2120,8 @@ namespace FineUIPro.Web.Evaluation ws.GetRow(rowIndex).GetCell(24).SetCellValue(p.SES_No); if (ws.GetRow(rowIndex).GetCell(25) == null) ws.GetRow(rowIndex).CreateCell(25); ws.GetRow(rowIndex).GetCell(25).SetCellValue(p.CompletionDate != null ? p.CompletionDate.Value.ToString("yyyy/MM/dd") : ""); + if (ws.GetRow(rowIndex).GetCell(26) == null) ws.GetRow(rowIndex).CreateCell(26); + ws.GetRow(rowIndex).GetCell(26).SetCellValue(p.CreateDate != null ? p.CreateDate.Value.ToString("yyyy/MM/dd") : ""); if ((int)(90 * (rowIndex) / totalNum) > percent) { @@ -2244,6 +2246,8 @@ namespace FineUIPro.Web.Evaluation wsCm.GetRow(rowIndex).GetCell(14).SetCellValue(p.User_Representative); if (wsCm.GetRow(rowIndex).GetCell(15) == null) wsCm.GetRow(rowIndex).CreateCell(15); wsCm.GetRow(rowIndex).GetCell(15).SetCellValue(p.BycDept); + if (wsCm.GetRow(rowIndex).GetCell(16) == null) wsCm.GetRow(rowIndex).CreateCell(16); + wsCm.GetRow(rowIndex).GetCell(16).SetCellValue(p.UploadDate != null ? p.UploadDate.Value.ToString("yyyy/MM/dd") : ""); if ((int)((90 * (rowIndex + punishCount )) / totalNum) > percent) { @@ -2910,6 +2914,8 @@ namespace FineUIPro.Web.Evaluation ws.GetRow(rowIndex).GetCell(24).SetCellValue(p.SES_No); if (ws.GetRow(rowIndex).GetCell(25) == null) ws.GetRow(rowIndex).CreateCell(25); ws.GetRow(rowIndex).GetCell(25).SetCellValue(p.CompletionDate != null ? p.CompletionDate.Value.ToString("yyyy/MM/dd") : ""); + if (ws.GetRow(rowIndex).GetCell(26) == null) ws.GetRow(rowIndex).CreateCell(26); + ws.GetRow(rowIndex).GetCell(26).SetCellValue(p.CreateDate != null ? p.CreateDate.Value.ToString("yyyy/MM/dd") : ""); if ((int)(90 * (rowIndex) / totalNum) > percent) { @@ -3034,6 +3040,8 @@ namespace FineUIPro.Web.Evaluation wsCm.GetRow(rowIndex).GetCell(14).SetCellValue(p.User_Representative); if (wsCm.GetRow(rowIndex).GetCell(15) == null) wsCm.GetRow(rowIndex).CreateCell(15); wsCm.GetRow(rowIndex).GetCell(15).SetCellValue(p.BycDept); + if (wsCm.GetRow(rowIndex).GetCell(16) == null) wsCm.GetRow(rowIndex).CreateCell(16); + wsCm.GetRow(rowIndex).GetCell(16).SetCellValue(p.UploadDate != null ? p.UploadDate.Value.ToString("yyyy/MM/dd") : ""); if ((int)((90 * (rowIndex + punishCount)) / totalNum) > percent) { diff --git a/FCL/FineUIPro.Web/File/Excel/Performance Report_CN.xlsx b/FCL/FineUIPro.Web/File/Excel/Performance Report_CN.xlsx index 66744221f6ef73587737a6917bcd52f61f28d5be..633534f9837556ce273afa2c7755424fc73f43c5 100644 GIT binary patch literal 82777 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

*HJa0x*$QaVv1|^FZ&-0n@Q{*s#M`OXxA1uZcvB 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 literal 85324 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 diff --git a/FCL/FineUIPro.Web/FineUIPro.Web.csproj.user b/FCL/FineUIPro.Web/FineUIPro.Web.csproj.user index fcf3204..accb770 100644 --- a/FCL/FineUIPro.Web/FineUIPro.Web.csproj.user +++ b/FCL/FineUIPro.Web/FineUIPro.Web.csproj.user @@ -2,7 +2,7 @@ ShowAllFiles - Debug|Any CPU + Release|Any CPU true diff --git a/FCL/FineUIPro.Web/Web.config b/FCL/FineUIPro.Web/Web.config index 0d634cd..8701bac 100644 --- a/FCL/FineUIPro.Web/Web.config +++ b/FCL/FineUIPro.Web/Web.config @@ -55,7 +55,7 @@ - + diff --git a/FCL/Model/Model.cs b/FCL/Model/Model.cs index 29b3122..c3980f3 100644 --- a/FCL/Model/Model.cs +++ b/FCL/Model/Model.cs @@ -9916,6 +9916,8 @@ namespace Model private string _BuyerReson; + private string _SSRAdminId; + private System.Nullable _SSRStaratDate; private System.Nullable _SSREndDate; @@ -9928,8 +9930,6 @@ namespace Model private System.Nullable _UserDepEndDate; - private string _SSRAdminId; - private EntityRef _Base_Depart; private EntityRef _Sys_User; @@ -10042,6 +10042,8 @@ namespace Model partial void OnSESReasonChanged(); partial void OnBuyerResonChanging(string value); partial void OnBuyerResonChanged(); + partial void OnSSRAdminIdChanging(string value); + partial void OnSSRAdminIdChanged(); partial void OnSSRStaratDateChanging(System.Nullable value); partial void OnSSRStaratDateChanged(); partial void OnSSREndDateChanging(System.Nullable value); @@ -10054,8 +10056,6 @@ namespace Model partial void OnUserDepStartDateChanged(); partial void OnUserDepEndDateChanging(System.Nullable value); partial void OnUserDepEndDateChanged(); - partial void OnSSRAdminIdChanging(string value); - partial void OnSSRAdminIdChanged(); #endregion public EMC_Punishment() @@ -11094,6 +11094,26 @@ namespace Model } } + [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_SSRAdminId", DbType="NVarChar(50)")] + public string SSRAdminId + { + get + { + return this._SSRAdminId; + } + set + { + if ((this._SSRAdminId != value)) + { + this.OnSSRAdminIdChanging(value); + this.SendPropertyChanging(); + this._SSRAdminId = value; + this.SendPropertyChanged("SSRAdminId"); + this.OnSSRAdminIdChanged(); + } + } + } + [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_SSRStaratDate", DbType="DateTime")] public System.Nullable SSRStaratDate { @@ -11214,26 +11234,6 @@ namespace Model } } - [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_SSRAdminId", DbType="NVarChar(50)")] - public string SSRAdminId - { - get - { - return this._SSRAdminId; - } - set - { - if ((this._SSRAdminId != value)) - { - this.OnSSRAdminIdChanging(value); - this.SendPropertyChanging(); - this._SSRAdminId = value; - this.SendPropertyChanged("SSRAdminId"); - this.OnSSRAdminIdChanged(); - } - } - } - [global::System.Data.Linq.Mapping.AssociationAttribute(Name="FK_EMC_Punishment_Base_Depart", Storage="_Base_Depart", ThisKey="BYC_RU", OtherKey="DepartId", IsForeignKey=true)] public Base_Depart Base_Depart { @@ -33778,6 +33778,8 @@ namespace Model private string _FileType; + private System.Nullable _UploadDate; + public View_FC_ContractManagement() { } @@ -34037,6 +34039,22 @@ namespace Model } } } + + [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UploadDate", DbType="DateTime")] + public System.Nullable UploadDate + { + get + { + return this._UploadDate; + } + set + { + if ((this._UploadDate != value)) + { + this._UploadDate = value; + } + } + } } [global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.View_FC_ContractManagementLists")] diff --git a/FCL/WebApi/WebApi.csproj.user b/FCL/WebApi/WebApi.csproj.user index ca0d73e..643f3e5 100644 --- a/FCL/WebApi/WebApi.csproj.user +++ b/FCL/WebApi/WebApi.csproj.user @@ -8,7 +8,7 @@ - Debug|Any CPU + Release|Any CPU From c10314d30127be035b6d84ea05ae4a314409ab7e Mon Sep 17 00:00:00 2001 From: wendy <408182087@qq.com> Date: Thu, 10 Jul 2025 14:10:20 +0800 Subject: [PATCH 02/10] =?UTF-8?q?20250710=20=E4=BF=AE=E6=94=B9=E8=B4=B9?= =?UTF-8?q?=E7=94=A8=E5=A2=9E=E8=A1=A5=E5=9B=9E=E5=A1=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FCL/FineUIPro.Web/SES/SESRelatedDataContractManage2.aspx.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FCL/FineUIPro.Web/SES/SESRelatedDataContractManage2.aspx.cs b/FCL/FineUIPro.Web/SES/SESRelatedDataContractManage2.aspx.cs index 4077bce..f09ee10 100644 --- a/FCL/FineUIPro.Web/SES/SESRelatedDataContractManage2.aspx.cs +++ b/FCL/FineUIPro.Web/SES/SESRelatedDataContractManage2.aspx.cs @@ -238,7 +238,7 @@ namespace FineUIPro.Web.SES { totalSupp += item.SupplementedBudget; } - this.txtTotalBudget.Text = (Funs.GetNewIntOrZero(txtInitialBudget.Text.Trim()) + totalSupp + Funs.GetNewDecimalOrZero(this.txtSupplementedBudget.Text.Trim())).ToString(); + this.txtTotalBudget.Text = (Funs.GetNewDecimalOrZero(txtInitialBudget.Text.Trim()) + totalSupp + Funs.GetNewDecimalOrZero(this.txtSupplementedBudget.Text.Trim())).ToString(); } } } From 50ddcb8dcf630a263a0a25a0bd6d6de09a27600b Mon Sep 17 00:00:00 2001 From: wendy <408182087@qq.com> Date: Tue, 29 Jul 2025 09:36:24 +0800 Subject: [PATCH 03/10] =?UTF-8?q?20250729=20=E6=96=B0=E5=A2=9E=E5=90=88?= =?UTF-8?q?=E5=90=8C=E7=BB=A9=E6=95=88=E8=BF=9D=E8=A7=84=E5=A4=84=E7=90=86?= =?UTF-8?q?=E9=82=AE=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FCL/BLL/SES/SESRelatedDataService.cs | 9 +- FCL/BLL/SysManage/Sys_UserService.cs | 2 +- FCL/FineUIPro.Web/Global.asax.cs | 171 +++++++++++++++++- FCL/FineUIPro.Web/SES/CSafePunishEdit.aspx.cs | 20 +- 4 files changed, 184 insertions(+), 18 deletions(-) diff --git a/FCL/BLL/SES/SESRelatedDataService.cs b/FCL/BLL/SES/SESRelatedDataService.cs index 39734da..68d733f 100644 --- a/FCL/BLL/SES/SESRelatedDataService.cs +++ b/FCL/BLL/SES/SESRelatedDataService.cs @@ -226,7 +226,7 @@ namespace BLL } ///

- /// 根据承包商ID获取未关闭的FO + /// 根据承包商ID获取未关闭的且有效的及过期一年合同 /// /// /// @@ -235,7 +235,12 @@ namespace BLL { dropName.DataValueField = "FO_NO"; dropName.DataTextField = "FO_NO"; - dropName.DataSource = (from x in Funs.DB.FC_SESRelatedData where x.Contractor == ContractorId && x.FC_Status != "Closed" orderby x.FO_NO select x.FO_NO).Distinct(); + dropName.DataSource = (from x in Funs.DB.FC_SESRelatedData + where x.Contractor == ContractorId + && x.FC_Status != "Closed" + && x.Expire_Date.Value.AddYears(1) >= DateTime.Now + orderby x.FO_NO + select x.FO_NO).Distinct(); dropName.DataBind(); if (isShowPlease) { diff --git a/FCL/BLL/SysManage/Sys_UserService.cs b/FCL/BLL/SysManage/Sys_UserService.cs index 9a3bbcb..6ea4f4a 100644 --- a/FCL/BLL/SysManage/Sys_UserService.cs +++ b/FCL/BLL/SysManage/Sys_UserService.cs @@ -350,7 +350,7 @@ namespace BLL /// public static List GetUserViewList() { - return (from x in Funs.DB.View_Sys_Users where x.IsPost == true orderby x.DepartName, x.UserName select x).ToList(); + return (from x in Funs.DB.View_Sys_Users orderby x.DepartName, x.UserName select x).ToList(); } /// diff --git a/FCL/FineUIPro.Web/Global.asax.cs b/FCL/FineUIPro.Web/Global.asax.cs index ed1ee52..6a55403 100644 --- a/FCL/FineUIPro.Web/Global.asax.cs +++ b/FCL/FineUIPro.Web/Global.asax.cs @@ -15,6 +15,7 @@ using FineUIPro.Web.common; using Model; using NPOI.SS.Formula.Functions; + using Newtonsoft.Json; public class Global : System.Web.HttpApplication { @@ -25,7 +26,7 @@ protected void Application_Start(object sender, EventArgs e) { - + Application["OnlineUserCount"] = 0; try { @@ -55,7 +56,7 @@ aTimer.Interval = 1000 * 60 * 60; aTimer.Enabled = true; aTimer.Start(); - + } //自动填写评价 if (DateTime.Now.Day == 12) @@ -66,7 +67,7 @@ aTimer.Interval = 1800000; aTimer.Enabled = true; aTimer.Start(); - + } // 过期提示 @@ -83,7 +84,7 @@ aTimer.Interval = 1000 * 60 * 60; aTimer.Enabled = true; aTimer.Start(); - + } // 框架承包商评估表的填写邮件通知 @@ -104,7 +105,7 @@ fcTimer.Elapsed += new System.Timers.ElapsedEventHandler(FC_AutoStatus); //120分钟执行一次 fcTimer.Interval = 1000 * 60 * 60; - fcTimer.Enabled = true; + fcTimer.Enabled = true; fcTimer.Start(); } @@ -187,6 +188,17 @@ fcTimer.Enabled = true; fcTimer.Start(); } + + //合同绩效违规处理 + if (DateTime.Now.Hour == 10) + { + System.Timers.Timer fcTimer = new System.Timers.Timer(); + fcTimer.Elapsed += new System.Timers.ElapsedEventHandler(queTimer_ViolationHandling); + //1小时执行一次 + fcTimer.Interval = 1000 * 60 * 60; + fcTimer.Enabled = true; + fcTimer.Start(); + } } private void queTimer_AutoSendOne(object sender, System.Timers.ElapsedEventArgs e) @@ -1182,6 +1194,7 @@ } } + #region 自动填写评价 /// /// 自动填写评价 /// @@ -1360,6 +1373,7 @@ Funs.DB.SubmitChanges(); } } + #endregion private void FC_AutoStatus(object sender, System.Timers.ElapsedEventArgs e) { @@ -1577,6 +1591,153 @@ } #endregion + #region 合同绩效违规处理 + /// + /// 合同绩效规格处理 + /// + /// + /// + private void queTimer_ViolationHandling(object sender, System.Timers.ElapsedEventArgs e) + { + var foData = (from x in Funs.DB.FC_SESRelatedData where x.FC_Status != "Closed" select x).ToList(); + if (foData.Count() > 0) + { + foreach (var fo in foData) + { + string Contract_Admin = BLL.Sys_UserService.GetUserNameByUserId(fo.Contract_Admin);//合同管理员 + string Contractor = BLL.ContractorService.GetContractorById(fo.Contractor).ContractorCN;//承包商 + List userList = new List(); + EmailPop pops = Funs.DB.EmailPop.FirstOrDefault(x => x.EmailID == BLL.Const.EmailPopId); + if (pops == null) + { + return; + } + string[] mailTo = null; + string mailSubject = string.Empty; + string mailBody = string.Empty; + string mailPriority = string.Empty; + string[] mailCC = null; + string resultMessage = ""; + string userName = string.Empty; + + string violation_type = string.Empty;//违规类型 + string consequence_action = string.Empty;//处理结果 + //零容忍违章 + var punishments = (from x in Funs.DB.EMC_Punishment where x.FO_NO == fo.FO_NO && x.Flag == "1" && x.ViolationDegree == "3" select x).ToList(); + if (punishments.Count == 1) //一次零容忍违章:约谈 + { + violation_type = "一次零容忍违章"; + consequence_action = "约谈"; + } + else if (punishments.Count == 3)//三次零容忍违章:NCR + { + violation_type = "三次零容忍违章"; + consequence_action = "NCR"; + } + + DateTime startDate = DateTime.Now.AddMonths(-23); + DateTime startTime = DateTime.Parse(startDate.Year + "-" + startDate.Month + "-01"); + DateTime endTime = DateTime.Parse(DateTime.Now.Year + "-" + DateTime.Now.Month + "-13"); + List yearToDateParam = new List(); + yearToDateParam.Add(new SqlParameter("@StartTime", startTime)); + yearToDateParam.Add(new SqlParameter("@EndTime", endTime)); + yearToDateParam.Add(new SqlParameter("@FoNo", fo.FO_NO)); + SqlParameter[] yearToDateParList = yearToDateParam.ToArray(); + var sesDataTable = SQLHelper.GetDataTableRunProc("Sp_ContractorEvaluation", yearToDateParList); + + int s = 0; + for (int i = 0; i < sesDataTable.Rows.Count; i++) + { + decimal sumScore = Convert.ToDecimal(sesDataTable.Rows[i]["SumScore"]); + if (sumScore < 60) + { + s++; + } + } + if (s >= 3) + { + violation_type = "累计三次月度评估低于60分"; + consequence_action = "不得参与下轮合同"; + } + else + { + decimal? score = (from x in Funs.DB.FC_Score where x.Contract_No == fo.FO_NO select x).Sum(x => x.Score1 + x.Score2 + x.Score3 + x.Score4 + x.Score5 + x.Score6); + if (s == 2 || score < 12) + { + violation_type = "累计两次月度评估低于60分或安全评估低于12分"; + consequence_action = "约谈"; + } + } + + var ncrs = (from x in Funs.DB.FC_ContractManagement where x.FC_ID == fo.ID && x.FileTypeId == "6" select x).ToList(); + if (ncrs.Count == 3) + { + violation_type = "三次NCR"; + consequence_action = "提前终止合同,不得参与下轮合同"; + } + + if (!string.IsNullOrEmpty(violation_type) && !string.IsNullOrEmpty(consequence_action)) + { + //发送对应合同管理员 + var contractAdmin = from x in Funs.DB.Sys_User where x.UserId == fo.Contract_Admin && x.Email != null && x.Email != "" select x; + if (contractAdmin.Count() > 0) + { + mailTo = contractAdmin.Select(x => x.Email).ToArray(); + userName = contractAdmin.First().UserName; + } + //抄送 + var cc = from x in Funs.DB.Sys_User + join y in Funs.DB.Sys_Role on x.RoleId equals y.RoleId + where x.Email != null && x.Email != "" + && (y.RoleName == "CTE/D Manager" || y.RoleName == "Cost Engineer Leader" || y.RoleName == "Contractor_Leader") + select x; + if (cc.Count() > 0) + { + foreach (var c in cc) + { + userList.Add(c); + } + } + mailCC = userList.Select(x => x.Email).ToArray(); + + + if (mailTo == null || mailTo.Length == 0) return; + var email = Funs.DB.SendEmail.Where(p => p.EmailStatus == "发送成功" + && p.EmailTile.Contains("合同绩效违规处理") + && p.EmailTile.Contains(fo.FO_NO) && mailTo.Contains(p.EmailURL)); + if (email.Count() > 0) + { + var emailurl = email.Select(p => p.EmailURL).ToList(); + mailTo = mailTo.Where(p => !emailurl.Contains(p)).ToArray(); + } + var EmailTemplate = Funs.DB.SendEmailTemplate.Where(x => x.EmailName.Contains("合同绩效违规处理通知")); + if (EmailTemplate.Count() > 0) + { + string templetpath = EmailTemplate.Select(p => p.EmailContext).FirstOrDefault(); + NameValueCollection myCol = new NameValueCollection(); + myCol.Add("ContractAdmin", Contract_Admin);//合同管理员 + myCol.Add("contract_number", fo.FO_NO);//合同号 + myCol.Add("Contractor_name", Contractor);//承包商名称 + myCol.Add("Contractor_contact", fo.MainHead);//承包商负责人 + myCol.Add("violation type", violation_type);//违规类型 + myCol.Add("consequence_action", consequence_action);//处理后果 + + mailBody = TemplateHelper.BulidByFile2(templetpath, myCol); + + string mailName = EmailTemplate.Select(p => p.EmailName).FirstOrDefault(); + NameValueCollection myCol1 = new NameValueCollection(); + myCol1.Add("contract_number", fo.FO_NO); + myCol1.Add("violation type", violation_type); + mailSubject = TemplateHelper.BulidByFile2(mailName, myCol1); + + MailHelper.SendNetMail2(pops, pops.EmailYx, mailTo, mailSubject, mailBody, mailPriority, mailCC, "一次", out resultMessage); + } + } + } + } + } + #endregion + private void Sync_HR(object sender, System.Timers.ElapsedEventArgs e) { //调用接口 diff --git a/FCL/FineUIPro.Web/SES/CSafePunishEdit.aspx.cs b/FCL/FineUIPro.Web/SES/CSafePunishEdit.aspx.cs index 03fe229..26ca83b 100644 --- a/FCL/FineUIPro.Web/SES/CSafePunishEdit.aspx.cs +++ b/FCL/FineUIPro.Web/SES/CSafePunishEdit.aspx.cs @@ -55,16 +55,16 @@ namespace FineUIPro.Web.SES } // BLL.SESRelatedDataService.InitFONoDropDownList(this.drpFO_No, true);//合同号 - //BLL.ContractorService.InitDropDownList(drpContractor, true); //承包商; - var contractorLists = from x in Funs.DB.FC_SESRelatedData - join y in Funs.DB.Base_Contractor on x.Contractor equals y.ContractorId - where x.Expire_Date.Value.AddYears(1) >= DateTime.Now - select new { y.ContractorId, Contractor = y.Contractor + y.ContractorCN }; - this.drpContractor.DataTextField = "Contractor"; - this.drpContractor.DataValueField = "ContractorId"; - this.drpContractor.DataSource = contractorLists.Distinct(); - this.drpContractor.DataBind(); - Funs.FineUIPleaseSelect(this.drpContractor); + BLL.ContractorService.InitDropDownList(drpContractor, true); //承包商; + //var contractorLists = from x in Funs.DB.FC_SESRelatedData + // join y in Funs.DB.Base_Contractor on x.Contractor equals y.ContractorId + // where x.Expire_Date.Value.AddYears(1) >= DateTime.Now + // select new { y.ContractorId, Contractor = y.Contractor + y.ContractorCN }; + //this.drpContractor.DataTextField = "Contractor"; + //this.drpContractor.DataValueField = "ContractorId"; + //this.drpContractor.DataSource = contractorLists.Distinct(); + //this.drpContractor.DataBind(); + //Funs.FineUIPleaseSelect(this.drpContractor); BLL.DepartService.InitDepartToWhere(this.drpBYC_RU, true);//BYC负责部门 BLL.Sys_UserService.InitUserDropDownList(this.drpViolationInspector, true);//违章检查人 From 61ca5d213c112f968cca3ce98b61926d8c67bb46 Mon Sep 17 00:00:00 2001 From: wendy <408182087@qq.com> Date: Tue, 12 Aug 2025 17:05:47 +0800 Subject: [PATCH 04/10] =?UTF-8?q?20250812=20=E4=BF=AE=E6=94=B9=E8=B4=A8?= =?UTF-8?q?=E9=87=8F=E4=BA=8B=E9=A1=B9=E6=8A=A5=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FCL/BLL/Common/Const.cs | 10 + FCL/BLL/SES/PunishmentService.cs | 1 + .../IncidentInvestigation.aspx.cs | 60 +- .../IncidentInvestigationEdit.aspx | 42 +- .../IncidentInvestigationEdit.aspx.cs | 596 ++++++++++++++---- ...IncidentInvestigationEdit.aspx.designer.cs | 126 ++++ FCL/FineUIPro.Web/Global.asax.cs | 145 ++++- FCL/Model/Model.cs | 122 +++- 8 files changed, 941 insertions(+), 161 deletions(-) diff --git a/FCL/BLL/Common/Const.cs b/FCL/BLL/Common/Const.cs index fc72436..c754923 100644 --- a/FCL/BLL/Common/Const.cs +++ b/FCL/BLL/Common/Const.cs @@ -57,6 +57,11 @@ namespace BLL /// public static string Role_CommonUsers = "bdb8c4fe-5082-4ce0-af5e-70f39f50ea41"; + /// + /// 承包商管理角色ID + /// + public static string Role_Contractor_LeaderId = "48b2376d-421f-4b12-b5be-c0c538bfe3e9"; + /// /// 邮件配置Id /// @@ -263,6 +268,11 @@ namespace BLL public const string BtnConTab13View = "承包商View"; #endregion + /// + /// 质量事件报告修改全部 + /// + public const string BtnModifyAll = "Modify All"; + #endregion #region 初始化上传路径 diff --git a/FCL/BLL/SES/PunishmentService.cs b/FCL/BLL/SES/PunishmentService.cs index c56d9e1..c2452c6 100644 --- a/FCL/BLL/SES/PunishmentService.cs +++ b/FCL/BLL/SES/PunishmentService.cs @@ -130,6 +130,7 @@ namespace BLL newPunishment.MainCoordinatorEndDate = punishment.MainCoordinatorEndDate; newPunishment.UserDepStartDate = punishment.UserDepStartDate; newPunishment.UserDepEndDate = punishment.UserDepEndDate; + newPunishment.Pause = punishment.Pause; Funs.DB.SubmitChanges(); } diff --git a/FCL/FineUIPro.Web/ContractorQuality/IncidentInvestigation.aspx.cs b/FCL/FineUIPro.Web/ContractorQuality/IncidentInvestigation.aspx.cs index 59dec68..17bea4b 100644 --- a/FCL/FineUIPro.Web/ContractorQuality/IncidentInvestigation.aspx.cs +++ b/FCL/FineUIPro.Web/ContractorQuality/IncidentInvestigation.aspx.cs @@ -50,6 +50,7 @@ namespace FineUIPro.Web.ContractorQuality left join Sys_User as u on u.UserId = p.Violation_Inspector left join Base_Depart as d on d.DepartId = u.DepartId left join Sys_User as du on du.UserId = d.DepartLeader + left join FC_SESRelatedData fo on fo.FO_NO = p.FO_NO where Flag='2' "; List listStr = new List(); var role = BLL.Sys_RoleService.GetRole(CurrUser.RoleId); @@ -72,7 +73,7 @@ namespace FineUIPro.Web.ContractorQuality var user = BLL.Sys_UserService.GetUsersByUserId(this.CurrUser.UserId); if (user != null) { - strSql += " and p.PunishmentId in (select PunishmentId from EMC_PunishmentAudit where (AuditMan='" + user.DepartId + "' or AuditMan='" + this.CurrUser.UserId + "') and AuditDate is null)"; + strSql += " and p.PunishmentId in (select PunishmentId from EMC_PunishmentAudit where ((AuditMan='" + user.DepartId + "' or AuditMan='" + this.CurrUser.UserId + "') and AuditDate is null) or (p.States='3' and p.MainCoordinatorEndDate is not null and p.UserDepStartDate is null and fo.Main_Coordinator='" + this.CurrUser.UserId + "'))"; } } } @@ -207,14 +208,32 @@ namespace FineUIPro.Web.ContractorQuality var user = BLL.Sys_UserService.GetUsersByUserId(this.CurrUser.UserId); if (user != null) { - if (pun.IsFrame == true && user.DepartId == pun.UserDep) + if ((pun.MainCoordinatorEndDate.HasValue && pun.MainCoordinatorEndDate.Value.AddDays(3) < DateTime.Now) || pun.UserDepStartDate.HasValue) { - PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("IncidentInvestigationEdit.aspx?punishmentId={0}", rowID, "编辑 - "))); + if (pun.IsFrame == true && user.DepartId == pun.UserDep) + { + PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("IncidentInvestigationEdit.aspx?punishmentId={0}", rowID, "编辑 - "))); + } + else + { + var depart = BLL.DepartService.GetDepartNameById(pun.UserDep); + ShowAlert("您不是" + depart + "部门用户,不能操作!", MessageBoxIcon.Warning); + } } else { - var depart = BLL.DepartService.GetDepartNameById(pun.UserDep); - ShowAlert("您不是" + depart + "部门用户,不能操作!", MessageBoxIcon.Warning); + Model.FC_SESRelatedData fc = BLL.SESRelatedDataService.GetSESRelatedDataByFoNo(pun.FO_NO); + if (fc != null) + { + if (this.CurrUser.UserId == fc.Main_Coordinator || this.CurrUser.RoleId == BLL.Const.Role_Contractor_LeaderId)//当前用户等于主协调员 + { + PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("IncidentInvestigationEdit.aspx?punishmentId={0}", rowID, "编辑 - "))); + } + else + { + ShowAlert("您不是" + BLL.Sys_UserService.GetUserNameByUserId(fc.Main_Coordinator) + ",不能操作!", MessageBoxIcon.Warning); + } + } } } } @@ -614,6 +633,8 @@ namespace FineUIPro.Web.ContractorQuality } #endregion + #region 格式化字符串 + #region 审批人 /// /// 审批人 /// @@ -655,7 +676,19 @@ namespace FineUIPro.Web.ContractorQuality } else if (pun.States == "3" && pun.IsFrame == true) { - name = BLL.DepartService.GetDepartNameById(pun.UserDep); + //承包商联系人有异议或3天未有动作 + if ((pun.MainCoordinatorEndDate.HasValue && pun.MainCoordinatorEndDate.Value.AddDays(3) < DateTime.Now) || pun.UserDepStartDate.HasValue) + { + name = BLL.DepartService.GetDepartNameById(pun.UserDep); + } + else + { + Model.FC_SESRelatedData fc = BLL.SESRelatedDataService.GetSESRelatedDataByFoNo(pun.FO_NO); + if (fc != null) + { + name = BLL.Sys_UserService.GetUserNameByUserId(fc.Main_Coordinator); + } + } } else if (pun.States == "4" && pun.IsFrame == true) { @@ -669,7 +702,9 @@ namespace FineUIPro.Web.ContractorQuality } return name; } + #endregion + #region 状态 /// /// 当期状态 /// @@ -697,13 +732,23 @@ namespace FineUIPro.Web.ContractorQuality } else { - s = "进行中"; + if (pun.Pause == true) + { + s = "已暂停"; + } + else + { + s = "进行中"; + } } } } return s; } + #endregion + #endregion + #region 筛选 /// /// 筛选 /// @@ -713,5 +758,6 @@ namespace FineUIPro.Web.ContractorQuality { BindGrid(); } + #endregion } } \ No newline at end of file diff --git a/FCL/FineUIPro.Web/ContractorQuality/IncidentInvestigationEdit.aspx b/FCL/FineUIPro.Web/ContractorQuality/IncidentInvestigationEdit.aspx index ce4d93e..0fe1dca 100644 --- a/FCL/FineUIPro.Web/ContractorQuality/IncidentInvestigationEdit.aspx +++ b/FCL/FineUIPro.Web/ContractorQuality/IncidentInvestigationEdit.aspx @@ -177,8 +177,8 @@ - - + + @@ -246,7 +246,8 @@ - + + @@ -273,7 +274,7 @@ - + @@ -313,10 +314,41 @@ + + + + + + @@ -331,6 +363,8 @@ + + diff --git a/FCL/FineUIPro.Web/ContractorQuality/IncidentInvestigationEdit.aspx.cs b/FCL/FineUIPro.Web/ContractorQuality/IncidentInvestigationEdit.aspx.cs index 6b68960..4cb021c 100644 --- a/FCL/FineUIPro.Web/ContractorQuality/IncidentInvestigationEdit.aspx.cs +++ b/FCL/FineUIPro.Web/ContractorQuality/IncidentInvestigationEdit.aspx.cs @@ -1,7 +1,9 @@ using BLL; using BLL.Common; +using NPOI.POIFS.Crypt.Dsig; using Org.BouncyCastle.Bcpg.OpenPgp; using System; +using System.Collections.Generic; using System.Collections.Specialized; using System.Drawing; using System.Linq; @@ -69,7 +71,6 @@ namespace FineUIPro.Web.ContractorQuality this.PunishmentId = Request.Params["punishmentId"]; if (!string.IsNullOrEmpty(this.PunishmentId)) { - var att1 = from x in Funs.DB.AttachFile where x.ToKeyId == this.PunishmentId + "#1" select x; if (att1.Count() == 0) { @@ -107,6 +108,9 @@ namespace FineUIPro.Web.ContractorQuality GroupPanel3.Hidden = false; GroupPanel4.Hidden = false; GroupPanel5.Hidden = false; + frModifyDef.Hidden = false; + frModifyDefUrl.Hidden = false; + //frPassResult.Hidden = false; var audit = BLL.PunishmentAuditService.GetAuditBypunishmentIdAndAuditMan(this.PunishmentId, this.CurrUser.UserId); if (pun.IsPass == false && audit != null) @@ -308,15 +312,44 @@ namespace FineUIPro.Web.ContractorQuality } else if (pun.States == "3" && pun.IsFrame == true)//用户部门填写 { - //GroupPanel1.Enabled = false; - GroupPanel1Enabled(); GroupPanel2.Hidden = false; - GroupPanel2.Enabled = false; - //GroupPanel3.Enabled = false; - GroupPanel3Enabled(); GroupPanel3.Hidden = false; GroupPanel4.Hidden = false; this.btnSbumit.Hidden = false; + //用户部门操作前主协调员可暂停 + Model.FC_SESRelatedData fc = BLL.SESRelatedDataService.GetSESRelatedDataByFoNo(pun.FO_NO); + if (fc != null) + { + if (this.CurrUser.UserId == fc.Main_Coordinator)//当前用户等于主协调员 + { + Panel4.Hidden = false; + if (pun.MainCoordinatorEndDate.HasValue && pun.MainCoordinatorEndDate.Value.AddDays(3) >= DateTime.Now) + { + this.btnPause.Hidden = false; + //this.btnSave.Hidden = true; + //this.btnSbumit.Hidden = true; + this.GroupPanel4.Hidden = true; + } + if (pun.Pause == true) + { + this.btnPause.Hidden = true; + this.frPassResult.Hidden = false; + } + } + // 承包商管理角色可编辑提交后的申报人填写、SSR填写、主协调员填写内容 + if (this.CurrUser.RoleId == BLL.Const.Role_Contractor_LeaderId) + { + GroupPanel1.Enabled = true; + GroupPanel2.Enabled = true; + GroupPanel3.Enabled = true; + GroupPanel4.Hidden = true; + frModifyDef.Hidden = false; + frModifyDefUrl.Hidden = false; + this.btnSave.Hidden = true; + this.btnSbumit.Hidden = true; + this.btnSureModify.Hidden = false; + } + } } else if (pun.States == "4" && pun.IsFrame == true)//合同管理员填写 { @@ -490,7 +523,9 @@ namespace FineUIPro.Web.ContractorQuality this.txtIndividualSESReason.Text = pun.IndividualSESReason; this.txtSESReson.Text = pun.SESReason; this.txtBuyerReson.Text = pun.BuyerReson; - #endregion + this.hdModifyContent.Text = pun.ModifyContent; + this.txtModifyDef.Text = pun.ModifyContent; + #endregion } } else @@ -500,7 +535,7 @@ namespace FineUIPro.Web.ContractorQuality } } } - + #region 不可编辑 /// /// 申报人填写不可编辑 /// @@ -551,6 +586,7 @@ namespace FineUIPro.Web.ContractorQuality Label10.Enabled = false; } #endregion + #endregion #region 保存、提交 /// @@ -577,6 +613,7 @@ namespace FineUIPro.Web.ContractorQuality { if (!string.IsNullOrEmpty(this.PunishmentId)) { + List emialLists = new List(); //承包商联系人Email var pun = BLL.PunishmentService.GetPunishmentById(this.PunishmentId); if (pun != null) { @@ -596,6 +633,10 @@ namespace FineUIPro.Web.ContractorQuality { pun.ContractAdmin = this.drpContractAdmin.SelectedValue; } + if (!string.IsNullOrEmpty(fc.Email)) + { + emialLists.Add(fc.Email);//承包商联系人Email + } } else { @@ -759,7 +800,7 @@ namespace FineUIPro.Web.ContractorQuality { pun.States = "3";//主协调员提交 pun.MainCoordinatorEndDate = DateTime.Now;//主协调员审批时间 - pun.UserDepStartDate = DateTime.Now;//用户部门审批到达时间 + //pun.UserDepStartDate = DateTime.Now;//用户部门审批到达时间 var updateAudit = BLL.PunishmentAuditService.GetAuditByAuditMan(this.PunishmentId, this.CurrUser.UserId); if (updateAudit != null) @@ -769,14 +810,14 @@ namespace FineUIPro.Web.ContractorQuality updateAudit.IsPass = true; BLL.PunishmentAuditService.UpdatePunishmentAudit(updateAudit); } + //通知承包商联系人,有3天反馈时间,若3天后未处理,进入下一审批,否则暂停重新评估 + //Model.EMC_PunishmentAudit audit = new Model.EMC_PunishmentAudit(); + //audit.AuditId = SQLHelper.GetNewID(typeof(Model.EMC_PunishmentAudit)); + //audit.PunishmentId = this.PunishmentId; + //audit.AuditMan = pun.UserDep; + //BLL.PunishmentAuditService.AddPunishmentAudit(audit); - Model.EMC_PunishmentAudit audit = new Model.EMC_PunishmentAudit(); - audit.AuditId = SQLHelper.GetNewID(typeof(Model.EMC_PunishmentAudit)); - audit.PunishmentId = this.PunishmentId; - audit.AuditMan = pun.UserDep; - BLL.PunishmentAuditService.AddPunishmentAudit(audit); - - #region 主协调员审批通过邮件:发送给部门经理,抄送流程经办人 + #region 主协调员通过-通知承包商联系人 Model.EmailPop pops = Funs.DB.EmailPop.FirstOrDefault(x => x.EmailID == BLL.Const.EmailPopId); if (pops == null) { @@ -786,44 +827,76 @@ namespace FineUIPro.Web.ContractorQuality string[] mailCC = null; string resultMessage = ""; - var emailTemplate = Funs.DB.SendEmailTemplate.Where(x => x.EmailName.Contains("主协调员填写完成后审批通过通知")); + var emailTemplate = Funs.DB.SendEmailTemplate.Where(x => x.EmailName.Contains("承包商联系人通知")); if (emailTemplate.Count() > 0) { - string departLeader = string.Empty; - var depart = BLL.DepartService.GetDepartById(drpUserDep.SelectedValue); - if (depart != null) - { - departLeader = depart.DepartLeader; - } - if (!string.IsNullOrEmpty(departLeader)) - { - var userTo = from x in Funs.DB.Sys_User - where x.UserId.Contains(departLeader) && x.Email != null && x.Email != "" - select x; - if (userTo != null) - { - mailTo = userTo.Select(x => x.Email).ToArray(); - } - } - - var userCc = from x in Funs.DB.View_EMail_UserTo - where ((x.PunishmentId == this.PunishmentId && x.AuditDate != null) || x.UserId.Contains(pun.Violation_Inspector)) - && x.Email != null && x.Email != "" - select x; - if (userCc != null) - { - mailCC = userCc.Select(x => x.Email).Distinct().ToArray(); - } + //var userTo = from x in Funs.DB.Sys_User + // where x.RoleId == BLL.Const.Role_Contractor_LeaderId && x.Email != null && x.Email != "" + // select x; + //if (userTo != null) + //{ + // mailTo = userTo.Select(x => x.Email).ToArray(); + //} + mailTo = emialLists.ToArray(); if (mailTo.Length > 0) { NameValueCollection myPram = new NameValueCollection(); myPram.Add("发现日期", pun.PunishDate != null ? pun.PunishDate.Value.ToString("yyyy-MM-dd") : ""); myPram.Add("位置", pun.Location); myPram.Add("质量事件描述", pun.Description); - MailHelper.SendPunishSesMail(pops, myPram, "主协调员填写完成后审批通过通知", mailTo, mailCC, out resultMessage); + MailHelper.SendPunishSesMail(pops, myPram, "承包商联系人通知", mailTo, mailCC, out resultMessage); } } #endregion + + #region 主协调员审批通过邮件:发送给部门经理,抄送流程经办人 + //Model.EmailPop pops = Funs.DB.EmailPop.FirstOrDefault(x => x.EmailID == BLL.Const.EmailPopId); + //if (pops == null) + //{ + // return; + //} + //string[] mailTo = null; + //string[] mailCC = null; + //string resultMessage = ""; + + //var emailTemplate = Funs.DB.SendEmailTemplate.Where(x => x.EmailName.Contains("主协调员填写完成后审批通过通知")); + //if (emailTemplate.Count() > 0) + //{ + // string departLeader = string.Empty; + // var depart = BLL.DepartService.GetDepartById(drpUserDep.SelectedValue); + // if (depart != null) + // { + // departLeader = depart.DepartLeader; + // } + // if (!string.IsNullOrEmpty(departLeader)) + // { + // var userTo = from x in Funs.DB.Sys_User + // where x.UserId.Contains(departLeader) && x.Email != null && x.Email != "" + // select x; + // if (userTo != null) + // { + // mailTo = userTo.Select(x => x.Email).ToArray(); + // } + // } + + // var userCc = from x in Funs.DB.View_EMail_UserTo + // where ((x.PunishmentId == this.PunishmentId && x.AuditDate != null) || x.UserId.Contains(pun.Violation_Inspector)) + // && x.Email != null && x.Email != "" + // select x; + // if (userCc != null) + // { + // mailCC = userCc.Select(x => x.Email).Distinct().ToArray(); + // } + // if (mailTo.Length > 0) + // { + // NameValueCollection myPram = new NameValueCollection(); + // myPram.Add("发现日期", pun.PunishDate != null ? pun.PunishDate.Value.ToString("yyyy-MM-dd") : ""); + // myPram.Add("位置", pun.Location); + // myPram.Add("质量事件描述", pun.Description); + // MailHelper.SendPunishSesMail(pops, myPram, "主协调员填写完成后审批通过通知", mailTo, mailCC, out resultMessage); + // } + //} + #endregion } } else //非框架合同 @@ -974,87 +1047,194 @@ namespace FineUIPro.Web.ContractorQuality } else if (pun.States == "3")//用户部门提交 { - if (!string.IsNullOrEmpty(this.txtIndividualSES.Text.Trim())) + var user = BLL.Sys_UserService.GetUsersByUserId(this.CurrUser.UserId); + if (user != null) { - pun.ViolationRelatedSes = this.txtIndividualSES.Text.Trim(); - } - else - { - if (!string.IsNullOrEmpty(this.txtIndividualSESReason.Text.Trim())) + if (user.DepartId == pun.UserDep) { - pun.IndividualSESReason = this.txtIndividualSESReason.Text.Trim(); + if (!string.IsNullOrEmpty(this.txtIndividualSES.Text.Trim())) + { + pun.ViolationRelatedSes = this.txtIndividualSES.Text.Trim(); + } + else + { + if (!string.IsNullOrEmpty(this.txtIndividualSESReason.Text.Trim())) + { + pun.IndividualSESReason = this.txtIndividualSESReason.Text.Trim(); + } + else + { + Alert.ShowInTop("如不填写,请描述原因!", MessageBoxIcon.Warning); + return; + } + } + if (type == BLL.Const.BtnSubmit) + { + pun.States = "4";//用户部门提交 + pun.UserDepEndDate = DateTime.Now;//用户部门审批时间 + + var u = BLL.Sys_UserService.GetUsersByUserId(this.CurrUser.UserId); + if (u != null) + { + var updateAudit = BLL.PunishmentAuditService.GetAuditByAuditMan(this.PunishmentId, u.DepartId); + if (updateAudit != null) + { + updateAudit.AuditMan = this.CurrUser.UserId; + updateAudit.AuditDate = DateTime.Now; + updateAudit.IsPass = true; + BLL.PunishmentAuditService.UpdatePunishmentAudit(updateAudit); + } + } + + Model.EMC_PunishmentAudit audit = new Model.EMC_PunishmentAudit(); + audit.AuditId = SQLHelper.GetNewID(typeof(Model.EMC_PunishmentAudit)); + audit.PunishmentId = this.PunishmentId; + audit.AuditMan = pun.ContractAdmin; + BLL.PunishmentAuditService.AddPunishmentAudit(audit); + + #region 用户部门填写后审批邮件:发送给合同管理员,抄送给流程经办人 + Model.EmailPop pops = Funs.DB.EmailPop.FirstOrDefault(x => x.EmailID == BLL.Const.EmailPopId); + if (pops == null) + { + return; + } + string[] mailTo = null; + string[] mailCC = null; + string resultMessage = ""; + + var emailTemplate = Funs.DB.SendEmailTemplate.Where(x => x.EmailName.Contains("用户部门填写后审核通知")); + if (emailTemplate.Count() > 0) + { + var userTo = from x in Funs.DB.Sys_User + where x.UserId.Contains(this.drpContractAdmin.SelectedValue) + && x.Email != null && x.Email != "" + select x; + if (userTo != null) + { + mailTo = userTo.Select(x => x.Email).ToArray(); + } + + var userCc = from x in Funs.DB.View_EMail_UserTo + where (x.PunishmentId == this.PunishmentId && x.AuditDate != null) + || (x.UserId.Contains(pun.Violation_Inspector)) + && x.Email != null && x.Email != "" + select x; + if (userCc != null) + { + mailCC = userCc.Select(x => x.Email).Distinct().ToArray(); + } + if (mailTo.Length > 0) + { + NameValueCollection myPram = new NameValueCollection(); + myPram.Add("发现日期", pun.PunishDate != null ? pun.PunishDate.Value.ToString("yyyy-MM-dd") : ""); + myPram.Add("位置", pun.Location); + myPram.Add("质量事件描述", pun.Description); + MailHelper.SendPunishSesMail(pops, myPram, "用户部门填写后审核通知", mailTo, mailCC, out resultMessage); + } + } + #endregion + } } else { - Alert.ShowInTop("如不填写,请描述原因!", MessageBoxIcon.Warning); - return; - } - } - if (type == BLL.Const.BtnSubmit) - { - pun.States = "4";//用户部门提交 - pun.UserDepEndDate = DateTime.Now;//用户部门审批时间 - - var u = BLL.Sys_UserService.GetUsersByUserId(this.CurrUser.UserId); - if (u != null) - { - var updateAudit = BLL.PunishmentAuditService.GetAuditByAuditMan(this.PunishmentId, u.DepartId); - if (updateAudit != null) + #region 最终审核通过,发送给用户部门办理,未通过发送给所有经办人 + Model.View_FC_SESRelatedData fc = BLL.SESRelatedDataService.GetSESRelatedDataViewByFO(pun.FO_NO); + if (fc != null) { - updateAudit.AuditMan = this.CurrUser.UserId; - updateAudit.AuditDate = DateTime.Now; - updateAudit.IsPass = true; - BLL.PunishmentAuditService.UpdatePunishmentAudit(updateAudit); + if (this.CurrUser.UserId == fc.Main_CoordinatorId && type == BLL.Const.BtnSubmit) + { + if (rblPass.SelectedValue == "True") + { + pun.UserDepStartDate = DateTime.Now;//用户部门审批到达时间 + pun.Pause = false;//如果审核通过,取消暂停 + + #region 主协调员审批通过邮件:发送给部门经理,抄送流程经办人 + Model.EmailPop pops = Funs.DB.EmailPop.FirstOrDefault(x => x.EmailID == BLL.Const.EmailPopId); + if (pops == null) + { + return; + } + string[] mailTo = null; + string[] mailCC = null; + string resultMessage = ""; + + var emailTemplate = Funs.DB.SendEmailTemplate.Where(x => x.EmailName.Contains("主协调员填写完成后审批通过通知")); + if (emailTemplate.Count() > 0) + { + string departLeader = string.Empty; + var depart = BLL.DepartService.GetDepartById(drpUserDep.SelectedValue); + if (depart != null) + { + departLeader = depart.DepartLeader; + } + if (!string.IsNullOrEmpty(departLeader)) + { + var userTo = from x in Funs.DB.Sys_User + where x.UserId.Contains(departLeader) && x.Email != null && x.Email != "" + select x; + if (userTo != null) + { + mailTo = userTo.Select(x => x.Email).ToArray(); + } + } + + var userCc = from x in Funs.DB.View_EMail_UserTo + where ((x.PunishmentId == this.PunishmentId && x.AuditDate != null) || x.UserId.Contains(pun.Violation_Inspector)) + && x.Email != null && x.Email != "" + select x; + if (userCc != null) + { + mailCC = userCc.Select(x => x.Email).Distinct().ToArray(); + } + if (mailTo.Length > 0) + { + NameValueCollection myPram = new NameValueCollection(); + myPram.Add("发现日期", pun.PunishDate != null ? pun.PunishDate.Value.ToString("yyyy-MM-dd") : ""); + myPram.Add("位置", pun.Location); + myPram.Add("质量事件描述", pun.Description); + MailHelper.SendPunishSesMail(pops, myPram, "主协调员填写完成后审批通过通知", mailTo, mailCC, out resultMessage); + } + } + #endregion + } + else//最终审核未通过通知 + { + pun.States = "7";//已拒绝 + + Model.EmailPop pops = Funs.DB.EmailPop.FirstOrDefault(x => x.EmailID == BLL.Const.EmailPopId); + if (pops == null) + { + return; + } + string[] mailTo = null; + //string[] mailCC = null; + string resultMessage = ""; + + var emailTemplate = Funs.DB.SendEmailTemplate.Where(x => x.EmailName.Contains("主协调员填写完成后审批未通过通知")); + if (emailTemplate.Count() > 0) + { + var userTo = from x in Funs.DB.View_EMail_UserTo + where ((x.PunishmentId == this.PunishmentId && x.AuditDate != null) || x.UserId.Contains(pun.Violation_Inspector)) + && x.Email != null && x.Email != "" + select x; + if (userTo != null) + { + mailTo = userTo.Select(x => x.Email).Distinct().ToArray(); + } + if (mailTo.Length > 0) + { + NameValueCollection myPram = new NameValueCollection(); + myPram.Add("发现日期", pun.PunishDate != null ? pun.PunishDate.Value.ToString("yyyy-MM-dd") : ""); + myPram.Add("位置", pun.Location); + myPram.Add("质量事件描述", pun.Description); + MailHelper.SendPunishSesMail(pops, myPram, "主协调员填写完成后审批未通过通知", mailTo, null, out resultMessage); + } + } + } + } } + #endregion } - - Model.EMC_PunishmentAudit audit = new Model.EMC_PunishmentAudit(); - audit.AuditId = SQLHelper.GetNewID(typeof(Model.EMC_PunishmentAudit)); - audit.PunishmentId = this.PunishmentId; - audit.AuditMan = pun.ContractAdmin; - BLL.PunishmentAuditService.AddPunishmentAudit(audit); - - #region 用户部门填写后审批邮件:发送给合同管理员,抄送给流程经办人 - Model.EmailPop pops = Funs.DB.EmailPop.FirstOrDefault(x => x.EmailID == BLL.Const.EmailPopId); - if (pops == null) - { - return; - } - string[] mailTo = null; - string[] mailCC = null; - string resultMessage = ""; - - var emailTemplate = Funs.DB.SendEmailTemplate.Where(x => x.EmailName.Contains("用户部门填写后审核通知")); - if (emailTemplate.Count() > 0) - { - var userTo = from x in Funs.DB.Sys_User - where x.UserId.Contains(this.drpContractAdmin.SelectedValue) - && x.Email != null && x.Email != "" - select x; - if (userTo != null) - { - mailTo = userTo.Select(x => x.Email).ToArray(); - } - - var userCc = from x in Funs.DB.View_EMail_UserTo - where (x.PunishmentId == this.PunishmentId && x.AuditDate != null) - || (x.UserId.Contains(pun.Violation_Inspector)) - && x.Email != null && x.Email != "" - select x; - if (userCc != null) - { - mailCC = userCc.Select(x => x.Email).Distinct().ToArray(); - } - if (mailTo.Length > 0) - { - NameValueCollection myPram = new NameValueCollection(); - myPram.Add("发现日期", pun.PunishDate != null ? pun.PunishDate.Value.ToString("yyyy-MM-dd") : ""); - myPram.Add("位置", pun.Location); - myPram.Add("质量事件描述", pun.Description); - MailHelper.SendPunishSesMail(pops, myPram, "用户部门填写后审核通知", mailTo, mailCC, out resultMessage); - } - } - #endregion } } else if (pun.States == "4")//合同管理员 @@ -1699,12 +1879,12 @@ namespace FineUIPro.Web.ContractorQuality PageContext.RegisterStartupScript(WindowAtt.GetShowReference(String.Format("../AttachFile/webuploader2.aspx?type=view&toKeyId={0}&path=FileUpload/SES/EMC_Punishment&menuId={1}&strParam=1", this.hdId.Text, BLL.Const.IncidentInvestigationMenuId))); } - /// - /// 质量调查相关附件 - /// - /// - /// - protected void btnAttach2_Click(object sender, EventArgs e) + /// + /// 质量调查相关附件 + /// + /// + /// + protected void btnAttach2_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(this.hdId.Text)) //新增记录 { @@ -1722,6 +1902,31 @@ namespace FineUIPro.Web.ContractorQuality { PageContext.RegisterStartupScript(WindowAtt.GetShowReference(String.Format("../AttachFile/webuploader2.aspx?type=view&toKeyId={0}&path=FileUpload/SES/EMC_Punishment&menuId={1}&strParam=2", this.PunishmentId, BLL.Const.IncidentInvestigationMenuId))); } + + #region 修改内容说明附件 + /// + /// 上传 + /// + /// + /// + protected void btnModifyAttach_Click(object sender, EventArgs e) + { + if (!string.IsNullOrEmpty(this.hdId.Text)) + { + PageContext.RegisterStartupScript(WindowAtt.GetShowReference(String.Format("../AttachFile/webuploader2.aspx?type=edit&toKeyId={0}&path=FileUpload/SES/EMC_Punishment&menuId={1}&strParam=3", this.PunishmentId, BLL.Const.IncidentInvestigationMenuId))); + } + } + + /// + /// 查看 + /// + /// + /// + protected void lbtnModifyAttach_Click(object sender, EventArgs e) + { + PageContext.RegisterStartupScript(WindowAtt.GetShowReference(String.Format("../AttachFile/webuploader2.aspx?type=view&toKeyId={0}&path=FileUpload/SES/EMC_Punishment&menuId={1}&strParam=3", this.PunishmentId, BLL.Const.IncidentInvestigationMenuId))); + } + #endregion #endregion #region 拒绝 @@ -1771,8 +1976,155 @@ namespace FineUIPro.Web.ContractorQuality { PageContext.RegisterStartupScript(ActiveWindow.GetHidePostBackReference()); } + #endregion + #region 暂停 + /// + /// 承包商联系人有异议线下通知主协调员,主协调员可暂停重新评估 + /// + /// + /// + protected void btnPause_Click(object sender, EventArgs e) + { + var pun = BLL.PunishmentService.GetPunishmentById(this.PunishmentId); + if (pun != null) + { + pun.Pause = true; + pun.PauseDate = DateTime.Now; + Funs.DB.SubmitChanges(); + ShowNotify("已暂停,请联合发起人及承包商调查审核!", MessageBoxIcon.Information); + } + } + #endregion + #region 保存修改 + /// + /// 确认修改 + /// + /// + /// + protected void btnSureModify_Click(object sender, EventArgs e) + { + string con = string.Empty; + if (!string.IsNullOrEmpty(this.PunishmentId)) + { + var pun = BLL.PunishmentService.GetPunishmentById(this.PunishmentId); + if (pun != null) + { + if (pun.States == "3" && !pun.UserDepStartDate.HasValue && rblSeType.SelectedValue == "1") + { + Model.View_FC_SESRelatedData fc = BLL.SESRelatedDataService.GetSESRelatedDataViewByFO(pun.FO_NO); + if (fc != null) + { + #region 承包商管理角色可修改用户部门前的所有内容 + if (this.CurrUser.RoleId == BLL.Const.Role_Contractor_LeaderId) + { + if (pun.PunishDate.Value.ToShortDateString() != Funs.GetNewDateTime(this.txtPunishDate.Text.Trim()).Value.ToShortDateString()) + { + con += "发现日期由【" + string.Format("{0:yyyy-MM-dd}", pun.PunishDate) + "】改为【" + string.Format("{0:yyyy-MM-dd}", Funs.GetNewDateTime(this.txtPunishDate.Text.Trim())) + "】;"; + pun.PunishDate = Funs.GetNewDateTime(this.txtPunishDate.Text.Trim()); + } + if (pun.Location != this.txtLocation.Text.Trim()) + { + con += "位置由【" + pun.Location + "】改为【" + this.txtLocation.Text.Trim() + "】;"; + pun.Location = this.txtLocation.Text.Trim(); + } + if (pun.Description != this.txtDescription.Text.Trim()) + { + con += "质量事件描述由【" + pun.Description + "】改为【" + this.txtDescription.Text.Trim() + "】;"; + pun.Description = this.txtDescription.Text.Trim(); + } + if (pun.MIContractor != this.txtMIContractor.Text.Trim()) + { + con += "可能涉及的承包商由【" + pun.MIContractor + "】改为【" + this.txtMIContractor.Text.Trim() + "】;"; + pun.MIContractor = this.txtMIContractor.Text.Trim(); + } + if (pun.SeType != this.rblSeType.SelectedValue) + { + con += "类型由【" + pun.SeType == "1" ? "服务" : "物资" + "】改为【" + this.rblSeType.SelectedValue == "1" ? "服务" : "物资" + "】;"; + pun.SeType = this.rblSeType.SelectedValue; + } + if (pun.FO_NO != this.txtFO_No.Text.Trim()) + { + con += "合同号由【" + pun.FO_NO + "】改为【" + this.txtFO_No.Text.Trim() + "】;"; + pun.FO_NO = this.txtFO_No.Text.Trim(); + } + if (pun.Contractor != this.txtContractor.Text.Trim()) + { + con += "涉及承包商由【" + pun.Contractor + "】改为【" + this.txtContractor.Text.Trim() + "】;"; + pun.Contractor = this.txtContractor.Text.Trim(); + } + if (pun.ContractAdmin != this.drpContractAdmin.SelectedValue) + { + if (this.drpContractAdmin.SelectedValue != BLL.Const._Null) + { + con += "合同管理员由【" + Sys_UserService.GetUserNameByUserId(pun.Contractor) + "】改为【" + Sys_UserService.GetUserNameByUserId(this.drpContractAdmin.SelectedValue) + "】;"; + pun.ContractAdmin = this.drpContractAdmin.SelectedValue; + } + } + if (pun.ContractRequester != this.drpContractRequester.SelectedValue) + { + if (this.drpContractRequester.SelectedValue != BLL.Const._Null) + { + con += "合同需求人由【" + Sys_UserService.GetUserNameByUserId(pun.ContractRequester) + "】改为【" + Sys_UserService.GetUserNameByUserId(this.drpContractRequester.SelectedValue) + "】;"; + pun.ContractRequester = this.drpContractRequester.SelectedValue; + } + } + //if (pun.ContractRequesterDep != txtContractRequesterDep.Text.Trim()) + //{ + // con += "需求人部门由" + pun.ContractRequesterDep + "改为" + txtContractRequesterDep.Text.Trim() + ";"; + // pun.ContractRequester = this.drpContractRequester.SelectedValue; + //} + //if (pun.Buyer != this.drpBuyer.SelectedValue) + //{ + // con += "采购员由" + Sys_UserService.GetUserNameByUserId(pun.Buyer) + "改为" + Sys_UserService.GetUserNameByUserId(this.drpBuyer.SelectedValue) + ";"; + // pun.ContractRequester = this.drpContractRequester.SelectedValue; + //} + if (pun.ViolationDegree != this.drpViolationDegree.SelectedValue) + { + if (this.drpViolationDegree.SelectedValue != BLL.Const._Null) + { + con += "违章条款由【" + BLL.ViolationClauseService.GetViolationClause(pun.ViolationDegree).ClauseDef + "】改为【" + BLL.ViolationClauseService.GetViolationClause(this.drpViolationDegree.SelectedValue).ClauseDef + "】;"; + pun.ViolationDegree = this.drpViolationDegree.SelectedValue; + } + } + if (pun.Company != Funs.GetNewDecimal(this.txtCompany.Text.Trim())) + { + con += "违章扣款(公司)由【" + pun.Company + "】改为【" + Funs.GetNewDecimal(this.txtCompany.Text.Trim()) + "】;"; + pun.Company = Funs.GetNewDecimal(this.txtCompany.Text.Trim()); + } + if (pun.IndividualPerson != this.txtIndividualPerson.Text.Trim()) + { + con += "违章人员由【" + pun.IndividualPerson + "】改为【" + this.txtIndividualPerson.Text.Trim() + "】;"; + pun.IndividualPerson = this.txtIndividualPerson.Text.Trim(); + } + if (pun.Individual != Funs.GetNewDecimal(this.txtIndividual.Text.Trim())) + { + con += "违章扣款(个人)由【" + pun.Individual + "】改为【" + Funs.GetNewDecimal(this.txtIndividual.Text.Trim()) + "】;"; + pun.Individual = Funs.GetNewDecimal(this.txtIndividual.Text.Trim()); + } + if (pun.UserDep != this.drpUserDep.SelectedValue) + { + if (this.drpUserDep.SelectedValue != BLL.Const._Null) + { + con += "用户部门由【" + DepartService.GetDepartNameById(pun.UserDep) + "】改为【" + DepartService.GetDepartNameById(this.drpUserDep.SelectedValue) + "】;"; + pun.UserDep = this.drpUserDep.SelectedValue; + } + } + this.txtModifyDef.Text = this.hdModifyContent.Text + con; + pun.ModifyContent = this.txtModifyDef.Text.Trim(); + pun.Modifyer = this.CurrUser.UserId; + pun.ModifyDate = DateTime.Now; + Funs.DB.SubmitChanges(); + ShowNotify("修改成功!", MessageBoxIcon.Success); + } + #endregion + } + } + } + } + } + #endregion } } \ No newline at end of file diff --git a/FCL/FineUIPro.Web/ContractorQuality/IncidentInvestigationEdit.aspx.designer.cs b/FCL/FineUIPro.Web/ContractorQuality/IncidentInvestigationEdit.aspx.designer.cs index 50b947b..6bd08a3 100644 --- a/FCL/FineUIPro.Web/ContractorQuality/IncidentInvestigationEdit.aspx.designer.cs +++ b/FCL/FineUIPro.Web/ContractorQuality/IncidentInvestigationEdit.aspx.designer.cs @@ -761,6 +761,105 @@ namespace FineUIPro.Web.ContractorQuality /// protected global::FineUIPro.TextBox txtBuyerReson; + /// + /// frModifyDef 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.FormRow frModifyDef; + + /// + /// txtModifyDef 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.TextArea txtModifyDef; + + /// + /// frModifyDefUrl 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.FormRow frModifyDefUrl; + + /// + /// Panel4 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Panel Panel4; + + /// + /// Label13 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Label Label13; + + /// + /// btnModifyAttach 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Button btnModifyAttach; + + /// + /// Label14 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Label Label14; + + /// + /// lbtnModifyAttach 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.LinkButton lbtnModifyAttach; + + /// + /// frPassResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.FormRow frPassResult; + + /// + /// rblPass 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.RadioButtonList rblPass; + + /// + /// Label15 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Label Label15; + /// /// Toolbar1 控件。 /// @@ -770,6 +869,15 @@ namespace FineUIPro.Web.ContractorQuality /// protected global::FineUIPro.Toolbar Toolbar1; + /// + /// hdModifyContent 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.HiddenField hdModifyContent; + /// /// hdId 控件。 /// @@ -824,6 +932,24 @@ namespace FineUIPro.Web.ContractorQuality /// protected global::FineUIPro.Button btnSbumit; + /// + /// btnPause 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Button btnPause; + + /// + /// btnSureModify 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Button btnSureModify; + /// /// Window1 控件。 /// diff --git a/FCL/FineUIPro.Web/Global.asax.cs b/FCL/FineUIPro.Web/Global.asax.cs index 6a55403..7069fcf 100644 --- a/FCL/FineUIPro.Web/Global.asax.cs +++ b/FCL/FineUIPro.Web/Global.asax.cs @@ -48,15 +48,14 @@ //每月(2,5,8,10)邮件自动发送给SSR提交人员和主协调人及合同员,用户代表等评价 - if ((DateTime.Now.Day == 2 || DateTime.Now.Day == 5 || DateTime.Now.Day == 8 || DateTime.Now.Day == 10)) + if ((DateTime.Now.Day == 2 || DateTime.Now.Day == 5 || DateTime.Now.Day == 8 || DateTime.Now.Day == 10) && DateTime.Now.Hour == 8) { System.Timers.Timer aTimer = new System.Timers.Timer(); aTimer.Elapsed += new System.Timers.ElapsedEventHandler(aTimer_Elapsed); - //60分钟执行一次 - aTimer.Interval = 1000 * 60 * 60; + //30分钟执行一次 + aTimer.Interval = 1000 * 60 * 30; aTimer.Enabled = true; aTimer.Start(); - } //自动填写评价 if (DateTime.Now.Day == 12) @@ -64,7 +63,7 @@ System.Timers.Timer aTimer = new System.Timers.Timer(); aTimer.Elapsed += new System.Timers.ElapsedEventHandler(aTimer_AutoFill); //30分钟执行一次 - aTimer.Interval = 1800000; + aTimer.Interval = 1000 * 60 * 30; aTimer.Enabled = true; aTimer.Start(); @@ -199,6 +198,17 @@ fcTimer.Enabled = true; fcTimer.Start(); } + + //承包商报告主协调员提交后通知承包商联系人,若无异议或3天未操作,发送邮件给用户部门经理 + if (DateTime.Now.Hour == 9) + { + System.Timers.Timer fcTimer = new System.Timers.Timer(); + fcTimer.Elapsed += new System.Timers.ElapsedEventHandler(PunTimer_PunishmentTimer); + //1小时执行一次 + fcTimer.Interval = 1000 * 60 * 60; + fcTimer.Enabled = true; + fcTimer.Start(); + } } private void queTimer_AutoSendOne(object sender, System.Timers.ElapsedEventArgs e) @@ -242,7 +252,7 @@ userName = contractAdmin.First().UserName; departId = contractAdmin.First().DepartId; } - + var depart = BLL.DepartService.GetDepartById(departId); if (depart != null) { @@ -321,9 +331,9 @@ if (que.QueType == "3") { var cts = from x in Funs.DB.Sys_User - join y in Funs.DB.Sys_Role on x.RoleId equals y.RoleId - where x.Email != null && x.Email != "" && (y.RoleName == "CTS/S") - select x; + join y in Funs.DB.Sys_Role on x.RoleId equals y.RoleId + where x.Email != null && x.Email != "" && (y.RoleName == "CTS/S") + select x; if (cts.Count() > 0) { mailTo = cts.Select(x => x.Email).ToArray(); @@ -436,12 +446,12 @@ myCol.Add("Contractor_En", contractor.Contractor); myCol.Add("Expire_En", que.LimitEndDate.Value.ToShortDateString()); - + myCol.Add("ContractNo", fo.FO_NO); - myCol.Add("Contractor", (contractor.ContractorCN != null && contractor.ContractorCN!="") ? contractor.ContractorCN : contractor.Contractor); + myCol.Add("Contractor", (contractor.ContractorCN != null && contractor.ContractorCN != "") ? contractor.ContractorCN : contractor.Contractor); myCol.Add("QuaName", que.QueName); myCol.Add("Expire", que.LimitEndDate.Value.ToShortDateString()); - + mailBody = TemplateHelper.BulidByFile2(templetpath, myCol); string mailName = EmailTemplate.Select(p => p.EmailName).FirstOrDefault(); @@ -482,7 +492,7 @@ } string[] mailTo = null; string mailBody = string.Empty; - + string mailSubject = string.Empty; string mailPriority = string.Empty; string[] mailCC = null; @@ -718,13 +728,13 @@ } private void aTimer_AutoSend(object sender, System.Timers.ElapsedEventArgs e) - { + { // 过期提示,30天范围 - var foList = from x in Funs.DB.FC_SESRelatedData where x.Expire_Date != null + var foList = from x in Funs.DB.FC_SESRelatedData where x.Expire_Date != null && x.Expire_Date.Value.AddMonths(-6).AddDays(-7).Date <= DateTime.Now.Date && x.Expire_Date.Value.AddMonths(-5).AddDays(-7).Date >= DateTime.Now.Date select x; - if (foList.Count() > 0) + if (foList.Count() > 0) { foreach (var fo in foList) { @@ -812,7 +822,7 @@ var cost = from x in Funs.DB.Sys_User join y in Funs.DB.Sys_Role on x.RoleId equals y.RoleId join z in Funs.DB.Base_Depart on x.DepartId equals z.DepartId - where (y.RoleName == "Cost Engineer Leader" || y.RoleName == "Contractor_Leader" || z.DepartCode== "CT/K") && x.Email != null && x.Email != "" + where (y.RoleName == "Cost Engineer Leader" || y.RoleName == "Contractor_Leader" || z.DepartCode == "CT/K") && x.Email != null && x.Email != "" select x; if (cost.Count() > 0) { @@ -841,8 +851,8 @@ var cc = from x in Funs.DB.Sys_User join y in Funs.DB.Sys_Role on x.RoleId equals y.RoleId - where x.Email != null && x.Email != "" - && (y.RoleName == "CTE/D Manager" || x.UserId== deparatLeader || y.RoleName == "CGP Director" || (y.RoleName== "CT Director" && x.DepartId== departId)) + where x.Email != null && x.Email != "" + && (y.RoleName == "CTE/D Manager" || x.UserId == deparatLeader || y.RoleName == "CGP Director" || (y.RoleName == "CT Director" && x.DepartId == departId)) select x; mailTo = userList.Select(x => x.Email).ToArray(); @@ -850,7 +860,7 @@ //var nowDate = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " 00:00:00"); //&& p.CreateTime.Value >= nowDate - var email = Funs.DB.SendEmail.Where(p => p.EmailStatus == "发送成功" + var email = Funs.DB.SendEmail.Where(p => p.EmailStatus == "发送成功" && p.EmailTile.Contains("到期提醒") && p.EmailTile.Contains(discipline.Discipline.Replace("\r\n", "")) && p.EmailTile.Contains(fo.FO_NO) && mailTo.Contains(p.EmailURL)).ToList(); if (email.Count > 0) @@ -901,7 +911,7 @@ string resultMessage = ""; string departId = string.Empty; - + var discipline = BLL.DisciplineService.GetDisciplineById(fo.DisciplineId); //string disc = discipline.Discipline; //if (!string.IsNullOrEmpty(discipline.DisciplineCN)) @@ -917,7 +927,7 @@ var buyer = from x in Funs.DB.Sys_User where x.UserId == fo.BuyerId && x.Email != null && x.Email != "" select x; if (buyer.Count() > 0) { - userList.Add(buyer.First()); + userList.Add(buyer.First()); } var mainCoor = from x in Funs.DB.Sys_User where x.UserId == fo.Main_Coordinator && x.Email != null && x.Email != "" select x; if (mainCoor.Count() > 0) @@ -929,7 +939,7 @@ { userList.Add(userRepresentative.First()); } - + //var ctk = from x in Funs.DB.Sys_User // join z in Funs.DB.Base_Depart on x.DepartId equals z.DepartId // where z.DepartCode == "CT/K" && x.Email != null && x.Email != "" @@ -987,6 +997,7 @@ } #endregion + #region 每月(2,5,8,10)邮件自动发送给SSR提交人员和主协调人及合同员,用户代表等评价 /// /// 每月(2,5,8,10)邮件自动发送给SSR提交人员和主协调人及合同员,用户代表等评价 /// @@ -1094,7 +1105,7 @@ { mailCC = mailCCLs.Where(p => !string.IsNullOrEmpty(p)).ToArray(); } - + } // 总监 @@ -1102,7 +1113,7 @@ var mailToDirector = from x in Funs.DB.Sys_User join y in Funs.DB.Base_Depart on x.DepartId equals y.DepartId where departCode.Contains(y.DepartCode) && x.RoleId == Const.Role_DirectorId select x; - if (DateTime.Now.Day == 11 && mailToDirector.Count() > 0) + if (DateTime.Now.Day == 10 && mailToDirector.Count() > 0) { var mailccLs = new List(); // 部门经理 @@ -1168,7 +1179,7 @@ join y in Funs.DB.Base_Depart on x.DepartId equals y.DepartId where departCode.Contains(y.DepartCode) && x.RoleId == Const.Role_DirectorId select x; - if (DateTime.Now.Day == 11 && mailToDirector.Count() > 0) + if (DateTime.Now.Day == 10 && mailToDirector.Count() > 0) { var mailccLs = new List(); // 部门经理 @@ -1193,6 +1204,7 @@ } } } + #endregion #region 自动填写评价 /// @@ -1436,7 +1448,7 @@ catch (Exception ex) { ErrLogInfo.WriteLog($"执行当前sql:{strSql}错误:{ex.Message},当前ID={d.ID},当前status={status}"); - //记录日志到数据中。 + //记录日志到数据中。 } } } @@ -1738,6 +1750,85 @@ } #endregion + # region 承包商报告主协调员提交后通知承包商联系人,若无异议或3天未操作,发送邮件给用户部门经理 + /// + /// 承包商报告主协调员提交后通知承包商联系人,若无异议或3天未操作,发送邮件给用户部门经理 + /// + /// + /// + private void PunTimer_PunishmentTimer(object sender, System.Timers.ElapsedEventArgs e) + { + var punishments = (from x in Funs.DB.EMC_Punishment + where x.Flag == "2" && x.States == "3" && x.SeType == "1" + && (x.Pause == false || x.Pause == null) && x.MainCoordinatorEndDate.Value.AddDays(3) < DateTime.Now + orderby x.CreateDate descending + select x).ToList(); + if (punishments.Count() > 0) + { + foreach (var pun in punishments) + { + //新增用户部门操作流程 + Model.EMC_PunishmentAudit newAudit = new EMC_PunishmentAudit(); + newAudit.AuditId = SQLHelper.GetNewID(typeof(Model.EMC_PunishmentAudit)); + newAudit.PunishmentId = pun.PunishmentId; + newAudit.AuditMan = pun.UserDep; + BLL.PunishmentAuditService.AddPunishmentAudit(newAudit); + + List userList = new List(); + EmailPop pops = Funs.DB.EmailPop.FirstOrDefault(x => x.EmailID == BLL.Const.EmailPopId); + if (pops == null) + { + return; + } + string[] mailTo = null; + string mailSubject = string.Empty; + string mailBody = string.Empty; + string mailPriority = string.Empty; + string[] mailCC = null; + string resultMessage = ""; + string departLeader = string.Empty; + + var emailTemplate = Funs.DB.SendEmailTemplate.Where(x => x.EmailName.Contains("主协调员填写完成后审批通过通知")); + if (emailTemplate.Count() > 0) + { + var depart = BLL.DepartService.GetDepartById(pun.UserDep); + if (depart != null) + { + departLeader = depart.DepartLeader; + } + if (!string.IsNullOrEmpty(departLeader)) + { + var userTo = from x in Funs.DB.Sys_User + where x.UserId.Contains(departLeader) && x.Email != null && x.Email != "" + select x; + if (userTo != null) + { + mailTo = userTo.Select(x => x.Email).ToArray(); + } + } + + var userCc = from x in Funs.DB.View_EMail_UserTo + where ((x.PunishmentId == pun.PunishmentId && x.AuditDate != null) || x.UserId.Contains(pun.Violation_Inspector)) + && x.Email != null && x.Email != "" + select x; + if (userCc != null) + { + mailCC = userCc.Select(x => x.Email).Distinct().ToArray(); + } + if (mailTo.Length > 0) + { + NameValueCollection myPram = new NameValueCollection(); + myPram.Add("发现日期", pun.PunishDate != null ? pun.PunishDate.Value.ToString("yyyy-MM-dd") : ""); + myPram.Add("位置", pun.Location); + myPram.Add("质量事件描述", pun.Description); + MailHelper.SendPunishSesMail(pops, myPram, "主协调员填写完成后审批通过通知", mailTo, mailCC, out resultMessage); + } + } + } + } + } + #endregion + private void Sync_HR(object sender, System.Timers.ElapsedEventArgs e) { //调用接口 diff --git a/FCL/Model/Model.cs b/FCL/Model/Model.cs index c3980f3..70eea38 100644 --- a/FCL/Model/Model.cs +++ b/FCL/Model/Model.cs @@ -9930,6 +9930,16 @@ namespace Model private System.Nullable _UserDepEndDate; + private System.Nullable _Pause; + + private System.Nullable _PauseDate; + + private string _ModifyContent; + + private string _Modifyer; + + private System.Nullable _ModifyDate; + private EntityRef _Base_Depart; private EntityRef _Sys_User; @@ -10056,6 +10066,16 @@ namespace Model partial void OnUserDepStartDateChanged(); partial void OnUserDepEndDateChanging(System.Nullable value); partial void OnUserDepEndDateChanged(); + partial void OnPauseChanging(System.Nullable value); + partial void OnPauseChanged(); + partial void OnPauseDateChanging(System.Nullable value); + partial void OnPauseDateChanged(); + partial void OnModifyContentChanging(string value); + partial void OnModifyContentChanged(); + partial void OnModifyerChanging(string value); + partial void OnModifyerChanged(); + partial void OnModifyDateChanging(System.Nullable value); + partial void OnModifyDateChanged(); #endregion public EMC_Punishment() @@ -11234,6 +11254,106 @@ namespace Model } } + [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Pause", DbType="Bit")] + public System.Nullable Pause + { + get + { + return this._Pause; + } + set + { + if ((this._Pause != value)) + { + this.OnPauseChanging(value); + this.SendPropertyChanging(); + this._Pause = value; + this.SendPropertyChanged("Pause"); + this.OnPauseChanged(); + } + } + } + + [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_PauseDate", DbType="DateTime")] + public System.Nullable PauseDate + { + get + { + return this._PauseDate; + } + set + { + if ((this._PauseDate != value)) + { + this.OnPauseDateChanging(value); + this.SendPropertyChanging(); + this._PauseDate = value; + this.SendPropertyChanged("PauseDate"); + this.OnPauseDateChanged(); + } + } + } + + [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ModifyContent", DbType="NVarChar(2000)")] + public string ModifyContent + { + get + { + return this._ModifyContent; + } + set + { + if ((this._ModifyContent != value)) + { + this.OnModifyContentChanging(value); + this.SendPropertyChanging(); + this._ModifyContent = value; + this.SendPropertyChanged("ModifyContent"); + this.OnModifyContentChanged(); + } + } + } + + [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Modifyer", DbType="NVarChar(50)")] + public string Modifyer + { + get + { + return this._Modifyer; + } + set + { + if ((this._Modifyer != value)) + { + this.OnModifyerChanging(value); + this.SendPropertyChanging(); + this._Modifyer = value; + this.SendPropertyChanged("Modifyer"); + this.OnModifyerChanged(); + } + } + } + + [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ModifyDate", DbType="DateTime")] + public System.Nullable ModifyDate + { + get + { + return this._ModifyDate; + } + set + { + if ((this._ModifyDate != value)) + { + this.OnModifyDateChanging(value); + this.SendPropertyChanging(); + this._ModifyDate = value; + this.SendPropertyChanged("ModifyDate"); + this.OnModifyDateChanged(); + } + } + } + [global::System.Data.Linq.Mapping.AssociationAttribute(Name="FK_EMC_Punishment_Base_Depart", Storage="_Base_Depart", ThisKey="BYC_RU", OtherKey="DepartId", IsForeignKey=true)] public Base_Depart Base_Depart { @@ -38597,7 +38717,7 @@ namespace Model } } - [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UserName", DbType="NVarChar(50)")] + [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UserName", DbType="NVarChar(60)")] public string UserName { get From 75f7ca6c21dea29bc4f1eb5826b5f84143b2c48b Mon Sep 17 00:00:00 2001 From: wendy <408182087@qq.com> Date: Mon, 25 Aug 2025 16:23:30 +0800 Subject: [PATCH 05/10] 20250825 --- FCL/FineUIPro.Web/Global.asax.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/FCL/FineUIPro.Web/Global.asax.cs b/FCL/FineUIPro.Web/Global.asax.cs index 7069fcf..49f7c51 100644 --- a/FCL/FineUIPro.Web/Global.asax.cs +++ b/FCL/FineUIPro.Web/Global.asax.cs @@ -1742,7 +1742,11 @@ myCol1.Add("violation type", violation_type); mailSubject = TemplateHelper.BulidByFile2(mailName, myCol1); - MailHelper.SendNetMail2(pops, pops.EmailYx, mailTo, mailSubject, mailBody, mailPriority, mailCC, "一次", out resultMessage); + var sendMail = from x in Funs.DB.SendEmail where x.EmailTile == mailSubject && (mailTo.Contains(x.EmailURL) || mailCC.Contains(x.EmailURL)) select x; + if (sendMail.Count() == 0) + { + MailHelper.SendNetMail2(pops, pops.EmailYx, mailTo, mailSubject, mailBody, mailPriority, mailCC, null, out resultMessage); + } } } } From 34ad9812153ce25d7a1a6dbffc4865f04d565b5e Mon Sep 17 00:00:00 2001 From: wendy <408182087@qq.com> Date: Thu, 11 Sep 2025 16:32:39 +0800 Subject: [PATCH 06/10] =?UTF-8?q?20250911=20=E4=BF=AE=E6=94=B9=E8=B4=A8?= =?UTF-8?q?=E9=87=8F=E4=BA=8B=E4=BB=B6=E6=8A=A5=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FCL/BLL/BaseInfo/ViolationClauseService.cs | 2 +- .../IncidentInvestigationEdit.aspx.cs | 72 ++++++++++--------- .../Evaluation/EvaluationNew.aspx.cs | 2 + .../Evaluation/SafetyEvaluation.aspx.cs | 2 + FCL/FineUIPro.Web/Global.asax.cs | 2 +- FCL/Model/Model.cs | 48 +++++++++++++ 6 files changed, 91 insertions(+), 37 deletions(-) diff --git a/FCL/BLL/BaseInfo/ViolationClauseService.cs b/FCL/BLL/BaseInfo/ViolationClauseService.cs index e3e0349..149d023 100644 --- a/FCL/BLL/BaseInfo/ViolationClauseService.cs +++ b/FCL/BLL/BaseInfo/ViolationClauseService.cs @@ -17,7 +17,7 @@ namespace BLL public static List GetSupViolationClause() { - return Funs.DB.EMC_ViolationClause.Where(e => e.SupViolationClause == null).ToList(); + return Funs.DB.EMC_ViolationClause.Where(e => e.SupViolationClause == null).OrderBy(e => e.SortIndex).ToList(); } /// diff --git a/FCL/FineUIPro.Web/ContractorQuality/IncidentInvestigationEdit.aspx.cs b/FCL/FineUIPro.Web/ContractorQuality/IncidentInvestigationEdit.aspx.cs index 4cb021c..a4a8488 100644 --- a/FCL/FineUIPro.Web/ContractorQuality/IncidentInvestigationEdit.aspx.cs +++ b/FCL/FineUIPro.Web/ContractorQuality/IncidentInvestigationEdit.aspx.cs @@ -1143,7 +1143,42 @@ namespace FineUIPro.Web.ContractorQuality { if (this.CurrUser.UserId == fc.Main_CoordinatorId && type == BLL.Const.BtnSubmit) { - if (rblPass.SelectedValue == "True") + if (rblPass.SelectedValue == "False") + { + //最终审核未通过通知 + pun.States = "7";//已拒绝 + + Model.EmailPop pops = Funs.DB.EmailPop.FirstOrDefault(x => x.EmailID == BLL.Const.EmailPopId); + if (pops == null) + { + return; + } + string[] mailTo = null; + //string[] mailCC = null; + string resultMessage = ""; + + var emailTemplate = Funs.DB.SendEmailTemplate.Where(x => x.EmailName.Contains("主协调员填写完成后审批未通过通知")); + if (emailTemplate.Count() > 0) + { + var userTo = from x in Funs.DB.View_EMail_UserTo + where ((x.PunishmentId == this.PunishmentId && x.AuditDate != null) || x.UserId.Contains(pun.Violation_Inspector)) + && x.Email != null && x.Email != "" + select x; + if (userTo != null) + { + mailTo = userTo.Select(x => x.Email).Distinct().ToArray(); + } + if (mailTo.Length > 0) + { + NameValueCollection myPram = new NameValueCollection(); + myPram.Add("发现日期", pun.PunishDate != null ? pun.PunishDate.Value.ToString("yyyy-MM-dd") : ""); + myPram.Add("位置", pun.Location); + myPram.Add("质量事件描述", pun.Description); + MailHelper.SendPunishSesMail(pops, myPram, "主协调员填写完成后审批未通过通知", mailTo, null, out resultMessage); + } + } + } + else { pun.UserDepStartDate = DateTime.Now;//用户部门审批到达时间 pun.Pause = false;//如果审核通过,取消暂停 @@ -1197,40 +1232,6 @@ namespace FineUIPro.Web.ContractorQuality } #endregion } - else//最终审核未通过通知 - { - pun.States = "7";//已拒绝 - - Model.EmailPop pops = Funs.DB.EmailPop.FirstOrDefault(x => x.EmailID == BLL.Const.EmailPopId); - if (pops == null) - { - return; - } - string[] mailTo = null; - //string[] mailCC = null; - string resultMessage = ""; - - var emailTemplate = Funs.DB.SendEmailTemplate.Where(x => x.EmailName.Contains("主协调员填写完成后审批未通过通知")); - if (emailTemplate.Count() > 0) - { - var userTo = from x in Funs.DB.View_EMail_UserTo - where ((x.PunishmentId == this.PunishmentId && x.AuditDate != null) || x.UserId.Contains(pun.Violation_Inspector)) - && x.Email != null && x.Email != "" - select x; - if (userTo != null) - { - mailTo = userTo.Select(x => x.Email).Distinct().ToArray(); - } - if (mailTo.Length > 0) - { - NameValueCollection myPram = new NameValueCollection(); - myPram.Add("发现日期", pun.PunishDate != null ? pun.PunishDate.Value.ToString("yyyy-MM-dd") : ""); - myPram.Add("位置", pun.Location); - myPram.Add("质量事件描述", pun.Description); - MailHelper.SendPunishSesMail(pops, myPram, "主协调员填写完成后审批未通过通知", mailTo, null, out resultMessage); - } - } - } } } #endregion @@ -1994,6 +1995,7 @@ namespace FineUIPro.Web.ContractorQuality pun.PauseDate = DateTime.Now; Funs.DB.SubmitChanges(); ShowNotify("已暂停,请联合发起人及承包商调查审核!", MessageBoxIcon.Information); + PageContext.RegisterStartupScript(ActiveWindow.GetHidePostBackReference()); } } #endregion diff --git a/FCL/FineUIPro.Web/Evaluation/EvaluationNew.aspx.cs b/FCL/FineUIPro.Web/Evaluation/EvaluationNew.aspx.cs index c0ebab3..2c56a79 100644 --- a/FCL/FineUIPro.Web/Evaluation/EvaluationNew.aspx.cs +++ b/FCL/FineUIPro.Web/Evaluation/EvaluationNew.aspx.cs @@ -834,6 +834,7 @@ namespace FineUIPro.Web.Evaluation if (punish != null) { punish.IsUserEvaluated = true; + punish.IsUserEvaluatedTime = DateTime.Now; Funs.DB.SubmitChanges(); } @@ -965,6 +966,7 @@ namespace FineUIPro.Web.Evaluation if (punish != null) { punish.IsDepEvaluated = true; + punish.IsDepEvaluatedTime = DateTime.Now; Funs.DB.SubmitChanges(); } } diff --git a/FCL/FineUIPro.Web/Evaluation/SafetyEvaluation.aspx.cs b/FCL/FineUIPro.Web/Evaluation/SafetyEvaluation.aspx.cs index e1d6b19..9b39ae3 100644 --- a/FCL/FineUIPro.Web/Evaluation/SafetyEvaluation.aspx.cs +++ b/FCL/FineUIPro.Web/Evaluation/SafetyEvaluation.aspx.cs @@ -835,6 +835,7 @@ namespace FineUIPro.Web.Evaluation if (punish != null) { punish.IsUserEvaluated = true; + punish.IsUserEvaluatedTime = DateTime.Now; Funs.DB.SubmitChanges(); } } @@ -964,6 +965,7 @@ namespace FineUIPro.Web.Evaluation if (punish != null) { punish.IsDepEvaluated = true; + punish.IsDepEvaluatedTime = DateTime.Now; Funs.DB.SubmitChanges(); } } diff --git a/FCL/FineUIPro.Web/Global.asax.cs b/FCL/FineUIPro.Web/Global.asax.cs index 49f7c51..4f27433 100644 --- a/FCL/FineUIPro.Web/Global.asax.cs +++ b/FCL/FineUIPro.Web/Global.asax.cs @@ -1611,7 +1611,7 @@ /// private void queTimer_ViolationHandling(object sender, System.Timers.ElapsedEventArgs e) { - var foData = (from x in Funs.DB.FC_SESRelatedData where x.FC_Status != "Closed" select x).ToList(); + var foData = (from x in Funs.DB.FC_SESRelatedData where x.FO_NO== "4988606499" && x.FC_Status != "Closed" select x).ToList(); if (foData.Count() > 0) { foreach (var fo in foData) diff --git a/FCL/Model/Model.cs b/FCL/Model/Model.cs index 70eea38..236e49d 100644 --- a/FCL/Model/Model.cs +++ b/FCL/Model/Model.cs @@ -9940,6 +9940,10 @@ namespace Model private System.Nullable _ModifyDate; + private System.Nullable _IsUserEvaluatedTime; + + private System.Nullable _IsDepEvaluatedTime; + private EntityRef _Base_Depart; private EntityRef _Sys_User; @@ -10076,6 +10080,10 @@ namespace Model partial void OnModifyerChanged(); partial void OnModifyDateChanging(System.Nullable value); partial void OnModifyDateChanged(); + partial void OnIsUserEvaluatedTimeChanging(System.Nullable value); + partial void OnIsUserEvaluatedTimeChanged(); + partial void OnIsDepEvaluatedTimeChanging(System.Nullable value); + partial void OnIsDepEvaluatedTimeChanged(); #endregion public EMC_Punishment() @@ -11354,6 +11362,46 @@ namespace Model } } + [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_IsUserEvaluatedTime", DbType="DateTime")] + public System.Nullable IsUserEvaluatedTime + { + get + { + return this._IsUserEvaluatedTime; + } + set + { + if ((this._IsUserEvaluatedTime != value)) + { + this.OnIsUserEvaluatedTimeChanging(value); + this.SendPropertyChanging(); + this._IsUserEvaluatedTime = value; + this.SendPropertyChanged("IsUserEvaluatedTime"); + this.OnIsUserEvaluatedTimeChanged(); + } + } + } + + [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_IsDepEvaluatedTime", DbType="DateTime")] + public System.Nullable IsDepEvaluatedTime + { + get + { + return this._IsDepEvaluatedTime; + } + set + { + if ((this._IsDepEvaluatedTime != value)) + { + this.OnIsDepEvaluatedTimeChanging(value); + this.SendPropertyChanging(); + this._IsDepEvaluatedTime = value; + this.SendPropertyChanged("IsDepEvaluatedTime"); + this.OnIsDepEvaluatedTimeChanged(); + } + } + } + [global::System.Data.Linq.Mapping.AssociationAttribute(Name="FK_EMC_Punishment_Base_Depart", Storage="_Base_Depart", ThisKey="BYC_RU", OtherKey="DepartId", IsForeignKey=true)] public Base_Depart Base_Depart { From 6b422a4781a1ac8e1978a629c1ba83facb50c54d Mon Sep 17 00:00:00 2001 From: wendy <408182087@qq.com> Date: Tue, 16 Sep 2025 16:42:51 +0800 Subject: [PATCH 07/10] =?UTF-8?q?20250916=20=E4=BF=AE=E6=94=B9=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=E9=82=AE=E4=BB=B6=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FCL/FineUIPro.Web/Evaluation/EvaluationNew.aspx.cs | 8 ++++---- FCL/FineUIPro.Web/Global.asax.cs | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/FCL/FineUIPro.Web/Evaluation/EvaluationNew.aspx.cs b/FCL/FineUIPro.Web/Evaluation/EvaluationNew.aspx.cs index 2c56a79..0fe346e 100644 --- a/FCL/FineUIPro.Web/Evaluation/EvaluationNew.aspx.cs +++ b/FCL/FineUIPro.Web/Evaluation/EvaluationNew.aspx.cs @@ -791,7 +791,7 @@ namespace FineUIPro.Web.Evaluation fsModel.Timely = homelyModel.Timely; } } - else if (fotype.Trim() == "TAR") + else if (fotype.Trim().Contains("TAR")) { if (tar_homelyModel != null && tar_homelyModel.Timely != null) { @@ -915,7 +915,7 @@ namespace FineUIPro.Web.Evaluation fsModel.Timely = homelyModel.Timely; } } - else if (fotype.Trim() == "TAR") + else if (fotype.Trim().Contains("TAR")) { if (tar_homelyModel != null && tar_homelyModel.Timely != null) { @@ -1305,7 +1305,7 @@ namespace FineUIPro.Web.Evaluation fsModel.Timely = homelyModel.Timely; } } - else if (fotype.Trim() == "TAR") + else if (fotype.Trim().Contains("TAR")) { if (tar_homelyModel != null && tar_homelyModel.Timely != null) { @@ -1389,7 +1389,7 @@ namespace FineUIPro.Web.Evaluation fsModel.Timely = homelyModel.Timely; } } - else if (fotype.Trim() == "TAR") + else if (fotype.Trim().Contains("TAR")) { if (tar_homelyModel != null && tar_homelyModel.Timely != null) { diff --git a/FCL/FineUIPro.Web/Global.asax.cs b/FCL/FineUIPro.Web/Global.asax.cs index 4f27433..f50e4d3 100644 --- a/FCL/FineUIPro.Web/Global.asax.cs +++ b/FCL/FineUIPro.Web/Global.asax.cs @@ -46,17 +46,17 @@ AppDomain.Unload(AppDomain.CurrentDomain); } - //每月(2,5,8,10)邮件自动发送给SSR提交人员和主协调人及合同员,用户代表等评价 - if ((DateTime.Now.Day == 2 || DateTime.Now.Day == 5 || DateTime.Now.Day == 8 || DateTime.Now.Day == 10) && DateTime.Now.Hour == 8) + if ((DateTime.Now.Day == 2 || DateTime.Now.Day == 5 || DateTime.Now.Day == 8 || DateTime.Now.Day == 10) && DateTime.Now.Hour == 9) { System.Timers.Timer aTimer = new System.Timers.Timer(); aTimer.Elapsed += new System.Timers.ElapsedEventHandler(aTimer_Elapsed); - //30分钟执行一次 - aTimer.Interval = 1000 * 60 * 30; + //60分钟执行一次 + aTimer.Interval = 1000 * 60 * 60; aTimer.Enabled = true; aTimer.Start(); } + //自动填写评价 if (DateTime.Now.Day == 12) { From aea0bf30798a805ab0990d957942a9bc0db37897 Mon Sep 17 00:00:00 2001 From: wendy <408182087@qq.com> Date: Thu, 9 Oct 2025 10:39:49 +0800 Subject: [PATCH 08/10] 20251009 --- FCL/BLL/BaseInfo/DepartService.cs | 2 + FCL/FineUIPro.Web/BaseInfo/Department.aspx | 6 +- FCL/FineUIPro.Web/BaseInfo/Department.aspx.cs | 35 +++++++-- .../BaseInfo/Department.aspx.designer.cs | 75 +++++++++++-------- .../IncidentInvestigationEdit.aspx.cs | 51 +++++++++---- .../Evaluation/EvaluationNew.aspx.cs | 4 +- FCL/FineUIPro.Web/Global.asax.cs | 51 +++++++++---- FCL/Model/Model.cs | 24 ++++++ 8 files changed, 181 insertions(+), 67 deletions(-) diff --git a/FCL/BLL/BaseInfo/DepartService.cs b/FCL/BLL/BaseInfo/DepartService.cs index 17d0fe9..b123c16 100644 --- a/FCL/BLL/BaseInfo/DepartService.cs +++ b/FCL/BLL/BaseInfo/DepartService.cs @@ -56,6 +56,7 @@ namespace BLL newDepart.DepartName = depart.DepartName; newDepart.Remark = depart.Remark; newDepart.DepartLeader = depart.DepartLeader; + newDepart.DelegatedRepresentative = depart.DelegatedRepresentative; Funs.DB.Base_Depart.InsertOnSubmit(newDepart); Funs.DB.SubmitChanges(); } @@ -73,6 +74,7 @@ namespace BLL newDepart.DepartName = depart.DepartName; newDepart.Remark = depart.Remark; newDepart.DepartLeader = depart.DepartLeader; + newDepart.DelegatedRepresentative = depart.DelegatedRepresentative; Funs.DB.SubmitChanges(); } } diff --git a/FCL/FineUIPro.Web/BaseInfo/Department.aspx b/FCL/FineUIPro.Web/BaseInfo/Department.aspx index 87455bc..f2a0094 100644 --- a/FCL/FineUIPro.Web/BaseInfo/Department.aspx +++ b/FCL/FineUIPro.Web/BaseInfo/Department.aspx @@ -42,6 +42,9 @@ + + @@ -77,6 +80,7 @@ runat="server" LabelAlign="right" LabelWidth="140px"> + @@ -117,7 +121,7 @@ function reloadGrid() { __doPostBack(null, 'reloadGrid'); - } + } diff --git a/FCL/FineUIPro.Web/BaseInfo/Department.aspx.cs b/FCL/FineUIPro.Web/BaseInfo/Department.aspx.cs index 955bad8..5773af5 100644 --- a/FCL/FineUIPro.Web/BaseInfo/Department.aspx.cs +++ b/FCL/FineUIPro.Web/BaseInfo/Department.aspx.cs @@ -1,6 +1,7 @@ using BLL; using BLL.Common; using Model; +using Org.BouncyCastle.Tls.Crypto; using System; using System.Collections.Generic; using System.Data; @@ -23,14 +24,21 @@ namespace FineUIPro.Web.BaseInfo if (!IsPostBack) { GetButtonPower();//按钮权限 - + //部门领导 drpDepartLeader.DataTextField = "UserName"; drpDepartLeader.DataValueField = "UserId"; this.drpDepartLeader.DataSource = BLL.Sys_UserService.GetUserList(); this.drpDepartLeader.DataBind(); Funs.FineUIPleaseSelect(this.drpDepartLeader); this.drpDepartLeader.SelectedIndex = 0; - + //部门代理人 + drpDelegatedRepresentative.DataTextField = "UserName"; + drpDelegatedRepresentative.DataValueField = "UserId"; + this.drpDelegatedRepresentative.DataSource = BLL.Sys_UserService.GetUserList(); + this.drpDelegatedRepresentative.DataBind(); + Funs.FineUIPleaseSelect(this.drpDelegatedRepresentative); + this.drpDelegatedRepresentative.SelectedIndex = 0; + ddlPageSize.SelectedValue = Grid1.PageSize.ToString(); // 绑定表格 BindGrid(); @@ -42,9 +50,10 @@ namespace FineUIPro.Web.BaseInfo /// private void BindGrid() { - string strSql = @"SELECT dep.DepartId,dep.DepartCode,dep.DepartName,dep.DepartLeader,u.UserName + string strSql = @"SELECT dep.DepartId,dep.DepartCode,dep.DepartName,dep.DepartLeader,u.UserName,dep.DelegatedRepresentative,r.UserName as DelegatedRepresentativeName FROM dbo.Base_Depart AS dep LEFT JOIN dbo.Sys_User AS u ON u.UserId = dep.DepartLeader + LEFT JOIN dbo.Sys_User AS r ON r.UserId = dep.DelegatedRepresentative Where 1=1"; // 2.获取当前分页数据 List listStr = new List(); @@ -99,13 +108,11 @@ namespace FineUIPro.Web.BaseInfo /// protected void btnDelete_Click(object sender, EventArgs e) { - BLL.DepartService.DeleteDepartById(hfFormID.Text); BLL.Sys_LogService.AddLog(this.CurrUser.UserId, "Delete department"); // 重新绑定表格,并模拟点击[新增按钮] BindGrid(); //PageContext.RegisterStartupScript("onNewButtonClick();"); - } /// /// 右键删除事件 @@ -170,6 +177,18 @@ namespace FineUIPro.Web.BaseInfo { this.drpDepartLeader.SelectedValue = depart.DepartLeader; } + else + { + this.drpDepartLeader.SelectedIndex = 0; + } + if (!string.IsNullOrEmpty(depart.DelegatedRepresentative)) + { + this.drpDelegatedRepresentative.SelectedValue = depart.DelegatedRepresentative; + } + else + { + this.drpDelegatedRepresentative.SelectedIndex = 0; + } hfFormID.Text = Id; this.btnDelete.Enabled = true; } @@ -197,6 +216,10 @@ namespace FineUIPro.Web.BaseInfo { depart.DepartLeader = this.drpDepartLeader.SelectedValue; } + if (this.drpDelegatedRepresentative.SelectedValue!=BLL.Const._Null) + { + depart.DelegatedRepresentative = this.drpDelegatedRepresentative.SelectedValue; + } if (string.IsNullOrEmpty(strRowID)) { depart.DepartId = SQLHelper.GetNewID(typeof(Model.Base_Depart)); @@ -264,6 +287,7 @@ namespace FineUIPro.Web.BaseInfo this.txtDepartCode.Text = string.Empty; this.txtDepartName.Text = string.Empty; this.drpDepartLeader.SelectedValue = Const._Null; + this.drpDelegatedRepresentative.SelectedValue= Const._Null; this.txtRemark.Text = string.Empty; this.btnDelete.Enabled = false; } @@ -397,7 +421,6 @@ namespace FineUIPro.Web.BaseInfo { errorInfos += (i + 2) + "Line, [Manager] cannot be empty!
"; } - depList.Add(d); #endregion } diff --git a/FCL/FineUIPro.Web/BaseInfo/Department.aspx.designer.cs b/FCL/FineUIPro.Web/BaseInfo/Department.aspx.designer.cs index 8911c26..8b6aba7 100644 --- a/FCL/FineUIPro.Web/BaseInfo/Department.aspx.designer.cs +++ b/FCL/FineUIPro.Web/BaseInfo/Department.aspx.designer.cs @@ -7,11 +7,13 @@ // //------------------------------------------------------------------------------ -namespace FineUIPro.Web.BaseInfo { - - - public partial class Department { - +namespace FineUIPro.Web.BaseInfo +{ + + + public partial class Department + { + /// /// form1 控件。 /// @@ -20,7 +22,7 @@ namespace FineUIPro.Web.BaseInfo { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::System.Web.UI.HtmlControls.HtmlForm form1; - + /// /// PageManager1 控件。 /// @@ -29,7 +31,7 @@ namespace FineUIPro.Web.BaseInfo { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.PageManager PageManager1; - + /// /// Panel1 控件。 /// @@ -38,7 +40,7 @@ namespace FineUIPro.Web.BaseInfo { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Panel Panel1; - + /// /// Grid1 控件。 /// @@ -47,7 +49,7 @@ namespace FineUIPro.Web.BaseInfo { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Grid Grid1; - + /// /// Toolbar2 控件。 /// @@ -56,7 +58,7 @@ namespace FineUIPro.Web.BaseInfo { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Toolbar Toolbar2; - + /// /// txtDepCode 控件。 /// @@ -65,7 +67,7 @@ namespace FineUIPro.Web.BaseInfo { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.TextBox txtDepCode; - + /// /// ToolbarFill2 控件。 /// @@ -74,7 +76,7 @@ namespace FineUIPro.Web.BaseInfo { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.ToolbarFill ToolbarFill2; - + /// /// fuAttachUrl 控件。 /// @@ -83,7 +85,7 @@ namespace FineUIPro.Web.BaseInfo { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.FileUpload fuAttachUrl; - + /// /// hdFileName 控件。 /// @@ -92,7 +94,7 @@ namespace FineUIPro.Web.BaseInfo { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.HiddenField hdFileName; - + /// /// btnImport 控件。 /// @@ -101,7 +103,7 @@ namespace FineUIPro.Web.BaseInfo { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Button btnImport; - + /// /// btnDownLoad 控件。 /// @@ -110,7 +112,7 @@ namespace FineUIPro.Web.BaseInfo { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Button btnDownLoad; - + /// /// ToolbarSeparator1 控件。 /// @@ -119,7 +121,7 @@ namespace FineUIPro.Web.BaseInfo { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.ToolbarSeparator ToolbarSeparator1; - + /// /// ToolbarText1 控件。 /// @@ -128,7 +130,7 @@ namespace FineUIPro.Web.BaseInfo { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.ToolbarText ToolbarText1; - + /// /// ddlPageSize 控件。 /// @@ -137,7 +139,7 @@ namespace FineUIPro.Web.BaseInfo { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.DropDownList ddlPageSize; - + /// /// SimpleForm1 控件。 /// @@ -146,7 +148,7 @@ namespace FineUIPro.Web.BaseInfo { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.SimpleForm SimpleForm1; - + /// /// hfFormID 控件。 /// @@ -155,7 +157,7 @@ namespace FineUIPro.Web.BaseInfo { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.HiddenField hfFormID; - + /// /// txtDepartCode 控件。 /// @@ -164,7 +166,7 @@ namespace FineUIPro.Web.BaseInfo { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.TextBox txtDepartCode; - + /// /// txtDepartName 控件。 /// @@ -173,7 +175,7 @@ namespace FineUIPro.Web.BaseInfo { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.TextBox txtDepartName; - + /// /// drpDepartLeader 控件。 /// @@ -182,7 +184,16 @@ namespace FineUIPro.Web.BaseInfo { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.DropDownList drpDepartLeader; - + + /// + /// drpDelegatedRepresentative 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.DropDownList drpDelegatedRepresentative; + /// /// txtRemark 控件。 /// @@ -191,7 +202,7 @@ namespace FineUIPro.Web.BaseInfo { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.TextArea txtRemark; - + /// /// Toolbar1 控件。 /// @@ -200,7 +211,7 @@ namespace FineUIPro.Web.BaseInfo { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Toolbar Toolbar1; - + /// /// btnNew 控件。 /// @@ -209,7 +220,7 @@ namespace FineUIPro.Web.BaseInfo { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Button btnNew; - + /// /// btnDelete 控件。 /// @@ -218,7 +229,7 @@ namespace FineUIPro.Web.BaseInfo { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Button btnDelete; - + /// /// ToolbarFill1 控件。 /// @@ -227,7 +238,7 @@ namespace FineUIPro.Web.BaseInfo { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.ToolbarFill ToolbarFill1; - + /// /// btnSave 控件。 /// @@ -236,7 +247,7 @@ namespace FineUIPro.Web.BaseInfo { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Button btnSave; - + /// /// Menu1 控件。 /// @@ -245,7 +256,7 @@ namespace FineUIPro.Web.BaseInfo { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Menu Menu1; - + /// /// btnMenuEdit 控件。 /// @@ -254,7 +265,7 @@ namespace FineUIPro.Web.BaseInfo { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.MenuButton btnMenuEdit; - + /// /// btnMenuDelete 控件。 /// diff --git a/FCL/FineUIPro.Web/ContractorQuality/IncidentInvestigationEdit.aspx.cs b/FCL/FineUIPro.Web/ContractorQuality/IncidentInvestigationEdit.aspx.cs index a4a8488..273b0a7 100644 --- a/FCL/FineUIPro.Web/ContractorQuality/IncidentInvestigationEdit.aspx.cs +++ b/FCL/FineUIPro.Web/ContractorQuality/IncidentInvestigationEdit.aspx.cs @@ -1183,7 +1183,7 @@ namespace FineUIPro.Web.ContractorQuality pun.UserDepStartDate = DateTime.Now;//用户部门审批到达时间 pun.Pause = false;//如果审核通过,取消暂停 - #region 主协调员审批通过邮件:发送给部门经理,抄送流程经办人 + #region 主协调员审批通过邮件:如果部门有部门代理人,发送给部门代理人,抄送给部门经理及流程经办人;如果没有部门代理人,发送给部门经理,抄送给流程经办人 Model.EmailPop pops = Funs.DB.EmailPop.FirstOrDefault(x => x.EmailID == BLL.Const.EmailPopId); if (pops == null) { @@ -1196,31 +1196,56 @@ namespace FineUIPro.Web.ContractorQuality var emailTemplate = Funs.DB.SendEmailTemplate.Where(x => x.EmailName.Contains("主协调员填写完成后审批通过通知")); if (emailTemplate.Count() > 0) { - string departLeader = string.Empty; + string delegatedRepresentative = string.Empty;//部门代理人 + string departmentLeader = string.Empty;//部门经理 var depart = BLL.DepartService.GetDepartById(drpUserDep.SelectedValue); if (depart != null) { - departLeader = depart.DepartLeader; + delegatedRepresentative = depart.DelegatedRepresentative; + departmentLeader = depart.DepartLeader; } - if (!string.IsNullOrEmpty(departLeader)) + if (!string.IsNullOrEmpty(delegatedRepresentative)) { var userTo = from x in Funs.DB.Sys_User - where x.UserId.Contains(departLeader) && x.Email != null && x.Email != "" + where x.UserId.Contains(delegatedRepresentative) && x.Email != null && x.Email != "" select x; if (userTo != null) { mailTo = userTo.Select(x => x.Email).ToArray(); } - } - var userCc = from x in Funs.DB.View_EMail_UserTo - where ((x.PunishmentId == this.PunishmentId && x.AuditDate != null) || x.UserId.Contains(pun.Violation_Inspector)) - && x.Email != null && x.Email != "" - select x; - if (userCc != null) - { - mailCC = userCc.Select(x => x.Email).Distinct().ToArray(); + var userCc = from x in Funs.DB.View_EMail_UserTo + where ((x.PunishmentId == this.PunishmentId && x.AuditDate != null) || x.UserId.Contains(pun.Violation_Inspector) || x.UserId.Contains(departmentLeader)) + && x.Email != null && x.Email != "" + select x; + if (userCc != null) + { + mailCC = userCc.Select(x => x.Email).Distinct().ToArray(); + } } + else + { + if(!string.IsNullOrEmpty(departmentLeader)) + { + var userTo = from x in Funs.DB.Sys_User + where x.UserId.Contains(departmentLeader) && x.Email != null && x.Email != "" + select x; + if (userTo != null) + { + mailTo = userTo.Select(x => x.Email).ToArray(); + } + } + + var userCc = from x in Funs.DB.View_EMail_UserTo + where ((x.PunishmentId == this.PunishmentId && x.AuditDate != null) || x.UserId.Contains(pun.Violation_Inspector)) + && x.Email != null && x.Email != "" + select x; + if (userCc != null) + { + mailCC = userCc.Select(x => x.Email).Distinct().ToArray(); + } + } + if (mailTo.Length > 0) { NameValueCollection myPram = new NameValueCollection(); diff --git a/FCL/FineUIPro.Web/Evaluation/EvaluationNew.aspx.cs b/FCL/FineUIPro.Web/Evaluation/EvaluationNew.aspx.cs index 0fe346e..a55ff03 100644 --- a/FCL/FineUIPro.Web/Evaluation/EvaluationNew.aspx.cs +++ b/FCL/FineUIPro.Web/Evaluation/EvaluationNew.aspx.cs @@ -834,7 +834,7 @@ namespace FineUIPro.Web.Evaluation if (punish != null) { punish.IsUserEvaluated = true; - punish.IsUserEvaluatedTime = DateTime.Now; + //punish.IsUserEvaluatedTime = DateTime.Now; Funs.DB.SubmitChanges(); } @@ -966,7 +966,7 @@ namespace FineUIPro.Web.Evaluation if (punish != null) { punish.IsDepEvaluated = true; - punish.IsDepEvaluatedTime = DateTime.Now; + //punish.IsDepEvaluatedTime = DateTime.Now; Funs.DB.SubmitChanges(); } } diff --git a/FCL/FineUIPro.Web/Global.asax.cs b/FCL/FineUIPro.Web/Global.asax.cs index f50e4d3..f1f3dab 100644 --- a/FCL/FineUIPro.Web/Global.asax.cs +++ b/FCL/FineUIPro.Web/Global.asax.cs @@ -47,7 +47,7 @@ } //每月(2,5,8,10)邮件自动发送给SSR提交人员和主协调人及合同员,用户代表等评价 - if ((DateTime.Now.Day == 2 || DateTime.Now.Day == 5 || DateTime.Now.Day == 8 || DateTime.Now.Day == 10) && DateTime.Now.Hour == 9) + if ((DateTime.Now.Day == 2 || DateTime.Now.Day == 5 || DateTime.Now.Day == 8 || DateTime.Now.Day == 10) && DateTime.Now.Hour == 8) { System.Timers.Timer aTimer = new System.Timers.Timer(); aTimer.Elapsed += new System.Timers.ElapsedEventHandler(aTimer_Elapsed); @@ -1754,9 +1754,9 @@ } #endregion - # region 承包商报告主协调员提交后通知承包商联系人,若无异议或3天未操作,发送邮件给用户部门经理 + # region 承包商报告主协调员提交后通知承包商联系人,若无异议或3天未操作,发送邮件给用户部门(有部门代理人发送给部门代理人抄送给部门经理,无部门代理人发送则发送给部门经理) /// - /// 承包商报告主协调员提交后通知承包商联系人,若无异议或3天未操作,发送邮件给用户部门经理 + /// 承包商报告主协调员提交后通知承包商联系人,若无异议或3天未操作,发送邮件给用户部门(有部门代理人发送给部门代理人抄送给部门经理,无部门代理人发送则发送给部门经理) /// /// /// @@ -1791,6 +1791,7 @@ string[] mailCC = null; string resultMessage = ""; string departLeader = string.Empty; + string delegatedRepresentative = string.Empty; var emailTemplate = Funs.DB.SendEmailTemplate.Where(x => x.EmailName.Contains("主协调员填写完成后审批通过通知")); if (emailTemplate.Count() > 0) @@ -1799,26 +1800,50 @@ if (depart != null) { departLeader = depart.DepartLeader; + delegatedRepresentative = depart.DelegatedRepresentative; } - if (!string.IsNullOrEmpty(departLeader)) + if (!string.IsNullOrEmpty(delegatedRepresentative)) { var userTo = from x in Funs.DB.Sys_User - where x.UserId.Contains(departLeader) && x.Email != null && x.Email != "" + where x.UserId.Contains(delegatedRepresentative) && x.Email != null && x.Email != "" select x; if (userTo != null) { mailTo = userTo.Select(x => x.Email).ToArray(); } - } - var userCc = from x in Funs.DB.View_EMail_UserTo - where ((x.PunishmentId == pun.PunishmentId && x.AuditDate != null) || x.UserId.Contains(pun.Violation_Inspector)) - && x.Email != null && x.Email != "" - select x; - if (userCc != null) - { - mailCC = userCc.Select(x => x.Email).Distinct().ToArray(); + var userCc = from x in Funs.DB.View_EMail_UserTo + where ((x.PunishmentId == pun.PunishmentId && x.AuditDate != null) || x.UserId.Contains(pun.Violation_Inspector) || x.UserId.Contains(departLeader)) + && x.Email != null && x.Email != "" + select x; + if (userCc != null) + { + mailCC = userCc.Select(x => x.Email).Distinct().ToArray(); + } } + else + { + if (!string.IsNullOrEmpty(departLeader)) + { + var userTo = from x in Funs.DB.Sys_User + where x.UserId.Contains(departLeader) && x.Email != null && x.Email != "" + select x; + if (userTo != null) + { + mailTo = userTo.Select(x => x.Email).ToArray(); + } + } + + var userCc = from x in Funs.DB.View_EMail_UserTo + where ((x.PunishmentId == pun.PunishmentId && x.AuditDate != null) || x.UserId.Contains(pun.Violation_Inspector)) + && x.Email != null && x.Email != "" + select x; + if (userCc != null) + { + mailCC = userCc.Select(x => x.Email).Distinct().ToArray(); + } + } + if (mailTo.Length > 0) { NameValueCollection myPram = new NameValueCollection(); diff --git a/FCL/Model/Model.cs b/FCL/Model/Model.cs index 236e49d..3b814be 100644 --- a/FCL/Model/Model.cs +++ b/FCL/Model/Model.cs @@ -1739,6 +1739,8 @@ namespace Model private string _DepartLeader; + private string _DelegatedRepresentative; + private EntitySet _EMC_CTSalesContracts; private EntitySet _Depart; @@ -1763,6 +1765,8 @@ namespace Model partial void OnRemarkChanged(); partial void OnDepartLeaderChanging(string value); partial void OnDepartLeaderChanged(); + partial void OnDelegatedRepresentativeChanging(string value); + partial void OnDelegatedRepresentativeChanged(); #endregion public Base_Depart() @@ -1875,6 +1879,26 @@ namespace Model } } + [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DelegatedRepresentative", DbType="NVarChar(50)")] + public string DelegatedRepresentative + { + get + { + return this._DelegatedRepresentative; + } + set + { + if ((this._DelegatedRepresentative != value)) + { + this.OnDelegatedRepresentativeChanging(value); + this.SendPropertyChanging(); + this._DelegatedRepresentative = value; + this.SendPropertyChanged("DelegatedRepresentative"); + this.OnDelegatedRepresentativeChanged(); + } + } + } + [global::System.Data.Linq.Mapping.AssociationAttribute(Name="FK_EMC_CTSalesContracts_Base_Depart", Storage="_EMC_CTSalesContracts", ThisKey="DepartId", OtherKey="DeptOfRevenue", DeleteRule="NO ACTION")] public EntitySet EMC_CTSalesContracts { From 278b09799d1522a83abfd63ecdde0c4857d04c0b Mon Sep 17 00:00:00 2001 From: wendy <408182087@qq.com> Date: Sat, 11 Oct 2025 09:37:04 +0800 Subject: [PATCH 09/10] 20251011 --- FCL/FineUIPro.Web/Global.asax.cs | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/FCL/FineUIPro.Web/Global.asax.cs b/FCL/FineUIPro.Web/Global.asax.cs index f1f3dab..0717b07 100644 --- a/FCL/FineUIPro.Web/Global.asax.cs +++ b/FCL/FineUIPro.Web/Global.asax.cs @@ -66,9 +66,9 @@ aTimer.Interval = 1000 * 60 * 30; aTimer.Enabled = true; aTimer.Start(); - } + // 过期提示 //var foList = from x in Funs.DB.FC_SESRelatedData // where x.Expire_Date != null @@ -91,7 +91,7 @@ { System.Timers.Timer aTimer = new System.Timers.Timer(); aTimer.Elapsed += new System.Timers.ElapsedEventHandler(aTimer_FC_AutoSend); - //4小时执行一次 + //1小时执行一次 aTimer.Interval = 1000 * 60 * 60; aTimer.Enabled = true; aTimer.Start(); @@ -102,7 +102,7 @@ { System.Timers.Timer fcTimer = new System.Timers.Timer(); fcTimer.Elapsed += new System.Timers.ElapsedEventHandler(FC_AutoStatus); - //120分钟执行一次 + //60分钟执行一次 fcTimer.Interval = 1000 * 60 * 60; fcTimer.Enabled = true; fcTimer.Start(); @@ -1771,12 +1771,16 @@ { foreach (var pun in punishments) { - //新增用户部门操作流程 - Model.EMC_PunishmentAudit newAudit = new EMC_PunishmentAudit(); - newAudit.AuditId = SQLHelper.GetNewID(typeof(Model.EMC_PunishmentAudit)); - newAudit.PunishmentId = pun.PunishmentId; - newAudit.AuditMan = pun.UserDep; - BLL.PunishmentAuditService.AddPunishmentAudit(newAudit); + var audit = BLL.PunishmentAuditService.GetAuditByAuditMan(pun.PunishmentId, pun.UserDep); + if (audit == null) + { + //新增用户部门操作流程 + Model.EMC_PunishmentAudit newAudit = new EMC_PunishmentAudit(); + newAudit.AuditId = SQLHelper.GetNewID(typeof(Model.EMC_PunishmentAudit)); + newAudit.PunishmentId = pun.PunishmentId; + newAudit.AuditMan = pun.UserDep; + BLL.PunishmentAuditService.AddPunishmentAudit(newAudit); + } List userList = new List(); EmailPop pops = Funs.DB.EmailPop.FirstOrDefault(x => x.EmailID == BLL.Const.EmailPopId); From 4980555679c1597d2d475aaa7baa672952ea9e29 Mon Sep 17 00:00:00 2001 From: wendy <408182087@qq.com> Date: Mon, 13 Oct 2025 08:36:50 +0800 Subject: [PATCH 10/10] 20251013 --- FCL/FineUIPro.Web/FineUIPro.Web.csproj.user | 2 +- FCL/FineUIPro.Web/Global.asax.cs | 2 +- FCL/FineUIPro.Web/Web.config | 2 +- FCL/WebApi/WebApi.csproj.user | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/FCL/FineUIPro.Web/FineUIPro.Web.csproj.user b/FCL/FineUIPro.Web/FineUIPro.Web.csproj.user index accb770..fcf3204 100644 --- a/FCL/FineUIPro.Web/FineUIPro.Web.csproj.user +++ b/FCL/FineUIPro.Web/FineUIPro.Web.csproj.user @@ -2,7 +2,7 @@ ShowAllFiles - Release|Any CPU + Debug|Any CPU true diff --git a/FCL/FineUIPro.Web/Global.asax.cs b/FCL/FineUIPro.Web/Global.asax.cs index 0717b07..55825f5 100644 --- a/FCL/FineUIPro.Web/Global.asax.cs +++ b/FCL/FineUIPro.Web/Global.asax.cs @@ -200,7 +200,7 @@ } //承包商报告主协调员提交后通知承包商联系人,若无异议或3天未操作,发送邮件给用户部门经理 - if (DateTime.Now.Hour == 9) + if (DateTime.Now.Hour == 10) { System.Timers.Timer fcTimer = new System.Timers.Timer(); fcTimer.Elapsed += new System.Timers.ElapsedEventHandler(PunTimer_PunishmentTimer); diff --git a/FCL/FineUIPro.Web/Web.config b/FCL/FineUIPro.Web/Web.config index 8701bac..0d634cd 100644 --- a/FCL/FineUIPro.Web/Web.config +++ b/FCL/FineUIPro.Web/Web.config @@ -55,7 +55,7 @@ - + diff --git a/FCL/WebApi/WebApi.csproj.user b/FCL/WebApi/WebApi.csproj.user index 643f3e5..ca0d73e 100644 --- a/FCL/WebApi/WebApi.csproj.user +++ b/FCL/WebApi/WebApi.csproj.user @@ -8,7 +8,7 @@ - Release|Any CPU + Debug|Any CPU