using APT.BaseData.Domain.Entities; using APT.BaseData.Domain.Entities.FM; using APT.BaseData.Domain.Enums; using APT.BaseData.Domain.IServices; 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 Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.DirectoryServices.ActiveDirectory; using System.Linq; using System.Threading.Tasks; namespace APT.FO.WebApi.Controllers.Api.FO { [Route("api/FO/FOChangeShiftRecord")] public class ChangeShiftRecordController : AuthorizeApiController { IFMNotificationTaskService NotificationTaskService { get; set; } IPFCodeRuleService CodeRuleService { get; set; } IFMDepartmentService DepartmentService { get; set; } public ChangeShiftRecordController(IPFCodeRuleService codeRuleService, IFMNotificationTaskService notificationTaskService, IFMDepartmentService departmentService) { NotificationTaskService = notificationTaskService; CodeRuleService = codeRuleService; DepartmentService = departmentService; } /// /// 保存并通知 /// /// /// [HttpPost, Route("SaveAndNotice")] public JsonActionResult SaveAndNotice([FromBody] T_FO_CHANGE_SHIFT_RECORD entity) { return SafeExecute(() => { var updateRecord = GetEntity(entity.ID); if (string.IsNullOrEmpty(entity.ADDRESS)) { throw new Exception("请填写交接地点!"); } var userID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID; if (updateRecord.SHIFT_STATUS != (int)FOChangeShiftStatusEnum.待处理) { var changeUser = GetEntity(t => t.CHANGE_SHIFT_RECORD_ID == entity.ID && t.USER_ID == userID); if (changeUser != null && changeUser.USER_SHIFT_STATUS == 1) { T_FM_NOTIFICATION_TASK finishNotice = null; var task = GetEntity(entity.TaskID); finishNotice = NotificationTaskService.FOGetTaskFinishModel(entity.TaskID, entity.ID, "FO013_SHOWPRINT"); UpdateEntity(finishNotice); } var afterUser = GetEntity(t => t.CHANGE_SHIFT_RECORD_ID == entity.ID && t.USER_ID == userID); if (afterUser != null && afterUser.USER_SHIFT_STATUS == 1) { T_FM_NOTIFICATION_TASK finishNotice = null; var task = GetEntity(entity.TaskID); finishNotice = NotificationTaskService.FOGetTaskFinishModel(entity.TaskID, entity.ID, "FO013_SHOWPRINT"); UpdateEntity(finishNotice); } } var taskEndTime = DateTime.Now.AddHours(24); var endTime = entity.CHANGE_SHIFT_TIME.AddHours(4); if (entity.TaskID != null && entity.TaskID != Guid.Empty) { var currTask = GetEntity(t=>t.ID== entity.TaskID); if (currTask != null) { userID = currTask.USER_ID; taskEndTime = currTask.TASK_ENDDT; } } if (DateTime.Now > taskEndTime) { endTime = DateTime.Now.AddHours(24); } var afterUsersTemp = entity.Nav_AfterUsers.ToList(); var afterUsers = entity.Nav_AfterUsers.Where(t=>t.IS_DELETED==false); if (afterUsers.Count() == 0) { throw new Exception("请选择接班人员!"); } entity.Nav_PreUsers = null; entity.Nav_AfterUsers = null; entity.Nav_Files = null; entity.EDITOR_ID = userID; if (entity.LAST_CLASS_RECORD_STATUS == FORunRecordStatusEnum.完整) { entity.LAST_CLASS_RECORD_QUESTION = "无"; } if (entity.LAST_CLASS_FINISH_STATUS == FOJobFinishEnum.完成) { entity.LAST_CLASS_FINISH_QUESTION = "无"; } var currpreUsers = afterUsers.FirstOrDefault(t => t.USER_ID == userID && t.USER_SHIFT_STATUS == (int)FOUserShiftStatusEnum.待处理); if (currpreUsers != null) { currpreUsers.USER_SHIFT_STATUS = (int)FOUserShiftStatusEnum.已处理; T_FM_NOTIFICATION_TASK finishNotice = NotificationTaskService.FOGetTaskFinishModel(entity.TaskID, entity.ID, "FO013_SHOWPRINT"); var count = afterUsers.Count(t => t.USER_SHIFT_STATUS == 0); List updateTasks = null; if (count == 0) { entity.SHIFT_STATUS = (int)FOChangeShiftStatusEnum.归档; } else { entity.SHIFT_STATUS = (int)FOChangeShiftStatusEnum.接班中; updateTasks = GetEntities(t => t.SOURCE_DATA_ID == entity.ID && t.USER_ID != userID && t.NOTICE_STATUS == (int)FMNoticeStatusEnum.未处理, new BaseFilter(entity.ORG_ID)).ToList(); foreach (var task in updateTasks) { task.NOTICE_TITLE = task.NOTICE_TITLE + "确认"; task.SOURCE_FORMCODE = "FO013_SHOWPRINT"; task.TASK_ENDDT = DateTime.Now > task.TASK_ENDDT ? endTime : task.TASK_ENDDT; } } UnifiedCommit(() => { UpdateEntityNoCommit(currpreUsers); UpdateEntityNoCommit(entity); if (finishNotice != null) UpdateEntityNoCommit(finishNotice); if (updateTasks != null && updateTasks.Any()) BantchUpdateEntityNoCommit(updateTasks); }); } else { var noticeTitles = new List(); var noticeUserIds = new List(); var noticeUserNames = new List(); var noticeDataIds = new List(); entity.SHIFT_STATUS = (int)FOChangeShiftStatusEnum.接班中; foreach (var user in afterUsers) { noticeTitles.Add(updateRecord.NAME); noticeDataIds.Add(updateRecord.ID); noticeUserIds.Add(user.USER_ID); noticeUserNames.Add(user.Nav_User.NAME); user.Nav_User = null; } var sendChangeNotices = NotificationTaskService.InsertUserNoticeTaskModels(noticeTitles, noticeDataIds, updateRecord.ORG_ID, noticeUserIds, noticeUserNames, DateTime.Now, endTime, 1, "FO012"); T_FM_NOTIFICATION_TASK finishNotice = NotificationTaskService.FOGetTaskFinishModel(entity.TaskID, entity.ID, "FO013_SHOWPRINT"); UnifiedCommit(() => { if (sendChangeNotices != null && sendChangeNotices.Any()) { BantchAddEntityNoCommit(sendChangeNotices); } UpdateEntityNoCommit(entity); if (finishNotice != null) UpdateEntityNoCommit(finishNotice); if (afterUsersTemp != null && afterUsersTemp.Any()) { BantchSaveEntityNoCommit(afterUsersTemp); } }); } return true; }); } /// /// 同意 /// /// /// [HttpPost, Route("PersonalAgree")] public JsonActionResult PersonalAgree([FromBody] T_FO_CHANGE_SHIFT_RECORD param) { return SafeExecute(() => { var userID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID; if (param.TaskID != null && param.TaskID != Guid.Empty) { var currTask = GetEntity(t => t.ID == param.TaskID); if (currTask != null) { userID = currTask.USER_ID; } } var orgID = APT.Infrastructure.Api.AppContext.CurrentSession.OrgId; T_FO_CHANGE_SHIFT_RECORD entity = null; var baseFilter = new BaseFilter(orgID); var afterUsers = GetEntities(t => t.CHANGE_SHIFT_RECORD_ID == param.ID, new BaseFilter(orgID)); var currpreUser = afterUsers.FirstOrDefault(t => t.USER_ID == userID); if (currpreUser != null) { currpreUser.USER_SHIFT_STATUS = (int)FOUserShiftStatusEnum.已处理; var todoCount = afterUsers.Count(t => t.USER_SHIFT_STATUS == 0); if (todoCount == 0) { entity = GetEntity(param.ID); if (entity != null) { entity.SHIFT_STATUS = (int)FOChangeShiftStatusEnum.归档; } } NotificationTaskService.NotificationTaskFinish(param.TaskID, () => { if (entity != null) UpdateEntityNoCommit(entity, "SHIFT_STATUS"); UpdateEntityNoCommit(currpreUser, "USER_SHIFT_STATUS"); }); } else { var finishTask = NotificationTaskService.FOGetTaskFinishModel(param.TaskID,param.ID,"FO013_SHOWPRINT"); UpdateEntity(finishTask); } return true; }); } /// /// 排序分页查询数据 /// /// 分页过滤实体 /// [HttpPost, Route("OrderPaged")] public PagedActionResult OrderPaged([FromBody] KeywordPageFilter pageFilter) { var result = new PagedActionResult(); var loginUserId = APT.Infrastructure.Api.AppContext.CurrentSession.UserID; var users = this.GetEntities(t => t.ENABLE_STATUS == 0,new BaseFilter(pageFilter.OrgId), "Nav_ApproveRole"); var admiId = users.FirstOrDefault(t => t.CODE.Contains("admin") && t.ENABLE_STATUS == 0)?.ID; var currDep = APT.Infrastructure.Api.AppContext.CurrentSession.DepartmentID.Value; var tempDeps = GetEntities(t=>t.ENABLE_STATUS == 0,new BaseFilter(pageFilter.OrgId)); var tempDep = tempDeps.FirstOrDefault(t=>t.ID == currDep); pageFilter.IgnoreDataRule = true; pageFilter.Include.Add("Nav_PreUsers"); pageFilter.Include.Add("Nav_AfterUsers"); pageFilter.Include.Add("Nav_Team"); pageFilter.Limit = 10; if (tempDep!=null&& tempDep.DEPARTMENT_TYPE == (int)FMDepartmentType.班组) { currDep = (Guid)tempDep.PARENT_ID; } var AHDepartment = users.FirstOrDefault(t => t.Nav_ApproveRole != null && (t.Nav_ApproveRole.NAME == "安环部负责人" || t.Nav_ApproveRole.NAME == "安环部安全员")).DEPARTMENT_ID; if (loginUserId == null || loginUserId == admiId || currDep == AHDepartment) { result = this.GetOrderPageEntities(null, pageFilter); } else if (tempDep != null && (tempDep.NAME.Contains("安环科") || tempDep.NAME.Contains("安全环保")) && tempDep.PARENT_ID != null) { List departmentId = new List(); departmentId.Add((Guid)tempDep.PARENT_ID); List departmentIds = new List() { (Guid)tempDep.PARENT_ID }; DepartmentService.GetDepartmentIds(pageFilter.OrgId.Value, departmentId, ref departmentIds); if (departmentIds != null && departmentIds.Any()) { result = this.GetOrderPageEntities(t => t.Nav_Team != null && departmentIds.Contains((Guid)t.Nav_Team.DEPARTMENT_ID), pageFilter); } else result.Data = null; } else { var loginDepartmentId = this.GetEntity(t => t.ID == loginUserId && t.ENABLE_STATUS == 0)?.DEPARTMENT_ID; List departmentId = new List(); departmentId.Add((Guid)loginDepartmentId); List departmentIds = new List() { (Guid)loginDepartmentId }; DepartmentService.GetDepartmentIds(pageFilter.OrgId.Value, departmentId, ref departmentIds); if (departmentIds != null && departmentIds.Any()) { result = this.GetOrderPageEntities(t => t.Nav_Team!=null && departmentIds.Contains((Guid)t.Nav_Team.DEPARTMENT_ID), pageFilter); } else result.Data = null; } if (result.Data.Any()) { foreach (var entity in result.Data) { if (entity.Nav_PreUsers != null && entity.Nav_PreUsers.Any()) { var userTemp = entity.Nav_PreUsers.Select(t => t.USER_ID).ToList(); var userList = users.Where(t => userTemp.Contains(t.ID)).Select(m=>m.NAME).ToList(); entity.CURRENT_USER = string.Join(",", userList); } if (entity.Nav_AfterUsers != null && entity.Nav_AfterUsers.Any()) { var user = users.FirstOrDefault(t=>t.ID == entity.Nav_AfterUsers.FirstOrDefault().USER_ID); if (user != null) { entity.CHANGE_DEPART = tempDeps.FirstOrDefault(t => t.ID == user.DEPARTMENT_ID)?.NAME; var userTemp = entity.Nav_AfterUsers.Select(t => t.USER_ID).ToList(); var userList = users.Where(t => userTemp.Contains(t.ID)).Select(m => m.NAME).ToList(); entity.CHANGE_USER = string.Join(",", userList); } } } } return result; } } }