1
huangxiaoqiang
2025-11-10 8f7e6826d51a25c7b368c210dbb321d423d24a85
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs
@@ -60,6 +60,7 @@
    private readonly ISys_ConfigService _configService;
    private readonly IDt_OrderOutDetailsRepository _orderOutDetailsRepository;
    private readonly IDt_WareAreaInfoRepository _wareAreaInfoRepository;
    private readonly IDt_InventoryRecordRepository _inventoryRecordRepository;
    public Dt_TaskService(IDt_TaskRepository BaseDal,
                                IUnitOfWorkManage unitOfWorkManage,
@@ -75,7 +76,8 @@
                                IDt_StationManagerRepository stationManagerRepository,
                                ISys_ConfigService configService,
                                IDt_OrderOutDetailsRepository orderOutDetailsRepository,
                                IDt_WareAreaInfoRepository wareAreaInfoRepository) : base(BaseDal)
                                IDt_WareAreaInfoRepository wareAreaInfoRepository,
                                IDt_InventoryRecordRepository inventoryRecordRepository) : base(BaseDal)
    {
        _unitOfWorkManage = unitOfWorkManage;
        _stockInfoRepository = stockInfoRepository;
@@ -91,6 +93,7 @@
        _configService = configService;
        _orderOutDetailsRepository = orderOutDetailsRepository;
        _wareAreaInfoRepository = wareAreaInfoRepository;
        _inventoryRecordRepository = inventoryRecordRepository;
    }
    #region å¤–部接口方法
@@ -487,6 +490,12 @@
        WebResponseContent content = new WebResponseContent();
        try
        {
            var task = BaseDal.QueryFirst(x => x.PalletCode == taskDto.PalletCode);
            if (task != null)
            {
                return content.Error("该托盘已经存在任务,请勿重复下发");
            }
            var boxingInfo = await _boxingInfoRepository.QueryFirstNavAsync(x => x.PalletCode == taskDto.PalletCode && x.StockStatus == (int)StockStateEmun.组盘暂存);
            if (boxingInfo == null)
@@ -744,14 +753,28 @@
                return content.Error("该托盘库存已在出库缓存区");
            }
            Dt_Task taskNew = await RequestOutboundTaskAsync(new RequestTaskDto { PalletCode = palletCode, AreaId = 2, Position = stcok.LocationCode, TaskType = (int)TaskOutboundTypeEnum.Outbound });
            Dt_Task taskNew = await RequestOutboundTaskAsync(new RequestTaskDto { PalletCode = palletCode, AreaId = 2, Position = stcok.LocationCode, TaskType = (int)TaskOutboundTypeEnum.Outbound });
            List<Dt_InventoryRecord> records = new List<Dt_InventoryRecord>();
            stcok.StockInfoDetails.ForEach(x =>
            {
                records.Add(new Dt_InventoryRecord()
                {
                    PalletCode = stcok.PalletCode,
                    MaterielCode = x.MaterielCode,
                    MaterielName = x.MaterielName,
                    Quantity = x.Quantity,
                    Status = (int)InventoryStatus.Normal,
                    Remark = remark,
                });
            });
            var taskDto = CreateListTaskDTO(taskNew);
            var result = GetlcoationState(taskNew, (int)StatusChangeTypeEnum.AutomaticOutbound);
            await _unitOfWorkManage.UseTranAsync(async () =>
            {
                BaseDal.AddData(taskNew);
                _stockInfoRepository.UpdateData(stcok);
                await BaseDal.AddDataAsync(taskNew);
                await _inventoryRecordRepository.AddDataAsync(records);
                await _stockInfoRepository.UpdateDataAsync(stcok);
                await _locationStatusChangeRecordRepository.AddDataAsync(result.Item1);
                await _locationRepository.UpdateDataAsync(result.Item2);
            });
@@ -966,7 +989,7 @@
        }
        if (!LocationIsOutBound(StartAddress))
        {
            throw new Exception($"起点库位{StartAddress.LocationCode}出库路径被占用,请人工确认再下发任务");
            throw new Exception($"起点库位{StartAddress.LocationCode}出库路径被占用,请稍后重试");
        }
        DtLocationInfo location = null;
        if (taskDto.AreaId != 0)
