1011 lines
		
	
	
		
			54 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			1011 lines
		
	
	
		
			54 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>(() =>
 | 
						||
            {
 | 
						||
                try
 | 
						||
                {
 | 
						||
                    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);
 | 
						||
                }
 | 
						||
                catch (Exception ex)
 | 
						||
                {
 | 
						||
                    if (!string.IsNullOrEmpty(ex.StackTrace))
 | 
						||
                        throw new Exception("错误日志:[StackTrace]" + ex.StackTrace);
 | 
						||
                    else
 | 
						||
                        throw new Exception("【" + HttpContext.Request.Path + "】错误日志:[Message]" + ex.Message);
 | 
						||
                }
 | 
						||
                return true;
 | 
						||
            });
 | 
						||
        }
 | 
						||
 | 
						||
 | 
						||
 | 
						||
        #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>(() =>
 | 
						||
            {
 | 
						||
                try
 | 
						||
                {
 | 
						||
                    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);
 | 
						||
                }
 | 
						||
                catch (Exception ex)
 | 
						||
                {
 | 
						||
                    if (!string.IsNullOrEmpty(ex.StackTrace))
 | 
						||
                        throw new Exception("错误日志:[StackTrace]" + ex.StackTrace);
 | 
						||
                    else
 | 
						||
                        throw new Exception("【" + HttpContext.Request.Path + "】错误日志:[Message]" + ex.Message);
 | 
						||
                }
 | 
						||
                return true;
 | 
						||
            });
 | 
						||
        }
 | 
						||
 | 
						||
        #endregion
 | 
						||
 | 
						||
    }
 | 
						||
}
 |