201 lines
6.4 KiB
C#
201 lines
6.4 KiB
C#
using Microsoft.Data.Sqlite;
|
|
using SqlSugar;
|
|
using System;
|
|
using System.Configuration;
|
|
using System.Threading.Tasks;
|
|
using UFIDA.U8.Framework.Api.Common.Unit.GM;
|
|
using UFIDA.U8.Framework.Api.ControlObject.Entity;
|
|
using UFIDA.U8.Framework.Api.ControlObject.Json;
|
|
using UFIDA.U8.Framework.Api.Entity;
|
|
|
|
namespace UFIDA.U8.Framework.Api.Unit
|
|
{
|
|
/// <summary>
|
|
/// 公共帮助类
|
|
/// </summary>
|
|
public static class CommUnit
|
|
{
|
|
/// <summary>
|
|
/// 读取对应配置
|
|
/// </summary>
|
|
/// <param name="key"></param>
|
|
/// <returns></returns>
|
|
public static string GetConfig(string key)
|
|
{
|
|
return ConfigurationManager.AppSettings[key];
|
|
}
|
|
|
|
/// <summary>
|
|
/// 解密
|
|
/// </summary>
|
|
/// <param name="val"></param>
|
|
/// <returns></returns>
|
|
public static string GetDecrypt(string val)
|
|
{
|
|
return GMUtil.SM2Decrypt(GetConfig("PrivateKey"), val);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 加密
|
|
/// </summary>
|
|
/// <param name="val"></param>
|
|
/// <returns></returns>
|
|
public static string GetEncrypt(string val)
|
|
{
|
|
return GMUtil.SM2Encrypt(GetConfig("PublicKey"), val);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取数据库配置信息
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
/// <exception cref="Exception"></exception>
|
|
public static ConnectionConfig GetConnectionConfig()
|
|
{
|
|
if (Enum.TryParse<DbType>(GetConfig("DbType"), true, out var dbType))
|
|
{
|
|
var connStr = GetDecrypt(GetConfig("ConnectionString"));
|
|
|
|
var path = $"{AppDomain.CurrentDomain.BaseDirectory}{connStr}";
|
|
|
|
|
|
var liteConn = new SqliteConnectionStringBuilder()
|
|
{
|
|
DataSource = path
|
|
};
|
|
|
|
var conn = new ConnectionConfig()
|
|
{
|
|
DbType = dbType,
|
|
ConnectionString = liteConn.ConnectionString,
|
|
ConfigId = "0",
|
|
IsAutoCloseConnection = true,
|
|
MoreSettings = new ConnMoreSettings()
|
|
{
|
|
IsWithNoLockQuery = true
|
|
}
|
|
};
|
|
|
|
return conn;
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("请维护数据库类型");
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取连接对象
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public static SqlSugarClient GetDbClient()
|
|
{
|
|
var db = new SqlSugarClient(GetConnectionConfig());
|
|
|
|
return db;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取登录参数
|
|
/// </summary>
|
|
/// <param name="cAccId"></param>
|
|
/// <param name="bAP"></param>
|
|
/// <param name="pDate"></param>
|
|
/// <returns></returns>
|
|
public static async Task<LoginParamter> GetLoginParamter(string cAccId, bool bAP = false, string pDate = "")
|
|
{
|
|
var db = new SqlSugarClient(GetConnectionConfig());
|
|
|
|
var account = await db.Queryable<SysU8AccountConfig>().FirstAsync(a => a.Status == StatusEnum.Enable && a.cAccountNo == cAccId);
|
|
|
|
if (account != null)
|
|
{
|
|
var param = new LoginParamter()
|
|
{
|
|
cSrv = account.cSrv,
|
|
pAccId = account.cAcc_DataSource,
|
|
pDate = string.IsNullOrWhiteSpace(pDate) ? $"{DateTime.Today:yyyy-MM-dd}" : pDate,
|
|
pPassword = string.IsNullOrWhiteSpace(account.cPassword) ? "" : GetDecrypt(account.cPassword),
|
|
pYearId = string.IsNullOrWhiteSpace(pDate) ? $"{DateTime.Today.Year}" : $"{DateTime.Parse(pDate).Year}",
|
|
pSubId = bAP ? "AP" : "DP",
|
|
pUserId = account.cUser_Id,
|
|
cAccId = account.cAcc_Id
|
|
};
|
|
|
|
return param;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取用户令牌
|
|
/// </summary>
|
|
/// <param name="userToken">用户令牌</param>
|
|
/// <returns></returns>
|
|
public static string GetUserToken(string userToken)
|
|
{
|
|
var output = CommUnit.GetDecrypt(userToken).ToObject<LoginOutput>();
|
|
|
|
var token = CommUnit.GetDecrypt(output.userToken);
|
|
|
|
return token;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 保存请求结果
|
|
/// </summary>
|
|
/// <param name="tradeid"></param>
|
|
/// <param name="bRun"></param>
|
|
/// <param name="result"></param>
|
|
/// <returns></returns>
|
|
/// <exception cref="Exception"></exception>
|
|
public static async Task SaveResult(string tradeid, bool bRun, BaseResult<string> result = null)
|
|
{
|
|
var db = GetDbClient();
|
|
|
|
if (!db.DbMaintenance.IsAnyTable("SysTradeResult"))
|
|
{
|
|
db.CodeFirst.InitTables(typeof(SysTradeResult));
|
|
}
|
|
|
|
if (bRun == true)
|
|
{
|
|
if (await db.Queryable<SysTradeResult>().AnyAsync(a => a.cTradeId == tradeid))
|
|
{
|
|
throw new Exception($"请求ID:{tradeid}重复");
|
|
}
|
|
|
|
var count = await db.Queryable<SysTradeResult>().CountAsync();
|
|
|
|
if (count > 1000)
|
|
{
|
|
var idList = await db.Queryable<SysTradeResult>().Select(a => a.Id).Take(count - 1000).ToListAsync();
|
|
|
|
await db.Deleteable<SysTradeResult>().Where(a => idList.Contains(a.Id)).ExecuteCommandAsync();
|
|
}
|
|
|
|
var entity = new SysTradeResult
|
|
{
|
|
Id = SnowFlakeSingle.Instance.NextId(),
|
|
bRun = bRun,
|
|
cTradeId = tradeid,
|
|
cResult = result,
|
|
dStartDate = DateTime.Now,
|
|
};
|
|
|
|
await db.Insertable(entity).ExecuteCommandAsync();
|
|
}
|
|
else
|
|
{
|
|
var entity = await db.Queryable<SysTradeResult>().Where(a => a.cTradeId == tradeid).FirstAsync();
|
|
|
|
entity.cResult = result;
|
|
entity.bRun = false;
|
|
entity.dEndDate = DateTime.Now;
|
|
|
|
await db.Updateable(entity).ExecuteCommandAsync();
|
|
}
|
|
|
|
}
|
|
}
|
|
} |