From 37454e625df68d40897112b2e8c2e3cf4d7163e3 Mon Sep 17 00:00:00 2001
From: heshaofeng <heshaofeng@hnkhzn.com>
Date: 星期三, 25 三月 2026 11:43:10 +0800
Subject: [PATCH] 1

---
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_BasicService/MESOperation/FeedbackMesService.cs |  141 +++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 125 insertions(+), 16 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/MESOperation/FeedbackMesService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/MESOperation/FeedbackMesService.cs"
index 22a0846..0983b44 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/MESOperation/FeedbackMesService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/MESOperation/FeedbackMesService.cs"
@@ -7,11 +7,13 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEA_Common.OrderEnum;
 using WIDESEA_Core;
 using WIDESEA_Core.BaseRepository;
 using WIDESEA_Core.BaseServices;
 using WIDESEA_Core.Helper;
 using WIDESEA_Core.HttpContextUser;
+using WIDESEA_Core.LogHelper;
 using WIDESEA_Core.Util;
 using WIDESEA_DTO.Base;
 using WIDESEA_DTO.ReturnMES;
@@ -42,26 +44,57 @@
 
         public WebResponseContent OutboundFeedback(string orderNo)
         {
+            WebResponseContent webResponse = new WebResponseContent();
             try
             {
                 Dt_OutboundOrder outboundOrder = _outboundOrderRepository.Db.Queryable<Dt_OutboundOrder>().Where(x => x.OrderNo == orderNo).Includes(x => x.Details).First();
                 if (outboundOrder == null)
                 {
-                    return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑鍑哄簱鍗曚俊鎭�");
+                    return webResponse = WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑鍑哄簱鍗曚俊鎭�");
+                }
+                if(outboundOrder.OrderType == InOrderTypeEnum.ReCheck.ObjToInt() || outboundOrder.CreateType == OrderCreateTypeEnum.CreateInSystem.ObjToInt())
+                {
+                    return webResponse = WebResponseContent.Instance.OK($"璇ュ崟鎹棤闇�鍥炰紶MES");
                 }
 
+                if (outboundOrder.IsBatch == 0 && outboundOrder.OrderStatus != OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt())
+                {
+                    return webResponse = WebResponseContent.Instance.OK($"璇ュ崟鎹睘浜庝笉鍒嗘壒鑷姩鍥炰紶锛屼笉鍙墜鍔ㄥ垎鎵瑰洖浼�");
+                }
+                Dt_OutStockLockInfo outStockLockInfo = _allocateRepository.Db.Queryable<Dt_OutStockLockInfo>().Where(x => x.OrderNo == outboundOrder.OrderNo).First();
+                if (outStockLockInfo != null)
+                {
+                    return WebResponseContent.Instance.Error("璇ュ崟鎹繕瑕佹湭鎷i�夌殑鐗╂枡锛岃鍏堟嫞閫夊畬鎴愬啀鐐瑰嚮鍥炰紶");
+                }
                 List<Dt_MesReturnRecord> returnRecords = BaseDal.QueryData(x => x.OrderNo == orderNo && x.OrderId == outboundOrder.Id && x.ReturnStatus == 2);
+
                 foreach (var item in returnRecords)
                 {
                     HttpResponseResult<MesResponseDTO> httpResponse = _httpClientHelper.Post<MesResponseDTO>(item.ApiUrl, item.RequestData);
-                    item.ReturnCount += 1;
+
+                    string rMsg = "鎴愬姛";
                     bool success = httpResponse.IsSuccess && httpResponse.Data.Code == "200";
+                    if (!success)
+                    {
+                        if (!httpResponse.IsSuccess)
+                        {
+                            rMsg = $"MES鎺ュ彛杩斿洖閿欒锛孒TTP浠g爜锛歿httpResponse.StatusCode}锛屼俊鎭細{httpResponse.ErrorMessage}";
+                        }
+                        else if (httpResponse?.Data?.Code != "200")
+                        {
+                            rMsg = $"璋冪敤MES鎺ュ彛澶辫触锛屼唬鐮侊細{httpResponse?.Data?.Code}锛屼俊鎭細{httpResponse?.Data?.Message}";
+                        }
+                    }
+
+                    item.ReturnCount += 1;
+
                     item.ReturnStatus = success ? 1 : 2;
                     item.HttpStatusCode = httpResponse.StatusCode.ObjToInt();
                     item.LastReturnTime = DateTime.Now;
                     item.ResponseData = httpResponse.Content;
-                    item.SuccessTime = httpResponse.IsSuccess ? DateTime.Now : null;
+                    item.SuccessTime = success ? DateTime.Now : null;
                 }
+
                 BaseDal.UpdateData(returnRecords);
 
                 HttpResponseResult<MesResponseDTO> httpResponseResult = new HttpResponseResult<MesResponseDTO>();
@@ -74,8 +107,42 @@
                     MaterialOutboundReturnDTO? returnDTO = BuildOutboundFeedbackData(outboundOrder);
                     if (returnDTO == null)
                     {
-                        return WebResponseContent.Instance.Error($"鏋勫缓鍥炶皟瀵硅薄澶辫触");
+                        return webResponse = WebResponseContent.Instance.Error($"鏋勫缓鍥炶皟瀵硅薄澶辫触");
                     }
+
+                    if (returnDTO.Details.Count <= 0)
+                    {
+                        if (returnRecords.Count() == returnRecords.Count(x => x.ReturnStatus == 1))
+                        {
+                            if(outboundOrder.OrderStatus == OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt())
+                            {
+                                outboundOrder.ReturnToMESStatus = 1;
+                            }
+                            else if (outboundOrder.OrderStatus == OutOrderStatusEnum.鍑哄簱涓�.ObjToInt())
+                            {
+                                outboundOrder.ReturnToMESStatus = 3;
+                            }
+                            else
+                            {
+                                outboundOrder.ReturnToMESStatus = 0;
+                            }
+                            
+                        }
+                        else if (returnRecords.Count(x => x.ReturnStatus == 2) > 0)
+                        {
+                            outboundOrder.ReturnToMESStatus = 4;
+                        }
+                        else if (returnRecords.Count() == returnRecords.Count(x => x.ReturnStatus == 2))
+                        {
+                            outboundOrder.ReturnToMESStatus = 2;
+                        }
+                        _outboundOrderRepository.UpdateData(outboundOrder);
+
+
+                        return webResponse = WebResponseContent.Instance.OK($"璇ュ崟鎹病鏈夐渶瑕佸洖浼犳槑缁嗭紝鍥炰紶{returnRecords.Count()}鏉★紝鍥炰紶鎴愬姛{returnRecords.Count(x=>x.ReturnStatus == 1)}鏉★紝鍥炰紶澶辫触{returnRecords.Count(x => x.ReturnStatus == 2)}鏉�");
+
+                    }
+
                     string apiUrl = AppSettings.GetValue("MaterialOutboundFeedbackUrl");
                     returnDTO.ReqCode = reqCode;
                     returnDTO.ReqTime = reqTime;
@@ -93,14 +160,47 @@
                     Dt_AllocateOrder allocateOrder = _allocateRepository.QueryFirst(x => x.OrderNo == outboundOrder.OrderNo);
                     if (allocateOrder == null)
                     {
-                        return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑璋冩嫧鍗�");
+                        return webResponse = WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑璋冩嫧鍗�");
                     }
+
                     AllocationReturnDTO? returnDTO = BuildAllocationFeedbackData(outboundOrder, allocateOrder.FromWarehouse, allocateOrder.ToWarehouse);
                     if (returnDTO == null)
                     {
-                        return WebResponseContent.Instance.Error($"鏋勫缓鍥炶皟瀵硅薄澶辫触");
+                        return webResponse = WebResponseContent.Instance.Error($"鏋勫缓鍥炶皟瀵硅薄澶辫触");
                     }
-                    string apiUrl = AppSettings.GetValue("AllocationFeedbackUrl"); ;
+
+                    if (returnDTO.Details.Count <= 0)
+                    {
+                        if(returnRecords.Count() == returnRecords.Count(x => x.ReturnStatus == 1))
+                        {
+                            if (outboundOrder.OrderStatus == OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt())
+                            {
+                                outboundOrder.ReturnToMESStatus = 1;
+                            }
+                            else if (outboundOrder.OrderStatus == OutOrderStatusEnum.鍑哄簱涓�.ObjToInt())
+                            {
+                                outboundOrder.ReturnToMESStatus = 3;
+                            }
+                            else
+                            {
+                                outboundOrder.ReturnToMESStatus = 0;
+                            }
+                        }
+                        else if(returnRecords.Count(x => x.ReturnStatus == 2)>0)
+                        {
+                            outboundOrder.ReturnToMESStatus = 4;
+                        }
+                        else if (returnRecords.Count() == returnRecords.Count(x => x.ReturnStatus == 2))
+                        {
+                            outboundOrder.ReturnToMESStatus = 2;
+                        }
+                        _outboundOrderRepository.UpdateData(outboundOrder);
+                        
+                        
+                        return webResponse = WebResponseContent.Instance.OK($"璇ュ崟鎹病鏈夐渶瑕佸洖浼犳槑缁嗭紝鍥炰紶{returnRecords.Count()}鏉★紝鍥炰紶鎴愬姛{returnRecords.Count(x => x.ReturnStatus == 1)}鏉★紝鍥炰紶澶辫触{returnRecords.Count(x => x.ReturnStatus == 2)}鏉�");
+                    }
+
+                    string apiUrl = AppSettings.GetValue("AllocationFeedbackUrl");
                     returnDTO.ReqCode = reqCode;
                     returnDTO.ReqTime = reqTime;
                     JsonSerializerSettings settings = new JsonSerializerSettings
@@ -111,6 +211,8 @@
                     lineNos = returnDTO.Details.Select(x => x.LineNo).ToList();
                     httpResponseResult = _httpClientHelper.Post<MesResponseDTO>(apiUrl, requestData);
                     httpResponseResult.ApiUrl = apiUrl;
+
+                    Logger.Add(requestData, httpResponseResult.Serialize());
                 }
 
                 bool isSuccess = httpResponseResult.IsSuccess && httpResponseResult.Data.Code == "200";
@@ -141,8 +243,8 @@
                     ResponseData = httpResponseResult.Content,
                     ReturnType = 0,
                     ReturnCount = 1,
-                    ReturnStatus = httpResponseResult.IsSuccess ? 1 : 2,
-                    SuccessTime = httpResponseResult.IsSuccess ? DateTime.Now : null
+                    ReturnStatus = isSuccess ? 1 : 2,
+                    SuccessTime = isSuccess ? DateTime.Now : null
                 };
 
                 _unitOfWorkManage.BeginTran();
