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