src/main/java/com/xcong/excoin/modules/coin/dao/OrderCoinsDao.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/xcong/excoin/modules/coin/mapper/OrderCoinsDealMapper.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/xcong/excoin/modules/coin/service/OrderCoinService.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/xcong/excoin/modules/coin/service/impl/OrderCoinServiceImpl.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/xcong/excoin/quartz/job/LoopExecutorJob.java | ●●●●● patch | view | raw | blame | history | |
src/main/resources/application.yml | ●●●●● patch | view | raw | blame | history | |
src/main/resources/mapper/walletCoinOrder/OrderCoinsDao.xml | ●●●●● patch | view | raw | blame | history |
src/main/java/com/xcong/excoin/modules/coin/dao/OrderCoinsDao.java
@@ -14,4 +14,6 @@ List<OrderCoinsEntity> findCoinOrderListByMemberIdAndSysmbol(@Param("memberId")Long memberId,@Param("symbol")String symbol,@Param("status")int status); OrderCoinsEntity findWalletCoinOrderByOrderNo(@Param("orderNo")String orderNo); List<OrderCoinsEntity> selectAllEntrustingCoinOrderList(); } src/main/java/com/xcong/excoin/modules/coin/mapper/OrderCoinsDealMapper.java
New file @@ -0,0 +1,21 @@ package com.xcong.excoin.modules.coin.mapper; import com.xcong.excoin.modules.coin.entity.OrderCoinsDealEntity; import com.xcong.excoin.modules.coin.entity.OrderCoinsEntity; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.factory.Mappers; /** * @author wzy * @date 2020-07-01 **/ @Mapper public abstract class OrderCoinsDealMapper { public static final OrderCoinsDealMapper INSTANCE = Mappers.getMapper(OrderCoinsDealMapper.class); @Mapping(target = "symbolCnt", source = "entrustCnt") public abstract OrderCoinsDealEntity orderToOrderDeal(OrderCoinsEntity orderCoinsEntity); } src/main/java/com/xcong/excoin/modules/coin/service/OrderCoinService.java
@@ -32,4 +32,6 @@ public Result searchSymbolResultList(); public void dealEntrustCoinOrder(); } src/main/java/com/xcong/excoin/modules/coin/service/impl/OrderCoinServiceImpl.java
@@ -12,6 +12,7 @@ import javax.annotation.Resource; import com.xcong.excoin.modules.coin.mapper.OrderCoinsDealMapper; import com.xcong.excoin.modules.platform.entity.PlatformCnyUsdtExchangeEntity; import com.xcong.excoin.modules.platform.entity.PlatformSymbolsCoinEntity; @@ -443,7 +444,8 @@ Map<String, Object> columnMap = new HashMap<>(); columnMap.put("symbol", symbol); columnMap.put("member_id", memberId); memberSelectSymbolsDao.deleteByMap(columnMap);; memberSelectSymbolsDao.deleteByMap(columnMap); ; return Result.ok(MessageSourceUtils.getString("order_service_0016")); } } @@ -513,4 +515,72 @@ return Result.ok(findCollectListVo); } @Override @Transactional(rollbackFor = Exception.class) public void dealEntrustCoinOrder() { List<OrderCoinsEntity> list = orderCoinsDao.selectAllEntrustingCoinOrderList(); if (CollUtil.isNotEmpty(list)) { for (OrderCoinsEntity orderCoinsEntity : list) { BigDecimal nowPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(orderCoinsEntity.getSymbol() + "/USDT"))); // 下单时市场价 BigDecimal markPrice = orderCoinsEntity.getMarkPrice(); // 委托价 BigDecimal entrustPrice = orderCoinsEntity.getEntrustPrice(); //如果当时委托价小于市价 if (entrustPrice.compareTo(markPrice) < 0) { if (nowPrice.compareTo(entrustPrice) > 0) { continue; } } else { //委托价大于市价 if (nowPrice.compareTo(entrustPrice) < 0) { continue; } } BigDecimal fee = entrustPrice.multiply(orderCoinsEntity.getEntrustCnt()).multiply(new BigDecimal("0.002")).setScale(8, BigDecimal.ROUND_HALF_UP); BigDecimal dealAmount = entrustPrice.multiply(orderCoinsEntity.getEntrustCnt()); OrderCoinsDealEntity orderCoinsDealEntity = OrderCoinsDealMapper.INSTANCE.orderToOrderDeal(orderCoinsEntity); orderCoinsDealEntity.setDealAmount(dealAmount); orderCoinsDealEntity.setDealPrice(entrustPrice); orderCoinsDealEntity.setFeeAmount(fee); orderCoinsDealEntity.setOrderStatus(OrderCoinsDealEntity.ORDERSTATUS_DONE); orderCoinsDealEntity.setId(null); orderCoinDealDao.insert(orderCoinsDealEntity); orderCoinsDao.deleteById(orderCoinsEntity.getId()); MemberWalletCoinEntity walletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(orderCoinsEntity.getMemberId(), orderCoinsEntity.getSymbol()); MemberWalletCoinEntity usdt = memberWalletCoinDao.selectWalletCoinBymIdAndCode(orderCoinsEntity.getMemberId(), "USDT"); BigDecimal frozen = BigDecimal.ZERO; BigDecimal total = BigDecimal.ZERO; // 买入 if (OrderCoinsEntity.ORDERTYPE_BUY.equals(orderCoinsEntity.getOrderType())) { BigDecimal newCoins = walletCoinEntity.getAvailableBalance().add(orderCoinsEntity.getEntrustCnt()); BigDecimal newCoinTotal = walletCoinEntity.getTotalBalance().add(orderCoinsEntity.getEntrustCnt()); walletCoinEntity.setAvailableBalance(newCoins); walletCoinEntity.setTotalBalance(newCoinTotal); memberWalletCoinDao.updateById(walletCoinEntity); frozen = usdt.getFrozenBalance().subtract(dealAmount.add(fee)); total = usdt.getTotalBalance().subtract(dealAmount.add(fee)); usdt.setFrozenBalance(frozen); usdt.setTotalBalance(total); memberWalletCoinDao.updateById(usdt); } else { walletCoinEntity.setFrozenBalance(walletCoinEntity.getFrozenBalance().subtract(orderCoinsEntity.getEntrustCnt())); walletCoinEntity.setTotalBalance(walletCoinEntity.getTotalBalance().subtract(orderCoinsEntity.getEntrustCnt())); memberWalletCoinDao.updateById(walletCoinEntity); usdt.setAvailableBalance(usdt.getAvailableBalance().add(dealAmount.add(fee))); usdt.setTotalBalance(usdt.getTotalBalance().add(dealAmount.add(fee))); memberWalletCoinDao.updateById(usdt); } } } } } src/main/java/com/xcong/excoin/quartz/job/LoopExecutorJob.java
@@ -1,5 +1,6 @@ package com.xcong.excoin.quartz.job; import com.xcong.excoin.modules.coin.service.OrderCoinService; import com.xcong.excoin.modules.contract.service.ContractHoldOrderService; import com.xcong.excoin.modules.home.dao.MemberQuickBuySaleDao; import lombok.extern.slf4j.Slf4j; @@ -25,6 +26,9 @@ @Resource private ContractHoldOrderService contractHoldOrderService; @Resource private OrderCoinService orderCoinService; /** * 更新快捷充值超时状态 */ @@ -51,4 +55,16 @@ log.error("#持仓费计算错误#", e); } } /** * 币币委托单成交 */ @Scheduled(cron = "0/5 * * * * ? ") public void coinEntrustToDeal() { try { orderCoinService.dealEntrustCoinOrder(); } catch (Exception e) { log.error("#币币委托单成交错误#", e); } } } src/main/resources/application.yml
@@ -99,7 +99,7 @@ newest-price-update-job: false #其他任务控制 other-job: false loop-job: false loop-job: true rabbit-consumer: false block-job: false src/main/resources/mapper/walletCoinOrder/OrderCoinsDao.xml
@@ -20,4 +20,10 @@ SELECT * FROM coins_order a where a.order_no= #{orderNo} </select> <select id="selectAllEntrustingCoinOrderList" resultType="com.xcong.excoin.modules.coin.entity.OrderCoinsEntity"> select * from coins_order where order_status=1 </select> </mapper>