using APT.BaseData.Domain.Entities; using APT.BaseData.Domain.Entities.FM; using APT.BaseData.Domain.Enums; using APT.BaseData.Domain.Enums.PF; using APT.BaseData.Domain.IServices.FM; using APT.Infrastructure.Core; using APT.MS.Domain.Entities.TL; using APT.MS.Domain.Enums; using APT.Utility; using APT.WebApi.Models; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; namespace APT.PP.WebApi.Controllers.Api.PP { [Route("api/PP/TL")] [TypeFilter(typeof(CustomActionFilterAttribute))] public partial class TLController : AuthorizeApiController { IFMNotificationTaskService NotificationTaskService { get; set; } IFMUserService UserService { get; set; } IPFSysLogService SysLogService { get; set; } IFMSyncLogDetailService SyncLogDetailService { get; set; } public TLController(IFMNotificationTaskService notificationTaskService, IPFSysLogService sysLogService, IFMUserService userService, IFMSyncLogDetailService syncLogDetailService) { NotificationTaskService = notificationTaskService; SysLogService = sysLogService; UserService = userService; SyncLogDetailService = syncLogDetailService; } /// /// 判断跑批时间是否符合 /// /// /// /// /// /// private bool ISTimeOK(DateTime? RUNSETTIME, DateTime dtNow, int minAdvance, int minLaster) { if (RUNSETTIME == null) { return false; } if (RUNSETTIME != null) { if (minAdvance != 0 || minLaster != 0) { //DateTime dtSetTime = Convert.ToDateTime(dtNow.ToString("yyyy") + RUNSETTIME.Value.ToString("-MM-dd HH:mm:ss")); DateTime dtSetTime = Convert.ToDateTime(dtNow.ToString("yyyy-MM-dd") + RUNSETTIME.Value.ToString(" HH:mm:ss")); if (minAdvance > 0 && minLaster > 0) { if (dtNow.AddMinutes(-1 * minAdvance) <= dtSetTime && dtSetTime <= dtNow.AddMinutes(minLaster)) { return true; } } else if (minAdvance > 0) { if (dtNow.AddMinutes(-1 * minAdvance) <= dtSetTime && dtSetTime <= dtNow) { //如果设置时间小于当前时间 并且 设置使劲按大于 当前时间大于当前时间往前偏移分钟数 return true; } } else { if (dtNow <= dtSetTime && dtSetTime <= dtNow.AddMinutes(minLaster)) { //如果 设置时间大于当前时间 并且设置时间小于当前时间往后偏移分钟数 return true; } } } else { if (RUNSETTIME.Value.ToString("HH:mm") == dtNow.ToString("HH:mm")) { return true; } } } return false; } /// /// 给 某个 部门的 某个岗位 人员 按配置发布 生产作业计划(title + 附件) /// /// /// /// [HttpPost, Route("PlanBegin")] public JsonActionResult PlanBegin([FromBody] KeywordFilter filter) { return SafeExecute(() => { DateTime dtNow = DateTime.Now; if (!string.IsNullOrEmpty(filter.Parameter1)) { try { DateTime deParm = Convert.ToDateTime(filter.Parameter1); dtNow = deParm; } catch { dtNow = DateTime.Now; } } T_FM_SYNC_TASK task = GetEntity(filter.Keyword);//跑批待办 int min = 10;//10分钟以内 DateTime dtMax = dtNow; if (task.SYNC_UNIT.HasValue) { switch (task.SYNC_UNIT.Value)//秒 = 0, 分 = 1, 时 = 2, 天 = 3, { case 1: min = task.PERIODIC_TIME; break; case 2: min = task.PERIODIC_TIME * 60; break; case 3: min = task.PERIODIC_TIME * 60 * 24; break; case 0: default: break; } } dtMax = dtMax.AddMinutes(min); #region 过滤今天已经触发的 var fileSumCheck = GetEntities(e => !e.IS_DELETED && e.CREATE_TIME.HasValue && e.TASK_PLAN_ID.HasValue && e.CREATE_TIME.Value.Date == dtNow.Date, null, null); List listPlanSetID = null; if (fileSumCheck != null && fileSumCheck.Any()) { listPlanSetID = fileSumCheck.Select(e => e.TASK_PLAN_ID.Value).ToList(); } Expression> expressionPlan = e => !e.IS_DELETED && e.ENABLE_STATUS == FMEnableStatusEnum.启用; if (listPlanSetID != null) { expressionPlan = expressionPlan.And(e => !listPlanSetID.Contains(e.ID)); } #endregion var listPlanSet = GetEntities(expressionPlan, null, null); List listRun = new List(); List listRunWatch = new List(); DateTime dtSetTime = DateTime.Now; //判断跑批时间是否符合 foreach (var item in listPlanSet) { dtSetTime = Convert.ToDateTime(dtNow.ToString("yyyy-MM-dd") + item.RUNSETTIME.ToString(" HH:mm:ss")); if (dtNow <= dtSetTime && dtSetTime <= dtMax) { switch (item.PLANCHECKFREQUENCY) { case BSPLANCHECKFREQUENCYEnum.None: #region 单次检查 时间对 月 日对才加入 if (!string.IsNullOrEmpty(item.RUNDATA))//05-01,10-01 { List listMMdd = item.RUNDATA.Split(",").ToList(); if (item.RUNDATA.Contains("-")) { for (int j = 0; j < listMMdd.Count; j++) { try { if (!string.IsNullOrEmpty(listMMdd[j]) && (Convert.ToDateTime(dtNow.Year.ToString() + ("-") + listMMdd[j]) == Convert.ToDateTime(dtNow.ToString("yyyy-MM-dd")) || Convert.ToDateTime(dtNow.Year.ToString() + "-" + listMMdd[j]) == Convert.ToDateTime(dtNow.ToString("yyyy-M-d")))) { listRun.Add(item); break; } } catch { } } } else if (item.RUNDATA.Contains("/")) { for (int j = 0; j < listMMdd.Count; j++) { try { if (!string.IsNullOrEmpty(listMMdd[j]) && (Convert.ToDateTime(dtNow.Year.ToString("yyyy/") + listMMdd[j]) == Convert.ToDateTime(dtNow.ToString("yyyy/MM/dd")) || Convert.ToDateTime(dtNow.Year.ToString("yyyy/") + listMMdd[j]) == Convert.ToDateTime(dtNow.ToString("yyyy/M/d")))) { listRun.Add(item); break; } } catch { } } } } #endregion break; case BSPLANCHECKFREQUENCYEnum.Date: //每日天执行 时间匹配就添加 listRun.Add(item); break; case BSPLANCHECKFREQUENCYEnum.Week: if (item.WEEKDATA != null && (int)dtNow.DayOfWeek == (int)item.WEEKDATA.Value) { //星期匹配 DateTime.Now.DayOfWeek Thursday (int)DateTime.Now.DayOfWeek 4 listRun.Add(item); } break; case BSPLANCHECKFREQUENCYEnum.Month: if (item.DATA != null && item.DATA.Value == dtNow.Day) { //日匹配 (季度是季度第一月的某日 刚好也符合) listRun.Add(item); } break; case BSPLANCHECKFREQUENCYEnum.Quarter: if (item.DATA != null && item.DATA.Value == dtNow.Day && (dtNow.Month == 1 || dtNow.Month == 4 || dtNow.Month == 7 || dtNow.Month == 10)) { //日匹配 (季度是季度第一月的某日 刚好也符合) listRun.Add(item); } break; case BSPLANCHECKFREQUENCYEnum.HalfYear: if (item.DATA != null && item.DATA.Value == dtNow.Day && (dtNow.Month == 1 || dtNow.Month == 7)) { //日匹配 (季度是季度第一月的某日 刚好也符合) listRun.Add(item); } break; case BSPLANCHECKFREQUENCYEnum.Year: if (item.DATA != null && item.DATA.Value == dtNow.Day && dtNow.Month == 1) { //日匹配 (季度是季度第一月的某日 刚好也符合) listRun.Add(item); } break; default: break; } } } #region 观测规则 var listDayDayly = GetEntities(e => !e.IS_DELETED && e.DATE == dtNow.Date && e.PLAN_ID.HasValue, null, null); var listDayLine = GetEntities(e => !e.IS_DELETED && e.DATE == dtNow.Date && e.PLAN_ID.HasValue, null, null); var listDayMove = GetEntities(e => !e.IS_DELETED && e.DATE == dtNow.Date && e.PLAN_ID.HasValue, null, null); var listDayPercent = GetEntities(e => !e.IS_DELETED && e.DATE == dtNow.Date && e.PLAN_ID.HasValue, null, null); List listPlanID = new List(); if (listDayDayly != null && listDayDayly.Any()) { listPlanID.AddRange(listDayDayly.Select(e => e.PLAN_ID.Value)); } if (listDayLine != null && listDayLine.Any()) { listPlanID.AddRange(listDayLine.Select(e => e.PLAN_ID.Value)); } if (listDayMove != null && listDayMove.Any()) { listPlanID.AddRange(listDayMove.Select(e => e.PLAN_ID.Value)); } if (listDayPercent != null && listDayPercent.Any()) { listPlanID.AddRange(listDayPercent.Select(e => e.PLAN_ID.Value)); } Expression> expressionWatchPlan = e => e.ENABLE_STATUS == FMEnableStatusEnum.启用; if (listPlanID != null && listPlanID.Any()) { listPlanID = listPlanID.Distinct().ToList(); expressionWatchPlan = expressionWatchPlan.And(e => !listPlanID.Contains(e.ID)); } var watchPlanSet = GetEntities(expressionWatchPlan, null, null); if (watchPlanSet != null && watchPlanSet.Any()) { foreach (var item in watchPlanSet) { dtSetTime = Convert.ToDateTime(dtNow.ToString("yyyy-MM-dd") + item.RUNSETTIME.ToString(" HH:mm:ss")); if (dtNow <= dtSetTime && dtSetTime <= dtMax) { switch (item.PLANCHECKFREQUENCY) { case BSPLANCHECKFREQUENCYEnum.None: #region 单次检查 时间对 月 日对才加入 if (!string.IsNullOrEmpty(item.RUNDATA))//05-01,10-01 { List listMMdd = item.RUNDATA.Split(",").ToList(); if (item.RUNDATA.Contains("-")) { for (int j = 0; j < listMMdd.Count; j++) { try { if (!string.IsNullOrEmpty(listMMdd[j]) && (Convert.ToDateTime(dtNow.Year.ToString() + ("-") + listMMdd[j]) == Convert.ToDateTime(dtNow.ToString("yyyy-MM-dd")) || Convert.ToDateTime(dtNow.Year.ToString() + "-" + listMMdd[j]) == Convert.ToDateTime(dtNow.ToString("yyyy-M-d")))) { listRunWatch.Add(item); break; } } catch { } } } else if (item.RUNDATA.Contains("/")) { for (int j = 0; j < listMMdd.Count; j++) { try { if (!string.IsNullOrEmpty(listMMdd[j]) && (Convert.ToDateTime(dtNow.Year.ToString("yyyy/") + listMMdd[j]) == Convert.ToDateTime(dtNow.ToString("yyyy/MM/dd")) || Convert.ToDateTime(dtNow.Year.ToString("yyyy/") + listMMdd[j]) == Convert.ToDateTime(dtNow.ToString("yyyy/M/d")))) { listRunWatch.Add(item); break; } } catch { } } } } #endregion break; case BSPLANCHECKFREQUENCYEnum.Date: //每日天执行 时间匹配就添加 listRunWatch.Add(item); break; case BSPLANCHECKFREQUENCYEnum.Week: if (item.WEEKDATA != null && (int)dtNow.DayOfWeek == (int)item.WEEKDATA.Value) { //星期匹配 DateTime.Now.DayOfWeek Thursday (int)DateTime.Now.DayOfWeek 4 listRunWatch.Add(item); } break; case BSPLANCHECKFREQUENCYEnum.Month: if (item.DATA != null && item.DATA.Value == dtNow.Day) { //日匹配 (季度是季度第一月的某日 刚好也符合) listRunWatch.Add(item); } break; case BSPLANCHECKFREQUENCYEnum.Quarter: if (item.DATA != null && item.DATA.Value == dtNow.Day && (dtNow.Month == 1 || dtNow.Month == 4 || dtNow.Month == 7 || dtNow.Month == 10)) { //日匹配 (季度是季度第一月的某日 刚好也符合) listRunWatch.Add(item); } break; case BSPLANCHECKFREQUENCYEnum.HalfYear: if (item.DATA != null && item.DATA.Value == dtNow.Day && (dtNow.Month == 1 || dtNow.Month == 7)) { //日匹配 (季度是季度第一月的某日 刚好也符合) listRunWatch.Add(item); } break; case BSPLANCHECKFREQUENCYEnum.Year: if (item.DATA != null && item.DATA.Value == dtNow.Day && dtNow.Month == 1) { //日匹配 (季度是季度第一月的某日 刚好也符合) listRunWatch.Add(item); } break; default: break; } } } } #endregion if (listRun.Count < 1 && listRunWatch.Count < 1) { return true; } #region 人员信息获取 List listDepID = new List(); List listPostID = new List(); if (listRun != null && listRun.Any()) { listDepID = listRun.Select(e => e.DEPARTMENT_ID).ToList(); listPostID = listRun.Select(e => e.POST_ID).ToList(); } if (listRunWatch != null && listRunWatch.Any()) { listDepID.AddRange(listRunWatch.Select(e => e.DEPARTMENT_ID).ToList()); listPostID.AddRange(listRunWatch.Select(e => e.POST_ID).ToList()); } var listPerson = GetEntities(e => e.POST_ID.HasValue && listPostID.Contains(e.POST_ID.Value), null, null); var listPersonID = listPerson.Select(e => e.ID); Expression> expression = e => !e.IS_DELETED && e.ENABLE_STATUS == 0 && e.DEPARTMENT_ID.HasValue && e.PERSON_ID.HasValue; if (listDepID.Count() == 1) { var depID = listDepID.ToList()[0]; expression = expression.And(e => e.DEPARTMENT_ID.Value == depID); } else { expression = expression.And(e => listDepID.Contains(e.DEPARTMENT_ID.Value)); } if (listPersonID.Count() == 1) { var PersonID = listPersonID.ToList()[0]; expression = expression.And(e => e.PERSON_ID.Value == PersonID); } else { expression = expression.And(e => listPersonID.Contains(e.PERSON_ID.Value)); } var listUser = GetEntities(expression, null, null); #endregion List listTaskSend = null; List listFileSum = null; if (listRun.Count > 0) { #region 制定计划 匹配 人员 Nav_User foreach (var item in listRun) { var usersTemp = listUser.Where(e => e.DEPARTMENT_ID.Value == item.DEPARTMENT_ID); if (usersTemp != null && usersTemp.Any()) { var depPersonID = usersTemp.Select(e => e.PERSON_ID.Value); if (depPersonID != null && depPersonID.Any()) { var person = listPerson.Where(e => depPersonID.Contains(e.ID) && e.POST_ID.HasValue && e.POST_ID.Value == item.POST_ID); //var person = usersTemp.Where(e => depPersonID.Contains(e.ID)); if (person != null) { var perPersonID = person.Select(e => e.ID); var userResult = listUser.FirstOrDefault(e => perPersonID.Contains(e.PERSON_ID.Value)); if (userResult != null) { item.Nav_User = userResult; } } } } } #endregion string FormCode = "TL004"; T_TL_FILE_SUM modelFileSum = null; List listSum = new List(); string Quency = string.Empty; string Title = string.Empty; listRun.ForEach(e => { if (e.Nav_User != null) { if (e.PLANCHECKFREQUENCY == BSPLANCHECKFREQUENCYEnum.None) { Quency = ""; } else { //请上传下月/季度/年度 生产作业计划及运行图表至文件库。 Quency = e.PLANCHECKFREQUENCY.GetDescription().Substring(1); //每月 => 月 ======> 下月、下季 } Title = "请上传下" + Quency + "生产作业计划及运行图表至文件库"; modelFileSum = new T_TL_FILE_SUM(); modelFileSum.ID = Guid.NewGuid(); modelFileSum.ORG_ID = filter.OrgId; modelFileSum.CONTENT = Title; modelFileSum.DEPARTMENT_ID = e.DEPARTMENT_ID; modelFileSum.USER_ID = e.Nav_User.ID; modelFileSum.FILETYPE = FILETYPE.ZYJHJL; modelFileSum.STATUS = PFStandardStatus.Draft; modelFileSum.TASK_PLAN_ID = e.ID; if (listFileSum == null) { listFileSum = new List(); } listFileSum.Add(modelFileSum); if (listTaskSend == null) { listTaskSend = new List(); } var taskSend = NotificationTaskService.InsertUserNoticeTaskModel(Title, modelFileSum.ID, modelFileSum.ORG_ID, modelFileSum.USER_ID, e.Nav_User.NAME, System.DateTime.Now, 0, FormCode, FMTASKTYPE.Default); listTaskSend.Add(taskSend); } }); } List listDayly = null; List listPercent = null; List listLine = null; List listLineDetail = null; List listMove = null; List listMoveDetail = null; List listWatchSum = null;//总的 (新增也会进去) List listWatchSumAdd = null;//需要添加的Model if (listRunWatch.Count > 0) { listWatchSum = GetEntities(e => e.DATE == dtNow.Date, null, null).ToList(); var listTalingID = listRunWatch.Select(e => e.TAILING_ID); T_TL_WATCH_SUM sumT = null; foreach (var item in listTalingID) { sumT = listWatchSum.FirstOrDefault(e => e.TAILING_ID == item); if (sumT == null) { sumT = new T_TL_WATCH_SUM(); sumT.ID = Guid.NewGuid(); sumT.ORG_ID = filter.OrgId; sumT.DATE = dtNow.Date; sumT.TAILING_ID = item; sumT.TAILING_NAME = listRunWatch.FirstOrDefault(e => e.TAILING_ID == item)?.TAILING_NAME; if (listWatchSumAdd == null) { listWatchSumAdd = new List(); } listWatchSumAdd.Add(sumT); listWatchSum.Add(sumT); } } #region 人员匹配 foreach (var item in listRunWatch) { var usersTemp = listUser.Where(e => e.DEPARTMENT_ID.Value == item.DEPARTMENT_ID); if (usersTemp != null && usersTemp.Any()) { var depPersonID = usersTemp.Select(e => e.PERSON_ID.Value); if (depPersonID != null && depPersonID.Any()) { var person = listPerson.Where(e => depPersonID.Contains(e.ID) && e.POST_ID.HasValue && e.POST_ID.Value == item.POST_ID); if (person != null) { var perPersonID = person.Select(e => e.ID); var userResult = listUser.Where(e => perPersonID.Contains(e.PERSON_ID.Value)); if (userResult != null && userResult.Any()) { item.Nav_ListUser = userResult.ToList(); } } } } } #endregion #region 数据生成 string FormCode = string.Empty; List listUserID = new List(); List listUserNAME = new List(); foreach (var item in listRunWatch) { if (item.Nav_ListUser == null || !item.Nav_ListUser.Any()) { continue; } switch (item.WATCHTYPE) { case WatchType.Dayly: listUserID.Clear(); listUserNAME.Clear(); T_TL_WATCH_DAYLY modelDay = new T_TL_WATCH_DAYLY(); modelDay.ID = Guid.NewGuid(); modelDay.ORG_ID = item.ORG_ID; modelDay.TAILING_NAME = item.TAILING_NAME; modelDay.TAILING_ID = item.TAILING_ID; sumT = listWatchSum.FirstOrDefault(e => e.TAILING_ID == item.TAILING_ID); modelDay.SUM_ID = sumT.ID; modelDay.DATE = dtNow.Date; modelDay.PLAN_ID = item.ID; modelDay.DEPARTMENT_ID = item.DEPARTMENT_ID; if (item.Nav_ListUser.Count == 1) { modelDay.USER_ID = item.Nav_ListUser.ToList()[0].ID; } //modelDay.USER_ID = itemU.ID; modelDay.STATUS = PFStandardStatus.Draft; if (listDayly == null) { listDayly = new List(); } listDayly.Add(modelDay); foreach (var itemU in item.Nav_ListUser) { listUserID.Add(itemU.ID); listUserNAME.Add(itemU.NAME); } if (listTaskSend == null) listTaskSend = new List(); listTaskSend.AddRange(NotificationTaskService.InsertUserNoticeTaskModels("日常观测", modelDay.ID, item.ORG_ID, listUserID, listUserNAME, dtNow, 0, "TL037", FMTASKTYPE.Default)); break; case WatchType.Pecent: listUserID.Clear(); listUserNAME.Clear(); T_TL_WATCH_PERCENT modelPercent = new T_TL_WATCH_PERCENT(); modelPercent.ID = Guid.NewGuid(); modelPercent.ORG_ID = item.ORG_ID; modelPercent.TAILING_NAME = item.TAILING_NAME; modelPercent.TAILING_ID = item.TAILING_ID; sumT = listWatchSum.FirstOrDefault(e => e.TAILING_ID == item.TAILING_ID); modelPercent.SUM_ID = sumT.ID; modelPercent.DATE = dtNow.Date; modelPercent.PLAN_ID = item.ID; modelPercent.DEPARTMENT_ID = item.DEPARTMENT_ID; if (item.Nav_ListUser.Count == 1) { modelPercent.USER_ID = item.Nav_ListUser.ToList()[0].ID; } modelPercent.STATUS = PFStandardStatus.Draft; if (listPercent == null) listPercent = new List(); listPercent.Add(modelPercent); foreach (var itemU in item.Nav_ListUser) { listUserID.Add(itemU.ID); listUserNAME.Add(itemU.NAME); } if (listTaskSend == null) listTaskSend = new List(); listTaskSend.AddRange(NotificationTaskService.InsertUserNoticeTaskModels("坡比观测", modelPercent.ID, item.ORG_ID, listUserID, listUserNAME, dtNow, 0, "TL039", FMTASKTYPE.Default)); break; case WatchType.Move: listUserID.Clear(); listUserNAME.Clear(); T_TL_WATCH_MOVE modelMove = new T_TL_WATCH_MOVE(); modelMove.ID = Guid.NewGuid(); modelMove.ORG_ID = item.ORG_ID; modelMove.TAILING_NAME = item.TAILING_NAME; modelMove.TAILING_ID = item.TAILING_ID; sumT = listWatchSum.FirstOrDefault(e => e.TAILING_ID == item.TAILING_ID); modelMove.SUM_ID = sumT.ID; modelMove.DATE = dtNow.Date; modelMove.PLAN_ID = item.ID; modelMove.DEPARTMENT_ID = item.DEPARTMENT_ID; if (item.Nav_ListUser.Count == 1) { modelMove.USER_ID = item.Nav_ListUser.ToList()[0].ID; } modelMove.STATUS = PFStandardStatus.Draft; if (listMove == null) listMove = new List(); listMove.Add(modelMove); var listMovePoints = GetEntities(e => !e.IS_DELETED && e.TAILING_ID == item.TAILING_ID, null, null); if (listMovePoints != null && listMovePoints.Any()) { foreach (var itemMP in listMovePoints) { T_TL_WATCH_MOVE_DETAIL modelMD = new T_TL_WATCH_MOVE_DETAIL(); modelMD.ID = Guid.NewGuid(); modelMD.ORG_ID = modelMove.ORG_ID; modelMD.TAILING_NAME = modelMove.TAILING_NAME; modelMD.TAILING_ID = modelMove.TAILING_ID; modelMD.MOVE_ID = modelMove.ID; modelMD.SUM_ID = modelMove.SUM_ID; modelMD.WATCH_MOVE_POINT_ID = itemMP.ID; if (listMoveDetail == null) listMoveDetail = new List(); listMoveDetail.Add(modelMD); } } foreach (var itemU in item.Nav_ListUser) { listUserID.Add(itemU.ID); listUserNAME.Add(itemU.NAME); } if (listTaskSend == null) listTaskSend = new List(); listTaskSend.AddRange(NotificationTaskService.InsertUserNoticeTaskModels("位移观测", modelMove.ID, item.ORG_ID, listUserID, listUserNAME, dtNow, 0, "TL041", FMTASKTYPE.Default)); break; case WatchType.Line: listUserID.Clear(); listUserNAME.Clear(); T_TL_WATCH_LINE modelLine = new T_TL_WATCH_LINE(); modelLine.ID = Guid.NewGuid(); modelLine.ORG_ID = item.ORG_ID; modelLine.TAILING_NAME = item.TAILING_NAME; modelLine.TAILING_ID = item.TAILING_ID; sumT = listWatchSum.FirstOrDefault(e => e.TAILING_ID == item.TAILING_ID); modelLine.SUM_ID = sumT.ID; modelLine.DATE = dtNow.Date; modelLine.PLAN_ID = item.ID; modelLine.DEPARTMENT_ID = item.DEPARTMENT_ID; if (item.Nav_ListUser.Count == 1) { modelLine.USER_ID = item.Nav_ListUser.ToList()[0].ID; } modelLine.STATUS = PFStandardStatus.Draft; if (listLine == null) { listLine = new List(); } listLine.Add(modelLine); var listLinePoints = GetEntities(e => !e.IS_DELETED && e.TAILING_ID == item.TAILING_ID, null, null); if (listLinePoints != null && listLinePoints.Any()) { foreach (var itemMP in listLinePoints) { T_TL_WATCH_LINE_DETAIL modelMD = new T_TL_WATCH_LINE_DETAIL(); modelMD.ID = Guid.NewGuid(); modelMD.ORG_ID = modelLine.ORG_ID; modelMD.TAILING_NAME = modelLine.TAILING_NAME; modelMD.TAILING_ID = modelLine.TAILING_ID; modelMD.LINE_ID = modelLine.ID; modelMD.SUM_ID = modelLine.SUM_ID; modelMD.WATCH_LINE_POINT_ID = itemMP.ID; if (listLineDetail == null) listLineDetail = new List(); listLineDetail.Add(modelMD); } } foreach (var itemU in item.Nav_ListUser) { listUserID.Add(itemU.ID); listUserNAME.Add(itemU.NAME); } if (listTaskSend == null) listTaskSend = new List(); listTaskSend.AddRange(NotificationTaskService.InsertUserNoticeTaskModels("浸润线观测", modelLine.ID, item.ORG_ID, listUserID, listUserNAME, dtNow, 0, "TL043", FMTASKTYPE.Default)); break; default: break; } } #endregion } if (task != null) { task.UPDATE_SUCCES_TIME = DateTime.Now;//上次同步结束时间 task.SYNC_PARAM = ""; } this.UnifiedCommit(() => { if (task != null) UpdateEntityNoCommit(task);//跑批信息 if (listTaskSend != null && listTaskSend.Any())//添加待办 BantchSaveEntityNoCommit(listTaskSend); if (listFileSum != null && listFileSum.Any())//添加待办表单 BantchSaveEntityNoCommit(listFileSum); if (listWatchSumAdd != null && listWatchSumAdd.Any())//观测汇总 BantchSaveEntityNoCommit(listWatchSumAdd); if (listDayly != null && listDayly.Any())//日常观测 BantchSaveEntityNoCommit(listDayly); if (listPercent != null && listPercent.Any())//观测汇总 BantchSaveEntityNoCommit(listPercent); if (listLine != null && listLine.Any())//浸润线汇总 BantchSaveEntityNoCommit(listLine); if (listLineDetail != null && listLineDetail.Any())//浸润线汇总 BantchSaveEntityNoCommit(listLineDetail); if (listMove != null && listMove.Any())//位移观测 BantchSaveEntityNoCommit(listMove); if (listMoveDetail != null && listMoveDetail.Any())//位移观测 BantchSaveEntityNoCommit(listMoveDetail); }); int Count = ((listTaskSend != null && listTaskSend.Any()) ? listTaskSend.Count() : 0) + ((listFileSum != null && listFileSum.Any()) ? listFileSum.Count() : 0) + ((listWatchSumAdd != null && listWatchSumAdd.Any()) ? listWatchSumAdd.Count() : 0) + ((listDayly != null && listDayly.Any()) ? listDayly.Count() : 0) + ((listPercent != null && listPercent.Any()) ? listPercent.Count() : 0) + ((listLine != null && listLine.Any()) ? listLine.Count() : 0) + ((listLineDetail != null && listLineDetail.Any()) ? listLineDetail.Count() : 0) + ((listMove != null && listMove.Any()) ? listMove.Count() : 0) + ((listMoveDetail != null && listMoveDetail.Any()) ? listMoveDetail.Count() : 0); SyncLogDetailService.InsertSyncLogDetail(HttpContext.Items, HttpContext.TraceIdentifier, filter.OrgId, Count, filter.Parameter1, SyncLogType.BSCreateCheckPlanSet); return true; }); } #region 按回采计划 给值班人员 发送回采记录单 /// /// 按回采计划 给值班人员 发送回采记录单(TL016) /// /// /// /// [HttpPost, Route("BackPlan")] public JsonActionResult BackPlan([FromBody] KeywordFilter filter) { return SafeExecute(() => { DateTime dtNow = DateTime.Now; if (!string.IsNullOrEmpty(filter.Parameter1)) { try { DateTime deParm = Convert.ToDateTime(filter.Parameter1); dtNow = deParm; } catch { dtNow = DateTime.Now; } } T_FM_SYNC_TASK task = GetEntity(filter.Keyword);//跑批待办 int min = 10;//10分钟以内 DateTime dtMin = dtNow; DateTime dtMax = dtNow; if (task.SYNC_UNIT.HasValue) { switch (task.SYNC_UNIT.Value)//秒 = 0, 分 = 1, 时 = 2, 天 = 3, { case 1: min = task.PERIODIC_TIME; break; case 2: min = task.PERIODIC_TIME * 60; break; case 3: min = task.PERIODIC_TIME * 60 * 24; break; case 0: default: break; } } dtMin = dtMin.AddMinutes(-1 * min); dtMax = dtMax.AddMinutes(min); //今天 因为回采计划生成的回采记录 var listRecordCheck = GetEntities(e => e.BACK_DETAIL_ID.HasValue && e.BACKTIME.HasValue && e.BACKTIME.Value.Date == dtNow.Date && e.CREATE_TIME.HasValue && e.CREATE_TIME.Value > dtMin, null, null); Expression> expression = e => e.Nav_Back.STATUS == PFStandardStatus.Archived && e.DATESTART.HasValue && e.DATESTART.Value > dtMin && e.DATESTART.Value < dtMax; if (listRecordCheck != null && listRecordCheck.Any()) { var listBackDetailID = listRecordCheck.Select(e => e.BACK_DETAIL_ID); expression = expression.And(e => !listBackDetailID.Contains(e.ID)); } var listDetail = GetEntities(expression, null, "Nav_Back"); if (listDetail == null || !listDetail.Any()) { //没有需要执行的信息 return true; } //发送回采记录 TL016 var listDetailID = listDetail.Select(e => e.ID); var listDetailUser = GetEntities(e => listDetailID.Contains(e.BACK_DETAIL_ID), null, null); List listRecord = new List(); List listTask = new List();//给回采计划值班人(第一个人)添加代办 List listRecordUser = new List(); T_TL_BACK_RECORD model = null; IEnumerable iListDetailUser = null; int IndexDetail = 0; T_TL_BACK modelBack = null; var listBackID = listDetail.Select(e => e.BACK_ID); var listBack = GetEntities(e => listBackID.Contains(e.ID), null, null); foreach (var item in listDetail) { iListDetailUser = listDetailUser.Where(e => e.BACK_DETAIL_ID == item.ID).OrderByDescending(e => e.ISMAINCHECK); if (iListDetailUser == null || !iListDetailUser.Any()) { continue; } modelBack = listBack.FirstOrDefault(e => e.ID == item.BACK_ID); if (modelBack == null) { continue; } model = new T_TL_BACK_RECORD(); model.ID = Guid.NewGuid(); model.ORG_ID = item.ORG_ID; model.TAILING_NAME = modelBack.TAILING_NAME; model.TAILING_ID = modelBack.TAILING_ID; model.BACKTIME = item.DATESTART; //model.DEPARTMENT_ID = Guid.Empty; model.BACK_DETAIL_ID = item.ID; model.BACKTIMEEND = item.DATEEND; model.NAME = modelBack.NAME; IndexDetail = 0; foreach (var itemU in iListDetailUser) { if (IndexDetail == 0) { model.USER_ID = itemU.USER_ID; } listRecordUser.Add(new T_TL_BACK_RECORD_USER() { ID = Guid.NewGuid(), ORG_ID = item.ORG_ID, BACK_RECORD_ID = model.ID, USER_ID = itemU.USER_ID, ISMAINCHECK = IndexDetail == 0 ? true : false, ISCHECK = false }); IndexDetail++; } listRecord.Add(model); } var listUserID = listRecord.Select(e => e.USER_ID); var listUser = GetEntities(e => listUserID.Contains(e.ID), null, null); T_FM_USER modelUser = null; foreach (var item in listRecord) { modelUser = listUser.First(e => e.ID == item.USER_ID); item.DEPARTMENT_ID = modelUser.DEPARTMENT_ID; listTask.Add(NotificationTaskService.InsertUserNoticeTaskModel("回采记录", item.ID, item.ORG_ID, item.USER_ID, modelUser.NAME, DateTime.Now, 0, "TL016", FMTASKTYPE.Default)); } if (task != null) { task.UPDATE_SUCCES_TIME = DateTime.Now;//上次同步结束时间 task.SYNC_PARAM = ""; } this.UnifiedCommit(() => { if (task != null) UpdateEntityNoCommit(task);//跑批信息 if (listTask != null && listTask.Any())//添加待办 BantchSaveEntityNoCommit(listTask); if (listRecord != null && listRecord.Any())//添加回采记录 BantchSaveEntityNoCommit(listRecord); if (listRecordUser != null && listRecordUser.Any())//添加回采记录值班人 BantchSaveEntityNoCommit(listRecordUser); }); int Count = ((listTask != null && listTask.Any()) ? listTask.Count() : 0) + ((listRecord != null && listRecord.Any()) ? listRecord.Count() : 0) + ((listRecordUser != null && listRecordUser.Any()) ? listRecordUser.Count() : 0); SyncLogDetailService.InsertSyncLogDetail(HttpContext.Items, HttpContext.TraceIdentifier, filter.OrgId, Count, filter.Parameter1, SyncLogType.BSCreateCheckPlanSet); return true; }); } #endregion } }