huangxiaoqiang
2025-11-29 f9e8a2d52fe52fb2389892a46c12d4d262ee9aaf
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs
@@ -105,6 +105,13 @@
        WebResponseContent content = new WebResponseContent();
        try
        {
            if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.CarryGroup)
            {
                var result1 = UpdateLocationStatus(task.SourceAddress, LocationEnum.Free, task.TaskNum.Value, StatusChangeTypeEnum.AutomaticOutbound);
                await _locationStatusChangeRecordRepository.AddDataAsync(result1.Item1);
                await _locationRepository.UpdateDataAsync(result1.Item2);
            }
            task.TaskState = (int)TaskOutStatusEnum.OutFinish;
            var taskHty = task.Adapt<Dt_Task_Hty>();
            taskHty.FinishTime = DateTime.Now;
@@ -113,14 +120,15 @@
            stock.ModifyDate = DateTime.Now;
            stock.LocationCode = task.TargetAddress;
            var result2 = UpdateLocationStatus(task.TargetAddress, LocationEnum.InStock, task.TaskNum.Value, StatusChangeTypeEnum.AutomaticOutbound);
            DtStockInfo_Hty stockInfo_Hty = stock.Adapt<DtStockInfo_Hty>();
            var orderDetails = _orderOutDetailsRepository.QueryData(x => x.PalletCode == task.PalletCode);
            List<Dt_OrderOutDetails_Hty> orderdetailshtys = new List<Dt_OrderOutDetails_Hty>();
            orderDetails.ForEach(item =>
            {
                orderdetailshtys.Add(item.Adapt<Dt_OrderOutDetails_Hty>());
            });
        {
            orderdetailshtys.Add(item.Adapt<Dt_OrderOutDetails_Hty>());
        });
            await ERPAllocateOut(stock);
@@ -172,8 +180,9 @@
                boxingInfo.BoxingInfoDetails = mergedDetails;
            }
            await _unitOfWorkManage.UseTranAsync(async () =>
            {
            //await _unitOfWorkManage.UseTranAsync(async () =>
            //{
            _unitOfWorkManage.BeginTran();
                await DeleteStockInfoAsync(stock.Id);
                _boxingInfoRepository.UpdateDataNav(boxingInfo);
                await DeleteStockInfoDetailsAsync(stock.StockInfoDetails);
@@ -185,12 +194,14 @@
                await DeleteTaskAsync(task.TaskId);
                await AddTaskHtyAsync(taskHty);
            });
            _unitOfWorkManage.CommitTran();
            //});
            content.OK("出库完成");
        }
        catch (Exception ex)
        {
            _unitOfWorkManage.RollbackTran();
            task.ErrorMessage = ex.Message;
            await BaseDal.UpdateDataAsync(task);
            return content.Error(ex.Message);
@@ -268,7 +279,15 @@
            {
                return content.Error("未找到组盘数据");
            }
            await ERPAllocate(boxinfo);
            if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.CarryGroup)
            {
                var result1 = UpdateLocationStatus(task.SourceAddress, LocationEnum.Free, task.TaskNum.Value, StatusChangeTypeEnum.AutomaticInbound);
                await _locationStatusChangeRecordRepository.AddDataAsync(result1.Item1);
                await _locationRepository.UpdateDataAsync(result1.Item2);
            }
            var stock = CreateStock(boxinfo, task);
@@ -280,18 +299,22 @@
            var result2 = UpdateLocationStatus(task.TargetAddress, LocationEnum.InStock, task.TaskNum.Value, StatusChangeTypeEnum.AutomaticInbound);
            await _unitOfWorkManage.UseTranAsync(async () =>
            {
                await _stockInfoRepository.AddDataNavAsync(stock);
            //await _unitOfWorkManage.UseTranAsync(async () =>
            //{
            _unitOfWorkManage.BeginTran();
            await _stockInfoRepository.AddDataNavAsync(stock);
                await DeleteTaskAsync(task.TaskId);
                await AddTaskHtyAsync(taskHty);
                await _locationStatusChangeRecordRepository.AddDataAsync(result2.Item1);
                await _locationRepository.UpdateDataAsync(result2.Item2);
            });
            _unitOfWorkManage.CommitTran();
            //});
            await ERPAllocate(boxinfo);
            content.OK("入库完成");
        }
        catch (Exception ex)
        {
            _unitOfWorkManage.RollbackTran();
            task.ErrorMessage = ex.Message;
            await BaseDal.UpdateDataAsync(task);
            return content.Error(ex.Message);
@@ -339,64 +362,6 @@
        };
    }
    #endregion å…¥åº“任务完成
    #region AGV搬运任务完成
    public async Task<WebResponseContent> CompleteCarryTaskAsync(Dt_Task task,DtStockInfo stockInfo)
    {
        WebResponseContent content = new WebResponseContent();
        try
        {
            var Sourcelocation = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.SourceAddress);
            var Targetlocation = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.TargetAddress);
            //UpdateLocationStatus(Sourcelocation, LocationEnum.Free);
            //UpdateLocationStatus(Targetlocation, LocationEnum.InStock);
            task.TaskState = (int)TaskAGVCarryStatusEnum.CarryFinish;
            var taskHty = task.Adapt<Dt_Task_Hty>();
            taskHty.FinishTime = DateTime.Now;
            taskHty.OperateType = App.User.UserName != null ? (int)OperateTypeEnum.人工完成 : (int)OperateTypeEnum.自动完成;
            taskHty.Creater = App.User.UserName != null ? App.User.UserName : "System";
            await _unitOfWorkManage.UseTranAsync(async () =>
            {
                await DeleteTaskAsync(task.TaskId);
                await AddTaskHtyAsync(taskHty);
            });
        }
        catch (Exception ex)
        {
            return content.Error(ex.Message);
        }
        return content;
    }
    #endregion
    #region AGV跨楼层任务完成
    public async Task<WebResponseContent> CompleteAcrossFloorTaskAsync(Dt_Task task, DtStockInfo stockInfo)
    {
        WebResponseContent content = new WebResponseContent();
        try
        {
            task.TaskState = (int)TaskAcrossFloorStatusEnum.CarryFinish;
            var taskHty = task.Adapt<Dt_Task_Hty>();
            taskHty.FinishTime = DateTime.Now;
            taskHty.OperateType = App.User.UserName != null ? (int)OperateTypeEnum.人工完成 : (int)OperateTypeEnum.自动完成;
            taskHty.Creater = App.User.UserName != null ? App.User.UserName : "System";
            await _unitOfWorkManage.UseTranAsync(async () =>
            {
                await DeleteTaskAsync(task.TaskId);
                await AddTaskHtyAsync(taskHty);
            });
        }
        catch (Exception ex)
        {
            return content.Error(ex.Message);
        }
        return content;
    }
    #endregion
    #region ä»»åŠ¡å®Œæˆ
