1
huangxiaoqiang
2025-10-23 82149871f30f4564d84272649352496a2ab0a38e
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/AspNetCoreSchedule.cs
@@ -1,13 +1,21 @@
using Masuit.Tools;
using MailKit.Search;
using Masuit.Tools;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System.Net.Mail;
using SixLabors.Fonts;
using SqlSugar;
using System;
using System.Net;
using System.Net.Mail;
using System.Text;
using WIDESEA_Cache;
using WIDESEA_Core.Const;
using WIDESEA_DTO.WMS;
using WIDESEA_IOrderRepository;
using WIDESEA_IServices;
using WIDESEA_Model.Models.ERP;
using WIDESEA_Model.Models.Order;
using WIDESEA_OrderRepository;
using WIDESEAWCS_BasicInfoRepository;
namespace WIDESEA_StorageTaskServices
@@ -21,10 +29,12 @@
        private readonly IDt_StationManagerRepository _stationManagerRepository;
        private readonly ISys_ConfigService _configService;
        private readonly ILocationInfoRepository _locationRepository;
        private readonly IDt_InboundOrderRepository _inboundOrderRepository;
        private readonly IDt_OutboundOrderRepository _outboundorderRepository;
        private Timer _timer;
        public MyBackgroundService(ILogger<MyBackgroundService> logger, ILocationInfoRepository locationRepository, IStockInfoRepository stockInfoRepository, IDt_AreaInfoRepository areaInfoRepository, IDt_TaskRepository taskRepository, IDt_StationManagerRepository stationManagerRepository, ISys_ConfigService configService)
        public MyBackgroundService(ILogger<MyBackgroundService> logger, ILocationInfoRepository locationRepository, IStockInfoRepository stockInfoRepository, IDt_AreaInfoRepository areaInfoRepository, IDt_TaskRepository taskRepository, IDt_StationManagerRepository stationManagerRepository, ISys_ConfigService configService,IDt_InboundOrderRepository inboundOrderRepository, IDt_OutboundOrderRepository outboundorderRepository)
        {
            _logger = logger;
            _locationRepository = locationRepository;
@@ -33,11 +43,13 @@
            _taskRepository = taskRepository;
            _stationManagerRepository = stationManagerRepository;
            _configService = configService;
            _inboundOrderRepository = inboundOrderRepository;
            _outboundorderRepository = outboundorderRepository;
        }
        public Task StartAsync(CancellationToken cancellationToken)
        {
            _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromMinutes(5));
            _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromMinutes(1));
            return Task.CompletedTask;
        }
