using log4net; using Microsoft.Extensions.Caching.Memory; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Threading.Tasks; using System.Web.Http; using System.Web.UI.WebControls; using UFIDA.U8.Framework.Api.ControlObject.Entity; using UFIDA.U8.Framework.Api.ControlObject.Json; using UFIDA.U8.Framework.Api.ControlObject.U8M; using UFIDA.U8.Framework.Api.ControlObject.Workflow; using UFIDA.U8.Framework.Api.Entity; using UFIDA.U8.Framework.Api.Models; using UFIDA.U8.Framework.Api.Unit; namespace UFIDA.U8.Framework.Api.Controllers.U8 { /// /// 审批流 /// public class WorkflowController : ApiController { /// /// 日志组件 /// private readonly ILog _logInfo = LogManager.GetLogger("logInfo"); private static readonly MemoryCache _cache = new MemoryCache(new MemoryCacheOptions { ExpirationScanFrequency = TimeSpan.FromMinutes(10) }); /// /// 提交审批流(单号) /// /// 系统注册号 /// 单据类型编码 /// 单据编号 /// 审批事件 /// 是否UAP单据 /// [HttpGet] [Route("api/U8/Workflow/SubmitApplicationMessage/Code")] public async Task> SubmitApplicationMessage(string cAccId, string cCardNum,string cCode,string eventId, bool bUap=false) { try { if (Request.Headers.TryGetValues("userToken", out var userToken)) { return await SubmitApplicationMessageToken(cCardNum, cCode, eventId, bUap); } _logInfo.Debug($"当前接口:api/U8/Workflow/SubmitApplicationMessage/Code,对接账套:{cAccId},单据:{cCardNum},事件:{eventId},单据编号:{cCode}"); var db = CommUnit.GetDbClient(); var workId = SnowFlakeSingle.Instance.NextId(); _logInfo.Debug($"作业Id:{workId}-----{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}-----单据:{cCardNum},操作:提交审批流,对接账套:{cAccId},单据编号:{cCode}"); if (!_cache.TryGetValue($"U8_{cAccId}", out BaseLogin baseLogin)) { _logInfo.Debug($"作业Id:{workId}-----{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}-----未获取到缓存的登录信息,正在重新构建"); baseLogin = new BaseLogin(); var param = await CommUnit.GetLoginParamter(cAccId); if (param == null) { throw new Exception("未能加载指定系统号的登录信息"); } baseLogin.Init(param, true); _cache.Clear(); _cache.Set($"U8_{cAccId}", baseLogin); } var services = new ServiceProxy(); return await services.SubmitApplicationMessage(baseLogin, cCardNum, eventId, cCode, bUap); } catch (Exception ex) { _logInfo.Error(ex.Message, ex); return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; } } /// /// 提交审批流(单号) /// /// 系统注册号 /// 单据类型编码 /// 单据编号 /// 审批事件 /// 是否UAP单据 /// [HttpGet] [Route("api/U8/Workflow/SubmitApplicationMessage/Code/Token")] public async Task> SubmitApplicationMessageToken(string cCardNum,string cCode,string eventId, bool bUap=false) { try { var userToken = Request.Headers.GetValues("userToken").First(); if (string.IsNullOrWhiteSpace(userToken)) { throw new Exception("校验userToken失败"); } _logInfo.Debug($"当前接口:api/U8/Workflow/SubmitApplicationMessage/Code/{userToken},单据:{cCardNum},事件:{eventId},单据编号:{cCode}"); var output = CommUnit.GetDecrypt(userToken).ToObject(); var token = CommUnit.GetDecrypt(output.userToken); var workId = SnowFlakeSingle.Instance.NextId(); _logInfo.Debug($"作业Id:{workId}-----{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}-----单据:{cCardNum},操作:新增,对接账套:{output.cAccId},单据编号:{cCode}"); if (!_cache.TryGetValue($"U8_{userToken}_{output.cAccId}", out BaseLogin baseLogin)) { _logInfo.Debug($"作业Id:{workId}-----{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}-----未获取到缓存的登录信息,正在重新构建"); baseLogin = new BaseLogin(); baseLogin.Init(token, true, 5); try { _cache.Remove($"U8_{userToken}_{output.cAccId}"); } catch { _logInfo.Debug($"不存在[U8_{userToken}_{output.cAccId}]的缓存"); } _cache.Set($"U8_{userToken}_{output.cAccId}", baseLogin); } var services = new ServiceProxy(); return await services.SubmitApplicationMessage(baseLogin, cCardNum, eventId, cCode, bUap); } catch (Exception ex) { _logInfo.Error(ex.Message, ex); return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; } } /// /// 提交审批流(ID) /// /// 单据类型编码 /// 单据ID /// 系统注册号 /// 审批事件 /// 是否UAP单据 /// [HttpGet] [Route("api/U8/Workflow/SubmitApplicationMessage/ID")] public async Task> SubmitApplicationMessage(string cAccId, string cCardNum, long voucherId, string eventId, bool bUap = false) { try { if (Request.Headers.TryGetValues("userToken", out var userToken)) { return await SubmitApplicationMessageToken(cCardNum, voucherId, eventId, bUap); } var db = CommUnit.GetDbClient(); var workId = SnowFlakeSingle.Instance.NextId(); _logInfo.Debug($"当前接口:api/U8/Workflow/SubmitApplicationMessage/Code,作业Id:{workId},对接账套:{cAccId},单据:{cCardNum},事件:{eventId},单据ID:{voucherId}"); if (!_cache.TryGetValue($"U8_{cAccId}", out BaseLogin baseLogin)) { _logInfo.Debug($"作业Id:{workId}-----{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}-----未获取到缓存的登录信息,正在重新构建"); baseLogin = new BaseLogin(); var param = await CommUnit.GetLoginParamter(cAccId); if (param == null) { throw new Exception("未能加载指定系统号的登录信息"); } baseLogin.Init(param, false); _cache.Clear(); _cache.Set($"U8_{cAccId}", baseLogin); } var services = new ServiceProxy(); return await services.SubmitApplicationMessage(baseLogin, cCardNum, eventId, voucherId, bUap); } catch (Exception ex) { _logInfo.Error(ex.Message, ex); return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; } } /// /// 提交审批流(ID) /// /// 单据类型编码 /// 单据ID /// 系统注册号 /// 审批事件 /// 是否UAP单据 /// [HttpGet] [Route("api/U8/Workflow/SubmitApplicationMessage/ID/Token")] public async Task> SubmitApplicationMessageToken(string cCardNum, long voucherId, string eventId, bool bUap = false) { try { var userToken = Request.Headers.GetValues("userToken").First(); if (string.IsNullOrWhiteSpace(userToken)) { throw new Exception("校验userToken失败"); } _logInfo.Debug($"当前接口:api/U8/Workflow/SubmitApplicationMessage/ID/{userToken},单据:{cCardNum},事件:{eventId},单据ID:{voucherId}"); var output = CommUnit.GetDecrypt(userToken).ToObject(); var token = CommUnit.GetDecrypt(output.userToken); var workId = SnowFlakeSingle.Instance.NextId(); _logInfo.Debug($"作业Id:{workId}-----{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}-----单据:{cCardNum},操作:新增,对接账套:{output.cAccId},单据ID:{voucherId}"); if (!_cache.TryGetValue($"U8_{userToken}_{output.cAccId}", out BaseLogin baseLogin)) { _logInfo.Debug($"作业Id:{workId}-----{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}-----未获取到缓存的登录信息,正在重新构建"); baseLogin = new BaseLogin(); baseLogin.Init(token, true, 5); try { _cache.Remove($"U8_{userToken}_{output.cAccId}"); } catch { _logInfo.Debug($"不存在[U8_{userToken}_{output.cAccId}]的缓存"); } _cache.Set($"U8_{userToken}_{output.cAccId}", baseLogin); } var services = new ServiceProxy(); return await services.SubmitApplicationMessage(baseLogin, cCardNum, eventId, voucherId, bUap); } catch (Exception ex) { _logInfo.Error(ex.Message, ex); return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; } } } }