mh_jy_safe/APT.MicroApi/APT.SC.WebApi/Controllers/Api/DMController/DMDeviceCheckController.cs

479 lines
25 KiB
C#
Raw Normal View History

2025-08-25 09:56:57 +08:00
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;
using APT.BaseData.Domain.IServices.AE;
using APT.BaseData.Domain.IServices.FM;
using APT.BaseData.Services.DomainServices;
using APT.BaseData.Services.Services.FM;
using APT.Infrastructure.Core;
using APT.MS.Domain.Entities.DM;
using APT.MS.Domain.Enums;
using APT.Utility;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
namespace APT.SC.WebApi.Controllers.Api.DM
{
[Route("api/DM/DMDeviceCheck")]
public class DMDeviceCheckController : AuthorizeApiController<T_DM_DEVICE_CHECK>
{
IPFCodeRuleService CodeRuleService { get; set; }
IFMFlowPermitService MFlowPermitService { get; set; }
IPFApproveCallBackService ApproveCallBackService { get; set; }
IFMNotificationTaskService NotificationTaskService { get; set; }
public DMDeviceCheckController(IPFCodeRuleService codeRuleService, IFMNotificationTaskService notificationTaskService, IFMFlowPermitService mFlowPermitService, IPFApproveCallBackService approveCallBackService)
{
NotificationTaskService = notificationTaskService;
CodeRuleService = codeRuleService;
MFlowPermitService = mFlowPermitService;
ApproveCallBackService = approveCallBackService;
}
/// <summary>
/// 设备设施维保计划 修改
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
[HttpPost, Route("FullUpdate")]
public JsonActionResult<bool> FullUpdate([FromBody] T_DM_DEVICE_CHECK entity)
{
return SafeExecute<bool>(() =>
{
var ListDetail = entity.Nav_ListDetail;
entity.Nav_ListDetail = null;
T_FM_NOTIFICATION_TASK taskEnd = null;
List<T_FM_NOTIFICATION_TASK> listTaskCheck = new List<T_FM_NOTIFICATION_TASK>();
List<T_FM_NOTIFICATION_TASK> anotherTask = new List<T_FM_NOTIFICATION_TASK>();
List<T_DM_DEVICE_CHECK_DETAIL_FILE> detailFiles = new List<T_DM_DEVICE_CHECK_DETAIL_FILE>();
List<T_DM_DEVICE_REPAIR_FILE> repairFiles = new List<T_DM_DEVICE_REPAIR_FILE>();
List<T_DM_DEVICE_REPAIR> repairs = new List<T_DM_DEVICE_REPAIR>();
List <Guid> deleteIds = new List<Guid>();
var files = entity.Nav_Files;
entity.Nav_Files = null;
var users = entity.Nav_ListUser;
entity.Nav_ListUser = null;
entity.RECORD_DATE = DateTime.Now;
var loginID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID;
if (entity.TaskID != Guid.Empty)
{
var currTask = GetEntity<T_FM_NOTIFICATION_TASK>(t => t.ID == entity.TaskID);
if (currTask != null)
{
loginID = currTask.USER_ID;
}
}
if (users != null && users.Any())
{
var i = 0;
users.ForEach(t =>
{
t.ORG_ID = entity.ORG_ID; t.CHECK_ID = entity.ID;
if (t.USER_ID == (Guid)loginID)
{
t.ISMAIN = true; t.ISCHECK = true;
}
else if (i == 0)
{
t.ISMAIN = true;
}
t.Nav_User = null;
i++;
});
}
if (ListDetail != null && ListDetail.Any())
{
var detailIds = ListDetail.Select(t => t.ID).ToList();
deleteIds = this.GetEntities<T_DM_DEVICE_CHECK_DETAIL_FILE>(t => detailIds.Contains(t.CHECK_DETAIL_ID), new BaseFilter(entity.ORG_ID)).Select(m => m.ID).ToList();
foreach (var item in ListDetail)
{
item.DEVICE_CHECK_ID = entity.ID;
if (!item.IS_DELETED && item.Nav_DetailFiles != null && item.Nav_DetailFiles.Any())
{
item.Nav_DetailFiles.ForEach(t =>
{
T_DM_DEVICE_CHECK_DETAIL_FILE file = new T_DM_DEVICE_CHECK_DETAIL_FILE();
file.ORG_ID = entity.ORG_ID;
file.CHECK_DETAIL_ID = item.ID;
file.IMG_FILE_ID = t.IMG_FILE_ID;
detailFiles.Add(file);
});
}
item.Nav_DetailFiles = null;
}
}
else
{
throw new Exception(entity.CHECKTYPE.GetDescription() + "明细不能为空!");
}
if (entity.STATUS != PFStandardStatus.Draft)
{
//users.Add(new T_DM_DEVICE_CHECK_USER
//{
// ORG_ID = entity.ORG_ID, CHECK_ID = entity.ID, USER_ID = (Guid)loginID, ISMAIN = true, ISCHECK = true
//});
int RowIndex = 1;
var deviceBase = this.GetEntity<T_DM_DEVICE_BASE>(t => t.ID == entity.DEVICEBASE_ID, "Nav_UseUser");
foreach (var item in ListDetail.Where(t=>!t.IS_DELETED).ToList())
{
if (item.CHECK_VALUE == null)
{
throw new Exception("请选择行:" + RowIndex + "检查结论!");
}
//else if ((item.CHECK_VALUE.Value == CheckResult.CheckWork || item.CHECK_VALUE.Value == CheckResult.CheckStop) && string.IsNullOrEmpty(item.DESCRIPTION))
else if (item.CHECK_VALUE.Value == CheckResult.NotOK && string.IsNullOrEmpty(item.DESCRIPTION))
{
throw new Exception("请填写子表行:【" + RowIndex + "】的问题描述!");
}
if (item.CHECK_VALUE.Value == CheckResult.NotOK)
{
T_DM_DEVICE_REPAIR repair = new T_DM_DEVICE_REPAIR();
repair.ORG_ID = entity.ORG_ID;
repair.CODE = DateTime.Now.ToString("yyyyMMddHHmmss");
repair.DESCRPTION = item.DESCRIPTION;
repair.DEVICE_BASE_ID = entity.DEVICEBASE_ID;
repair.MineType = entity.MineType;
repair.MACHINE_CODE = deviceBase?.MACHINE_CODE;
repair.MACHINE_NAME = deviceBase?.NAME;
repairs.Add(repair);
var itemFiles = detailFiles.Where(t => t.CHECK_DETAIL_ID == item.ID).ToList();
if (itemFiles != null && itemFiles.Any())
{
itemFiles.ForEach(t =>
{
T_DM_DEVICE_REPAIR_FILE file = new T_DM_DEVICE_REPAIR_FILE();
file.ORG_ID = entity.ORG_ID;
file.REPAIR_ID = repair.ID;
file.IMG_FILE_ID = t.IMG_FILE_ID;
repairFiles.Add(file);
});
}
if (deviceBase != null && deviceBase.Nav_UseUser != null)
{
var task = NotificationTaskService.InsertUserNoticeTaskModel("设备设施故障报修-" + deviceBase.NAME, repair.ID, entity.ORG_ID, (Guid)deviceBase.USE_USER_ID, deviceBase.Nav_UseUser.NAME, DateTime.Now, DateTime.Now.AddDays(1), 1, "DM020");
listTaskCheck.Add(task);
}
}
RowIndex++;
}
if (entity.TaskID != Guid.Empty)
{
//taskEnd = NotificationTaskService.GetEntityTask(entity.TaskID, "DM010_SHOWPRINT");
taskEnd = NotificationTaskService.GetEntityTask(entity.TaskID, (entity.CHECKTYPE == CheckType.CheckCircuit ? "DM032_SHOWPRINT" : "DM010_SHOWPRINT"));
}
var formCode = entity.CHECKTYPE == CheckType.CheckCircuit ? "DM032_SHOWPRINT" : "DM010_SHOWPRINT";
//把其他人的待办置为已办
anotherTask = this.GetEntities<T_FM_NOTIFICATION_TASK>(t => t.NOTICE_STATUS == 0 && t.SOURCE_DATA_ID == entity.ID && t.USER_ID != loginID, new BaseFilter(entity.ORG_ID)).ToList();
if (anotherTask != null && anotherTask.Any())
{
anotherTask.ForEach(t => { t.NOTICE_STATUS = 1;t.SOURCE_FORMCODE = formCode; });
}
//给其他人 发送待办 确认
var listUser = users.Where(e => e.CHECK_ID == entity.ID && e.USER_ID != loginID);
if (listUser == null || !listUser.Any())
{
//没有 别的检查人
entity.STATUS = PFStandardStatus.Approving;
//取审批流水码
var sysFilter = new SystemCodeFilter();
sysFilter.CodeType = (int)PFCodeRuleType.;
sysFilter.Count = 1;
sysFilter.OrgId = entity.ORG_ID;
var codes = CodeRuleService.NewGenSerial(sysFilter);
var serialCode = codes.Split(new char[] { ',' });
var approveCode = entity.CHECKTYPE == CheckType.Check ? "DM010" : "DM032";
var sourceFormcode = entity.CHECKTYPE == CheckType.Check ? "DM010_SHOWPRINT" : "DM032_SHOWPRINT";
MFlowPermitService.InsertApprove(serialCode[0], approveCode, "", entity.ID, sourceFormcode, entity.TaskID, true, () =>
{
if (entity != null)
UpdateEntityNoCommit(entity);
if (files != null && files.Any())
BantchSaveEntityNoCommit(files);
if (taskEnd != null)//结束待办
UpdateEntityNoCommit(taskEnd);
if (ListDetail != null && ListDetail.Any())//检查明细
BantchSaveEntityNoCommit(ListDetail);
if (users != null && users.Any())//检查明细
BantchSaveEntityNoCommit(users);
if (listTaskCheck != null && listTaskCheck.Any())//检查明细
BantchSaveEntityNoCommit(listTaskCheck);
if (anotherTask != null && anotherTask.Any())
BantchSaveEntityNoCommit(anotherTask);
if (detailFiles != null && detailFiles.Any())
BantchSaveEntityNoCommit(detailFiles);
if (deleteIds != null && deleteIds.Any())
BantchDeleteEntityNoCommit<T_DM_DEVICE_CHECK_DETAIL_FILE>(deleteIds);
if (repairs != null && repairs.Any())
BantchSaveEntityNoCommit(repairs);
if (repairFiles != null && repairFiles.Any())
BantchSaveEntityNoCommit(repairFiles);
}, null, null, null, null, null, sourceFormcode, null);
return true;
}
else
{
entity.STATUS = PFStandardStatus.Sign;
var UserId = listUser.Where(m => m.USER_ID != loginID).Select(t=>t.USER_ID).Distinct().ToList();
var userName = new List<string>();
var userInfos = this.GetEntities<T_FM_USER>(t => UserId.Contains(t.ID), new BaseFilter(entity.ORG_ID));
foreach (var item in userInfos)
{
userName.Add(item.NAME);
}
//listTaskCheck = NotificationTaskService.InsertUserNoticeTaskModels((entity.CHECKTYPE == CheckType.CheckCircuit ? "设备巡检" : "设备点检") + "确认" + (entity.CREATE_TIME.HasValue ? entity.CREATE_TIME.Value.ToString("MMdd") : ""), entity.ID, entity.ORG_ID, UserId, userName, DateTime.Now, DateTime.Now.AddDays(1), 1, "DM010_SHOWPRINT");
listTaskCheck = NotificationTaskService.InsertUserNoticeTaskModels((entity.CHECKTYPE == CheckType.CheckCircuit ? "设备设施巡检" : "设备设施点检") + "确认" + (entity.CREATE_TIME.HasValue ? entity.CREATE_TIME.Value.ToString("MMdd") : ""), entity.ID, entity.ORG_ID, UserId, userName, DateTime.Now, DateTime.Now.AddDays(1), 1, (entity.CHECKTYPE == CheckType.CheckCircuit ? "DM032_SHOWPRINT" : "DM010_SHOWPRINT"));
}
}
this.UnifiedCommit(() =>
{
if (entity != null)
UpdateEntityNoCommit(entity);
if (files != null && files.Any())
BantchSaveEntityNoCommit(files);
if (taskEnd != null)//结束待办
UpdateEntityNoCommit(taskEnd);
if (ListDetail != null && ListDetail.Any())//检查明细
BantchSaveEntityNoCommit(ListDetail);
if (users != null && users.Any())//检查明细
BantchSaveEntityNoCommit(users);
if (listTaskCheck != null && listTaskCheck.Any())//检查明细
BantchSaveEntityNoCommit(listTaskCheck);
if (anotherTask != null && anotherTask.Any())
BantchSaveEntityNoCommit(anotherTask);
if (detailFiles != null && detailFiles.Any())
BantchSaveEntityNoCommit(detailFiles);
if (deleteIds != null && deleteIds.Any())
BantchDeleteEntityNoCommit<T_DM_DEVICE_CHECK_DETAIL_FILE>(deleteIds);
if (repairs != null && repairs.Any())
BantchSaveEntityNoCommit(repairs);
if (repairFiles != null && repairFiles.Any())
BantchSaveEntityNoCommit(repairFiles);
});
return true;
});
}
/// <summary>
/// 点检人 确认
/// </summary>
[HttpPost, Route("Check")]
public JsonActionResult<bool> Check([FromBody] KeywordFilter filter)
{
return SafeExecute<bool>(() =>
{
if (string.IsNullOrEmpty(filter.Keyword) || string.IsNullOrEmpty(filter.Parameter1))
{
throw new Exception("传参有误!");
}
var guid = new Guid(filter.Keyword);
var taskID = new Guid(filter.Parameter1);
if (guid == Guid.Empty || taskID == Guid.Empty)
{
throw new Exception("传参有误!");
}
var task = NotificationTaskService.GetEntityTask(taskID);
var loginID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID;
var Check = GetEntity<T_DM_DEVICE_CHECK_USER>(e => e.USER_ID == loginID && e.CHECK_ID == guid, "Nav_Check");
if (Check == null)
{
var DeviceCheck = GetEntity<T_DM_DEVICE_CHECK>(e => e.ID == guid); DeviceCheck.STATUS = PFStandardStatus.Archived;//状态修改
//记录人 上级 确认
this.UnifiedCommit(() =>
{
if (task != null)
UpdateEntityNoCommit(task);
if (DeviceCheck != null)
UpdateEntityNoCommit(DeviceCheck);
});
}
else if (Check.ISCHECK)
{
this.UnifiedCommit(() =>
{
if (task != null)
UpdateEntityNoCommit(task);
});
throw new Exception("您已审阅,无需再次操作!");
}
else
{
Check.ISCHECK = true;
var UnCheck = GetEntity<T_DM_DEVICE_CHECK_USER>(e => e.USER_ID != loginID && e.CHECK_ID == guid && !e.ISCHECK);
T_FM_NOTIFICATION_TASK taskMaster = null;
if (UnCheck == null)
{
//最后一个确认 记录人的 上级 审批
Guid UserId = Guid.Empty;
string userName = string.Empty;
Guid DEPID = Guid.Empty;
var CheckMain = GetEntity<T_DM_DEVICE_CHECK_USER>(e => e.CHECK_ID == guid && e.ISMAIN, "Nav_User.Nav_Department");
//if (CheckMain.Nav_User.Nav_Department.USER_ID != CheckMain.USER_ID)
//{
// if (CheckMain.Nav_User.Nav_Department.USER_ID.HasValue)
// {
// UserId = CheckMain.Nav_User.Nav_Department.USER_ID.Value;
// }
// else
// {
// DEPID = CheckMain.Nav_User.DEPARTMENT_ID.Value;
// }
//}
//else
//{
// var dep = GetEntity<T_FM_DEPARTMENT>(CheckMain.Nav_User.Nav_Department.PARENT_ID.Value);
// if (dep.USER_ID.HasValue)
// {
// UserId = dep.USER_ID.Value;
// }
// else
// {
// DEPID = dep.ID;
// }
//}
if (CheckMain != null && CheckMain.USER_ID != Guid.Empty)
{
//userName = GetEntity<T_FM_USER>(CheckMain.USER_ID).NAME;
var DeviceCheck = GetEntity<T_DM_DEVICE_CHECK>(e => e.ID == guid); DeviceCheck.STATUS = PFStandardStatus.Approving;
//取审批流水码
var sysFilter = new SystemCodeFilter();
sysFilter.CodeType = (int)PFCodeRuleType.;
sysFilter.Count = 1;
sysFilter.OrgId = DeviceCheck.ORG_ID;
var codes = CodeRuleService.NewGenSerial(sysFilter);
var serialCode = codes.Split(new char[] { ',' });
var approveCode = DeviceCheck.CHECKTYPE == CheckType.Check ? "DM010" : "DM032";
var sourceFormcode= DeviceCheck.CHECKTYPE == CheckType.Check ? "DM010_SHOWPRINT":"DM032_SHOWPRINT";
MFlowPermitService.InsertApprove(serialCode[0], approveCode, "", DeviceCheck.ID, sourceFormcode, Check.TaskID, true, () =>
{
if (DeviceCheck != null)
this.UpdateEntityNoCommit(DeviceCheck);
//if (task != null)
// UpdateEntityNoCommit(task);
if (Check != null)
UpdateEntityNoCommit(Check);
}, null, CheckMain.USER_ID, null, null, null, sourceFormcode, null);
return true;
}
else
{
//先不管
}
//if (UserId != Guid.Empty)
//{
// if (UserId == loginID)
// {
// //自己就是 填表人的 上级 不发送待办
// }
// else
// {
// taskMaster = NotificationTaskService.InsertUserNoticeTaskModel((Check.Nav_Check.CHECKTYPE == CheckType.CheckCircuit ? "设备巡检" : "设备点检") + "审阅", CheckMain.CHECK_ID, CheckMain.ORG_ID, UserId, userName, DateTime.Now, DateTime.Now.AddDays(1), 1, (Check.Nav_Check.CHECKTYPE == CheckType.CheckCircuit ? "DM032_SHOWPRINT" : "DM010_SHOWPRINT"));
// }
//}
}
//还有别人未 确认
this.UnifiedCommit(() =>
{
if (task != null)
UpdateEntityNoCommit(task);
if (Check != null)
UpdateEntityNoCommit(Check);
if (taskMaster != null)
UpdateEntityNoCommit(taskMaster);
});
}
return true;
});
}
/// <summary>
/// 排序分页查询数据
/// </summary>
/// <param name="pageFilter">分页过滤实体</param>
/// <returns></returns>
[HttpPost, Route("OrderPagedSuit")]
public PagedActionResult<T_DM_DEVICE_CHECK> OrderPaged([FromBody] KeywordPageFilter pageFilter)
{
return SafeGetPagedData(delegate (PagedActionResult<T_DM_DEVICE_CHECK> result)
{
if (!string.IsNullOrEmpty(pageFilter.MenuParameter) && pageFilter.MenuParameter.Contains("="))
{
var listParm = pageFilter.MenuParameter.Split("=");
pageFilter.FilterGroup.Rules.Add(new FilterRule()
{
Field = listParm[0],
Value = listParm[1]
});
}
var xxx = pageFilter.FilterGroup.Rules.FirstOrDefault(t => t.Field == "DEVICE_BASE_ID");
if (xxx != null)
{
var run = this.GetEntity<T_DM_TIME_RUN>(t=>t.ID == Guid.Parse(xxx.Value.ToString()));
pageFilter.FilterGroup = new FilterGroup();
var type = run.SET_TYPE == DMSetTypeEnum.Check ? CheckType.Check : CheckType.CheckCircuit;
PagedActionResult <T_DM_DEVICE_CHECK> orderPageEntities = GetOrderPageEntities<T_DM_DEVICE_CHECK>(t=>t.DEVICEBASE_ID == run.DEVICE_BASE_ID && t.STATUS == PFStandardStatus.Archived && t.CHECKTYPE == type, pageFilter, null);
result.Data = orderPageEntities.Data;
result.TotalCount = orderPageEntities.TotalCount;
}
else
{
PagedActionResult<T_DM_DEVICE_CHECK> orderPageEntities = GetOrderPageEntities<T_DM_DEVICE_CHECK>(null, pageFilter, null);
result.Data = orderPageEntities.Data;
result.TotalCount = orderPageEntities.TotalCount;
}
});
}
/// <summary>
/// 获得单条实体数据
/// </summary>
/// <param name="filter">过滤实体</param>
/// <returns></returns>
[HttpPost, Route("GetSuit")]
public JsonActionResult<T_DM_DEVICE_CHECK> GetSuit([FromBody] KeywordFilter filter)
{
return SafeExecute(() =>
{
var result = GetEntity<T_DM_DEVICE_CHECK>(null, filter, null);
if (result.Nav_ListUser != null && result.Nav_ListUser.Any())
{
result.Nav_ListUser = result.Nav_ListUser.OrderByDescending(e => e.ISMAIN).ToList();
}
return result;
});
}
/// <summary>
/// 回调函数
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet, Route("BackUpdate")]
public JsonActionResult<bool> BackUpdate(string id)
{
return SafeExecute(() =>
{
return ApproveCallBackService.CallBack("DM/DMDeviceCheck/BackUpdate", id);
});
}
}
}