using 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>
|
/// ERP 调用的接口
|
/// </summary>
|
[RoutePrefix("api")]
|
public class ErpController : ApiController {
|
/// <summary>
|
/// 入库数据同步(ERP)
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
[HttpPost]
|
[Route("InboundDataSync")]
|
public IHttpActionResult InboundDataSync(InboundDataSyncInfo model) {
|
LogHelper.Info("触发API:入库数据同步" + JsonConvert.SerializeObject(model), "API");
|
|
//var headers = Request.Headers;
|
//var checkRes = CheckHeaders(headers);
|
//if (!checkRes.isSuccess) {
|
// return CreateErrorResponse(checkRes.code, checkRes.message);
|
//}
|
|
var res = ApiHelper.InboundDataSync(model);
|
return CreateSuccessResponse(res);
|
}
|
|
/// <summary>
|
/// 出库发料同步(ERP)
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
[HttpPost]
|
[Route("OutboundDataSync")]
|
public IHttpActionResult OutboundDataSync(OutboundDataSyncInfo model) {
|
LogHelper.Info("触发API:出库发料同步" + JsonConvert.SerializeObject(model), "API");
|
|
//var headers = Request.Headers;
|
//var checkRes = CheckHeaders(headers);
|
//if (!checkRes.isSuccess) {
|
// return CreateErrorResponse(checkRes.code, checkRes.message);
|
//}
|
|
var res = ApiHelper.OutboundDataSync(model);
|
return CreateSuccessResponse(res);
|
}
|
|
private CheckHeadersResult CheckHeaders(System.Net.Http.Headers.HttpRequestHeaders headers) {
|
// 必须字段验证
|
if (!headers.Contains("sourceAppCode") || !headers.Contains("serviceId") || !headers.Contains("msgSendTime")) {
|
return CreateCheckHeadersResult(false, "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()
|
};
|
|
// 验证Header
|
var validationResult = ValidateHeaders(headerModel);
|
if (validationResult != null) {
|
return validationResult;
|
}
|
|
// 验证Body
|
if (Request.Content.Headers.ContentLength > 2 * 1024 * 1024) {
|
return CreateCheckHeadersResult(false, "2102", "消息内容过长,超过2M");
|
}
|
|
return CreateCheckHeadersResult(true);
|
}
|
|
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 CheckHeadersResult ValidateHeaders(dynamic headers) {
|
// 实现所有Header验证逻辑
|
if (!IsRegisteredApp(headers.SourceAppCode, headers.Password)) {
|
return CreateCheckHeadersResult(false, "2201", "源调用系统未注册");
|
}
|
|
if (!IsValidService(headers.ServiceId)) {
|
return CreateCheckHeadersResult(false, "2202", "代理服务未注册");
|
}
|
|
if (!IsValidDateTime(headers.MsgSendTime)) {
|
return CreateCheckHeadersResult(false, "2101", "时间格式校验失败");
|
}
|
|
if (!string.IsNullOrEmpty(headers.MsgToken) && headers.MsgToken.Length > 32) {
|
return CreateCheckHeadersResult(false, "2104", "消息令牌过长,超过32位");
|
}
|
|
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;
|
}
|
|
private CheckHeadersResult CreateCheckHeadersResult(bool isSuccess, string code = "", string message = "") {
|
return new CheckHeadersResult {
|
code = code,
|
message = message,
|
isSuccess = isSuccess
|
};
|
}
|
}
|
|
public class CheckHeadersResult {
|
public bool isSuccess { get; set; }
|
public string code { get; set; }
|
public string message { get; set; }
|
}
|
}
|