142 lines
5.1 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|