mh_jy_safe/APT.MicroApi/APT.PP.WebApi/Controllers/Api/DMController.cs
2025-08-25 09:56:57 +08:00

1509 lines
91 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}
}