SigningUpForWorkJob.cs 2.51 KB
using Hh.Mes.POJO.Entity;
using Hh.Mes.POJO.EnumEntitys;
using Hh.Mes.POJO.Response;
using Hh.Mes.Service;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;

namespace Quartz.Job.Jobs
{
    /// <summary>
    ///   定时推送报工数据至MES系统
    ///   命名空间 Quartz.Job.Jobs 保持一致
    /// </summary>
    public class SigningUpForWorkJob : JobBase
    {
        public override void ExecuteJob(IJobExecutionContext context)
        {
            try
            {
                Stopwatch stopwatch = Stopwatch.StartNew();
                //ai 是默认的测试数据。不报工MES
                var busWorkOrderTopKeys = _dbContext.Queryable<bus_workOrder_top>()
                    .Where(x => x.workReportStatus != (int)EnumWorkReportTopStatus.已报工 && x.createBy != "ai")
                    .OrderBy(x => x.updateTime)//根据更新时间排序
                    .Take(10)
                    .Select(x => x.topKeys).ToList();

                //每执行一次,应当修改一次时间,当数据量较多时,可以保证能循环取到其他数据
                _dbContext.Updateable<bus_workOrder_top>()
                    .SetColumns(x => x.updateTime == DateTime.Now)
                    .Where(x => busWorkOrderTopKeys.Contains(x.topKeys))
                    .ExecuteCommand();

                //待报工数据
                var busWorkOrderHeadKeys = _dbContext.Queryable<bus_workOrder_head>()
                      .Where(x => busWorkOrderTopKeys.Contains(x.topKeys))
                      .Select(x => x.keys).ToList();

                var result = new List<Response>();
                var service = new ProcessFeedbackService();
                foreach (var headKeys in busWorkOrderHeadKeys)
                {
                    var temp = service.SigningUpForWorkToMES(headKeys);
                    result.Add(temp);
                }
                var errorCount = result.Where(x => x.Code != 200 && x.Code != 210).Count();
                stopwatch.Stop();
                //_log.EnqueueJobLog(nameof(SigningUpForWorkJob), "工序反馈", $"{nameof(bus_workOrder_head)}", "定时器", $"[执行完成] 总数:{busWorkOrderHeadKeys.Count},失败:{errorCount},耗时:{stopwatch.Elapsed}", "");
            }
            catch (Exception ex)
            {
                _log.EnqueueJobLog(nameof(SigningUpForWorkJob), "工序反馈", $"{nameof(bus_workOrder_head)}", "定时器", $"[执行失败] {ex.Message}", "");
            }
        }
    }
}