diff --git a/SGGL/BLL/BLL.csproj b/SGGL/BLL/BLL.csproj index 26ce9b36..98079fd0 100644 --- a/SGGL/BLL/BLL.csproj +++ b/SGGL/BLL/BLL.csproj @@ -310,6 +310,7 @@ + diff --git a/SGGL/BLL/Common/Const.cs b/SGGL/BLL/Common/Const.cs index e6c00786..55dd6399 100644 --- a/SGGL/BLL/Common/Const.cs +++ b/SGGL/BLL/Common/Const.cs @@ -4188,7 +4188,7 @@ namespace BLL public const string MajorPlanApprovalMenuId = "fd116c94-714b-4b92-a3c9-cc83d358e2b3"; /// - /// 设计交底管理 + /// 施工技术交底管理 /// public const string ConTechnologyDisclosureMenuId = "A16CFA9D-2783-4573-95F9-EBA2B682B7EA"; diff --git a/SGGL/BLL/Common/Funs.cs b/SGGL/BLL/Common/Funs.cs index b2715e7a..18bf3752 100644 --- a/SGGL/BLL/Common/Funs.cs +++ b/SGGL/BLL/Common/Funs.cs @@ -95,8 +95,11 @@ namespace BLL /// public static string CNCECPath { - get; - set; + get + { + var path = BLL.ServerService.GetQHSEUrl(); + return path; + } } public static string SGGLUrl { diff --git a/SGGL/BLL/DCGL/ServerCheck/DCGLCheckNoticeItemService.cs b/SGGL/BLL/DCGL/ServerCheck/DCGLCheckNoticeItemService.cs new file mode 100644 index 00000000..31313172 --- /dev/null +++ b/SGGL/BLL/DCGL/ServerCheck/DCGLCheckNoticeItemService.cs @@ -0,0 +1,39 @@ +using Model; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BLL +{ + /// + /// 督查检查整改明细表 + /// + public static class DCGLCheckNoticeItemService + { + /// + /// 根据主键获取督查检查整改明细信息 + /// + /// + /// + public static Model.DCGL_Check_CheckInfo_TableNoticeItem GetCheckNoticeItemByCheckNoticeItemId(string checkNoticeItemId) + { + return Funs.DB.DCGL_Check_CheckInfo_TableNoticeItem.FirstOrDefault(e => e.ID == checkNoticeItemId); + } + + /// + /// 添加督查检查整改明细信息 + /// + /// + public static void UpdateCheckNoticeItem(Model.DCGL_Check_CheckInfo_TableNoticeItem CheckNoticeItem) + { + var newCheckNoticeItem = Funs.DB.DCGL_Check_CheckInfo_TableNoticeItem.FirstOrDefault(x => x.ID == CheckNoticeItem.ID); + if (newCheckNoticeItem != null) + { + newCheckNoticeItem.Situation = CheckNoticeItem.Situation; + Funs.DB.SubmitChanges(); + } + } + } +} diff --git a/SGGL/BLL/IDP/IDPDataService.cs b/SGGL/BLL/IDP/IDPDataService.cs index d44227a7..c8bf89b7 100644 --- a/SGGL/BLL/IDP/IDPDataService.cs +++ b/SGGL/BLL/IDP/IDPDataService.cs @@ -681,6 +681,7 @@ namespace BLL if (!string.IsNullOrWhiteSpace(timeStampStr)) { url = $"{url}&lastTimestamp={timeStampStr}"; } if (!string.IsNullOrWhiteSpace(projectCode)) { url = $"{url}&projectCode={projectCode}"; } + ErrLogInfo.WriteLog($"{url}【Cookie】{session.name}={session.value}"); var returndata = BLL.APIGetHttpService.OutsideHttp(url, "GET", null, newToken, null); if (!string.IsNullOrEmpty(returndata)) { @@ -757,7 +758,7 @@ namespace BLL } catch (WebException ex) { - + ErrLogInfo.WriteLog($"【{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}获取IDP质量管理设计图纸】{ex.Message}"); } } @@ -827,6 +828,7 @@ namespace BLL { try { + ErrLogInfo.WriteLog($"【{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}接收保存数字档案馆推送数据】{JsonConvert.SerializeObject(items)}"); string message = string.Empty; int succ = 0; int err = 0; @@ -948,6 +950,7 @@ namespace BLL } catch (WebException ex) { + ErrLogInfo.WriteLog($"【{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}更新蓝图寄出信息】{ex.Message}"); return ex.Message; } } @@ -1024,6 +1027,7 @@ namespace BLL } catch (WebException ex) { + ErrLogInfo.WriteLog($"【{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}更新蓝图打印信息】{ex.Message}"); return ex.Message; } } diff --git a/SGGL/BLL/OpenService/FileInsertService.cs b/SGGL/BLL/OpenService/FileInsertService.cs index 5331491e..2594188f 100644 --- a/SGGL/BLL/OpenService/FileInsertService.cs +++ b/SGGL/BLL/OpenService/FileInsertService.cs @@ -6,11 +6,51 @@ using System.Collections; using System.IO; using System.Web; using System.Text.RegularExpressions; +using System.Net; namespace BLL { public static class FileInsertService { + /// + /// 获取服务器图片转byte + /// + /// + /// + /// + public static List FilePathTransStream(string fileHost, string attachUrl) + { + List bytes = new List(); + var strs = attachUrl.Trim().Split(','); + + try + { + foreach (var fileUrl in strs) + { + string filepath = $"{fileHost}{fileUrl}"; + // 创建WebClient实例 + using (WebClient webClient = new WebClient()) + { + // 下载图片并保存到内存流 + using (MemoryStream ms = new MemoryStream(webClient.DownloadData(filepath))) + { + // 将MemoryStream转换为byte数组 + byte[] imageBytes = ms.ToArray(); + bytes.Add(imageBytes); + //// 使用byte数组(例如,保存到文件或进行其他处理) + //File.WriteAllBytes("localImage.jpg", imageBytes); + } + } + } + } + catch (Exception ex) + { + Console.WriteLine("Error: " + ex.Message); + } + return bytes; + } + + /// /// 获取附件数据流类 /// @@ -45,7 +85,6 @@ namespace BLL } } - /// /// 获取多附件数据流类 /// @@ -63,7 +102,6 @@ namespace BLL { if (strs.Count() > i) { - //string physicalpath = Funs.AttachRootPath; string physicalpath = Funs.RootPath; string fpath = strs[i]; string fullPath = physicalpath + fpath; @@ -107,7 +145,6 @@ namespace BLL } } - /// /// 数据和附件插入到多附件表 /// @@ -149,5 +186,45 @@ namespace BLL } } } + + + /// + /// 数据和附件插入到多附件表【不存实际文件,只存地址】 + /// + public static void InsertAttachFileRecord(string attachFileId, string dataId, string attachSource, string attachUrl) + { + var getAtt = Funs.DB.AttachFile.FirstOrDefault(x => x.AttachFileId == attachFileId); + if (getAtt != null) + { + Funs.DB.AttachFile.DeleteOnSubmit(getAtt); + Funs.DB.SubmitChanges(); + } + //多附件 + var attachFile = Funs.DB.AttachFile.FirstOrDefault(x => x.ToKeyId == dataId); + if (attachFile == null && !string.IsNullOrEmpty(attachSource)) + { + Model.AttachFile newAttachFile = new Model.AttachFile + { + AttachFileId = attachFileId, + ToKeyId = dataId, + AttachSource = attachSource, + AttachUrl = attachUrl + }; + Funs.DB.AttachFile.InsertOnSubmit(newAttachFile); + Funs.DB.SubmitChanges(); + } + else + { + if (attachFile.AttachUrl != attachUrl) + { + ///删除附件文件 + BLL.UploadAttachmentService.DeleteFile(Funs.RootPath, attachFile.AttachUrl); + attachFile.AttachSource = attachSource; + attachFile.AttachUrl = attachUrl; + Funs.DB.SubmitChanges(); + } + } + } + } } diff --git a/SGGL/BLL/PZHGL/GJSX/GJSXMonitorService.cs b/SGGL/BLL/PZHGL/GJSX/GJSXMonitorService.cs index e0ffeee7..d10ee26e 100644 --- a/SGGL/BLL/PZHGL/GJSX/GJSXMonitorService.cs +++ b/SGGL/BLL/PZHGL/GJSX/GJSXMonitorService.cs @@ -24,12 +24,12 @@ namespace BLL //public static Model.SGGLDB db = Funs.DB; /// - /// 关键事项通知提醒责任人 + /// 关键事项新增通知提醒责任人、抄送人 /// - /// /// - public static void GJSXNoticeSendEmail(string userId, string gjsxId) + public static void GJSXNoticeSendEmail(string gjsxId) { + List userIds = new List(); string strSql = $@"select DATEDIFF(DAY, CompleteDate, isnull(CloseDate,getdate())) AS DateDiffDays ,a.GJSXID,a.ProjectId,a.Detail,a.createDate,Base_Project.ProjectName,Base_Unit.UnitName,a.CloseDate,a.IsManypeople,a.CompleteDate,a.AttachUrl @@ -87,17 +87,33 @@ namespace BLL }).ToList(); var gItem = lstOverdue.FirstOrDefault(); - var user = UserService.GetUserByUserId(userId); - if (gItem != null && !string.IsNullOrWhiteSpace(user.Email)) + if (gItem != null) { - MailMessage mail = new MailMessage(); - //邮件主题 - mail.Subject = $"你有新的关键事项了——{gItem.ProjectName}"; - mail.To.Add(user.Email); - //mail.To.Add("test@test.com"); - mail.IsBodyHtml = true;//确保邮件正文被当作HTML解析 - //邮件正文 - string bodyStr = $@" + userIds.Add(gItem.User_AcceptanceUserId); + if (!string.IsNullOrWhiteSpace(gItem.User_CsUserIds)) + { + userIds.AddRange(gItem.User_CsUserIds.Split(',')); + } + foreach (var userId in userIds) + { + var user = UserService.GetUserByUserId(userId); + if (!string.IsNullOrWhiteSpace(user.Email)) + { + MailMessage mail = new MailMessage(); + //邮件主题 + if (userId == gItem.User_AcceptanceUserId) + { + mail.Subject = $"你有新的关键事项了——{gItem.ProjectName}"; + } + else + { + mail.Subject = $"有新的关键事项抄送你了——{gItem.ProjectName}"; + } + mail.To.Add(user.Email); + //mail.To.Add("test@test.com"); + mail.IsBodyHtml = true;//确保邮件正文被当作HTML解析 + //邮件正文 + string bodyStr = $@" + + +

