1
huangxiaoqiang
2025-10-24 927ce822017ff8459be84b742d519970ca614096
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/AspNetCoreSchedule.cs
@@ -30,11 +30,14 @@
        private readonly ISys_ConfigService _configService;
        private readonly ILocationInfoRepository _locationRepository;
        private readonly IDt_InboundOrderRepository _inboundOrderRepository;
        private readonly IDt_OutboundOrderRepository _outboundorderRepository;
        private readonly IDt_OtherOutboundOrderRepository _otheroutboundorderRepository;
        private readonly IDt_ProductionOutboundOrderRepository _productionoutboundorderRepository;
        private readonly IDt_InventoryOutboundOrderRepository _inventoryoutboundorderRepository;
        private readonly IDt_AllocateOutboundOrderRepository _allocateoutboundorderRepository;
        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_OutboundOrderRepository outboundorderRepository)
        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_OtherOutboundOrderRepository otheroutboundorderRepository, IDt_AllocateOutboundOrderRepository allocateoutboundorderRepository, IDt_InventoryOutboundOrderRepository inventoryOutboundOrderRepository,IDt_ProductionOutboundOrderRepository productionOutboundOrderRepository)
        {
            _logger = logger;
            _locationRepository = locationRepository;
@@ -44,12 +47,15 @@
            _stationManagerRepository = stationManagerRepository;
            _configService = configService;
            _inboundOrderRepository = inboundOrderRepository;
            _outboundorderRepository = outboundorderRepository;
            _otheroutboundorderRepository = otheroutboundorderRepository;
            _allocateoutboundorderRepository = allocateoutboundorderRepository;
            _inventoryoutboundorderRepository = inventoryOutboundOrderRepository;
            _productionoutboundorderRepository = productionOutboundOrderRepository;
        }
        public Task StartAsync(CancellationToken cancellationToken)
        {
            _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromMinutes(1));
            _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromMinutes(5));
            return Task.CompletedTask;
        }
