wangxinhui
2025-11-12 f54b7815d8451f362554e3d2d09b4991ce13d4ff
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_TaskInfoService/MesTaskService.cs
@@ -30,6 +30,9 @@
using SqlSugar;
using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
using WIDESEA_DTO.MES;
using WIDESEA_External.Model;
using System.Text.Json;
using System.Text.RegularExpressions;
namespace WIDESEA_TaskInfoService
{
@@ -55,9 +58,9 @@
                {
                    return content.Error($"领料计划{nameof(MESAutoIssueDTO.OutDetailId)}{autoIssueDTO.OutDetailId}不存在");
                }
                if (outMESOrder.OutMESOrderStatus==OutOrderStatusEnum.关闭.ObjToInt())
                if (outMESOrder.OutMESOrderStatus==OutOrderStatusEnum.出库完成.ObjToInt())
                {
                    return content.Error($"领料计划{nameof(MESAutoIssueDTO.OutDetailId)}{outMESOrder.ProductOrderNo}工单已关闭");
                    return content.Error($"领料计划{nameof(MESAutoIssueDTO.OutDetailId)}{outMESOrder.ProductOrderNo}工单已出库完成");
                }
                //获取周转位置编号
                Dt_AGVStationInfo? stationInfo = _basicRepository.AGVStationInfoRepository.QueryFirst(x=>x.MESPointCode==autoIssueDTO.PointCode);
@@ -69,22 +72,53 @@
                {
                    return content.Error($"领料计划周转位{nameof(MESAutoIssueDTO.PointCode)}{autoIssueDTO.PointCode}存在空托");
                }
                //Dt_Task? task = BaseDal.QueryData(x => x.OrderNo == outMESOrder.OutMESOrderNo && x.TaskStatus == TaskStatusEnum.CallPending.ObjToInt()).OrderByDescending(x => x.Grade).ThenBy(x => x.TaskNum).FirstOrDefault();
                ////获取任务
                //if (task == null)
                //{
                //    return content.Error($"未找到领料计划编号{outMESOrder.ProductOrderNo}可配送任务");
                //}
                //task.TaskStatus = TaskStatusEnum.New.ObjToInt();
                //task.TargetAddress = stationInfo.AGVStationCode;
                //PushTasksToWCS(new List<Dt_Task> { task });
                Dt_Task? task = BaseDal.QueryData(x => x.OrderNo == outMESOrder.OutMESOrderNo && x.TaskStatus == TaskStatusEnum.CallPending.ObjToInt()).OrderByDescending(x => x.Grade).ThenBy(x => x.TaskNum).FirstOrDefault();
                //获取任务
                if (task == null)
                {
                    return content.Error($"未找到领料计划编号{outMESOrder.ProductOrderNo}可配送任务");
                }
                //获取任务出库详情
                Dt_OutStockLockInfo outStockLockInfo = _outboundRepository.OutStockLockInfoRepository.QueryFirst(x => x.TaskNum == task.TaskNum);
                //调用MES配送出发指令
                PlanDistributionInfo planDistribution = new PlanDistributionInfo()
                {
                    DispatchPlanMaterialId = autoIssueDTO.OutDetailId,
                    InvItemCode = task.MaterielCode,
                    Quantity = outStockLockInfo.AssignQuantity,
                    SendOutTime = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"),
                    ArrivalTime = DateTime.Now.AddMinutes(10).ToString("yyyy-MM-dd hh:mm:ss")
                };
                MESDispatchModel dispatchModel= new MESDispatchModel()
                {
                    PRO_DispachPlanDistributionInfos=new List<PlanDistributionInfo> (){ planDistribution }
                };
                _unitOfWorkManage.BeginTran();
                task.TaskStatus = TaskStatusEnum.New.ObjToInt();
                task.TargetAddress = stationInfo.AGVStationCode;
                BaseDal.UpdateData(task);
                MESResponse mESResponse = _invokeMESService.MESDispatchUp(dispatchModel).DeserializeObject<MESResponse>() ?? throw new Exception("未获取到返回信息");
                if (!mESResponse.Result)
                {
                    throw new Exception($"MES配送出发接口调用报错,MES返回信息{DecodeUnicode(mESResponse.Msg)}");
                }
                PushTasksToWCS(new List<Dt_Task> { task });
                _unitOfWorkManage.CommitTran();
                return content.OK("叫料成功");
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                content.Error(ex.Message);
            }
            return content;
        }
        //将Unicode解析成中文
        public static string DecodeUnicode(string input)
        {
            return Regex.Replace(input, @"\\u([0-9a-fA-F]{4})", match => {
                return ((char)Convert.ToInt32(match.Groups[1].Value, 16)).ToString();
            });
        }
        public WebResponseContent ReceiveManualIssue(MESManualIssueDTO manualIssueDTO)
