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.Linq; namespace APT.FM.WebApi.Controllers.Api.FO { /// /// FOPreOperSch /// [Route("api/FO/FOPreOperSch")] public class PreOperSchController : AuthorizeApiController { IPFCodeRuleService CodeRuleService { get; set; } IFMNotificationTaskService NotificationTaskService { get; set; } IFMDepartmentService DepartmentService { get; set; } /// /// FOPreOperSch /// /// public PreOperSchController(IPFCodeRuleService codeRuleService, IFMNotificationTaskService notificationTaskService, IFMDepartmentService departmentService) { CodeRuleService = codeRuleService; NotificationTaskService = notificationTaskService; DepartmentService = departmentService; } /// /// 更新 /// /// /// [HttpPost, Route("FullUpdate")] public JsonActionResult FullUpdate([FromBody] T_FO_PRE_OPER_SCH entity) { return SafeExecute(() => { var users = entity.Nav_PreOperSchUser.Where(t => t.USER_ID != null && !t.IS_DELETED).ToList(); var files = entity.Nav_PreOperSchFile; entity.Nav_PreOperSchUser = null; entity.Nav_PreOperSchFile = null; entity.LANUNCH_TIME=DateTime.Now; entity.FORM_STATUS = (int)FOTeamActivityState.草稿; var userID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID; entity.LANUNCH_USER_ID = Guid.Parse(userID.ToString()); entity.DEPARTMENT_ID = APT.Infrastructure.Api.AppContext.CurrentSession.DepartmentID; List notices = new List(); T_FO_CRUCIAL_LICENSE_JOB job = null; T_FO_PRE_OPER_SCH_USER applyUser = new T_FO_PRE_OPER_SCH_USER(); applyUser.USER_ID = (Guid)userID; if (users != null && users.Any()) { var loginUser=users.FirstOrDefault(t => t.USER_ID == applyUser.USER_ID); if (loginUser == null) users.Add(applyUser); if (entity.PUBLISH != null && entity.PUBLISH.Equals("SaveAndNotify")) { entity.FORM_STATUS = (int)FOTeamActivityState.签到中; //直接处理班组长已签到,并修改通知状态 users.ForEach(t => { if (t.USER_ID == userID) { t.DEAL_STATUS = (int)FOUserShiftStatusEnum.已处理; } t.ORG_ID = entity.ORG_ID; t.PRE_OPER_SCH_ID = entity.ID; t.Nav_User = null; }); //新增的消息通知 var noChargeUsers = users.Where(i => i.USER_ID != userID && i.IS_DELETED == false).ToList(); List userIds = noChargeUsers.Select(t => t.USER_ID).Distinct().ToList(); DateTime dtEnd = NotificationTaskService.GetTaskEndTime(FMTASKTYPE.JobSite, entity.ORG_ID.Value, DateTime.Now, null, null); if (userIds.Count() > 0) { var UserNames = new List(); var user = this.GetEntities(t => t.ENABLE_STATUS == (int)FMEnableStatusEnum.启用 && userIds.Contains(t.ID), new BaseFilter(entity.ORG_ID)); foreach (var u in userIds) { var current = user.FirstOrDefault(t => t.ID == u); UserNames.Add(current?.NAME); } //发消息 notices = NotificationTaskService.InsertUserNoticeTaskModels("作业方案讨论记录表", entity.ID, entity.ORG_ID, userIds, UserNames, DateTime.Now, dtEnd, (int)FMNoticeTypeEnum.消息, "FO008_SHOWPRINT"); } else { entity.FORM_STATUS = (int)FOTeamActivityState.已归档; //触发工作票 job = InsertJob(entity); if (job != null) { //通知 List noticesUserIds = new List(); noticesUserIds.Add((Guid)userID); var UserNames = new List(); var user = this.GetEntity(t => t.ENABLE_STATUS == (int)FMEnableStatusEnum.启用 && userIds.Contains(t.ID)); UserNames.Add(user?.NAME); //发消息 notices = NotificationTaskService.InsertUserNoticeTaskModels("关键作业/许可作业工作票", job.ID, entity.ORG_ID, userIds, UserNames, DateTime.Now, dtEnd, (int)FMNoticeTypeEnum.消息, "FO017"); } } } else { applyUser.DEAL_STATUS = (int)FOUserShiftStatusEnum.已处理; applyUser.ORG_ID = entity.ORG_ID; applyUser.PRE_OPER_SCH_ID = entity.ID; var user = this.GetEntity(t=>t.ID == applyUser.USER_ID && t.ENABLE_STATUS == 0, "Nav_Person"); applyUser.REAL_DEPARTMENT_POST_ID = user.Nav_Person.POST_ID; loginUser = users.FirstOrDefault(t => t.USER_ID == applyUser.USER_ID); if (loginUser == null) users.Add(applyUser); } } else { applyUser.DEAL_STATUS = (int)FOUserShiftStatusEnum.已处理; applyUser.ORG_ID = entity.ORG_ID; applyUser.PRE_OPER_SCH_ID = entity.ID; var user = this.GetEntity(t=>t.ID == applyUser.USER_ID && t.ENABLE_STATUS == 0, "Nav_Person"); applyUser.REAL_DEPARTMENT_POST_ID = user.Nav_Person.POST_ID; //var loginUser = users.FirstOrDefault(t => t.USER_ID == applyUser.USER_ID); //if (loginUser == null) // users.Add(applyUser); users.Add(applyUser); entity.FORM_STATUS = (int)FOTeamActivityState.已归档; //触发工作票 job = InsertJob(entity); if (job != null) { DateTime dtEnd = NotificationTaskService.GetTaskEndTime(FMTASKTYPE.JobSite, entity.ORG_ID.Value, DateTime.Now, null, null); //通知 List noticesUserIds = new List(); noticesUserIds.Add((Guid)userID); var UserNames = new List(); var userInfo = this.GetEntity(t => t.ENABLE_STATUS == (int)FMEnableStatusEnum.启用 && (Guid)userID == t.ID); UserNames.Add(userInfo?.NAME); //发消息 notices = NotificationTaskService.InsertUserNoticeTaskModels("关键作业/许可作业工作票", job.ID, entity.ORG_ID, noticesUserIds, UserNames, DateTime.Now, dtEnd, (int)FMNoticeTypeEnum.消息, "FO017"); } } this.UnifiedCommit(() => { if (entity != null) UpdateEntityNoCommit(entity); //保存主表 if (users!=null && users.Any()) BantchSaveEntityNoCommit(users); //保存子表 //保存新的 if (files!=null && files.Any()) this.BantchSaveEntityNoCommit(files); if (notices != null && notices.Any()) this.BantchSaveEntityNoCommit(notices); }); return true; }); } /// /// 是否显示同意按钮 /// /// /// [HttpPost, Route("GetPreShiftMeetingRecord")] public JsonActionResult GetPreShiftMeetingRecord([FromBody] T_FO_PRE_OPER_SCH entity) { return SafeExecute(() => { if (entity == null) return false; var model = GetEntity(entity.ID.ToString(),false, "Nav_PreOperSchUser"); if (model.FORM_STATUS != (int)FOTeamActivityState.签到中) return false; if (model.Nav_PreOperSchUser != null && model.Nav_PreOperSchUser.Any()) { var userID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID; var count=model.Nav_PreOperSchUser.Where(t=>t.PRE_OPER_SCH_ID == entity.ID && t.USER_ID == userID && t.DEAL_STATUS == 0).Count(); if (count > 0) //该用户在该记录中是否参与且未同意则显示同意按钮 { return true; } else { return false; } } else return false; }); } /// /// 签到同意 /// /// /// [HttpPost, Route("PersonalAgree")] public JsonActionResult PersonalAgree([FromBody] T_FO_PRE_OPER_SCH entity) { return SafeExecute(() => { var orgId = APT.Infrastructure.Api.AppContext.CurrentSession.OrgId; var userID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID; entity.ORG_ID = orgId; var user = this.GetEntity(t => t.PRE_OPER_SCH_ID == entity.ID && t.USER_ID == userID, new BaseFilter(orgId)); user.DEAL_STATUS = (int)FOUserShiftStatusEnum.已处理; entity.CREATER_ID = user.CREATER_ID; var todoCount = this.GetCount(t => t.PRE_OPER_SCH_ID == entity.ID && t.DEAL_STATUS == 0, new BaseFilter(orgId)); T_FO_PRE_OPER_SCH model = null; T_FO_CRUCIAL_LICENSE_JOB job = null; List notices = new List(); if (todoCount == 0 || todoCount == 1) { model = GetEntity(entity.ID.ToString()); model.FORM_STATUS = (int)FOTeamActivityState.已归档; //触发工作票 job = InsertJob(entity); if (job != null) { //通知 List userIds = new List(); userIds.Add((Guid)user.CREATER_ID); var UserNames = new List(); var users = this.GetEntity(t => t.ENABLE_STATUS == (int)FMEnableStatusEnum.启用 && userIds.Contains(t.ID)); UserNames.Add(users?.NAME); //发消息 DateTime dtEnd = NotificationTaskService.GetTaskEndTime(FMTASKTYPE.JobSite, entity.ORG_ID.Value, DateTime.Now, null, null); notices = NotificationTaskService.InsertUserNoticeTaskModels(entity.FILE_NAME+"关键作业/许可作业工作票", job.ID, entity.ORG_ID, userIds, UserNames, DateTime.Now, dtEnd, (int)FMNoticeTypeEnum.消息, "FO017"); } } T_FM_NOTIFICATION_TASK task = null; //查询消息表 if (entity.TaskID != Guid.Empty) { task = NotificationTaskService.GetTaskFinishModel(entity.TaskID); task.SOURCE_FORMCODE = "FO008_SHOWPRINT"; } this.UnifiedCommit(() => { if (model != null) UpdateEntityNoCommit(model); if (task != null) this.UpdateEntityNoCommit(task); if (user != null) this.UpdateEntityNoCommit(user); if (job != null) UpdateEntityNoCommit(job); if (notices != null && notices.Any()) this.BantchSaveEntityNoCommit(notices); }); return true; }); } /// /// 排序分页查询数据 /// /// 分页过滤实体 /// [HttpPost, Route("FullOrderPaged")] public PagedActionResult FullOrderPaged([FromBody] KeywordPageFilter pageFilter) { var result = new PagedActionResult(); var loginDepartmentId = APT.Infrastructure.Api.AppContext.CurrentSession.DepartmentID; var loginUserId = APT.Infrastructure.Api.AppContext.CurrentSession.UserID; var loginUserCode = APT.Infrastructure.Api.AppContext.CurrentSession.UserCode; //安环部负责人departmentID var manageDepartId = this.GetEntity(t => t.Nav_ApproveRole != null && t.Nav_ApproveRole.NAME == "安环部负责人" && t.ENABLE_STATUS == 0)?.DEPARTMENT_ID; if (loginUserCode == "admin" || loginDepartmentId == manageDepartId) { result = this.GetOrderPageEntities(null, pageFilter); } else { List departmentId = new List() { loginDepartmentId.Value }; List departmentIds = new List() { loginDepartmentId.Value }; DepartmentService.GetDepartmentIds(pageFilter.OrgId.Value, departmentId, ref departmentIds); if (departmentIds != null && departmentIds.Any()) { result = this.GetOrderPageEntities(t => (t.DEPARTMENT_ID != null && departmentIds.Contains(t.DEPARTMENT_ID.Value)), pageFilter);//|| dataIds.Contains(t.ID) } else result.Data = null; } return result; } private T_FO_CRUCIAL_LICENSE_JOB InsertJob(T_FO_PRE_OPER_SCH entity) { var job = new T_FO_CRUCIAL_LICENSE_JOB(); //取审批流水码 var sysFilter = new SystemCodeFilter(); sysFilter.CodeType = (int)PFCodeRuleType.关键许可作业票编号; sysFilter.Count = 1; sysFilter.OrgId = entity.ORG_ID; var codes = CodeRuleService.NewGenSerial(sysFilter); var codeList = codes.Split(new char[] { ',' }); //主表 job.CODE = codeList[0]; job.ORG_ID = entity.ORG_ID; job.APPLY_USER_ID = entity.CREATER_ID; job.JOB_SCHEME_ID = entity.ID; job.IS_AUTO = (int)ISImportantEnum.是; return job; } } }