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; using Apache.NMS; using Apache.NMS.ActiveMQ; using Apache.NMS.Util; 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); } else if (_cpService != null) { methodcode = _cpService.GetSysConfigContentByCode(methodName); } else if (_fjService != null) { methodcode = _fjService.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"); //if (sysname == "mes") //{ // apiurl = wms.util.AppSettings.GetConfig("EsbMesPushUrl"); //} //else //{ // apiurl = wms.util.AppSettings.GetConfig("EsbMesPushUrl"); //} if (methodcode.Split("|")[0].StartsWith("163D")) { req.headers.sourceCode = "163D"; } else if (methodcode.Split("|")[0].StartsWith("163I")) { req.headers.sourceCode = "163I"; } else if (methodcode.Split("|")[0].StartsWith("163J")) { req.headers.sourceCode = "163J"; } else if (methodcode.Split("|")[0].StartsWith("163L")) { req.headers.sourceCode = "163L"; } else if (methodcode.Split("|")[0].StartsWith("163K")) { req.headers.sourceCode = "163K"; } var strEsbRes = ""; try { //_logger.LogInformation("111111111111"); strEsbRes = HttpUtil.PostRequest(apiurl, JsonConvert.SerializeObject(strReqBody), 30000, "UTF-8", "application/json", reqid, req.headers.sourceCode, req.headers.serviceCode); //_logger.LogInformation(methodName + "POST响应参数" + strEsbRes); } catch(Exception ex) { _logger.LogInformation(methodName + "调用异常:" + ex.ToString()); } 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(); } internal SRes ConsumerMQ(string queuesName) { queuesName = "ESB.OUT.163LFJ.Q"; string esburi = wms.util.AppSettings.GetConfig("EsbMQUri"); //Uri _uri = new Uri(String.Concat("activemq: failover:(tcp://esb-pre.zt.net.cn:61616?wireFormat.maxInactivityDuration-0)")); Uri _uri = new Uri(String.Concat("activemq:failover:("+ esburi + ")?randomize=false")); IConnectionFactory factory = new ConnectionFactory(_uri); using (IConnection conn = factory.CreateConnection("esbadminrw", "esbadminrw")) { using (Apache.NMS.ISession session = conn.CreateSession()) { conn.Start(); IDestination destination = SessionUtil.GetDestination(session, queuesName); using (IMessageConsumer consumer = session.CreateConsumer(destination)) { consumer.Listener += (IMessage message) => { ITextMessage msg = (ITextMessage)message; Console.WriteLine("接收消息:" + msg.Text); }; Console.ReadLine(); } } } return null; } /// /// 并发管控 /// /// 方法请求参数类型 /// 方法响应参数类型 /// 方法锁 /// 并发管控关键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",300); } var resulttemp = fun((T)reqparam); RedisHelper.Set(key, "0", 300); return resulttemp; } catch (Exception ex) { RedisHelper.Set(key, "0", 300); res.ResCode = 500; res.ResMsg = ex.Message; return res; } } /// /// 发送ESB异步请求统一出口 /// /// /// internal string WmsServiceExportMq(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); } else if (_cpService != null) { methodcode = _cpService.GetSysConfigContentByCode(methodName); } else if (_fjService != null) { methodcode = _fjService.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; var apiurl = wms.util.AppSettings.GetConfig("EsbMesPushUrlMq"); if (methodcode.Split("|")[0].StartsWith("163D")) { req.headers.sourceCode = "163D"; } else if (methodcode.Split("|")[0].StartsWith("163I")) { req.headers.sourceCode = "163I"; } else if (methodcode.Split("|")[0].StartsWith("163J")) { req.headers.sourceCode = "163J"; } else if (methodcode.Split("|")[0].StartsWith("163L")) { req.headers.sourceCode = "163L"; } else if (methodcode.Split("|")[0].StartsWith("163K")) { req.headers.sourceCode = "163K"; } var strEsbRes = ""; try { //_logger.LogInformation("111111111111"); strEsbRes = HttpUtil.PostRequest(apiurl, JsonConvert.SerializeObject(strReqBody), 30000, "UTF-8", "application/json", reqid, req.headers.sourceCode, req.headers.serviceCode); //_logger.LogInformation(methodName + "POST响应参数" + strEsbRes); } catch (Exception ex) { _logger.LogInformation(methodName + "调用异常:" + ex.ToString()); } 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 WmsServiceExportPubMq(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); } else if (_cpService != null) { methodcode = _cpService.GetSysConfigContentByCode(methodName); } else if (_fjService != null) { methodcode = _fjService.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; var apiurl = wms.util.AppSettings.GetConfig("EsbMesPushUrlPubMq"); if (methodcode.Split("|")[0].StartsWith("163D")) { req.headers.sourceCode = "163D"; } else if (methodcode.Split("|")[0].StartsWith("163I")) { req.headers.sourceCode = "163I"; } else if (methodcode.Split("|")[0].StartsWith("163J")) { req.headers.sourceCode = "163J"; } else if (methodcode.Split("|")[0].StartsWith("163L")) { req.headers.sourceCode = "163L"; } else if (methodcode.Split("|")[0].StartsWith("163K")) { req.headers.sourceCode = "163K"; } var strEsbRes = ""; try { //_logger.LogInformation("111111111111"); strEsbRes = HttpUtil.PostRequest(apiurl, JsonConvert.SerializeObject(strReqBody), 30000, "UTF-8", "application/json", reqid, req.headers.sourceCode, req.headers.serviceCode); //_logger.LogInformation(methodName + "POST响应参数" + strEsbRes); } catch (Exception ex) { _logger.LogInformation(methodName + "调用异常:" + ex.ToString()); } 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(); } } }