@@ -124,41 +130,205 @@
                }
                #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 productionOutOrder = _productionoutboundorderRepository.Db.Queryable<Dt_ProductionOutboundOrder>().Includes(x => x.Details).ToList();
                List<Dt_ProductionOutboundOrder> EngineeringoutboundOrderAdd = new List<Dt_ProductionOutboundOrder>();
                List<Dt_ProductionOutboundOrder> EngineeringoutboundOrderUpdate = new List<Dt_ProductionOutboundOrder>();
                List<Dt_ProductionOutboundOrder> productionoutboundOrderAdd = new List<Dt_ProductionOutboundOrder>();
                List<Dt_ProductionOutboundOrder> productionoutboundOrderUpdate = new List<Dt_ProductionOutboundOrder>();
                List<WMS_用友工程发货单一览表_ST> EngineeringERP = SqlSugarHelper.DBERP.Queryable<WMS_用友工程发货单一览表_ST>().Where(x => true).ToList();
                List<WMS_用友生产领料单一览表_ST> productERP = SqlSugarHelper.DBERP.Queryable<WMS_用友生产领料单一览表_ST>().Where(x => true).ToList();
                foreach (var item in EngineeringERP)
                {
                    var x = OutBoundOrder.Where(x => x.MaterielCode == item.子件料号 && x.UpperOrderNo == item.单号).FirstOrDefault();
                    var x = productionOutOrder.Where(x => x.UpperOrderNo == item.单号).FirstOrDefault();
                    if(x == null)
                    {
                        Dt_OutboundOrder outOrder = new Dt_OutboundOrder()
                        if(productionoutboundOrderAdd.Where(x => x.UpperOrderNo == item.单号).FirstOrDefault()==null)
                        {
                            Dt_ProductionOutboundOrder outOrder = new Dt_ProductionOutboundOrder()
                        {
                            OrderNo = GetOrderPintCode("OrderNoOut"),
                            UpperOrderNo = item.单号,
                                OrderStatus = (int)OrderStateEmun.未开始,
                                OrderType = (int)OrderTypeEmun.生产领料单,
                                CreateType = (int)OrderCreateTypeEmun.ERP推送,
                                Details = new List<Dt_ProductionOutboundOrderDetail>()
                                {
                                    new Dt_ProductionOutboundOrderDetail()
                                    {
                            MaterielCode = item.子件料号,
                            MaterielName = item.子件品名,
                            DemandClassification = item.需求名称,
                            OrderQuantity = item.子件实际用量,
                            OverOutQuantity = item.子件发放数量,
                            NotOutQuantity = item.子件未发数量,
                                        OverOutQuantity = item.子件发放数量,
                                    }
                                }
                            };
                            EngineeringoutboundOrderAdd.Add(outOrder);
                        }
                        else
                        {
                            var existingOrder = EngineeringoutboundOrderAdd.Where(x => x.UpperOrderNo == item.单号).FirstOrDefault();
                            existingOrder.Details.Add(new Dt_ProductionOutboundOrderDetail()
                            {
                                MaterielCode = item.子件料号,
                                MaterielName = item.子件品名,
                                DemandClassification = item.需求名称,
                                OrderQuantity = item.子件实际用量,
                                NotOutQuantity = item.子件未发数量,
                                OverOutQuantity = item.子件发放数量,
                            });
                        }
                    }
                    //else
                    //{
                    //    foreach (var detail in x.Details)
                    //    {
                    //        if (detail.MaterielCode != item.子件料号 && detail.MaterielName != item.子件品名)
                    //        {
                    //            if (EngineeringoutboundOrderUpdate.Where(o => o.UpperOrderNo == item.单号).FirstOrDefault() == null)
                    //            {
                    //                x.Details = new List<Dt_ProductionOutboundOrderDetail>()
                    //                        {
                    //                            new Dt_ProductionOutboundOrderDetail()
                    //                            {
                    //                                MaterielCode = item.子件料号,
                    //                                MaterielName = item.子件品名,
                    //                                DemandClassification = item.需求名称,
                    //                                OrderQuantity = item.子件实际用量,
                    //                                NotOutQuantity = item.子件未发数量,
                    //                                OverOutQuantity = item.子件发放数量,
                    //                            }
                    //                        };
                    //                EngineeringoutboundOrderUpdate.Add(x);
                    //            }
                    //            else
                    //            {
                    //                var existingOrder = EngineeringoutboundOrderUpdate.Where(o => o.UpperOrderNo == item.单号).FirstOrDefault();
                    //                existingOrder.Details.Add(new Dt_ProductionOutboundOrderDetail()
                    //                {
                    //                    MaterielCode = item.子件料号,
                    //                    MaterielName = item.子件品名,
                    //                    DemandClassification = item.需求名称,
                    //                    OrderQuantity = item.子件实际用量,
                    //                    NotOutQuantity = item.子件未发数量,
                    //                    OverOutQuantity = item.子件发放数量,
                    //                });
                    //            }
                    //        }
                    //    }
                    //}
                }
                if (EngineeringoutboundOrderAdd.Count > 0)
                {
                    foreach (var order in EngineeringoutboundOrderAdd)
                    {
                        _productionoutboundorderRepository.AddDataNavAsync(order);
                    }
                }
                if (EngineeringoutboundOrderUpdate.Count > 0)
                {
                    _productionoutboundorderRepository.UpdateDataNav(EngineeringoutboundOrderUpdate);
                }
                foreach (var item in productERP)
                {
                    var x = productionOutOrder.Where(x => x.UpperOrderNo == item.单号).FirstOrDefault();
                    if (x == null)
                    {
                        if (productionoutboundOrderAdd.Where(x => x.UpperOrderNo == item.单号).FirstOrDefault() == null)
                        {
                            Dt_ProductionOutboundOrder outOrder = new Dt_ProductionOutboundOrder()
                            {
                                OrderNo = GetOrderPintCode("OrderNoOut"),
                                UpperOrderNo = item.单号,
                            OrderStatus =(int)OrderStateEmun.未开始,
                            OrderType =(int)OrderTypeEmun.生产领料单,
                            CreateType =(int)OrderCreateTypeEmun.ERP推送,
                        };
                        outboundOrderAdd.Add(outOrder);
                                Details = new List<Dt_ProductionOutboundOrderDetail>()
                                {
                                    new Dt_ProductionOutboundOrderDetail()
                                    {
                                        MaterielCode = item.子件料号,
                                        MaterielName = item.子件品名,
                                        DemandClassification = item.需求名称,
                                        OrderQuantity = item.子件实际用量,
                                        NotOutQuantity = item.子件未发数量,
                                        OverOutQuantity = item.子件发放数量,
                    }
                                }
                            };
                            productionoutboundOrderAdd.Add(outOrder);
                        }
                        else
                        {
                            var existingOrder = productionoutboundOrderAdd.Where(x => x.UpperOrderNo == item.单号).FirstOrDefault();
                            existingOrder.Details.Add(new Dt_ProductionOutboundOrderDetail()
                            {
                                MaterielCode = item.子件料号,
                                MaterielName = item.子件品名,
                                DemandClassification = item.需求名称,
                                OrderQuantity = item.子件实际用量,
                                NotOutQuantity = item.子件未发数量,
                                OverOutQuantity = item.子件发放数量,
                            });
                        }
                    }
                    //else
                    //{
                    //    foreach (var detail in x.Details)
                    //    {
                    //        if (productionoutboundOrderUpdate.Where(o => o.UpperOrderNo == item.单号).FirstOrDefault() == null)
                    //        {
                    //            x.Details = new List<Dt_ProductionOutboundOrderDetail>()
                    //                        {
                    //                            new Dt_ProductionOutboundOrderDetail()
                    //                            {
                    //                                MaterielCode = item.子件料号,
                    //                                MaterielName = item.子件品名,
                    //                                DemandClassification = item.需求名称,
                    //                                OrderQuantity = item.子件实际用量,
                    //                                NotOutQuantity = item.子件未发数量,
                    //                                OverOutQuantity = item.子件发放数量,
                    //                            }
                    //                        };
                    //            productionoutboundOrderUpdate.Add(x);
                    //        }
                    //        else
                    //        {
                    //            var existingOrder = productionoutboundOrderUpdate.Where(o => o.UpperOrderNo == item.单号).FirstOrDefault();
                    //            existingOrder.Details.Add(new Dt_ProductionOutboundOrderDetail()
                    //            {
                    //                MaterielCode = item.子件料号,
                    //                MaterielName = item.子件品名,
                    //                DemandClassification = item.需求名称,
                    //                OrderQuantity = item.子件实际用量,
                    //                NotOutQuantity = item.子件未发数量,
                    //                OverOutQuantity = item.子件发放数量,
                    //            });
                    //        }
                    //    }
                    //}
                }
                #endregion
                if (outboundOrderAdd.Count > 0)
                if (productionoutboundOrderAdd.Count > 0)
                {
                    _outboundorderRepository.AddData(outboundOrderAdd);
                    foreach (var order in productionoutboundOrderAdd)
                    {
                        _productionoutboundorderRepository.AddDataNavAsync(order);
                }
            }
                if (productionoutboundOrderUpdate.Count > 0)
                {
                    _productionoutboundorderRepository.UpdateDataNav(productionoutboundOrderUpdate);
                }
                #endregion
            }
            catch (Exception ex)
            {
                ConsoleHelper.WriteErrorLine($"错误信息:" + ex.Message);