从缓存读取数据连接和用户名称

This commit is contained in:
2023-03-28 17:01:15 +08:00
parent d636034f06
commit bf847beeae
3 changed files with 344 additions and 312 deletions

View File

@@ -13,6 +13,7 @@ using JNPF.Systems.Entitys.System;
using JNPF.Systems.Interfaces.System; using JNPF.Systems.Interfaces.System;
using Mapster; using Mapster;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Caching.Memory;
using SqlSugar; using SqlSugar;
namespace JNPF.Systems; namespace JNPF.Systems;
@@ -27,293 +28,303 @@ namespace JNPF.Systems;
[Route("api/system/[controller]")] [Route("api/system/[controller]")]
public class DbLinkService : IDbLinkService, IDynamicApiController, ITransient public class DbLinkService : IDbLinkService, IDynamicApiController, ITransient
{ {
/// <summary> /// <summary>
/// 服务基础仓储. /// 服务基础仓储.
/// </summary> /// </summary>
private readonly ISqlSugarRepository<DbLinkEntity> _repository; private readonly ISqlSugarRepository<DbLinkEntity> _repository;
/// <summary> /// <summary>
/// 数据字典服务. /// 数据字典服务.
/// </summary> /// </summary>
private readonly IDictionaryDataService _dictionaryDataService; private readonly IDictionaryDataService _dictionaryDataService;
/// <summary> /// <summary>
/// 数据库管理. /// 数据库管理.
/// </summary> /// </summary>
private readonly IDataBaseManager _dataBaseManager; private readonly IDataBaseManager _dataBaseManager;
/// <summary> private readonly IMemoryCache _memCache;
/// 初始化一个<see cref="DbLinkService"/>类型的新实例.
/// </summary> /// <summary>
public DbLinkService( /// 初始化一个<see cref="DbLinkService"/>类型的新实例.
ISqlSugarRepository<DbLinkEntity> repository, /// </summary>
IDictionaryDataService dictionaryDataService, public DbLinkService(
IDataBaseManager dataBaseManager) ISqlSugarRepository<DbLinkEntity> repository,
IDictionaryDataService dictionaryDataService,
IDataBaseManager dataBaseManager,
IMemoryCache memCache)
{
_repository = repository;
_dictionaryDataService = dictionaryDataService;
_dataBaseManager = dataBaseManager;
_memCache = memCache;
}
#region GET
/// <summary>
/// 列表.
/// </summary>
/// <returns></returns>
[HttpGet("")]
public async Task<dynamic> GetList([FromQuery] DbLinkListInput input)
{
var list = await _repository.AsSugarClient().Queryable<DbLinkEntity, UserEntity, UserEntity>(
(a, b, c) => new JoinQueryInfos(JoinType.Left, a.CreatorUserId == b.Id, JoinType.Left, a.LastModifyUserId == c.Id))
.Where((a, b, c) => a.DeleteMark == null)
.WhereIF(input.dbType.IsNotEmptyOrNull(), (a, b, c) => a.DbType == input.dbType)
.WhereIF(input.keyword.IsNotEmptyOrNull(), (a, b, c) => a.FullName.Contains(input.keyword))
.Select((a, b, c) => new DbLinkListOutput()
{
id = a.Id,
creatorTime = a.CreatorTime,
creatorUser = SqlFunc.MergeString(b.RealName, "/", b.Account),
dbType = a.DbType,
enabledMark = a.EnabledMark,
fullName = a.FullName,
host = a.Host,
lastModifyTime = a.LastModifyTime,
lastModifyUser = SqlFunc.MergeString(c.RealName, "/", c.Account),
port = a.Port.ToString(),
sortCode = a.SortCode
}).Distinct().MergeTable().OrderBy((a) => a.sortCode).OrderBy((a) => a.creatorTime, OrderByType.Desc).ToPagedListAsync(input.currentPage, input.pageSize);
return PageResult<DbLinkListOutput>.SqlSugarPageResult(list);
}
/// <summary>
/// 下拉框列表.
/// </summary>
/// <returns></returns>
[HttpGet("Selector")]
public async Task<dynamic> GetSelector([FromQuery] string type)
{
var data = (await GetList()).Adapt<List<DbLinkSelectorOutput>>();
// 数据库分类
var dbTypeList = (await _dictionaryDataService.GetList("dbType")).FindAll(x => x.EnabledMark == 1);
var output = new List<DbLinkSelectorOutput>();
if (type.IsNullOrEmpty())
{ {
_repository = repository; output.Add(new DbLinkSelectorOutput()
_dictionaryDataService = dictionaryDataService; {
_dataBaseManager = dataBaseManager; id = "-2",
parentId = "0",
fullName = "",
num = data.FindAll(x => x.parentId == null).Count
});
var defaultDBType = App.GetConfig<ConnectionStringsOptions>("ConnectionStrings", true).DBType;
if (defaultDBType.Equals("Kdbndp"))
{
defaultDBType = "KingbaseES";
}
if (defaultDBType.Equals("Dm"))
{
defaultDBType = "DM8";
}
output.Add(new DbLinkSelectorOutput()
{
id = "0",
parentId = "-2",
fullName = "默认数据库",
dbType = defaultDBType,
num = 1
});
} }
#region GET output.Add(new DbLinkSelectorOutput()
/// <summary>
/// 列表.
/// </summary>
/// <returns></returns>
[HttpGet("")]
public async Task<dynamic> GetList([FromQuery] DbLinkListInput input)
{ {
var list = await _repository.AsSugarClient().Queryable<DbLinkEntity, UserEntity, UserEntity>( id = "-1",
(a, b, c) => new JoinQueryInfos(JoinType.Left, a.CreatorUserId == b.Id, JoinType.Left, a.LastModifyUserId == c.Id)) parentId = "0",
.Where((a, b, c) => a.DeleteMark == null) fullName = "未分类",
.WhereIF(input.dbType.IsNotEmptyOrNull(), (a, b, c) => a.DbType == input.dbType) num = data.FindAll(x => x.parentId == null).Count
.WhereIF(input.keyword.IsNotEmptyOrNull(), (a, b, c) => a.FullName.Contains(input.keyword)) });
.Select((a, b, c) => new DbLinkListOutput()
{
id = a.Id,
creatorTime = a.CreatorTime,
creatorUser = SqlFunc.MergeString(b.RealName, "/", b.Account),
dbType = a.DbType,
enabledMark = a.EnabledMark,
fullName = a.FullName,
host = a.Host,
lastModifyTime = a.LastModifyTime,
lastModifyUser = SqlFunc.MergeString(c.RealName, "/", c.Account),
port = a.Port.ToString(),
sortCode = a.SortCode
}).Distinct().MergeTable().OrderBy((a) => a.sortCode).OrderBy((a) => a.creatorTime, OrderByType.Desc).ToPagedListAsync(input.currentPage, input.pageSize);
return PageResult<DbLinkListOutput>.SqlSugarPageResult(list);
}
/// <summary> foreach (var item in dbTypeList)
/// 下拉框列表.
/// </summary>
/// <returns></returns>
[HttpGet("Selector")]
public async Task<dynamic> GetSelector([FromQuery] string type)
{ {
var data = (await GetList()).Adapt<List<DbLinkSelectorOutput>>(); var index = data.FindAll(x => x.dbType.Equals(item.EnCode)).Count;
if (index > 0)
// 数据库分类 {
var dbTypeList = (await _dictionaryDataService.GetList("dbType")).FindAll(x => x.EnabledMark == 1);
var output = new List<DbLinkSelectorOutput>();
if (type.IsNullOrEmpty())
{
output.Add(new DbLinkSelectorOutput()
{
id = "-2",
parentId = "0",
fullName = "",
num = data.FindAll(x => x.parentId == null).Count
});
var defaultDBType = App.GetConfig<ConnectionStringsOptions>("ConnectionStrings", true).DBType;
if (defaultDBType.Equals("Kdbndp"))
{
defaultDBType = "KingbaseES";
}
if (defaultDBType.Equals("Dm"))
{
defaultDBType = "DM8";
}
output.Add(new DbLinkSelectorOutput()
{
id = "0",
parentId = "-2",
fullName = "默认数据库",
dbType = defaultDBType,
num = 1
});
}
output.Add(new DbLinkSelectorOutput() output.Add(new DbLinkSelectorOutput()
{ {
id = "-1", id = item.Id,
parentId = "0", fullName = item.FullName
fullName = "未分类",
num = data.FindAll(x => x.parentId == null).Count
}); });
}
}
foreach (var item in dbTypeList) return new { list = output.Union(data).ToList().ToTree() };
{ }
var index = data.FindAll(x => x.dbType.Equals(item.EnCode)).Count;
if (index > 0) /// <summary>
/// 信息.
/// </summary>
/// <param name="id">主键值.</param>
/// <returns></returns>
[HttpGet("{id}")]
public async Task<dynamic> GetInfo_Api(string id)
{
var data = await GetInfo(id);
var oracleParam = data.OracleParam?.ToObject<OracleParamModel>();
var output = data.Adapt<DbLinkInfoOutput>();
if (oracleParam.IsNotEmptyOrNull() && oracleParam.oracleExtend)
{
output.oracleService = oracleParam.oracleService;
output.oracleExtend = oracleParam.oracleExtend;
output.oracleLinkType = oracleParam.oracleLinkType;
output.oracleRole = oracleParam.oracleRole;
}
return output;
}
#endregion
#region POST
/// <summary>
/// 删除.
/// </summary>
/// <param name="id">主键值.</param>
/// <returns></returns>
[HttpDelete("{id}")]
public async Task Delete(string id)
{
var entity = await GetInfo(id);
_ = entity ?? throw Oops.Oh(ErrorCode.COM1005);
var isOk = await _repository.AsUpdateable(entity).CallEntityMethod(m => m.Delete()).UpdateColumns(it => new { it.DeleteMark, it.DeleteTime, it.DeleteUserId }).ExecuteCommandHasChangeAsync();
if (!isOk)
throw Oops.Oh(ErrorCode.COM1002);
}
/// <summary>
/// 创建.
/// </summary>
/// <param name="input">实体对象.</param>
/// <returns></returns>
[HttpPost("")]
public async Task Create_Api([FromBody] DbLinkCrInput input)
{
if (await _repository.IsAnyAsync(x => x.FullName == input.fullName && x.DeleteMark == null))
throw Oops.Oh(ErrorCode.COM1004);
var entity = input.Adapt<DbLinkEntity>();
if (input.oracleExtend)
{
entity.OracleParam = new OracleParamModel()
{
oracleExtend = input.oracleExtend,
oracleRole = input.oracleRole,
oracleLinkType = input.oracleLinkType,
oracleService = input.oracleService
}.ToJsonString();
}
var isOk = await _repository.AsInsertable(entity).IgnoreColumns(ignoreNullColumn: true).CallEntityMethod(m => m.Creator()).ExecuteCommandAsync();
if (isOk < 1)
throw Oops.Oh(ErrorCode.COM1000);
}
/// <summary>
/// 编辑.
/// </summary>
/// <param name="id">主键值.</param>
/// <param name="input">实体对象.</param>
/// <returns></returns>
[HttpPut("{id}")]
public async Task Update_Api(string id, [FromBody] DbLinkUpInput input)
{
if (await _repository.IsAnyAsync(x => x.Id != id && x.FullName == input.fullName && x.DeleteMark == null))
throw Oops.Oh(ErrorCode.COM1004);
var entity = input.Adapt<DbLinkEntity>();
if (input.oracleExtend)
{
entity.OracleParam = new OracleParamModel()
{
oracleExtend = input.oracleExtend,
oracleRole = input.oracleRole,
oracleLinkType = input.oracleLinkType,
oracleService = input.oracleService
}.ToJsonString();
}
var isOk = await _repository.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).CallEntityMethod(m => m.LastModify()).ExecuteCommandHasChangeAsync();
if (!isOk)
throw Oops.Oh(ErrorCode.COM1001);
}
/// <summary>
/// 测试连接.
/// </summary>
/// <param name="input">实体对象.</param>
[HttpPost("Actions/Test")]
public void TestDbConnection([FromBody] DbLinkActionsTestInput input)
{
var entity = input.Adapt<DbLinkEntity>();
entity.Id = input.id.Equals("0") ? SnowflakeIdHelper.NextId() : input.id;
if (input.oracleExtend)
{
entity.OracleParam = new OracleParamModel()
{
oracleExtend = input.oracleExtend,
oracleRole = input.oracleRole,
oracleLinkType = input.oracleLinkType,
oracleService = input.oracleService
}.ToJsonString();
}
if (!_dataBaseManager.IsConnection(entity))
throw Oops.Oh(ErrorCode.D1507);
}
#endregion
#region PublicMethod
/// <summary>
/// 列表.
/// </summary>
/// <returns></returns>
[NonAction]
public async Task<List<DbLinkListOutput>> GetList()
{
return await _repository.AsSugarClient().Queryable<DbLinkEntity, UserEntity, UserEntity, DictionaryDataEntity, DictionaryTypeEntity>(
(a, b, c, d, e) => new JoinQueryInfos(
JoinType.Left, a.CreatorUserId == b.Id,
JoinType.Left, a.LastModifyUserId == c.Id,
JoinType.Left, a.DbType == d.EnCode && d.DeleteMark == null,
JoinType.Left, d.DictionaryTypeId == e.Id && e.EnCode == "dbType"))
.Where((a, b, c) => a.DeleteMark == null)
.OrderBy((a, b, c) => a.SortCode).OrderBy((a, b, c) => a.CreatorTime, OrderByType.Desc).
Select((a, b, c, d) => new DbLinkListOutput()
{ {
output.Add(new DbLinkSelectorOutput() id = a.Id,
{ parentId = d.Id == null ? "-1" : d.Id,
id = item.Id, creatorTime = a.CreatorTime,
fullName = item.FullName creatorUser = SqlFunc.MergeString(b.RealName, "/", b.Account),
}); dbType = a.DbType,
} enabledMark = a.EnabledMark,
} fullName = a.FullName,
host = a.Host,
lastModifyTime = a.LastModifyTime,
lastModifyUser = SqlFunc.MergeString(c.RealName, "/", c.Account),
port = SqlFunc.ToString(a.Port),
sortCode = a.SortCode
}).Distinct().ToListAsync();
}
return new { list = output.Union(data).ToList().ToTree() }; /// <summary>
} /// 信息.
/// </summary>
/// <summary> /// <param name="id">主键值.</param>
/// 信息. /// <returns></returns>
/// </summary> [NonAction]
/// <param name="id">主键值.</param> public async Task<DbLinkEntity> GetInfo(string id)
/// <returns></returns> {
[HttpGet("{id}")] var model = await _memCache.GetOrCreateAsync($"DbLink_{id}", async entry =>
public async Task<dynamic> GetInfo_Api(string id)
{ {
var data = await GetInfo(id); //entry.AbsoluteExpiration = DateTime.Now.AddMinutes(60);
var oracleParam = data.OracleParam?.ToObject<OracleParamModel>(); entry.SlidingExpiration = TimeSpan.FromSeconds(60);
var output = data.Adapt<DbLinkInfoOutput>(); return await _repository.GetFirstAsync(m => m.Id == id && m.DeleteMark == null);
if (oracleParam.IsNotEmptyOrNull() && oracleParam.oracleExtend) });
{ return model;
output.oracleService = oracleParam.oracleService; }
output.oracleExtend = oracleParam.oracleExtend; #endregion
output.oracleLinkType = oracleParam.oracleLinkType;
output.oracleRole = oracleParam.oracleRole;
}
return output;
}
#endregion
#region POST
/// <summary>
/// 删除.
/// </summary>
/// <param name="id">主键值.</param>
/// <returns></returns>
[HttpDelete("{id}")]
public async Task Delete(string id)
{
var entity = await GetInfo(id);
_ = entity ?? throw Oops.Oh(ErrorCode.COM1005);
var isOk = await _repository.AsUpdateable(entity).CallEntityMethod(m => m.Delete()).UpdateColumns(it => new { it.DeleteMark, it.DeleteTime, it.DeleteUserId }).ExecuteCommandHasChangeAsync();
if (!isOk)
throw Oops.Oh(ErrorCode.COM1002);
}
/// <summary>
/// 创建.
/// </summary>
/// <param name="input">实体对象.</param>
/// <returns></returns>
[HttpPost("")]
public async Task Create_Api([FromBody] DbLinkCrInput input)
{
if (await _repository.IsAnyAsync(x => x.FullName == input.fullName && x.DeleteMark == null))
throw Oops.Oh(ErrorCode.COM1004);
var entity = input.Adapt<DbLinkEntity>();
if (input.oracleExtend)
{
entity.OracleParam = new OracleParamModel()
{
oracleExtend = input.oracleExtend,
oracleRole = input.oracleRole,
oracleLinkType = input.oracleLinkType,
oracleService = input.oracleService
}.ToJsonString();
}
var isOk = await _repository.AsInsertable(entity).IgnoreColumns(ignoreNullColumn: true).CallEntityMethod(m => m.Creator()).ExecuteCommandAsync();
if (isOk < 1)
throw Oops.Oh(ErrorCode.COM1000);
}
/// <summary>
/// 编辑.
/// </summary>
/// <param name="id">主键值.</param>
/// <param name="input">实体对象.</param>
/// <returns></returns>
[HttpPut("{id}")]
public async Task Update_Api(string id, [FromBody] DbLinkUpInput input)
{
if (await _repository.IsAnyAsync(x => x.Id != id && x.FullName == input.fullName && x.DeleteMark == null))
throw Oops.Oh(ErrorCode.COM1004);
var entity = input.Adapt<DbLinkEntity>();
if (input.oracleExtend)
{
entity.OracleParam = new OracleParamModel()
{
oracleExtend = input.oracleExtend,
oracleRole = input.oracleRole,
oracleLinkType = input.oracleLinkType,
oracleService = input.oracleService
}.ToJsonString();
}
var isOk = await _repository.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).CallEntityMethod(m => m.LastModify()).ExecuteCommandHasChangeAsync();
if (!isOk)
throw Oops.Oh(ErrorCode.COM1001);
}
/// <summary>
/// 测试连接.
/// </summary>
/// <param name="input">实体对象.</param>
[HttpPost("Actions/Test")]
public void TestDbConnection([FromBody] DbLinkActionsTestInput input)
{
var entity = input.Adapt<DbLinkEntity>();
entity.Id = input.id.Equals("0") ? SnowflakeIdHelper.NextId() : input.id;
if (input.oracleExtend)
{
entity.OracleParam = new OracleParamModel()
{
oracleExtend = input.oracleExtend,
oracleRole = input.oracleRole,
oracleLinkType = input.oracleLinkType,
oracleService = input.oracleService
}.ToJsonString();
}
if (!_dataBaseManager.IsConnection(entity))
throw Oops.Oh(ErrorCode.D1507);
}
#endregion
#region PublicMethod
/// <summary>
/// 列表.
/// </summary>
/// <returns></returns>
[NonAction]
public async Task<List<DbLinkListOutput>> GetList()
{
return await _repository.AsSugarClient().Queryable<DbLinkEntity, UserEntity, UserEntity, DictionaryDataEntity, DictionaryTypeEntity>(
(a, b, c, d, e) => new JoinQueryInfos(
JoinType.Left, a.CreatorUserId == b.Id,
JoinType.Left, a.LastModifyUserId == c.Id,
JoinType.Left, a.DbType == d.EnCode && d.DeleteMark == null,
JoinType.Left, d.DictionaryTypeId == e.Id && e.EnCode == "dbType"))
.Where((a, b, c) => a.DeleteMark == null)
.OrderBy((a, b, c) => a.SortCode).OrderBy((a, b, c) => a.CreatorTime, OrderByType.Desc).
Select((a, b, c, d) => new DbLinkListOutput()
{
id = a.Id,
parentId = d.Id == null ? "-1" : d.Id,
creatorTime = a.CreatorTime,
creatorUser = SqlFunc.MergeString(b.RealName, "/", b.Account),
dbType = a.DbType,
enabledMark = a.EnabledMark,
fullName = a.FullName,
host = a.Host,
lastModifyTime = a.LastModifyTime,
lastModifyUser = SqlFunc.MergeString(c.RealName, "/", c.Account),
port = SqlFunc.ToString(a.Port),
sortCode = a.SortCode
}).Distinct().ToListAsync();
}
/// <summary>
/// 信息.
/// </summary>
/// <param name="id">主键值.</param>
/// <returns></returns>
[NonAction]
public async Task<DbLinkEntity> GetInfo(string id)
{
return await _repository.GetFirstAsync(m => m.Id == id && m.DeleteMark == null);
}
#endregion
} }

