Helius
2020-09-13 3a9537996edb1c9f97a6b047556e910ba2bd1cb7
src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java
@@ -24,11 +24,9 @@
import com.xcong.excoin.modules.contract.service.ContractHoldOrderService;
import com.xcong.excoin.modules.member.dao.MemberDao;
import com.xcong.excoin.modules.member.dao.MemberLevelRateDao;
import com.xcong.excoin.modules.member.dao.MemberSettingDao;
import com.xcong.excoin.modules.member.dao.MemberWalletContractDao;
import com.xcong.excoin.modules.member.entity.AgentReturnEntity;
import com.xcong.excoin.modules.member.entity.MemberEntity;
import com.xcong.excoin.modules.member.entity.MemberLevelRateEntity;
import com.xcong.excoin.modules.member.entity.MemberWalletContractEntity;
import com.xcong.excoin.modules.member.entity.*;
import com.xcong.excoin.modules.platform.dao.TradeSettingDao;
import com.xcong.excoin.modules.platform.entity.PlatformTradeSettingEntity;
import com.xcong.excoin.rabbit.producer.OrderProducer;
@@ -82,6 +80,8 @@
    @Resource
    private MemberDao memberDao;
    @Resource
    private MemberSettingDao memberSettingDao;
    @Transactional(rollbackFor = Exception.class)
    @Override
@@ -95,9 +95,8 @@
        PlatformTradeSettingEntity tradeSettingEntity = cacheSettingUtils.getTradeSetting();
        Long id = memberEntity.getId();
        MemberEntity selectById = memberDao.selectById(id);
        BigDecimal spread = selectById.getSpread();
        MemberSettingEntity memberSetting = memberSettingDao.selectMemberSettingByMemberId(memberEntity.getId());
        BigDecimal spread = memberSetting.getSpread();
        // 规格
        BigDecimal lotNumber = cacheSettingUtils.getSymbolSku(submitOrderDto.getSymbol());
@@ -233,7 +232,7 @@
                    if (rewardRatio.compareTo(BigDecimal.ZERO) > -1) {
                        rewardRatio = rewardRatio.multiply(BigDecimal.ONE.subtract(tradeSettingEntity.getProfitParam()));
                    } else {
                        rewardRatio = rewardRatio.multiply(BigDecimal.ONE.add(tradeSettingEntity.getProfitParam()));
//                        rewardRatio = rewardRatio.multiply(BigDecimal.ONE.add(tradeSettingEntity.getProfitParam()));
                    }
                }
@@ -254,6 +253,10 @@
                BigDecimal canReduceMaxBond = holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getPrePaymentAmount());
                if (canReduceMaxBond.compareTo(BigDecimal.ZERO) < 0) {
                    canReduceMaxBond = BigDecimal.ZERO;
                }
                if (rewardRatio.compareTo(BigDecimal.ZERO) < 0) {
                    canReduceMaxBond = canReduceMaxBond.add(rewardRatio);
                }
                holdOrderListVo.setCanReduceMaxBond(canReduceMaxBond);
@@ -612,7 +615,7 @@
                } else {
                    BigDecimal available = walletContractEntity.getAvailableBalance();
                    BigDecimal lessAmount = thisTimeHold.subtract(available);
                    MemberEntity memberEntity = memberDao.selectById(holdOrderEntity.getId());
                    MemberEntity memberEntity = memberDao.selectById(holdOrderEntity.getMemberId());
                    memberWalletContractDao.increaseWalletContractBalanceById(available.negate(), available.negate(), null, walletContractEntity.getId());
                    BigDecimal newBondAmount = holdOrderEntity.getBondAmount().subtract(lessAmount);
@@ -643,4 +646,37 @@
        }
        producer.sendPriceOperate(JSONObject.toJSONString(model));
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void calHoldFeeAmountForBondAmount() {
        List<ContractHoldOrderEntity> list = contractHoldOrderDao.selectAllHoldOrder();
        PlatformTradeSettingEntity tradeSettingEntity = cacheSettingUtils.getTradeSetting();
        if (CollUtil.isNotEmpty(list)) {
            for (ContractHoldOrderEntity holdOrderEntity : list) {
                BigDecimal holdAmount = holdOrderEntity.getHoldAmount();
                if (holdAmount == null) {
                    holdAmount = BigDecimal.ZERO;
                }
                BigDecimal thisTimeHold = holdOrderEntity.getBondAmount().multiply(tradeSettingEntity.getDoingRatio());
                log.info("订单编号:{}, 持仓费:{}", holdOrderEntity.getOrderNo(), thisTimeHold);
                MemberEntity memberEntity = memberDao.selectById(holdOrderEntity.getMemberId());
                BigDecimal subBond = holdOrderEntity.getBondAmount().subtract(thisTimeHold);
                BigDecimal newForcePrice = CalculateUtil.getForceSetPrice(subBond.subtract(holdOrderEntity.getOpeningFeeAmount()), holdOrderEntity.getOpeningPrice(), holdOrderEntity.getSymbolCnt(), holdOrderEntity.getSymbolSku(), holdOrderEntity.getOpeningType(), memberEntity);
                holdAmount = holdAmount.add(thisTimeHold);
                holdOrderEntity.setBondAmount(subBond);
                holdOrderEntity.setHoldAmount(holdAmount);
                holdOrderEntity.setForceClosingPrice(newForcePrice);
                holdOrderEntity.setOperateNo(holdOrderEntity.getOperateNo() + 1);
                contractHoldOrderDao.updateById(holdOrderEntity);
                // 发送爆仓消息
                sendOrderBombMsg(holdOrderEntity.getId(), holdOrderEntity.getOpeningType(), newForcePrice, holdOrderEntity.getSymbol(), holdOrderEntity.getOperateNo());
            }
        }
    }
}