@@ -112,15 +146,38 @@
                {
                    return content.Error($"领料计划周转位{nameof(MESAutoIssueDTO.PointCode)}{manualIssueDTO.PointCode}不存在");
                }
                //Dt_Task? task = BaseDal.QueryData(x => x.OrderNo == outMESOrder.OutMESOrderNo && x.TaskStatus == TaskStatusEnum.CallPending.ObjToInt()).OrderByDescending(x => x.Grade).ThenBy(x => x.TaskNum).FirstOrDefault();
                ////获取任务
                //if (task == null)
                //{
                //    return content.Error($"未找到领料计划编号{outMESOrder.ProductOrderNo}可配送任务");
                //}
                //task.TaskStatus = TaskStatusEnum.New.ObjToInt();
                //task.TargetAddress = stationInfo.AGVStationCode;
                //PushTasksToWCS(new List<Dt_Task> { task });
                Dt_Task? task = BaseDal.QueryData(x => x.OrderNo == outMESOrder.OutMESOrderNo && x.TaskStatus == TaskStatusEnum.CallPending.ObjToInt()).OrderByDescending(x => x.Grade).ThenBy(x => x.TaskNum).FirstOrDefault();
                //获取任务
                if (task == null)
                {
                    return content.Error($"未找到领料计划编号{outMESOrder.ProductOrderNo}可配送任务");
                }
                //获取任务出库详情
                Dt_OutStockLockInfo outStockLockInfo = _outboundRepository.OutStockLockInfoRepository.QueryFirst(x => x.TaskNum == task.TaskNum);
                //调用MES配送出发指令
                PlanDistributionInfo planDistribution = new PlanDistributionInfo()
                {
                    DispatchPlanMaterialId = manualIssueDTO.OutDetailId,
                    InvItemCode = task.MaterielCode,
                    Quantity = outStockLockInfo.AssignQuantity,
                    SendOutTime = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"),
                    ArrivalTime = DateTime.Now.AddMinutes(10).ToString("yyyy-MM-dd hh:mm:ss")
                };
                MESDispatchModel dispatchModel = new MESDispatchModel()
                {
                    PRO_DispachPlanDistributionInfos = new List<PlanDistributionInfo>() { planDistribution }
                };
                _unitOfWorkManage.BeginTran();
                task.TaskStatus = TaskStatusEnum.New.ObjToInt();
                task.TargetAddress = stationInfo.AGVStationCode;
                BaseDal.UpdateData(task);
                MESResponse mESResponse = _invokeMESService.MESDispatchUp(dispatchModel).DeserializeObject<MESResponse>() ?? throw new Exception("未获取到返回信息");
                if (!mESResponse.Result)
                {
                    throw new Exception($"MES配送出发接口调用报错,MES返回信息{DecodeUnicode(mESResponse.Msg)}");
                }
                PushTasksToWCS(new List<Dt_Task> { task });
                _unitOfWorkManage.CommitTran();
                return content.OK("叫料成功");
            }
            catch (Exception ex)