1
huangxiaoqiang
13 小时以前 a296223898d61a9838bbd35ed75c87575e308a36
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs
@@ -59,6 +59,7 @@
    private readonly IDt_StationManagerRepository _stationManagerRepository;
    private readonly ISys_ConfigService _configService;
    private readonly IDt_OrderOutDetailsRepository _orderOutDetailsRepository;
    private readonly IDt_WareAreaInfoRepository _wareAreaInfoRepository;
    public Dt_TaskService(IDt_TaskRepository BaseDal,
                                IUnitOfWorkManage unitOfWorkManage,
@@ -73,7 +74,8 @@
                                IStockInfoDetailRepository stockInfoDetailRepository,
                                IDt_StationManagerRepository stationManagerRepository,
                                ISys_ConfigService configService,
                                IDt_OrderOutDetailsRepository orderOutDetailsRepository) : base(BaseDal)
                                IDt_OrderOutDetailsRepository orderOutDetailsRepository,
                                IDt_WareAreaInfoRepository wareAreaInfoRepository) : base(BaseDal)
    {
        _unitOfWorkManage = unitOfWorkManage;
        _stockInfoRepository = stockInfoRepository;
@@ -88,6 +90,7 @@
        _stationManagerRepository = stationManagerRepository;
        _configService = configService;
        _orderOutDetailsRepository = orderOutDetailsRepository;
        _wareAreaInfoRepository = wareAreaInfoRepository;
    }
    #region å¤–部接口方法
@@ -120,9 +123,7 @@
                orderdetailshtys.Add(item.Adapt<Dt_OrderOutDetails_Hty>());
            });
            var allocateOrderdetail = orderDetails.Where(x => true).ToList();
            //await ERPAllocateOut(stock);
            await ERPAllocateOut(stock);
            //调拨出库
            if (task.TaskType == (int)TaskOutboundTypeEnum.OutAllocate)