@@ -499,14 +464,14 @@
                return content.Error("托盘信息不存在,请确认托盘已组盘成功");
            }
            foreach (var item in boxingInfo.BoxingInfoDetails)
            {
                var ERPStock = SqlSugarHelper.DBERPtext.Queryable<用友即时库存_ST>().Where(x => x.存储地点名称 == item.Warehouse && x.料号 == item.MaterielCode && x.品名 == item.MaterielName && x.库存数量 >= item.Quantity).ToList().FirstOrDefault();
                if (ERPStock == null)
                {
                    return content.Error($"组盘数据未在ERP库存数据中,请人工确认数据是否正确");
                }
            }
            //foreach (var item in boxingInfo.BoxingInfoDetails)
            //{
            //    var ERPStock = SqlSugarHelper.DBERP.Queryable<用友即时库存_ST>().Where(x => x.存储地点名称 == item.Warehouse && x.料号 == item.MaterielCode && x.品名 == item.MaterielName && x.库存数量 >= item.Quantity).ToList().FirstOrDefault();
            //    if (ERPStock == null)
            //    {
            //        return content.Error($"组盘数据未在ERP库存数据中,请人工确认数据是否正确");
            //    }
            //}
            var StartAddress = await _locationRepository.QueryFirstAsync(x => x.LocationCode == taskDto.Position);
            if (StartAddress == null)
@@ -649,7 +614,7 @@
    /// </summary>
    /// <param name="palletCode"></param>
    /// <returns></returns>
    public async Task<WebResponseContent> OutBoundTaskAsync(string palletCode,string remark)
    public async Task<WebResponseContent> OutBoundTaskAsync(string palletCode,string remark,int doubleTray)
    {
        WebResponseContent content = new WebResponseContent();
        try
@@ -676,7 +641,7 @@
                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, DoubleTray= doubleTray });
            List<Dt_InventoryRecord> records = new List<Dt_InventoryRecord>();
            stcok.StockInfoDetails.ForEach(x =>
            {
@@ -709,6 +674,12 @@
        }
    }
    /// <summary>
    /// å…¶ä»–出库
    /// </summary>
    /// <param name="details"></param>
    /// <returns></returns>
    public async Task<WebResponseContent> OtherOutBoundTaskAsync(List<DtStockInfoDetail> details)
    {
@@ -1021,7 +992,7 @@
                await BaseDal.AddDataAsync(taskNew);
            });
            await SendWCSTask(CreateListTaskDTO(taskNew));
            return content.OK();
            return content.OK("成功");
        }
        catch (Exception ex)
        {
@@ -1126,6 +1097,7 @@
            Remark = StartAddress.AreaId.ToString(),
            AGVTaskNum = GenerateUniqueId(),
            Floor = StartAddress.Floor,
            DoubleTray = taskDto.DoubleTray,
        };
    }
@@ -2086,6 +2058,7 @@
            TaskType = task.TaskType,
            Floor =task.Floor,
            AGVTaskNum = task.AGVTaskNum,
            DoubleTray = task.DoubleTray,
        } };
    }
@@ -2105,6 +2078,7 @@
            AGVTaskNum = task.AGVTaskNum,
            Remark = task.Remark,
            Floor = task.Floor,
            DoubleTray = task.DoubleTray,
        };
    }
    private List<WMSTaskDTO> CreateTaskDTO(List<Dt_Task> task)
@@ -2126,6 +2100,7 @@
                AGVTaskNum = item.AGVTaskNum,
                Remark = item.Remark,
                Floor = item.Floor,
                DoubleTray = item.DoubleTray,
            });
        }