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);
            }
        }