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.Infrastructure.Core; using APT.MS.Domain.Entities.OG; using APT.MS.Domain.Entities.SC; using APT.MS.Domain.Entities.SC.OG; using APT.MS.Domain.Enums; using APT.Utility; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; namespace APT.SC.WebApi.Controllers.Api.OG { [Route("api/OG/OGSafePdtAssessPlanCheck")] public class OGSafePdtAssessPlanCheckController : AuthorizeApiController { IPFCodeRuleService CodeRuleService { get; set; } IFMNotificationTaskService NotificationTaskService { get; set; } IFMFlowPermitService MFlowPermitService { get; set; } IPFApproveCallBackService ApproveCallBackService { get; set; } /// /// /// /// public OGSafePdtAssessPlanCheckController(IPFCodeRuleService codeRuleService, IFMNotificationTaskService notificationTaskService, IFMFlowPermitService mFlowPermitService, IPFApproveCallBackService approveCallBackService) { CodeRuleService = codeRuleService; NotificationTaskService = notificationTaskService; MFlowPermitService = mFlowPermitService; ApproveCallBackService = approveCallBackService; } /// /// 新增/编辑 /// /// /// [HttpPost, Route("FullUpdate")] public JsonActionResult FullUpdate([FromBody] T_OG_SAFE_PDT_ASSESS_PLAN_CHECK entity) { return SafeExecute(() => { var details = entity.Nav_Details; var files = entity.Nav_Files; if (entity.ANNUAL == null || entity.ANNUAL == 0) { entity.ANNUAL = DateTime.Now.Year; } entity.USER_ID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID; var department = this.GetEntity(t => t.ID == entity.USER_ID.Value, new string[] { "Nav_Department", "Nav_Person.Nav_Post" }); entity.DEPARTMENT_ID = department?.DEPARTMENT_ID; entity.TIME = DateTime.Now; List notices = new List(); List contents = new List(); T_FM_NOTIFICATION_TASK task = null; List newDetailTemps = new List(); List newContentTemps = new List(); List deleteIds = new List(); if (entity.PUBLISH != null && entity.PUBLISH.Equals("SaveAndNotify")) { entity.STATUS = PFStandardStatus.Approving; if (details != null && details.Any()) { //回写考核方案导入表 var postBack = details.Select(t => t.POST_ID).Distinct().ToList(); var tempDetails = this.GetEntities(t => t.DEPARTMENT_ID == entity.DEPARTMENT_ID && postBack.Contains(t.POST_ID.Value) && t.ANNUAL == entity.ANNUAL, new BaseFilter(entity.ORG_ID), new string[] { "Nav_SafeAssessItem" }).ToList(); foreach (var t in details) { t.ANNUAL = entity.ANNUAL; if (t.CYCLE == 0) this.ThrowError("040006"); var first = tempDetails.FirstOrDefault(f => f.POST_ID == t.POST_ID && f.ANNUAL == t.ANNUAL); if (first == null) { T_OG_SAFE_ASSESS_PLAN_INPUT newDetailTemp = new T_OG_SAFE_ASSESS_PLAN_INPUT(); newDetailTemp.NAME = entity.NAME; newDetailTemp.DEPARTMENT_ID =entity.DEPARTMENT_ID; newDetailTemp.USER_ID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID; newDetailTemp.POST_ID = t.POST_ID; newDetailTemp.CYCLE = t.CYCLE; newDetailTemp.CODE = DateTime.Now.ToString("yyyyMMddHHmmss"); newDetailTemp.ANNUAL = t.ANNUAL; newDetailTemp.ORG_ID = t.ORG_ID; newDetailTemp.POST_ID = t.POST_ID; newDetailTemp.CHECK_ID = entity.ID; newDetailTemps.Add(newDetailTemp); if (t.Nav_Contents != null && t.Nav_Contents.Any()) { var sum = t.Nav_Contents.Where(p => !p.IS_DELETED).Sum(x => x.SCORE); if (sum != 100) throw new Exception("考试项目标准分总分必须为100"); t.Nav_Contents.ForEach(t1 => { t1.ORG_ID = entity.ORG_ID; t1.CHECK_DETAIL_ID = t.ID; contents.Add(t1); T_OG_SAFE_ASSESS_ITEM newContent = new T_OG_SAFE_ASSESS_ITEM(); newContent.ORG_ID = entity.ORG_ID; newContent.ASSESS_PLAN_INPUT_ID = newDetailTemp.ID; newContent.SCORE = t1.SCORE; newContent.METHOD = t1.METHOD; newContent.NAME = t1.NAME; newContentTemps.Add(newContent); }); t.Nav_Contents = null; } else throw new Exception("考试项目未全部填写"); } else { var ids = first.Nav_SafeAssessItem.Select(p => p.ID).ToList(); deleteIds.AddRange(ids); if (t.Nav_Contents != null && t.Nav_Contents.Any()) { var sum = t.Nav_Contents.Where(p => !p.IS_DELETED).Sum(x => x.SCORE); if (sum != 100) throw new Exception("考试项目标准分总分必须为100"); t.Nav_Contents.ForEach(t1 => { t1.ORG_ID = entity.ORG_ID; t1.CHECK_DETAIL_ID = t.ID; contents.Add(t1); T_OG_SAFE_ASSESS_ITEM newContent = new T_OG_SAFE_ASSESS_ITEM(); newContent.ORG_ID = entity.ORG_ID; newContent.ASSESS_PLAN_INPUT_ID = first.ID; newContent.SCORE = t1.SCORE; newContent.METHOD = t1.METHOD; newContent.NAME = t1.NAME; newContentTemps.Add(newContent); }); t.Nav_Contents = null; } else throw new Exception("考试项目未全部填写"); } }; } entity.STATUS = PFStandardStatus.Approving; entity.Nav_Details = null; //取审批流水码 var sysFilter = new SystemCodeFilter(); sysFilter.CodeType = (int)PFCodeRuleType.审批流编码; sysFilter.Count = 1; sysFilter.OrgId = entity.ORG_ID; var codes = CodeRuleService.NewGenSerial(sysFilter); var serialCode = codes.Split(new char[] { ',' }); var param = Enum.GetName(typeof(FMDepartmentType), entity.LEVEL); MFlowPermitService.InsertApprove(serialCode[0], "OG004", param, entity.ID, "OG003_SHOWPRINT", entity.TaskID, true, () => { if (entity != null) this.UpdateEntityNoCommit(entity); if (details != null && details.Any()) this.BantchSaveEntityNoCommit(details); if (contents != null && contents.Any()) this.BantchSaveEntityNoCommit(contents); if (newDetailTemps != null && newDetailTemps.Any()) this.BantchSaveEntityNoCommit(newDetailTemps); if (deleteIds != null && deleteIds.Any()) this.BantchDeleteEntityNoCommit(deleteIds); if (newContentTemps != null && newContentTemps.Any()) this.BantchSaveEntityNoCommit(newContentTemps); if (task != null) this.UpdateEntityNoCommit(task); if (notices != null && notices.Any()) this.BantchSaveEntityNoCommit(notices); if (files != null && files.Any()) this.BantchSaveEntityNoCommit(files); }, null, null, null, null, null, "OG003_SHOWPRINT", null); return true; } entity.Nav_Details = null; UnifiedCommit(() => { if (entity != null) this.UpdateEntityNoCommit(entity); if (details != null && details.Any()) this.BantchSaveEntityNoCommit(details); if (contents != null && contents.Any()) this.BantchSaveEntityNoCommit(contents); if (newDetailTemps != null && newDetailTemps.Any()) this.BantchSaveEntityNoCommit(newDetailTemps); if (deleteIds != null && deleteIds.Any()) this.BantchDeleteEntityNoCommit(deleteIds); if (newContentTemps != null && newContentTemps.Any()) this.BantchSaveEntityNoCommit(newContentTemps); if (task != null) this.UpdateEntityNoCommit(task); if (notices != null && notices.Any()) this.BantchSaveEntityNoCommit(notices); }); return true; }); } /// /// 已阅 /// /// /// [HttpPost, Route("IdentityUpdate")] public JsonActionResult IdentityUpdate([FromBody] T_OG_SAFE_PDT_ASSESS_PLAN_CHECK entity) { return SafeExecute(() => { var audit = this.GetEntity(entity.ID); //发起车间、班组、个人目标与指标 T_OG_SAFE_PDT_ASSESS_PLAN_CHECK auditDepart = null; var loginUserId = APT.Infrastructure.Api.AppContext.CurrentSession.UserID; var loginUser = this.GetEntity(t => t.ID == loginUserId.Value, "Nav_Department", "Nav_ApproveRole"); var name = ""; var type = 0; var departmentType = FMDepartmentType.公司; switch (audit.LEVEL) { case FMDepartmentType.公司: departmentType = FMDepartmentType.部门; name = "部门"; type = 1; break; case FMDepartmentType.部门: departmentType = FMDepartmentType.车间; name = "车间"; type = 2; break; case FMDepartmentType.车间: departmentType = FMDepartmentType.班组; name = "班组"; break; case FMDepartmentType.班组: name = ""; break; default: name = ""; break; } List auditDetails = new List(); List contents = new List(); T_FM_NOTIFICATION_TASK notice = null; if ((int)audit.LEVEL != loginUser.Nav_Department.DEPARTMENT_TYPE || ((int)audit.LEVEL == loginUser.Nav_Department.DEPARTMENT_TYPE && audit.LEVEL == FMDepartmentType.班组)) { if (name == "") { auditDepart = null; audit.STATUS = PFStandardStatus.Archived; } else { auditDepart = new T_OG_SAFE_PDT_ASSESS_PLAN_CHECK(); auditDepart.STATUS = PFStandardStatus.Draft; auditDepart.ORG_ID = audit.ORG_ID; auditDepart.ANNUAL = audit.ANNUAL; auditDepart.TIME = DateTime.Now; auditDepart.USER_ID = loginUserId; auditDepart.DEPARTMENT_ID = loginUser?.DEPARTMENT_ID; auditDepart.LEVEL = departmentType; var departmentIds = this.GetEntities(t => t.DEPARTMENT_TYPE == type && t.PARENT_ID == loginUser.DEPARTMENT_ID && t.ENABLE_STATUS == (int)FMEnableStatusEnum.启用, new BaseFilter(audit.ORG_ID)).Select(m => m.ID).ToList(); if (departmentIds.Any()) { foreach (var department in departmentIds) { //细表 T_OG_SAFE_PDT_ASSESS_PLAN_CHECK_DETAIL auditDetail = new T_OG_SAFE_PDT_ASSESS_PLAN_CHECK_DETAIL(); auditDetail.ORG_ID = audit.ORG_ID; auditDetail.CHECK_ID = auditDepart.ID; auditDetail.ANNUAL = DateTime.Now.Year; auditDetails.Add(auditDetail); } } var userInfos = this.GetEntities(t => t.DEPARTMENT_ID == loginUser.DEPARTMENT_ID && (t.Nav_ApproveRole == null || (t.Nav_ApproveRole != null && !t.Nav_ApproveRole.NAME.Contains("副总"))) && t.ENABLE_STATUS == (int)FMEnableStatusEnum.启用 && !t.CODE.Contains("admin"), new BaseFilter(entity.ORG_ID)).ToList(); foreach (var info in userInfos) { //细表 T_OG_SAFE_PDT_ASSESS_PLAN_CHECK_DETAIL auditDetail = new T_OG_SAFE_PDT_ASSESS_PLAN_CHECK_DETAIL(); auditDetail.ORG_ID = audit.ORG_ID; auditDetail.POST_ID = info.ID; auditDetail.CHECK_ID = auditDepart.ID; auditDetail.ANNUAL = DateTime.Now.Year; auditDetails.Add(auditDetail); } var userIds = userInfos.Select(t => t.ID).ToList(); var tempDetails = this.GetEntities(t => departmentIds.Contains(t.DEPARTMENT_ID.Value) || userIds.Contains(t.USER_ID.Value), new BaseFilter(entity.ORG_ID), new string[] { "Nav_SafeAssessItem" }).ToList(); if (auditDetails != null && auditDetails.Any()) { foreach (var auditDs in auditDetails) { var tempCurrent = tempDetails.FirstOrDefault(t => t.POST_ID == auditDs.POST_ID && t.ANNUAL == auditDs.ANNUAL); if (tempCurrent != null) { auditDs.CYCLE = tempCurrent.CYCLE; if (tempCurrent.Nav_SafeAssessItem != null && tempCurrent.Nav_SafeAssessItem.Any()) { tempCurrent.Nav_SafeAssessItem.ForEach(t => { T_OG_SAFE_PDT_ASSESS_PLAN_CHECK_DETAIL_CONTENT content = new T_OG_SAFE_PDT_ASSESS_PLAN_CHECK_DETAIL_CONTENT(); content.ORG_ID = t.ORG_ID; content.CHECK_DETAIL_ID = auditDs.ID; content.NAME = t.NAME; content.SCORE = t.SCORE; content.METHOD = t.METHOD; contents.Add(content); }); } } } } notice = NotificationTaskService.InsertUserNoticeTaskModel(name + "考核方案审核", auditDepart.ID, audit.ORG_ID, loginUser.ID, loginUser.NAME, DateTime.Now, DateTime.Now.AddHours(24), (int)FMNoticeTypeEnum.消息, "PT024");//userIds, userNames, } } T_FM_NOTIFICATION_TASK task = null; if (entity.TaskID != Guid.Empty) { task = NotificationTaskService.FOGetTaskFinishModel(entity.TaskID,entity.ID); task.SOURCE_FORMCODE = "PT024_SHOWPRINT"; } UnifiedCommit(() => { if (audit != null) this.UpdateEntityNoCommit(audit); if (auditDepart != null) this.UpdateEntityNoCommit(auditDepart); if (auditDetails != null && auditDetails.Any()) this.BantchSaveEntityNoCommit(auditDetails); if (contents != null && contents.Any()) this.BantchSaveEntityNoCommit(contents); if (task != null) this.UpdateEntityNoCommit(task); if (notice != null) this.UpdateEntityNoCommit(notice); }); return true; }); } /// /// 回调函数 /// /// /// [HttpGet, Route("BackUpdate")] public JsonActionResult BackUpdate(string id) { return SafeExecute(() => { return ApproveCallBackService.CallBack("OG/OGSafePdtAssessPlanCheck/BackUpdate", id); }); } } }