using APT.BaseData.Domain.Entities; using APT.BaseData.Domain.Entities.FM; using APT.BaseData.Domain.Enums.PF; using APT.BaseData.Domain.IServices; using APT.BaseData.Domain.IServices.AE; using APT.BaseData.Domain.IServices.FM; using APT.Infrastructure.Core; using APT.MS.Domain.Entities.HM; using APT.MS.Domain.Entities.OH; using APT.MS.Domain.Entities.PF; using APT.MS.Domain.Entities.SC; using APT.MS.Domain.Entities.TI; using APT.MS.Domain.Enums; using APT.Utility; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; namespace APT.SC.WebApi.Controllers.Api.OH { [Route("api/OH/OHHealthExamPlan")] public class OHHealthExamPlanController : AuthorizeApiController { IFMFlowPermitService MFlowPermitService { get; set; } IPFApproveCallBackService ApproveCallBackService { get; set; } IAEAccidentEventReportService AccidentEventReportService { get; set; } IFMNotificationTaskService NotificationTaskService { get; set; } IFMUserService UserService { get; set; } IFMDepartmentService DepartmentService { get; set; } public OHHealthExamPlanController(IFMFlowPermitService mFlowPermitService, IPFApproveCallBackService approveCallBackService, IAEAccidentEventReportService accidentEventReportService, IFMNotificationTaskService notificationTaskService, IFMUserService userService, IFMDepartmentService departmentService) { MFlowPermitService = mFlowPermitService; ApproveCallBackService = approveCallBackService; AccidentEventReportService = accidentEventReportService; NotificationTaskService = notificationTaskService; UserService = userService; DepartmentService = departmentService; } /// /// 体检周期表 修改 /// /// /// [HttpPost, Route("FullUpdate")] public JsonActionResult FullUpdate([FromBody] T_OH_HEALTH_EXAM_PLAN entity) { return SafeExecute(() => { //保存并发送的时候 发送给各个部门(负责人 或者安全员) //如果有待办 去除待办 if (string.IsNullOrEmpty(entity.NAME)) { throw new Exception("请填写体检计划名称"); } if (entity.YEAR == 0) { throw new Exception("请填写年度"); } if (entity.STATUS == PFStandardStatus.Sign) { if (!entity.DUE_TIME.HasValue) { throw new Exception("请选择上报截止时间"); } else { //entity.DUE_TIME = entity.DUE_TIME.Value.Date.AddDays(1).AddSeconds(-1); if (entity.DUE_TIME.Value < DateTime.Now) { throw new Exception("上报截止时间不能小于当前时间"); } } //设置结束日期 //entity.DUE_TIME = entity.DUE_TIME.Value.Date.AddDays(1).AddSeconds(-1); if (entity.Nav_ListDepartment == null || !entity.Nav_ListDepartment.Any()) { throw new Exception("请选择上报部门"); } if (entity.CONTENT.Length > 500) { throw new Exception("计划内容不能超过500字"); } } var ListDepartment = entity.Nav_ListDepartment; entity.Nav_ListDepartment = null; if (entity.STATUS == PFStandardStatus.Draft) { foreach (var item in ListDepartment) { item.Nav_Department = null; } //草稿 this.UnifiedCommit(() => { if (entity != null) UpdateEntityNoCommit(entity); //事故事件上报 if (ListDepartment != null && ListDepartment.Any())//职业危害类型 BantchSaveEntityNoCommit(ListDepartment); }); } else { //给人员发送待办 //提交后发送上报部门安全员填写体检员工登记表,职能部门发送给部门负责人,综合部人员中包含公司领导 //[ "部门类型")] DEPARTMENT_STATUS { get; set; } 职能部门 = 0, 生产部门 = 1, 安全部门 = 2, var listDepIDNotice = ListDepartment.Select(e => e.DEPARTMENT_ID); var listDep = GetEntities(e => listDepIDNotice.Contains(e.ID) && e.DEPARTMENT_TYPE == 0 && !e.IS_DELETED && e.ENABLE_STATUS == 0, null, new string[] { "Nav_User" });//部门级别 if (listDep == null || !listDep.Any()) { throw new Exception("获取部门信息失败!"); } List listNoticeUser = new List();//通知人 List listDepNoMaster = new List(); List listDepID = new List();//生产部门ID foreach (var item in listDep) { if (!item.USER_ID.HasValue && item.DEPARTMENT_STATUS != 1)//没有部门负责人 { listDepNoMaster.Add(item.NAME); } if (item.DEPARTMENT_STATUS == 1) { listDepID.Add(item.ID); } else { //item.Nav_User.Nav_Department = item; listNoticeUser.Add(item.Nav_User);//部门负责人 } } if (listDepNoMaster.Count > 0) { throw new Exception(string.Join(",", listDepNoMaster) + "未找到部门负责人!"); } if (listDepID.Count < 1) { throw new Exception("请联系管理员配置生产部门!"); } var approvalSafe = GetEntity(e => e.NAME == "部门安全员"); if (approvalSafe == null) { throw new Exception("请联系管理员配置审批角色【部门安全员】!"); } var listSafeUser = GetEntities(e => e.DEPARTMENT_ID.HasValue && listDepID.Contains(e.DEPARTMENT_ID.Value) && e.APPROVE_ROLE_ID.HasValue && approvalSafe.ID == e.APPROVE_ROLE_ID.Value, null, null); if (listSafeUser == null || !listSafeUser.Any()) { throw new Exception("请联系管理员配置部门安全员!"); } //查找 生产部门安全员 List listNoSafe = null; foreach (var item in listDepID) { var SafeEr = listSafeUser.FirstOrDefault(e => e.DEPARTMENT_ID.Value == item); if (SafeEr != null) { //SafeEr.Nav_Department = listDep.FirstOrDefault(e => e.ID == SafeEr.DEPARTMENT_ID); listNoticeUser.Add(SafeEr); } else { if (listNoSafe == null) { listNoSafe = new List(); } listNoSafe.Add(listDep.First(e => e.ID == item)); } } if (listNoSafe != null && listNoSafe.Count > 0) { throw new Exception("请联系管理员给生产部门" + String.Join(",", listNoSafe.Select(e => e.NAME)) + "设置安全员!"); } //bool SendNotificationTask(List names, List dataIds, Guid? orgId, List userIds, List userNames, DateTime startTime, DateTime endTime, int noticeType, string formCode, Action action); //List ListName=new List(); //List< Guid > ListDataId=new List(); //NotificationTaskService.SendAndFinishNotificationTask("部门体检计划表", entity.ID, entity.ORG_ID, listNoticeUser.Select(e => e.ID).ToList(), listNoticeUser.Select(e => e.NAME).ToList(), DateTime.Now, DateTime.Now.AddDays(1), 0, "OH005", entity.TaskID, () => List ListTitleName = new List(); List ListDataId = new List(); List ListUserId = new List(); List ListUserName = new List(); foreach (var modelDep in ListDepartment) { modelDep.ID = Guid.NewGuid(); modelDep.PLAN_ID = entity.ID; //modelDep.DEPARTMENT_ID = item.Nav_Department != null ? item.Nav_Department.ID : item.DEPARTMENT_ID.Value;//上报部门 modelDep.ISCONTENTMASTER = false;//上报部门 if (modelDep.Nav_Department != null && modelDep.Nav_Department.NAME.Contains("企业管理")) { //包含公司领导 modelDep.ISCONTENTMASTER = true; } modelDep.STATUS = PFStandardStatus.Draft; modelDep.ORG_ID = entity.ORG_ID; var user = listNoticeUser.Find(e => e.DEPARTMENT_ID.HasValue && e.DEPARTMENT_ID == modelDep.DEPARTMENT_ID); ListDataId.Add(modelDep.ID); ListUserId.Add(user.ID); modelDep.USER_ID = user.ID;//接收信息的人 ListUserName.Add(user.NAME); ListTitleName.Add(modelDep.Nav_Department.NAME + "体检计划表"); } foreach (var item in ListDepartment) { item.Nav_Department = null; } NotificationTaskService.SendAndFinishNotificationTask(ListTitleName, ListDataId, entity.ORG_ID, ListUserId, ListUserName, DateTime.Now, DateTime.Now.AddDays(1), 0, "OH005", entity.TaskID, () => { if (entity != null) UpdateEntityNoCommit(entity); //体检计划 if (ListDepartment != null && ListDepartment.Any())//上报部门 BantchSaveEntityNoCommit(ListDepartment); }, "OH004_SHOWPRINT"); } return true; }); } //GetDep //UpdateDep #region 获取部门检查计划信息 /// /// 体检计划新增选择人 /// /// /// [HttpPost, Route("GetCombinPlanRegister")] public JsonActionResult GetCombinPlanRegister([FromBody] KeywordFilter filter) { return SafeExecute(() => { if (string.IsNullOrEmpty(filter.Keyword)) { ThrowError("获取选择人员信息传参失败!"); } if (string.IsNullOrEmpty(filter.Parameter1)) { ThrowError("获取体检计划信息传参失败!"); } Guid PLAN_ID = new Guid(filter.Parameter1); Guid UserID = new Guid(filter.Keyword); Guid ID = new Guid(filter.Parameter2); Guid? DepartmentID = null; if (!string.IsNullOrEmpty(filter.Parameter3)) { DepartmentID = new Guid(filter.Parameter3); } T_OH_HEALTH_EXAM_PLAN_REGISTER checkReg = GetEntity(e => e.PLAN_ID.HasValue && e.PLAN_ID.Value == PLAN_ID && e.USER_ID.HasValue && e.USER_ID.Value == UserID); if (checkReg != null && checkReg.ID != Guid.Empty) { throw new Exception("该体检计划有此人,添加失败!"); } Guid? DEPARTMENT_ID = null; //Guid? DEPARTMENT_ID_WORKSHOP = null; T_FM_DEPARTMENT Department = null; //T_FM_DEPARTMENT DepartmentWorkshop = null; var User = GetEntity(UserID, "Nav_Department", "Nav_Person.Nav_Post"); //部门=0, 车间=1, 班组=2, 公司=3 #region 获取部门信息 //if (User.Nav_Department.DEPARTMENT_TYPE == 3) //{ // DEPARTMENT_ID = User.DEPARTMENT_ID.Value; // Department = User.Nav_Department; //} //else if (User.Nav_Department.DEPARTMENT_TYPE == 2) //{ // DEPARTMENT_ID_WORKSHOP = User.Nav_Department.PARENT_ID.Value; // DepartmentWorkshop = GetEntity(DEPARTMENT_ID_WORKSHOP.Value, "Nav_Parent"); // DEPARTMENT_ID = DepartmentWorkshop.PARENT_ID.Value; // Department = GetEntity(DEPARTMENT_ID.Value); //} //else if (User.Nav_Department.DEPARTMENT_TYPE == 1) //{ // DEPARTMENT_ID_WORKSHOP = User.DEPARTMENT_ID.Value; // DEPARTMENT_ID = User.Nav_Department.PARENT_ID.Value; // DepartmentWorkshop = User.Nav_Department; // Department = GetEntity(DEPARTMENT_ID.Value); //} //else if (User.Nav_Department.DEPARTMENT_TYPE == 0) //{ // DEPARTMENT_ID = User.DEPARTMENT_ID.Value; // Department = User.Nav_Department; //} DEPARTMENT_ID = User.DEPARTMENT_ID.Value; Department = User.Nav_Department; #endregion //User.Nav_Person.POST_ID; //Guid? SC_POST_ID = null; //T_SC_POST_DEPOST modelDpost = null; //if (User.Nav_Person.POST_ID.HasValue) //{ // modelDpost = GetEntity(e => e.DEPOST_ID == User.Nav_Person.POST_ID.Value, "Nav_Post"); //} T_OH_HEALTH_EXAM_PLAN_REGISTER modelCombin = new T_OH_HEALTH_EXAM_PLAN_REGISTER(); modelCombin.ID = ID; modelCombin.PLAN_ID = PLAN_ID; modelCombin.USER_ID = UserID; modelCombin.Nav_User = User; modelCombin.DEPARTMENT_ID = DEPARTMENT_ID; modelCombin.Nav_Department = Department; //modelCombin.Nav_DepartmentWorkshop = DepartmentWorkshop; //modelCombin.DEPARTMENT_ID_WORKSHOP = DEPARTMENT_ID_WORKSHOP; //modelCombin.EXAM_CYCLE_ID =; modelCombin.TYPE = OHHealthExamType.Post; //TODO //责任制岗位修改 0511(2) //modelCombin.SC_POST_ID = SC_POST_ID; //modelCombin.Nav_SCPost = modelDpost?.Nav_Post; modelCombin.POST_ID = User.Nav_Person?.POST_ID; modelCombin.Nav_Post = User.Nav_Person?.Nav_Post; DateTime dt = User.DEPARTURETIME != null ? (DateTime)User.DEPARTURETIME : DateTime.Now; modelCombin.WORKYEAR = GetWorkYear(User.ENTRYTIME, dt, DateTime.Now); modelCombin.IS_DELETED = false; modelCombin.ORG_ID = filter.OrgId; //modelCombin.PLAN_ID_DEP = DepartmentID; //modelCombin.HEALTH_EXAM_CONTENT =; //modelCombin.ENTITY_ORG_TPYE =; //modelCombin.FORM_ID =; //modelCombin.FLOW_STATUS =; //modelCombin.FLOW_SEND_STATUS =; //modelCombin.FLOW_ID =; //modelCombin.CREATE_TIME =; //modelCombin.MODIFY_TIME =; //modelCombin.CREATER_ID =; //modelCombin.MODIFIER_ID =; //判断是否有 职业危害类型 体检项目 等 ////modelCombin.Nav_ListHazard = null; if (modelCombin.POST_ID.HasValue && User.DEPARTMENT_ID.HasValue) { var cycleDepPost = GetEntity(e => e.POST_ID == modelCombin.POST_ID.Value && !e.IS_DELETED && e.Nav_DepartmentInfo.DEPARTMENT_ID == User.DEPARTMENT_ID.Value && !e.Nav_DepartmentInfo.IS_DELETED && !e.Nav_DepartmentInfo.Nav_ExamCycle.IS_DELETED, "Nav_DepartmentInfo.Nav_ExamCycle"); if (cycleDepPost != null && cycleDepPost.ID != Guid.Empty) { var listCycleHazard = GetEntities(e => e.RECORD_ID == cycleDepPost.Nav_DepartmentInfo.EXAM_CYCLE_ID, null, "Nav_Hazard"); List ListHazard = new List(); if (listCycleHazard != null && listCycleHazard.Any()) { foreach (var item in listCycleHazard) { ListHazard.Add(new T_OH_HEALTH_EXAM_PLAN_REGISTER_HAZARD() { ID = Guid.NewGuid(), ORG_ID = modelCombin.ORG_ID, REGISTER_ID = modelCombin.ID, HAZARD_ID = item.HAZARD_ID, Nav_Hazard = item.Nav_Hazard }); ; } modelCombin.HEALTH_EXAM_CONTENT = cycleDepPost.Nav_DepartmentInfo.Nav_ExamCycle.HEALTH_EXAM_CONTENT; modelCombin.Nav_ExamCycle = cycleDepPost.Nav_DepartmentInfo.Nav_ExamCycle; modelCombin.EXAM_CYCLE_ID = cycleDepPost.Nav_DepartmentInfo.EXAM_CYCLE_ID; } modelCombin.Nav_ListHazard = ListHazard; } } return modelCombin; }); } ///// ///// 体检计划添加体检人员 ///// ///// ///// //[HttpPost, Route("OrderPagedUseful")] //public PagedActionResult OrderPagedUseful([FromBody] KeywordPageFilter pageFilter) //{ // return SafeGetPagedData(delegate (PagedActionResult result) // { // Guid PLAN_ID = Guid.Empty; // if (pageFilter.FilterGroup.Rules.Count > 0) // { // foreach (var item in pageFilter.FilterGroup.Rules) // { // if (item.Field == "PLAN_ID") // { // PLAN_ID = new Guid(item.Value.ToString()); // } // } // pageFilter.FilterGroup.Rules.Clear(); // } // //非 此次体检人员 linq不好筛选 // PagedActionResult pageEntities = GetPageEntities(null, pageFilter, null); // result.Data = pageEntities.Data; // result.TotalCount = pageEntities.TotalCount; // }); //} /// /// 获得单条实体数据 /// /// 过滤实体 /// [HttpPost, Route("GetDep")] public JsonActionResult GetDep([FromBody] KeywordFilter filter) { return SafeExecute(() => { Guid PLAN_ID_DEP = Guid.Empty; if (filter.FilterGroup.Rules.Count > 0) { foreach (var item in filter.FilterGroup.Rules) { if (item.Field == "ID") { PLAN_ID_DEP = new Guid(item.Value.ToString()); } } } var PlanDep = GetEntity(e => e.ID == PLAN_ID_DEP, new string[] { "Nav_Plan" }); if (PlanDep == null) { throw new Exception("获取您所在部门体检计划上报信息失败!"); } PlanDep.Nav_Plan.Nav_ListPlanRegister = GetEntities(e => e.PLAN_ID_DEP == PLAN_ID_DEP && e.PLAN_ID == PlanDep.Nav_Plan.ID, null, null).ToList(); if (PlanDep.Nav_Plan.Nav_ListPlanRegister == null || !PlanDep.Nav_Plan.Nav_ListPlanRegister.Any()) { #region 这个部门 这次体检计划 所有的参加人员 //部门级 所有 有职业危害 的岗位 成员 var listDepPost = GetEntities(e => !e.IS_DELETED && !e.Nav_ExamCycle.IS_DELETED, null, "Nav_ExamCycle", "Nav_ListDepartmentInfoPost.Nav_Post"); if (listDepPost == null || !listDepPost.Any()) { throw new Exception("请设置体检周期表!设置路径:系统管理 => 职业卫生设置 => 体检周期表"); } var listCycle = GetEntities(e => !e.IS_DELETED, null, "Nav_ListOccHazard.Nav_Hazard"); foreach (var item in listDepPost) { item.Nav_ExamCycle = listCycle.FirstOrDefault(e => e.ID == item.EXAM_CYCLE_ID); } listDepPost = listDepPost.Where(e => e.Nav_ExamCycle != null && !e.Nav_ExamCycle.IS_DELETED); #endregion #region 旧方式 ////责任制岗位 ////var listPost = GetEntities(e => !e.IS_DELETED, null, new string[] { "Nav_Posts" }); //var listPostT = GetEntities(e => !e.IS_DELETED, null, new string[] { "Nav_Post" }); //if (listPostT == null || !listPostT.Any()) //{ // throw new Exception("请联系管理员设置【责任制岗位】"); //} //List listPost = listPostT.ToList(); //List listPostID = listPost.Select(e => e.DEPOST_ID).ToList(); ////TODO ////责任制岗位修改 0511 //List listSCPostCycleT = new List(); ////var listSCPostCycleT = GetEntities(e => !e.IS_DELETED && e.Nav_Record.DEPARTMENT_ID.HasValue && e.Nav_Record.DEPARTMENT_ID.Value == PlanDep.DEPARTMENT_ID, null, new string[] { "Nav_Record.Nav_ListOccHazard.Nav_Hazard", "Nav_SCPost" }); //if (listSCPostCycleT == null || !listSCPostCycleT.Any()) //{ // throw new Exception("请联系管理员设置您所在部门的【体检周期表】"); //} //List listSCPostCycle = listSCPostCycleT.ToList(); ////var listExamT = GetEntities(e => e.DEPARTMENT_ID.HasValue && e.DEPARTMENT_ID == PlanDep.DEPARTMENT_ID, null, new string[] { "Nav_ListSCPost", "Nav_ListOccHazard.Nav_Hazard" }); ////if (listExamT == null || !listExamT.Any()) ////{ //// throw new Exception("请联系管理员设置您所在部门的【体检周期表】"); ////} ////List listExam = listExamT.ToList(); #endregion //加载人员 List listUser = new List(); if (PlanDep.ISCONTENTMASTER) { var listrUserCom = GetEntities(e => e.ENABLE_STATUS == 0 && !e.IS_DELETED && e.CODE != "admin" && e.DEPARTMENT_ID.HasValue && e.Nav_Department.DEPARTMENT_TYPE == 3 && e.PERSON_ID.HasValue && e.Nav_Person.POST_ID.HasValue, null, new string[] { "Nav_Person.Nav_Post", "Nav_Department" }).OrderByDescending(e => e.APPROVE_ROLE_ID);//&& listPostID.Contains(e.Nav_Person.POST_ID.Value) if (listrUserCom != null && listrUserCom.Any()) { listUser.AddRange(listrUserCom); } } //部门 var listrUserDep = GetEntities(e => e.ENABLE_STATUS == 0 && !e.IS_DELETED && e.DEPARTMENT_ID.HasValue && e.DEPARTMENT_ID == PlanDep.DEPARTMENT_ID && e.PERSON_ID.HasValue && e.Nav_Person.POST_ID.HasValue, null, new string[] { "Nav_Person.Nav_Post", "Nav_Department" }).OrderByDescending(e => e.APPROVE_ROLE_ID); //&& listPostID.Contains(e.Nav_Person.POST_ID.Value) if (listrUserDep != null && listrUserDep.Any()) { listUser.AddRange(listrUserDep); } //车间 var listrUserWork = GetEntities(e => e.ENABLE_STATUS == 0 && !e.IS_DELETED && e.DEPARTMENT_ID.HasValue && e.Nav_Department.PARENT_ID.HasValue && e.Nav_Department.PARENT_ID == PlanDep.DEPARTMENT_ID && e.PERSON_ID.HasValue && e.Nav_Person.POST_ID.HasValue, null, new string[] { "Nav_Person.Nav_Post", "Nav_Department.Nav_Parent" }).OrderByDescending(e => e.APPROVE_ROLE_ID);//&& listPostID.Contains(e.Nav_Person.POST_ID.Value) if (listrUserWork != null && listrUserWork.Any()) { listUser.AddRange(listrUserWork); } //班组 var listrUserClass = GetEntities(e => e.ENABLE_STATUS == 0 && !e.IS_DELETED && e.DEPARTMENT_ID.HasValue && e.Nav_Department.PARENT_ID.HasValue && e.Nav_Department.Nav_Parent.PARENT_ID == PlanDep.DEPARTMENT_ID && e.PERSON_ID.HasValue && e.Nav_Person.POST_ID.HasValue, null, new string[] { "Nav_Person.Nav_Post", "Nav_Department.Nav_Parent.Nav_Parent" }).OrderByDescending(e => e.APPROVE_ROLE_ID);//&& listPostID.Contains(e.Nav_Person.POST_ID.Value) if (listrUserClass != null && listrUserClass.Any()) { listUser.AddRange(listrUserClass); } DateTime dtNow = DateTime.Now; Guid LoginID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID.Value; var ListPlanRegister = new List(); T_SC_POST_DEPOST UserDePost = null; List ListUserDePost = null; List Nav_ListHazard = null; List listSCPostCycleCheck = null; List listDepInfoCheck = null; foreach (var item in listUser) { listDepInfoCheck = listDepPost.Where(e => e.DEPARTMENT_ID.HasValue && e.DEPARTMENT_ID == item.DEPARTMENT_ID && e.Nav_ListDepartmentInfoPost != null && e.Nav_ListDepartmentInfoPost.FirstOrDefault(ec => ec.POST_ID == item.Nav_Person.POST_ID) != null).ToList(); if (listDepInfoCheck == null || !listDepInfoCheck.Any()) { //没找到对应职位的职业危害设置 这个人不需要体检 continue; } T_OH_HEALTH_EXAM_PLAN_REGISTER model = new T_OH_HEALTH_EXAM_PLAN_REGISTER(); model.ID = Guid.NewGuid(); model.PLAN_ID = PlanDep.PLAN_ID; model.Nav_Plan = PlanDep.Nav_Plan; model.USER_ID = item.ID; model.Nav_User = item; //获取 部门 车间 #region 获取部门人员信息 旧 //if (item.Nav_Department.DEPARTMENT_TYPE == 3 || item.Nav_Department.DEPARTMENT_TYPE == 0) //{ // // 公司 = 3 部门 = 0, // model.DEPARTMENT_ID = item.DEPARTMENT_ID; // model.DEPARTMENT_ID_WORKSHOP = null; // model.Nav_Department = item.Nav_Department; //} //else if (item.Nav_Department.DEPARTMENT_TYPE == 1) //{ // // 车间 = 1, // model.DEPARTMENT_ID = item.Nav_Department.PARENT_ID; // model.DEPARTMENT_ID_WORKSHOP = item.DEPARTMENT_ID; // model.Nav_Department = item.Nav_Department.Nav_Parent; // model.Nav_DepartmentWorkshop = item.Nav_Department; //} //else //{ // // 班组 = 2, // model.DEPARTMENT_ID = item.Nav_Department.Nav_Parent.PARENT_ID; // model.DEPARTMENT_ID_WORKSHOP = item.Nav_Department.PARENT_ID; // model.Nav_Department = item.Nav_Department.Nav_Parent.Nav_Parent; // model.Nav_DepartmentWorkshop = item.Nav_Department.Nav_Parent; //} #endregion #region 获取部门人员信息 model.DEPARTMENT_ID = item.DEPARTMENT_ID; model.Nav_Department = item.Nav_Department; #endregion ////如果匹配到多个 责任制岗位 //ListUserDePost = listPost.FindAll(e => e.DEPOST_ID == item.Nav_Person.POST_ID.Value); //if (ListUserDePost == null || ListUserDePost.Count < 1) //{ // continue; //} //var listSCPostID = ListUserDePost.Select(e => e.POST_ID); //listSCPostCycleCheck = listSCPostCycle.FindAll(e => listSCPostID.Contains(e.SC_POST_ID)); //if (listSCPostCycleCheck == null) //{ // continue; //} foreach (var itemCycle in listDepInfoCheck) { //TODO //责任制岗位修改 0511 //model.SC_POST_ID = item.Nav_Person.POST_ID;// itemCycle.Nav_SCPost.ID; //model.Nav_SCPost = item.Nav_Person.Nav_Post;// itemCycle.Nav_SCPost; model.EXAM_CYCLE_ID = itemCycle.Nav_ExamCycle.ID; model.Nav_ExamCycle = itemCycle.Nav_ExamCycle; break; } //foreach (var itemCycle in listSCPostCycleCheck) //{ // //TODO // //责任制岗位修改 0511 // //如果 体检周期 和 // if (itemCycle.Nav_Record.DEPARTMENT_ID == model.DEPARTMENT_ID) // { // if (itemCycle.Nav_Record.DEPARTMENT_ID_WORKSHOP == null || itemCycle.Nav_Record.DEPARTMENT_ID_WORKSHOP == model.DEPARTMENT_ID_WORKSHOP) // { // model.SC_POST_ID = itemCycle.Nav_SCPost.ID; // model.Nav_SCPost = itemCycle.Nav_SCPost; // model.EXAM_CYCLE_ID = itemCycle.Nav_Record.ID; // model.Nav_ExamCycle = itemCycle.Nav_Record; // break; // } // } //} ////责任制岗位 //UserDePost = listPost.FirstOrDefault(e => e.DEPOST_ID == item.Nav_Person.POST_ID.Value); //if (UserDePost == null) //{ // continue; //} //model.SC_POST_ID = UserDePost.POST_ID; //model.Nav_SCPost = UserDePost.Nav_Post; ////获取体检周期信息(根据 部门 车间 责任制岗位) ////model.EXAM_CYCLE_ID = ""; //foreach (var itemExam in listExam) //{ // foreach (var itemPost in itemExam.Nav_ListSCPost) // { // if (itemPost.SC_POST_ID == model.SC_POST_ID) // { // model.EXAM_CYCLE_ID = itemExam.ID; // model.Nav_ExamCycle = itemExam; // break; // } // } // if (model.EXAM_CYCLE_ID != null && model.EXAM_CYCLE_ID != Guid.Empty) // { // break; // } //} if (model.EXAM_CYCLE_ID == null || model.EXAM_CYCLE_ID == Guid.Empty) { continue; } DateTime dt = item.DEPARTURETIME != null ? (DateTime)item.DEPARTURETIME : DateTime.Now; model.WORKYEAR = GetWorkYear(item.ENTRYTIME, dt, dtNow); model.TYPE = OHHealthExamType.Post; model.IS_DELETED = false; model.ORG_ID = PlanDep.ORG_ID; //model.ENTITY_ORG_TPYE = ""; //model.FORM_ID = ""; //model.FLOW_STATUS = ""; //model.FLOW_SEND_STATUS = ""; //model.FLOW_ID = ""; model.CREATE_TIME = dtNow; model.MODIFY_TIME = dtNow; model.CREATER_ID = LoginID; model.MODIFIER_ID = LoginID; model.PLAN_ID_DEP = PlanDep.ID; model.Nav_PlanDEP = PlanDep; //item.Nav_Person.POST_ID model.HEALTH_EXAM_CONTENT = model.Nav_ExamCycle.HEALTH_EXAM_CONTENT; Nav_ListHazard = new List(); foreach (var itemHaz in model.Nav_ExamCycle.Nav_ListOccHazard) { Nav_ListHazard.Add(new T_OH_HEALTH_EXAM_PLAN_REGISTER_HAZARD() { REGISTER_ID = model.ID, HAZARD_ID = itemHaz.HAZARD_ID, Nav_Hazard = itemHaz.Nav_Hazard, ORG_ID = itemHaz.ORG_ID, ID = Guid.NewGuid(), IS_DELETED = false, }); } model.Nav_ListHazard = Nav_ListHazard; ListPlanRegister.Add(model); } PlanDep.Nav_Plan.Nav_ListPlanRegister = ListPlanRegister; PlanDep.Nav_Plan.Nav_ListDepartment = GetEntities(e => e.PLAN_ID == PlanDep.PLAN_ID, null, new string[] { "Nav_Department" }).ToList(); } return PlanDep; }); } /// /// 获取工龄(按365天 按小时算) /// /// /// /// private int GetWorkYear(DateTime ENTRYTIME, DateTime DEPARTURETIME, DateTime dtNow) { int WorkYear = 0; if (ENTRYTIME == DateTime.MinValue || (ENTRYTIME.Year == dtNow.Year)) { return 0; } else if (DEPARTURETIME == DateTime.MinValue) { WorkYear = (int)((dtNow - ENTRYTIME).TotalHours / 8760);// 365*24=8760.0 //WorkYear = dtNow.Year - ENTRYTIME.Year + (dtNow.Month > ENTRYTIME.Month ? 1 : 0); } else { //WorkYear = DEPARTURETIME.Year - ENTRYTIME.Year + (DEPARTURETIME.Month > ENTRYTIME.Month ? 1 : 0); WorkYear = (int)((DEPARTURETIME - ENTRYTIME).TotalHours / 8760);// 365*24=8760.0 } return WorkYear; } /// /// 更新或新增数据 /// /// 对象实体 /// [HttpPost, Route("UpdateDep")] public JsonActionResult UpdateDep([FromBody] T_OH_HEALTH_EAXM_PLAN_DEPARTMENT entity) { return SafeExecute(() => { //UpdateEntity(entity); //如果是保存并发送 //如果全部都 提交了 各部门填写完成后汇总到企管部人事专员,可增删人员,给企管部负责人审批 //写一个 跑批 如果 报名截止(超过1天) 还有人没有提交 自动提交 到 人事专员 var ListPlanRegister = entity.Nav_Plan.Nav_ListPlanRegister; entity.Nav_Plan.Nav_ListPlanRegister = null; entity.Nav_Plan = null; List ListRegHazard = new List(); foreach (var item in ListPlanRegister) { if (item.Nav_ListHazard != null && item.Nav_ListHazard.Any()) { ListRegHazard.AddRange(item.Nav_ListHazard); item.Nav_ListHazard = null; } } if (entity.STATUS == PFStandardStatus.Draft) { this.UnifiedCommit(() => { if (entity != null) UpdateEntityNoCommit(entity); //部门体检计划 if (ListPlanRegister != null && ListPlanRegister.Any())//体检人员 BantchSaveEntityNoCommit(ListPlanRegister); if (ListRegHazard != null && ListRegHazard.Any())//体检职业危害 BantchSaveEntityNoCommit(ListRegHazard); }); } else if (entity.STATUS == PFStandardStatus.Archived) { List listRowIndex = new List(); int rowIndex = 1; T_OH_HEALTH_EAXM_PLAN_DEPARTMENT PlanDep = null; foreach (var item in ListPlanRegister) { if (string.IsNullOrEmpty(item.HEALTH_EXAM_CONTENT)) { listRowIndex.Add(rowIndex); } rowIndex++; if (!item.PLAN_ID_DEP.HasValue) { if (PlanDep == null) { PlanDep = GetEntity(e => e.PLAN_ID == item.PLAN_ID && e.DEPARTMENT_ID == APT.Infrastructure.Api.AppContext.CurrentSession.DepartmentID && !e.IS_DELETED); } if (PlanDep != null) { item.PLAN_ID_DEP = PlanDep.ID; } } } if (listRowIndex.Count > 0) { throw new Exception("体检项目不能为空:行:" + string.Join(",", listRowIndex) + "!"); } bool isDepEnd = false; #region 判断是否 转入 人事专员 //保存并发送 需要发送 var plan = GetEntity(entity.PLAN_ID); List listTaskEnd = null; if (plan.DUE_TIME.HasValue && DateTime.Now > plan.DUE_TIME.Value.AddDays(1))//人性化往后一天 { isDepEnd = true; #region var listNotArchived = GetEntities(e => !e.IS_DELETED && e.ID != entity.ID && e.PLAN_ID == entity.PLAN_ID && e.STATUS != PFStandardStatus.Archived, null, null); if (listNotArchived != null && listNotArchived.Any()) { var listDataID = listNotArchived.Select(e => e.ID).ToList(); listTaskEnd = GetEntities(e => e.SOURCE_FORMCODE == "OH005" && e.SOURCE_DATA_ID.HasValue && listDataID.Contains(e.SOURCE_DATA_ID.Value), null, null).ToList(); if (listTaskEnd != null && listTaskEnd.Any()) { foreach (var item in listTaskEnd) { item.TASK_DT = DateTime.Now; item.NOTICE_STATUS = 4;// FMNoticeStatusEnum.超时无需办理; item.SOURCE_FORMCODE = "OH005_SHOWPRINT"; } } } #endregion } if (!isDepEnd) { var listNotArchived = GetEntities(e => !e.IS_DELETED && e.ID != entity.ID && e.PLAN_ID == entity.PLAN_ID && e.STATUS != PFStandardStatus.Archived, null, null); if (listNotArchived == null || !listNotArchived.Any() || listNotArchived.Count() < 1) { isDepEnd = true; } } #endregion if (!isDepEnd) { var taskEnd = NotificationTaskService.GetEntityTask(entity.TaskID, "OH005_SHOWPRINT"); this.UnifiedCommit(() => { if (entity != null) UpdateEntityNoCommit(entity); //部门体检计划 if (taskEnd != null) UpdateEntityNoCommit(taskEnd); //结束待办 //UpdateEntityNoCommit(plan);//体检计划状态修改 if (ListPlanRegister != null && ListPlanRegister.Any())//体检人员 BantchSaveEntityNoCommit(ListPlanRegister); if (ListRegHazard != null && ListRegHazard.Any())//体检职业危害 BantchSaveEntityNoCommit(ListRegHazard); }); } else { //给人事专员 #region 获取人事专员 string Msg = string.Empty; var UserRS = UserService.GetPostUser(ref Msg, "人事专员"); if (UserRS == null) { if (string.IsNullOrEmpty(Msg)) { throw new Exception("未获取到人事专员!"); } else { throw new Exception(Msg); } } #endregion //plan.STATUS = PFStandardStatus.Sign; NotificationTaskService.SendAndFinishNotificationTask("部门体检计划汇总", entity.PLAN_ID, entity.ORG_ID, UserRS.ID, UserRS.NAME, DateTime.Now, DateTime.Now.AddDays(1), (int)FMNoticeTypeEnum.消息, "OH006", entity.TaskID, () => { if (entity != null) UpdateEntityNoCommit(entity); //部门体检计划 //UpdateEntityNoCommit(plan);//体检计划状态修改 if (ListPlanRegister != null && ListPlanRegister.Any())//体检人员 BantchSaveEntityNoCommit(ListPlanRegister); if (ListRegHazard != null && ListRegHazard.Any())//体检职业危害 BantchSaveEntityNoCommit(ListRegHazard); if (listTaskEnd != null && listTaskEnd.Any())//代办未处理的 超时不办理 BantchSaveEntityNoCommit(listTaskEnd); }, "OH005_SHOWPRINT"); } } return true; }); } /// /// 部门负责人(安全员) 选择 职业危害 获取信息 /// 暂时不用 /// /// /// [HttpPost, Route("GetExamCycleByIdentifying")] public JsonActionResult GetExamCycleByIdentifying([FromBody] KeywordPageFilter pageFilter) { return SafeExecute(() => { //根据 职业危害类型 车间 部门 适配 体检周期 显示 体检项目 T_OH_HEALTH_EXAM_CYCLE result = new T_OH_HEALTH_EXAM_CYCLE(); Guid HazardID = Guid.Empty; var listMin = GetEntities(e => e.HAZARD_ID == HazardID, null, null); var listcycle = GetEntities(e => e.Nav_ListOccHazard.FirstOrDefault(e => e.Nav_Hazard.ID == HazardID) != null, null, null); return result; }); } #endregion #region 人事专员编辑 /// /// 获得单条实体数据 OH006 /// /// 过滤实体 /// [HttpPost, Route("GetOH006")] public JsonActionResult GetOH006([FromBody] KeywordFilter filter) { return SafeExecute(() => { Guid PlanID = Guid.Empty; if (filter.FilterGroup.Rules.Count > 0) { foreach (var item in filter.FilterGroup.Rules) { if (item.Field == "ID") { PlanID = new Guid(item.Value.ToString()); } } if (filter.FilterGroup.Rules.Count == 1) { filter.FilterGroup.Rules.Clear(); } } T_OH_HEALTH_EXAM_PLAN Plan = null; if (PlanID != Guid.Empty) { Plan = GetEntity(e => e.ID == PlanID); if (Plan != null) { //上报部门 Plan.Nav_ListDepartment = GetEntities(e => e.PLAN_ID == PlanID, null, new string[] { "Nav_Department" }).ToList(); //体检员工登记表 //Plan.Nav_ListPlanRegister = GetEntities(e => e.PLAN_ID == PlanID, null, new string[] { "Nav_User", "Nav_Department", "Nav_DepartmentWorkshop", "Nav_ExamCycle", "Nav_SCPost", "Nav_ListHazard.Nav_Hazard" }).ToList(); Plan.Nav_ListPlanRegister = GetEntities(e => e.PLAN_ID == PlanID, null, new string[] { "Nav_User.Nav_Person.Nav_Post", "Nav_Department", "Nav_DepartmentWorkshop", "Nav_ExamCycle", "Nav_ListHazard.Nav_Hazard" }).ToList(); if (Plan.Nav_ListPlanRegister != null && Plan.Nav_ListPlanRegister.Any()) { //体检周期(职业危害类型) var listCycle = Plan.Nav_ListPlanRegister.Select(e => e.EXAM_CYCLE_ID); if (listCycle != null && listCycle.Any()) { List listDisCycleID = listCycle.Distinct().ToList(); var listModelCycle = GetEntities(e => listDisCycleID.Contains(e.ID), null, new string[] { "Nav_ListOccHazard.Nav_Hazard" }); if (listModelCycle != null && listModelCycle.Any()) { foreach (var item in Plan.Nav_ListPlanRegister) { if (item.EXAM_CYCLE_ID.HasValue) { item.Nav_ExamCycle = listModelCycle.FirstOrDefault(e => e.ID == item.EXAM_CYCLE_ID); } item.Nav_ListHazard = item.Nav_ListHazard.OrderBy(e => e.HAZARD_ID).ToList();//职业危害排序 } } } //排序 Plan.Nav_ListPlanRegister = Plan.Nav_ListPlanRegister.OrderBy(e => e.DEPARTMENT_ID).ThenBy(e => e.DEPARTMENT_ID_WORKSHOP).ToList(); } } } return Plan; }); } /// /// 人事专员汇总 /// /// 对象实体 /// [HttpPost, Route("UpdateSum")] public JsonActionResult UpdateSum([FromBody] T_OH_HEALTH_EXAM_PLAN entity) { return SafeExecute(() => { //保存并发送 发送给 人事部负责人 var ListPlanRegister = entity.Nav_ListPlanRegister; entity.Nav_ListPlanRegister = null; List ListRegHazard = new List(); foreach (var item in ListPlanRegister) { if (item.Nav_ListHazard != null && item.Nav_ListHazard.Any()) { ListRegHazard.AddRange(item.Nav_ListHazard); item.Nav_ListHazard = null; } } if (entity.STATUS == PFStandardStatus.Sign) { //保存 this.UnifiedCommit(() => { if (entity != null) UpdateEntityNoCommit(entity); //部门体检计划 if (ListPlanRegister != null && ListPlanRegister.Any())//体检人员 BantchSaveEntityNoCommit(ListPlanRegister); if (ListRegHazard != null && ListRegHazard.Any())//体检人员 BantchSaveEntityNoCommit(ListRegHazard); }); } else if (entity.STATUS == PFStandardStatus.Approving) { //保存并发送 List listRowIndex = new List(); int rowIndex = 1; T_OH_HEALTH_EAXM_PLAN_DEPARTMENT PlanDep = null; List listDep = new List(); foreach (var item in ListPlanRegister) { if (string.IsNullOrEmpty(item.HEALTH_EXAM_CONTENT)) { listRowIndex.Add(rowIndex); } rowIndex++; if (!item.PLAN_ID_DEP.HasValue) { if (listDep.Count < 1) { listDep = GetEntities(e => e.PLAN_ID == item.PLAN_ID && !e.IS_DELETED, null, null).ToList(); } PlanDep = listDep.FirstOrDefault(e => e.DEPARTMENT_ID == item.DEPARTMENT_ID); if (PlanDep == null) { PlanDep = listDep.FirstOrDefault(e => e.ISCONTENTMASTER); } if (PlanDep != null) { item.PLAN_ID_DEP = PlanDep.ID; } else if (listDep.Count > 0) { item.PLAN_ID_DEP = listDep[0].ID; } } } if (listRowIndex.Count > 0) { throw new Exception("体检项目不能为空:行:" + string.Join(",", listRowIndex) + "!"); } //给综合部负责人 #region 获取综合部负责人 T_FM_USER userMaster = null; //人事专员 所在部门的负责人 var Depart = GetEntity(e => e.ID == APT.Infrastructure.Api.AppContext.CurrentSession.DepartmentID, new string[] { "Nav_User" }); if (Depart.Nav_User != null) { userMaster = Depart.Nav_User; } else if (userMaster == null) { //throw new Exception("未获取到" + RSDepName + "负责人!"); string RSDepName = "企业管理部"; var dep = DepartmentService.GetRSDep(RSDepName, new string[] { "Nav_User" }); if (dep == null || !dep.USER_ID.HasValue) { throw new Exception("未获取到" + RSDepName + "!"); } else// if (dep.USER_ID.HasValue) { userMaster = dep.Nav_User; } } #endregion ////人事部负责人审批待办 //NotificationTaskService.SendAndFinishNotificationTask("部门体检计划汇总审批", entity.ID, entity.ORG_ID, userMaster.ID, userMaster.NAME, DateTime.Now, DateTime.Now.AddDays(1), (int)FMNoticeTypeEnum.消息, "OH006_SHOWPRINT", entity.TaskID, () => //{ // if (entity != null) // UpdateEntityNoCommit(entity); //部门体检计划 // if (ListPlanRegister != null && ListPlanRegister.Any())//体检人员 // BantchSaveEntityNoCommit(ListPlanRegister); //}, "OH006_SHOWPRINT"); Dictionary dicApproveUser = new Dictionary(); dicApproveUser.Add(1, userMaster); //人事部负责人审批待办 entity.APPROVE_ID = Guid.NewGuid(); MFlowPermitService.InsertApprove("TJ" + DateTime.Now.ToString("yyyyMMddHHmmss"), "OH006", null, entity.ID, "OH006_SHOWPRINT", entity.TaskID, true, () => { if (entity != null) UpdateEntityNoCommit(entity); //部门体检计划 if (ListPlanRegister != null && ListPlanRegister.Any())//体检人员 BantchSaveEntityNoCommit(ListPlanRegister); if (ListRegHazard != null && ListRegHazard.Any())//体检人员 BantchSaveEntityNoCommit(ListRegHazard); }, entity.APPROVE_ID, userMaster.ID, dicApproveUser, null, null, "OH006_SHOWPRINT"); } return true; }); } /// /// 职业危害类型(有设置体检周期 OH006) /// /// 分页过滤实体 /// [HttpPost, Route("OrderPagedIdentifying")] public PagedActionResult OrderPagedIdentifying([FromBody] KeywordPageFilter pageFilter) { return SafeGetPagedData(delegate (PagedActionResult result) { PagedActionResult orderPageEntities = GetOrderPageEntities(null, pageFilter, null); result.Data = orderPageEntities.Data; result.TotalCount = orderPageEntities.TotalCount; }); } /// /// 人事部负责人审批回调 /// /// /// [HttpGet, Route("PlanMasterBack")] public JsonActionResult PlanMasterBack(string id) { return SafeExecute(() => { return ApproveCallBackService.CallBack("OH/OHHealthExamPlan/PlanMasterBack", id); }); } #endregion } }