BaseController.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  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. if (string.IsNullOrEmpty(methodcode))
  62. {
  63. return new SRes() { ResCode = 0, ResMsg = "数据表没有配置" }.ToCamelCaseString();
  64. }
  65. methodcode = RedisHelper.Get("sys_config" + methodName);
  66. var reqid = Guid.NewGuid().ToString();
  67. var req = new EsbReq() { headers = new HeadersReq() { serviceCode = methodcode.Split("|")[0], requestId = reqid, TrackId = reqid } };
  68. //req.Body = strReqBody;
  69. string sysname = methodcode.Split("|")[1];
  70. var apiurl = "";
  71. if (sysname == "mes")
  72. {
  73. apiurl = wms.util.AppSettings.GetConfig("EsbMesPushUrl");
  74. }
  75. else
  76. {
  77. apiurl = wms.util.AppSettings.GetConfig("EsbErpPushUrl");
  78. }
  79. var strEsbRes = HttpUtil.PostRequest(apiurl, JsonConvert.SerializeObject(strReqBody), 30000, "UTF-8", "application/json", reqid, req.headers.sourceCode, req.headers.serviceCode);
  80. if (!string.IsNullOrEmpty(strEsbRes))
  81. {
  82. //res = JsonConvert.DeserializeObject<SRes>(strEsbRes);
  83. return strEsbRes;
  84. }
  85. else
  86. {
  87. res = new SRes() { ResMsg = "MES没有返回任务数据", ResCode = 500, Memo1 = apiurl, Memo2 = req.ToJsonString(), Memo3 = strEsbRes };
  88. }
  89. return res.ToCamelCaseString();
  90. }
  91. /// <summary>
  92. /// 并发管控
  93. /// </summary>
  94. /// <typeparam name="T">方法请求参数类型</typeparam>
  95. /// <typeparam name="U">方法响应参数类型</typeparam>
  96. /// <param name="lockobj">方法锁</param>
  97. /// <param name="key">并发管控关键key</param>
  98. /// <param name="equNo">管控设备号</param>
  99. /// <param name="reqparam">请求参数</param>
  100. /// <param name="fun">管控方法</param>
  101. /// <returns></returns>
  102. public U ConcurrencyReqControl<T, U>(object lockobj, string key, string equNo, BaseRequest reqparam, Func<T, U> fun) where T : BaseRequest where U : SRes, new()
  103. {
  104. var res = new U();
  105. try
  106. {
  107. lock (lockobj)
  108. {
  109. //并发管控
  110. var sign = RedisHelper.Get(key);
  111. if (!string.IsNullOrEmpty(sign) && sign == "1")
  112. {
  113. //不可通行
  114. res.ResCode = 0;
  115. res.ResMsg = equNo + "并发重复请求";
  116. return res;
  117. }
  118. //加状态
  119. RedisHelper.Set(key, "1");
  120. }
  121. var resulttemp = fun((T)reqparam);
  122. RedisHelper.Set(key, "0");
  123. return resulttemp;
  124. }
  125. catch (Exception ex)
  126. {
  127. RedisHelper.Set(key, "0");
  128. res.ResCode = 500;
  129. res.ResMsg = ex.Message;
  130. return res;
  131. }
  132. finally
  133. {
  134. RedisHelper.Del(key);
  135. }
  136. }
  137. }
  138. }