1
huangxiaoqiang
9 天以前 dda095e27b535d5748340f127c5f83c0d1324226
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/AspNetCoreSchedule.cs
@@ -6,13 +6,16 @@
using SixLabors.Fonts;
using SqlSugar;
using System;
using System.Data;
using System.Net;
using System.Net.Mail;
using System.Text;
using System.Xml.Linq;
using WIDESEA_Cache;
using WIDESEA_Core.Const;
using WIDESEA_DTO.WMS;
using WIDESEA_IOrderRepository;
using WIDESEA_IOrderServices;
using WIDESEA_IServices;
using WIDESEA_Model.Models.ERP;
using WIDESEA_Model.Models.Order;
@@ -25,36 +28,35 @@
    {
        private readonly ILogger<MyBackgroundService> _logger;
        private readonly IStockInfoRepository _stockInfoRepository;
        private readonly IDt_AreaInfoRepository _areaInfoRepository; //区域
        private readonly IDt_TaskRepository _taskRepository;
        private readonly IDt_StationManagerRepository _stationManagerRepository;
        private readonly ISys_ConfigService _configService;
        private readonly ILocationInfoRepository _locationRepository;
        private readonly IDt_InboundOrderRepository _inboundOrderRepository;
        private readonly IDt_ProductionOutboundOrderRepository _productionoutboundorderRepository;
        private readonly IDt_AllocateOutboundOrderRepository _allocateoutboundorderRepository;
        private readonly IUnitOfWorkManage _unitOfWorkManage;
        private readonly IDt_ProductionOutboundOrderService _productionOutboundOrderService;
        private readonly IDt_AllocateOutboundOrderService _allocateOutboundOrderService;
        private Timer _timer;
        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_AllocateOutboundOrderRepository allocateoutboundorderRepository,IDt_ProductionOutboundOrderRepository productionOutboundOrderRepository,IUnitOfWorkManage unitOfWorkManage)
        public MyBackgroundService(ILogger<MyBackgroundService> logger, ILocationInfoRepository locationRepository, IStockInfoRepository stockInfoRepository,IDt_TaskRepository taskRepository,ISys_ConfigService configService,IDt_InboundOrderRepository inboundOrderRepository,IDt_AllocateOutboundOrderRepository allocateoutboundorderRepository,IDt_ProductionOutboundOrderRepository productionOutboundOrderRepository,IUnitOfWorkManage unitOfWorkManage, IDt_ProductionOutboundOrderService productionOutboundOrderService, IDt_AllocateOutboundOrderService allocateOutboundOrderService)
        {
            _logger = logger;
            _locationRepository = locationRepository;
            _stockInfoRepository = stockInfoRepository;
            _areaInfoRepository = areaInfoRepository;
            _taskRepository = taskRepository;
            _stationManagerRepository = stationManagerRepository;
            _configService = configService;
            _inboundOrderRepository = inboundOrderRepository;
            _allocateoutboundorderRepository = allocateoutboundorderRepository;
            _productionoutboundorderRepository = productionOutboundOrderRepository;
            _unitOfWorkManage = unitOfWorkManage;
            _productionOutboundOrderService = productionOutboundOrderService;
            _allocateOutboundOrderService = allocateOutboundOrderService;
        }
        public Task StartAsync(CancellationToken cancellationToken)
        {
            _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromMinutes(5));
            _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromMinutes(10));
            return Task.CompletedTask;
        }
@@ -86,6 +88,7 @@
                            MaterialNo = item.料号,
                            MaterialName = item.品名,
                            Weight = item.单重,
                            WareHouseId = item.存储地点ID,
                            Specs = item.规格,
                            Unit = item.单位,
                            Texture = item.用友材质,
@@ -119,14 +122,6 @@
                        }
                    }
                }
                if (inboundOrderAdd.Count > 0)
                {
                    _inboundOrderRepository.AddData(inboundOrderAdd);
                }
                if (inboundOrderUpdate.Count > 0)
                {
                    _inboundOrderRepository.UpdateData(inboundOrderUpdate);
                }
                #endregion
                #region ERP生产领料单同步