事项申请关闭

+

项目名称:{gItem.ProjectName}

+

事项编号:{gItem.GJSXID}

+

责任单位:{gItem.UnitName}

+

专业:{gItem.CNProfessionalName}

+

事项类别:{gItem.GJSXTypeName}

+

紧急程度:{gItem.QuestionTypeName}

+

事项描述:{gItem.Detail}

+

提出人:{gItem.UserName}

+

责任人:{gItem.User_AcceptanceUserName}

+

跟踪人:{gItem.User_ReceiveUserName}

+

抄送人:{gItem.User_CsUsers}

+

约定完成日期:{gItem.CompleteDate.ToShortDateString()}

+

申请关闭说明:{detail}

+ +

智慧施工管理信息系统

+请点击此处,进入智慧施工管理信息系统,查看事项详情 +

登录账号:{user.Account}

+

登录密码:CWCEC.+身份证号后四位(示例:CWCEC.1234)

+ + +"; + //< p > 登录密码:{ user.RawPassword} + mail.Body = bodyStr; + + try + { + bool send = PushEmail(mail); + } + catch (Exception ex) + { + //ErrLogInfo.WriteLog($"关键事项申请关闭通知提醒责任人;项目名称:{gItem.ProjectName},事项编号:{gItem.GJSXID}", ex); + ErrLogInfo.WriteLog($"【申请关闭通知提醒责任人邮箱提醒异常】邮箱:{user.Email};项目名称:{gItem.ProjectName},事项编号:{gItem.GJSXID};时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")};异常信息:{ex.Message}"); + continue; + } + } + } + } + } + + /// + /// 关键事项驳回申请关闭通知提醒责任人 + /// + /// + /// + public static void GJSXDisallowApplyCloseNoticeSendEmail(string gjsxId, string detail) + { + List userIds = new List(); + string strSql = $@"select + DATEDIFF(DAY, CompleteDate, isnull(CloseDate,getdate())) AS DateDiffDays + ,a.GJSXID,a.ProjectId,a.Detail,a.createDate,Base_Project.ProjectName,Base_Unit.UnitName,a.CloseDate,a.IsManypeople,a.CompleteDate,a.AttachUrl + ,case a.state when 2 then '正在进行' when 3 then '待办' when 0 then '已关闭' when 1 then '开放' end as state + ,CNProfessionalName = STUFF((SELECT ',' + Base_CNProfessional.ProfessionalName FROM dbo.Base_CNProfessional where PATINDEX('%,' + RTRIM(Base_CNProfessional.CNProfessionalId) + ',%', ',' + a.CNProfessional_ID + ',') > 0 FOR XML PATH('')), 1, 1,'') + ,QuestionTypeName = STUFF((SELECT ',' + Base_QuestionType.QuestionTypeName FROM dbo.Base_QuestionType where PATINDEX('%,' + RTRIM(Base_QuestionType.QuestionTypeID) + ',%', ',' + a.QuestionTypeID + ',') > 0 FOR XML PATH('')), 1, 1,'') + ,GJSXTypeName = STUFF((SELECT ',' + Base_GJSXType.GJSXTypeName FROM dbo.Base_GJSXType where PATINDEX('%,' + RTRIM(Base_GJSXType.GJSXTypeID) + ',%', ',' + a.GJSXTypeID + ',') > 0 FOR XML PATH('')), 1, 1,'') + ,a.UserID,b.UserName + --,b.Email as UserEmail + ,a.User_ReceiveID as User_ReceiveUserId + ,User_ReceiveUserName = STUFF((SELECT ',' + p2.UserName FROM dbo.Sys_User as p2 where PATINDEX('%,' + RTRIM(p2.UserId) + ',%', ',' + a.User_ReceiveID + ',') > 0 FOR XML PATH('')), 1, 1,'') + --,User_ReceiveUserEmail = STUFF((SELECT ',' + p2.Email FROM dbo.Sys_User as p2 where PATINDEX('%,' + RTRIM(p2.UserId) + ',%', ',' + a.User_ReceiveID + ',') > 0 FOR XML PATH('')), 1, 1,'') + ,a.user_Acceptance as User_AcceptanceUserId + ,User_AcceptanceUserName = STUFF((SELECT ',' + p2.UserName FROM dbo.Sys_User as p2 where PATINDEX('%,' + RTRIM(p2.UserId) + ',%', ',' + a.user_Acceptance + ',') > 0 FOR XML PATH('')), 1, 1,'') + --,User_AcceptanceUserEmail = STUFF((SELECT ',' + p2.Email FROM dbo.Sys_User as p2 where PATINDEX('%,' + RTRIM(p2.UserId) + ',%', ',' + a.user_Acceptance + ',') > 0 FOR XML PATH('')), 1, 1,'') + ,a.CsUsers as User_CsUserIds + ,User_CsUsers = STUFF((SELECT ',' + p2.UserName FROM dbo.Sys_User as p2 where PATINDEX('%,' + RTRIM(p2.UserId) + ',%', ',' + a.CsUsers + ',') > 0 FOR XML PATH('')), 1, 1,'') + --,User_CsUsersUserEmail = STUFF((SELECT ',' + p2.Email FROM dbo.Sys_User as p2 where PATINDEX('%,' + RTRIM(p2.UserId) + ',%', ',' + a.CsUsers + ',') > 0 FOR XML PATH('')), 1, 1,'') + from GJSX as a + left join Sys_User as b on a.UserId = b.UserId + left join[dbo].[Base_Project] on a.ProjectId = Base_Project.ProjectId + left join[dbo].[Base_Unit] on a.UnitId = Base_Unit.UnitId + where 1=1 and a.GJSXID = '{gjsxId}' "; + + List listStr = new List(); + SqlParameter[] parameter = listStr.ToArray(); + + DataTable table = SQLHelper.GetDataTableRunText(strSql, parameter); + // 使用LINQ将DataTable转换为List + var lstOverdue = table.AsEnumerable().Select(row => new GJSXItem + { + DateDiffDays = Convert.ToInt32(row["DateDiffDays"]), + GJSXID = row["GJSXID"].ToString(), + ProjectId = row["ProjectId"].ToString(), + ProjectName = row["ProjectName"].ToString(), + UnitName = row["UnitName"].ToString(), + Detail = row["Detail"].ToString(), + CNProfessionalName = row["CNProfessionalName"].ToString(), + QuestionTypeName = row["QuestionTypeName"].ToString(), + GJSXTypeName = row["GJSXTypeName"].ToString(), + UserID = row["UserID"].ToString(), + UserName = row["UserName"].ToString(), + //UserEmail = row["UserEmail"].ToString(), + User_ReceiveUserId = row["User_ReceiveUserId"].ToString(), + User_ReceiveUserName = row["User_ReceiveUserName"].ToString(), + //User_ReceiveUserEmail = row["User_ReceiveUserEmail"].ToString(), + User_AcceptanceUserId = row["User_AcceptanceUserId"].ToString(), + User_AcceptanceUserName = row["User_AcceptanceUserName"].ToString(), + //User_AcceptanceUserEmail = row["User_AcceptanceUserEmail"].ToString(), + User_CsUserIds = row["User_CsUserIds"].ToString(), + User_CsUsers = row["User_CsUsers"].ToString(), + //User_CsUsersUserEmail = row["User_CsUsersUserEmail"].ToString(), + CompleteDate = Convert.ToDateTime(row["CompleteDate"].ToString()) + }).ToList(); + + var gItem = lstOverdue.FirstOrDefault(); + if (gItem != null) + { + userIds.Add(gItem.User_AcceptanceUserId); + foreach (var userId in userIds) + { + var user = UserService.GetUserByUserId(userId); + if (!string.IsNullOrWhiteSpace(user.Email)) + { + MailMessage mail = new MailMessage(); + //邮件主题 + mail.Subject = $"有事项申请关闭被驳回了——{gItem.ProjectName}"; + mail.To.Add(user.Email); + //mail.To.Add("test@test.com"); + mail.IsBodyHtml = true;//确保邮件正文被当作HTML解析 + //邮件正文 + string bodyStr = $@" + + + + +

