BaseController.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377
  1. using Microsoft.AspNetCore.Http;
  2. using Microsoft.AspNetCore.Mvc;
  3. using Newtonsoft.Json;
  4. using System.Diagnostics;
  5. using wms.dto.request;
  6. using wms.dto.response;
  7. using wms.service;
  8. using wms.service.IService;
  9. using wms.util.Check;
  10. using wms.util.Ext;
  11. using wms.util.Http;
  12. using Apache.NMS;
  13. using Apache.NMS.ActiveMQ;
  14. using Apache.NMS.Util;
  15. namespace wms.api.Controllers
  16. {
  17. [Route("api/[controller]/[action]")]
  18. [ApiController]
  19. public class BaseController : ControllerBase
  20. {
  21. private readonly IHJService _hJService;
  22. private readonly IPTService _ptService;
  23. private readonly IFJService _fjService;
  24. private readonly ISXService _sxService;
  25. private readonly ICPService _cpService;
  26. private readonly ILogger<BaseController> _logger;
  27. public BaseController(IHJService hJService ,ILogger<BaseController> logger)
  28. {
  29. _hJService = hJService;
  30. _logger = logger;
  31. }
  32. public BaseController(IPTService ptService)
  33. {
  34. _ptService = ptService;
  35. }
  36. public BaseController(IFJService fjService)
  37. {
  38. _fjService = fjService;
  39. }
  40. public BaseController(ISXService sxService)
  41. {
  42. _sxService = sxService;
  43. }
  44. public BaseController(ICPService cpService)
  45. {
  46. _cpService = cpService;
  47. }
  48. /// <summary>
  49. /// 发送ESB请求统一出口
  50. /// </summary>
  51. /// <param name="reqDto"></param>
  52. /// <returns></returns>
  53. internal string WmsServiceExportApi(object strReqBody)
  54. {
  55. var res = new SRes();
  56. //var aa = (new StackTrace()).GetFrame(0).GetMethod().Name;//当前方法名
  57. var methodName = (new StackTrace()).GetFrame(1).GetMethod().Name;//调用的方法名称
  58. string methodcode = "";
  59. if (_ptService != null)
  60. {
  61. methodcode = _ptService.GetSysConfigContentByCode(methodName);
  62. }
  63. else if (_hJService != null)
  64. {
  65. methodcode = _hJService.GetSysConfigContentByCode(methodName);
  66. }
  67. else if (_cpService != null)
  68. {
  69. methodcode = _cpService.GetSysConfigContentByCode(methodName);
  70. }
  71. else if (_fjService != null)
  72. {
  73. methodcode = _fjService.GetSysConfigContentByCode(methodName);
  74. }
  75. if (string.IsNullOrEmpty(methodcode))
  76. {
  77. return new SRes() { ResCode = 0, ResMsg = "数据表没有配置" }.ToCamelCaseString();
  78. }
  79. methodcode = RedisHelper.Get("sys_config" + methodName);
  80. var reqid = Guid.NewGuid().ToString();
  81. var req = new EsbReq() { headers = new HeadersReq() { serviceCode = methodcode.Split("|")[0],requestId = reqid,TrackId = reqid } };
  82. //req.Body = strReqBody;
  83. string sysname = methodcode.Split("|")[1];
  84. var apiurl = wms.util.AppSettings.GetConfig("EsbMesPushUrl");
  85. //if (sysname == "mes")
  86. //{
  87. // apiurl = wms.util.AppSettings.GetConfig("EsbMesPushUrl");
  88. //}
  89. //else
  90. //{
  91. // apiurl = wms.util.AppSettings.GetConfig("EsbMesPushUrl");
  92. //}
  93. if (methodcode.Split("|")[0].StartsWith("163D"))
  94. {
  95. req.headers.sourceCode = "163D";
  96. }
  97. else if (methodcode.Split("|")[0].StartsWith("163I"))
  98. {
  99. req.headers.sourceCode = "163I";
  100. }
  101. else if (methodcode.Split("|")[0].StartsWith("163J"))
  102. {
  103. req.headers.sourceCode = "163J";
  104. }
  105. else if (methodcode.Split("|")[0].StartsWith("163L"))
  106. {
  107. req.headers.sourceCode = "163L";
  108. }
  109. else if (methodcode.Split("|")[0].StartsWith("163K"))
  110. {
  111. req.headers.sourceCode = "163K";
  112. }
  113. var strEsbRes = "";
  114. try
  115. {
  116. //_logger.LogInformation("111111111111");
  117. strEsbRes = HttpUtil.PostRequest(apiurl, JsonConvert.SerializeObject(strReqBody), 30000, "UTF-8", "application/json", reqid, req.headers.sourceCode, req.headers.serviceCode);
  118. //_logger.LogInformation(methodName + "POST响应参数" + strEsbRes);
  119. }
  120. catch(Exception ex)
  121. {
  122. _logger.LogInformation(methodName + "调用异常:" + ex.ToString());
  123. }
  124. if (!string.IsNullOrEmpty(strEsbRes))
  125. {
  126. //res = JsonConvert.DeserializeObject<SRes>(strEsbRes);
  127. return strEsbRes;
  128. }
  129. else
  130. {
  131. res = new SRes() { ResMsg = "MES没有返回任务数据",ResCode = 500,Memo1 = apiurl,Memo2 = req.ToJsonString(),Memo3 = strEsbRes };
  132. }
  133. return res.ToCamelCaseString();
  134. }
  135. internal SRes ConsumerMQ(string queuesName)
  136. {
  137. queuesName = "ESB.OUT.163LFJ.Q";
  138. string esburi = wms.util.AppSettings.GetConfig("EsbMQUri");
  139. //Uri _uri = new Uri(String.Concat("activemq: failover:(tcp://esb-pre.zt.net.cn:61616?wireFormat.maxInactivityDuration-0)"));
  140. Uri _uri = new Uri(String.Concat("activemq:failover:("+ esburi + ")?randomize=false"));
  141. IConnectionFactory factory = new ConnectionFactory(_uri);
  142. using (IConnection conn = factory.CreateConnection("esbadminrw", "esbadminrw"))
  143. {
  144. using (Apache.NMS.ISession session = conn.CreateSession())
  145. {
  146. conn.Start();
  147. IDestination destination = SessionUtil.GetDestination(session, queuesName);
  148. using (IMessageConsumer consumer = session.CreateConsumer(destination))
  149. {
  150. consumer.Listener += (IMessage message) =>
  151. {
  152. ITextMessage msg = (ITextMessage)message;
  153. Console.WriteLine("接收消息:" + msg.Text);
  154. };
  155. Console.ReadLine();
  156. }
  157. }
  158. }
  159. return null;
  160. }
  161. /// <summary>
  162. /// 并发管控
  163. /// </summary>
  164. /// <typeparam name="T">方法请求参数类型</typeparam>
  165. /// <typeparam name="U">方法响应参数类型</typeparam>
  166. /// <param name="lockobj">方法锁</param>
  167. /// <param name="key">并发管控关键key</param>
  168. /// <param name="equNo">管控设备号</param>
  169. /// <param name="reqparam">请求参数</param>
  170. /// <param name="fun">管控方法</param>
  171. /// <returns></returns>
  172. public U ConcurrencyReqControl<T, U>(object lockobj, string key, string equNo, BaseRequest reqparam, Func<T, U> fun) where T : BaseRequest where U : SRes, new()
  173. {
  174. var res = new U();
  175. try
  176. {
  177. lock (lockobj)
  178. {
  179. //并发管控
  180. var sign = RedisHelper.Get(key);
  181. if (!string.IsNullOrEmpty(sign) && sign == "1")
  182. {
  183. //不可通行
  184. res.ResCode = 0;
  185. res.ResMsg = equNo + "并发重复请求";
  186. return res;
  187. }
  188. //加状态
  189. RedisHelper.Set(key, "1",300);
  190. }
  191. var resulttemp = fun((T)reqparam);
  192. RedisHelper.Set(key, "0", 300);
  193. return resulttemp;
  194. }
  195. catch (Exception ex)
  196. {
  197. RedisHelper.Set(key, "0", 300);
  198. res.ResCode = 500;
  199. res.ResMsg = ex.Message;
  200. return res;
  201. }
  202. }
  203. /// <summary>
  204. /// 发送ESB异步请求统一出口
  205. /// </summary>
  206. /// <param name="reqDto"></param>
  207. /// <returns></returns>
  208. internal string WmsServiceExportMq(object strReqBody)
  209. {
  210. var res = new SRes();
  211. //var aa = (new StackTrace()).GetFrame(0).GetMethod().Name;//当前方法名
  212. var methodName = (new StackTrace()).GetFrame(1).GetMethod().Name;//调用的方法名称
  213. string methodcode = "";
  214. if (_ptService != null)
  215. {
  216. methodcode = _ptService.GetSysConfigContentByCode(methodName);
  217. }
  218. else if (_hJService != null)
  219. {
  220. methodcode = _hJService.GetSysConfigContentByCode(methodName);
  221. }
  222. else if (_cpService != null)
  223. {
  224. methodcode = _cpService.GetSysConfigContentByCode(methodName);
  225. }
  226. else if (_fjService != null)
  227. {
  228. methodcode = _fjService.GetSysConfigContentByCode(methodName);
  229. }
  230. if (string.IsNullOrEmpty(methodcode))
  231. {
  232. return new SRes() { ResCode = 0, ResMsg = "数据表没有配置" }.ToCamelCaseString();
  233. }
  234. methodcode = RedisHelper.Get("sys_config" + methodName);
  235. var reqid = Guid.NewGuid().ToString();
  236. var req = new EsbReq() { headers = new HeadersReq() { serviceCode = methodcode.Split("|")[0], requestId = reqid, TrackId = reqid } };
  237. //req.Body = strReqBody;
  238. var apiurl = wms.util.AppSettings.GetConfig("EsbMesPushUrlMq");
  239. if (methodcode.Split("|")[0].StartsWith("163D"))
  240. {
  241. req.headers.sourceCode = "163D";
  242. }
  243. else if (methodcode.Split("|")[0].StartsWith("163I"))
  244. {
  245. req.headers.sourceCode = "163I";
  246. }
  247. else if (methodcode.Split("|")[0].StartsWith("163J"))
  248. {
  249. req.headers.sourceCode = "163J";
  250. }
  251. else if (methodcode.Split("|")[0].StartsWith("163L"))
  252. {
  253. req.headers.sourceCode = "163L";
  254. }
  255. else if (methodcode.Split("|")[0].StartsWith("163K"))
  256. {
  257. req.headers.sourceCode = "163K";
  258. }
  259. var strEsbRes = "";
  260. try
  261. {
  262. //_logger.LogInformation("111111111111");
  263. strEsbRes = HttpUtil.PostRequest(apiurl, JsonConvert.SerializeObject(strReqBody), 30000, "UTF-8", "application/json", reqid, req.headers.sourceCode, req.headers.serviceCode);
  264. //_logger.LogInformation(methodName + "POST响应参数" + strEsbRes);
  265. }
  266. catch (Exception ex)
  267. {
  268. _logger.LogInformation(methodName + "调用异常:" + ex.ToString());
  269. }
  270. if (!string.IsNullOrEmpty(strEsbRes))
  271. {
  272. //res = JsonConvert.DeserializeObject<SRes>(strEsbRes);
  273. return strEsbRes;
  274. }
  275. else
  276. {
  277. res = new SRes() { ResMsg = "MES没有返回任务数据", ResCode = 500, Memo1 = apiurl, Memo2 = req.ToJsonString(), Memo3 = strEsbRes };
  278. }
  279. return res.ToCamelCaseString();
  280. }
  281. /// <summary>
  282. /// 发送ESB分发请求统一出口
  283. /// </summary>
  284. /// <param name="reqDto"></param>
  285. /// <returns></returns>
  286. internal string WmsServiceExportPubMq(object strReqBody)
  287. {
  288. var res = new SRes();
  289. //var aa = (new StackTrace()).GetFrame(0).GetMethod().Name;//当前方法名
  290. var methodName = (new StackTrace()).GetFrame(1).GetMethod().Name;//调用的方法名称
  291. string methodcode = "";
  292. if (_ptService != null)
  293. {
  294. methodcode = _ptService.GetSysConfigContentByCode(methodName);
  295. }
  296. else if (_hJService != null)
  297. {
  298. methodcode = _hJService.GetSysConfigContentByCode(methodName);
  299. }
  300. else if (_cpService != null)
  301. {
  302. methodcode = _cpService.GetSysConfigContentByCode(methodName);
  303. }
  304. else if (_fjService != null)
  305. {
  306. methodcode = _fjService.GetSysConfigContentByCode(methodName);
  307. }
  308. if (string.IsNullOrEmpty(methodcode))
  309. {
  310. return new SRes() { ResCode = 0, ResMsg = "数据表没有配置" }.ToCamelCaseString();
  311. }
  312. methodcode = RedisHelper.Get("sys_config" + methodName);
  313. var reqid = Guid.NewGuid().ToString();
  314. var req = new EsbReq() { headers = new HeadersReq() { serviceCode = methodcode.Split("|")[0], requestId = reqid, TrackId = reqid } };
  315. //req.Body = strReqBody;
  316. var apiurl = wms.util.AppSettings.GetConfig("EsbMesPushUrlPubMq");
  317. if (methodcode.Split("|")[0].StartsWith("163D"))
  318. {
  319. req.headers.sourceCode = "163D";
  320. }
  321. else if (methodcode.Split("|")[0].StartsWith("163I"))
  322. {
  323. req.headers.sourceCode = "163I";
  324. }
  325. else if (methodcode.Split("|")[0].StartsWith("163J"))
  326. {
  327. req.headers.sourceCode = "163J";
  328. }
  329. else if (methodcode.Split("|")[0].StartsWith("163L"))
  330. {
  331. req.headers.sourceCode = "163L";
  332. }
  333. else if (methodcode.Split("|")[0].StartsWith("163K"))
  334. {
  335. req.headers.sourceCode = "163K";
  336. }
  337. var strEsbRes = "";
  338. try
  339. {
  340. //_logger.LogInformation("111111111111");
  341. strEsbRes = HttpUtil.PostRequest(apiurl, JsonConvert.SerializeObject(strReqBody), 30000, "UTF-8", "application/json", reqid, req.headers.sourceCode, req.headers.serviceCode);
  342. //_logger.LogInformation(methodName + "POST响应参数" + strEsbRes);
  343. }
  344. catch (Exception ex)
  345. {
  346. _logger.LogInformation(methodName + "调用异常:" + ex.ToString());
  347. }
  348. if (!string.IsNullOrEmpty(strEsbRes))
  349. {
  350. //res = JsonConvert.DeserializeObject<SRes>(strEsbRes);
  351. return strEsbRes;
  352. }
  353. else
  354. {
  355. res = new SRes() { ResMsg = "MES没有返回任务数据", ResCode = 500, Memo1 = apiurl, Memo2 = req.ToJsonString(), Memo3 = strEsbRes };
  356. }
  357. return res.ToCamelCaseString();
  358. }
  359. }
  360. }