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; //if (details != null && details.Any()) //{ // details= details.Where(t=>!t.IS_DELETED).ToList(); //} var users = entity.Nav_MonitorUser; //if (users != null && users.Any()) //{ // users = users.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; if (entity.TaskID != Guid.Empty) { var currTask = GetEntity(t => t.ID == entity.TaskID); if (currTask != null) { loginUserId = currTask.USER_ID; } } entity.USER_ID = loginUserId; var userInfos = this.GetEntities(t => t.ENABLE_STATUS == 0,new BaseFilter(entity.ORG_ID)); var departInfos = this.GetEntities(t => t.ENABLE_STATUS == 0, new BaseFilter(entity.ORG_ID)); //var departmentId = userInfo?.DEPARTMENT_ID; entity.DEPARTMENT_ID = this.GetEntity(t => t.ENABLE_STATUS == 0 && t.ID == (Guid)loginUserId)?.DEPARTMENT_ID; List notices = null; List contents = new List(); T_FM_NOTIFICATION_TASK task = null; if (details != null && details.Any()) { details.ForEach(t => { var depart = departInfos.FirstOrDefault(m => m.ID == t.DEPARTMENT_ID); var user = userInfos.FirstOrDefault(m => m.ID == t.USER_ID); t.ORG_ID = entity.ORG_ID; t.MONITOR_ASSESSMENT_ID = entity.ID; if (!t.IS_DELETED) { if (t.Nav_Contents != null && t.Nav_Contents.Any()) { t.Nav_Contents.ForEach(t1 => { if (t1.RESULT_SCORE == null) { throw new Exception(depart?.NAME + " " + user?.NAME + "必须填写得分"); } if (t1.RESULT_SCORE > t1.SCORE) { throw new Exception(depart?.NAME + " " + user?.NAME + "得分不能大于标准分"); } t1.ORG_ID = entity.ORG_ID; t1.MONITOR_ASSESSMENT_DETAIL_ID = t.ID; contents.Add(t1); }); t.Nav_Contents = null; } else { throw new Exception(depart?.NAME + " " + user?.NAME + "指标考核项目不能为空"); } } else { if (t.Nav_Contents != null && t.Nav_Contents.Any()) { t.Nav_Contents.ForEach(t1 => { t1.IS_DELETED = true; 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 userInfoTemps = userInfos.Where(t => userIds.Contains(t.ID)); foreach (var user in userIds) { var current = userInfoTemps.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; //if (entity.TaskID != Guid.Empty) //{ // var currTask = GetEntity(t => t.ID == entity.TaskID); // if (currTask != null) // { // userId = currTask.USER_ID; // } //} var user = this.GetEntity(t => t.MONITOR_ASSESSMENT_ID == monitor.ID && t.USER_ID == userId, new BaseFilter(monitor.ORG_ID)); if(user != null) 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 && t.USER_ID != userId, new BaseFilter(monitor.ORG_ID)); var approve = this.GetCount(t => t.DATA_ID == monitor.ID && t.APPROVE_STATUS == 10 , new BaseFilter(monitor.ORG_ID)); if (todoCount == 0 && approve == 0) { 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.Department) chargeUserId = this.GetEntity(t => t.APPROVE_ROLE_ID != null && t.Nav_ApproveRole.NAME == "安环部负责人" && t.ENABLE_STATUS == 0)?.ID; if (monitor.DEPARTMENT_TYPE == FMDepartmentType.Company) 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"}); if (result != null && result.Nav_Details != null && result.Nav_Details.Any()) { result.Nav_Details = result.Nav_Details.OrderBy(t => t.USER_ID).ToList(); if (result.STATUS == PFStandardStatus.Rejected) { result.CONTEXT = ApproveCallBackService.RejectContent(result.ID); } } 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) { pageFilter.IgnoreDataRule = true; 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(); pageFilter.Include.Add("Nav_Contents"); var result = this.GetOrderPageEntities(t=> monitorIds.Contains(t.MONITOR_ASSESSMENT_ID), pageFilter); if (result.Data != null) { var contentIds = result.Data.Select(t => t.ID).ToList(); var contentList = GetEntities(t => contentIds.Contains(t.MONITOR_ASSESSMENT_DETAIL_ID),new BaseFilter(pageFilter.OrgId)); result.Data.ForEach(t => { var content = contentList.Where(m => m.MONITOR_ASSESSMENT_DETAIL_ID == t.ID).ToList(); if (t.Nav_Contents != null && t.Nav_Contents.Any()) { t.SCORE = content.Where(m => m.RESULT_SCORE != null).Sum(t => t.RESULT_SCORE).ToString(); } }); } return result; } /// /// 驳回 /// /// /// [HttpPost, Route("RejectUpdate")] public JsonActionResult RejectUpdate([FromBody] T_PF_APPROVE model) { return SafeExecute(() => { //公共 获取审批流信息 T_PF_APPROVE modelApp = null; List listAppDetail = null; T_FM_NOTIFICATION_TASK taskFinish = null; string Msg = string.Empty; bool ResultGetInfo = ApproveCallBackService.GetApproject(model, ref modelApp, ref listAppDetail, ref taskFinish, ref Msg); if (!ResultGetInfo) throw new Exception("驳回失败!"); if (modelApp == null || listAppDetail == null) throw new Exception("获取驳回信息失败!"); var entity = this.GetEntity(model.DATA_ID, new string[] { "Nav_User" }); entity.STATUS = PFStandardStatus.Rejected; var persons = this.GetEntities(t => t.MONITOR_ASSESSMENT_ID == model.DATA_ID, new BaseFilter(entity.ORG_ID)); if (persons.Any()) persons.ForEach(t => { t.DEAL_STATUS = 0; t.Nav_User = null; }); //直接驳回给申请人 T_FM_NOTIFICATION_TASK notice = NotificationTaskService.InsertUserNoticeTaskModel("监测与考核记录已被驳回", entity.ID, entity.ORG_ID, (Guid)entity.USER_ID, entity.Nav_User.NAME, DateTime.Now, DateTime.Now.AddHours(24), (int)FMNoticeTypeEnum.消息, "PT029"); UnifiedCommit(() => { if (entity != null) this.UpdateEntityNoCommit(entity); if (notice != null) this.UpdateEntityNoCommit(notice); if (modelApp != null) UpdateEntityNoCommit(modelApp); if (listAppDetail != null && listAppDetail.Count > 0) BantchUpdateEntityNoCommit(listAppDetail); if (persons != null && persons.Any()) BantchUpdateEntityNoCommit(persons); if (taskFinish != null) UpdateEntityNoCommit(taskFinish); }); return true; //return ApproveCallBackService.CallReject("FO/FOCrucialLicenseJob/RejectUpdate", id); }); } } }