😎修复软删除修改后对应不上的字典值

This commit is contained in:
zuohuaijun 2025-09-14 13:25:02 +08:00
parent 381724ab81
commit 8cb0417685

View File

@ -119,7 +119,7 @@ public class SysEnumService : IDynamicApiController, ITransient
var updatedEnumCodes = sysDictTypeList.Select(u => u.Code);
var updatedEnumType = enumTypeList.Where(u => updatedEnumCodes.Contains(u.TypeName)).ToList();
var sysDictTypeDict = sysDictTypeList.ToDictionary(u => u.Code, u => u);
var (updatedDictTypes, updatedDictDatas, newSysDictDatas) = GetUpdatedDicts(updatedEnumType, sysDictTypeDict);
var (updatedDictTypes, updatedDictDatas, newSysDictDatas, delDataIds) = GetUpdatedDicts(updatedEnumType, sysDictTypeDict);
// 新增的枚举转换字典
var newEnumType = enumTypeList.Where(u => !updatedEnumCodes.Contains(u.TypeName)).ToList();
@ -132,6 +132,12 @@ public class SysEnumService : IDynamicApiController, ITransient
// or SqlSugar.DbType.GaussDB
// or SqlSugar.DbType.Kdbndp;
// 软删除多余的枚举字典
if (delDataIds != null && delDataIds.Any())
await _db.Updateable<SysDictData>().Where(u => delDataIds.Contains(u.Id))
.SetColumns(u => u.IsDelete, true)
.ExecuteCommandAsync();
// 执行数据库操作
if (updatedDictTypes.Count > 0)
{
@ -242,11 +248,12 @@ public class SysEnumService : IDynamicApiController, ITransient
/// </item>
/// </list>
/// </returns>
private (List<SysDictType>, List<SysDictData>, List<SysDictData>) GetUpdatedDicts(List<EnumTypeOutput> updatedEnumType, Dictionary<string, SysDictType> sysDictTypeDict)
private (List<SysDictType>, List<SysDictData>, List<SysDictData>, List<long>) GetUpdatedDicts(List<EnumTypeOutput> updatedEnumType, Dictionary<string, SysDictType> sysDictTypeDict)
{
var updatedSysDictTypes = new List<SysDictType>();
var updatedSysDictData = new List<SysDictData>();
var newSysDictData = new List<SysDictData>();
var deleteDictDataIds = new List<long>();
foreach (var e in updatedEnumType)
{
if (!sysDictTypeDict.TryGetValue(e.TypeName, out var value))
@ -299,9 +306,11 @@ public class SysEnumService : IDynamicApiController, ITransient
}
}
// 删除的情况暂不处理
// 删除的情况处理
var ids = updatedDictData.Where(u => e.EnumEntities.All(v => v.Name != u.Code || v.Value.ToString() != u.Value)).Select(u => u.Id).ToList();
if (ids.Count > 0) deleteDictDataIds.AddRange(ids);
}
return (updatedSysDictTypes, updatedSysDictData, newSysDictData);
return (updatedSysDictTypes, updatedSysDictData, newSysDictData, deleteDictDataIds);
}
}