1
刘磊
2024-12-21 8f58605189e6c6f37680651c4cde0f1838a39186
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs
@@ -1,20 +1,12 @@

using AngleSharp.Io;
using log4net.Core;
using Mapster;
using Mapster;
using Masuit.Tools;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
using SixLabors.Fonts.Tables.AdvancedTypographic;
using System.Text.RegularExpressions;
using WIDESEA_Core.Const;
using WIDESEA_DTO.MOM;
using WIDESEA_DTO.WMS;
using WIDESEA_IServices;
using WIDESEA_IStoragIntegrationServices;
using WIDESEA_Model.Models;
using WIDESEA_Services;
using WIDESEA_StorageBasicRepository;
using WIDESEAWCS_BasicInfoRepository;
using WIDESEAWCS_Model.Models;
namespace WIDESEA_StorageTaskServices;
@@ -75,7 +67,6 @@
    #region 外部接口方法
    #region 出库任务完成
    public async Task<WebResponseContent> CompleteStackTaskAsync(Dt_Task task, DtStockInfo stock)
    {
@@ -164,13 +155,13 @@
            {
                SlotNo = x.OrderNo.ToInt32(),
                SerialNo = x.SerialNumber,
                SerialNoResult = isNG,
                SerialNoResult = true, //isNG,
                ParameterInfo = new List<ParameterInfoOutput> {
                    new ParameterInfoOutput() {
                        Value = outHours.ToString(),
                        ParameterCode =parameterInfo.ParameterCode,
                        ParameterDesc = parameterInfo.Description,
                        ParameterResult  = isNG.ToString(),
                        ParameterResult  = "OK", //isNG.ToString(),
                        TargetValue = parameterInfo.TargetValue,
                        LowerLomit = parameterInfo.LowerSpecificationsLimit,
                        UpperLimit = parameterInfo.UpperSpecificationsLimit,
@@ -184,7 +175,6 @@
    private void ValidateResponse(WebResponseContent content)
    {
    }
    private (DtLocationInfo, Dt_Task) UpdateStockAndTaskStatus(DtStockInfo stock, Dt_Task task)
@@ -304,7 +294,6 @@
                // 执行数据库事务
                await _unitOfWorkManage.UseTranAsync(async () =>
                {
                    // 添加历史任务
                    var isTaskHtyAdd = await _task_HtyRepository.AddDataAsync(taskHtyNG) > 0;
@@ -326,9 +315,15 @@
            // 创建历史任务实例模型
            var taskHty = CreateHistoricalTask(task);
            if (task.TaskType == (int)TaskInboundTypeEnum.InQuality)
            {
                await _locationRepository.UpdateDataAsync(locationInf);
                await _task_HtyRepository.AddDataAsync(taskHty);
                await BaseDal.DeleteDataAsync(task);
                return content.OK("入库任务完成成功");
            }
            // 根据是否有组盘信息创建库存实例模型
            DtStockInfo stock = boxing == null ? CreateEmptyPalletStock(task, locationInf) : CreateFullPalletStock(task, locationInf, boxing);
            // 执行数据库事务
            bool isResult = await ExecuteTransaction(stock, taskHty, locationInf, task.TaskId, boxing);
@@ -432,7 +427,6 @@
                throw new Exception("未找到对应区域信息");
        }
        var boxDetail = boxing.BoxingInfoDetails.Adapt<List<DtStockInfoDetail>>();
        boxDetail.ForEach(x => { x.Status = (int)StockStateEmun.已入库; });
        var stock = new DtStockInfo()
@@ -445,6 +439,9 @@
            AreaCode = area.AreaCode,
            LocationId = loation.Id,
            StockInfoDetails = boxDetail,
            ProcessCode = boxing.ProcessCode,
            NextProcessCode = boxing.NextProcessCode,
            Remark = boxing.BoxingInfoDetails.Count().ToString(),
        };
        // 处理请求参数
@@ -461,6 +458,10 @@
        var result = _agingInOrOutInputService.GetOCVInputAsync(agingInputDto).Result;
        var respone = JsonConvert.DeserializeObject<ResponeAgingInputDto>(result.Data.ToString());
        if (respone.ProductionLine == null || respone.ParameterInfos == null || respone.SpecialParameterDuration.IsNullOrEmpty())
        {
            throw new Exception("MOM数据返回错误");
        }
        stock.LinedProcessFeedbackTime = respone.LinedProcessFeedbackTime;
        stock.SpecialParameterDuration = respone.SpecialParameterDuration;
        //2024年11月16日:新增字段计算应出库时间
@@ -524,6 +525,7 @@
            case (int)TaskRelocationTypeEnum.Relocation:
                return await CompleteTransferTaskAsync(task, stock);
            default:
                return content.Error("任务类型不存在");
        }
@@ -534,6 +536,7 @@
    #region 请求任务入库
    #region
    /// <summary>
    /// 请求任务巷道
    /// </summary>
@@ -568,7 +571,6 @@
                    return content.OK(data: taskDTO);
                }
            }
            var stock = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == input.PalletCode && x.IsFull);
            if (stock != null)