@@ -178,15 +280,21 @@
                 _outboundOrderRepository.UpdateData(outboundOrder);
 
                 _unitOfWorkManage.CommitTran();
+                int successCount = returnRecords.Where(x => x.ReturnStatus == 1).Count() + (isSuccess ? 1 : 0);
+                int failCount = returnRecords.Where(x => x.ReturnStatus == 2).Count() + (!isSuccess ? 1 : 0);
 
-                WebResponseContent responseContent = new WebResponseContent();
-                responseContent.Status = isSuccess;
-                responseContent.Message = message;
-                return responseContent;
+                webResponse.Status = true;
+                webResponse.Message = $"鍥炶皟鎴愬姛鏉℃暟锛歿successCount}锛屽洖璋冨け璐ユ潯鏁帮細{failCount}";
+
+                return webResponse;
             }
             catch (Exception ex)
             {
-                return WebResponseContent.Instance.Error(ex.Message);
+                return webResponse = WebResponseContent.Instance.Error(ex.Message);
+            }
+            finally
+            {
+                Logger.Add(orderNo, webResponse.Serialize());
             }
         }
 
@@ -227,7 +335,8 @@
                     OperationType = 1,
                     OrderNo = outboundOrder.UpperOrderNo,
                     FromWarehouse = fromWarehouse,
-                    ToWarehouse = toWarehouse
+                    ToWarehouse = toWarehouse,
+                    Operator = App.User.UserName
                 };
 
                 return outboundReturnDTO;
@@ -421,7 +530,7 @@
                 Dt_MesReturnRecord mesReturnRecord = new Dt_MesReturnRecord()
                 {
                     ApiUrl = httpResponseResult.ApiUrl,
-                    InterfaceType = 1,
+                    InterfaceType = 4,
                     OrderId = materialCodeInfo.OrderId ?? 0,
                     OrderNo = materialCodeInfo.OrderNo ?? "",
                     RequestCode = reqCode,

--
Gitblit v1.9.3