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

142 lines
5.1 KiB
C#

using BaseOUDAL;
using System.Data;
using System.Linq.Dynamic.Core;
using YLErp.Modules.AppModule;
namespace YLErp.Modules.SwapModule
{
public class EtradeAccountService : YLBaseService
{
public EtradeAccountService(OptUserInfo userInfo) : base(userInfo)
{
}
/// <summary>
/// 获取所有簿记账户关系
/// </summary>
/// <returns></returns>
public List<EtradeAccount> GetList()
{
return DbContext.etrade_account.AsNoTracking().ToList();
}
/// <summary>
/// 保存簿记账户关系
/// </summary>
/// <param name="req"></param>
/// <exception cref="Exception"></exception>
public void SaveEtradeAccount(EtradeAccount req)
{
ValidateEtradeAccount(req);
if (req.id > 0)
{
var EtradeAccount = DbContext.etrade_account.Find(req.id);
if (EtradeAccount == null)
{
throw new ServiceException("未找到该簿记账户关系");
}
EtradeAccount.asset_account = req.asset_account;
EtradeAccount.balance_account_asset = req.balance_account_asset;
EtradeAccount.balance_account_trade=req.balance_account_trade;
EtradeAccount.trader_account=req.trader_account;
EtradeAccount.SetOpt(UserId, UserName);
}
else
{
req.SetCreator(UserId, UserName);
req.SetOpt(UserId, UserName);
DbContext.etrade_account.Add(req);
}
DbContext.SaveChanges();
SendAccountToTrs(req.asset_account, req.balance_account_trade);
}
private void SendAccountToTrs(string asset,string account)
{
var ruleService = new EtradingRuleService(UserInfo);
var clientNumbers = ruleService.GetClientNumers(asset);
List<Client> clients = new List<Client>();
using (var con = new ClientDBContext())
{
clients = con.client.AsNoTracking().Where(s => s.ProcessStatus == "已开户").ToList();
}
if (clientNumbers.Any(x=>string.IsNullOrEmpty(x)))
{
clientNumbers = clients.Select(s => s.Number).ToList();
}
foreach (var item in clientNumbers)
{
var client = clients.FirstOrDefault(o => o.Number == item);
if (client!=null)
{
ruleService.SendToKafka(client.id,account);
}
}
}
/// <summary>
/// 校验数据
/// </summary>
/// <param name="req"></param>
/// <exception cref="ServiceException"></exception>
private void ValidateEtradeAccount(EtradeAccount req)
{
if (!string.IsNullOrEmpty(req.asset_account))
{
var assets = DataCacheProvider.GetAssetUnitDataSource().AsQueryable();
if (!assets.Any(o => o.Name == req.asset_account))
{
throw new ServiceException("簿记账户不存在");
}
}
if (DbContext.etrade_account.Any(x => x.asset_account==req.asset_account && x.id != req.id))
{
throw new ServiceException($"已存在{req.asset_account}的簿记账户关系");
}
}
/// <summary>
/// 删除簿记账户关系
/// </summary>
/// <param name="id"></param>
/// <exception cref="Exception"></exception>
public int DeleteEtradeAccount(int id)
{
var EtradeAccount = DbContext.etrade_account.Find(id);
if (EtradeAccount == null)
{
throw new ServiceException("未找到簿记账户关系");
}
DbContext.etrade_account.Remove(EtradeAccount);
DbContext.SaveChanges();
SendAccountToTrs(EtradeAccount.asset_account, null);
return EtradeAccount.id;
}
/// <summary>
/// 获取详细
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
/// <exception cref="ServiceException"></exception>
public EtradeAccount GetEtradeAccount(int id)
{
var EtradeAccount = DbContext.etrade_account.Find(id);
if (EtradeAccount == null)
{
throw new ServiceException("未找到簿记账户关系");
}
return EtradeAccount;
}
/// <summary>
/// 获取簿记账户关系
/// </summary>
/// <param name="asset"></param>
/// <returns></returns>
public EtradeAccount GetEtradeAccount(string asset)
{
var EtradeAccount = DbContext.etrade_account.FirstOrDefault(x=>x.asset_account==asset);
if (EtradeAccount == null)
{
EtradeAccount= DbContext.etrade_account.FirstOrDefault(x => string.IsNullOrEmpty(x.asset_account));
}
return EtradeAccount;
}
}
}