@@ -721,18 +723,23 @@
                    case "CH01":
                        areaIn = "CH001";
                        break;
                    case "JZ01":
                        areaIn = "JZ001";
                        break;
                    case "GW01":
                        areaIn = "GWSC1";
                        break;
                    case "CW01":
                        areaIn = "CWSC1";
                        break;
                    case "CW02":
                        areaIn = "CWSC2";
                        break;
                    default:
                        break;
                }
@@ -764,7 +771,7 @@
        return content;
    }
    #endregion
    #endregion 请求任务入库
    public async Task<WebResponseContent> RequestTaskAsync(RequestTaskDto input)
    {
@@ -795,7 +802,7 @@
                    PalletCode = stock.PalletCode,
                    SourceAddress = input.Position,
                    CurrentAddress = input.Position,
                    TaskState = (int)TaskInStatusEnum.InNew,
                    TaskState = stock.LocationInfo.RoadwayNo.Contains("CH") ? (int)TaskInStatusEnum.InNew : (int)TaskInStatusEnum.Line_InFinish,
                    TaskType = (int)TaskInboundTypeEnum.InQuality,
                    TaskNum = BaseDal.GetTaskNo().Result,
                    Creater = "System", // 修正拼写错误
@@ -803,12 +810,15 @@
                    TaskId = 0,
                };
                var taskDTO = CreateTaskDTO(task);
                var taskDTO = CreateTaskDTO(taskNew);
                BaseDal.AddData(taskNew);
                return content.OK(data: taskDTO);
                // TODO质检回库
            }
            // 根据位置查询区域信息
            var area = await QueryAreaInfoByPosition(input.Position.Replace("-1", ""));
            var areaCode = Regex.Replace(input.Position, @"-(\d+)", "");
            var area = await QueryAreaInfoByPosition(areaCode);
            if (area == null)
            {
                return content.Error("该点位不在区域列表中存在");
@@ -825,7 +835,15 @@
                if (result.SerialNos.Count <= 0)
                {
                    // 空托盘入库逻辑
                    return await RequestTrayInTaskAsync(input);
                    var staion = _stationManagerRepository.QueryFirst(x => x.stationChildCode == input.Position && x.stationType == 1 && x.remark == "IN");
                    if (staion != null)
                    {
                        return await HandleErrorCells(input, area);
                    }
                    else
                    {
                        return await RequestTrayInTaskAsync(input);
                    }
                }
                else
                    return content.Error(result.MOMMessage);
@@ -837,7 +855,6 @@
            {
                return await HandleErrorCells(input, area, serialNosError);
            }
            var boxing = CreateBoxingInfo(result, input.PalletCode);
            if (boxing == null) return content.Error("组盘失败");
@@ -853,6 +870,7 @@
        return content;
    }
    /// <summary>
    /// 更新任务货位
    /// </summary>
