肖洋
2025-01-04 a07e4702be045efa9b04b49a561463875dd28e0a
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs
@@ -1,4 +1,5 @@
using AngleSharp.Dom;
using log4net.Core;
using Mapster;
using Masuit.Tools;
using SixLabors.Fonts.Tables.AdvancedTypographic;
@@ -10,6 +11,7 @@
using WIDESEA_DTO.WMS;
using WIDESEA_IServices;
using WIDESEA_IStoragIntegrationServices;
using WIDESEA_StorageBasicRepository;
using WIDESEA_StoragIntegrationServices;
using WIDESEAWCS_BasicInfoRepository;
@@ -167,12 +169,19 @@
                        var agingOutputDto = MapToAgingOutputDto(stock);
                        content = await _agingInOrOutInputService.GetOCVOutputAsync(agingOutputDto);
                        var result = JsonConvert.DeserializeObject<BasicResult>(content.Data.ToString());
                        task.Remark = result.Success ? null : "NG";
                        if (!result.Success && result.MessageCode == "E10001")
                        if (content.Status)
                        {
                            await HandleOutBoundError(stock, task);
                            var result = JsonConvert.DeserializeObject<BasicResult>(content.Data.ToString());
                            task.Remark = result.Success ? null : "NG";
                            if (!result.Success && result.MessageCode == "E10001")
                            {
                                await HandleOutBoundError(stock, task);
                            }
                        }
                        else
                        {
                            task.Remark = "NG";
                        }
                    }
                }
@@ -181,6 +190,8 @@
            // 更新库存状态和任务状态
            (var loc, var tas) = UpdateStockAndTaskStatus(stock, task);
            var taskHty = task.Adapt<Dt_Task_Hty>();
            taskHty.FinishTime = DateTime.Now;
            DtStockInfo_Hty stockInfo_Hty = stock.Adapt<DtStockInfo_Hty>();
            stockInfo_Hty.ModifyDate = DateTime.Now;
@@ -266,11 +277,13 @@
    {
        var location = _locationRepository.QueryFirst(x => x.LocationCode == task.SourceAddress && x.RoadwayNo == task.Roadway);
        //var details = _stockInfoDetailRepository.QueryData(x => x.StockId == stock.Id);
        int lastStatus = location.LocationStatus;
        location.LocationStatus = (int)LocationEnum.Free;
        task.TaskState = (int)TaskOutStatusEnum.OutFinish;
        //task.CurrentAddress = task.NextAddress;
        //task.NextAddress = task.TargetAddress;
        _locationStatusChangeRecordRepository.AddLocationStatusChangeRecord(location, lastStatus, (int)StatusChangeTypeEnum.AutomaticDelivery, task.TaskNum);
        LogFactory.GetLog("任务完成").Info(true, "更新库存状态与任务状态");
        return (location, task);
@@ -403,6 +416,7 @@
            var boxing = await _boxingInfoRepository.QueryFirstNavAsync(x => x.PalletCode == task.PalletCode);
            var locationInf = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.TargetAddress && x.RoadwayNo == task.Roadway);
            int lastStatus = locationInf.LocationStatus;
            // 更新目标位置状态为库存中
            locationInf.LocationStatus = (int)LocationEnum.InStock;
@@ -414,6 +428,10 @@
                await _locationRepository.UpdateDataAsync(locationInf);
                await _task_HtyRepository.AddDataAsync(taskHty);
                await BaseDal.DeleteDataAsync(task);
                //记录货位变动信息
                _locationStatusChangeRecordRepository.AddLocationStatusChangeRecord(locationInf, lastStatus, (int)StatusChangeTypeEnum.AutomaticStorage, task.TaskNum);
                return content.OK("入库任务完成成功");
            }
            // 根据是否有组盘信息创建库存实例模型
@@ -423,6 +441,7 @@
            bool isResult = await ExecuteTransaction(stock, taskHty, locationInf, task.TaskId, boxing);
            if (isResult)
            {
                _locationStatusChangeRecordRepository.AddLocationStatusChangeRecord(locationInf, lastStatus, (int)StatusChangeTypeEnum.AutomaticStorage, task.TaskNum);
                content.OK("入库任务完成成功");
            }
            else
@@ -947,11 +966,17 @@
            // 创建并获取整盘电芯状态
            TrayCellsStatusDto trayCells = CreateTrayCellsStatusDto(area, input.PalletCode);
            content = await GetTrayCellStatusAsync(trayCells);
            if (!content.Status) return content;
            if (!content.Status)
            {
                ConsoleHelper.WriteErrorLine($"获取电芯状态失败:{content.Message}");
                return content;
            }
            var result = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(content.Data.ToString());
            if (!result.Success)
            {
                ConsoleHelper.WriteErrorLine($"获取电芯状态失败:{result.MOMMessage}");
                if (result.SerialNos.Count <= 0)
                {
                    // 空托盘入库逻辑
@@ -969,17 +994,27 @@
                    return content.Error(result.MOMMessage);
            }
            // 处理异常电芯情况
            var serialNosError = result.SerialNos.Where(x => x.SerialNoStatus != 1).ToList();
            if (serialNosError.Count > 0)
            if (result.SerialNos.Count <= 0)
            {
                return await HandleErrorCells(input, area, serialNosError);
                return await RequestTrayInTaskAsync(input);
            }
            else
            {
            var boxing = CreateBoxingInfo(result, input.PalletCode);
            if (boxing == null) return content.Error("组盘失败");
            return await ProcessBasedOnProcessCode(boxing, area, input, result);
                // 处理异常电芯情况
                var serialNosError = result.SerialNos.Where(x => x.SerialNoStatus != 1 && x.SerialNoStatus != 4).ToList();
                if (serialNosError.Count > 0)
                {
                    return await HandleErrorCells(input, area, serialNosError);
                }
                var boxing = CreateBoxingInfo(result, input.PalletCode);
                if (boxing == null) return content.Error("组盘失败");
                return await ProcessBasedOnProcessCode(boxing, area, input, result);
            }
        }
        catch (Exception err)
        {