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.HM; using APT.MS.Domain.Enums; using APT.Utility; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; namespace APT.HM.WebApi.Controllers.Api { [Route("api/HM/HMNoticeRelease")] public partial class NoticeReleaseController : AuthorizeApiController { IFMNotificationTaskService NotificationTaskService { get; set; } IPFCodeRuleService CodeRuleService { get; set; } IFMDepartmentService DepartmentService { get; set; } public NoticeReleaseController(IPFCodeRuleService codeRuleService, IFMNotificationTaskService notificationTaskService, IFMDepartmentService departmentService) { NotificationTaskService = notificationTaskService; CodeRuleService = codeRuleService; DepartmentService = departmentService; } /// /// 更新 /// /// /// [HttpPost, Route("FullUpdate")] public JsonActionResult FullUpdate([FromBody] T_HM_NOTICE_RELEASE entity) { return SafeExecute(() => { var files = entity.Nav_Files; var departments = entity.Nav_ReleaseRange; entity.Nav_Files = null; if (entity.RELEASE_USER_ID == null) { entity.RELEASE_USER_ID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID; } if (entity.RELEAS_DEPARTMENT_ID == null) { var user = GetEntity(t => t.ID == entity.RELEASE_USER_ID); if (user != null) entity.RELEAS_DEPARTMENT_ID = user.DEPARTMENT_ID; } List sendNotices = null; T_FM_NOTIFICATION_TASK sendChargeNotice = null; T_FM_NOTIFICATION_TASK finishNotice = null; Guid depId = Guid.Empty; Guid approveRoldId = Guid.Empty; List risks = new List(); List listRiskArea = new List(); List listRiskIdentifyings = new List(); List listRiskDetails = new List(); List hazards = new List(); List listHazardDetails = new List(); List listHazardIdentifyings = new List(); List listHazardArea = new List(); List taskUsers = new List(); List sendNoticeList = null; if (entity.PUBLISH != null && entity.PUBLISH.Equals("SaveAndNotify")) { entity.RELEASE_STATUS = FOPreMeetingStatusEnum.归档; var orgId = APT.Infrastructure.Api.AppContext.CurrentSession.OrgId; var departmentFilter = new BaseFilter(orgId); var allUsers = GetDepartmentUsers(entity.Nav_ReleaseRange.Select(t => t.DEPARTMENT_ID).Distinct().ToList(), orgId); var allUserNames = new List(); var allFMUser = this.GetEntities(t => t.ENABLE_STATUS == (int)FMEnableStatusEnum.启用 && allUsers.Contains(t.ID), new BaseFilter(entity.ORG_ID)); foreach (var u in allUsers) { var current = allFMUser.FirstOrDefault(t => t.ID == u); allUserNames.Add(current?.NAME); } if (entity.TaskID != Guid.Empty) { sendNotices = NotificationTaskService.InsertUserNoticeTaskModels(entity.NOTICE_NAME, entity.ID, orgId, allUsers, allUserNames, DateTime.Now, DateTime.Parse(DateTime.Now.AddDays(1).ToShortDateString() + " 23:59:59"), (int)FMNoticeTypeEnum.消息, "HM001_SHOWPRINT"); finishNotice = NotificationTaskService.FOGetTaskFinishModel(entity.TaskID,entity.ID); } else { sendNotices = NotificationTaskService.InsertUserNoticeTaskModels(entity.NOTICE_NAME, entity.ID, orgId, allUsers, allUserNames, DateTime.Now, DateTime.Parse(DateTime.Now.AddDays(1).ToShortDateString() + " 23:59:59"), (int)FMNoticeTypeEnum.消息, "HM001_SHOWPRINT"); } if (entity.PLAN_ID != null) { var evaluationPlan = GetEntity((Guid)entity.PLAN_ID, new string[] { "Nav_Details.Nav_Areas", "Nav_Details.Nav_Identifyings" }); var userIds = evaluationPlan.Nav_Details.Where(t => t.IS_DELETED == false).Select(t => t.CHARGE_USER_ID); var users = GetEntities(t => userIds.Contains(t.ID) || t.APPROVE_ROLE_ID != null, new BaseFilter(entity.ORG_ID)); var depts = GetEntities(t => t.IS_DELETED == false, new BaseFilter(entity.ORG_ID)); var riskDetails = evaluationPlan.Nav_Details.Where(t => t.IS_DELETED == false && t.RISK_TYPE == HMRiskTypeEnmu.危险源辨识); var hazardDetails = evaluationPlan.Nav_Details.Where(t => t.IS_DELETED == false && t.RISK_TYPE == HMRiskTypeEnmu.职业危害辨识); var noticeTitles = new List(); var noticeUserIds = new List(); var noticeUserNames = new List(); var noticeDataIds = new List(); var noticeFormCodes = new List(); SystemCodeFilter riskCode = new SystemCodeFilter { CodeType = (int)PFCodeRuleType.风险辨识任务编号, Count = riskDetails.Count(), OrgId = entity.ORG_ID }; var riskCodes = CodeRuleService.NewGenSerial(riskCode); var riskCodeList = riskCodes.Split(new char[] { ',' }); SystemCodeFilter hazardCode = new SystemCodeFilter { CodeType = (int)PFCodeRuleType.风险辨识任务编号, Count = hazardDetails.Count(), OrgId = entity.ORG_ID }; var hazardCodes = CodeRuleService.NewGenSerial(hazardCode); var hazardCodeList = hazardCodes.Split(new char[] { ',' }); int riskIndex = 0; foreach (var riskDetail in riskDetails) { T_HM_RISK_TASK riskTask = new T_HM_RISK_TASK(); riskTask.ID = Guid.NewGuid(); var user = users.FirstOrDefault(t => t.ID == riskDetail.CHARGE_USER_ID); if (user != null) riskTask.INITIATING_DEPARTMENT = user.DEPARTMENT_ID; riskTask.CODE = riskCodeList[riskIndex]; riskIndex++; riskTask.START_TIME = (DateTime)riskDetail.START_TIME; riskTask.END_TIME = (DateTime)riskDetail.END_TIME; riskTask.LEVEL = riskDetail.LEVEL; riskTask.ORG_ID = riskDetail.ORG_ID; riskTask.LIABLE_USER_ID = riskDetail.CHARGE_USER_ID; riskTask.REQUEST_ID = GetEntity(t => true).ID; riskTask.PLAN_ID = entity.PLAN_ID; if (riskDetail.Nav_Areas.Where(t => t.IS_DELETED == false).Any()) { var levels = riskDetail.LEVEL.Split("_").Where(t => t != ""); var Nav_Areas = riskDetail.Nav_Areas.Where(t => t.IS_DELETED == false); foreach (var Area in Nav_Areas) { T_HM_RISK_TASK_AREA area = new T_HM_RISK_TASK_AREA(); area.ORG_ID = entity.ORG_ID; area.AREA_ID = Area.AREA_ID; area.TASK_ID = riskTask.ID; listRiskArea.Add(area); foreach (var level in levels) { var sendUsers = GetEntities(t => t.AREA_ID == Area.AREA_ID && t.Nav_DepartmentLiable.IS_DELETED == false && t.DEPARTMENT_LIABLE_ID != null && t.LEVEL == (FMDepartmentType)int.Parse(level), new BaseFilter(entity.ORG_ID)).Select(t => new { t.DEPARTMENT_LIABLE_ID }).Distinct(); if (sendUsers.Any()) { T_HM_RISK_TASK_DETAIL taskDetail = new T_HM_RISK_TASK_DETAIL(); taskDetail.ORG_ID = riskDetail.ORG_ID; taskDetail.AREA_ID = Area.AREA_ID; taskDetail.LEVEL = (FMDepartmentType)int.Parse(level); taskDetail.TASK_ID = riskTask.ID; taskDetail.ID = Guid.NewGuid(); var record_user = Guid.Empty; var index = 0; foreach (var sendUser in sendUsers) { T_HM_RISK_TASK_USER taskUser = new T_HM_RISK_TASK_USER(); taskUser.TASK_DETAIL_ID = taskDetail.ID; depId = (Guid)sendUser.DEPARTMENT_LIABLE_ID; var depChargeUser = depts.FirstOrDefault(t => t.ID == depId); if (depChargeUser.USER_ID == null) { throw new Exception(depChargeUser.NAME + "在组织架构中未找到负责人!"); } taskUser.USER_ID = (Guid)depChargeUser.USER_ID; var taskUsersCount = taskUsers.Count(t => t.TASK_DETAIL_ID == taskDetail.ID && t.USER_ID == taskUser.USER_ID);//查询是否有插入避免豫鹭有重复人员添加 if (taskUsersCount == 0) { taskUser.ORG_ID = entity.ORG_ID; taskUser.ROW_NO = index; if (index == 0) { record_user = taskUser.USER_ID; } index++; taskUsers.Add(taskUser); } } taskDetail.RECORD_USER_ID = record_user; taskDetail.DEAL_STATUS = (int)FOUserShiftStatusEnum.待处理; listRiskDetails.Add(taskDetail); } } } riskDetail.Nav_Identifyings.ForEach(t => { T_HM_RISK_TASK_IDENTIFYING identifying = new T_HM_RISK_TASK_IDENTIFYING(); identifying.ORG_ID = entity.ORG_ID; identifying.IDENTIFYING_ID = t.IDENTIFYING_ID; identifying.TASK_ID = riskTask.ID; listRiskIdentifyings.Add(identifying); }); } noticeTitles.Add("危险源辨识任务"); noticeDataIds.Add(riskTask.ID); noticeUserIds.Add((Guid)riskDetail.CHARGE_USER_ID); noticeUserNames.Add(user.NAME); noticeFormCodes.Add("HM062"); risks.Add(riskTask); } int hazardIndex = 0; foreach (var hazardDetail in hazardDetails) { T_HM_HAZARD_TASK hazardTask = new T_HM_HAZARD_TASK(); hazardTask.ID = Guid.NewGuid(); var user = users.FirstOrDefault(t => t.ID == hazardDetail.CHARGE_USER_ID); if (user != null) hazardTask.INITIATING_DEPARTMENT = user.DEPARTMENT_ID; hazardTask.CODE = hazardCodeList[hazardIndex]; hazardTask.START_TIME = (DateTime)hazardDetail.START_TIME; hazardTask.END_TIME = (DateTime)hazardDetail.END_TIME; hazardTask.LEVEL = "0"; hazardTask.ORG_ID = entity.ORG_ID; hazardTask.LIABLE_USER_ID = hazardDetail.CHARGE_USER_ID; hazardTask.PLAN_ID = entity.PLAN_ID; hazardDetail.Nav_Areas.ForEach(t => { T_HM_HAZARD_TASK_AREA area = new T_HM_HAZARD_TASK_AREA(); area.ORG_ID = entity.ORG_ID; area.AREA_ID = t.AREA_ID; area.TASK_ID = hazardTask.ID; listHazardArea.Add(area); T_HM_HAZARD_TASK_DETAIL taskDetail = new T_HM_HAZARD_TASK_DETAIL(); taskDetail.ORG_ID = entity.ORG_ID; taskDetail.AREA_ID = t.AREA_ID; taskDetail.TASK_ID = hazardTask.ID; taskDetail.RECORD_USER_ID = null; taskDetail.DEAL_STATUS = (int)FOUserShiftStatusEnum.待处理; listHazardDetails.Add(taskDetail); }); if (hazardDetail.Nav_Identifyings != null && hazardDetail.Nav_Identifyings.Any()) { hazardDetail.Nav_Identifyings.ForEach(t => { T_HM_HAZARD_TASK_IDENTIFYING identifying = new T_HM_HAZARD_TASK_IDENTIFYING(); identifying.ORG_ID = entity.ORG_ID; identifying.IDENTIFYING_ID = t.IDENTIFYING_ID; identifying.TASK_ID = hazardTask.ID; listHazardIdentifyings.Add(identifying); }); } noticeTitles.Add("职业危害辨识任务"); noticeDataIds.Add(hazardTask.ID); noticeUserIds.Add((Guid)hazardDetail.CHARGE_USER_ID); noticeUserNames.Add(user.NAME); noticeFormCodes.Add("HM102"); hazards.Add(hazardTask); } sendNoticeList = NotificationTaskService.InsertUserNoticeTaskModels(noticeTitles, noticeDataIds, entity.ORG_ID, noticeUserIds, noticeUserNames, DateTime.Now, DateTime.Parse(DateTime.Now.AddDays(1).ToShortDateString() + " 23:59:59"), (int)FMNoticeTypeEnum.消息, noticeFormCodes); } } entity.Nav_ReleaseRange = null; this.UnifiedCommit(() => { if (entity != null) UpdateEntityNoCommit(entity); if (departments.Any()) BantchSaveEntityNoCommit(departments); if (files != null && files.Any()) BantchSaveEntityNoCommit(files); if (sendNotices != null && sendNotices.Any()) BantchAddEntityNoCommit(sendNotices); if (finishNotice != null) UpdateEntityNoCommit(finishNotice); if (sendChargeNotice != null) UpdateEntityNoCommit(sendChargeNotice); if (entity != null) UpdateEntityNoCommit(entity); //保存主表 if (risks.Any()) BantchAddEntityNoCommit(risks); if (listRiskArea.Any()) BantchAddEntityNoCommit(listRiskArea); if (listRiskIdentifyings.Any()) BantchAddEntityNoCommit(listRiskIdentifyings); if (listRiskDetails.Any()) BantchAddEntityNoCommit(listRiskDetails); if (hazards.Any()) BantchAddEntityNoCommit(hazards); if (listHazardArea.Any()) BantchAddEntityNoCommit(listHazardArea); if (listHazardIdentifyings.Any()) BantchAddEntityNoCommit(listHazardIdentifyings); if (listHazardDetails.Any()) BantchAddEntityNoCommit(listHazardDetails); if (taskUsers.Any()) BantchAddEntityNoCommit(taskUsers); if (sendNoticeList != null && sendNoticeList.Any()) BantchAddEntityNoCommit(sendNoticeList); }); return true; }); } /// /// 收到 /// /// /// [HttpPost, Route("PersonalAgree")] public JsonActionResult PersonalAgree([FromBody] T_HM_NOTICE_RELEASE entity) { return SafeExecute(() => { var finishNotice = NotificationTaskService.FOGetTaskFinishModel(entity.TaskID, entity.ID); UnifiedCommit(() => { UpdateEntityNoCommit(finishNotice); }); return true; }); } ///// ///// 查询责任人 ///// ///// ///// //[HttpPost, Route("searchChargeUser")] //public JsonActionResult searchChargeUser([FromBody] KeywordFilter pageFilter) //{ // return SafeExecute(() => // { // var orgId = APT.Infrastructure.Api.AppContext.CurrentSession.OrgId; // string user = ""; // if (pageFilter.Keyword != null && pageFilter.Parameter1 != null) // { // var arealistGuids = new List(); // var arealistStrs = pageFilter.Keyword.Split(','); // foreach (var item in arealistStrs) // { // arealistGuids.Add(Guid.Parse(item)); // } // BaseFilter baseFilter = new BaseFilter(orgId); // baseFilter.Include = new string[] { "Nav_PersonLiable" }; // if (pageFilter.Parameter1.Equals("0")) // { // var chargeUsers = GetEntities(t => arealistGuids.Contains((Guid)t.AREA_ID), baseFilter); // foreach (var item in arealistGuids) // { // if (chargeUsers.Where(t => t.AREA_ID == item).Count() == 0) // { // throw new Exception("所选区域可能不存在责任人!"); // } // } // chargeUsers = chargeUsers.DistinctBy(t => t.PERSON_LIABLE_ID); // if (chargeUsers.Count() > 1) // { // throw new Exception("所选区域负责人不是同一个人!"); // } // else if (chargeUsers.Count() == 0) // { // throw new Exception("未能找到所选区域负责人!"); // } // else // { // user = chargeUsers.FirstOrDefault().Nav_PersonLiable.NAME; // } // } // else // { // var chargeUsers = GetEntities(t => arealistGuids.Contains((Guid)t.AREA_ID), baseFilter); // foreach (var item in arealistGuids) // { // if (chargeUsers.Where(t => t.AREA_ID == item).Count() == 0) // { // throw new Exception("所选区域可能不存在责任人!"); // } // } // chargeUsers = chargeUsers.DistinctBy(t => t.PERSON_LIABLE_ID); // if (chargeUsers.Count() > 1) // { // throw new Exception("所选区域负责人不是同一个人!"); // } // else if (chargeUsers.Count() == 0) // { // throw new Exception("未能找到所选区域负责人!"); // } // else // { // user = chargeUsers. // FirstOrDefault().Nav_PersonLiable.NAME; // } // } // } // return user; // }); //} /// /// 查找部门下的所有人 /// /// [HttpPost, Route("GetDepartmentUsers")] public List GetDepartmentUsers(List departmentIDs, Guid? orgId) { var allUsers = new List(); var departments = GetEntities(t => departmentIDs.Contains(t.ID), new BaseFilter(orgId)); var departmentInfos = departments.Where(x => x.DEPARTMENT_TYPE == (int)FMDepartmentType.公司).ToList(); if (departmentInfos != null && departmentInfos.Any()) { var allUsers1 = GetEntities(i => i.ENABLE_STATUS == 0, new BaseFilter(orgId)).Select(t => t.ID).Distinct().ToList(); allUsers.AddRange(allUsers1); } else { List outputDepartmentIds = new List(); GetDepartmentIds(departmentIDs, orgId, ref outputDepartmentIds); var allUsers1 = GetEntities(i => i.CODE != "admin" && i.ENABLE_STATUS == 0 && i.DEPARTMENT_ID != null && outputDepartmentIds.Contains((Guid)i.DEPARTMENT_ID), new BaseFilter(orgId)).Select(t => t.ID).ToList(); allUsers.AddRange(allUsers1); } return allUsers; } /// /// 返回所有部门节点 /// private void GetDepartmentIds(List departmentIdList, Guid? orgId, ref List departmentIds) { departmentIds.AddRange(departmentIdList); var departmentTemps = GetEntities(t => t.PARENT_ID != null && departmentIdList.Contains((Guid)t.PARENT_ID), new BaseFilter(orgId)); if (departmentTemps != null && departmentTemps.Any()) { var temp = departmentTemps.Select(t => t.ID).Distinct().ToList(); GetDepartmentIds(temp, orgId, ref departmentIds); } } } }