using APT.BaseData.Domain.Entities; using APT.BaseData.Domain.Entities.FM; using APT.BaseData.Domain.Enums.PF; using APT.BaseData.Domain.IServices.FM; using APT.Infrastructure.Core; using APT.MS.Domain.Entities.SK; using APT.MS.Domain.Entities.WB; using APT.Utility; using APT.WebApi.Models; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using APT.BaseData.Domain.Enums; using APT.MS.Domain.Enums; namespace APT.PP.WebApi.Controllers.Api { [Route("api/PP/WBController")] [TypeFilter(typeof(CustomActionFilterAttribute))] public class WBController : AuthorizeApiController { IFMNotificationTaskService NotificationTaskService { get; set; } public WBController(IFMNotificationTaskService notificationTaskService) { NotificationTaskService = notificationTaskService; } /// /// 判断跑批时间是否符合 /// /// /// /// /// /// private bool ISTimeOK(DateTime? RUNSETTIME, DateTime dtNow, int minAdvance, int minLaster) { if (RUNSETTIME == null) { return false; } if (RUNSETTIME != null) { if (minAdvance != 0 || minLaster != 0) { //DateTime dtSetTime = Convert.ToDateTime(dtNow.ToString("yyyy") + RUNSETTIME.Value.ToString("-MM-dd HH:mm:ss")); DateTime dtSetTime = Convert.ToDateTime(dtNow.ToString("yyyy-MM-dd") + RUNSETTIME.Value.ToString(" HH:mm:ss")); if (minAdvance > 0 && minLaster > 0) { if (dtNow.AddMinutes(-1 * minAdvance) <= dtSetTime && dtSetTime <= dtNow.AddMinutes(minLaster)) { return true; } } else if (minAdvance > 0) { if (dtNow.AddMinutes(-1 * minAdvance) <= dtSetTime && dtSetTime <= dtNow) { //如果设置时间小于当前时间 并且 设置使劲按大于 当前时间大于当前时间往前偏移分钟数 return true; } } else { if (dtNow <= dtSetTime && dtSetTime <= dtNow.AddMinutes(minLaster)) { //如果 设置时间大于当前时间 并且设置时间小于当前时间往后偏移分钟数 return true; } } } else { if (RUNSETTIME.Value.ToString("HH:mm") == dtNow.ToString("HH:mm")) { return true; } } } return false; } /// /// 创建安全检查记录 /// /// /// [HttpPost, Route("createSafeCheckRecord")] public JsonActionResult createSafeCheckRecord([FromBody] KeywordFilter filter) { return SafeExecute(() => { try { DateTime time = DateTime.Now.AddHours(1); T_FM_SYNC_TASK task = null; bool isUpdate = false; if (!string.IsNullOrEmpty(filter.Parameter1)) { try { //接收来自页面的参数 DateTime deParm = Convert.ToDateTime(filter.Parameter1); time = deParm; } catch { } } task = GetEntity(filter.Keyword); DateTime CURR_TASK_START_TIME = DateTime.Now; if (task != null) { task.CURR_TASK_START_TIME = CURR_TASK_START_TIME;//上次同步结束时间 task.UPDATE_SUCCES_TIME = DateTime.Now;//上次同步结束时间 task.SYNC_PARAM = "";//清空参数 } #region 创建 安全检查记录 List tasks = new List(); List records = null; List recorddetails = null; BaseFilter basefilter = new BaseFilter(filter.OrgId); basefilter.Include = new string[] { "Nav_Details" }; //var notices = GetEntities(t => t.CHECK_TIME <= time && t.STATUS == PFStandardStatus.Reading, basefilter); var notices = GetEntities(t => t.CHECK_TIME <= time && !t.ISSENDRECORD, basefilter); if (notices != null && notices.Any()) { records = new List(); recorddetails = new List(); T_FM_NOTIFICATION_TASK taskCheck = null; IEnumerable listUserID = null; IEnumerable listUser = null; foreach (var item in notices) { listUserID = item.Nav_Details.Where(e => e.USER_ID.HasValue).Select(e => e.USER_ID.Value).Distinct(); listUser = GetEntities(e => listUserID.Contains(e.ID), null, null); item.STATUS = PFStandardStatus.Archived; var record = new T_WB_SAFE_CHECK_RECORD(); record.ID = Guid.NewGuid(); record.ORG_ID = filter.GetOrgId(); record.TASK_ID = item.ID; record.DEPARTMENT_ID = item.DEPARTMENT_ID; records.Add(record); foreach (var detail in item.Nav_Details) { if (!detail.MineType.HasValue || !detail.USER_ID.HasValue) { continue; } var recorddetail = new T_WB_SAFE_CHECK_RECORD_DETAIL(); recorddetail.ID = Guid.NewGuid(); recorddetail.PARENT_ID = record.ID; recorddetail.ORG_ID = filter.GetOrgId(); recorddetail.MineType = detail.MineType.Value; recorddetail.AREA_ID = detail.AREA_ID;//recorddetail.AREA = detail.AREA; recorddetail.CHECK_CONTENT = detail.CHECK_CONTENT; recorddetail.CHECK_BASIS = detail.CHECK_BASIS; recorddetail.ROW_NUM = detail.ROW_NUM; recorddetail.PROJECT_ID = item.PROJECT_ID; recorddetail.USER_ID = detail.USER_ID.Value; recorddetail.TASK_DETAIL_ID = detail.ID; recorddetails.Add(recorddetail); taskCheck = tasks.FirstOrDefault(e => e.USER_ID == detail.USER_ID && e.SOURCE_DATA_ID == record.ID); if (taskCheck == null) { tasks.Add(NotificationTaskService.InsertUserNoticeTaskModel("外包工程安全检查记录", record.ID, filter.GetOrgId(), detail.USER_ID.Value, listUser.FirstOrDefault(e => e.ID == detail.USER_ID.Value)?.NAME, DateTime.Now, DateTime.Now.AddDays(7), 1, "WB031")); } } item.Nav_Details = null; item.ISSENDRECORD = true; } } UnifiedCommit(() => { if (notices != null && notices.Any()) BantchSaveEntityNoCommit(notices); if (tasks != null && tasks.Any()) BantchSaveEntityNoCommit(tasks); if (records != null && records.Any()) BantchSaveEntityNoCommit(records); if (recorddetails != null && recorddetails.Any()) BantchSaveEntityNoCommit(recorddetails); if (!isUpdate && task != null) { UpdateEntityNoCommit(task); isUpdate = true; } }); #endregion #region 按计划触发检查任务制定待办 //按部门岗位 触发 待办 //T_WB_SAFE_CHECK_TASK filter.Parameter1 = " ENABLE_STATUS = false "; Expression> expression = e => e.IS_DELETED == false && e.ENABLE_STATUS == 0;//&& e.DEPARTMENT_ID.HasValue; List listPlanSet = this.GetOrderEntities(expression, filter, new string[] { "Nav_CheckType" }).ToList(); List listPlanSetRund = new List(); if (listPlanSet.Count < 1) { return true;//没找到审批信息 } T_FM_USER User = GetEntity(e => e.CODE.StartsWith("admin") && e.ENABLE_STATUS == 0); if (User == null) { User = GetEntity(e => e.ID == listPlanSet[0].CREATER_ID.Value);//随便取一个不影响信息 } int min = 5;//按设置时间 可以提前5分钟执行跑批生成代办任务 List listEndTime = new List(); #region 获取时间符合的设置 //5 单次 每天10, 每周20, 每月30, 每季40, for (int i = 0; i < listPlanSet.Count; i++) { //if (listPlanSet[i].CHECKTIME != null) //{ if (ISTimeOK(listPlanSet[i].RUNSETTIME, time, min, min))//设置时间往前后各偏移 5 分钟 判断跑批 { switch (listPlanSet[i].PLANCHECKFREQUENCY) { case BSPLANCHECKFREQUENCYEnum.None: //每年 0 #region 单次检查 时间对 月 日对才加入 if (!string.IsNullOrEmpty(listPlanSet[i].RUNDATA))//05-01,10-01 { List listMMdd = listPlanSet[i].RUNDATA.Split(",").ToList(); if (listPlanSet[i].RUNDATA.Contains("-")) { for (int j = 0; j < listMMdd.Count; j++) { try { if (!string.IsNullOrEmpty(listMMdd[j]) && (Convert.ToDateTime(time.Year.ToString() + ("-") + listMMdd[j]) == Convert.ToDateTime(time.ToString("yyyy-MM-dd")) || Convert.ToDateTime(time.Year.ToString() + "-" + listMMdd[j]) == Convert.ToDateTime(time.ToString("yyyy-M-d")))) { listEndTime.Add(Convert.ToDateTime(time.Date.Year + "-12-31 23:59:59")); listPlanSetRund.Add(listPlanSet[i]); break; } } catch { } } } else if (listPlanSet[i].RUNDATA.Contains("/")) { for (int j = 0; j < listMMdd.Count; j++) { try { if (!string.IsNullOrEmpty(listMMdd[j]) && (Convert.ToDateTime(time.Year.ToString("yyyy/") + listMMdd[j]) == Convert.ToDateTime(time.ToString("yyyy/MM/dd")) || Convert.ToDateTime(time.Year.ToString("yyyy/") + listMMdd[j]) == Convert.ToDateTime(time.ToString("yyyy/M/d")))) { listEndTime.Add(Convert.ToDateTime(time.Date.Year + "-12-31 23:59:59")); listPlanSetRund.Add(listPlanSet[i]); break; } } catch { } } } } #endregion break; case BSPLANCHECKFREQUENCYEnum.Date:// 10: //每日天执行 时间匹配就添加 //if (listPlanSet[i].Nav_CheckTypeLevel.Nav_Enums.NAME != "班组级" || (listPlanSet[i].Nav_CheckTypeLevel.Nav_Enums.NAME == "班组级" && listPlanSet[i].CHECKTIME.HasValue)) //{ listPlanSetRund.Add(listPlanSet[i]);//如果是班组级 跳过(另外一个跑批) listEndTime.Add(time.Date.AddDays(1).AddSeconds(-1)); //} break; case BSPLANCHECKFREQUENCYEnum.Week:// 20: if (listPlanSet[i].WEEKDATA != null && (int)time.DayOfWeek == listPlanSet[i].WEEKDATA.Value) { //星期匹配 DateTime.Now.DayOfWeek Thursday (int)DateTime.Now.DayOfWeek 4 listPlanSetRund.Add(listPlanSet[i]); listEndTime.Add(time.Date.AddDays(7 - listPlanSet[i].WEEKDATA.Value).AddSeconds(-1)); } break; case BSPLANCHECKFREQUENCYEnum.Month:// 30: if (listPlanSet[i].DATA != null && listPlanSet[i].DATA.Value == time.Day) { //日匹配 (季度是季度第一月的某日 刚好也符合) listPlanSetRund.Add(listPlanSet[i]); listEndTime.Add(Convert.ToDateTime(time.ToString("yyyy-MM-01 00:00:00")).AddMonths(1).AddSeconds(-1)); } break; case BSPLANCHECKFREQUENCYEnum.Quarter:// 40: if (listPlanSet[i].DATA != null && listPlanSet[i].DATA.Value == time.Day && (time.Month == 1 || time.Month == 4 || time.Month == 7 || time.Month == 10)) { //日匹配 (季度是季度第一月的某日 刚好也符合) listPlanSetRund.Add(listPlanSet[i]); if (time.Month <= 3) { listEndTime.Add(Convert.ToDateTime("yyyy-03-31 23:59:59")); } else if (time.Month <= 6) { listEndTime.Add(Convert.ToDateTime("yyyy-06-30 23:59:59")); } else if (time.Month <= 9) { listEndTime.Add(Convert.ToDateTime("yyyy-09-30 23:59:59")); } else if (time.Month <= 12) { listEndTime.Add(Convert.ToDateTime("yyyy-12-31 23:59:59")); } } break; case BSPLANCHECKFREQUENCYEnum.HalfYear:// 50: if (listPlanSet[i].DATA != null && listPlanSet[i].DATA.Value == time.Day && (time.Month == 1 || time.Month == 7)) { //日匹配 (季度是季度第一月的某日 刚好也符合) listPlanSetRund.Add(listPlanSet[i]); if (time.Month < 7) { listEndTime.Add(Convert.ToDateTime("yyyy-06-30 23:59:59")); } else { listEndTime.Add(Convert.ToDateTime("yyyy-12-31 23:59:59")); } } break; case BSPLANCHECKFREQUENCYEnum.Year:// 60: if (listPlanSet[i].DATA != null && listPlanSet[i].DATA.Value == time.Day && time.Month == 1) { //日匹配 (季度是季度第一月的某日 刚好也符合) listPlanSetRund.Add(listPlanSet[i]); listEndTime.Add(Convert.ToDateTime("yyyy-12-31 23:59:59")); } break; default: break; } } //} //else //{ // //只有每个季度执行的没有明确时间 // if (listPlanSet[i].PLANCHECKFREQUENCY == 40 && listPlanSet[i].DATA != null && listPlanSet[i].DATA.Value == dtNow.Day) // { // listPlanSetRund.Add(listPlanSet[i]); // } //} } #endregion if (listPlanSetRund.Count > 0) { #region 跑批添加数据 string formCode = "WB029"; DateTime dtFirst = Convert.ToDateTime(time.ToString("yyyy-MM-dd 00:00:00")); // 系统生成10 用户主动创建20 今天 生成的 List listSafeCheck = this.GetOrderEntities(e => e.CREACTTYPE == CREACTTYPEEnum.System && e.CREATE_TIME >= dtFirst, filter).ToList(); List listCheck = this.GetOrderEntities(e => e.PLAN_SET_ID.HasValue && e.CREATE_TIME >= dtFirst, filter).ToList(); Guid CHECK_PLAN_SETL_ID = Guid.Empty; T_WB_SAFE_CHECK_TASK modelCheck = null; T_WB_SAFE_CHECK modelSafeCheck = null; List listSafeCheckAdd = new List(); //需要插入数据库的安检记录 List listFMUserNotice = null;//每项设置的通知人员(中间表) List listProject = null;//每项设置的通知人员(中间表) List listProjectSafe = null;//每项设置的通知人员(中间表) List listCheckAdd = new List(); //检查记录WB027 List listCheckObject = new List(); for (int i = 0; i < listPlanSetRund.Count; i++) { listSafeCheckAdd = new List(); listCheckAdd = new List(); var noticeTitles = new List(); var noticeDataIds = new List(); var noticeUserIds = new List(); var noticeUserNames = new List(); CHECK_PLAN_SETL_ID = listPlanSetRund[i].ID; modelCheck = listSafeCheck.FirstOrDefault(e => e.PLAN_SET_ID == CHECK_PLAN_SETL_ID); if (modelCheck != null) continue;//有添加检查信息 modelSafeCheck = listCheck.FirstOrDefault(e => e.PLAN_SET_ID == CHECK_PLAN_SETL_ID); if (modelSafeCheck != null) continue; //有添加检查记录信息 #region 获取通知人员 部门岗位 取人 if (listPlanSetRund[i].IS_SCENE_USERID) { if (listProject == null) { //所有项目 对应的建设项目现场负责人 listProject = GetEntities(e => e.SCENE_USER_ID != Guid.Empty, null, "Nav_SceneUser").ToList(); } } else if (listPlanSetRund[i].IS_SAFE) { if (listProjectSafe == null) { //所有项目 对应的建设项目现场负责人 listProjectSafe = GetEntities(e => e.USER_ID_SAFE.HasValue && e.USER_ID_SAFE != Guid.Empty, null, "Nav_UserSafe").ToList(); } } else if (listPlanSetRund[i].USER_ID.HasValue) { listFMUserNotice = new List(); listFMUserNotice = GetEntities(e => e.ID == listPlanSetRund[i].USER_ID.Value && e.ENABLE_STATUS == 0 && e.PERSON_ID.HasValue, null, "Nav_Person").ToList(); } else { listFMUserNotice = new List(); listFMUserNotice = GetEntities(e => e.DEPARTMENT_ID.HasValue && e.DEPARTMENT_ID.Value == listPlanSetRund[i].DEPARTMENT_ID && e.ENABLE_STATUS == 0 && e.PERSON_ID.HasValue && e.Nav_Person.POST_ID.HasValue && e.Nav_Person.POST_ID.Value == listPlanSetRund[i].POST_ID, null, "Nav_Person").ToList(); } if (listPlanSetRund[i].IS_SCENE_USERID) { if (listProject == null || listProject.Count < 1) { continue; //没有找到通知人员信息 } for (int j = 0; j < listProject.Count; j++) { #region model 添加 T_WB_SAFE_CHECK_TASK modelRun = new T_WB_SAFE_CHECK_TASK(); modelRun.ID = Guid.NewGuid(); modelRun.ORG_ID = filter.GetOrgId(); modelRun.NAME = listPlanSetRund[i].Nav_CheckType.NAME + "-制定(" + time.ToString("MMdd") + ")"; modelRun.CODE = time.ToString("yyyyMMddHHmm") + i.ToString() + j.ToString(); //modelRun.PROJECT_ID= listPlanSetRund[i]. modelRun.CHECK_TYPE_ID = listPlanSetRund[i].CHECK_TYPE_ID.Value; modelRun.MineType = listPlanSetRund[i].MineType; modelRun.PLAN_SET_ID = listPlanSetRund[i].ID; modelRun.CREACTTYPE = CREACTTYPEEnum.System;// 10;//系统生成 modelRun.CREATER_ID = listProject[j].Nav_SceneUser.ID;//安全检查的创建人 就是通知人 modelRun.USERID_DOPLAN = listProject[j].Nav_SceneUser.ID;//制表人 modelRun.DEPARTMENTID = listPlanSetRund[i].DEPARTMENT_ID;//检查部门(公司/部门/车间/班组 ID) modelRun.STATUS = (int)HMAuditStatusEnmu.草稿; modelRun.ISSENDRECORD = false; modelRun.LIMITDATETIME = listEndTime[i]; modelRun.PROJECT_ID = listProject[j].ID; modelRun.DEPARTMENTID = listProject[j].DEPARTMENT_ID; listSafeCheckAdd.Add(modelRun); noticeDataIds.Add(modelRun.ID); noticeUserIds.Add(listProject[j].Nav_SceneUser.ID); noticeUserNames.Add(listProject[j].Nav_SceneUser.NAME); noticeTitles.Add("【外包工程】" + modelRun.NAME);//每天的 加上日期 #endregion } } else if (listPlanSetRund[i].IS_SAFE) { //WB027 if (listProjectSafe == null || listProjectSafe.Count < 1) { continue; //没有找到通知人员信息 } for (int j = 0; j < listProjectSafe.Count; j++) { #region model 添加 T_WB_SAFE_CHECK modelRunRecord = new T_WB_SAFE_CHECK(); modelRunRecord.ID = Guid.NewGuid(); modelRunRecord.ORG_ID = filter.GetOrgId(); modelRunRecord.PLAN_SET_ID = listPlanSetRund[i].ID; modelRunRecord.CODE = time.ToString("yyyyMMddHHmm") + i.ToString() + j.ToString(); modelRunRecord.NAME = listPlanSetRund[i].Nav_CheckType.NAME + "-记录(" + time.ToString("MMdd") + ")"; modelRunRecord.CREATER_ID = listProjectSafe[j].USER_ID_SAFE.Value;//安全检查的创建人 就是通知人 modelRunRecord.MODIFIER_ID = listProjectSafe[j].USER_ID_SAFE.Value;//安全检查的创建人 就是通知人 modelRunRecord.CREATE_TIME = DateTime.Now; modelRunRecord.CHECK_TYPE_ID = listPlanSetRund[i].CHECK_TYPE_ID.Value; //modelRunRecord.MineType = listPlanSetRund[i].MineType; //modelRunRecord.CREACTTYPE = CREACTTYPEEnum.System;// 10;//系统生成 //modelRunRecord.USERID_DOPLAN = listProjectSafe[j].Nav_SceneUser.ID;//制表人 //modelRunRecord.DEPARTMENTID = listPlanSetRund[i].DEPARTMENT_ID;//检查部门(公司/部门/车间/班组 ID) //modelRunRecord.LIMITDATETIME = listEndTime[i]; modelRunRecord.CHECK_TIME = dtFirst; modelRunRecord.CHECK_CATEGORY = WBCHECKCATAGORY.自查; modelRunRecord.STATUS = (int)HMAuditStatusEnmu.草稿; modelRunRecord.PROJECT_ID = listProjectSafe[j].ID; modelRunRecord.DEPARTMENT_ID = listProjectSafe[j].DEPARTMENT_ID; listCheckAdd.Add(modelRunRecord); noticeDataIds.Add(modelRunRecord.ID); noticeUserIds.Add(listProjectSafe[j].Nav_UserSafe.ID); noticeUserNames.Add(listProjectSafe[j].Nav_UserSafe.NAME); noticeTitles.Add(modelRunRecord.NAME);//每天的 加上日期 #endregion } } else { if (listFMUserNotice.Count < 1) { continue; //没有找到通知人员信息 } for (int j = 0; j < listFMUserNotice.Count; j++) { #region model 添加 T_WB_SAFE_CHECK_TASK modelRun = new T_WB_SAFE_CHECK_TASK(); modelRun.ID = Guid.NewGuid(); modelRun.ORG_ID = filter.GetOrgId(); modelRun.NAME = listPlanSetRund[i].Nav_CheckType.NAME + "-制定(" + time.ToString("MMdd") + ")"; modelRun.CODE = time.ToString("yyyyMMddHHmm") + i.ToString() + j.ToString(); //modelRun.PROJECT_ID= listPlanSetRund[i]. modelRun.CHECK_TYPE_ID = listPlanSetRund[i].CHECK_TYPE_ID.Value; modelRun.MineType = listPlanSetRund[i].MineType; modelRun.PLAN_SET_ID = listPlanSetRund[i].ID; modelRun.CREACTTYPE = CREACTTYPEEnum.System;// 10;//系统生成 modelRun.CREATER_ID = listFMUserNotice[j].ID;//安全检查的创建人 就是通知人 modelRun.USERID_DOPLAN = listFMUserNotice[j].ID;//制表人 modelRun.DEPARTMENTID = listPlanSetRund[i].DEPARTMENT_ID;//检查部门(公司/部门/车间/班组 ID) modelRun.STATUS = (int)HMAuditStatusEnmu.草稿; modelRun.ISSENDRECORD = false; modelRun.LIMITDATETIME = listEndTime[i]; listSafeCheckAdd.Add(modelRun); noticeDataIds.Add(modelRun.ID); noticeUserIds.Add(listFMUserNotice[j].ID); noticeUserNames.Add(listFMUserNotice[j].NAME); noticeTitles.Add("【外包工程】" + modelRun.NAME);//每天的 加上日期 #endregion } } #endregion ////超时时间设置 if (noticeTitles.Count > 0) { #region 安全检查数据 if (task != null) { task.UPDATE_SUCCES_TIME = DateTime.Now; } if (listPlanSetRund[i].IS_SAFE) { formCode = "WB027";//检查记录 } else { formCode = "WB029";//检查任务 } NotificationTaskService.SendNotificationTask(noticeTitles, noticeDataIds, filter.GetOrgId(), noticeUserIds, noticeUserNames, DateTime.Now, listEndTime[i], 0, formCode, () => { if (listSafeCheckAdd != null && listSafeCheckAdd.Any() && listSafeCheckAdd.Count() > 0) this.BantchAddEntityNoCommit(listSafeCheckAdd); if (listCheckAdd != null && listCheckAdd.Any() && listCheckAdd.Count() > 0) this.BantchAddEntityNoCommit(listCheckAdd); if (!isUpdate && task != null) { UpdateEntityNoCommit(task); isUpdate = true; } }); #endregion } } #endregion } #endregion #region 证书、人员信息 到期 提前7天触发今日提醒 1、给外包现场安全负责人 2、给 外包工程 建设项目现场负责人 DateTime dtWarm = time.Date.AddDays(8).AddSeconds(-1); var listWarm = GetEntities(e => e.VALID_TIME.HasValue && e.VALID_TIME >= time.Date && e.VALID_TIME <= dtWarm && (!e.MODIFY_TIME.HasValue || e.MODIFY_TIME.Value.Date != time.Date), null); var listWarm2 = GetEntities(e => e.VALID_DATE.HasValue && e.VALID_DATE >= time.Date && e.VALID_DATE <= dtWarm && (!e.MODIFY_TIME.HasValue || e.MODIFY_TIME.Value.Date != time.Date), null); var listWarm4 = GetEntities(e => e.DATE_LIMIT.HasValue && e.DATE_LIMIT >= time.Date && e.DATE_LIMIT <= dtWarm && (!e.MODIFY_TIME.HasValue || e.MODIFY_TIME.Value.Date != time.Date), null); if ((listWarm.Any() && listWarm.Count() > 0) || (listWarm2.Any() && listWarm2.Count() > 0) || (listWarm4.Any() && listWarm4.Count() > 0)) { List listTaskWarm = new List(); DateTime dtTaskEnd = NotificationTaskService.GetTaskEndTime(FMTASKTYPE.Default, filter.OrgId.Value, null, null, null); List listRegistID = new List(); if (listWarm.Any() && listWarm.Count() > 0) { listRegistID = listWarm.Select(e => e.PARENT_ID).Distinct().ToList(); } if (listWarm2.Any() && listWarm2.Count() > 0) { listRegistID.AddRange(listWarm2.Select(e => e.PARENT_ID).Distinct().ToList()); } if (listWarm4.Any() && listWarm4.Count() > 0) { listRegistID.AddRange(listWarm4.Select(e => e.PARENT_ID).Distinct().ToList()); } var listRegister = GetEntities(e => e.STATUS == PFStandardStatus.Archived && e.ENABLE_STATUS == FMEnableStatusEnum.启用 && listRegistID.Contains(e.ID), null, "Nav_Project.Nav_SceneUser"); if (listRegister != null && listRegister.Count() > 0) { var listPhone = listRegister.Select(e => e.Nav_Project.WB_USER_PHONE); var listProjID = listRegister.Select(e => e.PROJECT_ID); var listUserWBAQY = GetEntities(e => e.ENABLE_STATUS == 0 && e.PROJECT_ID.HasValue && listProjID.Contains(e.PROJECT_ID.Value) && listPhone.Contains(e.PHONE), null, null); T_FM_USER UserAQ = null; if (listUserWBAQY != null && listUserWBAQY.Any()) { foreach (var item in listRegister) { UserAQ = listUserWBAQY.FirstOrDefault(e => e.PHONE == item.Nav_Project.WB_USER_PHONE); if (UserAQ != null) { string Warm = string.Empty; if (listWarm != null && listWarm.Any()) { var listWarmPer = listWarm.Where(e => e.PARENT_ID == item.ID); if (listWarmPer != null && listWarmPer.Count() > 0) { Warm = "资质即将到期提醒:"; foreach (var itemP in listWarmPer) { Warm += "【" + itemP.CERTIFICATE_NAME + "】到期日期:" + itemP.VALID_TIME.Value.ToString("yyyy-MM-dd") + ","; } Warm = Warm.Substring(0, Warm.Length - 1); } } if (listWarm2 != null && listWarm2.Any()) { var listWarmPer = listWarm2.Where(e => e.PARENT_ID == item.ID); if (listWarmPer != null && listWarmPer.Count() > 0) { Warm += ((Warm.Length > 0 ? "," : "") + "人员证书即将到期提醒:"); foreach (var itemP in listWarmPer) { Warm += (itemP.NAME + " 【" + itemP.CERTIFICATE_NAME + "】到期日期:" + itemP.VALID_DATE.Value.ToString("yyyy-MM-dd") + ","); } Warm = Warm.Substring(0, Warm.Length - 1); } } if (listWarm4 != null && listWarm4.Any()) { var listWarmPer = listWarm4.Where(e => e.PARENT_ID == item.ID); if (listWarmPer != null && listWarmPer.Count() > 0) { Warm += ((Warm.Length > 0 ? "," : "") + "设备设施检测报告有效期即将到期提醒:"); foreach (var itemP in listWarmPer) { Warm += (itemP.NAME + " 【" + itemP.NAME + "】到期日期:" + itemP.DATE_LIMIT.Value.ToString("yyyy-MM-dd") + ","); } Warm = Warm.Substring(0, Warm.Length - 1); } } //外包安全员 listTaskWarm.Add(NotificationTaskService.InsertUserNoticeTaskModel(Warm, Guid.Empty, item.ORG_ID, UserAQ.ID, UserAQ.NAME, DateTime.Now, dtTaskEnd, 2, "")); //建设项目现场负责人 listTaskWarm.Add(NotificationTaskService.InsertUserNoticeTaskModel("【外包单位:" + item.Nav_Project.UNIT_NAME + "】" + Warm, Guid.Empty, item.ORG_ID, item.Nav_Project.SCENE_USER_ID, item.Nav_Project.Nav_SceneUser.NAME, DateTime.Now, dtTaskEnd, 2, "")); } } } } if (listTaskWarm != null && listTaskWarm.Count() > 0) { if (listWarm != null && listWarm.Count() > 0) { foreach (var item in listWarm) { item.MODIFY_TIME = (time > DateTime.Now ? time : DateTime.Now); } } if (listWarm2 != null && listWarm2.Count() > 0) { foreach (var item in listWarm2) { item.MODIFY_TIME = (time > DateTime.Now ? time : DateTime.Now); } } if (listWarm4 != null && listWarm4.Count() > 0) { foreach (var item in listWarm4) { item.MODIFY_TIME = (time > DateTime.Now ? time : DateTime.Now); } } UnifiedCommit(() => { this.BantchAddEntityNoCommit(listTaskWarm); if (listWarm != null && listWarm.Count() > 0) BantchSaveEntityNoCommit(listWarm); if (listWarm2 != null && listWarm2.Count() > 0) BantchSaveEntityNoCommit(listWarm2); if (!isUpdate && task != null) { UpdateEntityNoCommit(task); isUpdate = true; } }); } } #endregion #region 如果培训结束时间到了 还有人 还在考试 那么结束此单 给老师发送 考试确认单 WB048 ////触发讲师确认 //task = NotificationTaskService.InsertUserNoticeTaskModel(Record.Nav_Parent.Nav_Project.UNIT_NAME + "安全培训记录结果确认", Record.ID, Record.ORG_ID, (Guid)Record.Nav_Parent.USER_ID, Record.Nav_Parent.Nav_User.NAME, DateTime.Now, DateTime.Now.AddDays(7), 1, "WB048"); var listRecord = GetEntities(e => !e.IS_DELETED && !e.ISEND && !e.ISEND && e.END_TIME.HasValue && e.END_TIME.Value <= time, null, "Nav_Parent.Nav_Project", "Nav_Parent.Nav_User"); if (listRecord != null && listRecord.Any()) { var listRecordID = listRecord.Select(e => e.ID); //外包单位培训/答题 WB008_OPERATE var listRecordUser = GetEntities(e => e.DEAL_STATUS == 0 && listRecordID.Contains(e.PARENT_ID), null, null); List listTask048 = new List(); List listRecordUserID = new List(); foreach (var item in listRecordUser) { item.SIGN_STATUS = FOUserShiftStatusEnum.待处理;//FOUserShiftStatusEnum.已处理; 考试 待老师 确认 后 也是需要再次确认 item.DEAL_STATUS = ExamStatusEnum.超期不能处理;//.已处理 ; item.MODIFY_TIME = DateTime.Now; listRecordUserID.Add(item.ID); } var listTNE = GetEntities(e => e.SOURCE_FORMCODE == "WB008_OPERATE" && e.SOURCE_DATA_ID.HasValue && listRecordUserID.Contains(e.SOURCE_DATA_ID.Value), null, null); foreach (var item in listTNE) { item.NOTICE_STATUS = (int)FMNoticeStatusEnum.超时无需办理; item.TASK_DT = DateTime.Now; } listTask048.AddRange(listTNE); foreach (var item in listRecord) { item.MODIFY_TIME = DateTime.Now; item.ISEND = true; item.STATUS = SETrainNotifyStatus.通知中;//.签到完成;//API SavePapers listTask048.Add(NotificationTaskService.InsertUserNoticeTaskModel(item.Nav_Parent.Nav_Project.UNIT_NAME + "安全培训记录结果确认", item.ID, item.ORG_ID, (Guid)item.Nav_Parent.USER_ID, item.Nav_Parent.Nav_User.NAME, DateTime.Now, DateTime.Now.AddDays(7), 1, "WB048")); } UnifiedCommit(() => { BantchSaveEntityNoCommit(listRecord); if (listTask048 != null && listTask048.Count() > 0) BantchSaveEntityNoCommit(listTask048); if (listRecordUser != null && listRecordUser.Count() > 0) BantchSaveEntityNoCommit(listRecordUser); }); } #endregion } catch (Exception ex) { if (!string.IsNullOrEmpty(ex.StackTrace)) throw new Exception("错误日志:[StackTrace]" + ex.StackTrace); else throw new Exception("【" + HttpContext.Request.Path + "】错误日志:[Message]" + ex.Message); } return true; }); } } }