完善通用接口输入参数
This commit is contained in:
@@ -112,62 +112,47 @@ public class DataAccess : IDataAccess, ITransient, IDisposable
|
||||
/// <summary>
|
||||
/// 获取 Vmodel, 为空时不抛异常
|
||||
/// </summary>
|
||||
public async Task<Vmodel?> TryGetVmodelAsync(string id, bool loadNavigate = false)
|
||||
{
|
||||
Vmodel vm = await Db.Queryable<Vmodel>().FirstAsync(a => a.id == id && a.deleted == 0);
|
||||
if (vm != null && loadNavigate)
|
||||
{
|
||||
await LoadVmodelNavigateAsync(vm);
|
||||
}
|
||||
return vm;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取 Vmodel, 为空时抛异常
|
||||
/// </summary>
|
||||
public async Task<Vmodel> GetVmodelAsync(string id, bool loadNavigate = false)
|
||||
public async Task<Vmodel?> TryGetVmodelAsync(string id)
|
||||
{
|
||||
var key = GetVmodelCacheKey(id);
|
||||
var vm = await _cache.GetAsync<Vmodel>(key);
|
||||
if (vm == null)
|
||||
{
|
||||
vm = await Db.Queryable<Vmodel>().FirstAsync(a => a.id == id && a.deleted == 0);
|
||||
ThrowIf.IsNull(vm, $"找不到id={id}的模型");
|
||||
if (loadNavigate)
|
||||
if (vm != null)
|
||||
{
|
||||
await LoadVmodelNavigateAsync(vm);
|
||||
await _cache.SetAsync(key, vm, TimeSpan.FromMinutes(10));
|
||||
}
|
||||
await _cache.SetAsync(key, vm, TimeSpan.FromMinutes(10));
|
||||
}
|
||||
return vm;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取 Vmodel, 为空时不抛异常
|
||||
/// </summary>
|
||||
public async Task<Vmodel?> TryGetVmodelAsync(string areaCode, string vmCode, bool loadNavigate = false)
|
||||
{
|
||||
Vmodel vm = await Db.Queryable<Vmodel>().FirstAsync(a => a.areaCode == areaCode && a.vmCode == vmCode && a.deleted == 0);
|
||||
if (vm != null && loadNavigate)
|
||||
{
|
||||
await LoadVmodelNavigateAsync(vm);
|
||||
}
|
||||
|
||||
return vm;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取 Vmodel, 为空时抛异常
|
||||
/// </summary>
|
||||
public async Task<Vmodel> GetVmodelAsync(string areaCode, string vmCode, bool loadNavigate = false)
|
||||
public async Task<Vmodel> GetVmodelAsync(string id)
|
||||
{
|
||||
var vm = await TryGetVmodelAsync(id);
|
||||
ThrowIf.IsNull(vm, $"找不到id={id}的模型");
|
||||
return vm;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取 Vmodel, 为空时不抛异常
|
||||
/// </summary>
|
||||
public async Task<Vmodel?> TryGetVmodelAsync(string areaCode, string vmCode)
|
||||
{
|
||||
Vmodel vm = await Db.Queryable<Vmodel>().FirstAsync(a => a.areaCode == areaCode && a.vmCode == vmCode && a.deleted == 0);
|
||||
ThrowIf.IsNull(vm, $"找不到areaCode={areaCode}, vmCode={vmCode}的模型");
|
||||
if (loadNavigate)
|
||||
{
|
||||
await LoadVmodelNavigateAsync(vm);
|
||||
}
|
||||
return vm;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取 Vmodel, 为空时抛异常
|
||||
/// </summary>
|
||||
public async Task<Vmodel> GetVmodelAsync(string areaCode, string vmCode)
|
||||
{
|
||||
var vm = await TryGetVmodelAsync(areaCode, vmCode);
|
||||
ThrowIf.IsNull(vm, $"找不到areaCode={areaCode}, vmCode={vmCode}的模型");
|
||||
return vm;
|
||||
}
|
||||
|
||||
@@ -321,8 +306,8 @@ public class DataAccess : IDataAccess, ITransient, IDisposable
|
||||
/// </summary>
|
||||
public async Task<dynamic> CreateDataAsync(Vmodel vm, VmEditInput input)
|
||||
{
|
||||
ISqlSugarClient db = GetSqlSugar(vm.dbCode);
|
||||
ThrowIf.When(input.data == null && input.items == null, "新增数据时,data和items不可同时为空");
|
||||
ISqlSugarClient db = GetSqlSugar(vm.dbCode);
|
||||
//新增一条数据
|
||||
if (input.data != null)
|
||||
{
|
||||
@@ -331,7 +316,7 @@ public class DataAccess : IDataAccess, ITransient, IDisposable
|
||||
if (pkey.csType is "int" or "long")
|
||||
{
|
||||
long id = await db.Insertable(model).AS(vm.tableName).ExecuteReturnBigIdentityAsync();
|
||||
if ((long)input.data[pkey.code] != id)
|
||||
if (input.data[pkey.code].ParseToLong() != id)
|
||||
{
|
||||
input.data[pkey.code] = id;
|
||||
}
|
||||
@@ -339,6 +324,10 @@ public class DataAccess : IDataAccess, ITransient, IDisposable
|
||||
else
|
||||
{
|
||||
_ = await db.Insertable(model).AS(vm.tableName).ExecuteCommandAsync();
|
||||
if (input.data[pkey.code].ToString() != model[pkey.field].ToString())
|
||||
{
|
||||
input.data[pkey.code] = model[pkey.field];
|
||||
}
|
||||
}
|
||||
return input.data;
|
||||
}
|
||||
@@ -370,6 +359,11 @@ public class DataAccess : IDataAccess, ITransient, IDisposable
|
||||
else
|
||||
{
|
||||
_ = await db.Insertable(lst).AS(vm.tableName).ExecuteCommandAsync();
|
||||
for (int i = 0; i < input.items.Count; i++)
|
||||
{
|
||||
input.items[i][pkey.code] = lst[i][pkey.field];
|
||||
}
|
||||
|
||||
}
|
||||
return input.items;
|
||||
}
|
||||
@@ -387,31 +381,35 @@ public class DataAccess : IDataAccess, ITransient, IDisposable
|
||||
/// </summary>
|
||||
public async Task<dynamic> UpdateDataAsync(Vmodel vm, VmEditInput input)
|
||||
{
|
||||
ThrowIf.When(input.data == null && input.items == null, "新增数据时,data和items不可同时为空");
|
||||
ISqlSugarClient db = GetSqlSugar(vm.dbCode);
|
||||
VmDbProp pk = vm.GetPrimary();
|
||||
int num = 0;
|
||||
//修改一条数据
|
||||
if (input.data != null)
|
||||
{
|
||||
ThrowIf.When(!input.data.ContainsKey(pk.code) || string.IsNullOrWhiteSpace(input.data[pk.code].ToString()), $"更新数据时主键({pk.code})不可为空");
|
||||
DObject model = vm.ToUpdateEntity(input.data, _user);
|
||||
ThrowIf.When(!model.ContainsKey(pk.field), $"更新数据时主键({pk.code})不可为空");
|
||||
num = await db.Updateable(model).AS(vm.tableName).WhereColumns(pk.field).ExecuteCommandAsync();
|
||||
return num > 0 ? input.data[pk.code].ToString()! : 0;
|
||||
}
|
||||
//批量修改数据
|
||||
else if (input.items != null)
|
||||
else
|
||||
{
|
||||
List<DObject> lst = new();
|
||||
foreach (DObject item in input.items)
|
||||
List<string> ids = new();
|
||||
foreach (DObject item in input.items!)
|
||||
{
|
||||
DObject model = vm.ToUpdateEntity(item, _user);
|
||||
if (model.ContainsKey(pk.field))
|
||||
if (item.ContainsKey(pk.code) && !string.IsNullOrWhiteSpace(item[pk.code].ToString()))
|
||||
{
|
||||
DObject model = vm.ToUpdateEntity(item, _user);
|
||||
lst.Add(model);
|
||||
ids.Add(item[pk.code].ToString()!);
|
||||
}
|
||||
}
|
||||
num = await db.Updateable(lst).AS(vm.tableName).WhereColumns(pk.field).ExecuteCommandAsync();
|
||||
return num > 0 ? ids : 0;
|
||||
}
|
||||
return num;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -23,30 +23,30 @@ public interface IDataAccess : ITransient
|
||||
/// <returns></returns>
|
||||
VmodelLink GetVmodelLink(string dbCode);
|
||||
|
||||
/// <summary>
|
||||
/// 获取 Vmodel, 为空时不抛异常
|
||||
/// </summary>
|
||||
Task<Vmodel?> TryGetVmodelAsync(string id, bool loadNavigate = false);
|
||||
|
||||
/// <summary>
|
||||
/// 获取 Vmodel 的缓存键
|
||||
/// </summary>
|
||||
string GetVmodelCacheKey(string id);
|
||||
|
||||
/// <summary>
|
||||
/// 获取 Vmodel, 为空时不抛异常
|
||||
/// </summary>
|
||||
Task<Vmodel?> TryGetVmodelAsync(string id);
|
||||
|
||||
/// <summary>
|
||||
/// 获取 Vmodel, 为空时抛异常
|
||||
/// </summary>
|
||||
Task<Vmodel> GetVmodelAsync(string id, bool loadNavigate = false);
|
||||
Task<Vmodel> GetVmodelAsync(string id);
|
||||
|
||||
/// <summary>
|
||||
/// 获取 Vmodel, 为空时不抛异常
|
||||
/// </summary>
|
||||
Task<Vmodel?> TryGetVmodelAsync(string area, string vmCode, bool loadNavigate = false);
|
||||
Task<Vmodel?> TryGetVmodelAsync(string area, string vmCode);
|
||||
|
||||
/// <summary>
|
||||
/// 获取 Vmodel, 为空时抛异常
|
||||
/// </summary>
|
||||
Task<Vmodel> GetVmodelAsync(string area, string vmCode, bool loadNavigate = false);
|
||||
Task<Vmodel> GetVmodelAsync(string area, string vmCode);
|
||||
|
||||
//Task<VmPagedOutput> QueryDataAsync(VmBaseInput input);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user