@@ -138,19 +133,18 @@
                List<WMS_用友生产领料单一览表_ST> productERP = SqlSugarHelper.DBERP.Queryable<WMS_用友生产领料单一览表_ST>().Where(x => true).ToList();
                foreach (var item in EngineeringERP)
                {
                    var x = productionOutOrder.Where(x => x.UpperOrderNo == item.单号 && x.DemandClassification == item.需求名称 && x.OrderPartNumber == item.订单料号 && x.OrderSpec == item.订单规格).FirstOrDefault();
                    var x = productionOutOrder.Where(x => x.UpperOrderNo == item.单号 && x.DemandClassification == item.需求名称 && x.OrderPartNumber == item.订单料号).FirstOrDefault();
                    if (x == null)
                    {
                        if(productionoutboundOrderAdd.Where(x => x.UpperOrderNo == item.单号 && x.DemandClassification == item.需求名称 && x.OrderPartNumber == item.订单料号 && x.OrderSpec == item.订单规格).FirstOrDefault()==null)
                        if (productionoutboundOrderAdd.Where(x => x.UpperOrderNo == item.单号 && x.DemandClassification == item.需求名称 && x.OrderPartNumber == item.订单料号 ).FirstOrDefault() == null)
                        {
                            Dt_ProductionOutboundOrder outOrder = new Dt_ProductionOutboundOrder()
                            {
                                OrderNo = GetOrderPintCode("OrderNoOut"),
                                OrderNo = item.单号,
                                UpperOrderNo = item.单号,
                                OrderName = item.订单品名,
                                DemandClassification = item.需求名称,
                                OrderPartNumber = item.订单料号,
                                OrderSpec = item.订单规格,
                                OrderStatus = (int)OrderStateEmun.未开始,
                                OrderType = (int)OrderTypeEmun.生产领料单,
                                CreateType = (int)OrderCreateTypeEmun.ERP推送,
@@ -162,6 +156,8 @@
                                        MaterielName = item.子件品名,
                                        Specs = item.子件规格,
                                        Weight = item.子件单重,
                                        ERPOrderId = item.备料单ID,
                                        WareHouseId =item.存储地点ID,
                                        OrderQuantity = item.子件实际用量,
                                        NotOutQuantity = item.子件未发数量,
                                        OverOutQuantity = item.子件发放数量,
@@ -179,6 +175,8 @@
                                MaterielName = item.子件品名,
                                Specs = item.子件规格,
                                Weight = item.子件单重,
                                ERPOrderId = item.备料单ID,
                                WareHouseId = item.存储地点ID,
                                OrderQuantity = item.子件实际用量,
                                NotOutQuantity = item.子件未发数量,
                                OverOutQuantity = item.子件发放数量,
@@ -195,12 +193,11 @@
                        {
                            Dt_ProductionOutboundOrder outOrder = new Dt_ProductionOutboundOrder()
                            {
                                OrderNo = GetOrderPintCode("OrderNoOut"),
                                OrderNo = item.单号,
                                UpperOrderNo = item.单号,
                                OrderName = item.订单品名,
                                DemandClassification = item.需求名称,
                                OrderPartNumber = item.订单料号,
                                //OrderSpec = item.订单规格,
                                OrderStatus = (int)OrderStateEmun.未开始,
                                OrderType = (int)OrderTypeEmun.生产领料单,
                                CreateType = (int)OrderCreateTypeEmun.ERP推送,
@@ -212,6 +209,8 @@
                                        MaterielName = item.子件品名,
                                        Specs = item.子件规格,
                                        Weight = item.子件单重,
                                        ERPOrderId = item.备料单ID,
                                        WareHouseId =item.存储地点ID,
                                        OrderQuantity = item.子件实际用量,
                                        NotOutQuantity = item.子件未发数量,
                                        OverOutQuantity = item.子件发放数量,
@@ -229,6 +228,8 @@
                                MaterielName = item.子件品名,
                                Specs = item.子件规格,
                                Weight = item.子件单重,
                                ERPOrderId = item.备料单ID,
                                WareHouseId = item.存储地点ID,
                                OrderQuantity = item.子件实际用量,
                                NotOutQuantity = item.子件未发数量,
                                OverOutQuantity = item.子件发放数量,
@@ -249,19 +250,18 @@
                List<WMS_用友电控柜调拨一览表_ST> ERPallocateOrder = SqlSugarHelper.DBERP.Queryable<WMS_用友电控柜调拨一览表_ST>().Where(x => true).ToList();
                foreach (var item in ERPallocateOrder)
                {
                    var x = allocateoutboundorder.Where(x => x.UpperOrderNo == item.单号 && x.DemandClassification == item.需求名称 && x.OrderPartNumber == item.订单料号 && x.OrderSpec == item.订单规格).FirstOrDefault();
                    var x = allocateoutboundorder.Where(x => x.UpperOrderNo == item.单号 && x.DemandClassification == item.需求名称 && x.OrderPartNumber == item.订单料号).FirstOrDefault();
                    if (x == null)
                    {
                        if (allocateoutboundorderAdd.Where(x => x.UpperOrderNo == item.单号).FirstOrDefault() == null)
                        {
                            Dt_AllocateOutboundOrder outOrder = new Dt_AllocateOutboundOrder()
                            {
                                OrderNo = GetOrderPintCode("OrderNoOut"),
                                OrderNo = item.单号,
                                UpperOrderNo = item.单号,
                                OrderName=item.订单品名,
                                DemandClassification=item.需求名称,
                                OrderPartNumber =item.订单料号,
                                OrderSpec =item.订单规格,
                                OrderStatus = (int)OrderStateEmun.未开始,
                                OrderType = (int)OrderTypeEmun.调拨出库单,
                                CreateType = (int)OrderCreateTypeEmun.ERP推送,
@@ -273,6 +273,8 @@
                                        MaterielName = item.子件品名,
                                        Specs = item.子件规格,
                                        Weight = item.子件单重,
                                        ERPOrderId = item.备料单ID,
                                        WareHouseId =item.存储地点ID,
                                        OrderQuantity = item.子件实际用量,
                                        NotOutQuantity = item.子件未发数量,
                                        OverOutQuantity = item.子件发放数量,
@@ -283,13 +285,15 @@
                        }
                        else
                        {
                            var existingOrder = allocateoutboundorderAdd.Where(x => x.UpperOrderNo == item.单号 && x.DemandClassification == item.需求名称 && x.OrderPartNumber == item.订单料号 && x.OrderSpec == item.订单规格).FirstOrDefault();
                            var existingOrder = allocateoutboundorderAdd.Where(x => x.UpperOrderNo == item.单号 && x.DemandClassification == item.需求名称 && x.OrderPartNumber == item.订单料号).FirstOrDefault();
                            existingOrder.Details.Add(new Dt_AllocateOutboundOrderDetail()
                            {
                                MaterielCode = item.子件料号,
                                MaterielName = item.子件品名,
                                Specs = item.子件规格,
                                Weight = item.子件单重,
                                ERPOrderId = item.备料单ID,
                                WareHouseId = item.存储地点ID,
                                OrderQuantity = item.子件实际用量,
                                NotOutQuantity = item.子件未发数量,
                                OverOutQuantity = item.子件发放数量,
@@ -300,29 +304,32 @@
                #endregion
                #region æ•°æ®å¤„理
                _unitOfWorkManage.BeginTran();
                if (inboundOrderAdd.Count > 0)
                {
                    PrintInbound(inboundOrderAdd);
                    _inboundOrderRepository.AddData(inboundOrderAdd);
                }
                if (inboundOrderUpdate.Count > 0)
                {
                    PrintInbound(inboundOrderUpdate);
                    _inboundOrderRepository.UpdateData(inboundOrderUpdate);
                }
                if (productionoutboundOrderAdd.Count > 0)
                {
                    //foreach (var order in productionoutboundOrderAdd)
                    //{
                    //    _productionoutboundorderRepository.AddDataNavAsync(order);
                    //}
                    SqlSugarHelper.DbWMS.InsertNav(productionoutboundOrderAdd).Include(x => x.Details).ExecuteCommandAsync();
                    SqlSugarHelper.DbWMS.InsertNav(productionoutboundOrderAdd).Include(x => x.Details).ExecuteCommand();
                }
                if (allocateoutboundorderAdd.Count > 0)
                {
                    SqlSugarHelper.DbWMS.InsertNav(allocateoutboundorderAdd).Include(x=>x.Details).ExecuteCommandAsync();
                    SqlSugarHelper.DbWMS.InsertNav(allocateoutboundorderAdd).Include(x => x.Details).ExecuteCommand();
                }
                _unitOfWorkManage.CommitTran();
                #endregion
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                ConsoleHelper.WriteErrorLine($"错误信息:" + ex.Message);
            }
        }
@@ -354,6 +361,19 @@
            return Task.CompletedTask;
        }
        public void PrintInbound(List<Dt_InboundOrder> orders)
        {
            var configs = _configService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
            var Base = configs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.PrintIPAddress)?.ConfigValue;
            var ipAddress = configs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.PrintInboundOrder)?.ConfigValue;
            if (Base == null || ipAddress == null)
            {
                throw new InvalidOperationException("WMS IP æœªé…ç½®");
            }
            var IpAddress = Base + ipAddress;
            var result = HttpHelper.PostAsync(IpAddress, orders.ToJsonString()).Result;
        }
        public void Dispose()
        {
            _timer?.Dispose();