Helius
2020-07-01 94c55976479131ad79e100e551a06d84b071d504
add coin entrust to deal
6 files modified
1 files added
121 ■■■■■ changed files
src/main/java/com/xcong/excoin/modules/coin/dao/OrderCoinsDao.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/coin/mapper/OrderCoinsDealMapper.java 21 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/coin/service/OrderCoinService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/coin/service/impl/OrderCoinServiceImpl.java 72 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/quartz/job/LoopExecutorJob.java 16 ●●●●● patch | view | raw | blame | history
src/main/resources/application.yml 2 ●●● patch | view | raw | blame | history
src/main/resources/mapper/walletCoinOrder/OrderCoinsDao.xml 6 ●●●●● 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>