事项申请关闭被驳回

+

项目名称:{gItem.ProjectName}

+

事项编号:{gItem.GJSXID}

+

责任单位:{gItem.UnitName}

+

专业:{gItem.CNProfessionalName}

+

事项类别:{gItem.GJSXTypeName}

+

紧急程度:{gItem.QuestionTypeName}

+

事项描述:{gItem.Detail}

+

提出人:{gItem.UserName}

+

责任人:{gItem.User_AcceptanceUserName}

+

跟踪人:{gItem.User_ReceiveUserName}

+

抄送人:{gItem.User_CsUsers}

+

约定完成日期:{gItem.CompleteDate.ToShortDateString()}

+

驳回申请关闭说明:{detail}

+ +

智慧施工管理信息系统

+请点击此处,进入智慧施工管理信息系统,查看事项详情 +

登录账号:{user.Account}

+

登录密码:CWCEC.+身份证号后四位(示例:CWCEC.1234)

+ + +"; + //< p > 登录密码:{ user.RawPassword} + mail.Body = bodyStr; + + try + { + bool send = PushEmail(mail); + } + catch (Exception ex) + { + //ErrLogInfo.WriteLog($"关键事项申请关闭驳回通知提醒责任人;项目名称:{gItem.ProjectName},事项编号:{gItem.GJSXID}", ex); + ErrLogInfo.WriteLog($"【驳回申请关闭通知提醒责任人邮箱提醒异常】邮箱:{user.Email};项目名称:{gItem.ProjectName},事项编号:{gItem.GJSXID};时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")};异常信息:{ex.Message}"); + continue; + } + } } } } @@ -168,11 +441,11 @@ namespace BLL ,a.CsUsers as User_CsUserIds ,User_CsUsers = STUFF((SELECT ',' + p2.UserName FROM dbo.Sys_User as p2 where PATINDEX('%,' + RTRIM(p2.UserId) + ',%', ',' + a.CsUsers + ',') > 0 FOR XML PATH('')), 1, 1,'') --,User_CsUsersUserEmail = STUFF((SELECT ',' + p2.Email FROM dbo.Sys_User as p2 where PATINDEX('%,' + RTRIM(p2.UserId) + ',%', ',' + a.CsUsers + ',') > 0 FOR XML PATH('')), 1, 1,'') - from GJSX as a + from GJSX as a left join Sys_User as b on a.UserId = b.UserId left join[dbo].[Base_Project] on a.ProjectId = Base_Project.ProjectId left join[dbo].[Base_Unit] on a.UnitId = Base_Unit.UnitId - where 1=1 and a.state<>'0' and GETDATE()>a.CompleteDate "; + where 1=1 and Base_Project.ProjectState=1 and a.state<>'0' and a.state<>'1' and (GETDATE()>a.CompleteDate or DATEDIFF(DAY, CompleteDate, isnull(CloseDate,getdate()))=-7 or DATEDIFF(DAY, CompleteDate, isnull(CloseDate,getdate()))=-6 or DATEDIFF(DAY, CompleteDate, isnull(CloseDate,getdate()))=-1 ) "; List listStr = new List(); SqlParameter[] parameter = listStr.ToArray(); @@ -211,6 +484,7 @@ namespace BLL //获取有邮箱的用户 var userIds = BLL.UserService.GetUserHaveEmailList(); + userIds = userIds.Where(x => x.UserName == "张邦兴" || x.UserName == "申银行").ToList(); if (userIds.Any() && lstOverdue.Any()) { //int allnum = 0; @@ -223,14 +497,14 @@ namespace BLL { string projectName = pro.ProjectName; - #region 提醒事项相关人员 + #region 事项预警提醒相关人员 foreach (var user in userIds) { //if (allnum > 100) { break; } MailMessage mail = new MailMessage(); //邮件主题 - mail.Subject = $"关键事项超期预警提醒——{projectName}"; + mail.Subject = $"关键事项预警提醒——{projectName}"; mail.To.Add(user.Email); //mail.To.Add("test@test.com"); mail.IsBodyHtml = true;//确保邮件正文被当作HTML解析 @@ -243,27 +517,27 @@ namespace BLL { foreach (var item in acceptanceItems) { - tbodyStr.Append($"{index}本人负责{item.UnitName}{item.GJSXID}{item.Detail}{item.GJSXTypeName}{item.UserName}{item.User_AcceptanceUserName}{item.CompleteDate.ToShortDateString()}{(item.DateDiffDays > 0 ? item.DateDiffDays.ToString() : "半")}"); + tbodyStr.Append($"{index}本人负责{item.UnitName}{item.GJSXID}{item.Detail}{item.GJSXTypeName}{item.QuestionTypeName}{item.UserName}{item.User_AcceptanceUserName}{item.CompleteDate.ToShortDateString()}{(item.DateDiffDays > 0 ? item.DateDiffDays.ToString() : item.DateDiffDays < -1 ? "还有一周就逾期了" : "半")}"); index++; } } //发起人为本人 - var userItems = lstProjectOverdue.Where(x => x.UserID == user.UserId).OrderByDescending(x => x.DateDiffDays).ToList(); + var userItems = lstProjectOverdue.Where(x => x.UserID == user.UserId && x.DateDiffDays > -1).OrderByDescending(x => x.DateDiffDays).ToList(); if (userItems.Any()) { foreach (var item in userItems) { - tbodyStr.Append($"{index}本人发起{item.UnitName}{item.GJSXID}{item.Detail}{item.GJSXTypeName}{item.UserName}{item.User_AcceptanceUserName}{item.CompleteDate.ToShortDateString()}{(item.DateDiffDays > 0 ? item.DateDiffDays.ToString() : "半")}"); + tbodyStr.Append($"{index}本人发起{item.UnitName}{item.GJSXID}{item.Detail}{item.GJSXTypeName}{item.QuestionTypeName}{item.UserName}{item.User_AcceptanceUserName}{item.CompleteDate.ToShortDateString()}{(item.DateDiffDays > 0 ? item.DateDiffDays.ToString() : "半")}"); index++; } } //跟踪人为本人--x.User_ReceiveUserId != null && x.User_ReceiveUserId != "" && - var receiveItems = lstProjectOverdue.Where(x => x.User_ReceiveUserId.Contains(user.UserId)).OrderByDescending(x => x.DateDiffDays).ToList(); + var receiveItems = lstProjectOverdue.Where(x => x.User_ReceiveUserId.Contains(user.UserId) && x.DateDiffDays > -1).OrderByDescending(x => x.DateDiffDays).ToList(); if (receiveItems.Any()) { foreach (var item in receiveItems) { - tbodyStr.Append($"{index}本人跟踪{item.UnitName}{item.GJSXID}{item.Detail}{item.GJSXTypeName}{item.UserName}{item.User_AcceptanceUserName}{item.CompleteDate.ToShortDateString()}{(item.DateDiffDays > 0 ? item.DateDiffDays.ToString() : "半")}"); + tbodyStr.Append($"{index}本人跟踪{item.UnitName}{item.GJSXID}{item.Detail}{item.GJSXTypeName}{item.QuestionTypeName}{item.UserName}{item.User_AcceptanceUserName}{item.CompleteDate.ToShortDateString()}{(item.DateDiffDays > 0 ? item.DateDiffDays.ToString() : "半")}"); index++; } } @@ -273,7 +547,7 @@ namespace BLL { foreach (var item in csUserItems) { - tbodyStr.Append($"{index}抄送本人{item.UnitName}{item.GJSXID}{item.Detail}{item.GJSXTypeName}{item.UserName}{item.User_AcceptanceUserName}{item.CompleteDate.ToShortDateString()}{(item.DateDiffDays > 0 ? item.DateDiffDays.ToString() : "半")}"); + tbodyStr.Append($"{index}抄送本人{item.UnitName}{item.GJSXID}{item.Detail}{item.GJSXTypeName}{item.QuestionTypeName}{item.UserName}{item.User_AcceptanceUserName}{item.CompleteDate.ToShortDateString()}{(item.DateDiffDays > 0 ? item.DateDiffDays.ToString() : item.DateDiffDays < -1 ? "还有一周就逾期了" : "半")}"); index++; } } @@ -293,7 +567,7 @@ namespace BLL -

