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
 | 
						||
 | 
						||
    }
 | 
						||
}
 |