1
huangxiaoqiang
2025-12-03 d292487812b280e7f484a5cdf6e8a994baa486fd
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_OrderServices/Dt_AllocateOutboundOrderService.cs
@@ -40,6 +40,7 @@
        private readonly ILocationStatusChangeRecordRepository _locationStatusChangeRecordRepository;
        private readonly IDt_OrderOutDetailsRepository _outDetailsRepository;
        private readonly IDt_AreaInfoRepository _areaInfoRepository;
        private readonly IDt_WareAreaInfoRepository _wareAreaInfoRepository;
        public Dt_AllocateOutboundOrderService(IDt_AllocateOutboundOrderRepository BaseDal,
                                        IUnitOfWorkManage unitOfWorkManage,
@@ -52,7 +53,8 @@
                                        IDt_TaskRepository taskRepository,
                                        ILocationStatusChangeRecordRepository locationStatusChangeRecordRepository,
                                        IDt_OrderOutDetailsRepository outDetailsRepository,
                                        IDt_AreaInfoRepository areaInfoRepository) : base(BaseDal)
                                        IDt_AreaInfoRepository areaInfoRepository,
                                        IDt_WareAreaInfoRepository wareAreaInfoRepository) : base(BaseDal)
        {
            _unitOfWorkManage = unitOfWorkManage;
            _allocateoutboundOrderDetailRepository = allocateoutboundOrderDetailRepository;
@@ -65,6 +67,7 @@
            _locationStatusChangeRecordRepository = locationStatusChangeRecordRepository;
            _outDetailsRepository = outDetailsRepository;
            _areaInfoRepository = areaInfoRepository;
            _wareAreaInfoRepository = wareAreaInfoRepository;
        }
        public WebResponseContent GetAllocateOutboundOrder(OutboundOrderGetDTO outboundOrderGetDTO)
        {
@@ -153,10 +156,11 @@
            {
                foreach (var orderId in requestOut.orderIds)
                {
                    Dt_AreaInfo areaInfo = null;
                    Dt_WareAreaInfo? wareAreaInfo = null;
                    if (requestOut.Warehouse != "")
                        areaInfo = _areaInfoRepository.QueryFirst(x => x.AreaCode == requestOut.Warehouse);
                        wareAreaInfo = _wareAreaInfoRepository.QueryFirst(x => x.WareAreaCode == requestOut.Warehouse);
                    else
                        return content.Error("请选择调拨仓库");
                    List<RequestTaskDto> taskDtos = new List<RequestTaskDto>();
                    Dt_AllocateOutboundOrderDetail allocateoutboundOrderdetail = _allocateoutboundOrderDetailRepository.QueryFirst(x => x.Id == orderId);
@@ -183,11 +187,9 @@
                                MaterielCode = allocateoutboundOrderdetail.MaterielCode,
                                Position = item.LocationCode,
                                PalletCode = item.PalletCode,
                                //AreaId = Convert.ToInt32(requestOut.AreaId),
                                AreaId = Convert.ToInt32(2),
                            };
                            taskDtos.Add(task);
                            item.StockInfoDetails.Where(x => x.MaterielCode == allocateoutboundOrderdetail.MaterielCode).FirstOrDefault().Status = (int)StockStateEmun.出库锁定;
                            item.StockStatus = (int)StockStateEmun.出库锁定;
                            item.OrderNo = outboundOrder.UpperOrderNo;
@@ -201,8 +203,8 @@
                                    ERPOrderId = allocateoutboundOrderdetail.ERPOrderId,
                                    MaterielCode = allocateoutboundOrderdetail.MaterielCode,
                                    MaterielName = allocateoutboundOrderdetail.MaterielName,
                                    AllocateWarehouse = areaInfo == null ? item.StockInfoDetails.Where(x => x.MaterielCode == allocateoutboundOrderdetail.MaterielCode).FirstOrDefault().Warehouse : areaInfo.AreaName,
                                    AllocateWarehouseId = areaInfo == null ? item.StockInfoDetails.Where(x => x.MaterielCode == allocateoutboundOrderdetail.MaterielCode).FirstOrDefault().WareHouseId : areaInfo.AreaCode,
                                    AllocateWarehouse = wareAreaInfo.WareAreaName,
                                    AllocateWarehouseId = wareAreaInfo.WareAreaCode,
                                    Warehouse = "智能立库",
                                    WareHouseId = "107",
                                    OutboundQuantity = x.OutboundQuantity,
@@ -217,19 +219,22 @@
                        }
                        List<DtLocationStatusChangeRecord> locationStatusChangeRecords = new List<DtLocationStatusChangeRecord>();
                        List<DtLocationInfo> locations = new List<DtLocationInfo>();
                        if(taskNews.Count <= 0)
                        if (taskNews.Count <= 0)
                        {
                            throw new Exception($"{allocateoutboundOrderdetail.MaterielCode}未找到可出库托盘");
                        }
                        foreach (var item in taskNews)
                        {
                            taskDTOs.Add(CreateTaskDTO(item));
                            var result1 = _taskService.UpdateLocationStatus(item.SourceAddress, LocationEnum.InStockDisable, item.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticOutbound);
                            var result2 = _taskService.UpdateLocationStatus(item.TargetAddress, LocationEnum.Lock, item.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticOutbound);
                            var result1 = _taskService.UpdateLocationStatus(item.SourceAddress, LocationEnum.InStockDisable, item.TaskNum.Value,(int)StatusChangeTypeEnum.AutomaticOutbound);
                            locationStatusChangeRecords.AddRange(result1.Item1);
                            locationStatusChangeRecords.AddRange(result2.Item1);
                            locations.AddRange(result1.Item2);
                            locations.AddRange(result2.Item2);
                            var result2 = _taskService.UpdateEndLocationStatus(item.TargetAddress, LocationEnum.Lock, item.TaskNum.Value, StatusChangeTypeEnum.AutomaticOutbound);
                            if (result2.Item1 != null && result2.Item2 != null)
                            {
                                locationStatusChangeRecords.AddRange(result2.Item1);
                                locations.AddRange(result2.Item2);
                            }
                        }
                        outboundOrder.OrderStatus = (int)OrderStateEmun.开始;
                        await _unitOfWorkManage.UseTranAsync(async () =>
@@ -267,7 +272,9 @@
                Id = 0,
                TaskType = task.TaskType,
                AGVTaskNum = task.AGVTaskNum,
                Remark = task.Remark
                Remark = task.Remark,
                Floor = task.Floor,
                DoubleTray = task.DoubleTray,
            };
        }
        public (List<DtStockInfo>, Dt_AllocateOutboundOrderDetail) AssignStockOutbound(Dt_AllocateOutboundOrderDetail allocateoutboundOrderdetail, List<StockSelectViewDTO> stockSelectViews)