using APT.BaseData.Domain.Entities.FM; using APT.BaseData.Domain.Enums; using APT.BaseData.Domain.Entities; using APT.BaseData.Domain.IServices; using APT.Infrastructure.Core; using APT.MS.Domain.Entities.FO; using APT.Utility; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; using APT.BaseData.Domain.IServices.FM; using APT.MS.Domain.Enums; using APT.MS.Domain.Entities.HM; using InfluxData.Net.InfluxDb.Models.Responses; using NPOI.SS.Formula.Functions; using APT.BaseData.Services.DomainServices; using log4net.Filter; using Castle.Core.Internal; using APT.WebApi.Models; using static Microsoft.AspNetCore.Razor.Language.TagHelperMetadata; using APT.BaseData.Domain.ApiModel; using System.Numerics; using Microsoft.VisualBasic; using Microsoft.Extensions.Logging; namespace APT.PP.WebApi.Controllers.Api.PP { /// /// 生成班前会议 /// [Route("api/PP/FOController")] [TypeFilter(typeof(CustomActionFilterAttribute))] public class FOController : AuthorizeApiController { IFMNotificationTaskService NotificationTaskService { get; set; } IPFCodeRuleService CodeRuleService { get; set; } public FOController(IFMNotificationTaskService notificationTaskService, IPFCodeRuleService codeRuleService) { NotificationTaskService = notificationTaskService; this.CodeRuleService = codeRuleService; } /// /// 生成班前会议 /// /// /// [HttpPost, Route("CreatePreShiftMeeting")] public JsonActionResult CreatePreShiftMeeting([FromBody] KeywordFilter filter) { return SafeExecute(() => { try { BaseFilter teamFilter = new BaseFilter(filter.GetOrgId()); var noFinishTeamActivitys = GetEntities(t => t.NOTICE_STATUS == 0 && t.SOURCE_FORMCODE == "FO010" && t.CREATE_TIME > DateTime.Now.AddMonths(-1), teamFilter); var noFinishTeamActivityIDs = noFinishTeamActivitys.Select(t => t.SOURCE_DATA_ID); var teamActivitys = GetEntities(t => noFinishTeamActivityIDs.Contains(t.ID) && t.TA_STATUS == (int)FOTeamActivityState.已归档, teamFilter); var finishedTeamActivitys = teamActivitys.Select(t => t.ID); var updateFinishTeamActivity = noFinishTeamActivitys.Where(t => finishedTeamActivitys.Contains((Guid)t.SOURCE_DATA_ID)); foreach (var item in updateFinishTeamActivity) { item.NOTICE_STATUS = 1; } BantchUpdateEntity(updateFinishTeamActivity); List listRecord = new List(); List listUser = new List(); List notices = new List(); DateTime dt = DateTime.Now; if (filter.Parameter1 != null) { dt = DateTime.Parse(filter.Parameter1); } //dt = Convert.ToDateTime("2024-08-07 05:30:00"); DateTime minTime = dt.AddMinutes(0); DateTime maxTime = dt.AddMinutes(60); var classFilter = new BaseFilter(filter.GetOrgId()); classFilter.Include = new string[] { "Nav_Team.Nav_ChargePerson.Nav_User", "Nav_DepartmentSchedulingDetail.Nav_Person.Nav_User" }; var shiftClassList = this.GetEntities(s => s.START_TIME > minTime && s.START_TIME <= maxTime && !s.RUN_STATUS && s.START_TIME != s.END_TIME && s.Nav_Team.ENABLE_STATUS == 0&&s.TEAM_ID !=Guid.Parse("33a8b8e0-76a4-439d-8a8b-44a002f63e59"), classFilter).ToList(); var schedullingIds = shiftClassList.Select(t => t.ID).Distinct().ToList(); var baseFilter = new BaseFilter(filter.GetOrgId()); //var noticeTitles = new List(); //var noticeUserIds = new List(); //var noticeUserNames = new List(); //var noticeDataIds = new List(); var userVacations = this.GetEntities(t => t.START_DATE <= DateTime.Now && t.END_DATE >= DateTime.Now,new BaseFilter(filter.GetOrgId()), "Nav_Agent"); if (shiftClassList.Count > 0) { foreach (var shift in shiftClassList) { shift.RUN_STATUS = true; //查出当前班组 var currentTeam = shift.Nav_Team; var userAgent = userVacations.FirstOrDefault(t => t.USER_ID == currentTeam.Nav_ChargePerson.Nav_User.ID); var userId = userAgent != null && userAgent.AGENT_ID != null ? userAgent.AGENT_ID : currentTeam.Nav_ChargePerson.Nav_User.ID; var userName = userAgent != null && userAgent.AGENT_ID != null ? userAgent.Nav_Agent?.NAME : currentTeam.Nav_ChargePerson.Nav_User.NAME; //当前班组的人员 var currentTeamUsers = shift.Nav_DepartmentSchedulingDetail; T_FO_PRE_SHIFT_MEETING_RECORD record = new T_FO_PRE_SHIFT_MEETING_RECORD(); ; record.ID = Guid.NewGuid(); record.ORG_ID = filter.GetOrgId(); record.CLASS_ID = shift.CLASS_ID; record.DEPARTMENT_ID = shift.DEPARTMENT_ID; record.TEAM_ID = shift.TEAM_ID; record.USER_ID = userId; record.MEETING_TIME = DateTime.Now.Date; record.MONITOR_ID = userId; record.RECORD_ID = userId; record.START_TIME = shift.START_TIME; record.END_TIME = shift.END_TIME; record.NAME = dt.Date.ToString("yyyyMMdd") + currentTeam.NAME + "-" + "班前会议"; record.DEPARTMENT_SCHEDULING_ID = shift.ID; if (currentTeam.NAME.Contains("回水泵房")) { record.JOB_CONTENT = "6S清扫,清洁,设备没施巡查点检"; record.PROTECT_MEASURE = "注意人身安全,戴好安全帽,劳动防护用品"; record.OTHER_CONTENT = "确保外排水数据正常。设备运行正常"; } foreach (var person in currentTeamUsers) { if (person.Nav_Person.Nav_User != null && person.Nav_Person.Nav_User.ENABLE_STATUS == 0) { T_FO_PRE_SHIFT_MEETING_RECORD_USER rUser = new T_FO_PRE_SHIFT_MEETING_RECORD_USER(); rUser.ORG_ID = filter.OrgId; rUser.PRE_SHIFT_MEETING_RECORD_ID = record.ID; rUser.USER_ID = person.Nav_Person.Nav_User.ID; listUser.Add(rUser); } } record.SHOULD_QTY = listUser.Count; record.ACTUAL_QTY = listUser.Count; record.LATE_QTY = 0; record.LEAVE_QTY = 0; record.GREETING = "班长:大家好!员工:好、很好、非常好!"; listRecord.Add(record); //noticeTitles.Add(dt.Date.ToString("yyyyMMdd") + currentTeam.NAME + "-" + "班前会议"); //noticeDataIds.Add(record.ID); //noticeUserIds.Add(currentTeam.Nav_ChargePerson.Nav_User.ID); //noticeUserNames.Add(currentTeam.Nav_ChargePerson.Nav_User.NAME); var startTime = shift.START_TIME.AddHours(-1); var endTime = shift.START_TIME.AddHours(1); if (filter.OrgId.ToString() == "8b3c41aa-51b1-7ce9-1879-248a038c1b5c" && currentTeam.NAME.Contains("磨浮机修班")) { //startTime = shift.START_TIME.AddHours(-4); endTime = shift.START_TIME.AddHours(2); } var noticeTask = NotificationTaskService.InsertUserNoticeTaskModel(dt.Date.ToString("yyyyMMdd") + currentTeam.NAME + "-" + "班前会议", record.ID, filter.GetOrgId(), (Guid)userId, userName, startTime, endTime, (int)FMNoticeTypeEnum.消息, "FO003"); notices.Add(noticeTask); } UnifiedCommit(() => { if (listRecord.Any()) this.BantchAddEntityNoCommit(listRecord); if (listUser.Any()) this.BantchAddEntityNoCommit(listUser); if (shiftClassList.Any()) this.BantchUpdateEntityNoCommit(shiftClassList, "RUN_STATUS"); if (notices != null && notices.Any()) BantchSaveEntityNoCommit(notices); }); //NotificationTaskService.SendNotificationTask(noticeTitles, noticeDataIds, filter.GetOrgId(), noticeUserIds, noticeUserNames, startTime, endTime, (int)FMNoticeTypeEnum.消息, "FO003", () => //{ // if (listRecord.Any()) // this.BantchAddEntityNoCommit(listRecord); // if (listUser.Any()) // this.BantchAddEntityNoCommit(listUser); // if (shiftClassList.Any()) // this.BantchUpdateEntityNoCommit(shiftClassList, "RUN_STATUS"); //}); } } catch (Exception ex) { if (!string.IsNullOrEmpty(ex.StackTrace)) throw new Exception("错误日志:[StackTrace]" + ex.StackTrace); else throw new Exception("【" + HttpContext.Request.Path + "】错误日志:[Message]" + ex.Message); } return true; }); } /// /// 生成班前会议 /// /// /// [HttpPost, Route("CreatePreShiftMeetingJD")] public JsonActionResult CreatePreShiftMeetingJD([FromBody] KeywordFilter filter) { return SafeExecute(() => { try { BaseFilter teamFilter = new BaseFilter(filter.GetOrgId()); var noFinishTeamActivitys = GetEntities(t => t.NOTICE_STATUS == 0 && t.SOURCE_FORMCODE == "FO010" && t.CREATE_TIME > DateTime.Now.AddMonths(-1), teamFilter); var noFinishTeamActivityIDs = noFinishTeamActivitys.Select(t => t.SOURCE_DATA_ID); var teamActivitys = GetEntities(t => noFinishTeamActivityIDs.Contains(t.ID) && t.TA_STATUS == (int)FOTeamActivityState.已归档, teamFilter); var finishedTeamActivitys = teamActivitys.Select(t => t.ID); var updateFinishTeamActivity = noFinishTeamActivitys.Where(t => finishedTeamActivitys.Contains((Guid)t.SOURCE_DATA_ID)); foreach (var item in updateFinishTeamActivity) { item.NOTICE_STATUS = 1; } BantchUpdateEntity(updateFinishTeamActivity); var departs = GetEntities(t => !t.IS_DELETED, teamFilter); List listRecord = new List(); List listUser = new List(); List notices = new List(); DateTime dt = DateTime.Now; if (filter.Parameter1 != null) { dt = DateTime.Parse(filter.Parameter1); } //dt = Convert.ToDateTime("2024-08-07 05:30:00"); DateTime minTime = dt.AddMinutes(0); DateTime maxTime = dt.AddMinutes(60); var classFilter = new BaseFilter(filter.GetOrgId()); classFilter.Include = new string[] { "Nav_Team.Nav_ChargePerson.Nav_User", "Nav_DepartmentSchedulingDetail.Nav_Person.Nav_User" }; var shiftClassList = this.GetEntities(s => s.START_TIME > minTime && s.START_TIME <= maxTime && !s.RUN_STATUS && s.START_TIME != s.END_TIME && s.Nav_Team.ENABLE_STATUS == 0 && s.TEAM_ID != Guid.Parse("33a8b8e0-76a4-439d-8a8b-44a002f63e59"), classFilter).ToList(); //var schedullingIds = shiftClassList.Select(t => t.ID).Distinct().ToList(); //var baseFilter = new BaseFilter(filter.GetOrgId()); //baseFilter.Include = new string[] { "ID", "START_TIME", "TEAM_ID", "PRE_MEETING_STATUS", "NAME", }; var preShiftMeetings = this.GetEntities(s => s.START_TIME > minTime && s.START_TIME <= maxTime && s.Nav_Team.ENABLE_STATUS == 0, new BaseFilter(filter.GetOrgId()), "Nav_Team.Nav_ChargePerson.Nav_User").ToList(); //var noticeTitles = new List(); //var noticeUserIds = new List(); //var noticeUserNames = new List(); //var noticeDataIds = new List(); var userVacations = this.GetEntities(t => t.START_DATE <= DateTime.Now && t.END_DATE >= DateTime.Now, new BaseFilter(filter.GetOrgId()), "Nav_Agent"); if (shiftClassList.Count > 0) { foreach (var shift in shiftClassList) { shift.RUN_STATUS = true; var depart = departs.FirstOrDefault(t=>t.TEAM_ID == shift.TEAM_ID); //查出当前班组 var currentTeam = shift.Nav_Team; var userAgent = userVacations.FirstOrDefault(t => t.USER_ID == currentTeam.Nav_ChargePerson.Nav_User.ID); var userId = userAgent != null && userAgent.AGENT_ID != null ? userAgent.AGENT_ID : currentTeam.Nav_ChargePerson.Nav_User.ID; var userName = userAgent != null && userAgent.AGENT_ID != null ? userAgent.Nav_Agent?.NAME : currentTeam.Nav_ChargePerson.Nav_User.NAME; var isExsist = preShiftMeetings.FirstOrDefault(t=>t.TEAM_ID == shift.TEAM_ID && t.START_TIME.Date == shift.START_TIME.Date); if (isExsist != null) { if (isExsist.PRE_MEETING_STATUS == FOPreMeetingStatusEnum.草稿) { isExsist.DEPARTMENT_SCHEDULING_ID = shift.ID; listRecord.Add(isExsist); currentTeam = isExsist.Nav_Team; var startTime = shift.START_TIME.AddHours(-0.5); var endTime = shift.START_TIME.AddHours(2); var noticeTask = NotificationTaskService.InsertUserNoticeTaskModel(isExsist.NAME, isExsist.ID, filter.GetOrgId(), currentTeam.Nav_ChargePerson.Nav_User.ID, currentTeam.Nav_ChargePerson.Nav_User.NAME, startTime, endTime, (int)FMNoticeTypeEnum.消息, "FO003_JD"); notices.Add(noticeTask); } } else { //当前班组的人员 var currentTeamUsers = shift.Nav_DepartmentSchedulingDetail; T_FO_PRE_SHIFT_MEETING_RECORD record = new T_FO_PRE_SHIFT_MEETING_RECORD(); ; record.ID = Guid.NewGuid(); record.ORG_ID = filter.GetOrgId(); record.CLASS_ID = shift.CLASS_ID; record.DEPARTMENT_ID = shift.DEPARTMENT_ID; record.TEAM_ID = shift.TEAM_ID; record.USER_ID = userId; record.MONITOR_ID = userId; record.RECORD_ID = userId; record.MEETING_TIME = DateTime.Now.Date; record.START_TIME = shift.START_TIME; record.END_TIME = shift.END_TIME; record.NAME = dt.Date.ToString("yyyyMMdd") + currentTeam.NAME + "-" + "班前会议"; record.DEPARTMENT_SCHEDULING_ID = shift.ID; if (currentTeam.NAME.Contains("回水泵房")) { record.JOB_CONTENT = "6S清扫,清洁,设备没施巡查点检"; record.PROTECT_MEASURE = "注意人身安全,戴好安全帽,劳动防护用品"; record.OTHER_CONTENT = "确保外排水数据正常。设备运行正常"; } foreach (var person in currentTeamUsers) { if (person.Nav_Person.Nav_User != null && person.Nav_Person.Nav_User.ENABLE_STATUS == 0) { T_FO_PRE_SHIFT_MEETING_RECORD_USER rUser = new T_FO_PRE_SHIFT_MEETING_RECORD_USER(); rUser.ORG_ID = filter.OrgId; rUser.PRE_SHIFT_MEETING_RECORD_ID = record.ID; rUser.USER_ID = person.Nav_Person.Nav_User.ID; listUser.Add(rUser); } } record.SHOULD_QTY = currentTeamUsers.Count; record.ACTUAL_QTY = currentTeamUsers.Count; record.LATE_QTY = 0; record.LEAVE_QTY = 0; record.WELCOME = "/"; record.LEARNING = "/"; record.PRAISE = "/"; record.SHARE = "/"; record.OTHER_CONTENT = "/"; record.DIFFICULTY = "/"; record.GREETING = "班长:大家好!员工:好、很好、非常好!"; record.SLOGAN = depart?.SLOGAN; record.SAFETY_OATH = depart?.SAFETY_OATH; record.LOCATION = depart?.LOCATION; listRecord.Add(record); var startTime = shift.START_TIME.AddHours(-0.5); var endTime = shift.START_TIME.AddHours(2); var noticeTask = NotificationTaskService.InsertUserNoticeTaskModel(dt.Date.ToString("yyyyMMdd") + currentTeam.NAME + "-" + "班前会议", record.ID, filter.GetOrgId(), (Guid)userId, userName, startTime, endTime, (int)FMNoticeTypeEnum.消息, "FO003_JD"); notices.Add(noticeTask); } //noticeTitles.Add(dt.Date.ToString("yyyyMMdd") + currentTeam.NAME + "-" + "班前会议"); //noticeDataIds.Add(record.ID); //noticeUserIds.Add(currentTeam.Nav_ChargePerson.Nav_User.ID); //noticeUserNames.Add(currentTeam.Nav_ChargePerson.Nav_User.NAME); } UnifiedCommit(() => { if (listRecord.Any()) this.BantchSaveEntityNoCommit(listRecord); if (listUser.Any()) this.BantchAddEntityNoCommit(listUser); if (shiftClassList.Any()) this.BantchUpdateEntityNoCommit(shiftClassList, "RUN_STATUS"); if (notices != null && notices.Any()) BantchSaveEntityNoCommit(notices); }); //NotificationTaskService.SendNotificationTask(noticeTitles, noticeDataIds, filter.GetOrgId(), noticeUserIds, noticeUserNames, startTime, endTime, (int)FMNoticeTypeEnum.消息, "FO003", () => //{ // if (listRecord.Any()) // this.BantchAddEntityNoCommit(listRecord); // if (listUser.Any()) // this.BantchAddEntityNoCommit(listUser); // if (shiftClassList.Any()) // this.BantchUpdateEntityNoCommit(shiftClassList, "RUN_STATUS"); //}); } } catch (Exception ex) { if (!string.IsNullOrEmpty(ex.StackTrace)) throw new Exception("错误日志:[StackTrace]" + ex.StackTrace); else throw new Exception("【" + HttpContext.Request.Path + "】错误日志:[Message]" + ex.Message); } return true; }); } /// /// 班组安全活动记录 /// [HttpPost, Route("CreateTeamActivity")] public JsonActionResult CreateTeamActivity([FromBody] KeywordFilter filter) { return SafeExecute(() => { try { var endDate = DateTime.Parse(DateTime.Now.AddDays(6).ToShortDateString() + " 23:59:59"); if (filter.GetOrgId() == Guid.Parse("d9871ba8-0eec-9e4a-bb87-7d5a540d8913")) { if (!(DateTime.Now.Day == 1 || DateTime.Now.Day == 15)) { return true; } } if (filter.GetOrgId() == Guid.Parse("8b3c41aa-51b1-7ce9-1879-248a038c1b5c")) { if (!(DateTime.Now.Day == 1)) { return true; } endDate = DateTime.Parse(DateTime.Now.Year +"-"+ DateTime.Now.Month + "-28 23:59:59"); } var nextDate = endDate; var sync = GetEntity(t => t.INTERFACE_ADDRESS == "PP/FOController/CreateTeamActivity"); if (sync != null) { nextDate = DateTime.Parse(sync.UPDATE_SUCCES_TIME.Value.AddDays(6).ToShortDateString() + " 23:59:59"); if (sync.UPDATE_SUCCES_TIME == null || DateTime.Now > nextDate) { sync.UPDATE_SUCCES_TIME = DateTime.Now; } else { return true; } } if (DateTime.Now > nextDate) { var baseFilter = new BaseFilter(filter.GetOrgId()); baseFilter.SelectField = new string[] { "NAME", "Nav_ChargePerson.Nav_User" }; //指定字段,包括导航属性 var teams = this.GetEntities(t => t.ENABLE_STATUS == (int)FMEnableStatusEnum.启用 && t.CHARGE_PERSON_ID != null && !t.NAME.Contains("分析科") && !t.NAME.Contains("排尾机修"), baseFilter).ToList(); var teamActivityRecords = GetEntities(t => t.ACTIVITY_TIME.Year == DateTime.Now.Year && t.ACTIVITY_TIME.Month == DateTime.Now.Month, new BaseFilter(filter.GetOrgId())); if (teams.Count > 0) //判断是否有记录 { var sysFilter = new SystemCodeFilter(); sysFilter.CodeType = (int)PFCodeRuleType.班组安全记录; sysFilter.Count = teams.Count; sysFilter.OrgId = filter.GetOrgId(); var codes = CodeRuleService.NewGenSerial(sysFilter); var codeList = codes.Split(new char[] { ',' }); var index = 0; var noticeTitles = new List(); var noticeUserIds = new List(); var noticeDataIds = new List(); var noticeUserNames = new List(); List records = new List(); List listUser = new List(); foreach (var rs in teams) //按班组记录集进行循环 { var teamActivityRecord = teamActivityRecords.Where(t => t.TEAM_ID == rs.ID); //2023-6-8 一个月只生成4次记录 if ((teamActivityRecord.Count() >= 4)) { continue; } //班组安全活动记录主表赋值----------------------------------------------------------------- T_FO_TEAM_ACTIVITY record = new T_FO_TEAM_ACTIVITY(); record.ID = Guid.NewGuid(); record.ORG_ID = filter.GetOrgId(); record.CODE = codeList[index]; record.TITLE = rs.NAME + "-班组安全活动"; record.ADDRESS = ""; record.USER_ID = rs.Nav_ChargePerson.Nav_User.ID; record.NOTE_AKER_ID = rs.Nav_ChargePerson.Nav_User.ID; record.TEAM_ID = rs.ID; record.ACTIVITY_CONTENT = ""; record.DURATION = ""; record.TA_STATUS = 0; index++; //默认将班组下面全部人员写入班组安全活动用户子表---------------------------------------- var userFilter = new BaseFilter(filter.GetOrgId()); userFilter.Include = new string[] { "Nav_Person.Nav_User" }; var teamUsers = this.GetEntities(t => t.TEAM_ID == rs.ID, userFilter).ToList(); if (teamUsers.Count() > 0) { foreach (var rsUsers in teamUsers) { T_FO_TEAM_ACTIVITY_USER rUser = new T_FO_TEAM_ACTIVITY_USER(); rUser.ID = Guid.NewGuid(); rUser.ORG_ID = filter.OrgId; rUser.TEAM_ACTIVITY_ID = record.ID; rUser.USER_ID = rsUsers.Nav_Person.Nav_User.ID; rUser.ATTEND_STATUS = 1; rUser.SIGN_IN_STATUS = 0; listUser.Add(rUser); } } //写消息表赋值----------------------------------------------------------- noticeTitles.Add(rs.NAME + " 班组安全活动记录表"); noticeUserIds.Add(rs.Nav_ChargePerson.Nav_User.ID); //关联到T_FM_USER表的登录人 noticeUserNames.Add(rs.Nav_ChargePerson.Nav_User.CODE + " " + rs.Nav_ChargePerson.Nav_User.NAME); noticeDataIds.Add(record.ID); records.Add(record); } //写消息表--------------------------------------------------------------- NotificationTaskService.SendNotificationTask(noticeTitles, noticeDataIds, filter.GetOrgId(), noticeUserIds, noticeUserNames, DateTime.Parse(DateTime.Now.ToShortDateString() + " 08:00:00"), endDate, 0, "FO010", () => { this.BantchAddEntityNoCommit(records); //写入班组安全活动记录主表 this.BantchAddEntityNoCommit(listUser); //批量写入班组安全活动记录人员子表 UpdateEntityNoCommit(sync); }); } } } catch (Exception ex) { if (!string.IsNullOrEmpty(ex.StackTrace)) throw new Exception("错误日志:[StackTrace]" + ex.StackTrace); else throw new Exception("【" + HttpContext.Request.Path + "】错误日志:[Message]" + ex.Message); } return true; }); } /// /// 班组安全活动记录金鼎排尾机修 /// [HttpPost, Route("CreateTeamActivityJDPW")] public JsonActionResult CreateTeamActivityJDPW([FromBody] KeywordFilter filter) { return SafeExecute(() => { try { //if (filter.GetOrgId() == Guid.Parse("d9871ba8-0eec-9e4a-bb87-7d5a540d8913")) //{ // if (!(DateTime.Now.Day == 1 || DateTime.Now.Day == 15)) // { // return true; // } //} //var sync = GetEntity(t => t.INTERFACE_ADDRESS == "PP/FOController/CreateTeamActivity"); //if (sync != null) //{ // var nextDate = sync.UPDATE_SUCCES_TIME.Value.AddDays(6); // if (sync.UPDATE_SUCCES_TIME == null || DateTime.Now > nextDate) // { // sync.UPDATE_SUCCES_TIME = DateTime.Now; // } // else // { // return true; // } //} if (DateTime.Now.DayOfWeek == DayOfWeek.Saturday) { var baseFilter = new BaseFilter(filter.GetOrgId()); baseFilter.SelectField = new string[] { "NAME", "Nav_ChargePerson.Nav_User" }; //指定字段,包括导航属性 var teams = this.GetEntities(t => t.ENABLE_STATUS == (int)FMEnableStatusEnum.启用 && t.CHARGE_PERSON_ID != null && t.NAME == "排尾机修", baseFilter).ToList(); var teamIds = teams.Select(t => t.ID).ToList(); var teamActivityRecords = GetEntities(t => t.ACTIVITY_TIME.Year == DateTime.Now.Year && t.ACTIVITY_TIME.Month == DateTime.Now.Month && t.TEAM_ID != null && teamIds.Contains((Guid)t.TEAM_ID), new BaseFilter(filter.GetOrgId())); if (teams.Count > 0) //判断是否有记录 { var sysFilter = new SystemCodeFilter(); sysFilter.CodeType = (int)PFCodeRuleType.班组安全记录; sysFilter.Count = teams.Count; sysFilter.OrgId = filter.GetOrgId(); var codes = CodeRuleService.NewGenSerial(sysFilter); var codeList = codes.Split(new char[] { ',' }); var index = 0; var noticeTitles = new List(); var noticeUserIds = new List(); var noticeDataIds = new List(); var noticeUserNames = new List(); List records = new List(); List listUser = new List(); foreach (var rs in teams) //按班组记录集进行循环 { var teamActivityRecord = teamActivityRecords.Where(t => t.TEAM_ID == rs.ID); //2023-6-8 一个月只生成4次记录 if ((teamActivityRecord.Count() >= 4)) { continue; } //班组安全活动记录主表赋值----------------------------------------------------------------- T_FO_TEAM_ACTIVITY record = new T_FO_TEAM_ACTIVITY(); record.ID = Guid.NewGuid(); record.ORG_ID = filter.GetOrgId(); record.CODE = codeList[index]; record.TITLE = rs.NAME + "-班组安全活动"; record.ADDRESS = ""; record.USER_ID = rs.Nav_ChargePerson.Nav_User.ID; record.NOTE_AKER_ID = rs.Nav_ChargePerson.Nav_User.ID; record.TEAM_ID = rs.ID; record.ACTIVITY_CONTENT = ""; record.DURATION = ""; record.TA_STATUS = 0; index++; //默认将班组下面全部人员写入班组安全活动用户子表---------------------------------------- var userFilter = new BaseFilter(filter.GetOrgId()); userFilter.Include = new string[] { "Nav_Person.Nav_User" }; var teamUsers = this.GetEntities(t => t.TEAM_ID == rs.ID, userFilter).ToList(); if (teamUsers.Count() > 0) { foreach (var rsUsers in teamUsers) { T_FO_TEAM_ACTIVITY_USER rUser = new T_FO_TEAM_ACTIVITY_USER(); rUser.ID = Guid.NewGuid(); rUser.ORG_ID = filter.OrgId; rUser.TEAM_ACTIVITY_ID = record.ID; rUser.USER_ID = rsUsers.Nav_Person.Nav_User.ID; rUser.ATTEND_STATUS = 1; rUser.SIGN_IN_STATUS = 0; listUser.Add(rUser); } } //写消息表赋值----------------------------------------------------------- noticeTitles.Add(rs.NAME + " 班组安全活动记录表"); noticeUserIds.Add(rs.Nav_ChargePerson.Nav_User.ID); //关联到T_FM_USER表的登录人 noticeUserNames.Add(rs.Nav_ChargePerson.Nav_User.CODE + " " + rs.Nav_ChargePerson.Nav_User.NAME); noticeDataIds.Add(record.ID); records.Add(record); } //写消息表--------------------------------------------------------------- NotificationTaskService.SendNotificationTask(noticeTitles, noticeDataIds, filter.GetOrgId(), noticeUserIds, noticeUserNames, DateTime.Parse(DateTime.Now.ToShortDateString() + " 08:00:00"), DateTime.Parse(DateTime.Now.AddDays(6).ToShortDateString() + " 23:59:59"), 0, "FO010", () => { this.BantchAddEntityNoCommit(records); //写入班组安全活动记录主表 this.BantchAddEntityNoCommit(listUser); //批量写入班组安全活动记录人员子表 //UpdateEntityNoCommit(sync); }); } } } catch (Exception ex) { if (!string.IsNullOrEmpty(ex.StackTrace)) throw new Exception("错误日志:[StackTrace]" + ex.StackTrace); else throw new Exception("【" + HttpContext.Request.Path + "】错误日志:[Message]" + ex.Message); } return true; }); } /// /// 创建岗位当班记录 /// [HttpPost, Route("CreateCurrentClassRecord")] public JsonActionResult CreateCurrentClassRecord([FromBody] KeywordFilter filter) { return SafeExecute(() => { //消息 List listRecord = new List(); List listUser = new List(); List sendNotices = new List(); //获取班组排班计划(结束时间前一小时) 半小时触发判断一次 DateTime dt = DateTime.Now; if (filter.Parameter1 != null) { dt = DateTime.Parse(filter.Parameter1); } //dt = Convert.ToDateTime("2022-03-03 07:10:00"); DateTime minTime = dt.AddMinutes(0); DateTime maxTime = dt.AddMinutes(90); DateTime maxTime2 = dt.AddMinutes(240); string todayShortDate = dt.ToShortDateString(); DateTime shortToday = Convert.ToDateTime(todayShortDate + " 00:00:00"); DateTime longToday = shortToday.AddDays(2); var baseFilter = new BaseFilter(filter.GetOrgId()); var sheduleFilter = new BaseFilter(filter.GetOrgId()); List dataorder = new List(); DataOrder do1 = new DataOrder(); do1.Field = "START_TIME"; dataorder.Add(do1); sheduleFilter.Orders = dataorder; var shiftClassListMF = new List(); var userVacations = this.GetEntities(t => t.START_DATE <= DateTime.Now && t.END_DATE >= DateTime.Now, new BaseFilter(filter.GetOrgId()), "Nav_Agent"); //金鼎统一提前4小时触发 if (filter.OrgId.ToString() == "8b3c41aa-51b1-7ce9-1879-248a038c1b5c") { //List teamNames = new List(); //teamNames.Add("磨浮机修班"); //teamNames.Add("排尾机修"); //teamNames.Add("现场一班"); //teamNames.Add("现场二班"); //teamNames.Add("穿孔凿岩班"); //teamNames.Add("铲运一班"); //teamNames.Add("铲运二班"); //teamNames.Add("金宇机修班"); //&& teamNames.Contains(t.Nav_Team.NAME) shiftClassListMF = GetEntities(t => t.END_TIME > minTime && t.END_TIME < maxTime2 && t.SHIFT_CLASS_RUN_STATUS == false && t.START_TIME != t.END_TIME && t.Nav_Team != null && t.Nav_Team.ENABLE_STATUS == (int)FMEnableStatusEnum.启用, sheduleFilter, new string[] { "Nav_Class", "Nav_DepartMent", "Nav_DepartmentCalendarConfig", "Nav_Team.Nav_ChargePerson.Nav_User", "Nav_DepartmentSchedulingDetail.Nav_Person.Nav_User", "Nav_DepartmentSchedulingDetail.Nav_Person.Nav_Post" }).ToList(); try { if (shiftClassListMF != null && shiftClassListMF.Count > 0) { foreach (var shift in shiftClassListMF) { shift.SHIFT_CLASS_RUN_STATUS = true; } //取出未来2天所有的排班 var shiftClassListAll = GetOrderEntities(t => t.START_TIME >= dt && t.DATE_TIME < longToday && t.START_TIME != t.END_TIME, sheduleFilter, new string[] { "Nav_DepartmentCalendarConfig", "Nav_DepartmentCalendarConfig" }).ToList(); Guid nextClassID = Guid.Empty; foreach (var shiftClass in shiftClassListMF) { //循环排班,按每个班取出这个班有哪些人 var teamUsers = shiftClass.Nav_DepartmentSchedulingDetail; //取出该班所有人的岗位信息 var teamPostIdAll = teamUsers.Where(i => i.Nav_Person.POST_ID != null).Select(i => i.Nav_Person.Nav_Post.ID).Distinct().ToList(); var teamPostAll = teamUsers.Where(i => i.Nav_Person.POST_ID != null).Select(i => i.Nav_Person.Nav_Post).ToList(); //判断is_handover,true的话记录下个班班组的id if (shiftClass != null && shiftClass.Nav_DepartmentCalendarConfig != null && shiftClass.Nav_DepartmentCalendarConfig.IS_HANDOVER) { var nextClassTemp = shiftClassListAll.FirstOrDefault(t => t.DEPARTMENT_ID == shiftClass.DEPARTMENT_ID && t.START_TIME >= shiftClass.END_TIME && t.Nav_DepartmentCalendarConfig.IS_HANDOVER == true && t.Nav_DepartmentCalendarConfig.CALENDAR_ID == shiftClass.Nav_DepartmentCalendarConfig.CALENDAR_ID); if (nextClassTemp != null) { nextClassID = nextClassTemp.ID; } if (shiftClass.TEAM_ID == Guid.Parse("8efb939e-ac49-4637-975f-8e6bb634bf50")) { nextClassID = shiftClassListAll.FirstOrDefault(t => t.TEAM_ID == Guid.Parse("6e2080ff-f2d4-4145-9c0d-ef996cc5edc5") && t.START_TIME >= shiftClass.END_TIME).ID; } else if (shiftClass.TEAM_ID == Guid.Parse("6e2080ff-f2d4-4145-9c0d-ef996cc5edc5")) { nextClassID = shiftClassListAll.FirstOrDefault(t => t.TEAM_ID == Guid.Parse("8efb939e-ac49-4637-975f-8e6bb634bf50") && t.START_TIME >= shiftClass.END_TIME).ID; } else if (shiftClass.TEAM_ID == Guid.Parse("af27e0b0-05dc-4856-b045-26743bf3e855")) { nextClassID = shiftClassListAll.FirstOrDefault(t => t.TEAM_ID == Guid.Parse("a86c935b-f9e5-4f08-a258-11870520a318") && t.START_TIME >= shiftClass.END_TIME).ID; } else if (shiftClass.TEAM_ID == Guid.Parse("a86c935b-f9e5-4f08-a258-11870520a318")) { nextClassID = shiftClassListAll.FirstOrDefault(t => t.TEAM_ID == Guid.Parse("af27e0b0-05dc-4856-b045-26743bf3e855") && t.START_TIME >= shiftClass.END_TIME).ID; } } if (teamPostIdAll != null && teamPostIdAll.Count() > 0) { //按岗位循环 foreach (var teamPost in teamPostIdAll) { var userAgent = userVacations.FirstOrDefault(t => t.USER_ID == shiftClass.Nav_Team.Nav_ChargePerson.Nav_User.ID); var userId = userAgent != null && userAgent.AGENT_ID != null ? userAgent.AGENT_ID : shiftClass.Nav_Team.Nav_ChargePerson.Nav_User.ID; var postUsers = teamUsers.Where(i => i.Nav_Person.POST_ID == teamPost).ToList(); var dataId = Guid.NewGuid(); T_FO_CURRENT_CLASS_RECORD currentClassRecord = new T_FO_CURRENT_CLASS_RECORD(); currentClassRecord.ID = dataId; currentClassRecord.ORG_ID = filter.GetOrgId(); currentClassRecord.DEPARTMENT_POST_ID = teamPost; currentClassRecord.DEPARTMENT_ID = shiftClass.DEPARTMENT_ID; currentClassRecord.CLASS_ID = shiftClass.CLASS_ID; currentClassRecord.RECORD_DATE = shiftClass.END_TIME; var postName = teamPostAll.FirstOrDefault(i => i.ID == teamPost); currentClassRecord.NAME = DateTime.Now.Date.ToString("yyyyMMdd") + shiftClass.Nav_Team.NAME + "-" + postName.NAME + "当班工作记录"; currentClassRecord.CHARGE_USER_ID = userId; currentClassRecord.NEXT_CLASS_TEAM_ID = nextClassID; currentClassRecord.CLASS_TEAM_ID = (Guid)shiftClass.TEAM_ID; currentClassRecord.SUPPLIES_STATUS = (int)FOShiftRecordStatusEnum.正常; currentClassRecord.SUPPLIES_USED = (int)WFDisableStatusEnum.是; listRecord.Add(currentClassRecord); foreach (var post in postUsers) { if (post.Nav_Person.Nav_User != null && post.Nav_Person.Nav_User.ENABLE_STATUS == 0) { var postuserAgent = userVacations.FirstOrDefault(t => t.USER_ID == post.Nav_Person.Nav_User.ID); var postuserId = postuserAgent != null && postuserAgent.AGENT_ID != null ? postuserAgent.AGENT_ID : post.Nav_Person.Nav_User.ID; var postuserName = postuserAgent != null && postuserAgent.AGENT_ID != null ? postuserAgent.Nav_Agent?.NAME : post.Nav_Person.Nav_User.NAME; T_FO_CURRENT_CLASS_RECORD_USER currentClassRecordUser = new T_FO_CURRENT_CLASS_RECORD_USER(); currentClassRecordUser.ORG_ID = filter.GetOrgId(); currentClassRecordUser.CURRENT_CLASS_RECORD_ID = currentClassRecord.ID; currentClassRecordUser.USER_ID = (Guid)postuserId; listUser.Add(currentClassRecordUser); //发送通知消息 var sendNotice = NotificationTaskService.InsertUserNoticeTaskModel(DateTime.Now.Date.ToString("yyyyMMdd") + shiftClass.Nav_Team.NAME + "-" + postName.NAME + " 当班工作记录", currentClassRecord.ID, filter.GetOrgId(), (Guid)postuserId, postuserName, currentClassRecord.RECORD_DATE.AddHours(-4), currentClassRecord.RECORD_DATE.AddHours(2), 1, "FO005"); sendNotices.Add(sendNotice); } } } } } UnifiedCommit(() => { if (sendNotices != null && sendNotices.Any()) this.BantchAddEntityNoCommit(sendNotices); if (listRecord != null && listRecord.Any()) this.BantchAddEntityNoCommit(listRecord); if (listUser != null && listUser.Any()) this.BantchAddEntityNoCommit(listUser); if (shiftClassListMF != null && shiftClassListMF.Any()) this.BantchUpdateEntityNoCommit(shiftClassListMF, "SHIFT_CLASS_RUN_STATUS"); if (shiftClassListMF != null && shiftClassListMF.Any()) this.BantchUpdateEntityNoCommit(shiftClassListMF, "SHIFT_CLASS_RUN_STATUS"); }); } return true; } catch (Exception ex) { throw new Exception(ex.Message); } } else { //取出最近要下班的班组 var shiftClassList = GetEntities(t => t.END_TIME > minTime && t.END_TIME < maxTime && t.SHIFT_CLASS_RUN_STATUS == false && t.START_TIME != t.END_TIME && t.Nav_Team.ENABLE_STATUS == (int)FMEnableStatusEnum.启用, sheduleFilter, new string[] { "Nav_Class", "Nav_DepartMent", "Nav_DepartmentCalendarConfig", "Nav_Team.Nav_ChargePerson.Nav_User", "Nav_DepartmentSchedulingDetail.Nav_Person.Nav_User", "Nav_DepartmentSchedulingDetail.Nav_Person.Nav_Post" }).ToList(); try { if (shiftClassList != null && shiftClassList.Count > 0) { foreach (var shift in shiftClassList) { shift.SHIFT_CLASS_RUN_STATUS = true; } //取出未来2天所有的排班 var shiftClassListAll = GetOrderEntities(t => t.START_TIME >= dt && t.DATE_TIME < longToday && t.START_TIME != t.END_TIME, sheduleFilter, new string[] { "Nav_DepartmentCalendarConfig", "Nav_DepartmentCalendarConfig" }).ToList(); Guid nextClassID = Guid.Empty; foreach (var shiftClass in shiftClassList) { //循环排班,按每个班取出这个班有哪些人 var teamUsers = shiftClass.Nav_DepartmentSchedulingDetail; //取出该班所有人的岗位信息 var teamPostIdAll = teamUsers.Where(i => i.Nav_Person.POST_ID != null).Select(i => i.Nav_Person.Nav_Post.ID).Distinct().ToList(); var teamPostAll = teamUsers.Where(i => i.Nav_Person.POST_ID != null).Select(i => i.Nav_Person.Nav_Post).ToList(); //判断is_handover,true的话记录下个班班组的id if (shiftClass != null && shiftClass.Nav_DepartmentCalendarConfig != null && shiftClass.Nav_DepartmentCalendarConfig.IS_HANDOVER) { var nextClassTemp = shiftClassListAll.FirstOrDefault(t => t.DEPARTMENT_ID == shiftClass.DEPARTMENT_ID && t.START_TIME >= shiftClass.END_TIME && t.Nav_DepartmentCalendarConfig.IS_HANDOVER == true && t.Nav_DepartmentCalendarConfig.CALENDAR_ID == shiftClass.Nav_DepartmentCalendarConfig.CALENDAR_ID); if (nextClassTemp != null) { nextClassID = nextClassTemp.ID; } if (shiftClass.TEAM_ID == Guid.Parse("8efb939e-ac49-4637-975f-8e6bb634bf50")) { nextClassID = shiftClassListAll.FirstOrDefault(t => t.TEAM_ID == Guid.Parse("6e2080ff-f2d4-4145-9c0d-ef996cc5edc5") && t.START_TIME >= shiftClass.END_TIME).ID; } else if (shiftClass.TEAM_ID == Guid.Parse("6e2080ff-f2d4-4145-9c0d-ef996cc5edc5")) { nextClassID = shiftClassListAll.FirstOrDefault(t => t.TEAM_ID == Guid.Parse("8efb939e-ac49-4637-975f-8e6bb634bf50") && t.START_TIME >= shiftClass.END_TIME).ID; } else if (shiftClass.TEAM_ID == Guid.Parse("af27e0b0-05dc-4856-b045-26743bf3e855")) { nextClassID = shiftClassListAll.FirstOrDefault(t => t.TEAM_ID == Guid.Parse("a86c935b-f9e5-4f08-a258-11870520a318") && t.START_TIME >= shiftClass.END_TIME).ID; } else if (shiftClass.TEAM_ID == Guid.Parse("a86c935b-f9e5-4f08-a258-11870520a318")) { nextClassID = shiftClassListAll.FirstOrDefault(t => t.TEAM_ID == Guid.Parse("af27e0b0-05dc-4856-b045-26743bf3e855") && t.START_TIME >= shiftClass.END_TIME).ID; } } if (teamPostIdAll != null && teamPostIdAll.Count() > 0) { //按岗位循环 foreach (var teamPost in teamPostIdAll) { var userAgent = userVacations.FirstOrDefault(t => t.USER_ID == shiftClass.Nav_Team.Nav_ChargePerson.Nav_User.ID); var userId = userAgent != null && userAgent.AGENT_ID != null ? userAgent.AGENT_ID : shiftClass.Nav_Team.Nav_ChargePerson.Nav_User.ID; var postUsers = teamUsers.Where(i => i.Nav_Person.POST_ID == teamPost).ToList(); var dataId = Guid.NewGuid(); T_FO_CURRENT_CLASS_RECORD currentClassRecord = new T_FO_CURRENT_CLASS_RECORD(); currentClassRecord.ID = dataId; currentClassRecord.ORG_ID = filter.GetOrgId(); currentClassRecord.DEPARTMENT_POST_ID = teamPost; currentClassRecord.DEPARTMENT_ID = shiftClass.DEPARTMENT_ID; currentClassRecord.CLASS_ID = shiftClass.CLASS_ID; currentClassRecord.RECORD_DATE = shiftClass.END_TIME; var postName = teamPostAll.FirstOrDefault(i => i.ID == teamPost); currentClassRecord.NAME = DateTime.Now.Date.ToString("yyyyMMdd") + shiftClass.Nav_Team.NAME + "-" + postName.NAME + "当班工作记录"; currentClassRecord.CHARGE_USER_ID = userId; currentClassRecord.NEXT_CLASS_TEAM_ID = nextClassID; currentClassRecord.CLASS_TEAM_ID = (Guid)shiftClass.TEAM_ID; currentClassRecord.SUPPLIES_STATUS = (int)FOShiftRecordStatusEnum.正常; currentClassRecord.SUPPLIES_USED = (int)WFDisableStatusEnum.是; listRecord.Add(currentClassRecord); foreach (var post in postUsers) { if (post.Nav_Person.Nav_User != null && post.Nav_Person.Nav_User.ENABLE_STATUS == 0) { var postuserAgent = userVacations.FirstOrDefault(t => t.USER_ID == post.Nav_Person.Nav_User.ID); var postuserId = postuserAgent != null && postuserAgent.AGENT_ID != null ? postuserAgent.AGENT_ID : post.Nav_Person.Nav_User.ID; var postuserName = postuserAgent != null && postuserAgent.AGENT_ID != null ? postuserAgent.Nav_Agent?.NAME : post.Nav_Person.Nav_User.NAME; T_FO_CURRENT_CLASS_RECORD_USER currentClassRecordUser = new T_FO_CURRENT_CLASS_RECORD_USER(); currentClassRecordUser.ORG_ID = filter.GetOrgId(); currentClassRecordUser.CURRENT_CLASS_RECORD_ID = currentClassRecord.ID; currentClassRecordUser.USER_ID = (Guid)postuserId; listUser.Add(currentClassRecordUser); //发送通知消息 var sendNotice = NotificationTaskService.InsertUserNoticeTaskModel(DateTime.Now.Date.ToString("yyyyMMdd") + shiftClass.Nav_Team.NAME + "-" + postName.NAME + " 当班工作记录", currentClassRecord.ID, filter.GetOrgId(), (Guid)postuserId, postuserName, currentClassRecord.RECORD_DATE.AddHours(-1.5), currentClassRecord.RECORD_DATE.AddHours(2), 1, "FO005"); sendNotices.Add(sendNotice); } } } } } UnifiedCommit(() => { if (sendNotices != null && sendNotices.Any()) this.BantchAddEntityNoCommit(sendNotices); if (listRecord != null && listRecord.Any()) this.BantchAddEntityNoCommit(listRecord); if (listUser != null && listUser.Any()) this.BantchAddEntityNoCommit(listUser); if (shiftClassList != null && shiftClassList.Any()) this.BantchUpdateEntityNoCommit(shiftClassList, "SHIFT_CLASS_RUN_STATUS"); if (shiftClassListMF != null && shiftClassListMF.Any()) this.BantchUpdateEntityNoCommit(shiftClassListMF, "SHIFT_CLASS_RUN_STATUS"); }); } return true; } catch (Exception ex) { throw new Exception(ex.Message); } } }); } /// /// 根据每日的班前会议、人员的岗位触发每日作业 /// [HttpPost, Route("CreateDailyJobs")] public JsonActionResult CreateDailyJobs([FromBody] KeywordFilter filter) { return SafeExecute(() => { try { var jobs = new List(); var records = new List(); var notices = new List(); var persons = new List(); var details = new List(); var flows = new List(); var measures = new List(); var jobDetails = new List(); var jobFlows = new List(); var jobMeasures = new List(); DateTime dt = DateTime.Now; //DateTime maxTime = dt.AddMinutes(-30); var newFilter = new BaseFilter(filter.OrgId); //newFilter.SelectField = new List { "ID", "START_TIME", "IS_RUN", "Nav_Users" }; //newFilter.Include = new string[] { "Nav_Users" }; //取班前会议 开始时间等于今天且开会时间1小时后 未跑批的数据 && var preShiftMeetings = this.GetEntities(t => t.MEETING_TIME.Date == dt.Date && t.START_TIME.TimeOfDay < dt.TimeOfDay && t.IS_RUN == 0 && t.PRE_MEETING_STATUS != 0, new BaseFilter(filter.OrgId), new string[] { "Nav_Users" }); if (preShiftMeetings != null && preShiftMeetings.Any()) { preShiftMeetings.ForEach(t => { t.IS_RUN = WFDisableStatusEnum.是; }); //提前取出所有人员,所有岗位,所有作业 var allUserIds = preShiftMeetings.SelectMany(t => t.Nav_Users).Select(m => m.USER_ID).Distinct().ToList(); //岗位 newFilter.SelectField = new List { "ID", "NAME" }; var userList = this.GetEntities(t => allUserIds.Contains(t.ID) && t.ENABLE_STATUS == 0, newFilter, new string[] { "Nav_Person" }); var allPostIds = userList.Where(t => t.Nav_Person != null).Select(m => m.Nav_Person.POST_ID).Distinct().ToList(); //所有岗位对应的每日作业 newFilter.SelectField = new List { "POST_ID", "OPERATION_LINK_ID" }; var operationLinks = this.GetEntities(t => allPostIds.Contains(t.POST_ID), newFilter); var linkIds = operationLinks.Select(t => t.OPERATION_LINK_ID).Distinct().ToList(); //每日作业 newFilter.SelectField = new List { "ID", "OPERATION_STEP_ID", "IS_IMPORTANT" }; var links = this.GetEntities(t => linkIds.Contains(t.ID) && t.CYCLE_TYPE == HMCycleTypeEnum.Day, newFilter, new string[] { "Nav_OperationStep", "Nav_WorkPermitType", "Nav_SafeConfirms", "Nav_SafeMeasures", "Nav_DealMeasures" }); var userVacations = this.GetEntities(t => t.START_DATE <= DateTime.Now && t.END_DATE >= DateTime.Now, new BaseFilter(filter.GetOrgId()), "Nav_Agent"); foreach (var pre in preShiftMeetings) { //当前班前会的人员 var userTempIds = pre.Nav_Users.Select(t => t.USER_ID).Distinct().ToList(); //人员岗位 var postTempIds = userList.Where(t => userTempIds.Contains(t.ID) && t.Nav_Person != null).Select(m => m.Nav_Person.POST_ID).Distinct().ToList(); //遍历所有岗位,将岗位对应的作业发给对应的人员上 if (postTempIds != null && postTempIds.Any()) { foreach (var item in postTempIds) { //岗位下的所有作业 var opLinkIds = operationLinks.Where(t => t.POST_ID == item).Select(m => m.OPERATION_LINK_ID).Distinct().ToList(); var stepIds = links.Where(t => opLinkIds.Contains(t.ID)).Select(m => m.OPERATION_STEP_ID).Distinct().ToList(); //岗位下的所有人 var postuserIds = userList.Where(t => userTempIds.Contains(t.ID) && t.Nav_Person != null && t.Nav_Person.POST_ID == item).Select(m => m.ID).Distinct().ToList(); List userIds = new List(); List userNames = new List(); foreach (var user in postuserIds) { var first = userList.FirstOrDefault(t => t.ID == user); var userAgent = userVacations.FirstOrDefault(t => t.USER_ID == user); var userId = userAgent != null && userAgent.AGENT_ID != null ? userAgent.AGENT_ID : user; var userName = userAgent != null && userAgent.AGENT_ID != null ? userAgent.Nav_Agent?.NAME : first.NAME; userIds.Add((Guid)userId); userNames.Add(userName); } //循环每个作业发给所有人 if (stepIds != null && stepIds.Any()) { foreach (var step in stepIds) { //判断是关键作业还是一般作业 var link = links.FirstOrDefault(t => opLinkIds.Contains(t.ID) && t.OPERATION_STEP_ID == step); //许可作业、非许可的关键任务 if (link != null && (link.Nav_WorkPermitType != null && link.Nav_WorkPermitType.NAME != "无") || (link.Nav_WorkPermitType != null && link.Nav_WorkPermitType.NAME == "无" && link.IS_IMPORTANT == (int)ISImportantEnum.是)) { //取审批流水码 var sysFilter = new SystemCodeFilter(); sysFilter.CodeType = (int)PFCodeRuleType.关键许可作业票编号; sysFilter.Count = 1; sysFilter.OrgId = link.ORG_ID; var codes = CodeRuleService.NewGenSerial(sysFilter); var codeList = codes.Split(new char[] { ',' }); T_FO_CRUCIAL_LICENSE_JOB job = new T_FO_CRUCIAL_LICENSE_JOB(); //主表 job.CODE = codeList[0]; job.ORG_ID = link.ORG_ID; job.APPLY_USER_ID = userIds.FirstOrDefault(); job.IS_AUTO = (int)ISImportantEnum.是; job.OPERATION_STEP_ID = link.OPERATION_STEP_ID; job.AUDIT_LEVEL = link.AUDIT_LEVEL; jobs.Add(job); //作业前安全确认 if (link != null && link.Nav_SafeConfirms != null && link.Nav_SafeConfirms.Any()) { link.Nav_SafeConfirms.ForEach(t => { T_FO_CRUCIAL_LICENSE_SAFE_CONFIRM detail = new T_FO_CRUCIAL_LICENSE_SAFE_CONFIRM(); detail.CRUCIAL_LICENSE_JOB_ID = job.ID; detail.NAME = t.NAME; detail.ORG_ID = t.ORG_ID; detail.NUM = t.NUM; jobDetails.Add(detail); }); } //作业流程及安全措施 if (link != null && link.Nav_SafeMeasures != null && link.Nav_SafeMeasures.Any()) { link.Nav_SafeMeasures.ForEach(t => { T_FO_CRUCIAL_LICENSE_SAFE_MEASURE detail = new T_FO_CRUCIAL_LICENSE_SAFE_MEASURE(); detail.CRUCIAL_LICENSE_JOB_ID = job.ID; detail.NAME = t.NAME; detail.ORG_ID = t.ORG_ID; detail.NUM = t.NUM; jobFlows.Add(detail); }); } //作业后处理措施 if (link != null && link.Nav_DealMeasures != null && link.Nav_DealMeasures.Any()) { link.Nav_DealMeasures.ForEach(t => { T_FO_CRUCIAL_LICENSE_DEAL_MEASURE detail = new T_FO_CRUCIAL_LICENSE_DEAL_MEASURE(); detail.CRUCIAL_LICENSE_JOB_ID = job.ID; detail.NAME = t.NAME; detail.ORG_ID = t.ORG_ID; detail.NUM = t.NUM; jobMeasures.Add(detail); }); } var noticeTemp = NotificationTaskService.InsertUserNoticeTaskModels("关键许可作业票 - " + link?.Nav_OperationStep?.NAME + "(" + dt.Date.ToString("yyyyMMdd") + ")", job.ID, link.ORG_ID, userIds, userNames, DateTime.Now, DateTime.Now.AddHours(24), (int)FMNoticeTypeEnum.消息, "FO017"); notices.AddRange(noticeTemp); } //非许可非关键的一般任务 if (link != null && (link.Nav_WorkPermitType == null || (link.Nav_WorkPermitType != null && link.Nav_WorkPermitType.NAME == "无")) && link.IS_IMPORTANT == (int)ISImportantEnum.否) { //取审批流水码 var sysFilter = new SystemCodeFilter(); sysFilter.CodeType = (int)PFCodeRuleType.一般作业活动记录表编号; sysFilter.Count = 1; sysFilter.OrgId = link.ORG_ID; var codes = CodeRuleService.NewGenSerial(sysFilter); var codeList = codes.Split(new char[] { ',' }); T_FO_JOB_EVENT_RECORD record = new T_FO_JOB_EVENT_RECORD(); //主表 record.CODE = codeList[0]; record.ORG_ID = link.ORG_ID; record.OPERATION_STEP_ID = link.OPERATION_STEP_ID; record.JOB_DATE = DateTime.Now.Date.ToString(); records.Add(record); //作业人员表 if (userIds != null && userIds.Any()) { userIds.ForEach(t => { if (t != null) { T_FO_JOB_EVENT_PERSON person = new T_FO_JOB_EVENT_PERSON(); person.USER_ID = t; person.JOB_EVENT_RECORD_ID = record.ID; person.ORG_ID = link.ORG_ID; persons.Add(person); } }); } //作业前安全确认 if (link != null && link.Nav_SafeConfirms != null && link.Nav_SafeConfirms.Any()) { link.Nav_SafeConfirms.ForEach(t => { T_FO_JOB_EVENT_DETAIL detail = new T_FO_JOB_EVENT_DETAIL(); detail.JOB_EVENT_RECORD_ID = record.ID; detail.SafeConfirmsStr = t.NAME; detail.IS_CONFIRM = false; detail.ORG_ID = t.ORG_ID; detail.NUM = t.NUM; details.Add(detail); }); } //作业流程及安全措施 if (link != null && link.Nav_SafeMeasures != null && link.Nav_SafeMeasures.Any()) { link.Nav_SafeMeasures.ForEach(t => { T_FO_JOB_EVENT_FLOW detail = new T_FO_JOB_EVENT_FLOW(); detail.JOB_EVENT_RECORD_ID = record.ID; detail.SafeMeasuresStr = t.NAME; detail.IS_CONFIRM = false; detail.ORG_ID = t.ORG_ID; detail.NUM = t.NUM; flows.Add(detail); }); } //作业后处理措施 if (link != null && link.Nav_DealMeasures != null && link.Nav_DealMeasures.Any()) { link.Nav_DealMeasures.ForEach(t => { T_FO_JOB_EVENT_MEASURE detail = new T_FO_JOB_EVENT_MEASURE(); detail.JOB_EVENT_RECORD_ID = record.ID; detail.DealMeasuresStr = t.NAME; detail.IS_CONFIRM = false; detail.ORG_ID = t.ORG_ID; detail.NUM = t.NUM; measures.Add(detail); }); } var noticeTemp = NotificationTaskService.InsertUserNoticeTaskModels("作业活动记录表(一般作业)-" + link?.Nav_OperationStep?.NAME + "(" + dt.Date.ToString("yyyyMMdd") + ")", record.ID, link.ORG_ID, userIds, userNames, DateTime.Now, DateTime.Now.AddHours(24), (int)FMNoticeTypeEnum.消息, "FO015"); notices.AddRange(noticeTemp); } } } } } } } UnifiedCommit(() => { if (preShiftMeetings != null && preShiftMeetings.Any()) BantchSaveEntityNoCommit(preShiftMeetings); if (records != null && records.Any()) BantchSaveEntityNoCommit(records); if (jobs != null && jobs.Any()) BantchSaveEntityNoCommit(jobs); if (notices != null && notices.Any()) this.BantchSaveEntityNoCommit(notices); if (persons != null && persons.Any()) this.BantchSaveEntityNoCommit(persons); if (details != null && details.Any()) this.BantchSaveEntityNoCommit(details); if (flows != null && flows.Any()) this.BantchSaveEntityNoCommit(flows); if (measures != null && measures.Any()) this.BantchSaveEntityNoCommit(measures); if (jobDetails != null && jobDetails.Any()) this.BantchSaveEntityNoCommit(jobDetails); if (jobFlows != null && jobFlows.Any()) this.BantchSaveEntityNoCommit(jobFlows); if (jobMeasures != null && jobMeasures.Any()) this.BantchSaveEntityNoCommit(jobMeasures); }); } catch (Exception ex) { if (!string.IsNullOrEmpty(ex.StackTrace)) throw new Exception("错误日志:[StackTrace]" + ex.StackTrace); else throw new Exception("【" + HttpContext.Request.Path + "】错误日志:[Message]" + ex.Message); } return true; }); } /// /// 关键许可工作票子表数据同步 /// /// /// [HttpPost, Route("ExecuteJob")] public JsonActionResult ExecuteJob([FromBody] KeywordFilter filter) { return SafeExecute(() => { try { var dt = DateTime.Now.Date.AddDays(3); //最近一天 DateTime week = dt.AddDays(-8).Date; if (!string.IsNullOrEmpty(filter.Parameter1)) { if (!filter.Parameter1.Contains("|")) throw new Exception("必须传入开始日期和结束日期,以|符号分隔"); var temp = filter.Parameter1.Split("|"); if (temp[1].Length == 0) throw new Exception("必须传入开始日期和结束日期,以|符号分隔"); week = DateTime.Parse(temp[0]); dt = DateTime.Parse(temp[1]); } List confirmList = new List(); List measureList = new List(); List dealList = new List(); List deleteId1s = new List(); List deleteId2s = new List(); List deleteId3s = new List(); var jobFilter = new BaseFilter(filter.GetOrgId()); jobFilter.IgnoreDataRule = true; jobFilter.SelectField = new List { "CODE", "OPERATION_STEP_ID" }; IEnumerable jobs = null; try { jobs = this.GetEntities(t => t.IS_PUBLISH != 0 && t.CREATE_TIME >= week.Date && t.CREATE_TIME <= dt.Date, jobFilter, new string[] { "Nav_SafeConfirms", "Nav_SafeMeasures", "Nav_DealMeasures" }); } catch (Exception ex) { throw new Exception(("MsgDIY Message: " + ex.Message) + (!string.IsNullOrEmpty(ex.StackTrace) ? (" StackTrace: " + ex.StackTrace) : "")); } if (jobs != null && jobs.Any()) { var stepIds = jobs.Select(t => t.OPERATION_STEP_ID).Distinct().ToList(); var stepInfos = this.GetEntities(t => stepIds.Contains(t.OPERATION_STEP_ID), new BaseFilter(filter.OrgId), new string[] { "Nav_SafeConfirms", "Nav_SafeMeasures", "Nav_DealMeasures" }); foreach (var item in jobs) { if (item.Nav_SafeConfirms == null || !item.Nav_SafeConfirms.Any() || string.IsNullOrEmpty(item.Nav_SafeConfirms.FirstOrDefault().NAME)) { if (item.Nav_SafeConfirms.Any()) deleteId1s.AddRange(item.Nav_SafeConfirms.Select(t => t.ID)); var stepInfo = stepInfos.FirstOrDefault(t => t.OPERATION_STEP_ID == item.OPERATION_STEP_ID); if (stepInfo != null && stepInfo.Nav_SafeConfirms != null && stepInfo.Nav_SafeConfirms.Any()) { foreach (var con in stepInfo.Nav_SafeConfirms) { T_FO_CRUCIAL_LICENSE_SAFE_CONFIRM confirm = new T_FO_CRUCIAL_LICENSE_SAFE_CONFIRM(); confirm.ORG_ID = con.ORG_ID; confirm.CODE = con.CODE; confirm.NUM = con.NUM; confirm.NAME = con.NAME; confirm.CRUCIAL_LICENSE_JOB_ID = item.ID; confirmList.Add(confirm); } } } if (item.Nav_SafeMeasures == null || !item.Nav_SafeMeasures.Any() || string.IsNullOrEmpty(item.Nav_SafeMeasures.FirstOrDefault().NAME)) { if (item.Nav_SafeConfirms.Any()) deleteId2s.AddRange(item.Nav_SafeMeasures.Select(t => t.ID)); var stepInfo = stepInfos.FirstOrDefault(t => t.OPERATION_STEP_ID == item.OPERATION_STEP_ID); if (stepInfo != null && stepInfo.Nav_SafeMeasures != null && stepInfo.Nav_SafeMeasures.Any()) { foreach (var con in stepInfo.Nav_SafeMeasures) { T_FO_CRUCIAL_LICENSE_SAFE_MEASURE confirm = new T_FO_CRUCIAL_LICENSE_SAFE_MEASURE(); confirm.ORG_ID = con.ORG_ID; confirm.CODE = con.CODE; confirm.NUM = con.NUM; confirm.NAME = con.NAME; confirm.CRUCIAL_LICENSE_JOB_ID = item.ID; measureList.Add(confirm); } } } if (item.Nav_DealMeasures == null || !item.Nav_DealMeasures.Any() || string.IsNullOrEmpty(item.Nav_DealMeasures.FirstOrDefault().NAME)) { if (item.Nav_SafeConfirms.Any()) deleteId3s.AddRange(item.Nav_DealMeasures.Select(t => t.ID)); var stepInfo = stepInfos.FirstOrDefault(t => t.OPERATION_STEP_ID == item.OPERATION_STEP_ID); if (stepInfo != null && stepInfo.Nav_DealMeasures != null && stepInfo.Nav_DealMeasures.Any()) { foreach (var con in stepInfo.Nav_DealMeasures) { T_FO_CRUCIAL_LICENSE_DEAL_MEASURE confirm = new T_FO_CRUCIAL_LICENSE_DEAL_MEASURE(); confirm.ORG_ID = con.ORG_ID; confirm.CODE = con.CODE; confirm.NUM = con.NUM; confirm.NAME = con.NAME; confirm.CRUCIAL_LICENSE_JOB_ID = item.ID; dealList.Add(confirm); } } } } } UnifiedCommit(() => { if (confirmList != null && confirmList.Any()) BantchSaveEntityNoCommit(confirmList); if (measureList != null && measureList.Any()) BantchSaveEntityNoCommit(measureList); if (dealList != null && dealList.Any()) BantchSaveEntityNoCommit(dealList); if (deleteId1s != null && deleteId1s.Any()) BantchDeleteEntityNoCommit(deleteId1s); if (deleteId2s != null && deleteId2s.Any()) BantchDeleteEntityNoCommit(deleteId2s); if (deleteId3s != null && deleteId3s.Any()) BantchDeleteEntityNoCommit(deleteId3s); }); } catch (Exception ex) { if (!string.IsNullOrEmpty(ex.StackTrace)) throw new Exception("错误日志:[StackTrace]" + ex.StackTrace); else throw new Exception("【" + HttpContext.Request.Path + "】错误日志:[Message]" + ex.Message); } return true; }); } /// /// 作业活动记录表数据同步 /// /// /// [HttpPost, Route("ExecuteJobActivity")] public JsonActionResult ExecuteJobActivity([FromBody] KeywordFilter filter) { return SafeExecute(() => { try { var dt = DateTime.Now.Date.AddDays(1); //最近一周 DateTime week = dt.AddDays(-2).Date; if (!string.IsNullOrEmpty(filter.Parameter1)) { if (!filter.Parameter1.Contains("|")) throw new Exception("必须传入开始日期和结束日期,以|符号分隔"); var temp = filter.Parameter1.Split("|"); if (temp[1].Length == 0) throw new Exception("必须传入开始日期和结束日期,以|符号分隔"); week = DateTime.Parse(temp[0]); dt = DateTime.Parse(temp[1]); } List confirmList = new List(); List measureList = new List(); List dealList = new List(); //List deleteId1s = new List(); //List deleteId2s = new List(); //List deleteId3s = new List(); var jobFilter = new BaseFilter(filter.GetOrgId()); jobFilter.IgnoreDataRule = true; jobFilter.SelectField = new List { "OPERATION_STEP_ID" }; var jobs = this.GetEntities(t => t.CREATE_TIME >= week.Date && t.CREATE_TIME <= dt.Date, jobFilter, new string[] { "Nav_Details", "Nav_Flow", "Nav_Measure" }); if (jobs != null && jobs.Any()) { var stepIds = jobs.Select(t => t.OPERATION_STEP_ID).Distinct().ToList(); var stepInfos = this.GetEntities(t => stepIds.Contains(t.OPERATION_STEP_ID), new BaseFilter(filter.OrgId), new string[] { "Nav_SafeConfirms", "Nav_SafeMeasures", "Nav_DealMeasures" }); foreach (var item in jobs) { if (item.Nav_Details == null || item.Nav_Details.Count == 0) { //if (item.Nav_Details.Any()) // deleteId1s.AddRange(item.Nav_Details.Select(t => t.ID)); var stepInfo = stepInfos.FirstOrDefault(t => t.OPERATION_STEP_ID == item.OPERATION_STEP_ID); if (stepInfo.Nav_SafeConfirms != null && stepInfo.Nav_SafeConfirms.Any()) { foreach (var con in stepInfo.Nav_SafeConfirms) { T_FO_JOB_ACTIVITY_DETAIL confirm = new T_FO_JOB_ACTIVITY_DETAIL(); confirm.ORG_ID = con.ORG_ID; confirm.NUM = con.NUM; confirm.SafeConfirmsStr = con.NAME; confirm.JOB_ACTIVITY_RECORD_ID = item.ID; confirmList.Add(confirm); } } } if (item.Nav_Flow == null || item.Nav_Flow.Count == 0) { //if (item.Nav_Flow.Any()) // deleteId2s.AddRange(item.Nav_Flow.Select(t => t.ID)); var stepInfo = stepInfos.FirstOrDefault(t => t.OPERATION_STEP_ID == item.OPERATION_STEP_ID); if (stepInfo.Nav_SafeMeasures != null && stepInfo.Nav_SafeMeasures.Any()) { foreach (var con in stepInfo.Nav_SafeMeasures) { T_FO_JOB_ACTIVITY_FLOW confirm = new T_FO_JOB_ACTIVITY_FLOW(); confirm.ORG_ID = con.ORG_ID; confirm.NUM = con.NUM; confirm.SafeMeasuresStr = con.NAME; confirm.JOB_ACTIVITY_RECORD_ID = item.ID; measureList.Add(confirm); } } } if (item.Nav_Measure == null || item.Nav_Measure.Count == 0) { //if (item.Nav_Measure.Any()) // deleteId3s.AddRange(item.Nav_Measure.Select(t => t.ID)); var stepInfo = stepInfos.FirstOrDefault(t => t.OPERATION_STEP_ID == item.OPERATION_STEP_ID); if (stepInfo.Nav_DealMeasures != null && stepInfo.Nav_DealMeasures.Any()) { foreach (var con in stepInfo.Nav_DealMeasures) { T_FO_JOB_ACTIVITY_MEASURE confirm = new T_FO_JOB_ACTIVITY_MEASURE(); confirm.ORG_ID = con.ORG_ID; confirm.NUM = con.NUM; confirm.DealMeasuresStr = con.NAME; confirm.JOB_ACTIVITY_RECORD_ID = item.ID; dealList.Add(confirm); } } } } } UnifiedCommit(() => { //if (deleteId1s != null && deleteId1s.Any()) // BantchDeleteEntityNoCommit(deleteId1s); //if (deleteId2s != null && deleteId2s.Any()) // BantchDeleteEntityNoCommit(deleteId2s); //if (deleteId3s != null && deleteId3s.Any()) // BantchDeleteEntityNoCommit(deleteId3s); if (confirmList != null && confirmList.Any()) BantchSaveEntityNoCommit(confirmList); if (measureList != null && measureList.Any()) BantchSaveEntityNoCommit(measureList); if (dealList != null && dealList.Any()) BantchSaveEntityNoCommit(dealList); }); } catch (Exception ex) { if (!string.IsNullOrEmpty(ex.StackTrace)) throw new Exception("错误日志:[StackTrace]" + ex.StackTrace); else throw new Exception("【" + HttpContext.Request.Path + "】错误日志:[Message]" + ex.Message); } return true; }); } /// /// 关键许可工作票(外包)子表数据同步 /// /// /// [HttpPost, Route("ExecuteJobOutsource")] public JsonActionResult ExecuteJobOutsource([FromBody] KeywordFilter filter) { return SafeExecute(() => { try { var dt = DateTime.Now.Date.AddDays(3); //最近一天 DateTime week = dt.AddDays(-8).Date; if (!string.IsNullOrEmpty(filter.Parameter1)) { if (!filter.Parameter1.Contains("|")) throw new Exception("必须传入开始日期和结束日期,以|符号分隔"); var temp = filter.Parameter1.Split("|"); if (temp[1].Length == 0) throw new Exception("必须传入开始日期和结束日期,以|符号分隔"); week = DateTime.Parse(temp[0]); dt = DateTime.Parse(temp[1]); } List confirmList = new List(); List measureList = new List(); List dealList = new List(); List deleteId1s = new List(); List deleteId2s = new List(); List deleteId3s = new List(); var jobFilter = new BaseFilter(filter.GetOrgId()); jobFilter.IgnoreDataRule = true; jobFilter.SelectField = new List { "CODE", "OPERATION_STEP_ID" }; var jobs = this.GetEntities(t => t.IS_PUBLISH != 0 && t.CREATE_TIME >= week.Date && t.CREATE_TIME <= dt.Date, jobFilter, new string[] { "Nav_SafeConfirms", "Nav_SafeMeasures", "Nav_DealMeasures" }); if (jobs != null && jobs.Any()) { var stepIds = jobs.Select(t => t.OPERATION_STEP_ID).Distinct().ToList(); var stepInfos = this.GetEntities(t => stepIds.Contains(t.OPERATION_STEP_ID), new BaseFilter(filter.OrgId), new string[] { "Nav_SafeConfirms", "Nav_SafeMeasures", "Nav_DealMeasures" }); foreach (var item in jobs) { if (item.Nav_SafeConfirms == null || !item.Nav_SafeConfirms.Any() || string.IsNullOrEmpty(item.Nav_SafeConfirms.FirstOrDefault().NAME)) { if (item.Nav_SafeConfirms.Any()) deleteId1s.AddRange(item.Nav_SafeConfirms.Select(t => t.ID)); var stepInfo = stepInfos.FirstOrDefault(t => t.OPERATION_STEP_ID == item.OPERATION_STEP_ID); if (stepInfo != null && stepInfo.Nav_SafeConfirms != null && stepInfo.Nav_SafeConfirms.Any()) { foreach (var con in stepInfo.Nav_SafeConfirms) { T_FO_CRUCIAL_LICENSE_OUTSOURCE_SAFE_CONFIRM confirm = new T_FO_CRUCIAL_LICENSE_OUTSOURCE_SAFE_CONFIRM(); confirm.ORG_ID = con.ORG_ID; confirm.CODE = con.CODE; confirm.NUM = con.NUM; confirm.NAME = con.NAME; confirm.CRUCIAL_LICENSE_JOB_ID = item.ID; confirmList.Add(confirm); } } } if (item.Nav_SafeMeasures == null || !item.Nav_SafeMeasures.Any() || string.IsNullOrEmpty(item.Nav_SafeMeasures.FirstOrDefault().NAME)) { if (item.Nav_SafeConfirms.Any()) deleteId2s.AddRange(item.Nav_SafeMeasures.Select(t => t.ID)); var stepInfo = stepInfos.FirstOrDefault(t => t.OPERATION_STEP_ID == item.OPERATION_STEP_ID); if (stepInfo != null && stepInfo.Nav_SafeMeasures != null && stepInfo.Nav_SafeMeasures.Any()) { foreach (var con in stepInfo.Nav_SafeMeasures) { T_FO_CRUCIAL_LICENSE_OUTSOURCE_SAFE_MEASURE confirm = new T_FO_CRUCIAL_LICENSE_OUTSOURCE_SAFE_MEASURE(); confirm.ORG_ID = con.ORG_ID; confirm.CODE = con.CODE; confirm.NUM = con.NUM; confirm.NAME = con.NAME; confirm.CRUCIAL_LICENSE_JOB_ID = item.ID; measureList.Add(confirm); } } } if (item.Nav_DealMeasures == null || !item.Nav_DealMeasures.Any() || string.IsNullOrEmpty(item.Nav_DealMeasures.FirstOrDefault().NAME)) { if (item.Nav_SafeConfirms.Any()) deleteId3s.AddRange(item.Nav_DealMeasures.Select(t => t.ID)); var stepInfo = stepInfos.FirstOrDefault(t => t.OPERATION_STEP_ID == item.OPERATION_STEP_ID); if (stepInfo != null && stepInfo.Nav_DealMeasures != null && stepInfo.Nav_DealMeasures.Any()) { foreach (var con in stepInfo.Nav_DealMeasures) { T_FO_CRUCIAL_LICENSE_OUTSOURCE_DEAL_MEASURE confirm = new T_FO_CRUCIAL_LICENSE_OUTSOURCE_DEAL_MEASURE(); confirm.ORG_ID = con.ORG_ID; confirm.CODE = con.CODE; confirm.NUM = con.NUM; confirm.NAME = con.NAME; confirm.CRUCIAL_LICENSE_JOB_ID = item.ID; dealList.Add(confirm); } } } } } UnifiedCommit(() => { if (confirmList != null && confirmList.Any()) BantchSaveEntityNoCommit(confirmList); if (measureList != null && measureList.Any()) BantchSaveEntityNoCommit(measureList); if (dealList != null && dealList.Any()) BantchSaveEntityNoCommit(dealList); if (deleteId1s != null && deleteId1s.Any()) BantchDeleteEntityNoCommit(deleteId1s); if (deleteId2s != null && deleteId2s.Any()) BantchDeleteEntityNoCommit(deleteId2s); if (deleteId3s != null && deleteId3s.Any()) BantchDeleteEntityNoCommit(deleteId3s); }); } catch (Exception ex) { if (!string.IsNullOrEmpty(ex.StackTrace)) throw new Exception("错误日志:[StackTrace]" + ex.StackTrace); else throw new Exception("【" + HttpContext.Request.Path + "】错误日志:[Message]" + ex.Message); } return true; }); } /// /// 触发配置项的一般作业,单个组织按排班触发 /// /// /// [HttpPost, Route("JobEventRecordAuto")] public JsonActionResult JobEventRecordAuto([FromBody] KeywordFilter filter) { return SafeExecute(() => { try { var jobFilter = new BaseFilter(filter.GetOrgId()); jobFilter.IgnoreDataRule = true; jobFilter.SelectField = new List { "NAME", "Nav_Departments" }; //查配置表,有配才执行 var paramSet = this.GetEntity(t => t.NAME == "一般作业", jobFilter); if (paramSet != null) { //取出配置表中的部门 var departIds = paramSet.Nav_Departments.Select(m => m.DEPARTMENT_ID).Distinct().ToList(); if (departIds != null && departIds.Any()) { var jobs = new List(); var records = new List(); var notices = new List(); var persons = new List(); var details = new List(); var flows = new List(); var measures = new List(); var jobDetails = new List(); var jobFlows = new List(); var jobMeasures = new List(); var dt = DateTime.Now; var dtDate = dt.Date; var minTime = dt.AddMinutes(0); var maxTime = dt.AddMinutes(60); //查配置细表中部门的排班 jobFilter.SelectField = new string[] { "ID", "DEPARTMENT_ID" }; var teams = this.GetEntities(t => departIds.Contains(t.DEPARTMENT_ID) && t.ENABLE_STATUS == 1, jobFilter).ToList(); var teamIds = teams.Select(t => t.ID).ToList(); //jobFilter.SelectField = new string[] { "ID", "Nav_DepartmentSchedulingDetail" }; var shiftClassList = this.GetEntities(s => s.DATE_TIME.Date == dtDate && s.START_TIME != s.END_TIME && s.TEAM_ID != null && teamIds.Contains((Guid)s.TEAM_ID) && s.RUN_EVENTRECORD == 0, new BaseFilter(filter.OrgId), "Nav_DepartmentSchedulingDetail").ToList(); shiftClassList = shiftClassList.Where(s => s.START_TIME > minTime && s.START_TIME <= maxTime).ToList(); jobFilter.SelectField = new string[] { "ID", "NAME" }; var users = this.GetEntities(t => t.ENABLE_STATUS == 0, jobFilter); var userVacations = this.GetEntities(t => t.START_DATE <= DateTime.Now && t.END_DATE >= DateTime.Now, new BaseFilter(filter.GetOrgId()), "Nav_Agent"); if (shiftClassList != null && shiftClassList.Any()) { //先查出班组内所有人 var personIds = new List(); foreach (var item in shiftClassList) { var personTempIds = item.Nav_DepartmentSchedulingDetail.Select(t => t.PERSON_ID).ToList(); personIds.AddRange(personTempIds); } //查岗位 jobFilter.SelectField = new string[] { "POST_ID" }; var personInfos = this.GetEntities(t => personIds.Contains(t.ID), jobFilter, new string[] { "Nav_User" }).ToList(); var postIds = personInfos.Select(t => t.POST_ID).Distinct().ToList(); //根据岗位查每日作业 jobFilter.SelectField = new List { "POST_ID", "OPERATION_LINK_ID" }; var operationLinks = this.GetEntities(t => postIds.Contains(t.POST_ID), jobFilter); var linkIds = operationLinks.Select(t => t.OPERATION_LINK_ID).Distinct().ToList(); //每日作业 //jobFilter.SelectField = new List { "ID", "OPERATION_STEP_ID", "IS_IMPORTANT" }; var links = this.GetEntities(t => linkIds.Contains(t.ID) && t.CYCLE_TYPE == HMCycleTypeEnum.Day, new BaseFilter(filter.OrgId), "Nav_OperationStep", "Nav_WorkPermitType", "Nav_SafeConfirms", "Nav_SafeMeasures", "Nav_DealMeasures"); jobFilter.SelectField = new List { "ID", "NAME" }; var operationSteps = this.GetEntities(t => true, jobFilter); foreach (var itemTemp in shiftClassList) { itemTemp.RUN_EVENTRECORD = FMTureOrFalse.是; //当前班前会的人员 var userTempIds = itemTemp.Nav_DepartmentSchedulingDetail.Select(t => t.PERSON_ID).Distinct().ToList(); //人员岗位 var postTempIds = personInfos.Where(t => userTempIds.Contains(t.ID)).Select(m => m.POST_ID).Distinct().ToList(); //遍历所有岗位,将岗位对应的作业发给对应的人员上 if (postTempIds != null && postTempIds.Any()) { foreach (var item in postTempIds) { //岗位下的所有作业 var opLinkIds = operationLinks.Where(t => t.POST_ID == item).Select(m => m.OPERATION_LINK_ID).Distinct().ToList(); var stepIds = links.Where(t => opLinkIds.Contains(t.ID)).Select(m => m.OPERATION_STEP_ID).Distinct().ToList(); //岗位下的所有人 var postuserIds = personInfos.Where(t => userTempIds.Contains(t.ID) && t.POST_ID == item).Select(m => m.Nav_User.ID).Distinct().ToList(); //var userNames = users.Where(t => postuserIds.Contains(t.ID)).Select(m => m.NAME).Distinct().ToList(); List userIds = new List(); List userNames = new List(); foreach (var user in postuserIds) { var first = users.FirstOrDefault(t => t.ID == user); var userAgent = userVacations.FirstOrDefault(t => t.USER_ID == user); var userId = userAgent != null && userAgent.AGENT_ID != null ? userAgent.AGENT_ID : user; var userName = userAgent != null && userAgent.AGENT_ID != null ? userAgent.Nav_Agent?.NAME : first.NAME; userIds.Add((Guid)userId); userNames.Add(userName); } //循环每个作业发给所有人 if (stepIds != null && stepIds.Any()) { foreach (var step in stepIds) { //判断是关键作业还是一般作业 var link = links.FirstOrDefault(t => opLinkIds.Contains(t.ID) && t.OPERATION_STEP_ID == step); var stepName = operationSteps.FirstOrDefault(t => t.ID == step)?.NAME; //许可作业、非许可的关键任务 if (link != null && (link.Nav_WorkPermitType != null && link.Nav_WorkPermitType.NAME != "无") || (link.Nav_WorkPermitType != null && link.Nav_WorkPermitType.NAME == "无" && link.IS_IMPORTANT == (int)ISImportantEnum.是)) { //取审批流水码 var sysFilter = new SystemCodeFilter(); sysFilter.CodeType = (int)PFCodeRuleType.关键许可作业票编号; sysFilter.Count = 1; sysFilter.OrgId = link.ORG_ID; var codes = CodeRuleService.NewGenSerial(sysFilter); var codeList = codes.Split(new char[] { ',' }); T_FO_CRUCIAL_LICENSE_JOB job = new T_FO_CRUCIAL_LICENSE_JOB(); //主表 job.CODE = codeList[0]; job.ORG_ID = link.ORG_ID; job.APPLY_USER_ID = userIds.FirstOrDefault(); job.IS_AUTO = (int)ISImportantEnum.是; job.OPERATION_STEP_ID = link.OPERATION_STEP_ID; job.AUDIT_LEVEL = link.AUDIT_LEVEL; jobs.Add(job); //作业前安全确认 if (link != null && link.Nav_SafeConfirms != null && link.Nav_SafeConfirms.Any()) { link.Nav_SafeConfirms.ForEach(t => { T_FO_CRUCIAL_LICENSE_SAFE_CONFIRM detail = new T_FO_CRUCIAL_LICENSE_SAFE_CONFIRM(); detail.CRUCIAL_LICENSE_JOB_ID = job.ID; detail.NAME = t.NAME; detail.ORG_ID = t.ORG_ID; detail.NUM = t.NUM; jobDetails.Add(detail); }); } //作业流程及安全措施 if (link != null && link.Nav_SafeMeasures != null && link.Nav_SafeMeasures.Any()) { link.Nav_SafeMeasures.ForEach(t => { T_FO_CRUCIAL_LICENSE_SAFE_MEASURE detail = new T_FO_CRUCIAL_LICENSE_SAFE_MEASURE(); detail.CRUCIAL_LICENSE_JOB_ID = job.ID; detail.NAME = t.NAME; detail.ORG_ID = t.ORG_ID; detail.NUM = t.NUM; jobFlows.Add(detail); }); } //作业后处理措施 if (link != null && link.Nav_DealMeasures != null && link.Nav_DealMeasures.Any()) { link.Nav_DealMeasures.ForEach(t => { T_FO_CRUCIAL_LICENSE_DEAL_MEASURE detail = new T_FO_CRUCIAL_LICENSE_DEAL_MEASURE(); detail.CRUCIAL_LICENSE_JOB_ID = job.ID; detail.NAME = t.NAME; detail.ORG_ID = t.ORG_ID; detail.NUM = t.NUM; jobMeasures.Add(detail); }); } var noticeTemp = NotificationTaskService.InsertUserNoticeTaskModels("关键许可作业票 - " + link?.Nav_OperationStep?.NAME + "(" + dt.Date.ToString("yyyyMMdd") + ")", job.ID, link.ORG_ID, userIds, userNames, DateTime.Now, DateTime.Now.AddHours(24), (int)FMNoticeTypeEnum.消息, "FO017"); notices.AddRange(noticeTemp); } //非许可非关键的一般任务 if (link != null && (link.Nav_WorkPermitType == null || (link.Nav_WorkPermitType != null && link.Nav_WorkPermitType.NAME == "无")) && link.IS_IMPORTANT == (int)ISImportantEnum.否) { //取审批流水码 var sysFilter = new SystemCodeFilter(); sysFilter.CodeType = (int)PFCodeRuleType.一般作业活动记录表编号; sysFilter.Count = 1; sysFilter.OrgId = link.ORG_ID; var codes = CodeRuleService.NewGenSerial(sysFilter); var codeList = codes.Split(new char[] { ',' }); T_FO_JOB_EVENT_RECORD record = new T_FO_JOB_EVENT_RECORD(); //主表 record.CODE = codeList[0]; record.ORG_ID = link.ORG_ID; record.OPERATION_STEP_ID = link.OPERATION_STEP_ID; record.JOB_DATE = itemTemp.START_TIME +"-"+ itemTemp.END_TIME; records.Add(record); //作业人员表 if (userIds != null && userIds.Any()) { userIds.ForEach(t => { if (t != null) { T_FO_JOB_EVENT_PERSON person = new T_FO_JOB_EVENT_PERSON(); person.USER_ID = t; person.JOB_EVENT_RECORD_ID = record.ID; person.ORG_ID = link.ORG_ID; persons.Add(person); } }); } //作业前安全确认 if (link != null && link.Nav_SafeConfirms != null && link.Nav_SafeConfirms.Any()) { link.Nav_SafeConfirms.ForEach(t => { T_FO_JOB_EVENT_DETAIL detail = new T_FO_JOB_EVENT_DETAIL(); detail.JOB_EVENT_RECORD_ID = record.ID; detail.SafeConfirmsStr = t.NAME; detail.IS_CONFIRM = false; detail.ORG_ID = t.ORG_ID; detail.NUM = t.NUM; details.Add(detail); }); } //作业流程及安全措施 if (link != null && link.Nav_SafeMeasures != null && link.Nav_SafeMeasures.Any()) { link.Nav_SafeMeasures.ForEach(t => { T_FO_JOB_EVENT_FLOW detail = new T_FO_JOB_EVENT_FLOW(); detail.JOB_EVENT_RECORD_ID = record.ID; detail.SafeMeasuresStr = t.NAME; detail.IS_CONFIRM = false; detail.ORG_ID = t.ORG_ID; detail.NUM = t.NUM; flows.Add(detail); }); } //作业后处理措施 if (link != null && link.Nav_DealMeasures != null && link.Nav_DealMeasures.Any()) { link.Nav_DealMeasures.ForEach(t => { T_FO_JOB_EVENT_MEASURE detail = new T_FO_JOB_EVENT_MEASURE(); detail.JOB_EVENT_RECORD_ID = record.ID; detail.DealMeasuresStr = t.NAME; detail.IS_CONFIRM = false; detail.ORG_ID = t.ORG_ID; detail.NUM = t.NUM; measures.Add(detail); }); } var noticeTemp = NotificationTaskService.InsertUserNoticeTaskModels("作业活动记录表(一般作业)-" + stepName + "(" + dt.Date.ToString("yyyyMMdd") + ")", record.ID, link.ORG_ID, userIds, userNames, DateTime.Now, DateTime.Now.AddHours(24), (int)FMNoticeTypeEnum.消息, "FO015"); notices.AddRange(noticeTemp); } } } } } } } UnifiedCommit(() => { if (shiftClassList != null && shiftClassList.Any()) BantchSaveEntityNoCommit(shiftClassList); if (records != null && records.Any()) BantchSaveEntityNoCommit(records); if (jobs != null && jobs.Any()) BantchSaveEntityNoCommit(jobs); if (notices != null && notices.Any()) this.BantchSaveEntityNoCommit(notices); if (persons != null && persons.Any()) this.BantchSaveEntityNoCommit(persons); if (details != null && details.Any()) this.BantchSaveEntityNoCommit(details); if (flows != null && flows.Any()) this.BantchSaveEntityNoCommit(flows); if (measures != null && measures.Any()) this.BantchSaveEntityNoCommit(measures); if (jobDetails != null && jobDetails.Any()) this.BantchSaveEntityNoCommit(jobDetails); if (jobFlows != null && jobFlows.Any()) this.BantchSaveEntityNoCommit(jobFlows); if (jobMeasures != null && jobMeasures.Any()) this.BantchSaveEntityNoCommit(jobMeasures); }); } } } catch (Exception ex) { if (!string.IsNullOrEmpty(ex.StackTrace)) throw new Exception("错误日志:[StackTrace]" + ex.StackTrace); else throw new Exception("【" + HttpContext.Request.Path + "】错误日志:[Message]" + ex.Message); } return true; }); } /// /// 按照模板规则生成排班表 /// /// /// [HttpPost, Route("JobScheduling")] public JsonActionResult JobScheduling([FromBody] KeywordFilter filter) { return SafeExecute(() => { try { List sches = new List(); string[] Day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; var newFilter = new BaseFilter(filter.GetOrgId()); newFilter.IgnoreDataRule = true; newFilter.SelectField = new List { "NAME", "CYCLE", "START_TIME", "END_TIME", "Nav_Details.Nav_User", "Nav_Details.NUM","Nav_Details.PHONE" }; //查配置表,有配才执行 var template = this.GetEntity(t => t.NAME == "工作票审批值班领导" && t.ENABLE_STATUS == 0, newFilter); if (template != null && template.Nav_Details!=null && template.Nav_Details.Any()) { var userIds = template.Nav_Details.OrderBy(t => t.NUM).ToList(); int i = 0; for (var starTime = template.START_TIME; starTime <= template.END_TIME; starTime = starTime.AddDays(1)) { string week = Day[Convert.ToInt32(starTime.DayOfWeek.ToString("d"))].ToString(); T_FO_SCHEDULING sche = new T_FO_SCHEDULING(); sche.ORG_ID = template.ORG_ID; sche.DATE = starTime; sche.USER_ID = userIds[i].USER_ID; sche.WEEK = week; sche.PHONE = userIds[i].PHONE; sches.Add(sche); if (i >= userIds.Count-1) { i = 0; } else { i++; } } } UnifiedCommit(() => { if (sches != null && sches.Any()) BantchSaveEntityNoCommit(sches); }); } catch (Exception ex) { if (!string.IsNullOrEmpty(ex.StackTrace)) throw new Exception("错误日志:[StackTrace]" + ex.StackTrace); else throw new Exception("【" + HttpContext.Request.Path + "】错误日志:[Message]" + ex.Message); } return true; }); } } }