From fe3167683576e5dd943fd5acc52e713652365def Mon Sep 17 00:00:00 2001
From: kazelee <1847801760@qq.com>
Date: 星期一, 09 六月 2025 17:13:06 +0800
Subject: [PATCH] 优化ERP下发库存/取货信息流程,添加记录表和header判断逻辑备用

---
 api/ErpController.cs |  167 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 162 insertions(+), 5 deletions(-)

diff --git a/api/ErpController.cs b/api/ErpController.cs
index dd038f7..5eaecc6 100644
--- a/api/ErpController.cs
+++ b/api/ErpController.cs
@@ -1,6 +1,13 @@
-锘縰sing System.Web.Http;
+锘縰sing System.Linq;
+using System.Net.Http;
+using System.Net;
+using System.Text;
+using System.Web.Http;
+
+using Newtonsoft.Json;
 
 using static HH.WCS.Mobox3.AnGang.api.OtherModel;
+using System.Threading.Tasks;
 
 namespace HH.WCS.Mobox3.AnGang.api {
     /// <summary>
@@ -15,8 +22,19 @@
         /// <returns></returns>
         [HttpPost]
         [Route("InboundDataSync")]
-        public ErpResult InboundDataSync(InboundDataSyncInfo model) {
-            return ApiHelper.InboundDataSync(model);
+        public IHttpActionResult InboundDataSync(InboundDataSyncInfo model) {
+            LogHelper.Info("瑙﹀彂API锛氬叆搴撴暟鎹悓姝� + JsonConvert.SerializeObject(model), "API");
+
+            //var headers = Request.Headers; // 鏆備笉鑰冭檻瀵硅姹侶TTP杩涜鏍¢獙锛岄粯璁ゅ彂鏉ョ殑璇锋眰鏍煎紡閮芥纭�+
+            //return new ErpResult { errCode = 1, errMsg = "娴嬭瘯" };
+            //return CreateSuccessResponse(new ErpResult { errCode = 1, errMsg = "娴嬭瘯"});
+
+            //var headers = Request.Headers;
+            //return ProcessInboundData(headers, model);
+
+            //return ApiHelper.InboundDataSync(model);
+            return NormalProcessInboundData(model); // 鏆傛椂浣跨敤鍘熸湰鐨勯�杈�         }
 
         /// <summary>
@@ -26,8 +44,147 @@
         /// <returns></returns>
         [HttpPost]
         [Route("OutboundDataSync")]
-        public ErpResult OutboundDataSync(OutboundDataSyncInfo model) {
-            return ApiHelper.OutboundDataSync(model);
+        public IHttpActionResult OutboundDataSync(OutboundDataSyncInfo model) {
+            LogHelper.Info("瑙﹀彂API锛氬嚭搴撳彂鏂欏悓姝� + JsonConvert.SerializeObject(model), "API");
+
+            //var headers = Request.Headers;
+            //return ProcessOutboundData(headers, model);
+
+            //return ApiHelper.OutboundDataSync(model);
+            return NormalProcessOutboundData(model); // 鏆傛椂浣跨敤鍘熸湰鐨勯�杈�+        }
+
+        private IHttpActionResult NormalProcessInboundData(InboundDataSyncInfo model) {
+            var data = ApiHelper.InboundDataSync(model);
+            return ResponseMessage(new HttpResponseMessage(HttpStatusCode.OK) {
+                Headers = { },
+                Content = new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json")
+            });
+        }
+
+        private IHttpActionResult NormalProcessOutboundData(OutboundDataSyncInfo model) {
+            var data = ApiHelper.OutboundDataSync(model);
+            return ResponseMessage(new HttpResponseMessage(HttpStatusCode.OK) {
+                Headers = { },
+                Content = new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json")
+            });
+        }
+
+        private IHttpActionResult ProcessInboundData(System.Net.Http.Headers.HttpRequestHeaders headers, InboundDataSyncInfo model) {
+            // 蹇呴』瀛楁楠岃瘉
+            if (!headers.Contains("sourceAppCode") || !headers.Contains("serviceId") || !headers.Contains("msgSendTime")) {
+                return CreateErrorResponse("2003", "缂哄皯蹇呰璇锋眰澶村弬鏁�);
+            }
+
+            var headerModel = new {
+                SourceAppCode = headers.GetValues("sourceAppCode").First(),
+                Password = headers.Contains("password") ? headers.GetValues("password").First() : null,
+                ServiceId = headers.GetValues("serviceId").First(),
+                MsgToken = headers.Contains("msgToken") ? headers.GetValues("msgToken").First() : null,
+                MsgSendTime = headers.GetValues("msgSendTime").First()
+            };
+
+            // 2. 楠岃瘉Header
+            var validationResult = ValidateHeaders(headerModel);
+            if (validationResult != null) {
+                return validationResult;
+            }
+
+            // 3. 璇诲彇Body
+            //string requestBody = await Request.Content.ReadAsStringAsync(); // 涓嶉渶瑕佸紓姝ヨ鍙栵紝鐩存帴鐢╩odel
+
+            // 4. 楠岃瘉Body
+            if (Request.Content.Headers.ContentLength > 2 * 1024 * 1024) {
+                return CreateErrorResponse("2102", "娑堟伅鍐呭杩囬暱锛岃秴杩�M");
+            }
+
+            // 5. 澶勭悊涓氬姟閫昏緫
+            var result = ApiHelper.InboundDataSync(model);
+
+            // 6. 杩斿洖鎴愬姛鍝嶅簲
+            return CreateSuccessResponse(result);
+        }
+
+        private IHttpActionResult ProcessOutboundData(System.Net.Http.Headers.HttpRequestHeaders headers, OutboundDataSyncInfo model) {
+            // 蹇呴』瀛楁楠岃瘉
+            if (!headers.Contains("sourceAppCode") || !headers.Contains("serviceId") || !headers.Contains("msgSendTime")) {
+                return CreateErrorResponse("2003", "缂哄皯蹇呰璇锋眰澶村弬鏁�);
+            }
+
+            var headerModel = new {
+                SourceAppCode = headers.GetValues("sourceAppCode").First(),
+                Password = headers.Contains("password") ? headers.GetValues("password").First() : null,
+                ServiceId = headers.GetValues("serviceId").First(),
+                MsgToken = headers.Contains("msgToken") ? headers.GetValues("msgToken").First() : null,
+                MsgSendTime = headers.GetValues("msgSendTime").First()
+            };
+
+            // 2. 楠岃瘉Header
+            var validationResult = ValidateHeaders(headerModel);
+            if (validationResult != null) {
+                return validationResult;
+            }
+
+            // 3. 璇诲彇Body
+            //string requestBody = await Request.Content.ReadAsStringAsync();
+
+            // 4. 楠岃瘉Body
+            if (Request.Content.Headers.ContentLength > 2 * 1024 * 1024) {
+                return CreateErrorResponse("2102", "娑堟伅鍐呭杩囬暱锛岃秴杩�M");
+            }
+
+            // 5. 澶勭悊涓氬姟閫昏緫
+            var result = ApiHelper.OutboundDataSync(model);
+
+            // 6. 杩斿洖鎴愬姛鍝嶅簲
+            return CreateSuccessResponse(result);
+        }
+
+        private IHttpActionResult CreateSuccessResponse(object data) {
+            return ResponseMessage(new HttpResponseMessage(HttpStatusCode.OK) {
+                Headers = { { "returnCode", "0" } },
+                Content = new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json")
+            });
+        }
+
+        private IHttpActionResult CreateErrorResponse(string code, string message) {
+            return ResponseMessage(new HttpResponseMessage(HttpStatusCode.OK) {
+                Headers = { { "returnCode", code } },
+                Content = new StringContent(message)
+            });
+        }
+
+        private IHttpActionResult ValidateHeaders(dynamic headers) {
+            // 瀹炵幇鎵�湁Header楠岃瘉閫昏緫
+            if (!IsRegisteredApp(headers.SourceAppCode, headers.Password)) {
+                return CreateErrorResponse("2201", "婧愯皟鐢ㄧ郴缁熸湭娉ㄥ唽");
+            }
+
+            if (!IsValidService(headers.ServiceId)) {
+                return CreateErrorResponse("2202", "浠g悊鏈嶅姟鏈敞鍐�);
+            }
+
+            if (!IsValidDateTime(headers.MsgSendTime)) {
+                return CreateErrorResponse("2101", "鏃堕棿鏍煎紡鏍¢獙澶辫触");
+            }
+
+            if (!string.IsNullOrEmpty(headers.MsgToken) && headers.MsgToken.Length > 32) {
+                return CreateErrorResponse("2104", "娑堟伅浠ょ墝杩囬暱锛岃秴杩�2浣�);
+            }
+
+            return null;
+        }
+
+        private bool IsRegisteredApp(string appId, string password) {
+            return true;
+        }
+
+        private bool IsValidService(string serviceId) {
+            return true;
+        }
+
+        private bool IsValidDateTime(string dataTime) {
+            return true;
         }
     }
 }
\ No newline at end of file

--
Gitblit v1.9.1