程序员的自我救赎---12.2.2: 虚拟币交易平台(区块链) 中 【开发交易所】

资讯 2024-07-03 阅读:76 评论:0
美化布局示例

欧易(OKX)最新版本

【遇到注册下载问题请加文章最下面的客服微信】永久享受返佣20%手续费!

APP下载   全球官网 大陆官网

币安(Binance)最新版本

币安交易所app【遇到注册下载问题请加文章最下面的客服微信】永久享受返佣20%手续费!

APP下载   官网地址

火币HTX最新版本

火币老牌交易所【遇到注册下载问题请加文章最下面的客服微信】永久享受返佣20%手续费!

APP下载   官网地址
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Winner.Balance.Facade;
using Winner.Balance.GlobalCurrency;
using Winner.DCTS.DataAccess;
using Winner.DCTS.Entities;
using Winner.DCTS.Entities.enums;
using Winner.Framework.Core.Facade;
using Winner.Framework.Utils;

namespace Winner.DCTS.Facade
{
    public class MatchTransfer : FacadeBase
    {
        private eBankTransaction EBankTransaction { get; set; }
        private Tdct_Match daMatch { get; set; }

        public bool DoTransfer(Tdct_Match match)
        {
            daMatch = match;
            
            //开启事务
            BeginTransaction();

            //关联事务
            EBankTransaction= Transfer.GeteBankTransaction(); 

            //出售者把币转到购买者
            if (!SellToBuy())
            {
                Rollback(); //回滚事务

                UpdateFail(this.PromptInfo.MessageStack); 
                return false;
            }
            //购买者把钱转到出售者 + 手续费
            if (!BuyToSell())
            {
                Rollback();
                UpdateFail(this.PromptInfo.MessageStack);
                return false;
            }
            daMatch.TransferId =this.EBankTransaction;

            //撮合成功时修改撮合信息表状态
            if (!UpdateSuccess())
            {
                Rollback();
                return false;
            }

            //解除代币以及人名币锁定
            if (!UnFreeze())
            {
                Rollback();
                return false;
            }

           //同步代币动态交易信息
            if (!SyncDynamice())
            {
                Rollback();
                return false;
            }
            Commit();
            return true;
        }

        //出售者把币转到购买者
        private bool SellToBuy()
        {
            BeginTransaction();
            Currency currency =new Currency(CurrencyType.RMB, daMatch.BuyCount);
            UserPurse sellPurse = UserPurseProvider.Get(daMatch.SellUserId, daMatch.SellCurrency);
            UserPurse buyPurse = UserPurseProvider.Get(daMatch.BuyUserId, daMatch.SellCurrency);
            Transfer transfer =new Transfer(EBankTransaction);
            transfer.ReferenceTransactionFrom(this.Transaction);
            //如果买和卖都是同一个人则需要用转到系统用户再转入
            if (daMatch.SellUserId== daMatch.BuyUserId)
            {
                //系统用户钱包
                UserPurse transitPurse= UserPurseProvider.Get(AppConfig.TransitUserId, daMatch.SellCurrency);
                if (!transfer.DoTransferAndUnFreeze(sellPurse, transitPurse, currency, (int)TransferReson.出售者转入购买者, "出售货币中转出账", daMatch.SellFreezeId, "购买货币中转入账"))
                {
                    Rollback();
                    Alert("出售者转中转钱包失败!", transfer.PromptInfo);
                    return false;
                }
                if (!transfer.DoTransfer(transitPurse, buyPurse, currency, (int)TransferReson.出售者转入购买者, "出售货币中转出账", "购买货币中转入账"))
                {
                    Rollback();
                    Alert("中转者转购买者失败!", transfer.PromptInfo);
                    return false;
                }
            }
            else
            {
                if (!transfer.DoTransferAndUnFreeze(sellPurse, buyPurse, currency, (int)TransferReson.出售者转入购买者, "出售货币出账", daMatch.SellFreezeId, "购买货币入账"))
                {
                    Rollback();
                    Alert("出售者转购买者失败!", transfer.PromptInfo);
                    return false;
                }
            }
            Commit();
            return true;
        }


