heshaofeng
3 天以前 b1a419c2886666934da6499ee552516d0769562e
ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs
@@ -30,7 +30,8 @@
        private readonly IRepository<Dt_OutboundOrderDetail> _outboundOrderDetailRepository;
        private readonly IMaterialUnitService _materialUnitService;
        private readonly IRepository<Dt_OutStockLockInfo> _outStockLockInfoRepository;
        public OutboundOrderService(IRepository<Dt_OutboundOrder> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_OutboundOrderDetail> outboundOrderDetailRepository, ILogger<OutboundOrderService> logger, IMaterialUnitService materialUnitService, IMaterielInfoService materielInfoService, IRepository<Dt_OutStockLockInfo> outStockLockInfoRepository) : base(BaseDal)
        private readonly IFeedbackMesService _feedbackMesService;
        public OutboundOrderService(IRepository<Dt_OutboundOrder> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_OutboundOrderDetail> outboundOrderDetailRepository, ILogger<OutboundOrderService> logger, IMaterialUnitService materialUnitService, IMaterielInfoService materielInfoService, IRepository<Dt_OutStockLockInfo> outStockLockInfoRepository, IFeedbackMesService feedbackMesService) : base(BaseDal)
        {
            _mapper = mapper;
            _unitOfWorkManage = unitOfWorkManage;
@@ -39,6 +40,7 @@
            _materialUnitService = materialUnitService;
            _materielInfoService = materielInfoService;
            _outStockLockInfoRepository = outStockLockInfoRepository;
            _feedbackMesService = feedbackMesService;
        }
        private int[] OrderTypes = new int[] { (int)InOrderTypeEnum.AllocatOutbound, (int)InOrderTypeEnum.InternalAllocat, (int)InOrderTypeEnum.ReCheck };
@@ -146,24 +148,24 @@
                            BarcodeQty = item.OrderQuantity,
                            BarcodeUnit = item.Unit,
                        };
                        var issueoStockResult = await _materialUnitService.ConvertFromToStockAsync(item.MaterielCode, item.BarcodeUnit, item.BarcodeQty);
                        outboundOrderDetail.Unit = issueoStockResult.Unit;
                        outboundOrderDetail.OrderQuantity = issueoStockResult.Quantity;
                        var moveissueoStockResult = await _materialUnitService.ConvertFromToStockAsync(item.MaterielCode, item.BarcodeUnit, item.BarcodeMoveQty);
                        outboundOrderDetail.MoveQty = moveissueoStockResult.Quantity;
                        var unitConvertResult = await ConvertUnitAsync(item.MaterielCode, item.BarcodeUnit, item.BarcodeQty, item.BarcodeMoveQty);
                        outboundOrderDetail.Unit = unitConvertResult.Unit;
                        outboundOrderDetail.OrderQuantity = unitConvertResult.OrderQuantity;
                        outboundOrderDetail.MoveQty = unitConvertResult.MoveQty;
                        outboundOrderDetail.MaterielName = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MaterielCode)?.MaterielName ?? "";
                        outboundOrderDetails.Add(outboundOrderDetail);
                    }
                    else
                    {
                        var unitConvertResult = await ConvertUnitAsync(item.MaterielCode, item.BarcodeUnit, item.BarcodeQty, item.BarcodeMoveQty);
                        #region é”å®šçŠ¶æ€ä¸‹éžæ•°é‡å­—æ®µä¸€è‡´æ€§æ ¡éªŒ
                        if (outboundOrderDetail.LockQuantity != 0)
                        {
                            var isFieldChanged = !string.Equals(outboundOrderDetail.MaterielCode, item.MaterielCode)
                                || !string.Equals(outboundOrderDetail.SupplyCode, item.SupplyCode)
                                || !string.Equals(outboundOrderDetail.BatchNo, item.BatchNo)
                                || !string.Equals(outboundOrderDetail.Unit, item.Unit)
                                || !string.Equals(outboundOrderDetail.SupplyCode??"", item.SupplyCode??"")
                                || !string.Equals(outboundOrderDetail.BatchNo??"", item.BatchNo??"")
                                || !string.Equals(outboundOrderDetail.Unit, unitConvertResult.Unit)
                                || !string.Equals(outboundOrderDetail.WarehouseCode, item.WarehouseCode)
                                || !string.Equals(outboundOrderDetail.lineNo, item.lineNo)
                                ;
@@ -203,12 +205,9 @@
                            outboundOrderDetail.BarcodeMoveQty = item.MoveQty;
                            outboundOrderDetail.BarcodeQty = item.OrderQuantity;
                            outboundOrderDetail.BarcodeUnit = item.Unit;
                            var issueoStockResult = await _materialUnitService.ConvertFromToStockAsync(item.MaterielCode, item.BarcodeUnit, item.BarcodeQty);
                            outboundOrderDetail.Unit = issueoStockResult.Unit;
                            outboundOrderDetail.OrderQuantity = issueoStockResult.Quantity;
                            var moveissueoStockResult = await _materialUnitService.ConvertFromToStockAsync(item.MaterielCode, item.BarcodeUnit, item.BarcodeMoveQty);
                            outboundOrderDetail.MoveQty = moveissueoStockResult.Quantity;
                            outboundOrderDetail.Unit = unitConvertResult.Unit;
                            outboundOrderDetail.OrderQuantity = unitConvertResult.OrderQuantity;
                            outboundOrderDetail.MoveQty = unitConvertResult.MoveQty;
                        }
                        else
                        {
@@ -243,12 +242,14 @@
                _outboundOrderDetailRepository.UpdateData(updateoutboundOrderDetails);
                _outboundOrderDetailRepository.AddData(outboundOrderDetails);
                if (outboundOrder.Details.All(x => x.OverOutQuantity >= x.OrderQuantity - x.MoveQty))
                var realLatestDetails = Db.Queryable<Dt_OutboundOrderDetail>().Where(x => x.OrderId == outboundOrder.Id).ToList();
                if (realLatestDetails.All(x => x.OverOutQuantity >= x.OrderQuantity - x.MoveQty))
                {
                    outboundOrder.OrderStatus = (int)OutOrderStatusEnum.出库完成;
                    outboundOrder.ReturnToMESStatus = 1;
                    BaseDal.UpdateData(outboundOrder);
                    _feedbackMesService.OutboundFeedback(outboundOrder.OrderNo);
                }
                BaseDal.UpdateData(outboundOrder);
                _unitOfWorkManage.CommitTran();
@@ -510,5 +511,26 @@
            return new PageGridData<Dt_OutboundOrder>(totalCount, data);
        }
        private async Task<UnitConvertResult> ConvertUnitAsync(string materielCode, string barcodeUnit, decimal barcodeQty, decimal barcodeMoveQty)
        {
            var issueoStockResult = await _materialUnitService.ConvertFromToStockAsync(materielCode, barcodeUnit, barcodeQty);
            var moveissueoStockResult = await _materialUnitService.ConvertFromToStockAsync(materielCode, barcodeUnit, barcodeMoveQty);
            return new UnitConvertResult
            {
                Unit = issueoStockResult.Unit,
                OrderQuantity = issueoStockResult.Quantity,
                MoveQty = moveissueoStockResult.Quantity
            };
        }
        private class UnitConvertResult
        {
            public string Unit { get; set; }
            public decimal OrderQuantity { get; set; }
            public decimal MoveQty { get; set; }
        }
    }
}