@@ -45,13 +57,133 @@
        {
            try
            {
                #region å…¥åº“单据同步
                List<WMS_采购入成品入库自动打印清单_ST> ERPPrintChecklist =SqlSugarHelper.DBERP.Queryable<WMS_采购入成品入库自动打印清单_ST>().Where(x => true).ToList();
                
                var printCheckList = _inboundOrderRepository.QueryData(x => true);
                List<Dt_InboundOrder> inboundOrderAdd = new List<Dt_InboundOrder>();
                List<Dt_InboundOrder> inboundOrderUpdate = new List<Dt_InboundOrder>();
                foreach (var item in ERPPrintChecklist)
                {
                    var x = printCheckList.Where(x => x.MaterialNo == item.料号 && x.UpperOrderNo == item.单号 && x.WarehouseName == item.入库仓库名称).FirstOrDefault();
                    if (x == null)
                    {
                        Dt_InboundOrder Print = new Dt_InboundOrder()
                        {
                            OrderNo = GetOrderPintCode("OrderNoIn"),
                            UpperOrderNo = item.单号,
                            DemandClassification = item.需求分类,
                            OrderType = item.单据类型,
                            WarehouseName = item.入库仓库名称,
                            Datetime = item.日期.ToString(),
                            LineNumber = item.行号,
                            ProductDrawingNumber = item.产品图号,
                            MaterialNo = item.料号,
                            MaterialName = item.品名,
                            Weight = item.单重,
                            Specs = item.规格,
                            Unit = item.单位,
                            Texture = item.用友材质,
                            Quantity = item.入库数量,
                            OrderStatus = item.单据状态
                        };
                        inboundOrderAdd.Add(Print);
                    }
                    else
                    {
                        if (x.OrderNo == null || x.OrderNo == "")
                        {
                            x.OrderNo = GetOrderPintCode("OrderNoIn");
                            x.UpperOrderNo = item.单号;
                            x.DemandClassification = item.需求分类;
                            x.OrderType = item.单据类型;
                            x.WarehouseName = item.入库仓库名称;
                            x.Datetime = item.日期.ToString();
                            x.LineNumber = item.行号;
                            x.ProductDrawingNumber = item.产品图号;
                            x.MaterialNo = item.料号;
                            x.MaterialName = item.品名;
                            x.Weight = item.单重;
                            x.Specs = item.规格;
                            x.Unit = item.单位;
                            x.Texture = item.用友材质;
                            x.Quantity = item.入库数量;
                            x.OrderStatus = item.单据状态;
                            inboundOrderUpdate.Add(x);
                        }
                    }
                }
                if (inboundOrderAdd.Count > 0)
                {
                    _inboundOrderRepository.AddData(inboundOrderAdd);
                }
                if (inboundOrderUpdate.Count > 0)
                {
                    _inboundOrderRepository.UpdateData(inboundOrderUpdate);
                }
                #endregion
                var OutBoundOrder = _outboundorderRepository.QueryData(x => true);
                List<Dt_OutboundOrder> outboundOrderAdd = new List<Dt_OutboundOrder>();
                List<Dt_OutboundOrder> outboundOrderUpdate = new List<Dt_OutboundOrder>();
                #region ERP生产领料单同步
                List<WMS_用友工程发货单一览表_ST> ERPMaterialRequisition = SqlSugarHelper.DBERP.Queryable<WMS_用友工程发货单一览表_ST>().Where(x => true).ToList();
                foreach (var item in ERPMaterialRequisition)
                {
                    var x = OutBoundOrder.Where(x => x.MaterielCode == item.子件料号 && x.UpperOrderNo == item.单号).FirstOrDefault();
                    if(x == null)
                    {
                        Dt_OutboundOrder outOrder = new Dt_OutboundOrder()
                        {
                            OrderNo = GetOrderPintCode("OrderNoOut"),
                            UpperOrderNo = item.单号,
                            MaterielCode = item.子件料号,
                            MaterielName = item.子件品名,
                            DemandClassification = item.需求名称,
                            OrderQuantity = item.子件实际用量,
                            OverOutQuantity = item.子件发放数量,
                            NotOutQuantity = item.子件未发数量,
                            OrderStatus =(int)OrderStateEmun.未开始,
                            OrderType =(int)OrderTypeEmun.生产领料单,
                            CreateType =(int)OrderCreateTypeEmun.ERP推送,
                        };
                        outboundOrderAdd.Add(outOrder);
                    }
                }
                #endregion
                if (outboundOrderAdd.Count > 0)
                {
                    _outboundorderRepository.AddData(outboundOrderAdd);
                }
            }
            catch (Exception ex)
            {
                ConsoleHelper.WriteErrorLine($"错误信息:" + ex.Message);
            }
        }
        public string GetOrderPintCode(string printCode)
        {
            string PrintCode = "";
            var PrintSetting = SqlSugarHelper.DbWMS.Queryable<Dt_PrintSetting>().Where(x => x.PrintCode == printCode).ToList().FirstOrDefault();
            if (PrintSetting.Spare1 == DateTime.Now.ToString("yyyyMMdd"))
            {
                PrintCode = PrintSetting.Spare1 + PrintSetting.PrintNo.ToString().PadLeft(PrintSetting.Spare2, '0');
                PrintSetting.PrintNo = PrintSetting.PrintNo + 1;
            }
            else
            {
                PrintSetting.Spare1 = DateTime.Now.ToString("yyyyMMdd");
                PrintSetting.PrintNo = 2;
                PrintCode = PrintSetting.Spare1 + 1.ToString().PadLeft(PrintSetting.Spare2, '0');
            }
            SqlSugarHelper.DbWMS.Updateable(PrintSetting).ExecuteCommand();
            return PrintCode;
        }
        
        public Task StopAsync(CancellationToken cancellationToken)
        {