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.FM; using APT.BaseData.Services.DomainServices; using APT.BaseData.Services.Services.FM; using APT.Infrastructure.Core; using APT.MS.Domain.Entities.FO; using APT.MS.Domain.Entities.HM; using APT.MS.Domain.Entities.SC.PT; using APT.MS.Domain.Enums; using APT.Utility; using Castle.Core.Internal; using Microsoft.AspNetCore.Mvc; using NPOI.SS.Formula.Functions; using System; using System.Collections.Generic; using System.Linq; namespace APT.SC.WebApi.Controllers.Api.PTController { /// /// 检测与考核记录 /// [Route("api/PT/PTMonitorAssessment")] public partial class MonitorAssessmentController : AuthorizeApiController { IPFCodeRuleService CodeRuleService { get; set; } IFMNotificationTaskService NotificationTaskService { get; set; } IFMFlowPermitService MFlowPermitService { get; set; } IPFApproveCallBackService ApproveCallBackService { get; set; } /// /// /// /// public MonitorAssessmentController(IPFCodeRuleService codeRuleService, IFMNotificationTaskService notificationTaskService, IFMFlowPermitService mFlowPermitService, IPFApproveCallBackService approveCallBackService) { CodeRuleService = codeRuleService; NotificationTaskService = notificationTaskService; MFlowPermitService = mFlowPermitService; ApproveCallBackService = approveCallBackService; } /// /// 新增/编辑 /// /// /// [HttpPost, Route("FullUpdate")] public JsonActionResult FullUpdate([FromBody] T_PT_MONITOR_ASSESSMENT entity) { return SafeExecute(() => { var details = entity.Nav_Details.Where(t=>!t.IS_DELETED).ToList(); var users = entity.Nav_MonitorUser.Where(t => !t.IS_DELETED).ToList(); entity.STATUS = PFStandardStatus.Draft; entity.YEAR = DateTime.Now.Year.ToString(); var loginUserId = entity.USER_ID!=null? entity.USER_ID:APT.Infrastructure.Api.AppContext.CurrentSession.UserID; entity.USER_ID = loginUserId; //var userInfo = this.GetEntity(t => t.ID == loginUserId.Value && t.ENABLE_STATUS == 0); //var departmentId = userInfo?.DEPARTMENT_ID; entity.DEPARTMENT_ID = APT.Infrastructure.Api.AppContext.CurrentSession.DepartmentID; List notices = null; List contents = new List(); T_FM_NOTIFICATION_TASK task = null; if (details != null && details.Any()) { details.ForEach(t => { t.ORG_ID = entity.ORG_ID; t.MONITOR_ASSESSMENT_ID = entity.ID; if (t.Nav_Contents != null && t.Nav_Contents.Any()) { t.Nav_Contents.ForEach(t1 => { t1.ORG_ID = entity.ORG_ID; t1.MONITOR_ASSESSMENT_DETAIL_ID = t.ID; contents.Add(t1); }); } t.Nav_Contents = null; }); } if (users != null && users.Any()) { users.ForEach(t => { t.ORG_ID = entity.ORG_ID; t.MONITOR_ASSESSMENT_ID = entity.ID; }); } if (entity.PUBLISH != null && entity.PUBLISH.Equals("SaveAndNotify")) { entity.STATUS = PFStandardStatus.Sign; var name = Enum.GetName(typeof(FMDepartmentType), entity.DEPARTMENT_TYPE); var cycleName = entity.ASSESSMENT_CYCLE.GetDescription(); var userIds = users.Where(x=>x.USER_ID!=null).Select(t => t.USER_ID.Value).Distinct().ToList(); if (userIds != null && userIds.Any()) { var userNames = new List(); var userInfos = this.GetEntities(t => t.ENABLE_STATUS == (int)FMEnableStatusEnum.启用 && userIds.Contains(t.ID), new BaseFilter(entity.ORG_ID)); foreach (var user in userIds) { var current = userInfos.FirstOrDefault(t => t.ID == user); userNames.Add(current?.NAME); } //发消息 notices = NotificationTaskService.InsertUserNoticeTaskModels("("+cycleName +")"+ name + "监测与考核记录-确认", entity.ID, entity.ORG_ID, userIds, userNames, DateTime.Now, DateTime.Now.AddHours(24), (int)FMNoticeTypeEnum.消息, "PT029_SHOWPRINT"); } if (entity.TaskID != Guid.Empty) { task = NotificationTaskService.GetTaskFinishModel(entity.TaskID); task.SOURCE_FORMCODE = "PT029_SHOWPRINT"; } } entity.Nav_Details = null; entity.Nav_MonitorUser = null; UnifiedCommit(() => { if (entity != null) this.UpdateEntityNoCommit(entity); if (details != null && details.Any()) this.BantchSaveEntityNoCommit(details); if (users != null && users.Any()) this.BantchSaveEntityNoCommit(users); if (contents != null && contents.Any()) this.BantchSaveEntityNoCommit(contents); if (task != null) this.UpdateEntityNoCommit(task); if (notices != null && notices.Any()) this.BantchSaveEntityNoCommit(notices); }); return true; }); } /// /// 已阅 /// /// /// [HttpPost, Route("IdentityUpdate")] public JsonActionResult IdentityUpdate([FromBody] T_PT_MONITOR_ASSESSMENT entity) { return SafeExecute(() => { var monitor = this.GetEntity(entity.ID, "Nav_MonitorUser"); var userId = APT.Infrastructure.Api.AppContext.CurrentSession.UserID; var user = this.GetEntity(t => t.MONITOR_ASSESSMENT_ID == monitor.ID && t.USER_ID == userId, new BaseFilter(monitor.ORG_ID)); user.DEAL_STATUS = FOUserShiftStatusEnum.已处理; T_FM_NOTIFICATION_TASK task = null; var todoCount = this.GetCount(t => t.MONITOR_ASSESSMENT_ID == monitor.ID && t.DEAL_STATUS == 0, new BaseFilter(monitor.ORG_ID)); if (todoCount == 0 || todoCount == 1) { monitor.STATUS = PFStandardStatus.Approving; var sysFilter = new SystemCodeFilter(); sysFilter.CodeType = (int)PFCodeRuleType.审批流编码; sysFilter.Count = 1; sysFilter.OrgId = monitor.ORG_ID; var codes = CodeRuleService.NewGenSerial(sysFilter); var serialCode = codes.Split(new char[] { ',' }); var param = Enum.GetName(typeof(FMDepartmentType), monitor.DEPARTMENT_TYPE); MFlowPermitService.InsertApprove(serialCode[0], "PT029", param, entity.ID, "PT029_SHOWPRINT", entity.TaskID, true, () => { if (monitor != null) this.UpdateEntityNoCommit(monitor); if (user != null) this.UpdateEntityNoCommit(user); if (task != null) this.UpdateEntityNoCommit(task); }, null, null, null, null, null, "PT029_SHOWPRINT", null); return true; } if (entity.TaskID != Guid.Empty) { task = NotificationTaskService.GetTaskFinishModel(entity.TaskID); task.SOURCE_FORMCODE = "PT029_SHOWPRINT"; } UnifiedCommit(() => { if (monitor != null) this.UpdateEntityNoCommit(monitor); if (user != null) this.UpdateEntityNoCommit(user); if (task != null) this.UpdateEntityNoCommit(task); }); return true; }); } /// /// 已阅 /// /// /// [HttpPost, Route("IdentityUpdateOld")] public JsonActionResult IdentityUpdateOld([FromBody] T_PT_MONITOR_ASSESSMENT entity) { return SafeExecute(() => { var monitor = this.GetEntity(entity.ID); var chargeUserIds = new List(); var chargeUserId = new Guid?(); var parentId = this.GetEntity(t => t.ID == monitor.DEPARTMENT_ID.Value)?.PARENT_ID; if(parentId != null) chargeUserId = this.GetEntity(t => t.ID == parentId)?.USER_ID; if(monitor.DEPARTMENT_TYPE == FMDepartmentType.部门) chargeUserId = this.GetEntity(t => t.APPROVE_ROLE_ID != null && t.Nav_ApproveRole.NAME == "安环部负责人" && t.ENABLE_STATUS == 0)?.ID; if (monitor.DEPARTMENT_TYPE == FMDepartmentType.公司) chargeUserId = this.GetEntity(t => t.APPROVE_ROLE_ID != null && t.Nav_ApproveRole.NAME == "总经理" && t.ENABLE_STATUS == 0)?.ID; List notices = new List(); T_FM_NOTIFICATION_TASK task = null; if (chargeUserId != null) { if (monitor != null) monitor.STATUS = PFStandardStatus.Archived; chargeUserIds.Add(chargeUserId.Value); var name = Enum.GetName(typeof(FMDepartmentType), monitor.DEPARTMENT_TYPE); var userNames = new List(); var user = this.GetEntity(t => t.ENABLE_STATUS == (int)FMEnableStatusEnum.启用 && chargeUserIds.Contains(t.ID)); userNames.Add(user?.NAME); notices = NotificationTaskService.InsertUserNoticeTaskModels(name + "监测与考核记录", monitor.ID, monitor.ORG_ID, chargeUserIds, userNames, DateTime.Now, DateTime.Now.AddHours(24), (int)FMNoticeTypeEnum.消息, "PT029_SHOWPRINT");//userIds, userNames, if (entity.TaskID != Guid.Empty) { task = NotificationTaskService.GetTaskFinishModel(entity.TaskID); task.SOURCE_FORMCODE = "PT029_SHOWPRINT"; } } UnifiedCommit(() => { if (monitor != null) this.UpdateEntityNoCommit(monitor); if (notices != null && notices.Any()) this.BantchSaveEntityNoCommit(notices); if (task != null) this.UpdateEntityNoCommit(task); }); return true; }); } /// /// 负责人签阅 /// /// /// [HttpPost, Route("ChargeAgree")] public JsonActionResult ChargeAgree([FromBody] T_PT_MONITOR_ASSESSMENT entity) { return SafeExecute(() => { T_FM_NOTIFICATION_TASK task = null; if (entity.TaskID != Guid.Empty) { task = NotificationTaskService.GetTaskFinishModel(entity.TaskID); task.SOURCE_FORMCODE = "PT029_SHOWPRINT"; } UnifiedCommit(() => { if (task != null) this.UpdateEntityNoCommit(task); }); return true; }); } /// /// 获取 /// /// /// [HttpPost, Route("GetEdit")] public JsonActionResult GetEdit([FromBody] KeywordFilter filter) { return SafeExecute(() => { var id = filter.FilterGroup.Rules.FirstOrDefault(t => t.Field == "ID").Value.ToString(); if (string.IsNullOrEmpty(id)) this.ThrowError("030017"); var result = this.GetEntity(id, new string[] { "Nav_User","Nav_MonitorUser", "Nav_Department","Nav_Department.Nav_User", "Nav_Details","Nav_Details.Nav_Department","Nav_Details.Nav_Department.Nav_User","Nav_Details.Nav_Contents","Nav_Details.Nav_User", "Nav_Details.Nav_User.Nav_Person","Nav_Details.Nav_User.Nav_Person.Nav_Post","Nav_MonitorUser.Nav_User","Nav_MonitorUser.Nav_User.Nav_UserSignFiles", "Nav_MonitorUser.Nav_User.Nav_UserSignFiles.Nav_ImgFile.Nav_File" }); if (result != null && result.Nav_Details != null && result.Nav_Details.Any()) { result.Nav_Details = result.Nav_Details.OrderBy(t => t.USER_ID).ToList(); } return result; }); } /// /// 回调函数 /// /// /// [HttpGet, Route("BackUpdate")] public JsonActionResult BackUpdate(string id) { return SafeExecute(() => { return ApproveCallBackService.CallBack("PT/PTMonitorAssessment/BackUpdate", id); }); } /// /// 排序分页查询数据 /// /// 分页过滤实体 /// [HttpPost, Route("OrderPagedSummary")] public PagedActionResult OrderPagedSummary([FromBody] KeywordPageFilter pageFilter) { var result = this.GetOrderPageEntities(null,pageFilter); if (result.Data != null) { result.Data = result.Data.GroupBy(t => t.YEAR).Select(m=>m.FirstOrDefault()).ToList(); result.TotalCount = result.Data.Count(); } return result; } /// /// 排序分页查询数据 /// /// 分页过滤实体 /// [HttpPost, Route("OrderPagedDetail")] public PagedActionResult OrderPagedDetail([FromBody] KeywordPageFilter pageFilter) { var id = pageFilter.FilterGroup.Rules.FirstOrDefault(t => t.Field == "ID"); if (string.IsNullOrEmpty(id.Value.ToString())) this.ThrowError("030017"); else pageFilter.FilterGroup.Rules.Remove(id); var year = this.GetEntity(id.Value.ToString()).YEAR; var newFilter = new BaseFilter(pageFilter.OrgId); newFilter.IgnoreDataRule = true; newFilter.SelectField = new List { "ID" }; var monitors = this.GetEntities(t => t.YEAR == year, newFilter); var monitorIds = monitors.Select(t => t.ID).ToList(); var result = this.GetOrderPageEntities(t=> monitorIds.Contains(t.MONITOR_ASSESSMENT_ID), pageFilter, "Nav_MonitorAssessment", "Nav_Contents"); if (result.Data != null) { result.Data.ForEach(t => { if (t.Nav_Contents != null && t.Nav_Contents.Any()) { t.SCORE = t.Nav_Contents.Where(m => m.RESULT_SCORE != null).Sum(t => t.RESULT_SCORE).ToString(); } }); } return result; } } }