From 071433a3b29cc73bddd6d9ea5ac3bc4c8807948c Mon Sep 17 00:00:00 2001 From: zainali5120 <512061637@qq.com> Date: Wed, 14 Oct 2020 11:43:56 +0800 Subject: [PATCH] ROC交易所调试日志删除 --- src/main/java/com/xcong/excoin/modules/coin/service/impl/OrderCoinServiceImpl.java | 339 ++++++++++++++++++++++++++------------------------------ 1 files changed, 159 insertions(+), 180 deletions(-) diff --git a/src/main/java/com/xcong/excoin/modules/coin/service/impl/OrderCoinServiceImpl.java b/src/main/java/com/xcong/excoin/modules/coin/service/impl/OrderCoinServiceImpl.java index ce0de2c..739c9d8 100644 --- a/src/main/java/com/xcong/excoin/modules/coin/service/impl/OrderCoinServiceImpl.java +++ b/src/main/java/com/xcong/excoin/modules/coin/service/impl/OrderCoinServiceImpl.java @@ -8,6 +8,8 @@ import javax.annotation.Resource; import com.alibaba.fastjson.JSONObject; +import com.xcong.excoin.common.contants.AppContants; +import com.xcong.excoin.common.enumerates.CoinTypeEnum; import com.xcong.excoin.modules.blackchain.service.RocService; import com.xcong.excoin.modules.coin.mapper.OrderCoinsDealMapper; import com.xcong.excoin.modules.member.dao.MemberDao; @@ -16,6 +18,7 @@ import com.xcong.excoin.modules.platform.entity.PlatformSymbolsCoinEntity; import com.xcong.excoin.modules.symbols.constants.SymbolsConstats; +import com.xcong.excoin.rabbit.producer.OrderSubmitProducer; import com.xcong.excoin.trade.CoinTrader; import com.xcong.excoin.trade.CoinTraderFactory; import com.xcong.excoin.trade.ExchangeTrade; @@ -90,6 +93,9 @@ @Resource private MemberDao memberDao; + + @Resource + private OrderSubmitProducer orderSubmitProducer; @Override @@ -339,9 +345,41 @@ Long memberId = LoginUserUtils.getAppLoginUser().getId(); // 需要实名 MemberEntity memberEntity = memberDao.selectById(memberId); - if(!MemberEntity.CERTIFY_STATUS_Y.equals(memberEntity.getCertifyStatus())){ + if (!MemberEntity.CERTIFY_STATUS_Y.equals(memberEntity.getCertifyStatus())) { return Result.fail(MessageSourceUtils.getString("member_controller_0001")); } + // 需要先 + String phone = memberEntity.getPhone(); + if (!"13632989240".equals(phone) && !"15158130575".equals(phone)) { + if (OrderCoinsEntity.ORDERTYPE_BUY.equals(type)) { + // 不能超过800个 + +// if (amount != null && amount.compareTo(new BigDecimal("800")) > 0) { +// return Result.fail("买入额度受限"); +// } +// BigDecimal bigDecimal = orderCoinDealDao.sumTodayBuyAmount(memberId, symbol); +// if (bigDecimal == null) { +// bigDecimal = BigDecimal.ZERO; +// } +// amount = amount == null ? BigDecimal.ZERO : amount; +// bigDecimal = bigDecimal.add(amount); +// if (bigDecimal != null && bigDecimal.compareTo(new BigDecimal("800")) > 0) { +// return Result.fail("买入额度受限"); +// } +// // 挂单不能超过800 +// BigDecimal bigDecimal1 = orderCoinDealDao.sumTodayEntrustCntBuyAmount(memberId, symbol); +// if (bigDecimal1 == null) { +// bigDecimal1 = BigDecimal.ZERO; +// } +// bigDecimal1 = bigDecimal1.add(amount); +// if (bigDecimal1 != null && bigDecimal1.compareTo(new BigDecimal("800")) > 0) { +// return Result.fail("买入额度受限"); +// } + } else { + return Result.fail("卖出受限"); + } + } + BigDecimal nowPriceinBigDecimal = price; //查询当前价 //BigDecimal nowPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(symbol + "/USDT"))); @@ -377,13 +415,11 @@ entrustAmount = price.multiply(amount); } else { // 市价 - if(OrderCoinsEntity.ORDERTYPE_BUY==type){ + if (OrderCoinsEntity.ORDERTYPE_BUY == type) { closingPrice = entrustAmount.multiply(tradeSetting.getCoinFeeRatio()); totalPayPrice = entrustAmount.add(closingPrice); } } - // BigDecimal totalPayPricCoin = nowPrice.multiply(amount).add(closingPrice); - String walletCode = MemberWalletCoinEnum.WALLETCOINCODE.getValue(); MemberWalletCoinEntity walletCoinUsdt = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, walletCode); if (OrderCoinsEntity.ORDERTYPE_BUY.equals(type)) { @@ -449,24 +485,14 @@ //冻结相应的资产 if (OrderCoinsEntity.ORDERTYPE_BUY.equals(type)) { //如果是买入,所对应的币种增加,USDT账户减少金额 -// BigDecimal availableBalance = walletCoinUsdt.getAvailableBalance().subtract(totalPayPrice); -// BigDecimal frozenBalance = walletCoinUsdt.getFrozenBalance().add(totalPayPrice); -// walletCoinUsdt.setAvailableBalance(availableBalance); -// walletCoinUsdt.setFrozenBalance(frozenBalance); -// memberWalletCoinDao.updateById(walletCoinUsdt); - memberWalletCoinDao.updateWalletBalance(walletCoinUsdt.getId(),totalPayPrice.negate(),totalPayPrice.negate(),entrustAmount); + memberWalletCoinDao.updateWalletBalance(walletCoinUsdt.getId(), totalPayPrice.negate(), totalPayPrice.negate(), entrustAmount); } else { //如果是卖出,币种减少,USDT增加 -// BigDecimal availableBalance = walletCoin.getAvailableBalance().subtract(amount); -// BigDecimal frozenBalance = walletCoin.getFrozenBalance().add(amount); -// walletCoin.setAvailableBalance(availableBalance); -// walletCoin.setFrozenBalance(frozenBalance); -// memberWalletCoinDao.updateById(walletCoin); - memberWalletCoinDao.updateWalletBalance(walletCoin.getId(),amount.negate(),amount.negate(),amount); + memberWalletCoinDao.updateWalletBalance(walletCoin.getId(), amount.negate(), amount.negate(), amount); } // 加入到撮合 - CoinTrader trader = factory.getTrader(symbol); - trader.trade(order); + order.setSymbol(symbol); + orderSubmitProducer.sendMsg(JSONObject.toJSONString(order)); return Result.ok(MessageSourceUtils.getString("order_service_0011")); } @@ -505,15 +531,28 @@ @Override @Transactional public Result cancelEntrustWalletCoinOrder(String orderId) { + // 将这个取消放入redis + boolean b = redisUtils.setNotExist(AppContants.ORDER_CANCEL_KEY + orderId, orderId, 10); + if (!b) { + return Result.ok(MessageSourceUtils.getString("order_service_0012")); + } //获取用户ID Long memberId = LoginUserUtils.getAppLoginUser().getId(); OrderCoinsEntity orderCoinsEntity = orderCoinsDao.selectById(orderId); - if (ObjectUtil.isNotEmpty(orderCoinsEntity) && orderCoinsEntity.getMemberId().equals(memberId) ) { + if (ObjectUtil.isNotEmpty(orderCoinsEntity) && orderCoinsEntity.getMemberId().equals(memberId)) { // 如果是撮合交易单 if (SymbolsConstats.EXCHANGE_SYMBOLS.contains(orderCoinsEntity.getSymbol())) { - return this.cancelEntrustWalletCoinOrderForMatch(orderId); + // 这里先更新状态 判断状态 防止消息发送过程中的二次提交 + if (!orderCoinsEntity.getOrderStatus().equals(OrderCoinsEntity.ORDERSTATUS_DODING)) { + // 不是持仓中 返回 + return Result.ok(MessageSourceUtils.getString("order_service_0013")); + } + + // 更新为已取消(可能在这个过程中 这个单已经成交) + orderSubmitProducer.sendCancelMsg(orderId); + return Result.ok(MessageSourceUtils.getString("order_service_0013")); } - if (orderCoinsEntity.getOrderStatus() == OrderCoinsEntity.ORDERSTATUS_CANCEL || orderCoinsEntity.getOrderStatus()==OrderCoinsEntity.ORDERSTATUS_DONE) { + if (orderCoinsEntity.getOrderStatus() == OrderCoinsEntity.ORDERSTATUS_CANCEL || orderCoinsEntity.getOrderStatus() == OrderCoinsEntity.ORDERSTATUS_DONE) { return Result.fail(MessageSourceUtils.getString("order_service_0012")); } orderCoinsEntity.setOrderStatus(OrderCoinsEntity.ORDERSTATUS_CANCEL); @@ -588,18 +627,31 @@ @Override @Transactional public Result cancelEntrustWalletCoinOrderForMatch(String orderId) { - //获取用户ID - Long memberId = LoginUserUtils.getAppLoginUser().getId(); + //如果redis中没有这个单 则不再往下走 OrderCoinsEntity orderCoinsEntity = orderCoinsDao.selectById(orderId); + if (orderCoinsEntity == null) { + return Result.ok(""); + } + Long memberId = orderCoinsEntity.getMemberId(); // 取消撮合订单的单 CoinTrader trader = factory.getTrader(orderCoinsEntity.getSymbol()); - trader.cancelOrder(orderCoinsEntity); - if (ObjectUtil.isNotEmpty(orderCoinsEntity) && orderCoinsEntity.getMemberId().equals(memberId)) { - if (orderCoinsEntity.getOrderStatus() == OrderCoinsEntity.ORDERSTATUS_CANCEL || orderCoinsEntity.getOrderStatus()==OrderCoinsEntity.ORDERSTATUS_DONE) { + // 从撮合交易系统得到的已成交的数据 + OrderCoinsEntity coinsEntityCancel = trader.cancelOrder(orderCoinsEntity); + if (coinsEntityCancel == null) { + // 此时说明撮合系统已经没这个单了 不需要继续处理 + return null; + } + + if (ObjectUtil.isNotEmpty(orderCoinsEntity)) { + if (orderCoinsEntity.getOrderStatus() == OrderCoinsEntity.ORDERSTATUS_DONE) { + // 已完成的直接返回 return Result.fail(MessageSourceUtils.getString("order_service_0012")); } - orderCoinsEntity.setOrderStatus(OrderCoinsEntity.ORDERSTATUS_CANCEL); - orderCoinsDao.updateById(orderCoinsEntity); + OrderCoinsEntity update = new OrderCoinsEntity(); + update.setId(Long.valueOf(orderId)); + update.setOrderStatus(OrderCoinsEntity.ORDERSTATUS_CANCEL); + //orderCoinsEntity.setOrderStatus(OrderCoinsEntity.ORDERSTATUS_CANCEL); + orderCoinsDao.updateById(update); String symbol = orderCoinsEntity.getSymbol(); @@ -611,13 +663,11 @@ detail.setTradeType(orderCoinsEntity.getTradeType()); detail.setSymbol(symbol); detail.setOrderStatus(OrderCoinsDealEntity.ORDERSTATUS_CANCEL); - detail.setSymbolCnt(orderCoinsEntity.getEntrustCnt()); + detail.setSymbolCnt(BigDecimal.ZERO); detail.setEntrustPrice(orderCoinsEntity.getEntrustPrice()); - detail.setDealPrice(orderCoinsEntity.getDealPrice()); - detail.setDealAmount(orderCoinsEntity.getDealAmount()); + detail.setDealPrice(BigDecimal.ZERO); + detail.setDealAmount(BigDecimal.ZERO); detail.setFeeAmount(orderCoinsEntity.getFeeAmount()); - orderCoinDealDao.insert(detail); - if (OrderCoinsEntity.ORDERTYPE_BUY.equals(orderCoinsEntity.getOrderType())) { //如果是限价买入,撤单将USDT账户冻结金额返回 String walletCode = MemberWalletCoinEnum.WALLETCOINCODE.getValue(); @@ -626,21 +676,25 @@ if (ObjectUtil.isNotEmpty(walletCoin)) { //手续费 = 开仓价*数量*手续费率 //返还金额=开仓价*未成交数量+手续费 - + // 这里根据成交的单计算 + BigDecimal dealAmount = coinsEntityCancel.getDealAmount(); // 市价的按成交额退款 - BigDecimal returnBalance = orderCoinsEntity.getEntrustAmount().subtract(orderCoinsEntity.getDealAmount()); + BigDecimal returnBalance = orderCoinsEntity.getEntrustAmount().subtract(dealAmount); + // 需要退回的手续费 BigDecimal returnFee = BigDecimal.ZERO; if (returnBalance.compareTo(orderCoinsEntity.getEntrustAmount()) == 0) { returnFee = orderCoinsEntity.getFeeAmount(); } else { // 按比例退回 - BigDecimal needFee = orderCoinsEntity.getDealAmount().divide(orderCoinsEntity.getEntrustAmount(), 8, BigDecimal.ROUND_DOWN).multiply(orderCoinsEntity.getFeeAmount()); + BigDecimal needFee = orderCoinsEntity.getFeeAmount().multiply(dealAmount.divide(orderCoinsEntity.getEntrustAmount(), 8, BigDecimal.ROUND_DOWN)); returnFee = orderCoinsEntity.getFeeAmount().subtract(needFee); } + BigDecimal avi = returnBalance.add(returnFee); + memberWalletCoinDao.updateWalletBalance(walletCoin.getId(), avi, null, returnBalance.negate()); walletCoin.setAvailableBalance(walletCoin.getAvailableBalance().add(returnBalance).add(returnFee)); walletCoin.setFrozenBalance(walletCoin.getFrozenBalance().subtract(returnBalance)); - memberWalletCoinDao.updateById(walletCoin); + //memberWalletCoinDao.updateById(walletCoin); // 流水记录 MemberAccountFlowEntity record = new MemberAccountFlowEntity(); record.setSource(MemberAccountFlowEntity.SOURCE_CANCEL); @@ -657,10 +711,11 @@ MemberWalletCoinEntity walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, symbol); if (ObjectUtil.isNotEmpty(walletCoin)) { // 卖出按卖出的数量计算手续费 - BigDecimal returnBalance = orderCoinsEntity.getEntrustCnt().subtract(orderCoinsEntity.getDealCnt()); + BigDecimal returnBalance = orderCoinsEntity.getEntrustCnt().subtract(coinsEntityCancel.getDealCnt()); walletCoin.setAvailableBalance(walletCoin.getAvailableBalance().add(returnBalance)); walletCoin.setFrozenBalance(walletCoin.getFrozenBalance().subtract(returnBalance)); - memberWalletCoinDao.updateById(walletCoin); + //memberWalletCoinDao.updateById(walletCoin); + memberWalletCoinDao.updateWalletBalance(walletCoin.getId(), returnBalance, null, returnBalance.negate()); // 流水记录 MemberAccountFlowEntity record = new MemberAccountFlowEntity(); record.setSource(MemberAccountFlowEntity.SOURCE_CANCEL); @@ -673,6 +728,7 @@ return Result.ok(MessageSourceUtils.getString("order_service_0013")); } } + orderCoinDealDao.insert(detail); } return Result.fail(MessageSourceUtils.getString("order_service_0043")); } @@ -710,6 +766,12 @@ return Result.ok(pageEntityToPageVo); + } + + @Override + public Result findAllWalletCoinOrder() { + List<OrderCoinsDealEntity> orderCoinsDealEntities = orderCoinDealDao.selectAllCoinDealsOrderBySymbol(CoinTypeEnum.ROC.toString()); + return Result.ok(orderCoinsDealEntities); } @Override @@ -913,27 +975,14 @@ BigDecimal price = exchangeTrade.getPrice(); // 卖单 Long sellOrderId = exchangeTrade.getSellOrderId(); + // 买卖单都需要处理 // 买单 OrderCoinsEntity buyOrderCoinsEntity = orderCoinsDao.selectById(buyOrderId); - if(buyOrderCoinsEntity==null){ - return; - } - BigDecimal buyEntrustCnt = buyOrderCoinsEntity.getEntrustCnt(); - if(buyEntrustCnt==null){ - buyEntrustCnt = BigDecimal.ZERO; - } - Long memberId = buyOrderCoinsEntity.getMemberId(); if (buyOrderCoinsEntity != null) { - // 比较剩余的量 - BigDecimal dealAmount = buyOrderCoinsEntity.getDealAmount(); // 单的总金额 - BigDecimal entrustAmount = buyOrderCoinsEntity.getEntrustAmount(); - BigDecimal add = dealAmount.add(buyTurnover); BigDecimal closingPrice = buyTurnover.multiply(new BigDecimal("0.002")); - - //成交量 - BigDecimal dealCnt = buyOrderCoinsEntity.getDealCnt().add(amount); + //成交总量 // 创建一个完成的单 OrderCoinsDealEntity detail = new OrderCoinsDealEntity(); detail.setMemberId(buyOrderCoinsEntity.getMemberId()); @@ -948,40 +997,37 @@ detail.setDealAmount(buyTurnover); detail.setFeeAmount(closingPrice); detail.setOrderStatus(OrderCoinsDealEntity.ORDERSTATUS_DONE); + // 如果这个单在取消状态 则不执行 orderCoinDealDao.insert(detail); - // 如果这个单成交完 更改状态 - if (add.compareTo(entrustAmount) >= 0 ||(buyEntrustCnt.compareTo(BigDecimal.ZERO)>0 &&dealCnt.compareTo(buyEntrustCnt)>=0) ) { - OrderCoinsEntity update = new OrderCoinsEntity(); - update.setId(buyOrderId); - update.setDealAmount(entrustAmount); - update.setDealCnt(buyOrderCoinsEntity.getDealCnt().add(amount)); - update.setOrderStatus(OrderCoinsEntity.ORDERSTATUS_DONE); - update.setUpdateTime(new Date()); - orderCoinsDao.updateById(update); - // 限价买入时,如果成交价比设置的价格低,需要退还多余的冻结 - OrderCoinsEntity coinsEntity = orderCoinsDao.selectById(buyOrderId); - BigDecimal subtract = coinsEntity.getEntrustAmount().subtract(coinsEntity.getDealAmount()); - if(subtract.compareTo(BigDecimal.ZERO)>=0){ - // 下单扣的比较多 - memberWalletCoinDao.updateWalletBalance(coinsEntity.getId(),subtract,subtract,subtract.negate()); - } - } else { - OrderCoinsEntity update = new OrderCoinsEntity(); - update.setId(buyOrderId); - update.setDealAmount(add); - update.setDealCnt(buyOrderCoinsEntity.getDealCnt().add(amount)); - update.setUpdateTime(new Date()); - orderCoinsDao.updateById(update); + // 更新买单 + //orderCoinsDao.updateDeal(buyOrderId, amount, buyTurnover); + // 买币扣除冻结usdt 增加币种的可用 + MemberWalletCoinEntity usdtWallet = memberWalletCoinDao.selectWalletCoinBymIdAndCode(buyOrderCoinsEntity.getMemberId(), MemberWalletCoinEnum.WALLETCOINCODE.getValue()); + if (usdtWallet != null) { + // 减少usdt冻结 + memberWalletCoinDao.updateWalletBalance(usdtWallet.getId(), null, null, buyTurnover.negate()); } + // 增加买的币 + MemberWalletCoinEntity buySymbolWallet = memberWalletCoinDao.selectWalletCoinBymIdAndCode(buyOrderCoinsEntity.getMemberId(), buyOrderCoinsEntity.getSymbol()); + if (buySymbolWallet != null) { + memberWalletCoinDao.updateWalletBalance(buySymbolWallet.getId(), amount, amount, null); + } + // 流水记录 + MemberAccountFlowEntity record = new MemberAccountFlowEntity(); + record.setMemberId(buyOrderCoinsEntity.getMemberId()); + record.setPrice(buyTurnover.setScale(4, BigDecimal.ROUND_DOWN).negate()); + record.setSource(MemberAccountFlowEntity.SOURCE_BUY + buyOrderCoinsEntity.getSymbol()); + record.setRemark(MemberAccountFlowEntity.REMARK_BUY + buyOrderCoinsEntity.getSymbol() + ":" + amount); + record.setSymbol(buyOrderCoinsEntity.getSymbol()); + record.setBalance(usdtWallet.getAvailableBalance().subtract(buyTurnover)); + memberAccountFlowEntityDao.insert(record); } + // 卖单 OrderCoinsEntity sellOrderCoinsEntity = orderCoinsDao.selectById(sellOrderId); if (sellOrderCoinsEntity != null) { // 比较剩余的量 BigDecimal dealAmount = sellOrderCoinsEntity.getDealCnt(); - // 单的总数量 - BigDecimal entrustCnt = sellOrderCoinsEntity.getEntrustCnt(); - BigDecimal add = dealAmount.add(amount); // 创建一个完成的单 OrderCoinsDealEntity detail = new OrderCoinsDealEntity(); detail.setMemberId(sellOrderCoinsEntity.getMemberId()); @@ -998,46 +1044,7 @@ detail.setOrderStatus(OrderCoinsDealEntity.ORDERSTATUS_DONE); orderCoinDealDao.insert(detail); // 如果这个单成交完 更改状态 - if (add.compareTo(entrustCnt) >= 0) { - OrderCoinsEntity update = new OrderCoinsEntity(); - update.setId(sellOrderId); - // 总成交额 - update.setDealAmount(buyTurnover.add(sellOrderCoinsEntity.getDealAmount())); - update.setOrderStatus(OrderCoinsEntity.ORDERSTATUS_DONE); - update.setDealCnt(entrustCnt); - update.setUpdateTime(new Date()); - orderCoinsDao.updateById(update); - } else { - // 未完成 - OrderCoinsEntity update = new OrderCoinsEntity(); - update.setId(sellOrderId); - // 总成交额 - update.setDealAmount(buyTurnover.add(sellOrderCoinsEntity.getDealAmount())); - update.setDealCnt(sellOrderCoinsEntity.getDealCnt().add(amount)); - update.setUpdateTime(new Date()); - orderCoinsDao.updateById(update); - } - // 买币扣除冻结usdt 增加币种的可用 - MemberWalletCoinEntity usdtWallet = memberWalletCoinDao.selectWalletCoinBymIdAndCode(buyOrderCoinsEntity.getMemberId(), MemberWalletCoinEnum.WALLETCOINCODE.getValue()); - if (usdtWallet != null) { - // 减少usdt冻结 - memberWalletCoinDao.updateWalletBalance(usdtWallet.getId(), null, null, buyTurnover.negate()); - } - - // 增加买的币 - MemberWalletCoinEntity buySymbolWallet = memberWalletCoinDao.selectWalletCoinBymIdAndCode(buyOrderCoinsEntity.getMemberId(), buyOrderCoinsEntity.getSymbol()); - if (buySymbolWallet != null) { - memberWalletCoinDao.updateWalletBalance(buySymbolWallet.getId(), amount, amount, null); - } - // 流水记录 - MemberAccountFlowEntity record = new MemberAccountFlowEntity(); - record.setMemberId(buyOrderCoinsEntity.getMemberId()); - record.setPrice(buyTurnover.setScale(4, BigDecimal.ROUND_DOWN).negate()); - record.setSource(MemberAccountFlowEntity.SOURCE_BUY + buyOrderCoinsEntity.getSymbol()); - record.setRemark(MemberAccountFlowEntity.REMARK_BUY + buyOrderCoinsEntity.getSymbol() + ":" + amount); - record.setSymbol(buyOrderCoinsEntity.getSymbol()); - record.setBalance(usdtWallet.getAvailableBalance().subtract(buyTurnover)); - memberAccountFlowEntityDao.insert(record); + //orderCoinsDao.updateDeal(sellOrderId, amount, buyTurnover); // 卖家需要减少冻结的币种 增加usdt MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(sellOrderCoinsEntity.getMemberId(), sellOrderCoinsEntity.getSymbol()); if (memberWalletCoinEntity != null) { @@ -1053,9 +1060,9 @@ MemberAccountFlowEntity recordSell = new MemberAccountFlowEntity(); recordSell.setMemberId(sellOrderCoinsEntity.getMemberId()); recordSell.setPrice(buyTurnover.setScale(4, BigDecimal.ROUND_DOWN)); - recordSell.setSource(MemberAccountFlowEntity.SOURCE_SALE + buyOrderCoinsEntity.getSymbol()); - recordSell.setRemark(MemberAccountFlowEntity.REMARK_SALE + buyOrderCoinsEntity.getSymbol() + ":" + amount.toPlainString()); - recordSell.setSymbol(buyOrderCoinsEntity.getSymbol()); + recordSell.setSource(MemberAccountFlowEntity.SOURCE_SALE + sellOrderCoinsEntity.getSymbol()); + recordSell.setRemark(MemberAccountFlowEntity.REMARK_SALE + sellOrderCoinsEntity.getSymbol() + ":" + amount.toPlainString()); + recordSell.setSymbol(sellOrderCoinsEntity.getSymbol()); recordSell.setBalance(sellWalletCoinEntity.getAvailableBalance().add(buyTurnover)); memberAccountFlowEntityDao.insert(recordSell); } @@ -1063,66 +1070,38 @@ } @Override + @Transactional + public void completeOrder(List<OrderCoinsEntity> trades) { + // 订单完成 更新他们的状态 + List<Long> ids = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(trades)) { + for (OrderCoinsEntity trade : trades) { + if (trade != null) { + //orderCoinsDao.updateStatus(trade.getId(),OrderCoinsEntity.ORDERSTATUS_DONE); + ids.add(trade.getId()); + // 买单 实际成交金额小于委托的 这一部分从冻结扣除 + if(OrderCoinsEntity.ORDERTYPE_BUY==trade.getOrderType()){ + if(trade.getEntrustAmount().compareTo(trade.getDealAmount())>0){ + // 此时退回这部分的差额 + BigDecimal subtract = trade.getEntrustAmount().subtract(trade.getDealAmount()); + MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(trade.getMemberId(), CoinTypeEnum.USDT.name()); + if(memberWalletCoinEntity!=null){ + memberWalletCoinDao.updateWalletBalance(memberWalletCoinEntity.getId(),subtract,null,subtract.negate()); + } + } + } + } + } + } + if (CollectionUtils.isNotEmpty(ids)) { + orderCoinsDao.batchUpdateStatus(ids, OrderCoinsEntity.ORDERSTATUS_DONE); + } + } + + @Override public void initOrders(String symbol, Integer type, Integer tradeType, BigDecimal price, BigDecimal amount, BigDecimal entrustAmount) { - //获取用户ID - Long memberId = 10L; - BigDecimal nowPriceinBigDecimal = price; - //查询当前价 - //BigDecimal nowPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(symbol + "/USDT"))); - // 获取交易管理的杠杠倍率,手续费率等信息,由平台进行设置 - symbol = symbol.toUpperCase(); - - // 手续费用(手续费=建仓价X数量X手续费率) - BigDecimal closingPrice = BigDecimal.ZERO; - - // BigDecimal totalPayPricCoin = nowPrice.multiply(amount).add(closingPrice); - // 首先将单插入到数据库主表(委托表) - // 创建订单 - OrderCoinsEntity order = new OrderCoinsEntity(); - //根据委托类型生成不同数据 - // 如果是限价交易直接插入主表数据 - order.setMemberId(memberId); - order.setOrderNo(generateSimpleSerialno(memberId.toString())); - order.setOrderType(type); - order.setSymbol(symbol); - //order.setMarkPrice(nowPrice); - - // 成交量 先设置为0 - order.setDealCnt(BigDecimal.ZERO); - // 成交价 - //order.setDealPrice(price); - // 成交金额 - order.setDealAmount(BigDecimal.ZERO); - order.setOrderStatus(OrderCoinsEntity.ORDERSTATUS_DODING); - order.setTradeType(tradeType); - // 手续费 - order.setFeeAmount(closingPrice); - if (OrderCoinsEntity.TRADETYPE_FIXEDPRICE.equals(tradeType)) { - // 限价 是需要价格和数量 可以得到成交金额 - // 下单量 - order.setEntrustCnt(amount); - // 下单价格 - order.setEntrustPrice(price); - order.setEntrustAmount(amount.multiply(price)); - } else { - if (OrderCoinsEntity.ORDERTYPE_BUY.equals(type)) { - // 市价 只有金额 - order.setEntrustAmount(entrustAmount); - } else { - // 下单量 - order.setEntrustCnt(amount); - // 下单价格 - order.setEntrustPrice(price); - order.setEntrustAmount(amount.multiply(price)); - } - - } - orderCoinsDao.insert(order); - // 加入到撮合 - CoinTrader trader = factory.getTrader(symbol); - trader.trade(order); } -- Gitblit v1.9.1