关键事项超期预警提醒

+

关键事项预警提醒

请点击此处,查看详细信息,并及时处置关闭 @@ -304,6 +578,7 @@ namespace BLL + @@ -315,15 +590,23 @@ namespace BLL mail.Body = bodyStr; if (index > 1) { - //allnum++; - bool send = PushEmail(mail); - //Thread.Sleep(1000); //暂停1秒 + try + { + //allnum++; + bool send = PushEmail(mail); + //Thread.Sleep(1000); //暂停1秒 + } + catch (Exception ex) + { + ErrLogInfo.WriteLog($"【邮箱提醒异常】邮箱:{user.Email};时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")};异常信息:{ex.Message}"); + continue; + } } } #endregion - #region 提醒项目主管和项目经理 + #region 事项逾期提醒项目主管和项目经理 var projectSupervisors = ProjectUserService.GetProjectUserByRoleId(Const.ProjectSupervisor); var projectManagers = ProjectUserService.GetProjectUserByRoleId(Const.ProjectManager); @@ -339,7 +622,7 @@ namespace BLL { MailMessage mail = new MailMessage(); //邮件主题 - mail.Subject = $"关键事项超期预警提醒——{projectName}"; + mail.Subject = $"关键事项逾期提醒——{projectName}"; mail.To.Add(user.Email); //mail.To.Add("test@test.com"); mail.IsBodyHtml = true;//确保邮件正文被当作HTML解析 @@ -349,20 +632,33 @@ namespace BLL int index = 0; if (projectManagerIds.Contains(user.UserId)) { - foreach (var item in lstProjectOverdue) + index = 0; + //超期当日提醒项目经理 + var lstProjectOverdue1 = lstProjectOverdue.Where(x => x.DateDiffDays == 0 || x.DateDiffDays == -1).ToList(); + //超期一周的重要、紧急事项提醒项目经理 + var lstProjectOverdue7 = lstProjectOverdue.Where(x => x.DateDiffDays >= 7 && x.QuestionTypeName != "一般").ToList(); + lstProjectOverdue1.AddRange(lstProjectOverdue7); + foreach (var item in lstProjectOverdue1) { - index++; - tbodyStr.Append($""); + if (!item.User_CsUserIds.Contains(user.UserId)) + { + index++; + tbodyStr.Append($""); + } } } if (projectSupervisorIds.Contains(user.UserId) && !projectManagerIds.Contains(user.UserId)) { - var lstProjectOverdue2 = lstOverdue.Where(x => x.ProjectId == pro.ProjectId && x.DateDiffDays > 13).ToList(); + //超期两周的重要、紧急事项提醒项目主管 + var lstProjectOverdue14 = lstProjectOverdue.Where(x => x.DateDiffDays >= 13).ToList(); index = 0; - foreach (var item in lstProjectOverdue2) + foreach (var item in lstProjectOverdue14) { - index++; - tbodyStr.Append($""); + if (!item.User_CsUserIds.Contains(user.UserId)) + { + index++; + tbodyStr.Append($""); + } } } //邮件正文 @@ -392,6 +688,7 @@ namespace BLL + @@ -403,9 +700,17 @@ namespace BLL mail.Body = bodyStr; if (index > 1) { - //allnum++; - bool send = PushEmail(mail); - //Thread.Sleep(1000); //暂停1秒 + try + { + //allnum++; + bool send = PushEmail(mail); + //Thread.Sleep(1000); //暂停1秒 + } + catch (Exception ex) + { + ErrLogInfo.WriteLog($"【邮箱提醒异常】邮箱:{user.Email};时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")};异常信息:{ex.Message}"); + continue; + } } } diff --git a/SGGL/BLL/SysManage/UserService.cs b/SGGL/BLL/SysManage/UserService.cs index 35131ad9..06d3b907 100644 --- a/SGGL/BLL/SysManage/UserService.cs +++ b/SGGL/BLL/SysManage/UserService.cs @@ -3,6 +3,7 @@ namespace BLL using System.Collections.Generic; using System.IO; using System.Linq; + using System.ServiceModel.Security; using System.Web.UI.WebControls; public static class UserService @@ -390,6 +391,27 @@ namespace BLL return result; } + /// + /// ûIdжûǷά䣬 + /// + /// + /// + public static bool IsUserHaveEmail(string userId, out string userName) + { + bool result = false; + userName = string.Empty; + if (!string.IsNullOrWhiteSpace(userId)) + { + var user = (from x in Funs.DB.Sys_User where x.UserId == userId select x).FirstOrDefault(); + if (user != null) + { + result = !string.IsNullOrWhiteSpace(user.Email); + userName = user.UserName; + } + } + return result; + } + /// /// ûIdȡû /// diff --git a/SGGL/FineUIPro.Web/CQMS/Check/JointCheck.aspx.cs b/SGGL/FineUIPro.Web/CQMS/Check/JointCheck.aspx.cs index 246612f5..e19a2f68 100644 --- a/SGGL/FineUIPro.Web/CQMS/Check/JointCheck.aspx.cs +++ b/SGGL/FineUIPro.Web/CQMS/Check/JointCheck.aspx.cs @@ -367,7 +367,7 @@ namespace FineUIPro.Web.CQMS.Check { if (!string.IsNullOrEmpty(approve.ApproveMan)) { - if (this.CurrUser.UserId == approve.ApproveMan || CurrUser.UserId == Const.sysglyId) + if (approve.ApproveMan.Contains(this.CurrUser.UserId) || CurrUser.UserId == Const.sysglyId) { if (jointCheck.State == BLL.Const.JointCheck_Compile) { diff --git a/SGGL/FineUIPro.Web/CQMS/Check/JointCheckStatistics.aspx.cs b/SGGL/FineUIPro.Web/CQMS/Check/JointCheckStatistics.aspx.cs index 2552265f..4711c842 100644 --- a/SGGL/FineUIPro.Web/CQMS/Check/JointCheckStatistics.aspx.cs +++ b/SGGL/FineUIPro.Web/CQMS/Check/JointCheckStatistics.aspx.cs @@ -60,12 +60,12 @@ namespace FineUIPro.Web.CQMS.Check strSql += " AND UnitId = @UnitId"; listStr.Add(new SqlParameter("@UnitId", this.drpSponsorUnit.SelectedValue)); } - if (!string.IsNullOrEmpty(txtStartTime.Text.Trim())) + if (!string.IsNullOrWhiteSpace(txtStartTime.Text.Trim())) { strSql += " AND CheckDate >= @CheckDate"; listStr.Add(new SqlParameter("@CheckDate", txtStartTime.Text.Trim() + " 00:00:00")); } - if (!string.IsNullOrEmpty(txtEndTime.Text.Trim())) + if (!string.IsNullOrWhiteSpace(txtEndTime.Text.Trim())) { strSql += " AND CheckDate <= @CheckDateE"; listStr.Add(new SqlParameter("@CheckDateE", txtEndTime.Text.Trim() + " 23:59:59")); diff --git a/SGGL/FineUIPro.Web/CQMS/Comprehensive/ConTechnologyDisclosure.aspx b/SGGL/FineUIPro.Web/CQMS/Comprehensive/ConTechnologyDisclosure.aspx index f93100e1..777f90e5 100644 --- a/SGGL/FineUIPro.Web/CQMS/Comprehensive/ConTechnologyDisclosure.aspx +++ b/SGGL/FineUIPro.Web/CQMS/Comprehensive/ConTechnologyDisclosure.aspx @@ -76,6 +76,12 @@ + + + + + @@ -96,16 +102,16 @@ - <%----%> +
事项编号 事项描述 事项类别紧急程度 发起人 责任人 约定完成时间
{index}事项逾期{item.UnitName}{item.GJSXID}{item.Detail}{item.GJSXTypeName}{item.UserName}{item.User_AcceptanceUserName}{item.CompleteDate.ToShortDateString()}{(item.DateDiffDays > 0 ? item.DateDiffDays.ToString() : "半")}
{index}事项逾期{item.UnitName}{item.GJSXID}{item.Detail}{item.GJSXTypeName}{item.QuestionTypeName}{item.UserName}{item.User_AcceptanceUserName}{item.CompleteDate.ToShortDateString()}{(item.DateDiffDays > 0 ? item.DateDiffDays.ToString() : "半")}
{index}事项逾期{item.UnitName}{item.GJSXID}{item.Detail}{item.GJSXTypeName}{item.UserName}{item.User_AcceptanceUserName}{item.CompleteDate.ToShortDateString()}{(item.DateDiffDays > 0 ? item.DateDiffDays.ToString() : "半")}
{index}事项逾期{item.UnitName}{item.GJSXID}{item.Detail}{item.GJSXTypeName}{item.QuestionTypeName}{item.UserName}{item.User_AcceptanceUserName}{item.CompleteDate.ToShortDateString()}{(item.DateDiffDays > 0 ? item.DateDiffDays.ToString() : "半")}
事项编号 事项描述 事项类别紧急程度 发起人 责任人 约定完成时间