dengjunjie
2025-07-09 7ca9651f81d7b84f054194d3d46fdbd1d9c8b922
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs
@@ -119,7 +119,7 @@
            foreach (var item in stockInfos.GroupBy(x => x.LocationCode))
            {
                Dt_LocationInfo locationInfo = locationInfos.First(x => x.LocationCode == item.Key);
                (List<Dt_Task>?, List<Dt_LocationInfo>?, List<Dt_StockInfo>?) result = GetRelocationTask(locationInfo);
                (List<Dt_Task>?, List<Dt_LocationInfo>?, List<Dt_StockInfo>?) result = GetRelocationTask(stockInfos);
                tasks.AddRange(result.Item1);//移库任务
                locations.AddRange(result.Item2);//移库货位
                stocks.AddRange(result.Item3);//移库库存
@@ -133,7 +133,7 @@
                            Grade = 0,
                            PalletCode = stockInfo.PalletCode,
                            TargetIsPickPlace = false,
                            SourceIsPickPlace = locationInfo.Row == 1 ? false : stockInfo.SerialNumber == locationInfo.MaxQty,
                            SourceIsPickPlace = stockInfo.SerialNumber == locationInfo.MaxQty,
                            NextAddress = "1008",
                            Roadway = locationInfo.RoadwayNo,
                            SourceAddress = stockInfo.LocationCode,
@@ -154,50 +154,65 @@
        /// <param name="locationInfo"></param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        public (List<Dt_Task>?, List<Dt_LocationInfo>?, List<Dt_StockInfo>?) GetRelocationTask(Dt_LocationInfo locationInfo)
        public (List<Dt_Task>?, List<Dt_LocationInfo>?, List<Dt_StockInfo>?) GetRelocationTask(List<Dt_StockInfo> stockInfos)
        {
            List<Dt_Task> dt_Tasks = new List<Dt_Task>();
            List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
            List<Dt_StockInfo> stockInfos = new List<Dt_StockInfo>();
            if (locationInfo.Row == 1)
            List<Dt_StockInfo> stockInfos1 = new List<Dt_StockInfo>();
            foreach (var item in stockInfos.GroupBy(x => x.LocationCode))
            {
                var locationInfo1 = _basicService.LocationInfoService.Repository.QueryFirst(x => x.Row == 2 && x.Column == locationInfo.Column && x.Layer == locationInfo.Layer);
                stockInfos = _stockService.StockInfoService.Repository.QueryData(x => locationInfo1.LocationCode == x.LocationCode).OrderByDescending(x => x.SerialNumber).ToList();
                if (stockInfos == null || stockInfos.Count < 1)
                var locationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.LocationCode == item.Key);
                if (locationInfo.Row == 1)
                {
                    return (dt_Tasks, locationInfos, stockInfos);
                }
                Dt_LocationInfo? locationInfo2 = _basicService.LocationInfoService.AssignLocation();
                if (locationInfo2 == null) throw new Exception("无可移库货位");
                locationInfo1.LocationStatus = LocationStatusEnum.Relocationing.ObjToInt();
                locationInfo2.LocationStatus = LocationStatusEnum.Relocationing.ObjToInt();
                locationInfos.Add(locationInfo1);
                locationInfos.Add(locationInfo2);
                int i = 1;
                foreach (var item in stockInfos)
                {
                    Dt_Task task = new()
                    var StockInfos = _stockService.StockInfoService.Repository.QueryData(x => x.LocationCode == locationInfo.LocationCode && !stockInfos.Select(x => x.PalletCode).Contains(x.PalletCode)).ToList();
                    foreach (var StockInfo in StockInfos)
                    {
                        CurrentAddress = item.LocationCode,
                        SourceIsPickPlace = item.SerialNumber == 12,
                        TargetIsPickPlace = i == 12 ? locationInfo2.Row != 1 : false,
                        Grade = 0,
                        PalletCode = item.PalletCode,
                        NextAddress = locationInfo2.LocationCode,
                        Roadway = locationInfo.RoadwayNo,
                        SourceAddress = item.LocationCode,
                        TargetAddress = locationInfo2.LocationCode,
                        TaskState = WIDESEA_Common.TaskEnum.TaskRelocationStatusEnum.RelocationNew.ObjToInt(),
                        TaskType = TaskRelocationTypeEnum.Relocation.ObjToInt(),
                        TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum))
                    };
                    if (locationInfo2.Row == 1) task.TargetIsPickPlace = false;
                    dt_Tasks.Add(task);
                    i++;
                    item.StockStatus = StockStatusEmun.移库中.ObjToInt();
                        foreach (var item1 in item)
                        {
                            if (StockInfo.SerialNumber > item1.SerialNumber)
                            {
                                stockInfos1.Add(StockInfo);
                                break;
                            }
                        }
                    }
                }
            }
            return (dt_Tasks, locationInfos, stockInfos);
            if (stockInfos1.Count > 0)
            {
                List<string> strings = new List<string>();
                foreach (var item in stockInfos1.GroupBy(x => x.LocationCode))
                {
                    Dt_LocationInfo? locationInfo2 = _basicService.LocationInfoService.AssignLocation(strings);
                    if (locationInfo2 == null) throw new Exception("无可移库货位");
                    locationInfo2.LocationStatus = LocationStatusEnum.Relocationing.ObjToInt();
                    strings.Add(locationInfo2.LocationCode);
                    locationInfos.Add(locationInfo2);
                    foreach (var item1 in item.OrderByDescending(x => x.SerialNumber))
                    {
                        locationInfo2.CurrentQty++;
                        Dt_Task task = new()
                        {
                            CurrentAddress = item1.LocationCode,
                            SourceIsPickPlace = item1.SerialNumber == 24,
                            TargetIsPickPlace = locationInfo2.MaxQty == locationInfo2.CurrentQty,
                            Grade = 0,
                            PalletCode = item1.PalletCode,
                            NextAddress = locationInfo2.LocationCode,
                            Roadway = locationInfo2.RoadwayNo,
                            SourceAddress = item1.LocationCode,
                            TargetAddress = locationInfo2.LocationCode,
                            TaskState = WIDESEA_Common.TaskEnum.TaskRelocationStatusEnum.RelocationNew.ObjToInt(),
                            TaskType = TaskRelocationTypeEnum.Relocation.ObjToInt(),
                            TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum))
                        };
                        dt_Tasks.Add(task);
                        item1.SerialNumber = locationInfo2.CurrentQty;
                        item1.StockStatus = StockStatusEmun.移库中.ObjToInt();
                    }
                }
            }
            return (dt_Tasks, locationInfos, stockInfos1);
        }
        /// <summary>
        /// å‡ºåº“任务数据处理/指定出库单出库
