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) { } /// /// 获取所有簿记账户关系 /// /// public List GetList() { return DbContext.etrade_account.AsNoTracking().ToList(); } /// /// 保存簿记账户关系 /// /// /// 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 clients = new List(); 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); } } } /// /// 校验数据 /// /// /// 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}的簿记账户关系"); } } /// /// 删除簿记账户关系 /// /// /// 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; } /// /// 获取详细 /// /// /// /// public EtradeAccount GetEtradeAccount(int id) { var EtradeAccount = DbContext.etrade_account.Find(id); if (EtradeAccount == null) { throw new ServiceException("未找到簿记账户关系"); } return EtradeAccount; } /// /// 获取簿记账户关系 /// /// /// 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; } } }