@@ -868,11 +886,9 @@
                return content.Error($"暂未找到【{input.PalletCode}】的任务");
            return content = await UpdateExistingTask(input, task);
        }
        catch (Exception err)
        {
            throw;
        }
    }
@@ -887,7 +903,6 @@
        WebResponseContent content = new WebResponseContent();
        try
        {
            // 调用BaseDal.QueryFirstAsync方法,查询任务
            var task = await BaseDal.QueryFirstAsync(x => x.PalletCode == input.PalletCode);
            if (task != null && task.TaskState == (int)TaskInStatusEnum.InNew)
@@ -908,7 +923,6 @@
                return content.OK(data: task);
            }
            var stationManagers = _stationManagerRepository.QueryData(x => x.stationType == 6 && x.stationChildCode == input.Position).FirstOrDefault();
            if (stationManagers == null)
            {
@@ -923,7 +937,6 @@
        }
        catch (Exception)
        {
            throw;
        }
    }
@@ -968,7 +981,7 @@
        };
    }
    #endregion 请求任务入库
    #endregion 外部接口方法
    #region 请求出库(实盘&空盘)
@@ -1120,7 +1133,7 @@
        };
    }
    #endregion 请求出库
    #endregion 请求出库(实盘&空盘)
    #region 任务状态更改
@@ -1170,34 +1183,7 @@
        return content;
    }
    #endregion
    #region 出库解盘
    /// <summary>
    /// 出库解盘接口
    /// </summary>
    /// <param name="taskNum"></param>
    /// <returns></returns>
    public async Task<WebResponseContent> OutUnblockInterface(int taskNum)
    {
        WebResponseContent content = new WebResponseContent();
        try
        {
            var task = await BaseDal.QueryFirstAsync(x => x.TaskNum == taskNum);
            if (task == null)
                return content.Error("未找到任务");
            task.TaskState = (int)TaskOutStatusEnum.Line_OutFinish;
            var taskHty = CreateHistoricalTask(task);
        }
        catch (Exception ex)
        {
            content.Error(ex.Message);
        }
        return content;
    }
    #endregion
    #endregion 任务状态更改
    #region 指定任务出库
@@ -1224,8 +1210,19 @@
                taskType = (int)TaskOutboundTypeEnum.OutQuality;
            else
                taskType = (int)TaskOutboundTypeEnum.OutTray;
            // 创建并添加任务到数据库
            task = CreateTask(stockInfo, "1020-1", taskType);
            if (stockInfo.AreaCode.Contains("CH"))
            {
                // 创建并添加任务到数据库
                task = CreateTask(stockInfo, "1020-1", taskType);
            }
            else
            {
                if (stockInfo.LocationInfo.RoadwayNo == "JZSC1")
                {
                    task = CreateTask(stockInfo, "1359-4", taskType);
                }
            }
            //var taskId = await BaseDal.AddDataAsync(task);
            //if (taskId <= 0)
            //{
@@ -1263,6 +1260,7 @@
        return content;
    }
    private string GetWCSIpReceiveTask()
    {
        var configs = _configService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
@@ -1275,7 +1273,7 @@
        return wmsBase + ipAddress;
    }
    #endregion
    #endregion 指定任务出库
    #endregion 外部接口方法
@@ -1496,7 +1494,6 @@
                                            .Include(x => x.BoxingInfoDetails)
                                            .ExecuteCommandAsync();
                }
            }
            var stocks = _stockInfoRepository.QueryData(x => x.AreaCode == stock.AreaCode && x.ProductionLine == stock.ProductionLine && x.SpecialParameterDuration != stock.SpecialParameterDuration);
@@ -1608,7 +1605,6 @@
                _unitOfWorkManage.CommitTran();
                return content.OK(data: task);
            }
        }
        catch (Exception ex)
        {