BaseController.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. using Microsoft.AspNetCore.Mvc;
  2. using Newtonsoft.Json;
  3. using System.Diagnostics;
  4. using wms.dto.request;
  5. using wms.dto.response;
  6. using wms.service.IService;
  7. using wms.util.Ext;
  8. using wms.util.Http;
  9. namespace wms.api.Controllers
  10. {
  11. [Route("api/[controller]/[action]")]
  12. [ApiController]
  13. public class BaseController : ControllerBase
  14. {
  15. private readonly IHJService _hJService;
  16. private readonly IPTService _ptService;
  17. private readonly IFJService _fjService;
  18. private readonly ISXService _sxService;
  19. private readonly ICPService _cpService;
  20. private readonly ILogger<BaseController> _logger;
  21. public BaseController(IHJService hJService, ILogger<BaseController> logger)
  22. {
  23. _hJService = hJService;
  24. _logger = logger;
  25. }
  26. public BaseController(IPTService ptService)
  27. {
  28. _ptService = ptService;
  29. }
  30. public BaseController(IFJService fjService)
  31. {
  32. _fjService = fjService;
  33. }
  34. public BaseController(ISXService sxService)
  35. {
  36. _sxService = sxService;
  37. }
  38. public BaseController(ICPService cpService)
  39. {
  40. _cpService = cpService;
  41. }
  42. /// <summary>
  43. /// 发送ESB请求统一出口
  44. /// </summary>
  45. /// <param name="reqDto"></param>
  46. /// <returns></returns>
  47. internal string WmsServiceExportApi(object strReqBody)
  48. {
  49. var res = new SRes();
  50. //var aa = (new StackTrace()).GetFrame(0).GetMethod().Name;//当前方法名
  51. var methodName = (new StackTrace()).GetFrame(1).GetMethod().Name;//调用的方法名称
  52. string methodcode = "";
  53. if (_ptService != null)
  54. {
  55. methodcode = _ptService.GetSysConfigContentByCode(methodName);
  56. }
  57. else if (_hJService != null)
  58. {
  59. methodcode = _hJService.GetSysConfigContentByCode(methodName);
  60. }
  61. else if (_fjService != null)
  62. {
  63. methodcode = _fjService.GetSysConfigContentByCode(methodName);
  64. }
  65. if (string.IsNullOrEmpty(methodcode))
  66. {
  67. return new SRes() { ResCode = 0, ResMsg = "数据表没有配置" }.ToCamelCaseString();
  68. }
  69. methodcode = RedisHelper.Get("sys_config" + methodName);
  70. var reqid = Guid.NewGuid().ToString();
  71. var req = new EsbReq() { headers = new HeadersReq() { serviceCode = methodcode.Split("|")[0], requestId = reqid, TrackId = reqid } };
  72. //req.Body = strReqBody;
  73. string sysname = methodcode.Split("|")[1];
  74. var apiurl = "";
  75. if (sysname == "mes")
  76. {
  77. apiurl = wms.util.AppSettings.GetConfig("EsbMesPushUrl");
  78. }
  79. else
  80. {
  81. apiurl = wms.util.AppSettings.GetConfig("EsbErpPushUrl");
  82. }
  83. if (methodcode.Split("|")[0].ToString().StartsWith("163D"))
  84. {
  85. req.headers.sourceCode = "163D";
  86. }
  87. else if (methodcode.Split("|")[0].ToString().StartsWith("163I"))
  88. {
  89. req.headers.sourceCode = "163I";
  90. }
  91. else if (methodcode.Split("|")[0].ToString().StartsWith("163L"))
  92. {
  93. req.headers.sourceCode = "163L";
  94. }
  95. else if (methodcode.Split("|")[0].ToString().StartsWith("163K"))
  96. {
  97. req.headers.sourceCode = "163K";
  98. }
  99. else if (methodcode.Split("|")[0].ToString().StartsWith("163J"))
  100. {
  101. req.headers.sourceCode = "163J";
  102. }
  103. var strEsbRes = HttpUtil.PostRequest(apiurl, JsonConvert.SerializeObject(strReqBody), 30000, "UTF-8", "application/json", reqid, req.headers.sourceCode, req.headers.serviceCode);
  104. if (!string.IsNullOrEmpty(strEsbRes))
  105. {
  106. //res = JsonConvert.DeserializeObject<SRes>(strEsbRes);
  107. return strEsbRes;
  108. }
  109. else
  110. {
  111. res = new SRes() { ResMsg = "MES没有返回任务数据", ResCode = 500, Memo1 = apiurl, Memo2 = req.ToJsonString(), Memo3 = strEsbRes };
  112. }
  113. return res.ToCamelCaseString();
  114. }
  115. internal string WmsServiceExportMq(object strReqBody)
  116. {
  117. var res = new SRes();
  118. //var aa = (new StackTrace()).GetFrame(0).GetMethod().Name;//当前方法名
  119. var methodName = (new StackTrace()).GetFrame(1).GetMethod().Name;//调用的方法名称
  120. string methodcode = "";
  121. if (_ptService != null)
  122. {
  123. methodcode = _ptService.GetSysConfigContentByCode(methodName);
  124. }
  125. else if (_hJService != null)
  126. {
  127. methodcode = _hJService.GetSysConfigContentByCode(methodName);
  128. }
  129. else if (_cpService != null)
  130. {
  131. methodcode = _cpService.GetSysConfigContentByCode(methodName);
  132. }
  133. else if (_fjService != null)
  134. {
  135. methodcode = _fjService.GetSysConfigContentByCode(methodName);
  136. }
  137. if (string.IsNullOrEmpty(methodcode))
  138. {
  139. return new SRes() { ResCode = 0, ResMsg = "数据表没有配置" }.ToCamelCaseString();
  140. }
  141. methodcode = RedisHelper.Get("sys_config" + methodName);
  142. var reqid = Guid.NewGuid().ToString();
  143. var req = new EsbReq() { headers = new HeadersReq() { serviceCode = methodcode.Split("|")[0], requestId = reqid, TrackId = reqid } };
  144. //req.Body = strReqBody;
  145. var apiurl = wms.util.AppSettings.GetConfig("EsbMesPushUrlMq");
  146. if (methodcode.Split("|")[0].StartsWith("163D"))
  147. {
  148. req.headers.sourceCode = "163D";
  149. }
  150. else if (methodcode.Split("|")[0].StartsWith("163I"))
  151. {
  152. req.headers.sourceCode = "163I";
  153. }
  154. else if (methodcode.Split("|")[0].StartsWith("163J"))
  155. {
  156. req.headers.sourceCode = "163J";
  157. }
  158. else if (methodcode.Split("|")[0].StartsWith("163L"))
  159. {
  160. req.headers.sourceCode = "163L";
  161. }
  162. else if (methodcode.Split("|")[0].StartsWith("163K"))
  163. {
  164. req.headers.sourceCode = "163K";
  165. }
  166. var strEsbRes = "";
  167. try
  168. {
  169. //_logger.LogInformation("111111111111");
  170. strEsbRes = HttpUtil.PostRequest(apiurl, JsonConvert.SerializeObject(strReqBody), 30000, "UTF-8", "application/json", reqid, req.headers.sourceCode, req.headers.serviceCode);
  171. //_logger.LogInformation(methodName + "POST响应参数" + strEsbRes);
  172. }
  173. catch (Exception ex)
  174. {
  175. _logger.LogInformation(methodName + "调用异常:" + ex.ToString());
  176. }
  177. if (!string.IsNullOrEmpty(strEsbRes))
  178. {
  179. //res = JsonConvert.DeserializeObject<SRes>(strEsbRes);
  180. return strEsbRes;
  181. }
  182. else
  183. {
  184. res = new SRes() { ResMsg = "MES没有返回任务数据", ResCode = 500, Memo1 = apiurl, Memo2 = req.ToJsonString(), Memo3 = strEsbRes };
  185. }
  186. return res.ToCamelCaseString();
  187. }
  188. /// <summary>
  189. /// 并发管控
  190. /// </summary>
  191. /// <typeparam name="T">方法请求参数类型</typeparam>
  192. /// <typeparam name="U">方法响应参数类型</typeparam>
  193. /// <param name="lockobj">方法锁</param>
  194. /// <param name="key">并发管控关键key</param>
  195. /// <param name="equNo">管控设备号</param>
  196. /// <param name="reqparam">请求参数</param>
  197. /// <param name="fun">管控方法</param>
  198. /// <returns></returns>
  199. public U ConcurrencyReqControl<T, U>(object lockobj, string key, string equNo, BaseRequest reqparam, Func<T, U> fun) where T : BaseRequest where U : SRes, new()
  200. {
  201. var res = new U();
  202. try
  203. {
  204. lock (lockobj)
  205. {
  206. //并发管控
  207. var sign = RedisHelper.Get(key);
  208. if (!string.IsNullOrEmpty(sign) && sign == "1")
  209. {
  210. //不可通行
  211. res.ResCode = 0;
  212. res.ResMsg = equNo + "并发重复请求";
  213. return res;
  214. }
  215. //加状态
  216. RedisHelper.Set(key, "1");
  217. }
  218. var resulttemp = fun((T)reqparam);
  219. RedisHelper.Set(key, "0");
  220. return resulttemp;
  221. }
  222. catch (Exception ex)
  223. {
  224. RedisHelper.Set(key, "0");
  225. res.ResCode = 500;
  226. res.ResMsg = ex.Message;
  227. return res;
  228. }
  229. finally
  230. {
  231. RedisHelper.Del(key);
  232. }
  233. }
  234. /// <summary>
  235. /// 并发管控
  236. /// </summary>
  237. /// <typeparam name="U">方法响应参数类型</typeparam>
  238. /// <param name="key">并发管控关键key</param>
  239. /// <param name="equNo">管控设备号</param>
  240. /// <param name="reqparam">请求参数</param>
  241. /// <param name="fun">管控方法</param>
  242. /// <returns></returns>
  243. public U ConcurrencyReqControl<U>(string key, string equNo, Func<U> fun) where U : SRes, new()
  244. {
  245. var res = new U();
  246. try
  247. {
  248. //并发管控
  249. var sign = RedisHelper.Get(key);
  250. if (!string.IsNullOrEmpty(sign) && sign == "1")
  251. {
  252. //不可通行
  253. res.ResCode = 0;
  254. res.ResMsg = equNo + "并发重复请求";
  255. return res;
  256. }
  257. //加状态
  258. RedisHelper.Set(key, "1");
  259. var resulttemp = fun();
  260. RedisHelper.Set(key, "0");
  261. return resulttemp;
  262. }
  263. catch (Exception ex)
  264. {
  265. RedisHelper.Set(key, "0");
  266. res.ResCode = 500;
  267. res.ResMsg = ex.Message;
  268. return res;
  269. }
  270. finally
  271. {
  272. RedisHelper.Del(key);
  273. }
  274. }
  275. }
  276. }