diff --git a/APT.MS.Domain/Enums/FO/FOShiftRecordEnum.cs b/APT.MS.Domain/Enums/FO/FOShiftRecordEnum.cs index 453a402..96a3516 100644 --- a/APT.MS.Domain/Enums/FO/FOShiftRecordEnum.cs +++ b/APT.MS.Domain/Enums/FO/FOShiftRecordEnum.cs @@ -178,8 +178,12 @@ namespace APT.MS.Domain.Enums /// 草稿 0 /// [Description("草稿")] - Draft = 0, - + Draft = 0, + /// + /// 交班人确认 2 + /// + [Description("交班人确认")] + PreSign = 2, /// /// 责任人确认 5 /// diff --git a/APT.MicroApi/APT.FO.WebApi/Controllers/LeaderWellRecordController.cs b/APT.MicroApi/APT.FO.WebApi/Controllers/LeaderWellRecordController.cs index 2deb978..57d4e55 100644 --- a/APT.MicroApi/APT.FO.WebApi/Controllers/LeaderWellRecordController.cs +++ b/APT.MicroApi/APT.FO.WebApi/Controllers/LeaderWellRecordController.cs @@ -1,7 +1,13 @@ -using APT.Infrastructure.Core; +using APT.BaseData.Domain.Entities; +using APT.BaseData.Domain.Entities.FM; +using APT.BaseData.Domain.IServices.FM; +using APT.BaseData.Services.Services.FM; +using APT.Infrastructure.Core; using APT.MS.Domain.Entities.FO; +using APT.MS.Domain.Enums; using APT.Utility; using Google.Protobuf.Collections; +using InfluxData.Net.InfluxDb.Models.Responses; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; @@ -15,7 +21,11 @@ namespace APT.FO.WebApi.Controllers [Route("api/FO/FOLeaderWellRecord")] public partial class LeaderWellRecordController : AuthorizeApiController { - + IFMNotificationTaskService NotificationTaskService { get; set; } + public LeaderWellRecordController(IFMNotificationTaskService notificationTaskService) + { + NotificationTaskService = notificationTaskService; + } [HttpPost, Route("GetEdit")] public JsonActionResult GetEdit([FromBody] KeywordFilter filter) { @@ -48,12 +58,14 @@ namespace APT.FO.WebApi.Controllers var departmentId = APT.Infrastructure.Api.AppContext.CurrentSession.DepartmentID; entity.APPLY_USER_ID = loginUserId; entity.APPLY_DEPARTMENT_ID = departmentId; - var details = entity.Nav_Details; - if (details != null && details.Any()) + if (entity.JOB_START_DATE == null) { - details = details.Where(t => !t.IS_DELETED).ToList(); + throw new Exception("值班开始时间不能为空"); + } + if (entity.JOB_END_DATE == null) + { + throw new Exception("值班结束时间不能为空"); } - entity.Nav_Details = null; var userIds = this.GetEntities(t => t.LEADER_WELL_RECORD_ID == entity.ID, new BaseFilter(entity.ORG_ID)).Select(m => m.ID).ToList(); var fileIds = this.GetEntities(t => t.LEADER_WELL_RECORD_ID == entity.ID, new BaseFilter(entity.ORG_ID)).Select(m => m.ID).ToList(); var detailIds = this.GetEntities(t => t.LEADER_WELL_RECORD_ID == entity.ID, new BaseFilter(entity.ORG_ID)).Select(m => m.ID).ToList(); @@ -68,6 +80,44 @@ namespace APT.FO.WebApi.Controllers var detailAreaList = new List(); var detailPreUserList = new List(); var detailAfterUserList = new List(); + var users = entity.Nav_Users; + if (users != null && users.Any()) + { + users = users.Where(t => !t.IS_DELETED).ToList(); + } + else + { + users = new List(); + var currUserRecord = new T_FO_LEADER_WELL_RECORD_USER() + { + LEADER_WELL_RECORD_ID = entity.ID, + USER_ID = (Guid)loginUserId, + ORG_ID = entity.ORG_ID, + DEAL_STATUS = 0 + }; + users.Add(currUserRecord); + } + entity.Nav_Users = null; + if (users != null && users.Any()) + { + foreach (var item in users) + { + item.ORG_ID = entity.ORG_ID; + item.LEADER_WELL_RECORD_ID = entity.ID; + item.Nav_User = null; + if (item.USER_ID == loginUserId) + { + item.DEAL_STATUS = MS.Domain.Enums.FOUserShiftStatusEnum.已处理; + } + userList.Add(item); + } + } + var details = entity.Nav_Details; + if (details != null && details.Any()) + { + details = details.Where(t => !t.IS_DELETED).ToList(); + } + entity.Nav_Details = null; if (details != null && details.Any()) { foreach (var item in details) @@ -99,9 +149,30 @@ namespace APT.FO.WebApi.Controllers item2.ORG_ID = entity.ORG_ID; item2.LEADER_WELL_RECORD_DETAIL_ID = item.ID; item2.Nav_PreUser = null; + if (item2.PRE_USER_ID == loginUserId) + { + item2.PRE_USER_DEAL_STATUS = MS.Domain.Enums.FOUserShiftStatusEnum.已处理; + } detailPreUserList.Add(item2); } } + else + { + foreach(var user in users) + { + T_FO_LEADER_WELL_RECORD_DETAIL_PREUSER currUserRecord = new T_FO_LEADER_WELL_RECORD_DETAIL_PREUSER(); + currUserRecord.ORG_ID = entity.ORG_ID; + currUserRecord.LEADER_WELL_RECORD_DETAIL_ID = item.ID; + currUserRecord.PRE_USER_ID = user.USER_ID; + currUserRecord.PRE_USER_DEAL_STATUS = user.DEAL_STATUS; + currUserRecord.Nav_PreUser = null; + if (currUserRecord.PRE_USER_ID == loginUserId) + { + currUserRecord.PRE_USER_DEAL_STATUS = MS.Domain.Enums.FOUserShiftStatusEnum.已处理; + } + detailPreUserList.Add(currUserRecord); + } + } if (item.Nav_AfterUsers != null && item.Nav_AfterUsers.Any()) { foreach (var item2 in item.Nav_AfterUsers) @@ -109,12 +180,20 @@ namespace APT.FO.WebApi.Controllers item2.ORG_ID = entity.ORG_ID; item2.LEADER_WELL_RECORD_DETAIL_ID = item.ID; item2.Nav_AfterUser = null; + if (item2.AFTER_USER_ID == loginUserId) + { + item2.AFTER_USER_DEAL_STATUS = MS.Domain.Enums.FOUserShiftStatusEnum.已处理; + } detailAfterUserList.Add(item2); } } item.ORG_ID = entity.ORG_ID; item.LEADER_WELL_RECORD_ID = entity.ID; item.Nav_DetailFiles = null; + if (item.USER_ID == loginUserId) + { + item.USER_DEAL_STATUS = MS.Domain.Enums.FOUserShiftStatusEnum.已处理; + } detailList.Add(item); } } @@ -134,36 +213,42 @@ namespace APT.FO.WebApi.Controllers fileList.Add(item); } } - var users = entity.Nav_Users; - if (users != null && users.Any()) - { - users = users.Where(t => !t.IS_DELETED).ToList(); - } - entity.Nav_Users = null; - if (users != null && users.Any()) - { - foreach (var item in users) - { - item.ORG_ID = entity.ORG_ID; - item.LEADER_WELL_RECORD_ID = entity.ID; - item.Nav_User = null; - userList.Add(item); - } - } + entity.STATUS = FOStatusEnum.Draft; + var sendNotices = new List(); if (entity.PUBLISH != null && entity.PUBLISH.Equals("SaveAndNotify")) { - if (entity.STATUS == MS.Domain.Enums.FOStatusEnum.Draft) + var allUsers = this.GetEntities(t => t.ENABLE_STATUS == 0 && !t.CODE.Contains("admin"), new BaseFilter(entity.ORG_ID)); + var sendUserIds = detailPreUserList.Where(t => t.PRE_USER_ID != loginUserId && t.PRE_USER_ID != null).Select(m => (Guid)m.PRE_USER_ID).Distinct().ToList(); + if (sendUserIds != null && sendUserIds.Any()) { - foreach (var user in users) + //当班人员不等于自己的,触发签字确认单 + var sendUserNames = allUsers.Where(t => sendUserIds.Contains(t.ID)).Select(m => m.NAME).ToList(); + sendNotices = NotificationTaskService.InsertUserNoticeTaskModels("领导带班下井记录-交班人签字确认", entity.ID, entity.ORG_ID, sendUserIds, sendUserNames, DateTime.Now, entity.JOB_END_DATE.Value, 1, "FO037_SHOWPRINT"); + entity.STATUS = FOStatusEnum.PreSign; + } + else + { + //触发给现场责任人签字确认 + var detailUserIds = details.Where(t => t.USER_ID != loginUserId && t.USER_ID != null).Select(m => (Guid)m.USER_ID).Distinct().ToList(); + if (detailUserIds != null && detailUserIds.Any()) { - if (user.USER_ID == loginUserId) + var sendUserNames = allUsers.Where(t => detailUserIds.Contains(t.ID)).Select(m => m.NAME).ToList(); + sendNotices = NotificationTaskService.InsertUserNoticeTaskModels("领导带班下井记录-现场责任人签字确认", entity.ID, entity.ORG_ID, detailUserIds, sendUserNames, DateTime.Now, entity.JOB_END_DATE.Value, 1, "FO037_SHOWPRINT"); + entity.STATUS = FOStatusEnum.Sign; + } + else + { + var afterUserIds = detailAfterUserList.Where(t => t.AFTER_USER_ID != loginUserId && t.AFTER_USER_ID != null).Select(m => (Guid)m.AFTER_USER_ID).Distinct().ToList(); + if (afterUserIds != null && afterUserIds.Any()) { - user.DEAL_STATUS = MS.Domain.Enums.FOUserShiftStatusEnum.已处理; + //触发给接班人签字确认 + var sendUserNames = allUsers.Where(t => afterUserIds.Contains(t.ID)).Select(m => m.NAME).ToList(); + sendNotices = NotificationTaskService.InsertUserNoticeTaskModels("领导带班下井记录-接班人签字确认", entity.ID, entity.ORG_ID, afterUserIds, sendUserNames, DateTime.Now, entity.JOB_END_DATE.Value, 1, "FO037_SHOWPRINT"); + entity.STATUS = FOStatusEnum.SignAccept; } } - var sendUserIds= users.Where(t=>t.USER_ID != loginUserId && t.USER_ID!=null).Select(m=>m.USER_ID).Distinct().ToList(); - } + } this.UnifiedCommit(() => { @@ -197,6 +282,140 @@ namespace APT.FO.WebApi.Controllers this.BantchSaveEntityNoCommit(userList); if (fileList != null && fileList.Any()) this.BantchSaveEntityNoCommit(fileList); + if (sendNotices != null && sendNotices.Any()) + this.BantchSaveEntityNoCommit(sendNotices); + }); + return true; + }); + } + /// + /// 签到同意 + /// + /// + /// + [HttpPost, Route("PersonalAgree")] + public JsonActionResult PersonalAgree([FromBody] T_FO_LEADER_WELL_RECORD entity) + { + return SafeExecute(() => + { + var orgId = APT.Infrastructure.Api.AppContext.CurrentSession.OrgId; + var userID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID; + if (entity.TaskID != Guid.Empty) + { + var currTask = GetEntity(t => t.ID == entity.TaskID); + if (currTask != null) + { + userID = currTask.USER_ID; + } + } + var allUsers = this.GetEntities(t => t.ENABLE_STATUS == 0 && !t.CODE.Contains("admin"), new BaseFilter(orgId)); + var sendNotices = new List(); + var detailUsers = new List(); + var preUsers = new List(); + var afterUsers = new List(); + var record = this.GetEntity(entity.ID); + if (record.STATUS == FOStatusEnum.PreSign) + { + var details = this.GetEntities(t => t.LEADER_WELL_RECORD_ID == record.ID, new BaseFilter(orgId)); + var detailIds = details.Select(m => m.ID).ToList(); + preUsers = this.GetEntities(t => detailIds.Contains(t.LEADER_WELL_RECORD_DETAIL_ID) && t.PRE_USER_ID == userID, new BaseFilter(orgId)).ToList(); + if (preUsers != null && preUsers.Any()) + { + preUsers.ForEach(t => t.PRE_USER_DEAL_STATUS = FOUserShiftStatusEnum.已处理); + } + var todoCount = this.GetCount(t => detailIds.Contains(t.LEADER_WELL_RECORD_DETAIL_ID) && t.PRE_USER_ID != userID && t.PRE_USER_DEAL_STATUS == 0 && t.PRE_USER_ID != null, new BaseFilter(orgId)); + if (todoCount == 0) + { + //触发给现场责任人签字确认 + var detailUserIds = details.Where(t => t.USER_ID != userID && t.USER_ID != null).Select(m => (Guid)m.USER_ID).Distinct().ToList(); + if (detailUserIds != null && detailUserIds.Any()) + { + var sendUserNames = allUsers.Where(t => detailUserIds.Contains(t.ID)).Select(m => m.NAME).ToList(); + sendNotices = NotificationTaskService.InsertUserNoticeTaskModels("领导带班下井记录-现场责任人签字确认", entity.ID, record.ORG_ID, detailUserIds, sendUserNames, DateTime.Now, record.JOB_END_DATE.Value, 1, "FO037_SHOWPRINT"); + record.STATUS = FOStatusEnum.Sign; + } + else + { + var afterUserIds = this.GetEntities(t => detailIds.Contains(t.LEADER_WELL_RECORD_DETAIL_ID) && t.AFTER_USER_ID != userID && t.AFTER_USER_ID != null, new BaseFilter(orgId)).Select(m => (Guid)m.AFTER_USER_ID).Distinct().ToList(); + if (afterUserIds != null && afterUserIds.Any()) + { + //触发给接班人签字确认 + var sendUserNames = allUsers.Where(t => afterUserIds.Contains(t.ID)).Select(m => m.NAME).ToList(); + sendNotices = NotificationTaskService.InsertUserNoticeTaskModels("领导带班下井记录-接班人签字确认", entity.ID, record.ORG_ID, afterUserIds, sendUserNames, DateTime.Now, record.JOB_END_DATE.Value, 1, "FO037_SHOWPRINT"); + record.STATUS = FOStatusEnum.SignAccept; + } + else + { + record.STATUS = FOStatusEnum.Archived; + } + } + } + } + else if (record.STATUS == FOStatusEnum.Sign) + { + var details = this.GetEntities(t => t.LEADER_WELL_RECORD_ID == record.ID, new BaseFilter(orgId)); + detailUsers = details.Where(t => t.USER_ID == userID).ToList(); + if (detailUsers != null && detailUsers.Any()) + { + detailUsers.ForEach(t => t.USER_DEAL_STATUS = FOUserShiftStatusEnum.已处理); + } + var todoCount = this.GetCount(t => t.LEADER_WELL_RECORD_ID == record.ID && t.USER_ID != userID && t.USER_DEAL_STATUS == 0 && t.USER_ID != null, new BaseFilter(orgId)); + if (todoCount == 0) + { + var detailIds = details.Select(m => m.ID).ToList(); + var afterUserIds = this.GetEntities(t => detailIds.Contains(t.LEADER_WELL_RECORD_DETAIL_ID) && t.AFTER_USER_ID != userID && t.AFTER_USER_ID != null, new BaseFilter(orgId)).Select(m => (Guid)m.AFTER_USER_ID).Distinct().ToList(); + if (afterUserIds != null && afterUserIds.Any()) + { + //触发给接班人签字确认 + var sendUserNames = allUsers.Where(t => afterUserIds.Contains(t.ID)).Select(m => m.NAME).ToList(); + sendNotices = NotificationTaskService.InsertUserNoticeTaskModels("领导带班下井记录-接班人签字确认", entity.ID, record.ORG_ID, afterUserIds, sendUserNames, DateTime.Now, record.JOB_END_DATE.Value, 1, "FO037_SHOWPRINT"); + record.STATUS = FOStatusEnum.SignAccept; + } + else + { + record.STATUS = FOStatusEnum.Archived; + } + } + } + else if (record.STATUS == FOStatusEnum.SignAccept) + { + var details = this.GetEntities(t => t.LEADER_WELL_RECORD_ID == record.ID, new BaseFilter(orgId)); + var detailIds = details.Select(m => m.ID).ToList(); + afterUsers = this.GetEntities(t => detailIds.Contains(t.LEADER_WELL_RECORD_DETAIL_ID) && t.AFTER_USER_ID == userID, new BaseFilter(orgId)).ToList(); + if (afterUsers != null && afterUsers.Any()) + { + afterUsers.ForEach(t => t.AFTER_USER_DEAL_STATUS = FOUserShiftStatusEnum.已处理); + } + var todoCount = this.GetCount(t => detailIds.Contains(t.LEADER_WELL_RECORD_DETAIL_ID) && t.AFTER_USER_ID != userID && t.AFTER_USER_DEAL_STATUS == 0 && t.AFTER_USER_ID != null, new BaseFilter(orgId)); + if (todoCount == 0) + { + record.STATUS = FOStatusEnum.Archived; + } + } + else + { + record.STATUS = FOStatusEnum.Archived; + } + T_FM_NOTIFICATION_TASK task = null; + if (entity.TaskID != Guid.Empty) + { + task = NotificationTaskService.GetTaskFinishModel(entity.TaskID); + task.SOURCE_FORMCODE = "FO037_SHOWPRINT"; + } + this.UnifiedCommit(() => + { + if (record != null) + UpdateEntityNoCommit(record); + if (preUsers != null && preUsers.Any()) + this.BantchSaveEntityNoCommit(preUsers); + if (detailUsers != null && detailUsers.Any()) + this.BantchSaveEntityNoCommit(detailUsers); + if (afterUsers != null && afterUsers.Any()) + this.BantchSaveEntityNoCommit(afterUsers); + if (sendNotices != null && sendNotices.Any()) + this.BantchSaveEntityNoCommit(sendNotices); + if (task != null) + this.UpdateEntityNoCommit(task); }); return true; });