        //购买者把钱转到出售者 + 手续费
        private bool BuyToSell()
        {
            BeginTransaction();
            Currency currency =new Currency(CurrencyType.RMB, daMatch.Amount);
            UserPurse buyPurse = UserPurseProvider.Get(daMatch.BuyUserId, daMatch.BuyCurrency);
            UserPurse sellPurse = UserPurseProvider.Get(daMatch.SellUserId, daMatch.BuyCurrency);
            //收取手续费

            Transfer transfer =new Transfer(EBankTransaction);
            transfer.ReferenceTransactionFrom(this.Transaction);
            //如果买和卖都是同一个人则需要用转到系统用户再转入
            if (daMatch.BuyUserId== daMatch.SellUserId)
            {
                UserPurse transitPurse = UserPurseProvider.Get(AppConfig.TransitUserId, daMatch.BuyCurrency);
                if (!transfer.DoTransferAndUnFreeze(buyPurse, transitPurse, currency, (int)TransferReson.购买者转入出售者, "购买货币中转付款", daMatch.BuyFreezeId, "出售货币中转入账"))
                {
                    Rollback();
                    Alert("购买者转中转者失败!", transfer.PromptInfo);
                    return false;
                }
                if (!transfer.DoTransfer(transitPurse, sellPurse, currency, (int)TransferReson.购买者转入出售者, "购买货币中转付款", "出售货币中转入账"))
                {
                    Rollback();
                    Alert("中转者转出售者失败!", transfer.PromptInfo);
                    return false;
                }
            }
            else
            {
                if (!transfer.DoTransferAndUnFreeze(buyPurse, sellPurse, currency, (int)TransferReson.购买者转入出售者, "购买货币付款", daMatch.BuyFreezeId, "出售货币入账"))
                {
                    Rollback();
                    Alert("购买者转出售者失败!", transfer.PromptInfo);
                    return false;
                }
            }

            if (daMatch.Fee <=0)
            {
                Commit();
                return true;
            }
            UserPurse feePurse = UserPurseProvider.Get(AppConfig.SystemUserId, daMatch.BuyCurrency);
            Currency feeCurrency =new Currency(feePurse.CurrencyType, daMatch.Fee);
            if (!transfer.DoTransfer(sellPurse, feePurse, feeCurrency, (int)TransferReson.收取出售者手续费, "收取出售者手续费"))
            {
                Rollback();
                Alert("收取出售者手续费失败!", transfer.PromptInfo);
                return false;
            }
            Commit();
            return true;
        }

        //修改撮合成功信息
        private bool UpdateSuccess()
        {
            daMatch.ReferenceTransactionFrom(this.Transaction);
            if (!daMatch.UpdateTransferSuccess(daMatch.MatchId, daMatch.TransferId.Value))
            {
                Alert("修改撮合历史成功时发现失败", daMatch.PromptInfo);
                return false;
            }
            return true;
        }


        //修改撮合失败信息
        private bool UpdateFail(string remarks)
        {
            Tdct_Match match =new Tdct_Match();
            if (!daMatch.UpdateTransferFail(daMatch.MatchId, remarks))
            {
                Alert("修改撮合历史成功时发现失败", daMatch.PromptInfo);
                return false;
            }
            return true;
        }


        //解除挂单的代币锁定
        public bool UnFreeze()
        {
            Tdct_EntrustCollection daEntrustColl =new Tdct_EntrustCollection();
            daEntrustColl.ReferenceTransactionFrom(this.Transaction);
            daEntrustColl.ListWaitRevokeRedundant(daMatch.SellEntrust, daMatch.BuyEntrust);
            Log.Info("解冻冗余[{0}笔]:", daEntrustColl.Count);
            if (daEntrustColl.Count <=0)
            {
                return true;
            }
            foreach (Tdct_Entrust item in daEntrustColl)
            {
                Log.Info("[{0}]解冻就绪", item.Id);
                decimal amount=item.EAmount - item.TAmount;
                Currency currency =new Currency(CurrencyType.RMB, amount);
                Log.Info("[{0}]委托剩余解冻{1}金额", item.Id, amount);
                UserPurse userPurse = UserPurseProvider.Get(item.UserId, item.TCurrency);
                userPurse.ReferenceTransactionFrom(this.Transaction);
                if (!userPurse.UnFreeze(item.FreezeId, currency))
                {
                    Alert(userPurse.PromptInfo);
                    Log.Info("[{0}]解冻失败:{1}", item.Id, userPurse.PromptInfo.MessageStack);
                    return false;
                }
                Log.Info("[{0}]解冻成功", item.Id);
            }
            return true;
        }


        //同步代币动态信息
        private bool SyncDynamice()
        {
            Tdct_Daily_Dynamics daDynamice =new Tdct_Daily_Dynamics();
            daDynamice.ReferenceTransactionFrom(this.Transaction);
            if (daDynamice.SelectByDate(daMatch.SellCurrency, daMatch.BuyCurrency))
            {
                if (!daDynamice.UpdateNewSycn(daDynamice.Id, daMatch.Price, daMatch.BuyCount))
                {
                    Alert("同步每日动态失败");
                    return false;
                }
                return true;
            }
            daDynamice.BuyCurrencyId = daMatch.BuyCurrency;
            daDynamice.SellCurrencyId = daMatch.SellCurrency;
            daDynamice.LastTime = DateTime.Now;
            daDynamice.MaxPrice = daMatch.Price;
            daDynamice.MinPrice = daMatch.Price;
            daDynamice.NewPrice = daMatch.Price;
            daDynamice.StartPrice = daMatch.Price;
            daDynamice.TCount = daMatch.BuyCount;
            if (!daDynamice.Insert())
            {
                Alert("保存每日动态数据失败!", daDynamice.PromptInfo);
                return false;
            }
            return true;
        }
    }
}
美化布局示例

