286 lines
11 KiB
C#
286 lines
11 KiB
C#
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
|
|
{
|
|
/// <summary>
|
|
/// 审批流
|
|
/// </summary>
|
|
public class WorkflowController : ApiController
|
|
{
|
|
/// <summary>
|
|
/// 日志组件
|
|
/// </summary>
|
|
private readonly ILog _logInfo = LogManager.GetLogger("logInfo");
|
|
|
|
private static readonly MemoryCache _cache = new MemoryCache(new MemoryCacheOptions { ExpirationScanFrequency = TimeSpan.FromMinutes(10) });
|
|
|
|
/// <summary>
|
|
/// 提交审批流(单号)
|
|
/// </summary>
|
|
/// <param name="cAccId">系统注册号</param>
|
|
/// <param name="cCardNum">单据类型编码</param>
|
|
/// <param name="cCode">单据编号</param>
|
|
/// <param name="eventId">审批事件</param>
|
|
/// <param name="bUap">是否UAP单据</param>
|
|
/// <returns></returns>
|
|
[HttpGet]
|
|
[Route("api/U8/Workflow/SubmitApplicationMessage/Code")]
|
|
public async Task<BaseResult<string>> 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}-----单据:{cCardNum},操作:提交审批流,对接账套:{cAccId},单据编号:{cCode}");
|
|
|
|
if (!_cache.TryGetValue($"U8_{cAccId}", out BaseLogin baseLogin))
|
|
{
|
|
_logInfo.Debug($"作业Id:{workId}-----未获取到缓存的登录信息,正在重新构建");
|
|
|
|
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<string> { bSuccess = false, message = ex.Message, result = ex.StackTrace };
|
|
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 提交审批流(单号)
|
|
/// </summary>
|
|
/// <param name="cAccId">系统注册号</param>
|
|
/// <param name="cCardNum">单据类型编码</param>
|
|
/// <param name="cCode">单据编号</param>
|
|
/// <param name="eventId">审批事件</param>
|
|
/// <param name="bUap">是否UAP单据</param>
|
|
/// <returns></returns>
|
|
[HttpGet]
|
|
[Route("api/U8/Workflow/SubmitApplicationMessage/Code/Token")]
|
|
public async Task<BaseResult<string>> 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<LoginOutput>();
|
|
|
|
var token = CommUnit.GetDecrypt(output.userToken);
|
|
|
|
var workId = SnowFlakeSingle.Instance.NextId();
|
|
|
|
_logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:新增,对接账套:{output.cAccId},单据编号:{cCode}");
|
|
|
|
if (!_cache.TryGetValue($"U8_{userToken}_{output.cAccId}", out BaseLogin baseLogin))
|
|
{
|
|
_logInfo.Debug($"作业Id:{workId}-----未获取到缓存的登录信息,正在重新构建");
|
|
|
|
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<string> { bSuccess = false, message = ex.Message, result = ex.StackTrace };
|
|
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 提交审批流(ID)
|
|
/// </summary>
|
|
/// <param name="cCardNum">单据类型编码</param>
|
|
/// <param name="voucherId">单据ID</param>
|
|
/// <param name="cAccId">系统注册号</param>
|
|
/// <param name="eventId">审批事件</param>
|
|
/// <param name="bUap">是否UAP单据</param>
|
|
/// <returns></returns>
|
|
[HttpGet]
|
|
[Route("api/U8/Workflow/SubmitApplicationMessage/ID")]
|
|
public async Task<BaseResult<string>> 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}-----未获取到缓存的登录信息,正在重新构建");
|
|
|
|
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<string> { bSuccess = false, message = ex.Message, result = ex.StackTrace };
|
|
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 提交审批流(ID)
|
|
/// </summary>
|
|
/// <param name="cCardNum">单据类型编码</param>
|
|
/// <param name="voucherId">单据ID</param>
|
|
/// <param name="cAccId">系统注册号</param>
|
|
/// <param name="eventId">审批事件</param>
|
|
/// <param name="bUap">是否UAP单据</param>
|
|
/// <returns></returns>
|
|
[HttpGet]
|
|
[Route("api/U8/Workflow/SubmitApplicationMessage/ID/Token")]
|
|
public async Task<BaseResult<string>> 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<LoginOutput>();
|
|
|
|
var token = CommUnit.GetDecrypt(output.userToken);
|
|
|
|
var workId = SnowFlakeSingle.Instance.NextId();
|
|
|
|
_logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:新增,对接账套:{output.cAccId},单据ID:{voucherId}");
|
|
|
|
if (!_cache.TryGetValue($"U8_{userToken}_{output.cAccId}", out BaseLogin baseLogin))
|
|
{
|
|
_logInfo.Debug($"作业Id:{workId}-----未获取到缓存的登录信息,正在重新构建");
|
|
|
|
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<string> { bSuccess = false, message = ex.Message, result = ex.StackTrace };
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|