@@ -235,6 +250,7 @@
                stockInfos.AddRange(result.Item1);
                outboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
                outboundOrderDetail.LockQuantity = result.Item1.Count;
                outStockLockInfos = result.Item2;
                locationInfos = result.Item3;
                outboundOrder.OrderStatus = OutboundStatusEnum.出库中.ObjToInt();
@@ -246,7 +262,26 @@
            return (tasks, stockInfos, new List<Dt_OutboundOrderDetail> { outboundOrderDetail }, outStockLockInfos, locationInfos, locationInfos1, outboundOrder);
        }
        public WebResponseContent NewGenerateOutboundTask(int orderDetailId, List<Dt_Inventory_Batch> inventory_Batches)
        {
            try
            {
                List<Dt_Task> tasks = new List<Dt_Task>();
                List<Dt_InventoryInfo> stockInfos = new List<Dt_InventoryInfo>();
                List<Dt_OutboundOrderDetail> outboundOrderDetails = new List<Dt_OutboundOrderDetail>();
                List<Dt_OutStockLockInfo> outStockLockInfos = new List<Dt_OutStockLockInfo>();
                List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
                Dt_OutboundOrder order = new Dt_OutboundOrder();
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
        /// ç”Ÿæˆå‡ºåº“任务
        /// </summary>