From b513ce3a4527e998da66c6f179a279472c7262a8 Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期二, 18 十一月 2025 10:59:46 +0800
Subject: [PATCH] 代码更新优化
---
项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/MesTaskService.cs | 195 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 193 insertions(+), 2 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/MesTaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/MesTaskService.cs"
index 7e96894..95aa5f8 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/MesTaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/MesTaskService.cs"
@@ -19,7 +19,6 @@
using WIDESEA_Core.Helper;
using WIDESEA_DTO;
using WIDESEA_DTO.ERP;
-using WIDESEA_DTO.MES;
using WIDESEA_ITaskInfoRepository;
using WIDESEA_ITaskInfoService;
using WIDESEA_Model.Models;
@@ -30,11 +29,203 @@
using WIDESEA_DTO.Stock;
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
{
public partial class TaskService
{
- static object lock_out = new object();
+ static object lock_autoIssue = new object();
+ static object lock_manualIssue = new object();
+ static object lock_returnIssue = new object();
+ /// <summary>
+ /// MES鑷姩鍙枡鎺ュ彛
+ /// </summary>
+ /// <returns></returns>
+ public WebResponseContent ReceiveAutoIssue(MESAutoIssueDTO autoIssueDTO)
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ lock (lock_autoIssue)
+ {
+ if (autoIssueDTO == null)
+ {
+ return content.Error("浼犲叆淇℃伅涓嶈兘涓虹┖");
+ }
+ //鑾峰彇瀵瑰簲鍗曟嵁
+ Dt_OutMESOrder? outMESOrder = _outboundRepository.OutMESOrderRepository.QueryFirst(x => x.OutDetailId == autoIssueDTO.OutDetailId);
+ if (outMESOrder == null)
+ {
+ return content.Error($"棰嗘枡璁″垝{nameof(MESAutoIssueDTO.OutDetailId)}{autoIssueDTO.OutDetailId}涓嶅瓨鍦�");
+ }
+ if (outMESOrder.OutMESOrderStatus == OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt())
+ {
+ return content.Error($"棰嗘枡璁″垝{nameof(MESAutoIssueDTO.OutDetailId)}{outMESOrder.ProductOrderNo}宸ュ崟宸插嚭搴撳畬鎴�");
+ }
+ //鑾峰彇鍛ㄨ浆浣嶇疆缂栧彿
+ Dt_AGVStationInfo? stationInfo = _basicRepository.AGVStationInfoRepository.QueryFirst(x => x.MESPointCode == autoIssueDTO.PointCode);
+ if (stationInfo == null)
+ {
+ return content.Error($"棰嗘枡璁″垝鍛ㄨ浆浣峽nameof(MESAutoIssueDTO.PointCode)}{autoIssueDTO.PointCode}涓嶅瓨鍦�");
+ }
+ if (autoIssueDTO.IsEmptyPallet > 0)
+ {
+ 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}鍙厤閫佷换鍔�");
+ }
+ //鑾峰彇浠诲姟鍑哄簱璇︽儏
+ 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(15).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閰嶉�佸嚭鍙戞帴鍙h皟鐢ㄦ姤閿�,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;
+ }
+ //灏哢nicode瑙f瀽鎴愪腑鏂�
+ 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)
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ lock (lock_manualIssue)
+ {
+ if (manualIssueDTO == null)
+ {
+ return content.Error("浼犲叆淇℃伅涓嶈兘涓虹┖");
+ }
+ //鑾峰彇瀵瑰簲鍗曟嵁
+ Dt_OutMESOrder? outMESOrder = _outboundRepository.OutMESOrderRepository.QueryFirst(x => x.OutDetailId == manualIssueDTO.OutDetailId);
+ if (outMESOrder == null)
+ {
+ return content.Error($"棰嗘枡璁″垝{nameof(MESAutoIssueDTO.OutDetailId)}{manualIssueDTO.OutDetailId}涓嶅瓨鍦�");
+ }
+ if (outMESOrder.OutMESOrderStatus == OutOrderStatusEnum.鍏抽棴.ObjToInt())
+ {
+ return content.Error($"棰嗘枡璁″垝{nameof(MESAutoIssueDTO.OutDetailId)}{outMESOrder.ProductOrderNo}宸ュ崟宸插叧闂�");
+ }
+ //鑾峰彇鍛ㄨ浆浣嶇疆缂栧彿
+ Dt_AGVStationInfo? stationInfo = _basicRepository.AGVStationInfoRepository.QueryFirst(x => x.MESPointCode == manualIssueDTO.PointCode);
+ if (stationInfo == null)
+ {
+ 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}鍙厤閫佷换鍔�");
+ }
+ //鑾峰彇浠诲姟鍑哄簱璇︽儏
+ 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(15).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閰嶉�佸嚭鍙戞帴鍙h皟鐢ㄦ姤閿�,MES杩斿洖淇℃伅{DecodeUnicode(mESResponse.Msg)}");
+ }
+ PushTasksToWCS(new List<Dt_Task> { task });
+ _unitOfWorkManage.CommitTran();
+ return content.OK("鍙枡鎴愬姛");
+ }
+ }
+ catch (Exception ex)
+ {
+ content.Error(ex.Message);
+ }
+ return content;
+ }
+ /// <summary>
+ /// MES绌烘墭/浣欐枡鍛煎彨鎺ュ彛
+ /// </summary>
+ /// <returns></returns>
+ public WebResponseContent ReceiveReturnIssue(List<MESReturnIssueDTO> returnIssueDTOs)
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ lock (lock_returnIssue)
+ {
+ if (returnIssueDTOs == null || returnIssueDTOs.Count <= 0)
+ {
+ return content.Error("浼犲叆淇℃伅涓嶈兘涓虹┖");
+ }
+ //鑾峰彇鎵�鏈堿GV鐐逛綅
+ List<Dt_AGVStationInfo> aGVStationInfos = _basicRepository.AGVStationInfoRepository.QueryData(x => !string.IsNullOrEmpty(x.MESPointCode));
+ MESReturnIssueDTO? returnIssueDTO = returnIssueDTOs.FirstOrDefault(x => !aGVStationInfos.Select(x => x.MESPointCode).Contains(x.PointCode));
+ if (returnIssueDTO != null)
+ {
+ return content.Error($"鍛ㄨ浆浣峽nameof(MESReturnIssueDTO.PointCode)}{returnIssueDTO.PointCode}涓嶅瓨鍦�");
+ }
+
+ content.OK("鍛煎彨鎴愬姛");
+ }
+ }
+ catch (Exception ex)
+ {
+ content.Error(ex.Message);
+ }
+ return content;
+ }
+
}
}
--
Gitblit v1.9.3