mh_jy_safe/APT.MicroApi/APT.PP.WebApi/Controllers/Api/DMController.cs

1509 lines
91 KiB
C#
Raw Normal View History

2025-08-25 09:56:57 +08:00
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<T_DM_DEVICE_MAINTENANCE_PLAN>
{
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;
}
/// <summary>
/// 判断跑批时间是否符合
/// </summary>
/// <param name="RUNSETTIME"></param>
/// <param name="dtNow"></param>
/// <param name="minAdvance"></param>
/// <param name="minLaster"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 机电管理 每天触发
/// 数据逻辑自己控制
/// 如果要写入此方法 每个人的代码用代码块包起来 以免冲突
/// </summary>
/// <param name="filter"></param>
/// <returns></returns>
//[HttpPost, Route("DailyRun")]
//public JsonActionResult<bool> DailyRun([FromBody] KeywordFilter filter)
//{
// return SafeExecute<bool>(() =>
// {
// 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<T_DM_DEVICE_MAINTENANCE_PLAN>(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<T_DM_DEVICE_MAINTENANCE_PLAN> listPlan = new List<T_DM_DEVICE_MAINTENANCE_PLAN>();
// 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<string> 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<T_DM_DEVICE_MAINTENANCE_CHECK_DETAIL>(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<T_DM_DEVICE_BASE> listDeviceBase = null; //点检 巡检 结果
// var listDeviceBaseT = GetEntities<T_DM_DEVICE_BASE>(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<T_DM_DEVICE_CHECK_DETAIL>(e => e.CREATE_TIME.HasValue && e.CREATE_TIME.Value.Date == dtNowEdit.Date, null, null);//listBaseCheckID.Contains(e.BASECHECK_ID) &&
// listDeviceBase = listDeviceBaseT.ToList();
// List<T_DM_DEVICE_BASE_CHECK> 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<string> 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<T_DM_DEVICE_MAINTENANCE_CHECK> listCheck = new List<T_DM_DEVICE_MAINTENANCE_CHECK>();
// List<T_DM_DEVICE_MAINTENANCE_CHECK_USER> listCheckUser = new List<T_DM_DEVICE_MAINTENANCE_CHECK_USER>();
// List<T_DM_DEVICE_MAINTENANCE_CHECK_USER> listCheckUserTemp = null;
// List<T_DM_DEVICE_MAINTENANCE_CHECK_DETAIL> listCheckDetail = new List<T_DM_DEVICE_MAINTENANCE_CHECK_DETAIL>();
// List<T_FM_NOTIFICATION_TASK> listTaskMaintCheck = new List<T_FM_NOTIFICATION_TASK>();
// var listBaseID = listPlan.Select(e => e.DEVICEBASE_ID.Value);
// var listBase = GetEntities<T_DM_DEVICE_BASE>(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<T_DM_DEVICE_MAINTENANCE_CHECK_USER>();
// 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<T_DM_DEVICE_BASE>(e => listBaseID.Contains(e.ID), null, "Nav_ListCheck.Nav_ListUser.Nav_User");
// //if (listBase == null || !listBase.Any())
// //{
// // return true;
// //}
// //给 符合条件的 计划 对应 设备设施库 中 点检、巡检 发送 点检 巡检 待办 给 第一个 巡检人员
// List<T_DM_DEVICE_CHECK> listCheckSend = new List<T_DM_DEVICE_CHECK>();
// List<T_DM_DEVICE_CHECK_DETAIL> listCheckDetailSend = new List<T_DM_DEVICE_CHECK_DETAIL>();
// List<T_DM_DEVICE_CHECK_USER> listCheckUserSend = new List<T_DM_DEVICE_CHECK_USER>();
// List<T_FM_NOTIFICATION_TASK> listTask = new List<T_FM_NOTIFICATION_TASK>();
// 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<T_FM_SYNC_TASK>(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
/// <summary>
/// 触发设备设施检测检验
/// </summary>
/// <returns></returns>
[HttpPost, Route("InspectionSync")]
public JsonActionResult<bool> InspectionSync([FromBody] KeywordFilter filter)
{
return SafeExecute<bool>(() =>
{
try
{
var dtNow = DateTime.Now;
var month = dtNow.Month;
var day = dtNow.Day;
var time = dtNow.TimeOfDay;
var week = dtNow.DayOfWeek;
List<T_FM_NOTIFICATION_TASK> sendNotices = new List<T_FM_NOTIFICATION_TASK>();
List<T_PT_TIME_SET> timeSetLists = new List<T_PT_TIME_SET>();
T_DM_DETECTION_INSPECTION_RECORD record = null;
var newFilter = new BaseFilter(filter.OrgId);
newFilter.SelectField = new List<string> { "PLANCHECKFREQUENCY", "MONTH", "DATA", "WEEKDATA", "RUNSETTIME", "DEVICE_BASE_ID", "MineType", "POST_ID", "DEPARTMENT_ID", "DEVICE_ID" };
var timeSets = GetEntities<T_PT_TIME_SET>(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_DM_DEVICE_BASE>(t => deviceIds.Contains(t.DEVICE_ID), new BaseFilter(filter.OrgId));
var deviceBaseIds = deviceBases.Select(t => t.ID).ToList();
var records = this.GetEntities<T_DM_DETECTION_INSPECTION_RECORD>(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_FM_USER>(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;
});
}
/// <summary>
/// 触发设备设施归还记录
/// </summary>
/// <returns></returns>
[HttpPost, Route("DeviceReturnSync")]
public JsonActionResult<bool> DeviceReturnSync([FromBody] KeywordFilter filter)
{
return SafeExecute<bool>(() =>
{
try
{
var dtNow = DateTime.Now;
List<T_FM_NOTIFICATION_TASK> sendNotices = new List<T_FM_NOTIFICATION_TASK>();
var details = GetEntities<T_DM_DEVICE_ISSUE_DETAIL>(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;
});
}
/// <summary>
/// 触发设备设施点检/巡检
/// </summary>
/// <returns></returns>
[HttpPost, Route("DeviceCheckSync")]
public JsonActionResult<bool> DeviceCheckSync([FromBody] KeywordFilter filter)
{
return SafeExecute<bool>(() =>
{
try
{
var dtNow = DateTime.Now;
var month = dtNow.Month;
var day = dtNow.Day;
var time = dtNow.TimeOfDay;
var week = dtNow.DayOfWeek;
List<T_FM_NOTIFICATION_TASK> sendNotices = new List<T_FM_NOTIFICATION_TASK>();
List<T_DM_DEVICE_CHECK> checks = new List<T_DM_DEVICE_CHECK>();
List<T_DM_DEVICE_CHECK_DETAIL> details = new List<T_DM_DEVICE_CHECK_DETAIL>();
List<T_DM_DEVICE_CHECK_USER> checkUsers = new List<T_DM_DEVICE_CHECK_USER>();
List<T_DM_TIME_RUN> sets = new List<T_DM_TIME_RUN>();
List<T_FM_DEPARTMENT_SCHEDULING> shiftClassList = new List<T_FM_DEPARTMENT_SCHEDULING>();
var timeSets = GetEntities<T_DM_TIME_RUN>(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_DM_DEVICE_BASE>(t => deviceIds.Contains(t.DEVICE_ID) && t.DEVICE_STATUS == DMDeviceStatusEnum.使, new BaseFilter(filter.OrgId));
var userInfos = this.GetEntities<T_FM_USER>(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_FM_TEAM>(t => departmentIds.Contains(t.DEPARTMENT_ID), new BaseFilter(filter.OrgId));
var teamIds = teamInfos.Select(t => t.ID).ToList();
//查排班
shiftClassList = this.GetEntities<T_FM_DEPARTMENT_SCHEDULING>(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_FM_DEPARTMENT>(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;
});
}
/// <summary>
/// 触发设备设施维保计划
/// </summary>
/// <returns></returns>
[HttpPost, Route("MaintenancePlanSync")]
public JsonActionResult<bool> MaintenancePlanSync([FromBody] KeywordFilter filter)
{
return SafeExecute<bool>(() =>
{
try
{
var dtNow = DateTime.Now;
var month = dtNow.Month;
var day = dtNow.Day;
var time = dtNow.TimeOfDay;
var week = dtNow.DayOfWeek;
List<T_FM_NOTIFICATION_TASK> sendNotices = new List<T_FM_NOTIFICATION_TASK>();
List<T_DM_DEVICE_MAINTENANCE_PLAN> plans = new List<T_DM_DEVICE_MAINTENANCE_PLAN>();
List<T_DM_DEVICE_MAINTENANCE_PLAN_DETAIL> details = new List<T_DM_DEVICE_MAINTENANCE_PLAN_DETAIL>();
List<T_PT_TIME_SET> timeSetLists = new List<T_PT_TIME_SET>();
var timeSets = GetEntities<T_PT_TIME_SET>(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_DM_DEVICE_BASE>(t => minetypes.Contains(t.MineType) && t.DEVICE_STATUS == DMDeviceStatusEnum.使, new BaseFilter(filter.OrgId));
var userInfos = this.GetEntities<T_FM_USER>(t => t.ENABLE_STATUS == 0 && departmentIds.Contains(t.DEPARTMENT_ID), new BaseFilter(filter.OrgId),"Nav_Person");
//判断是否今天已经触发过
var planExists = this.GetEntities<T_DM_DEVICE_MAINTENANCE_PLAN>(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;
});
}
/// <summary>
/// 触发设备设施维保记录
/// </summary>
/// <returns></returns>
[HttpPost, Route("MaintenanceRecordSync")]
public JsonActionResult<bool> MaintenanceRecordSync([FromBody] KeywordFilter filter)
{
return SafeExecute<bool>(() =>
{
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<T_FM_NOTIFICATION_TASK> sendNotices = new List<T_FM_NOTIFICATION_TASK>();
List<T_DM_DEVICE_MAINTENANCE_CHECK> records = new List<T_DM_DEVICE_MAINTENANCE_CHECK>();
List<T_DM_DEVICE_MAINTENANCE_PLAN_DETAIL> planDetails = new List<T_DM_DEVICE_MAINTENANCE_PLAN_DETAIL>();
List<T_DM_DEVICE_MAINTENANCE_CHECK_DETAIL> details = new List<T_DM_DEVICE_MAINTENANCE_CHECK_DETAIL>();
List<T_DM_DEVICE_MAINTENANCE_CHECK_FILE> files = new List<T_DM_DEVICE_MAINTENANCE_CHECK_FILE>();
var classFilter = new BaseFilter(filter.GetOrgId());
classFilter.IgnoreDataRule = true;
var plans = GetEntities<T_DM_DEVICE_MAINTENANCE_PLAN>(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_FM_USER>(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
}
}