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 { 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; } /// /// 设备设施维保计划 修改 /// /// /// [HttpPost, Route("FullUpdate")] public JsonActionResult FullUpdate([FromBody] T_DM_DEVICE_CHECK entity) { return SafeExecute(() => { var ListDetail = entity.Nav_ListDetail; entity.Nav_ListDetail = null; T_FM_NOTIFICATION_TASK taskEnd = null; List listTaskCheck = new List(); List anotherTask = new List(); List detailFiles = new List(); List repairFiles = new List(); List repairs = new List(); List deleteIds = new List(); 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 => 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 => 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 => 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 => 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(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(); var userInfos = this.GetEntities(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(deleteIds); if (repairs != null && repairs.Any()) BantchSaveEntityNoCommit(repairs); if (repairFiles != null && repairFiles.Any()) BantchSaveEntityNoCommit(repairFiles); }); return true; }); } /// /// 点检人 确认 /// [HttpPost, Route("Check")] public JsonActionResult Check([FromBody] KeywordFilter filter) { return SafeExecute(() => { 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(e => e.USER_ID == loginID && e.CHECK_ID == guid, "Nav_Check"); if (Check == null) { var DeviceCheck = GetEntity(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(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(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(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(CheckMain.USER_ID).NAME; var DeviceCheck = GetEntity(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; }); } /// /// 排序分页查询数据 /// /// 分页过滤实体 /// [HttpPost, Route("OrderPagedSuit")] public PagedActionResult OrderPaged([FromBody] KeywordPageFilter pageFilter) { return SafeGetPagedData(delegate (PagedActionResult 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=>t.ID == Guid.Parse(xxx.Value.ToString())); pageFilter.FilterGroup = new FilterGroup(); var type = run.SET_TYPE == DMSetTypeEnum.Check ? CheckType.Check : CheckType.CheckCircuit; PagedActionResult orderPageEntities = GetOrderPageEntities(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 orderPageEntities = GetOrderPageEntities(null, pageFilter, null); result.Data = orderPageEntities.Data; result.TotalCount = orderPageEntities.TotalCount; } }); } /// /// 获得单条实体数据 /// /// 过滤实体 /// [HttpPost, Route("GetSuit")] public JsonActionResult GetSuit([FromBody] KeywordFilter filter) { return SafeExecute(() => { var result = GetEntity(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; }); } /// /// 回调函数 /// /// /// [HttpGet, Route("BackUpdate")] public JsonActionResult BackUpdate(string id) { return SafeExecute(() => { return ApproveCallBackService.CallBack("DM/DMDeviceCheck/BackUpdate", id); }); } } }