Files
zszq-trs/YLErpDAL/Modules/ClientModule/ClientMetaService.cs
T
2024-05-09 14:06:26 +08:00

217 lines
7.0 KiB
C#

using BaseOUDAL;
using System.Collections.Generic;
using YLErp.Modules.SystemModule;
namespace YLErp.Modules.ClientModule
{
/// <summary>
/// 客户元数据服务
/// </summary>
public class ClientMetaService : ClientBaseService
{
public ClientMetaService(OptUserInfo userInfo) : base(userInfo)
{
}
public ClientMetaService(ClientBaseService baseService) : base(baseService)
{
}
public ClientMetaService(BaseService<ClientDBContext> baseService) : base(baseService)
{
}
/// <summary>
/// 获取元数据
/// </summary>
public Dictionary<string, string> GetMetaDic(int clientId)
{
return DbContext.ClientMeta.AsNoTracking().Where(t => t.ClientId == clientId)
.Select(n => new { n.MetaKey, n.MetaValue }).ToDictionary(n => n.MetaKey, n => n.MetaValue);
}
/// <summary>
/// 获取元数据
/// </summary>
public string GetMeta(int clientId, string metaKey)
{
if (metaKey is null)
{
throw new ArgumentNullException(nameof(metaKey));
}
return DbContext.ClientMeta.AsNoTracking().FirstOrDefault(t => t.ClientId == clientId && t.MetaKey == metaKey)?.MetaValue;
}
/// <summary>
/// 获取元数据多个客户
/// </summary>
public Dictionary<int,string> GetMeta(List<int> clientIds, string metaKey)
{
if (metaKey is null)
{
throw new ArgumentNullException(nameof(metaKey));
}
return DbContext.ClientMeta.AsNoTracking().Where( t => clientIds.Contains( t.ClientId)&& t.MetaKey == metaKey).Select(n => new
{
n.ClientId,
n.MetaValue
}).ToDictionary(n => n.ClientId, n => n.MetaValue);
}
/// <summary>
/// 添加或更新元数据
/// </summary>
public List<string> AddMeta(int clientId, string metaKey, string metaValue, bool saveChanges = true)
{
if (metaKey is null)
{
throw new ArgumentNullException(nameof(metaKey));
}
List<string> list = new List<string>();
var dbClientMeta = DbContext.ClientMeta.FirstOrDefault(t => t.ClientId == clientId && t.MetaKey == metaKey);
if (dbClientMeta == null)
{
if (string.IsNullOrEmpty(metaValue))
{
return null;
}
DbContext.ClientMeta.Add(new ClientMeta
{
ClientId = clientId,
MetaKey = metaKey,
MetaValue = metaValue,
OptDate = DateTime.Now,
OptId = UserId,
OptName = UserName
});
var FormEditField = ClientEditConfigService.GetFormEditFieldByName(metaKey);
list = AddMeteLog(metaKey, "“ ”", metaValue);
}
else
{
if (dbClientMeta.MetaValue != metaValue)
{
var oldMetaValue = dbClientMeta.MetaValue;
dbClientMeta.MetaValue = metaValue;
dbClientMeta.OptDate = DateTime.Now;
dbClientMeta.OptId = UserId;
dbClientMeta.OptName = UserName;
list = AddMeteLog(metaKey, oldMetaValue, metaValue);
}
}
if (saveChanges)
{
DbContext.SaveChanges();
}
return list;
}
/// <summary>
/// 添加或更新元数据
/// </summary>
public void AddMeta(ClientMeta meta, bool saveChanges = true)
{
if (meta is null)
{
throw new ArgumentNullException(nameof(meta));
}
var dbClientMeta = DbContext.ClientMeta.FirstOrDefault(t => t.ClientId == meta.ClientId && t.MetaKey == meta.MetaKey);
if (dbClientMeta == null)
{
meta.OptDate = DateTime.Now;
meta.OptId = UserId;
meta.OptName = UserName;
DbContext.ClientMeta.Add(meta);
}
else
{
dbClientMeta.MetaValue = meta.MetaValue;
}
if (saveChanges)
{
DbContext.SaveChanges();
}
}
/// <summary>
/// 添加或更新元数据
/// </summary>
public void AddMetas(IEnumerable<ClientMeta> clientMetas, bool saveChanges = true)
{
if (clientMetas == null || !clientMetas.Any())
{
return;
}
foreach (var meta in clientMetas)
{
var dbClientMeta = DbContext.ClientMeta.FirstOrDefault(t => t.ClientId == meta.ClientId && t.MetaKey == meta.MetaKey);
if (dbClientMeta == null)
{
meta.OptDate = DateTime.Now;
meta.OptId = UserId;
meta.OptName = UserName;
DbContext.ClientMeta.Add(meta);
}
else
{
dbClientMeta.MetaValue = meta.MetaValue;
}
}
if (saveChanges)
{
DbContext.SaveChanges();
}
}
/// <summary>
/// 删除元数据
/// 不要调用该方法,哪怕客户已经被删除了,也不要删除客户元数据,证券业报送中需要报送客户删除的信息
/// </summary>
public void DeleteMetas(IEnumerable<ClientMeta> clientMetas, bool saveChanges = true)
{
if (clientMetas == null || !clientMetas.Any())
{
return;
}
foreach (var clientMeta in clientMetas)
{
var dbClientMeta = DbContext.ClientMeta.FirstOrDefault(t => t.ClientId == clientMeta.ClientId && t.MetaKey == clientMeta.MetaKey);
if (dbClientMeta != null)
{
DbContext.ClientMeta.Remove(dbClientMeta);
}
}
if (saveChanges)
{
DbContext.SaveChanges();
}
}
public List<string> AddMeteLog(string metaKey, string oldMetaValue, string metaValue)
{
List<string> list = new List<string>();
if (!string.IsNullOrEmpty(metaKey))
{
metaKey = "meta_" + metaKey;
var FormEditField = ClientEditConfigService.GetFormEditFieldByName(metaKey);
if (FormEditField != null)
{
list.Add(metaKey);
list.Add(FormEditField.label);
list.Add(oldMetaValue);
list.Add(metaValue);
}
}
return list;
}
}
}