public List <MerchantSupportReceiptWalletDTO> SupportReceiptList(Guid accountId) { var account = new MerchantAccountDAC().GetById(accountId); var dac = new MerchantWalletDAC(); var cryptoList = new CryptocurrencyDAC().GetAllActived(); var fiiiCrypto = cryptoList.First(w => w.Code == FIIICOIN_CODE); var fiiiWallet = dac.GetByAccountId(account.Id, fiiiCrypto.Id) ?? GenerateWallet(accountId, fiiiCrypto.Id, fiiiCrypto.Code, FIIICOIN_SEQUENCE, true); if (!fiiiWallet.SupportReceipt || fiiiWallet.Sequence != FIIICOIN_SEQUENCE) { dac.Support(account.Id, fiiiWallet.CryptoId, FIIICOIN_SEQUENCE); } List <MerchantWallet> supportReceiptList; var pos = new POSDAC().GetById(account.POSId.Value); if (pos.IsWhiteLabel) { var whiteCrypto = cryptoList.First(w => w.Code == pos.FirstCrypto); var whiteWallet = dac.GetByAccountId(account.Id, whiteCrypto.Id); if (whiteWallet == null) { GenerateWallet(accountId, whiteCrypto.Id, whiteCrypto.Code, WHITECOIN_SEQUENCE, true); } else if (!whiteWallet.SupportReceipt || whiteWallet.Sequence != WHITECOIN_SEQUENCE) { dac.Support(account.Id, whiteWallet.CryptoId, WHITECOIN_SEQUENCE); } supportReceiptList = dac.SupportReceiptList(accountId).OrderBy(e => e.Sequence).ToList(); } else { var whiteCryptoList = cryptoList.Where(e => e.IsWhiteLabel == 1).ToList(); supportReceiptList = dac.SupportReceiptList(accountId).OrderBy(e => e.Sequence).ToList(); supportReceiptList.RemoveAll(e => whiteCryptoList.Exists(a => a.Id == e.CryptoId)); } var marketPriceList = new PriceInfoDAC().GetPrice(account.FiatCurrency); return(supportReceiptList.Select(e => { var crypto = cryptoList.FirstOrDefault(w => w.Id == e.CryptoId); if (crypto == null) { return null; } return new MerchantSupportReceiptWalletDTO { WalletId = e.Id, CryptoId = crypto.Id, CryptoStatus = crypto.Status, CryptoCode = crypto.Code, CryptoName = crypto.Name, IconURL = crypto.IconURL, DecimalPlace = crypto.DecimalPlace, Markup = account.Markup, MarketPrice = marketPriceList.FirstOrDefault(m => crypto.Code == m.CryptoName)?.Price.ToString(4), Balance = string.Equals("FIII", crypto.Code, StringComparison.CurrentCultureIgnoreCase) ? e.Balance : 0, IsDefault = e.CryptoId == fiiiCrypto.Id || (pos.IsWhiteLabel && crypto.Code == pos.FirstCrypto) ? 1 : 0, CryptoEnable = crypto.Enable }; }).Where(w => w != null).ToList()); }
public void SettingCrytocurrencies(Guid accountId, List <int> cryptoIds) { var mwDac = new MerchantWalletDAC(); var mwList = mwDac.GetByAccountId(accountId).ToList(); var cryptoList = new CryptocurrencyDAC().GetByIds(cryptoIds.ToArray()); // FIII 不参与排序 var fiiiCrypto = cryptoList.FirstOrDefault(e => e.Code == FIIICOIN_CODE); if (fiiiCrypto != null) { cryptoIds.Remove(fiiiCrypto.Id); var fiiiWallet = mwList.FirstOrDefault(e => e.CryptoId == fiiiCrypto.Id); if (fiiiWallet != null) { mwList.Remove(fiiiWallet); } } // 白标POS机的白标币不参与排序 var account = new MerchantAccountDAC().GetById(accountId); var pos = new POSDAC().GetById(account.POSId.Value); if (pos.IsWhiteLabel) { var whiteCrypto = cryptoList.FirstOrDefault(e => e.Code == pos.FirstCrypto); if (whiteCrypto != null) { cryptoIds.Remove(whiteCrypto.Id); var whiteWallet = mwList.FirstOrDefault(e => e.CryptoId == whiteCrypto.Id); if (whiteWallet != null) { mwList.Remove(whiteWallet); } } } for (int i = 0; i < cryptoIds.Count; i++) { int seq = i + 1; var crypto = cryptoList.FirstOrDefault(e => e.Id == cryptoIds[i]); if (crypto == null) { continue; } var wallet = mwList.FirstOrDefault(e => e.CryptoId == cryptoIds[i]); // 新增 if (wallet == null) { GenerateWallet(accountId, crypto.Id, crypto.Code, seq, true); continue; } // 启用 if (!wallet.SupportReceipt || wallet.Sequence != seq) { mwDac.Support(accountId, crypto.Id, seq); } mwList.Remove(wallet); } mwList.RemoveAll(e => !e.SupportReceipt); // 禁用 foreach (var wallet in mwList) { mwDac.Reject(accountId, wallet.CryptoId); } }