123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- using Microsoft.AspNetCore.Mvc;
- using Newtonsoft.Json;
- using System.Diagnostics;
- using wms.dto.request;
- using wms.dto.response;
- using wms.service.IService;
- 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<BaseController> _logger;
- public BaseController(IHJService hJService, ILogger<BaseController> 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;
- }
- /// <summary>
- /// 发送ESB请求统一出口
- /// </summary>
- /// <param name="reqDto"></param>
- /// <returns></returns>
- 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<SRes>(strEsbRes);
- return strEsbRes;
- }
- else
- {
- res = new SRes() { ResMsg = "MES没有返回任务数据", ResCode = 500, Memo1 = apiurl, Memo2 = req.ToJsonString(), Memo3 = strEsbRes };
- }
- return res.ToCamelCaseString();
- }
- /// <summary>
- /// 并发管控
- /// </summary>
- /// <typeparam name="T">方法请求参数类型</typeparam>
- /// <typeparam name="U">方法响应参数类型</typeparam>
- /// <param name="lockobj">方法锁</param>
- /// <param name="key">并发管控关键key</param>
- /// <param name="equNo">管控设备号</param>
- /// <param name="reqparam">请求参数</param>
- /// <param name="fun">管控方法</param>
- /// <returns></returns>
- public U ConcurrencyReqControl<T, U>(object lockobj, string key, string equNo, BaseRequest reqparam, Func<T, U> 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;
- }
- finally
- {
- RedisHelper.Del(key);
- }
- }
- }
- }
|