using APT.BaseData.Domain.ApiModel; using APT.BaseData.Domain.Entities; using APT.BaseData.Domain.Entities.FM; using APT.BaseData.Domain.Enums; using APT.BaseData.Domain.Enums.PF; using APT.BaseData.Domain.IServices.FM; using APT.Infrastructure.Core; using APT.MS.Domain.Entities.DM; using APT.MS.Domain.Entities.SC.DM; using APT.MS.Domain.Entities.SC.PT; using APT.MS.Domain.Enums; using APT.Utility; using APT.WebApi.Models; using InfluxData.Net.InfluxDb.Models.Responses; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; namespace APT.PP.WebApi.Controllers.Api.PP { [Route("api/PP/DM")] [TypeFilter(typeof(CustomActionFilterAttribute))] public partial class DMController : AuthorizeApiController { IFMNotificationTaskService NotificationTaskService { get; set; } IFMUserService UserService { get; set; } IPFSysLogService SysLogService { get; set; } IFMSyncLogDetailService SyncLogDetailService { get; set; } public DMController(IFMNotificationTaskService notificationTaskService, IPFSysLogService sysLogService, IFMUserService userService, IFMSyncLogDetailService syncLogDetailService) { NotificationTaskService = notificationTaskService; SysLogService = sysLogService; UserService = userService; SyncLogDetailService = syncLogDetailService; } /// /// 判断跑批时间是否符合 /// /// /// /// /// /// 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-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("DailyRun")] //public JsonActionResult DailyRun([FromBody] KeywordFilter filter) //{ // return SafeExecute(() => // { // try // { // DateTime dtNow = DateTime.Now; // if (!string.IsNullOrEmpty(filter.Parameter1)) // { // try // { // dtNow = Convert.ToDateTime(filter.Parameter1); // } // catch // { // dtNow = DateTime.Now; // } // } // bool isCheck = true;//点检 巡检 // bool isPlan = true; //设备维保 // int min = 5;//按设置时间 可以提前5分钟执行跑批生成代办任务 // #region wyw 维保计划录入 // var listDMPlan = GetEntities(e => e.PLANCHECKFREQUENCY != BSPLANCHECKFREQUENCYEnum.None && e.DEVICEBASE_ID.HasValue && e.ENABLE_STATUS == FMEnableStatusEnum.启用 && e.STATUS_APPROVE == PFStandardStatus.Archived && !e.IS_DELETED, null, "Nav_ListUser.Nav_User"); // List listPlan = new List(); // if (listDMPlan != null && listDMPlan.Any()) // { // foreach (var item in listDMPlan) // { // if (ISTimeOK(item.RUNSETTIME, dtNow, min, min))//设置时间往前后各偏移 5 分钟 判断跑批 // { // switch (item.PLANCHECKFREQUENCY) // { // case BSPLANCHECKFREQUENCYEnum.None: // break; // //case BSPLANCHECKFREQUENCYEnum.OneTime: // case BSPLANCHECKFREQUENCYEnum.Year: // if (!string.IsNullOrEmpty(item.RUNDATA))//05-01,10-01 // { // List listMMdd = item.RUNDATA.Split(",").ToList(); // if (item.RUNDATA.Contains("-")) // { // for (int j = 0; j < listMMdd.Count; j++) // { // try // { // if (!string.IsNullOrEmpty(listMMdd[j]) && (listMMdd[j] == dtNow.ToString("MM-dd") || listMMdd[j] == dtNow.ToString("M-d"))) // { // listPlan.Add(item); // break; // } // } // catch { } // } // } // else if (item.RUNDATA.Contains("/")) // { // for (int j = 0; j < listMMdd.Count; j++) // { // try // { // if (!string.IsNullOrEmpty(listMMdd[j]) && (listMMdd[j] == dtNow.ToString("MM/dd") || listMMdd[j] == dtNow.ToString("M/d"))) // { // listPlan.Add(item); // break; // } // } // catch { } // } // } // } // break; // case BSPLANCHECKFREQUENCYEnum.Date: // listPlan.Add(item); // break; // case BSPLANCHECKFREQUENCYEnum.Week: // if (item.WEEKDATA != null && (int)dtNow.DayOfWeek == (int)item.WEEKDATA.Value) // { // //星期匹配 DateTime.Now.DayOfWeek Thursday (int)DateTime.Now.DayOfWeek 4 // listPlan.Add(item); // } // break; // case BSPLANCHECKFREQUENCYEnum.Month: // case BSPLANCHECKFREQUENCYEnum.Quarter: // if (item.DATA != null && item.DATA.Value == dtNow.Day) // { // listPlan.Add(item); //日匹配 (季度是季度第一月的某日 刚好也符合) // } // break; // default: // break; // } // } // } // } // #endregion // DateTime dtNowEdit = DateTime.Now; // if (listPlan.Count < 1) // { // isPlan = false; // } // var listPlanID = listPlan.Select(e => e.ID); // var listDateCheck = GetEntities(e => e.CREATE_TIME.Value.Date == dtNowEdit.Date && listPlanID.Contains(e.ID), null, null); // if (listDateCheck != null && listDateCheck.Any()) // { // for (int i = listPlan.Count(); i > -1; i--) // { // var checkDate = listDateCheck.FirstOrDefault(e => e.ID == listPlan[i].ID); // if (checkDate != null) // { // listPlan.RemoveAt(i); // } // } // } // if (listPlan.Count < 1) // { // isPlan = false; // } // #region 点检 巡检 // List listDeviceBase = null; //点检 巡检 结果 // var listDeviceBaseT = GetEntities(e => !e.IS_DELETED && e.Nav_ListCheck != null && e.Nav_ListCheck.Any(), null, "Nav_ListCheck.Nav_ListUser.Nav_User");//&& e.QTY > 0 // if (listDeviceBaseT == null || !listDeviceBaseT.Any()) // { // isCheck = false; // } // else // { // //今天 // var ListDetail = GetEntities(e => e.CREATE_TIME.HasValue && e.CREATE_TIME.Value.Date == dtNowEdit.Date, null, null);//listBaseCheckID.Contains(e.BASECHECK_ID) && // listDeviceBase = listDeviceBaseT.ToList(); // List listBaseCheck = null; // foreach (var item in listDeviceBaseT) // { // var listBaseCheckT = item.Nav_ListCheck; // if (listBaseCheckT != null && listBaseCheckT.Any()) // { // listBaseCheck = listBaseCheckT.ToList(); // for (int i = listBaseCheck.Count - 1; i > -1; i--) // { // if (listBaseCheck[i].IS_DELETED) // { // listBaseCheck.RemoveAt(i); // continue; // } // if (ListDetail != null && ListDetail.Any()) // { // //var detail = ListDetail.FirstOrDefault(e => e.BASECHECK_ID == listBaseCheck[i].ID); // var detail = ListDetail.FirstOrDefault(e => e.BASECHECK_ID == listBaseCheck[i].ID); // if (detail != null) // { // listBaseCheck.RemoveAt(i); // continue; // } // } // if (ISTimeOK(listBaseCheck[i].CHECKTIME, dtNow, min, min))//设置时间往前后各偏移 5 分钟 判断跑批 // { // switch (listBaseCheck[i].PLANCHECKFREQUENCY) // { // case BSPLANCHECKFREQUENCYEnum.None: // break; // //TODO 0525 // //case BSPLANCHECKFREQUENCYEnum.OneTime: // case BSPLANCHECKFREQUENCYEnum.Year: // if (!string.IsNullOrEmpty(listBaseCheck[i].RUNDATA))//05-01,10-01 // { // List listMMdd = listBaseCheck[i].RUNDATA.Split(",").ToList(); // if (!listMMdd.Contains(dtNow.ToString("MM-dd")) && !listMMdd.Contains(dtNow.ToString("M-d")) && !listMMdd.Contains(dtNow.ToString("MM/dd")) && !listMMdd.Contains(dtNow.ToString("M/d"))) // { // listBaseCheck.RemoveAt(i); // } // } // break; // case BSPLANCHECKFREQUENCYEnum.Date: // //listPlan.Add(listBaseCheck[i]); // break; // case BSPLANCHECKFREQUENCYEnum.Week: // if (listBaseCheck[i].WEEKDATA == null || (int)dtNow.DayOfWeek != (int)listBaseCheck[i].WEEKDATA.Value) // { // listBaseCheck.RemoveAt(i); // } // break; // case BSPLANCHECKFREQUENCYEnum.Month: // case BSPLANCHECKFREQUENCYEnum.Quarter: // if (listBaseCheck[i].DATA == null || listBaseCheck[i].DATA.Value != dtNow.Day) // { // listBaseCheck.RemoveAt(i); // } // break; // default: // break; // } // } // else // { // listBaseCheck.RemoveAt(i); // } // } // item.Nav_ListCheck = listBaseCheck; // } // } // for (int i = listDeviceBase.Count - 1; i > -1; i--) // { // if (listDeviceBase[i].Nav_ListCheck == null || listDeviceBase[i].Nav_ListCheck.Count() == 0) // { // listDeviceBase.RemoveAt(i); // } // } // } // if (listDeviceBase == null || listDeviceBase.Count < 1) // { // isCheck = false; // } // #endregion // if (!isPlan && !isCheck)//没有 维保计划 和点检、巡检 // { // return true; // } // List listCheck = new List(); // List listCheckUser = new List(); // List listCheckUserTemp = null; // List listCheckDetail = new List(); // List listTaskMaintCheck = new List(); // var listBaseID = listPlan.Select(e => e.DEVICEBASE_ID.Value); // var listBase = GetEntities(e => listBaseID.Contains(e.ID), null, "Nav_ListCheck.Nav_ListUser.Nav_User", "Nav_User"); // if (listBase == null || !listBase.Any()) // { // isPlan = false; // } // else // { // foreach (var item in listPlan) // { // var DeviceBase = listBase.FirstOrDefault(e => e.ID == item.DEVICEBASE_ID.Value); // if (DeviceBase != null) // item.Nav_DeviceBase = DeviceBase; // } // } // if (isPlan)//维保计划 // { // Guid CheckID = Guid.Empty; // Guid UserID = Guid.Empty; // string UserName = string.Empty; // bool isHave = false; // for (int i = 0; i < listPlan.Count; i++) // { // //所有 维保 计划 如果维保人员 维保设备负责人 完全一致 合并单 // foreach (var item in listCheck) // { // if (item.Nav_ListUser.Count() == listPlan[i].Nav_ListUser.Count() && listPlan[i].Nav_DeviceBase != null && item.USER_ID == listPlan[i].Nav_DeviceBase.USER_ID) // { // isHave = true; // //查找 维保人员 如果一致 // foreach (var itemUser in item.Nav_ListUser) // { // var userCheck = listPlan[i].Nav_ListUser.FirstOrDefault(e => e.USER_ID == itemUser.USER_ID && e.ISMAIN == itemUser.ISMAIN); // if (userCheck == null) // { // //没找到 // isHave = false; // CheckID = Guid.Empty; // break; // } // } // if (!isHave) // { // continue; // } // CheckID = item.ID; // break; // } // } // //如果 没有找到之前 一致的 维保ID // if (CheckID == Guid.Empty) // { // CheckID = Guid.NewGuid(); // listCheck.Add(new T_DM_DEVICE_MAINTENANCE_CHECK() // { // ID = CheckID, // CODE = "WB" + dtNowEdit.ToString("yyyyMMddHHmmss"), // NAME = "设备设施维保" + dtNowEdit.ToString("MMdd"), // CHECKDATETIME = dtNowEdit, // STATUS_APPROVE = PFStandardStatus.Draft, // //APPROVE_ID = , // IS_DELETED = false, // ORG_ID = listPlan[i].ORG_ID, // //ENTITY_ORG_TPYE = , // //FORM_ID = , // //FLOW_STATUS = , // //FLOW_SEND_STATUS = , // //FLOW_ID = , // CREATE_TIME = dtNowEdit, // MODIFY_TIME = dtNowEdit, // //CREATER_ID = , // //MODIFIER_ID = , // USER_ID = listPlan[i].Nav_DeviceBase.USER_ID // }); // listCheckUserTemp = new List(); // foreach (var item in listPlan[i].Nav_ListUser) // { // if (item.ISMAIN) // { // UserID = item.USER_ID; // UserName = item.Nav_User.NAME; // } // listCheckUserTemp.Add(new T_DM_DEVICE_MAINTENANCE_CHECK_USER() // { // ID = Guid.NewGuid(), // CHECK_ID = CheckID, // USER_ID = item.USER_ID, // ISMAIN = item.ISMAIN, // ISCHECK = item.ISMAIN, // //CHECKTIME = , // IS_DELETED = false, // ORG_ID = item.ORG_ID, // //ENTITY_ORG_TPYE = , // //FORM_ID = , // //FLOW_STATUS = , // //FLOW_SEND_STATUS = , // //FLOW_ID = , // CREATE_TIME = dtNowEdit, // MODIFY_TIME = dtNowEdit, // //CREATER_ID = , // //MODIFIER_ID = , // }); // } // //维保人员赋值 容易查找 // listCheck[listCheck.Count - 1].Nav_ListUser = listCheckUserTemp; // listCheckUser.AddRange(listCheckUserTemp); // //待办 // listTaskMaintCheck.Add(NotificationTaskService.InsertUserNoticeTaskModel("设备设施维保", CheckID, listCheck[0].ORG_ID, UserID, UserName, dtNowEdit, dtNowEdit.AddDays(1), 1, "DM030")); // } // //检查明细 // listCheckDetail.Add(new T_DM_DEVICE_MAINTENANCE_CHECK_DETAIL() // { // ID = Guid.NewGuid(), // PLANID = listPlan[i].ID, // CHECK_ID = CheckID, // DEVICEBASE_ID = listPlan[i].DEVICEBASE_ID, // MACHINE_NAME = listPlan[i].MACHINE_NAME, // SPEC = listPlan[i].SPEC, // COUNT = listPlan[i].COUNT, // POSITION = listPlan[i].POSITION, // CONTENT = listPlan[i].CONTENT, // //Result = , // IS_DELETED = false, // ORG_ID = listPlan[i].ORG_ID, // //ENTITY_ORG_TPYE = , // //FORM_ID = , // //FLOW_STATUS = , // //FLOW_SEND_STATUS = , // //FLOW_ID = , // CREATE_TIME = dtNowEdit, // MODIFY_TIME = dtNowEdit, // //CREATER_ID = , // //MODIFIER_ID = , // }); // } // } // //符合 条件的 计划 做设备点检、巡检 // //var listBaseID = listPlan.Select(e => e.DEVICEBASE_ID.Value); // //var listBase = GetEntities(e => listBaseID.Contains(e.ID), null, "Nav_ListCheck.Nav_ListUser.Nav_User"); // //if (listBase == null || !listBase.Any()) // //{ // // return true; // //} // //给 符合条件的 计划 对应 设备设施库 中 点检、巡检 发送 点检 巡检 待办 给 第一个 巡检人员 // List listCheckSend = new List(); // List listCheckDetailSend = new List(); // List listCheckUserSend = new List(); // List listTask = new List(); // if (isCheck)//点检 巡检 // { // int RowIndex = 1; // Guid UserId = Guid.Empty; // Guid CheckId = Guid.Empty; // string userName = String.Empty; // T_DM_DEVICE_BASE_CHECK_USER UserMain = null; // T_DM_DEVICE_CHECK_DETAIL CheckDetail = null; // CheckType? lastCheckType = null; // foreach (var item in listDeviceBase)// listBase // { // if (item.Nav_ListCheck == null || !item.Nav_ListCheck.Any()) // { // continue; // } // //var listCheckCircle = item.Nav_ListCheck.Where(e => e.Nav_ListUser != null && e.Nav_ListUser.Any() && e.CHECKTYPE == CheckType.CheckCircuit); // //var listCheck = item.Nav_ListCheck.Where(e => e.Nav_ListUser != null && e.Nav_ListUser.Any() && e.CHECKTYPE == CheckType.Check); // var listCheckBase = item.Nav_ListCheck.Where(e => e.Nav_ListUser != null && e.Nav_ListUser.Any()).OrderBy(e => e.CHECKTYPE); // if (listCheckBase != null && listCheckBase.Any()) // { // RowIndex = 1; // //巡检单 // foreach (var itemDetail in listCheckBase) // { // //检查人员 // UserMain = itemDetail.Nav_ListUser.FirstOrDefault(e => e.ISMAIN); // if (UserId == Guid.Empty || UserMain.USER_ID != UserId || (lastCheckType != null && lastCheckType != itemDetail.CHECKTYPE)) // { // UserId = UserMain.USER_ID; // userName = UserMain.Nav_User.NAME; // T_DM_DEVICE_CHECK checkCircle = new T_DM_DEVICE_CHECK(); // #region 点检 巡检 单 // checkCircle.ID = Guid.NewGuid(); // checkCircle.DEVICEBASE_ID = item.ID; // checkCircle.CHECKTYPE = itemDetail.CHECKTYPE; // //checkCircle.PLANID = listPlan.Find(e => e.DEVICEBASE_ID == item.ID).ID;// null; // checkCircle.CODE = dtNowEdit.ToString("yyyyMMddHHmmss") + RowIndex.ToString(); // checkCircle.NAME = (itemDetail.CHECKTYPE == CheckType.Check ? "点检" : "巡检") + dtNowEdit.ToString("MMdd"); // checkCircle.RECORD_DATE = dtNowEdit; // //checkCircle.START_TIME = ; // //checkCircle.END_TIME = ; // //checkCircle.TEAM_NAME = ; // //checkCircle.TEAM_ID = ; // //checkCircle.SCHEDULIN_ID = ; // checkCircle.MACHINE_NAME = item.NAME; // checkCircle.SPEC = item.SPEC; // checkCircle.MACHINE_CODE = item.CODE; // checkCircle.POSITION_NAME = item.POSITION; // checkCircle.STATUS = PFStandardStatus.Draft; // checkCircle.IS_DELETED = false; // checkCircle.ORG_ID = item.ORG_ID; // //checkCircle.ENTITY_ORG_TPYE = ; // //checkCircle.FORM_ID = ; // //checkCircle.FLOW_STATUS = ; // //checkCircle.FLOW_SEND_STATUS = ; // //checkCircle.FLOW_ID = ; // checkCircle.CREATE_TIME = dtNowEdit; // checkCircle.MODIFY_TIME = dtNowEdit; // //checkCircle.CREATER_ID = ; // //checkCircle.MODIFIER_ID = ; // #endregion // CheckId = checkCircle.ID; // listCheckSend.Add(checkCircle); // //添加待办 // listTask.Add(NotificationTaskService.InsertUserNoticeTaskModel("设备设施" + (itemDetail.CHECKTYPE == CheckType.Check ? "点检" : "巡检"), checkCircle.ID, checkCircle.ORG_ID, UserId, userName, dtNowEdit, dtNowEdit.AddDays(1), 1, (itemDetail.CHECKTYPE == CheckType.Check ? "DM010" : "DM032"))); // #region 检查明细 检查人员 // foreach (var itemDetailUser in itemDetail.Nav_ListUser) // { // listCheckUserSend.Add(new T_DM_DEVICE_CHECK_USER() // { // ID = Guid.NewGuid(), // CHECK_ID = CheckId,// CheckDetail.ID, // USER_ID = itemDetailUser.USER_ID, // ISMAIN = itemDetailUser.ISMAIN, // ISCHECK = itemDetailUser.ISMAIN ? true : false,//记录人 默认 确认过 // IS_DELETED = false, // ORG_ID = itemDetailUser.ORG_ID, // //ENTITY_ORG_TPYE = , // //FORM_ID = , // //FLOW_STATUS = , // //FLOW_SEND_STATUS = , // //FLOW_ID = , // CREATE_TIME = dtNowEdit, // MODIFY_TIME = dtNowEdit, // //CREATER_ID = , // //MODIFIER_ID = , // }); // } // #endregion // } // #region 点检、巡检 检查明细 // CheckDetail = new T_DM_DEVICE_CHECK_DETAIL() // { // ID = Guid.NewGuid(), // DEVICE_CHECK_ID = CheckId, // ROW_NO = RowIndex, // DEVICEBASE_ID = item.ID, // ITEM1 = itemDetail.ITEM1, // ITEM2 = itemDetail.ITEM2, // ITEM3 = itemDetail.ITEM3, // //CHECK_VALUE = , // ////DESCRIPTION = , // IS_DELETED = false, // ORG_ID = itemDetail.ORG_ID, // //ENTITY_ORG_TPYE = , // //FORM_ID = , // //FLOW_STATUS = , // //FLOW_SEND_STATUS = , // //FLOW_ID = , // CREATE_TIME = dtNowEdit, // MODIFY_TIME = dtNowEdit, // //CREATER_ID = , // //MODIFIER_ID = , // BASECHECK_ID = itemDetail.ID, // }; // listCheckDetailSend.Add(CheckDetail); // #endregion // RowIndex++; // lastCheckType = itemDetail.CHECKTYPE;//检查类型赋值 // } // } // } // } // #region 跑批信息修改 // T_FM_SYNC_TASK task = null; // task = GetEntity(filter.Keyword); // if (task != null) // { // task.UPDATE_SUCCES_TIME = DateTime.Now;//上次同步结束时间 // task.SYNC_PARAM = "";//清空参数 // } // #endregion // this.UnifiedCommit(() => // { // if (task != null) // UpdateEntityNoCommit(task);//跑批信息 // //点检 巡检 // if (listCheckSend != null && listCheckSend.Any()) // BantchSaveEntityNoCommit(listCheckSend); // if (listCheckDetailSend != null && listCheckDetailSend.Any()) // BantchSaveEntityNoCommit(listCheckDetailSend); // if (listCheckUserSend != null && listCheckUserSend.Any()) // BantchSaveEntityNoCommit(listCheckUserSend); // if (listTask != null && listTask.Any()) // BantchSaveEntityNoCommit(listTask); // //维保 // if (listCheckUser != null && listCheckUser.Any()) // BantchSaveEntityNoCommit(listCheckUser); // if (listCheck != null && listCheck.Any()) // BantchSaveEntityNoCommit(listCheck); // if (listCheckDetail != null && listCheckDetail.Any()) // BantchSaveEntityNoCommit(listCheckDetail); // if (listTaskMaintCheck != null && listTaskMaintCheck.Any()) // BantchSaveEntityNoCommit(listTaskMaintCheck); // }); // int Count = ((listCheckSend != null && listCheckSend.Any()) ? listCheckSend.Count : 0) + ((listCheckDetailSend != null && listCheckDetailSend.Any()) ? listCheckDetailSend.Count : 0) + ((listCheckUserSend != null && listCheckUserSend.Any()) ? listCheckUserSend.Count : 0) + ((listTask != null && listTask.Any()) ? listTask.Count : 0) + ((listCheckUser != null && listCheckUser.Any()) ? listCheckUser.Count : 0) + ((listCheck != null && listCheck.Any()) ? listCheck.Count : 0) + ((listCheckDetail != null && listCheckDetail.Any()) ? listCheckDetail.Count : 0) + ((listTaskMaintCheck != null && listTaskMaintCheck.Any()) ? listTaskMaintCheck.Count : 0); // SyncLogDetailService.InsertSyncLogDetail(HttpContext.Items, HttpContext.TraceIdentifier, filter.OrgId, Count, filter.Parameter1, SyncLogType.BSCreateCheckPlanSet); // } // 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; // }); //} #region HMR /// /// 触发设备设施检测检验 /// /// [HttpPost, Route("InspectionSync")] public JsonActionResult InspectionSync([FromBody] KeywordFilter filter) { return SafeExecute(() => { try { var dtNow = DateTime.Now; var month = dtNow.Month; var day = dtNow.Day; var time = dtNow.TimeOfDay; var week = dtNow.DayOfWeek; List sendNotices = new List(); List timeSetLists = new List(); T_DM_DETECTION_INSPECTION_RECORD record = null; var newFilter = new BaseFilter(filter.OrgId); newFilter.SelectField = new List { "PLANCHECKFREQUENCY", "MONTH", "DATA", "WEEKDATA", "RUNSETTIME", "DEVICE_BASE_ID", "MineType", "POST_ID", "DEPARTMENT_ID", "DEVICE_ID" }; var timeSets = GetEntities(i => i.SET_TYPE == PTSetTypeEnum.Inspection, newFilter); if (timeSets != null && timeSets.Any()) { foreach (var timeSet in timeSets) { switch (timeSet.PLANCHECKFREQUENCY) { //case BSPLANCHECKFREQUENCYEnum.OneTime: case BSPLANCHECKFREQUENCYEnum.Year: if (timeSet.MONTH == month && timeSet.DATA == day) timeSetLists.Add(timeSet); break; case BSPLANCHECKFREQUENCYEnum.HalfYear: if ((timeSet.MONTH == month && timeSet.DATA == day) || ((timeSet.MONTH + 6) == month && (timeSet.DATA + 183) == day)) timeSetLists.Add(timeSet); break; case BSPLANCHECKFREQUENCYEnum.Date: timeSetLists.Add(timeSet); break; case BSPLANCHECKFREQUENCYEnum.Week: if (timeSet.WEEKDATA != null && (int)timeSet.WEEKDATA.Value == (int)week) timeSetLists.Add(timeSet); break; case BSPLANCHECKFREQUENCYEnum.Month: if (timeSet.DATA == day) timeSetLists.Add(timeSet); break; case BSPLANCHECKFREQUENCYEnum.Quarter: if (timeSet.MONTH == 1) { if ((month == 1 || month == 4 || month == 7 || month == 10) && timeSet.DATA == day) timeSetLists.Add(timeSet); } if (timeSet.MONTH == 2) { if ((month == 2 || month == 5 || month == 8 || month == 11) && timeSet.DATA == day) timeSetLists.Add(timeSet); } if (timeSet.MONTH == 3) { if ((month == 3 || month == 6 || month == 9 || month == 12) && timeSet.DATA == day) timeSetLists.Add(timeSet); } break; default: break; } } } if (timeSetLists!=null && timeSetLists.Any()) { var deviceIds = timeSetLists.Select(t => t.DEVICE_ID).Distinct().ToList(); var deviceBases = this.GetEntities(t => deviceIds.Contains(t.DEVICE_ID), new BaseFilter(filter.OrgId)); var deviceBaseIds = deviceBases.Select(t => t.ID).ToList(); var records = this.GetEntities(t => deviceBaseIds.Contains((Guid)t.DEVICE_BASE_ID) && t.CREATE_TIME >= dtNow.Date, new BaseFilter(filter.OrgId)); var departIds = timeSetLists.Select(t => t.DEPARTMENT_ID).Distinct().ToList(); var postIds = timeSetLists.Select(t => t.POST_ID).Distinct().ToList(); var users = this.GetEntities(t => departIds.Contains(t.ID) || (t.Nav_Person != null && postIds.Contains(t.Nav_Person.POST_ID)), new BaseFilter(filter.OrgId), "Nav_Person"); foreach (var item in timeSetLists) { var userInfo = users.FirstOrDefault(t => t.DEPARTMENT_ID == item.DEPARTMENT_ID && t.Nav_Person.POST_ID == item.POST_ID); var devices = deviceBases.Where(t => t.DEVICE_ID == item.DEVICE_ID).ToList(); foreach (var device in devices) { var recordExist = records.FirstOrDefault(t => t.DEVICE_BASE_ID == device.ID); if (userInfo != null && recordExist == null) { var deviceBase = deviceBases.FirstOrDefault(t => t.ID == device.ID); record = new T_DM_DETECTION_INSPECTION_RECORD(); record.ORG_ID = filter.OrgId; record.STATUS = PFStandardStatus.Draft; record.TIME = DateTime.Now; record.RESULT = DMInspectionResultEnum.不合格; record.USER_ID = userInfo?.ID; record.DEPARTMENT_ID = item.DEPARTMENT_ID; record.PLANCHECKFREQUENCY = item.PLANCHECKFREQUENCY; record.MineType = item.MineType; record.DEVICE_BASE_ID = deviceBase.ID; record.MACHINE_CODE = deviceBase?.MACHINE_CODE; record.SPEC = deviceBase?.SPEC; record.POSITION = deviceBase?.POSITION; sendNotices.Add(NotificationTaskService.InsertUserNoticeTaskModel("设备设施检测检验记录", record.ID, filter.GetOrgId(), userInfo.ID, userInfo.NAME, DateTime.Now, DateTime.Now.AddDays(30), (int)FMNoticeTypeEnum.消息, "DM012")); } } } } UnifiedCommit(() => { if (record != null) UpdateEntityNoCommit(record); if (sendNotices != null && sendNotices.Any()) BantchSaveEntityNoCommit(sendNotices); }); } 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; }); } /// /// 触发设备设施归还记录 /// /// [HttpPost, Route("DeviceReturnSync")] public JsonActionResult DeviceReturnSync([FromBody] KeywordFilter filter) { return SafeExecute(() => { try { var dtNow = DateTime.Now; List sendNotices = new List(); var details = GetEntities(i => i.RETURN_STATUS == DMIsReturnEnum.NG && i.RETURN_TIME.Value.Date == dtNow.Date, new BaseFilter(filter.OrgId), "Nav_User", "Nav_DeviceBase"); if (details != null && details.Any()) { foreach (var item in details) { sendNotices.Add(NotificationTaskService.InsertUserNoticeTaskModel("设备" + item.Nav_DeviceBase.NAME + "归还记录", item.ID, filter.GetOrgId(), item.USER_ID.Value, item.Nav_User.NAME, DateTime.Now, DateTime.Now.AddDays(30), (int)FMNoticeTypeEnum.消息, "DM026")); } } UnifiedCommit(() => { if (sendNotices != null && sendNotices.Any()) BantchSaveEntityNoCommit(sendNotices); }); } 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; }); } /// /// 触发设备设施点检/巡检 /// /// [HttpPost, Route("DeviceCheckSync")] public JsonActionResult DeviceCheckSync([FromBody] KeywordFilter filter) { return SafeExecute(() => { try { var dtNow = DateTime.Now; var month = dtNow.Month; var day = dtNow.Day; var time = dtNow.TimeOfDay; var week = dtNow.DayOfWeek; List sendNotices = new List(); List checks = new List(); List details = new List(); List checkUsers = new List(); List sets = new List(); List shiftClassList = new List(); var timeSets = GetEntities(i => i.ENABLE_STATUS == 0, new BaseFilter(filter.OrgId), "Nav_Contents", "Nav_DeviceBase"); if (timeSets != null && timeSets.Any()) { foreach (var timeSet in timeSets) { switch (timeSet.PLANCHECKFREQUENCY) { //case BSPLANCHECKFREQUENCYEnum.OneTime: case BSPLANCHECKFREQUENCYEnum.Year: if (timeSet.MONTH == month && timeSet.DATA == day) sets.Add(timeSet); break; case BSPLANCHECKFREQUENCYEnum.HalfYear: if ((timeSet.MONTH == month && timeSet.DATA == day) || ((timeSet.MONTH + 6) == month && (timeSet.DATA + 183) == day)) sets.Add(timeSet); break; case BSPLANCHECKFREQUENCYEnum.Date: sets.Add(timeSet); break; case BSPLANCHECKFREQUENCYEnum.Week: if (timeSet.WEEKDATA != null && (int)timeSet.WEEKDATA.Value == (int)week) sets.Add(timeSet); break; case BSPLANCHECKFREQUENCYEnum.Month: if (timeSet.DATA == day) sets.Add(timeSet); break; case BSPLANCHECKFREQUENCYEnum.Quarter: if (timeSet.MONTH == 1) { if ((month == 1 || month == 4 || month == 7 || month == 10) && timeSet.DATA == day) sets.Add(timeSet); } if (timeSet.MONTH == 2) { if ((month == 2 || month == 5 || month == 8 || month == 11) && timeSet.DATA == day) sets.Add(timeSet); } if (timeSet.MONTH == 3) { if ((month == 3 || month == 6 || month == 9 || month == 12) && timeSet.DATA == day) sets.Add(timeSet); } break; default: break; } } } if (sets!=null && sets.Any()) { var deviceIds = timeSets.Select(t => t.DEVICE_ID).Distinct().ToList(); var deviceBases = this.GetEntities(t => deviceIds.Contains(t.DEVICE_ID) && t.DEVICE_STATUS == DMDeviceStatusEnum.使用中, new BaseFilter(filter.OrgId)); var userInfos = this.GetEntities(t => t.ENABLE_STATUS == 0, new BaseFilter(filter.OrgId), "Nav_Person"); TimeSpan halfHour = TimeSpan.FromHours(0.5); // 半小时的时间间隔 var departmentIds = deviceBases.Select(t => t.DEPARTMENT_ID).Distinct().ToList(); var teamInfos = this.GetEntities(t => departmentIds.Contains(t.DEPARTMENT_ID), new BaseFilter(filter.OrgId)); var teamIds = teamInfos.Select(t => t.ID).ToList(); //查排班 shiftClassList = this.GetEntities(s => s.DATE_TIME.Date == dtNow.Date && s.START_TIME != s.END_TIME && s.TEAM_ID != null && teamIds.Contains((Guid)s.TEAM_ID) && s.RUN_CHECKRECORD == 0, new BaseFilter(filter.OrgId), "Nav_DepartmentSchedulingDetail.Nav_Person").ToList(); //点检按排班触发 var checkSets = sets.Where(t => t.SET_TYPE == DMSetTypeEnum.Check).ToList(); if (checkSets != null && checkSets.Any()) { foreach (var item in checkSets) { var devices = deviceBases.Where(t => t.DEVICE_ID == item.DEVICE_ID).ToList(); foreach (var device in devices) { if (device != null && device.USER_ID != null) { var user = userInfos.FirstOrDefault(t => t.ID == device.USER_ID); var currentTeamId = teamInfos.FirstOrDefault(t => t.DEPARTMENT_ID == device.DEPARTMENT_ID)?.ID; var currentShift = shiftClassList.FirstOrDefault(t => t.TEAM_ID == currentTeamId); if (currentShift != null) { DateTime start = currentShift.START_TIME - halfHour;//排班开始时间的前半小时 if (dtNow > start && dtNow < currentShift.START_TIME)//跑批半小时一次,在开始时间前半小时到开始时间之间就触发 { //找到排班里面该岗位的人 var personInfo = currentShift.Nav_DepartmentSchedulingDetail.FirstOrDefault(t => t.PERSON_ID == user?.PERSON_ID); if (personInfo != null) { T_DM_DEVICE_CHECK check = new T_DM_DEVICE_CHECK(); check.MineType = item.MineType; check.ORG_ID = filter.OrgId; check.DEVICEBASE_ID = device.ID; check.CHECKTYPE = CheckType.Check; check.CODE = dtNow.ToString("yyyyMMddHHmmss") + new Random().Next().ToString(); check.NAME = device?.NAME + ("点检") + dtNow.ToString("MMdd"); check.RECORD_DATE = dtNow; check.MACHINE_NAME = device?.NAME; check.SPEC = device?.SPEC; check.MACHINE_CODE = device?.MACHINE_CODE; check.POSITION_NAME = device?.POSITION; check.STATUS = PFStandardStatus.Draft; checks.Add(check); T_DM_DEVICE_CHECK_USER checkuser = new T_DM_DEVICE_CHECK_USER(); checkuser.ORG_ID = filter.OrgId; checkuser.CHECK_ID = check.ID; checkuser.USER_ID = user.ID; checkuser.ISMAIN = true; checkUsers.Add(checkuser); if (item.Nav_Contents.Any()) { var i = 0; foreach (var content in item.Nav_Contents) { T_DM_DEVICE_CHECK_DETAIL detail = new T_DM_DEVICE_CHECK_DETAIL(); detail.ORG_ID = filter.OrgId; detail.DEVICE_CHECK_ID = check.ID; detail.DEVICEBASE_ID = device.ID; detail.ROW_NO = i + 1; detail.ITEM1 = content.POSITION; detail.ITEM2 = content.CONTENT; detail.ITEM3 = content.STANDARD; details.Add(detail); i++; } } sendNotices.Add(NotificationTaskService.InsertUserNoticeTaskModel("设备设施点检", check.ID, check.ORG_ID, user.ID, user.NAME, dtNow, dtNow.AddDays(4), 1, "DM010")); currentShift.RUN_CHECKRECORD = FMTureOrFalse.是; } } } } //if (device.USE_DEPARTMENT_ID != null) //{ // var currentTeamId = teamInfos.FirstOrDefault(t => t.DEPARTMENT_ID == device.USE_DEPARTMENT_ID).ID; // var currentShift = shiftClassList.FirstOrDefault(t => t.TEAM_ID == currentTeamId); // if (currentShift != null) // { // DateTime start = currentShift.START_TIME - halfHour;//排班开始时间的前半小时 // if (dtNow > start && dtNow < currentShift.START_TIME)//跑批半小时一次,在开始时间前半小时到开始时间之间就触发 // { // //找到排班里面该岗位的人 // var personInfo = currentShift.Nav_DepartmentSchedulingDetail.Where(t => t.Nav_Person != null && t.Nav_Person.POST_ID == device.USE_USER_POST_ID).ToList(); // if (personInfo != null && personInfo.Any()) // { // var personIds = personInfo.Select(t => t.PERSON_ID).ToList(); // var users = userInfos.Where(t => personIds.Contains((Guid)t.PERSON_ID)).ToList(); // var userIds = users.Select(t => t.ID).ToList(); // var userNames = users.Select(t => t.NAME).ToList(); // T_DM_DEVICE_CHECK check = new T_DM_DEVICE_CHECK(); // check.MineType = item.MineType; // check.ORG_ID = filter.OrgId; // check.DEVICEBASE_ID = device.ID; // check.CHECKTYPE = CheckType.Check; // check.CODE = dtNow.ToString("yyyyMMddHHmmss") + new Random().Next().ToString(); // check.NAME = device?.NAME + ("点检") + dtNow.ToString("MMdd"); // check.RECORD_DATE = dtNow; // check.MACHINE_NAME = device?.NAME; // check.SPEC = device?.SPEC; // check.MACHINE_CODE = device?.CODE; // check.POSITION_NAME = device?.POSITION; // check.STATUS = PFStandardStatus.Draft; // checks.Add(check); // if (item.Nav_Contents.Any()) // { // var i = 0; // foreach (var content in item.Nav_Contents) // { // T_DM_DEVICE_CHECK_DETAIL detail = new T_DM_DEVICE_CHECK_DETAIL(); // detail.ORG_ID = filter.OrgId; // detail.DEVICE_CHECK_ID = check.ID; // detail.DEVICEBASE_ID = device.ID; // detail.ROW_NO = i + 1; // detail.ITEM1 = content.POSITION; // detail.ITEM2 = content.CONTENT; // detail.ITEM3 = content.STANDARD; // details.Add(detail); // i++; // } // } // sendNotices.AddRange(NotificationTaskService.InsertUserNoticeTaskModels("设备设施点检", check.ID, check.ORG_ID, userIds, userNames, dtNow, dtNow.AddDays(1), 1, "DM010")); // currentShift.RUN_CHECKRECORD = FMTureOrFalse.是; // } // } // } //} } } } //巡检按排班触发 var checkCircuitSets = sets.Where(t => t.SET_TYPE == DMSetTypeEnum.CheckCircuit).ToList(); if (checkCircuitSets != null && checkCircuitSets.Any()) { var departments = this.GetEntities(t => t.ENABLE_STATUS == 0 && t.USER_ID != null, new BaseFilter(filter.OrgId)); foreach (var item in checkCircuitSets) { var devices = deviceBases.Where(t => t.DEVICE_ID == item.DEVICE_ID).ToList(); foreach (var device in devices) { if (device != null && device.DEPARTMENT_ID != null) { var currentTeamId = teamInfos.FirstOrDefault(t => t.DEPARTMENT_ID == device.DEPARTMENT_ID)?.ID; var currentShift = shiftClassList.FirstOrDefault(t => t.TEAM_ID == currentTeamId); if (currentShift != null) { DateTime start = currentShift.START_TIME - halfHour;//排班开始时间的前半小时 if (dtNow > start && dtNow < currentShift.START_TIME)//跑批半小时一次,在开始时间前半小时到开始时间之间就触发 { //找到排班里面该岗位的人,触发给当前层级负责人 var deparId = (Guid)device.DEPARTMENT_ID; var userInfo = departments.FirstOrDefault(t => t.ID == deparId); if (userInfo != null) { var user = userInfos.FirstOrDefault(t => t.ID == userInfo.USER_ID); T_DM_DEVICE_CHECK check = new T_DM_DEVICE_CHECK(); check.MineType = item.MineType; check.ORG_ID = filter.OrgId; check.DEVICEBASE_ID = device.ID; check.CHECKTYPE = CheckType.CheckCircuit; check.CODE = dtNow.ToString("yyyyMMddHHmmss") + new Random().Next().ToString(); check.NAME = device?.NAME + ("巡检") + dtNow.ToString("MMdd"); check.RECORD_DATE = dtNow; check.MACHINE_NAME = device?.NAME; check.SPEC = device?.SPEC; check.MACHINE_CODE = device?.MACHINE_CODE; check.POSITION_NAME = device?.POSITION; check.STATUS = PFStandardStatus.Draft; checks.Add(check); T_DM_DEVICE_CHECK_USER checkuser = new T_DM_DEVICE_CHECK_USER(); checkuser.ORG_ID = filter.OrgId; checkuser.CHECK_ID = check.ID; checkuser.USER_ID = user.ID; checkuser.ISMAIN = true; checkUsers.Add(checkuser); if (item.Nav_Contents.Any()) { var i = 0; foreach (var content in item.Nav_Contents) { T_DM_DEVICE_CHECK_DETAIL detail = new T_DM_DEVICE_CHECK_DETAIL(); detail.ORG_ID = filter.OrgId; detail.DEVICE_CHECK_ID = check.ID; detail.DEVICEBASE_ID = device.ID; detail.ROW_NO = i + 1; detail.ITEM1 = content.POSITION; detail.ITEM2 = content.CONTENT; detail.ITEM3 = content.STANDARD; details.Add(detail); i++; } } sendNotices.Add(NotificationTaskService.InsertUserNoticeTaskModel("设备设施巡检", check.ID, check.ORG_ID, user.ID, user?.NAME, dtNow, dtNow.AddDays(4), 1, "DM032")); currentShift.RUN_CHECKRECORD = FMTureOrFalse.是; } } } } } } } } UnifiedCommit(() => { if (checks != null && checks.Any()) BantchSaveEntityNoCommit(checks); if (details != null && details.Any()) BantchSaveEntityNoCommit(details); if (checkUsers != null && checkUsers.Any()) BantchSaveEntityNoCommit(checkUsers); if (sendNotices != null && sendNotices.Any()) BantchSaveEntityNoCommit(sendNotices); if (shiftClassList != null && shiftClassList.Any()) BantchSaveEntityNoCommit(shiftClassList); }); } 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; }); } /// /// 触发设备设施维保计划 /// /// [HttpPost, Route("MaintenancePlanSync")] public JsonActionResult MaintenancePlanSync([FromBody] KeywordFilter filter) { return SafeExecute(() => { try { var dtNow = DateTime.Now; var month = dtNow.Month; var day = dtNow.Day; var time = dtNow.TimeOfDay; var week = dtNow.DayOfWeek; List sendNotices = new List(); List plans = new List(); List details = new List(); List timeSetLists = new List(); var timeSets = GetEntities(i => i.ENABLE_STATUS == 0 && i.SET_TYPE == PTSetTypeEnum.MaintenancePlan,new BaseFilter(filter.OrgId)); if (timeSets != null && timeSets.Any()) { foreach (var timeSet in timeSets) { switch (timeSet.PLANCHECKFREQUENCY) { //case BSPLANCHECKFREQUENCYEnum.OneTime: case BSPLANCHECKFREQUENCYEnum.Year: if (timeSet.MONTH == month && timeSet.DATA == day) timeSetLists.Add(timeSet); break; case BSPLANCHECKFREQUENCYEnum.HalfYear: if ((timeSet.MONTH == month && timeSet.DATA == day) || ((timeSet.MONTH + 6) == month && (timeSet.DATA + 183) == day)) timeSetLists.Add(timeSet); break; case BSPLANCHECKFREQUENCYEnum.Date: timeSetLists.Add(timeSet); break; case BSPLANCHECKFREQUENCYEnum.Week: if (timeSet.WEEKDATA != null && (int)timeSet.WEEKDATA.Value == (int)week) timeSetLists.Add(timeSet); break; case BSPLANCHECKFREQUENCYEnum.Month: if (timeSet.DATA == day) timeSetLists.Add(timeSet); break; case BSPLANCHECKFREQUENCYEnum.Quarter: if (timeSet.MONTH == 1) { if ((month == 1 || month == 4 || month == 7 || month == 10) && timeSet.DATA == day) timeSetLists.Add(timeSet); } if (timeSet.MONTH == 2) { if ((month == 2 || month == 5 || month == 8 || month == 11) && timeSet.DATA == day) timeSetLists.Add(timeSet); } if (timeSet.MONTH == 3) { if ((month == 3 || month == 6 || month == 9 || month == 12) && timeSet.DATA == day) timeSetLists.Add(timeSet); } break; default: break; } } } if (timeSetLists != null && timeSetLists.Any()) { var minetypes = timeSetLists.Select(t => t.MineType).Distinct().ToList(); var departmentIds = timeSetLists.Select(t => t.DEPARTMENT_ID).Distinct().ToList(); //设备设施库 var deviceBases = this.GetEntities(t => minetypes.Contains(t.MineType) && t.DEVICE_STATUS == DMDeviceStatusEnum.使用中, new BaseFilter(filter.OrgId)); var userInfos = this.GetEntities(t => t.ENABLE_STATUS == 0 && departmentIds.Contains(t.DEPARTMENT_ID), new BaseFilter(filter.OrgId),"Nav_Person"); //判断是否今天已经触发过 var planExists = this.GetEntities(t => minetypes.Contains(t.MineType) && t.CREATE_TIME >= dtNow.Date, new BaseFilter(filter.OrgId)); var sync = Guid.NewGuid(); foreach (var item in timeSetLists) { var user = userInfos.FirstOrDefault(t => t.DEPARTMENT_ID == item.DEPARTMENT_ID && t.Nav_Person!=null && t.Nav_Person.POST_ID == item.POST_ID); var planExist = planExists.FirstOrDefault(t => t.MineType == item.MineType); if (user != null && planExist == null) { //触发维保计划表 T_DM_DEVICE_MAINTENANCE_PLAN plan = new T_DM_DEVICE_MAINTENANCE_PLAN(); plan.ID = Guid.NewGuid(); plan.SYNC_ID = sync; plan.ORG_ID = filter.OrgId; plan.YEARPLAN = DateTime.Now.Year; plan.DEPARTMENT_ID = user?.DEPARTMENT_ID; plan.USER_ID = user?.ID; plan.MineType = item.MineType; plan.IS_RUN = 0; plans.Add(plan); //设备子表 var devices = deviceBases.Where(t => t.MineType == item.MineType).ToList(); if (devices != null && devices.Any()) { foreach (var device in devices) { T_DM_DEVICE_MAINTENANCE_PLAN_DETAIL detail = new T_DM_DEVICE_MAINTENANCE_PLAN_DETAIL(); detail.ORG_ID = filter.OrgId; detail.DEVICE_MAINTENANCE_PLAN_ID = plan.ID; detail.DEVICEBASE_ID = device.ID; detail.COUNT = device.QTY; detail.SPEC = device.SPEC; detail.POSITION = device.POSITION; detail.DEPARTMENT_ID = plan.DEPARTMENT_ID; detail.USER_ID = plan.USER_ID; detail.RUNSETTIME = DateTime.Now.Date; detail.PLANCHECKFREQUENCY = item.PLANCHECKFREQUENCY; details.Add(detail); } } //触发待办 sendNotices.Add(NotificationTaskService.InsertUserNoticeTaskModel("设备设施维保年度计划表", plan.ID, plan.ORG_ID, user.ID, user.NAME, dtNow, dtNow.AddDays(1), 1, "DM008")); } } } UnifiedCommit(() => { if (plans != null && plans.Any()) BantchSaveEntityNoCommit(plans); if (details != null && details.Any()) BantchSaveEntityNoCommit(details); if (sendNotices != null && sendNotices.Any()) BantchSaveEntityNoCommit(sendNotices); }); } 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; }); } /// /// 触发设备设施维保记录 /// /// [HttpPost, Route("MaintenanceRecordSync")] public JsonActionResult MaintenanceRecordSync([FromBody] KeywordFilter filter) { return SafeExecute(() => { try { var dtNow = DateTime.Now; if (filter.Parameter1 != null) { dtNow = DateTime.Parse(filter.Parameter1); } var month = dtNow.Month; var day = dtNow.Day; var time = dtNow.TimeOfDay; var week = dtNow.DayOfWeek; List sendNotices = new List(); List records = new List(); List planDetails = new List(); List details = new List(); List files = new List(); var classFilter = new BaseFilter(filter.GetOrgId()); classFilter.IgnoreDataRule = true; var plans = GetEntities(i => i.YEARPLAN == DateTime.Now.Year && i.STATUS_APPROVE == PFStandardStatus.Archived && i.IS_RUN == 0, classFilter, "Nav_PlanDetails", "Nav_PlanDetails.Nav_DeviceBase", "Nav_Files"); if (plans != null && dtNow.Hour == 8) { foreach (var item in plans) { if (item.Nav_PlanDetails != null && item.Nav_PlanDetails.Any()) { foreach (var item2 in item.Nav_PlanDetails) { var checkTime = dtNow; if (item2.RUNSETTIME == DateTime.Parse("0001-01-01 00:00:00")) { checkTime = item2.RUNSETTIME; } else { checkTime = item2.RUNSETTIME.AddDays(-3); } switch (item2.PLANCHECKFREQUENCY) { //case BSPLANCHECKFREQUENCYEnum.OneTime: case BSPLANCHECKFREQUENCYEnum.Year: if (checkTime.Month == month && checkTime.Day == day) { planDetails.Add(item2); } break; case BSPLANCHECKFREQUENCYEnum.HalfYear: if ((checkTime.Month == month && checkTime.Day == day) || ((checkTime.Month + 6) == month && (checkTime.Day + 183) == day)) { planDetails.Add(item2); } break; case BSPLANCHECKFREQUENCYEnum.Date: planDetails.Add(item2); break; case BSPLANCHECKFREQUENCYEnum.Week: if (checkTime.DayOfWeek == week) { planDetails.Add(item2); } break; case BSPLANCHECKFREQUENCYEnum.Month: if (checkTime.Day == day) { planDetails.Add(item2); } break; case BSPLANCHECKFREQUENCYEnum.Quarter: if (checkTime.Month == 1) { if ((month == 1 || month == 4 || month == 7 || month == 10) && checkTime.Day == day) { planDetails.Add(item2); } } if (checkTime.Month == 2) { if ((month == 2 || month == 5 || month == 8 || month == 11) && checkTime.Day == day) { planDetails.Add(item2); } } if (checkTime.Month == 3) { if ((month == 3 || month == 6 || month == 9 || month == 12) && checkTime.Day == day) { planDetails.Add(item2); } } break; default: break; } } } } } if (planDetails!=null && planDetails.Any()) { var planIds = planDetails.Select(t => t.DEVICE_MAINTENANCE_PLAN_ID).Distinct().ToList(); var planUserIds = planDetails.Select(t => t.USER_ID).Distinct().ToList(); var userInfos = this.GetEntities(t => t.ENABLE_STATUS == 0 && planUserIds.Contains(t.ID), new BaseFilter(filter.OrgId)); if (planIds != null && planIds.Any()) { foreach (var item in planIds) { //触发维保记录表 T_DM_DEVICE_MAINTENANCE_CHECK check = new T_DM_DEVICE_MAINTENANCE_CHECK(); check.ID = Guid.NewGuid(); check.ORG_ID = filter.OrgId; check.CHECKDATETIME = dtNow; check.CODE = "WB" + dtNow.ToString("yyyyMMddHHmmss"); check.NAME = "设备设施维保" + dtNow.ToString("MMdd"); check.STATUS_APPROVE = PFStandardStatus.Draft; check.USER_ID = plans.FirstOrDefault(t=>t.ID == item)?.USER_ID; check.DEVICE_MAINTENANCE_PLAN_ID = item; records.Add(check); var planFiles = plans.FirstOrDefault(t => t.ID == item); if (planFiles!= null && planFiles.Nav_Files != null && planFiles.Nav_Files.Any()) { foreach (var file in planFiles.Nav_Files) { T_DM_DEVICE_MAINTENANCE_CHECK_FILE tempFile = new T_DM_DEVICE_MAINTENANCE_CHECK_FILE(); tempFile.ORG_ID = filter.OrgId; tempFile.IMG_FILE_ID = file.IMG_FILE_ID; tempFile.DEVICE_MAINTENANCE_CHECK_ID = check.ID; files.Add(tempFile); } } //设备维保记录子表 var planTemps = planDetails.Where(t => t.DEVICE_MAINTENANCE_PLAN_ID == item).ToList(); if (planTemps != null && planTemps.Any()) { foreach (var device in planTemps) { T_DM_DEVICE_MAINTENANCE_CHECK_DETAIL detail = new T_DM_DEVICE_MAINTENANCE_CHECK_DETAIL(); detail.ORG_ID = filter.OrgId; detail.PLANID = (Guid)item; detail.CHECK_ID = check.ID; detail.DEVICEBASE_ID = device.DEVICEBASE_ID; detail.MACHINE_NAME = device?.Nav_DeviceBase?.NAME; detail.SPEC = device.SPEC; detail.POSITION = device.POSITION; detail.COUNT = device.COUNT; details.Add(detail); } } //触发待办 var userName = userInfos.FirstOrDefault(t => t.ID == check.USER_ID)?.NAME; sendNotices.Add(NotificationTaskService.InsertUserNoticeTaskModel("设备设施维保记录表", check.ID, check.ORG_ID, check.USER_ID.Value, userName, dtNow, dtNow.AddDays(1), 1, "DM030")); } plans.Where(m => planIds.Contains(m.ID)).ForEach(o => { o.IS_RUN = 1; }); } } UnifiedCommit(() => { if (records != null && records.Any()) BantchSaveEntityNoCommit(records); if (details != null && details.Any()) BantchSaveEntityNoCommit(details); if (sendNotices != null && sendNotices.Any()) BantchSaveEntityNoCommit(sendNotices); if (plans != null && plans.Any()) BantchSaveEntityNoCommit(plans); if (files != null && files.Any()) BantchSaveEntityNoCommit(files); }); } 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; }); } #endregion } }