View File

@@ -22,6 +22,7 @@ using JNPF.VisualDev.Entitys.Dto.VisualDevModelData;
using JNPF.VisualDev.Interfaces; using JNPF.VisualDev.Interfaces;
using JNPF.WorkFlow.Entitys.Entity; using JNPF.WorkFlow.Entitys.Entity;
using Mapster; using Mapster;
using Microsoft.Extensions.Caching.Memory;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using SqlSugar; using SqlSugar;
@@ -54,44 +55,51 @@ public class FormDataParsing : ITransient
/// </summary> /// </summary>
private readonly ICacheManager _cacheManager; private readonly ICacheManager _cacheManager;
/// <summary> /// <summary>
/// 服务基础仓储. /// 缓存管理.
/// </summary> /// </summary>
private readonly ISqlSugarRepository<VisualDevEntity> _db; private readonly IMemoryCache _memCache;
/// <summary> /// <summary>
/// 构造. /// 服务基础仓储.
/// </summary> /// </summary>
/// <param name="userManager"></param> private readonly ISqlSugarRepository<VisualDevEntity> _db;
/// <param name="cacheManager"></param>
/// <param name="databaseService"></param>
/// <param name="dataInterfaceService"></param>
/// <param name="context"></param>
public FormDataParsing(
IUserManager userManager,
ICacheManager cacheManager,
IDataBaseManager databaseService,
IDataInterfaceService dataInterfaceService,
ISqlSugarRepository<VisualDevEntity> context)
{
_userManager = userManager;
_cacheManager = cacheManager;
_databaseService = databaseService;
_dataInterfaceService = dataInterfaceService;
_db = context;
}
#endregion
#region /// <summary>
/// 构造.
/// </summary>
/// <param name="userManager"></param>
/// <param name="cacheManager"></param>
/// <param name="databaseService"></param>
/// <param name="dataInterfaceService"></param>
/// <param name="context"></param>
public FormDataParsing(
IUserManager userManager,
ICacheManager cacheManager,
IDataBaseManager databaseService,
IDataInterfaceService dataInterfaceService,
ISqlSugarRepository<VisualDevEntity> context,
IMemoryCache memCache)
{
_userManager = userManager;
_cacheManager = cacheManager;
_databaseService = databaseService;
_dataInterfaceService = dataInterfaceService;
_db = context;
_memCache = memCache;
}
#endregion
/// <summary> #region
/// 控制模板数据转换.
/// </summary> /// <summary>
/// <param name="data">数据.</param> /// 控制模板数据转换.
/// <param name="fieldsModel">数据模板.</param> /// </summary>
/// <param name="actionType">操作类型(List-列表值,create-创建值,update-更新值,detail-详情值,transition-过渡值,query-查询).</param> /// <param name="data">数据.</param>
/// <returns>object.</returns> /// <param name="fieldsModel">数据模板.</param>
public object TemplateControlsDataConversion(object data, FieldsModel fieldsModel, string? actionType = null) /// <param name="actionType">操作类型(List-列表值,create-创建值,update-更新值,detail-详情值,transition-过渡值,query-查询).</param>
/// <returns>object.</returns>
public object TemplateControlsDataConversion(object data, FieldsModel fieldsModel, string? actionType = null)
{ {
if (fieldsModel == null || data == null || data.Equals("[]") || data.ToString().Equals("[]") || string.IsNullOrEmpty(data.ToString())) return string.Empty; if (fieldsModel == null || data == null || data.Equals("[]") || data.ToString().Equals("[]") || string.IsNullOrEmpty(data.ToString())) return string.Empty;
try try
@@ -1707,18 +1715,30 @@ public class FormDataParsing : ITransient
} }
break; break;
case JnpfKeyConst.CURRDEPT: case JnpfKeyConst.CURRDEPT:
dataMap[key] = (await _db.AsSugarClient().Queryable<OrganizeEntity>().FirstAsync(x => x.Id == dataValue.ToString()))?.FullName; dataMap[key] = await _memCache.GetOrCreateAsync($"organizeId_{dataValue}", async entry =>
{
entry.SlidingExpiration = TimeSpan.FromSeconds(60);
return (await _db.AsSugarClient().Queryable<OrganizeEntity>().FirstAsync(x => x.Id == dataValue.ToString()))?.FullName;
});
break; break;
case JnpfKeyConst.MODIFYUSER: case JnpfKeyConst.MODIFYUSER:
case JnpfKeyConst.CREATEUSER: case JnpfKeyConst.CREATEUSER:
dataMap[key] = await _db.AsSugarClient().Queryable<UserEntity>().Where(x => x.Id == dataValue.ToString()).Select(x => SqlFunc.MergeString(x.RealName, "/", x.Account)).FirstAsync(); dataMap[key] = await _memCache.GetOrCreateAsync($"userId_{dataValue}", async entry =>
{
entry.SlidingExpiration = TimeSpan.FromSeconds(60);
return await _db.AsSugarClient().Queryable<UserEntity>().Where(x => x.Id == dataValue.ToString()).Select(x => SqlFunc.MergeString(x.RealName, "/", x.Account)).FirstAsync();
});
break; break;
case JnpfKeyConst.MODIFYTIME: case JnpfKeyConst.MODIFYTIME:
case JnpfKeyConst.CREATETIME: case JnpfKeyConst.CREATETIME:
dataMap[key] = string.Format("{0:yyyy-MM-dd HH:mm:ss}", dataMap[key].ToString().ParseToDateTime()); dataMap[key] = string.Format("{0:yyyy-MM-dd HH:mm:ss}", dataMap[key].ToString().ParseToDateTime());
break; break;
case JnpfKeyConst.CURRPOSITION: case JnpfKeyConst.CURRPOSITION:
dataMap[key] = (await _db.AsSugarClient().Queryable<PositionEntity>().FirstAsync(x => x.Id == dataValue.ToString()))?.FullName; dataMap[key] = await _memCache.GetOrCreateAsync($"positionId_{dataValue}", async entry =>
{
entry.SlidingExpiration = TimeSpan.FromSeconds(60);
return (await _db.AsSugarClient().Queryable<PositionEntity>().FirstAsync(x => x.Id == dataValue.ToString()))?.FullName;
});
break; break;
case JnpfKeyConst.POPUPTABLESELECT: case JnpfKeyConst.POPUPTABLESELECT:
case JnpfKeyConst.POPUPSELECT: case JnpfKeyConst.POPUPSELECT:

