using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using System.Diagnostics; using wms.dto.request; using wms.dto.response; using wms.service; using wms.service.IService; using wms.util.Check; using wms.util.Ext; using wms.util.Http; namespace wms.api.Controllers { [Route("api/[controller]/[action]")] [ApiController] public class BaseController : ControllerBase { private readonly ISXService _sxService; private readonly ILogger _logger; public BaseController(ISXService sxService, ILogger logger) { _sxService = sxService; _logger = logger; } public BaseController(ISXService sxService) { _sxService = sxService; } /// /// 发送ESB请求统一出口 (同步) /// /// /// internal string WmsServiceExportApi(object strReqBody) { var res = new SRes(); //var aa = (new StackTrace()).GetFrame(0).GetMethod().Name;//当前方法名 var methodName = (new StackTrace()).GetFrame(1).GetMethod().Name;//调用的方法名称 string methodcode = ""; if (_sxService != null) { methodcode = _sxService.GetSysConfigContentByCode(methodName); } if (string.IsNullOrEmpty(methodcode)) { return new SRes() { ResCode = 0, ResMsg = "数据表没有配置" }.ToCamelCaseString(); } methodcode = RedisHelper.Get("sys_config" + methodName); var reqid = Guid.NewGuid().ToString(); var req = new EsbReq() { headers = new HeadersReq() { serviceCode = methodcode.Split("|")[0],requestId = reqid,TrackId = reqid } }; //req.Body = strReqBody; //string sysname = methodcode.Split("|")[1]; var apiurl = wms.util.AppSettings.GetConfig("EsbMesPushUrl"); var strEsbRes = HttpUtil.PostRequest(apiurl, JsonConvert.SerializeObject(strReqBody), 30000, "UTF-8", "application/json", reqid, req.headers.sourceCode, req.headers.serviceCode); if (!string.IsNullOrEmpty(strEsbRes)) { //res = JsonConvert.DeserializeObject(strEsbRes); return strEsbRes; } else { res = new SRes() { ResMsg = "MES没有返回任务数据",ResCode = 500,Memo1 = apiurl,Memo2 = req.ToJsonString(),Memo3 = strEsbRes }; } return res.ToCamelCaseString(); } /// /// 并发管控 /// /// 方法请求参数类型 /// 方法响应参数类型 /// 方法锁 /// 并发管控关键key /// 管控设备号 /// 请求参数 /// 管控方法 /// public U ConcurrencyReqControl(object lockobj, string key, string equNo, BaseRequest reqparam, Func fun) where T : BaseRequest where U : SRes, new() { var res = new U(); try { lock (lockobj) { //并发管控 var sign = RedisHelper.Get(key); if (!string.IsNullOrEmpty(sign) && sign == "1") { //不可通行 res.ResCode = 0; res.ResMsg = equNo + "并发重复请求"; return res; } //加状态 RedisHelper.Set(key, "1",180); } var resulttemp = fun((T)reqparam); RedisHelper.Set(key, "0", 180); return resulttemp; } catch (Exception ex) { RedisHelper.Set(key, "0", 180); res.ResCode = 500; res.ResMsg = ex.Message; return res; } } /// /// 发送ESB请求统一出口 (异步) /// /// /// internal string WmsServiceExportApiMq(object strReqBody) { var res = new SRes(); //var aa = (new StackTrace()).GetFrame(0).GetMethod().Name;//当前方法名 var methodName = (new StackTrace()).GetFrame(1).GetMethod().Name;//调用的方法名称 string methodcode = ""; if (_sxService != null) { methodcode = _sxService.GetSysConfigContentByCode(methodName); } if (string.IsNullOrEmpty(methodcode)) { return new SRes() { ResCode = 0, ResMsg = "数据表没有配置" }.ToCamelCaseString(); } methodcode = RedisHelper.Get("sys_config" + methodName); var reqid = Guid.NewGuid().ToString(); var req = new EsbReq() { headers = new HeadersReq() { serviceCode = methodcode.Split("|")[0], requestId = reqid, TrackId = reqid } }; //req.Body = strReqBody; //string sysname = methodcode.Split("|")[1]; var apiurl = wms.util.AppSettings.GetConfig("EsbMesPushUrlMq"); var strEsbRes = HttpUtil.PostRequest(apiurl, JsonConvert.SerializeObject(strReqBody), 30000, "UTF-8", "application/json", reqid, req.headers.sourceCode, req.headers.serviceCode); if (!string.IsNullOrEmpty(strEsbRes)) { //res = JsonConvert.DeserializeObject(strEsbRes); return strEsbRes; } else { res = new SRes() { ResMsg = "MES没有返回任务数据", ResCode = 500, Memo1 = apiurl, Memo2 = req.ToJsonString(), Memo3 = strEsbRes }; } return res.ToCamelCaseString(); } /// /// 发送ESB请求统一出口 (分发) /// /// /// internal string WmsServiceExportApiPubMq(object strReqBody) { var res = new SRes(); //var aa = (new StackTrace()).GetFrame(0).GetMethod().Name;//当前方法名 var methodName = (new StackTrace()).GetFrame(1).GetMethod().Name;//调用的方法名称 string methodcode = ""; if (_sxService != null) { methodcode = _sxService.GetSysConfigContentByCode(methodName); } if (string.IsNullOrEmpty(methodcode)) { return new SRes() { ResCode = 0, ResMsg = "数据表没有配置" }.ToCamelCaseString(); } methodcode = RedisHelper.Get("sys_config" + methodName); var reqid = Guid.NewGuid().ToString(); var req = new EsbReq() { headers = new HeadersReq() { serviceCode = methodcode.Split("|")[0], requestId = reqid, TrackId = reqid } }; //req.Body = strReqBody; //string sysname = methodcode.Split("|")[1]; var apiurl = wms.util.AppSettings.GetConfig("EsbMesPushUrlPubMq"); var strEsbRes = HttpUtil.PostRequest(apiurl, JsonConvert.SerializeObject(strReqBody), 30000, "UTF-8", "application/json", reqid, req.headers.sourceCode, req.headers.serviceCode); if (!string.IsNullOrEmpty(strEsbRes)) { //res = JsonConvert.DeserializeObject(strEsbRes); return strEsbRes; } else { res = new SRes() { ResMsg = "MES没有返回任务数据", ResCode = 500, Memo1 = apiurl, Memo2 = req.ToJsonString(), Memo3 = strEsbRes }; } return res.ToCamelCaseString(); } } }