wangxinhui
2025-08-28 637e23e7df2eb7e9e3dc630f3cf4e212017c7e18
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Outbound.cs
@@ -284,13 +284,77 @@
            return content;
        }
        /// <summary>
        /// æ— çººå¸ƒå‡ºåº“
        /// </summary>
        /// <param name="Count"></param>
        /// <returns></returns>
        public WebResponseContent RequestWFBWMSTaskOut(int Count)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                List<Dt_AGVStationInfo> aGVStationInfos = _agvStationInfoRepository.QueryData(x => x.StationArea == AGVStationAreaEnum.AreaC.ObjToInt() && x.IsOccupied == WhetherEnum.False.ObjToInt());
                if (aGVStationInfos.Count < Count)
                {
                    return content.Error($"可用缓存数不足");
                }
                List<Dt_ProStockInfo> stockInfos = _stockRepository.ProStockInfoRepository.QueryData(x => x.ProStockAttribute == ProStockAttributeEnum.空托.ObjToInt() && x.StockStatus == StockStatusEmun.入库完成.ObjToInt()).OrderBy(x => x.CreateDate).Take(Count).ToList();
                List<Dt_LocationInfo> locationInfos = _basicRepository.LocationInfoRepository.QueryData(x => stockInfos.Select(x => x.LocationCode).Contains(x.LocationCode));
                if (stockInfos.Count < Count)
                {
                    return content.Error($"库存数量不足");
                }
                foreach (var item in stockInfos)
                {
                    Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.LocationCode == item.LocationCode);
                    if (locationInfo != null && (locationInfo.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || locationInfo.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && locationInfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt())
                    {
                        item.StockStatus = StockStatusEmun.出库锁定.ObjToInt();
                    }
                    else
                    {
                        return content.Error($"货位状态不正确");
                    }
                }
                List<Dt_Task> tasks = GetTasks(stockInfos, TaskTypeEnum.OutWFB);
                if (tasks == null || tasks.Count <= 0)
                {
                    return content.Error($"生成任务失败");
                }
                for (int i = 0; i < tasks.Count; i++)
                {
                    aGVStationInfos[i].IsOccupied = WhetherEnum.True.ObjToInt();
                    tasks[i].TargetAddress = aGVStationInfos[i].AGVStationCode;
                }
                //判断是否有出库单信息
                _unitOfWorkManage.BeginTran();
                //更新库存状态
                _stockRepository.ProStockInfoRepository.UpdateData(stockInfos);
                _agvStationInfoRepository.UpdateData(aGVStationInfos);
                //更新货位状态
                _basicRepository.LocationInfoRepository.UpdateLocationStatus(locationInfos, LocationStatusEnum.Lock);
                //加入货位变动记录
                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfos, LocationStatusEnum.Lock, LocationChangeType.OutboundAssignLocation, taskNums: tasks.Select(x => x.TaskNum).ToList());
                //新建任务
                BaseDal.AddData(tasks);
                _unitOfWorkManage.CommitTran();
                PushTasksToWCS(tasks);
                content.OK();
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
        /// <summary>
        /// åŽŸæ–™å‡ºåº“ä»»åŠ¡
        /// </summary>
        /// <param name="materielCode">物料代码</param>
        /// <param name="materielWide">物料幅宽</param>
        /// <param name="Count">卷数</param>
        /// <returns></returns>
        public WebResponseContent RequestYLWMSTaskOut(string materielCode, int materielWide, int Count)
        public WebResponseContent RequestYLWMSTaskOut(string materielCode, int materielWide, int Count, string address = "")
        {
            WebResponseContent content = new WebResponseContent();
            try
@@ -323,13 +387,20 @@
                }
                else
                {
                    taskTypeEnum = TaskTypeEnum.Outbound;
                    taskTypeEnum = TaskTypeEnum.PrintOutbound;
                }
                List<Dt_Task> tasks = GetTasks(stockInfos, taskTypeEnum);
                if (tasks == null || tasks.Count <= 0)
                {
                    return content.Error($"生成任务失败");
                }
                if (!string.IsNullOrEmpty(address))
                {
                    tasks.ForEach(x =>
                    {
                        x.TargetAddress= address;
                    });
                }
                //判断是否有出库单信息
                _unitOfWorkManage.BeginTran();
                //更新库存状态