View File

@@ -205,7 +205,8 @@ public class RunService : IRunService, ITransient
{ {
if (templateInfo.SingleFormData.Any(x => x.__config__.templateJson != null && x.__config__.templateJson.Any())) if (templateInfo.SingleFormData.Any(x => x.__config__.templateJson != null && x.__config__.templateJson.Any()))
realList.list = await _formDataParsing.GetKeyData(templateInfo.SingleFormData.Where(x => x.__config__.templateJson != null && x.__config__.templateJson.Any()).ToList(), realList.list, templateInfo.ColumnData, actionType, templateInfo.WebType, primaryKey); realList.list = await _formDataParsing.GetKeyData(templateInfo.SingleFormData.Where(x => x.__config__.templateJson != null && x.__config__.templateJson.Any()).ToList(), realList.list, templateInfo.ColumnData, actionType, templateInfo.WebType, primaryKey);
realList.list = await _formDataParsing.GetKeyData(templateInfo.SingleFormData.Where(x => x.__config__.templateJson == null).ToList(), realList.list, templateInfo.ColumnData, actionType, templateInfo.WebType, primaryKey); else
realList.list = await _formDataParsing.GetKeyData(templateInfo.SingleFormData.Where(x => x.__config__.templateJson == null).ToList(), realList.list, templateInfo.ColumnData, actionType, templateInfo.WebType, primaryKey);
// 如果是无表数据并且排序字段不为空,再进行数据排序 // 如果是无表数据并且排序字段不为空,再进行数据排序
if (!templateInfo.IsHasTable && input.sidx.IsNotEmptyOrNull()) if (!templateInfo.IsHasTable && input.sidx.IsNotEmptyOrNull())