993 lines
51 KiB
C#
993 lines
51 KiB
C#
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<T_TL_PLAN_SET>
|
||
{
|
||
|
||
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;
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 判断跑批时间是否符合
|
||
/// </summary>
|
||
/// <param name="RUNSETTIME"></param>
|
||
/// <param name="dtNow"></param>
|
||
/// <param name="minAdvance"></param>
|
||
/// <param name="minLaster"></param>
|
||
/// <returns></returns>
|
||
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;
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 给 某个 部门的 某个岗位 人员 按配置发布 生产作业计划(title + 附件)
|
||
/// </summary>
|
||
/// <param name="filter"></param>
|
||
/// <returns></returns>
|
||
/// <exception cref="Exception"></exception>
|
||
[HttpPost, Route("PlanBegin")]
|
||
public JsonActionResult<bool> PlanBegin([FromBody] KeywordFilter filter)
|
||
{
|
||
return SafeExecute<bool>(() =>
|
||
{
|
||
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<T_FM_SYNC_TASK>(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<T_TL_FILE_SUM>(e => !e.IS_DELETED && e.CREATE_TIME.HasValue && e.TASK_PLAN_ID.HasValue && e.CREATE_TIME.Value.Date == dtNow.Date, null, null);
|
||
List<Guid> listPlanSetID = null;
|
||
if (fileSumCheck != null && fileSumCheck.Any())
|
||
{
|
||
listPlanSetID = fileSumCheck.Select(e => e.TASK_PLAN_ID.Value).ToList();
|
||
}
|
||
Expression<Func<T_TL_PLAN_SET, bool>> 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<T_TL_PLAN_SET> listRun = new List<T_TL_PLAN_SET>();
|
||
List<T_TL_WATCH_PLAN_SET> listRunWatch = new List<T_TL_WATCH_PLAN_SET>();
|
||
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<string> 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<T_TL_WATCH_DAYLY>(e => !e.IS_DELETED && e.DATE == dtNow.Date && e.PLAN_ID.HasValue, null, null);
|
||
var listDayLine = GetEntities<T_TL_WATCH_LINE>(e => !e.IS_DELETED && e.DATE == dtNow.Date && e.PLAN_ID.HasValue, null, null);
|
||
var listDayMove = GetEntities<T_TL_WATCH_MOVE>(e => !e.IS_DELETED && e.DATE == dtNow.Date && e.PLAN_ID.HasValue, null, null);
|
||
var listDayPercent = GetEntities<T_TL_WATCH_PERCENT>(e => !e.IS_DELETED && e.DATE == dtNow.Date && e.PLAN_ID.HasValue, null, null);
|
||
|
||
List<Guid> listPlanID = new List<Guid>();
|
||
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<Func<T_TL_WATCH_PLAN_SET, bool>> 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<string> 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<Guid> listDepID = new List<Guid>();
|
||
List<Guid> listPostID = new List<Guid>();
|
||
|
||
|
||
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<T_FM_PERSON>(e => e.POST_ID.HasValue && listPostID.Contains(e.POST_ID.Value), null, null);
|
||
var listPersonID = listPerson.Select(e => e.ID);
|
||
|
||
Expression<Func<T_FM_USER, bool>> 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<T_FM_NOTIFICATION_TASK> listTaskSend = null;
|
||
List<T_TL_FILE_SUM> 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<T_TL_FILE_SUM> listSum = new List<T_TL_FILE_SUM>();
|
||
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<T_TL_FILE_SUM>();
|
||
}
|
||
listFileSum.Add(modelFileSum);
|
||
|
||
if (listTaskSend == null)
|
||
{
|
||
listTaskSend = new List<T_FM_NOTIFICATION_TASK>();
|
||
}
|
||
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<T_TL_WATCH_DAYLY> listDayly = null;
|
||
List<T_TL_WATCH_PERCENT> listPercent = null;
|
||
List<T_TL_WATCH_LINE> listLine = null;
|
||
List<T_TL_WATCH_LINE_DETAIL> listLineDetail = null;
|
||
List<T_TL_WATCH_MOVE> listMove = null;
|
||
List<T_TL_WATCH_MOVE_DETAIL> listMoveDetail = null;
|
||
List<T_TL_WATCH_SUM> listWatchSum = null;//总的 (新增也会进去)
|
||
List<T_TL_WATCH_SUM> listWatchSumAdd = null;//需要添加的Model
|
||
|
||
if (listRunWatch.Count > 0)
|
||
{
|
||
listWatchSum = GetEntities<T_TL_WATCH_SUM>(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<T_TL_WATCH_SUM>();
|
||
}
|
||
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<Guid> listUserID = new List<Guid>();
|
||
List<string> listUserNAME = new List<string>();
|
||
|
||
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<T_TL_WATCH_DAYLY>();
|
||
}
|
||
listDayly.Add(modelDay);
|
||
|
||
foreach (var itemU in item.Nav_ListUser)
|
||
{
|
||
listUserID.Add(itemU.ID);
|
||
listUserNAME.Add(itemU.NAME);
|
||
}
|
||
if (listTaskSend == null)
|
||
listTaskSend = new List<T_FM_NOTIFICATION_TASK>();
|
||
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<T_TL_WATCH_PERCENT>();
|
||
listPercent.Add(modelPercent);
|
||
|
||
foreach (var itemU in item.Nav_ListUser)
|
||
{
|
||
listUserID.Add(itemU.ID);
|
||
listUserNAME.Add(itemU.NAME);
|
||
}
|
||
if (listTaskSend == null)
|
||
listTaskSend = new List<T_FM_NOTIFICATION_TASK>();
|
||
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<T_TL_WATCH_MOVE>();
|
||
listMove.Add(modelMove);
|
||
|
||
var listMovePoints = GetEntities<T_TL_WATCH_MOVE_POINT>(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<T_TL_WATCH_MOVE_DETAIL>();
|
||
listMoveDetail.Add(modelMD);
|
||
}
|
||
}
|
||
|
||
foreach (var itemU in item.Nav_ListUser)
|
||
{
|
||
listUserID.Add(itemU.ID);
|
||
listUserNAME.Add(itemU.NAME);
|
||
}
|
||
if (listTaskSend == null)
|
||
listTaskSend = new List<T_FM_NOTIFICATION_TASK>();
|
||
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<T_TL_WATCH_LINE>();
|
||
}
|
||
listLine.Add(modelLine);
|
||
|
||
var listLinePoints = GetEntities<T_TL_WATCH_LINE_POINT>(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<T_TL_WATCH_LINE_DETAIL>();
|
||
listLineDetail.Add(modelMD);
|
||
}
|
||
}
|
||
|
||
foreach (var itemU in item.Nav_ListUser)
|
||
{
|
||
listUserID.Add(itemU.ID);
|
||
listUserNAME.Add(itemU.NAME);
|
||
}
|
||
if (listTaskSend == null)
|
||
listTaskSend = new List<T_FM_NOTIFICATION_TASK>();
|
||
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 按回采计划 给值班人员 发送回采记录单
|
||
|
||
/// <summary>
|
||
/// 按回采计划 给值班人员 发送回采记录单(TL016)
|
||
/// </summary>
|
||
/// <param name="filter"></param>
|
||
/// <returns></returns>
|
||
/// <exception cref="Exception"></exception>
|
||
[HttpPost, Route("BackPlan")]
|
||
public JsonActionResult<bool> BackPlan([FromBody] KeywordFilter filter)
|
||
{
|
||
return SafeExecute<bool>(() =>
|
||
{
|
||
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<T_FM_SYNC_TASK>(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<T_TL_BACK_RECORD>(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<Func<T_TL_BACK_DETAIL, bool>> 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<T_TL_BACK_DETAIL_USER>(e => listDetailID.Contains(e.BACK_DETAIL_ID), null, null);
|
||
|
||
List<T_TL_BACK_RECORD> listRecord = new List<T_TL_BACK_RECORD>();
|
||
List<T_FM_NOTIFICATION_TASK> listTask = new List<T_FM_NOTIFICATION_TASK>();//给回采计划值班人(第一个人)添加代办
|
||
List<T_TL_BACK_RECORD_USER> listRecordUser = new List<T_TL_BACK_RECORD_USER>();
|
||
|
||
T_TL_BACK_RECORD model = null;
|
||
IEnumerable<T_TL_BACK_DETAIL_USER> iListDetailUser = null;
|
||
int IndexDetail = 0;
|
||
|
||
T_TL_BACK modelBack = null;
|
||
var listBackID = listDetail.Select(e => e.BACK_ID);
|
||
var listBack = GetEntities<T_TL_BACK>(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<T_FM_USER>(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
|
||
|
||
}
|
||
}
|