@@ -1238,6 +1261,10 @@
                //todo查询内侧库存信息
                var stock = await _stockInfoRepository.QueryFirstAsync(x => x.LocationCode == locationLateral.LocationCode);
                if (stock == null)
                {
                    return content.Error($"未找到浅位{locationLateral.LocationCode}库存信息");
                }
                Dt_Task taskNew = new Dt_Task
                {
                    Grade = 1,
@@ -1260,7 +1287,6 @@
                var taskDTO = CreateListTaskDTO(taskNew);
                var isResult = await AddTaskAsync(taskNew, locationLateral, TargetAddress);
                //UpdateLocationStatus(TargetAddress, LocationEnum.Lock);
                UpdateLocationStatus(TargetAddress, LocationEnum.Lock, taskNew.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticRelocation);
                if (!isResult)
                {
@@ -1333,28 +1359,43 @@
                        return content.Error("起点未定义或终点区域未找到空闲库位");
                    }
                    //todo查询移库库存信息
                    Dt_Task taskNew = new Dt_Task
                    var stock = _stockInfoRepository.QueryFirst(x => x.LocationCode == item.LocationCode);
                    if (stock == null)
                    {
                        Grade = item.Column,
                        Roadway = "AGV",
                        TargetAddress = Targetlocation.LocationCode,
                        Dispatchertime = DateTime.Now,
                        MaterialNo = "",
                        NextAddress = Targetlocation.LocationCode,
                        OrderNo = null,
                        PalletCode = _random.Next(0, 10000).ToString(),
                        SourceAddress = item.LocationCode,
                        CurrentAddress = item.LocationCode,
                        TaskState = (int)TaskAGVCarryStatusEnum.CarryNew,
                        TaskType = (int)TaskRelocationTypeEnum.Relocation,
                        TaskNum = BaseDal.GetTaskNo().Result,
                        CreateDate = DateTime.Now,
                        TaskId = 0,
                        AGVTaskNum = GenerateUniqueId(),
                        Floor = item.Floor,
                        Remark = item.AreaId.ToString(),
                    };
                        return content.Error($"未找到浅位{item.LocationCode}库存信息");
                    }
                    var Relocationtask = BaseDal.QueryFirst(x => x.PalletCode == stock.PalletCode && x.TaskType == (int)TaskRelocationTypeEnum.Relocation);
                    Dt_Task taskNew = new Dt_Task();
                    if (Relocationtask != null)
                    {
                        taskDTO.Add(CreateTaskDTO(Relocationtask));
                        //return content.OK(data:taskDTO);
                        continue;
                    }
                    else
                    {
                        taskNew = new Dt_Task
                        {
                            Grade = item.Column,
                            Roadway = "AGV",
                            TargetAddress = Targetlocation.LocationCode,
                            Dispatchertime = DateTime.Now,
                            MaterialNo = "",
                            NextAddress = Targetlocation.LocationCode,
                            OrderNo = null,
                            PalletCode = stock.PalletCode,
                            SourceAddress = item.LocationCode,
                            CurrentAddress = item.LocationCode,
                            TaskState = (int)TaskAGVCarryStatusEnum.CarryNew,
                            TaskType = (int)TaskRelocationTypeEnum.Relocation,
                            TaskNum = BaseDal.GetTaskNo().Result,
                            CreateDate = DateTime.Now,
                            TaskId = 0,
                            AGVTaskNum = GenerateUniqueId(),
                            Floor = item.Floor,
                            Remark = item.AreaId.ToString(),
                        };
                    }
                    taskDTO.Add(CreateTaskDTO(taskNew));
                    var isResult = await AddTaskAsync(taskNew, item, Targetlocation);
@@ -2062,6 +2103,7 @@
            TaskState = task.TaskState,
            Id = 0,
            TaskType = task.TaskType,
            Floor =task.Floor,
            AGVTaskNum = task.AGVTaskNum,
        } };
    }
@@ -2080,7 +2122,8 @@
            Id = 0,
            TaskType = task.TaskType,
            AGVTaskNum = task.AGVTaskNum,
            Remark= task.Remark
            Remark = task.Remark,
            Floor = task.Floor,
        };
    }
@@ -2264,7 +2307,7 @@
                TaskNum = task.TaskNum.Value,
                LocationId = StartAddress.Id,
                LocationCode = StartAddress.LocationCode,
                ChangeType = (int)StatusChangeTypeEnum.AutomaticInbound,
                ChangeType = (int)StatusChangeTypeEnum.AutomaticRelocation,
            },
            new LocationChangeRecordDto()
            {
@@ -2273,7 +2316,7 @@
                TaskNum = task.TaskNum.Value,
                LocationId = EndAddress.Id,
                LocationCode = EndAddress.LocationCode,
                ChangeType = (int)StatusChangeTypeEnum.AutomaticInbound,
                ChangeType = (int)StatusChangeTypeEnum.AutomaticRelocation,
            },
        };