欧易(OKX)最新版本

【遇到注册下载问题请加文章最下面的客服微信】永久享受返佣20%手续费!

APP下载   全球官网 大陆官网

币安(Binance)最新版本

币安交易所app【遇到注册下载问题请加文章最下面的客服微信】永久享受返佣20%手续费!

APP下载   官网地址

火币HTX最新版本

火币老牌交易所【遇到注册下载问题请加文章最下面的客服微信】永久享受返佣20%手续费!

APP下载   官网地址
文字格式和图片示例

注册有任何问题请添加 微信:MVIP619 拉你进入群

弹窗与图片大小一致 文章转载注明

分享:

扫一扫在手机阅读、分享本文

发表评论
平台列表
美化布局示例

欧易(OKX)

  全球官网 大陆官网

币安(Binance)

  官网

火币(HTX)

  官网

Gate.io

  官网

Bitget

  官网

deepcoin

  官网
热门文章
  • 从 IPFS社区Meetup谈谈2020年的IPFS的发展历程

    从 IPFS社区Meetup谈谈2020年的IPFS的发展历程
    8月3日, IPFS社区Meetup 如期举办,这一次的社区Meetup由交流与演讲和闪电演示两部分组成,其实该会议主要带领我们回顾了IPFS在2020年的发展历程(包括项目进展、IPFS生态发展等),展示了IPFS及其生态。2020年对于IPFS而言是不平凡的一年,其唯一激励层Filecoin的主网即将上线,这让IPFS和Filecoin在全球范围内得到了前所未有的关注,也推动了IPFS的高速发展。接下来,我们一起走进IPFS在20...
  • 超10万人爆仓,比特币跳水,发生了什么

    超10万人爆仓,比特币跳水,发生了什么
    现货比特币ETF上市第二日,数字货币再迎来抛售。比特币一度跌破42000美元/枚,截止1月13日内跌幅超7%,报42562.1美元/枚。The current Bitcoin ETF is on the second day of the market and the digital currency is sold again. Bitcoin fell by over 7% to $4562.1 on 13 January.现货比特币ETF普遍跌6%左右。其中,DEFI跌...
  • 兴业基金调研远光软件、东芯股份

    兴业基金调研远光软件、东芯股份
    根据6月6日公布的公开市场信息和机构研究,世界安全基金会最近对下列两家上市公司进行了一项研究: 1) 光电软件(工程师基金参与公司专项研究) 其中一个亮点是该公司深入参与建造南方网中心和技术平台,导致南网市场在 " 九天 " 平台产品方面取得重大突破;该公司的Won-宇宙大厅已上线,而且,除了Won-宇宙之外,远洋宇宙的应用现已扩大到Won-宇宙发射、Won-宇宙-教师和政党建设-宇宙;该公司的Far-O-Cloud平台已经实现了完全成熟的国家生产,也可以在全国云中运作。...
  • 0.00003374个比特币等于多少人民币/美金

    0.00003374个比特币等于多少人民币/美金
    0.00003374比特币等于多少人民币?根据比特币对人民币的最新汇率,0.00003374比特币等于2.2826 1222美元/16.5261124728人民币。比特币(BTC)美元(USDT)人民币(CNY)0.00003374克洛克-0/22216.5261124728比特币对人民币的最新汇率为:489807.72 CNY(1比特币=489807.72人民币)(1美元=7.24人民币)(0.00003374USDT=0.0002442776 CNY)。汇率更新于2024...
  • $DOG暴涨400%,加密货币或许正在重新定义和计量“价值”

    $DOG暴涨400%,加密货币或许正在重新定义和计量“价值”
    近/克洛克-0/5,Meme币狗?走吗?去哪?那个?MOON($ DOG)连续上涨超过230%,突破前期高点,达到0.0062美元。在同一时期,比特币生态的许多主流L2协议代币下跌了50%以上。这些就是我们所说的“价值币”。虽然大起大落不能说明什么,但从过去的牛市来看,领头羊MemeCoin表现非凡。在上一轮牛市中,$DOGE的价格上涨了超过150倍,其市值接近900亿美元。还有其他MemeCoin,如$Shib、$People、$ELON、$AKITA等。2 vkwmkpm...
标签列表