@@ -144,36 +145,38 @@
                if (orderDetails.Count > 0)
                {
                    content = await ERPProduction(orderDetails.Where(x => x.OrderType == (int)OrderTypeEmun.生产领料单).ToList());
                }
                }
            }
            List<DtBoxingInfo> boxingInfos = new List<DtBoxingInfo>();
            foreach (var item in allocateOrderdetail)
            var boxingInfo = await _boxingInfoRepository.QueryFirstNavAsync(x => x.PalletCode == stock.PalletCode);
            if (boxingInfo != null)
            {
                var boxingInfo = await _boxingInfoRepository.QueryFirstNavAsync(x => x.PalletCode == item.PalletCode);
                if (boxingInfo == null)
                {
                    continue;
                }
                var boxingdetail = boxingInfo.BoxingInfoDetails.Where(x => x.MaterielCode == item.MaterielCode).ToList();
                if (boxingdetail.Count() > 0)
                {
                    foreach (var detail in boxingdetail)
                    {
                        //detail.Quantity = detail.Quantity - item.OutboundQuantity;
                        detail.Warehouse = "WMS出库缓存区";
                        detail.WareHouseId = "205";
                        //if (detail.Quantity <= 0)
                        //{
                        //    boxingInfo.BoxingInfoDetails.Remove(detail);
                        //}
                    }
                }
                boxingInfos.Add(boxingInfo);
                var mergedDetails = boxingInfo.BoxingInfoDetails
                        .GroupBy(x => new { x.MaterielCode, x.MaterielName })
                        .Select(g => new DtBoxingInfoDetail
                        {
                            MaterielCode = g.Key.MaterielCode,
                            MaterielName = g.Key.MaterielName,
                            DemandClassification = g.FirstOrDefault().DemandClassification,
                            Warehouse = "WMS出库缓存区",
                            WareHouseId = "205",
                            OrderNo = g.FirstOrDefault().OrderNo,
                            Unit = g.FirstOrDefault().Unit,
                            Specs = g.FirstOrDefault().Specs,
                            Weight = g.FirstOrDefault().Weight,
                            DrawingNumber = g.FirstOrDefault().DrawingNumber,
                            Date = g.FirstOrDefault().Date,
                            Remark = g.FirstOrDefault().Remark,
                            Quantity = g.Sum(item => item.Quantity),
                        })
                        .ToList();
                boxingInfo.BoxingInfoDetails = mergedDetails;
            }
            await _unitOfWorkManage.UseTranAsync(async () =>
            {
                await DeleteStockInfoAsync(stock.Id);
                _boxingInfoRepository.UpdateDataNav(boxingInfos);
                _boxingInfoRepository.UpdateDataNav(boxingInfo);
                await DeleteStockInfoDetailsAsync(stock.StockInfoDetails);
                await AddStockInfoHtyAsync(stockInfo_Hty);
                await _locationStatusChangeRecordRepository.AddDataAsync(result1.Item1);
@@ -263,6 +266,7 @@
            {
                return content.Error("未找到组盘数据");
            }
            await ERPAllocate(boxinfo);
            var stock = CreateStock(boxinfo, task);
@@ -274,8 +278,6 @@
            var result1 = UpdateLocationStatus(task.SourceAddress, LocationEnum.Free, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound);
            var result2 = UpdateLocationStatus(task.TargetAddress, LocationEnum.InStock, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound);
            await ERPAllocate(stock);
            await _unitOfWorkManage.UseTranAsync(async () =>
            {
@@ -301,7 +303,31 @@
    public DtStockInfo CreateStock(DtBoxingInfo boxingInfo,Dt_Task task)
    {
        var boxDetail = boxingInfo.BoxingInfoDetails.Adapt<List<DtStockInfoDetail>>();
        boxDetail.ForEach(x => { x.Status = (int)StockStateEmun.已入库; });
        boxDetail.ForEach(x =>
        {
            x.Status = (int)StockStateEmun.已入库;
        });
        var mergedDetails = boxDetail
                        .GroupBy(x => new { x.MaterielCode, x.MaterielName })
                        .Select(g => new DtStockInfoDetail
                        {
                            MaterielCode = g.Key.MaterielCode,
                            MaterielName = g.Key.MaterielName,
                            DemandClassification = g.FirstOrDefault().DemandClassification,
                            Warehouse = "智能立库",
                            WareHouseId = "107",
                            OrderNo = g.FirstOrDefault().OrderNo,
                            Unit = g.FirstOrDefault().Unit,
                            Specs = g.FirstOrDefault().Specs,
                            Weight = g.FirstOrDefault().Weight,
                            OutboundQuantity = g.FirstOrDefault().OutboundQuantity,
                            DrawingNumber = g.FirstOrDefault().DrawingNumber,
                            Date = g.FirstOrDefault().Date,
                            AllocateWarehouse = g.FirstOrDefault().AllocateWarehouse,
                            Remark = g.FirstOrDefault().Remark,
                            Quantity = g.Sum(item => item.Quantity),
                        })
                        .ToList();
        return new DtStockInfo()
        {
            PalletCode = task.PalletCode,
@@ -309,7 +335,7 @@
            CreateDate = DateTime.Now,
            Creater = "system",
            IsFullExit = boxingInfo.IsFullExit,
            StockInfoDetails = boxDetail,
            StockInfoDetails = mergedDetails,
            StockStatus = (int)StockStateEmun.已入库
        };
    }
@@ -691,7 +717,7 @@
    /// </summary>
    /// <param name="palletCode"></param>
    /// <returns></returns>
    public async Task<WebResponseContent> OutBoundTaskAsync(string palletCode)
    public async Task<WebResponseContent> OutBoundTaskAsync(string palletCode,string remark)
    {
        WebResponseContent content = new WebResponseContent();
        try
@@ -838,16 +864,20 @@
            Dt_Task taskNew = await RequestOutboundTaskAsync(new RequestTaskDto { PalletCode = stock.PalletCode, AreaId = 2, Position = stock.LocationCode, TaskType = (int)TaskOutboundTypeEnum.OutAllocate });
            List<Dt_OrderOutDetails> outDetails = new List<Dt_OrderOutDetails>();
            details.Where(x => x.OutboundQuantity > 0).ForEach(x =>
            details.Where(x=>x.OutboundQuantity>0).ForEach(x =>
            {
                var areaName = _areaInfoRepository.QueryFirst(y => y.AreaID == Convert.ToInt32(x.Remark));
                if (areaName == null)
                {
                    throw new Exception($"未找到调拨仓库{x.Remark}数据");
                }
                if (x.Quantity < x.OutboundQuantity)
                {
                    throw new Exception($"{x.MaterielName}{x.MaterielCode}出库数量不可大于库存数量");
                }
                var wareinfo = _wareAreaInfoRepository.QueryFirst(y => y.WareAreaCode ==x.AllocateWarehouse);
                if (wareinfo == null)
                {
                    throw new Exception($"未找到调拨仓库{x.AllocateWarehouse}数据");
                }
                if (wareinfo.WareAreaCode == "205")
                {
                    throw new Exception($"不可调拨至WMS出库缓存区{x.AllocateWarehouse}数据");
                }
                outDetails.Add(new Dt_OrderOutDetails()
                {
@@ -857,10 +887,10 @@
                    ERPOrderId = "",
                    MaterielCode = x.MaterielCode,
                    MaterielName = x.MaterielName,
                    AllocateWarehouse = areaName.AreaName,
                    AllocateWarehouse = wareinfo.WareAreaName,
                    Warehouse = "智能立库",
                    WareHouseId = "107",
                    AllocateWarehouseId = areaName.AreaCode ,
                    AllocateWarehouseId = wareinfo.WareAreaCode ,
                    OutboundQuantity = x.OutboundQuantity,
                });
            });
@@ -881,7 +911,7 @@
        }
        catch (Exception ex)
        {
            return content.Error();
            return content.Error(ex.Message);
        }
    }
@@ -1514,13 +1544,13 @@
    /// <param name="palletCode"></param>
    /// <returns></returns>
    /// 
    public async Task ERPAllocate(DtStockInfo stock)
    public async Task ERPAllocate(DtBoxingInfo boxing)
    {
        try
        {
            if (stock == null)
            if (boxing == null)
            {
                throw new Exception("未找到库存信息");
                throw new Exception("未找到组盘信息");
            }
            Allocate allocate = new Allocate
            {
@@ -1535,7 +1565,7 @@
                businessDate = DateTime.Now.ToString("yyyy-MM-dd"),
                isApproved = true,
                transferInList = stock.StockInfoDetails.Select(item => new transferInList
                transferInList = boxing.BoxingInfoDetails.Select(item => new transferInList
                {
                    //物料编码
                    ItemCode = item.MaterielCode,
@@ -1624,20 +1654,28 @@
                throw new Exception($"未找到调拨出库数据");
            }
            List<transferInList> transferInList=new List<transferInList>();
            orderOutDetails.ForEach(x =>
            foreach (var item in orderOutDetails)
            {
                if (item.AllocateWarehouseId == "205")
                {
                    continue;
                }
                transferInList.Add(new transferInList
                {
                    //物料编码
                    ItemCode = x.MaterielCode,
                    ItemCode = item.MaterielCode,
                    //调入仓库地址
                    TransInWHCode = x.AllocateWarehouseId,
                    TransInWHCode = item.AllocateWarehouseId,
                    //调入数量
                    TransInQty = x.OutboundQuantity,
                    TransInQty = item.OutboundQuantity,
                    // è°ƒå‡ºä»“库编码
                    TransOutWHCode = "205",
                });
            });
            }
            if (transferInList.Count <= 0)
            {
                return;
            }
            Allocate allocate = new Allocate
            {
                context = new Context