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 IHJService _hJService; private readonly IPTService _ptService; private readonly IFJService _fjService; private readonly ISXService _sxService; private readonly ICPService _cpService; private readonly ILogger _logger; public BaseController(IHJService hJService ,ILogger logger) { _hJService = hJService; _logger = logger; } public BaseController(IPTService ptService) { _ptService = ptService; } public BaseController(IFJService fjService) { _fjService = fjService; } public BaseController(ISXService sxService) { _sxService = sxService; } public BaseController(ICPService cpService) { _cpService = cpService; } /// /// 发送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 (_ptService != null) { methodcode = _ptService.GetSysConfigContentByCode(methodName); } else if (_hJService != null) { methodcode = _hJService.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 = ""; if (sysname == "mes") { apiurl = wms.util.AppSettings.GetConfig("EsbMesPushUrl"); } else { apiurl = wms.util.AppSettings.GetConfig("EsbErpPushUrl"); } 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"); } var resulttemp = fun((T)reqparam); RedisHelper.Set(key, "0"); return resulttemp; } catch (Exception ex) { RedisHelper.Set(key, "0"); res.ResCode = 500; res.ResMsg = ex.Message; return res; } } } }