Helius
2020-08-13 1356cf874d0fac038269d4277afea86d285dd623
add table member_setting and change some column to member_setting
5 files modified
4 files added
198 ■■■■■ changed files
src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java 13 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java 11 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java 10 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/member/dao/MemberSettingDao.java 19 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/member/entity/MemberSettingEntity.java 34 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java 12 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/utils/CalculateUtil.java 10 ●●●● patch | view | raw | blame | history
src/main/resources/mapper/member/MemberSettingDao.xml 38 ●●●●● patch | view | raw | blame | history
src/test/java/com/xcong/excoin/MemberSettingTest.java 51 ●●●●● patch | view | raw | blame | history
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());
src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java
@@ -12,8 +12,10 @@
import com.xcong.excoin.modules.contract.service.ContractHoldOrderService;
import com.xcong.excoin.modules.contract.service.ContractOrderService;
import com.xcong.excoin.modules.member.dao.AgentReturnDao;
import com.xcong.excoin.modules.member.dao.MemberSettingDao;
import com.xcong.excoin.modules.member.entity.AgentReturnEntity;
import com.xcong.excoin.modules.member.entity.MemberEntity;
import com.xcong.excoin.modules.member.entity.MemberSettingEntity;
import com.xcong.excoin.modules.member.entity.MemberWalletContractEntity;
import com.xcong.excoin.modules.member.parameter.vo.NeedMoneyMemberVo;
import com.xcong.excoin.modules.member.service.MemberService;
@@ -67,6 +69,8 @@
    @Resource
    private MemberAccountFlowEntityDao memberAccountFlowEntityDao;
    @Resource
    private MemberSettingDao memberSettingDao;
    public void dealOrderFromMq(List<OrderModel> list, Integer type) {
@@ -172,8 +176,9 @@
                                .multiply(new BigDecimal(currentFlat))
                                .multiply(symbolSku).setScale(8, BigDecimal.ROUND_DOWN);
                        MemberEntity memberEntity = memberService.getById(memberId);
                        MemberSettingEntity memberSettingEntity = memberSettingDao.selectMemberSettingByMemberId(memberId);
                        log.info("划点前:{}", profitLossPrice);
                        profitLossPrice = profitLossPrice.multiply(BigDecimal.ONE.subtract(memberEntity.getClosingSpread().divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_DOWN)));
                        profitLossPrice = profitLossPrice.multiply(BigDecimal.ONE.subtract(memberSettingEntity.getClosingSpread().divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_DOWN)));
                        log.info("划点后:{}", profitLossPrice);
                        if (memberEntity.getIsProfit() == 1) {
                            PlatformTradeSettingEntity tradeSetting = cacheSettingUtils.getTradeSetting();
@@ -264,9 +269,9 @@
                                .multiply(new BigDecimal(currentFlat + ""))
                                .multiply(symbolSku).setScale(8, BigDecimal.ROUND_DOWN);
                        MemberEntity memberEntity = memberService.getById(memberId);
                        MemberSettingEntity memberSettingEntity = memberSettingDao.selectMemberSettingByMemberId(memberId);
                        log.info("划点前:{}", profitLossPrice);
                        profitLossPrice = profitLossPrice.multiply(BigDecimal.ONE.subtract(memberEntity.getClosingSpread().divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_DOWN)));
                        profitLossPrice = profitLossPrice.multiply(BigDecimal.ONE.subtract(memberSettingEntity.getClosingSpread().divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_DOWN)));
                        log.info("划点后:{}", profitLossPrice);
                        if (memberEntity.getIsProfit() == 1) {
                            PlatformTradeSettingEntity tradeSetting = cacheSettingUtils.getTradeSetting();
src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java
@@ -11,9 +11,11 @@
import com.xcong.excoin.modules.contract.mapper.ContractHoldOrderEntityMapper;
import com.xcong.excoin.modules.contract.service.RabbitOrderService;
import com.xcong.excoin.modules.member.dao.MemberDao;
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.MemberSettingEntity;
import com.xcong.excoin.modules.member.entity.MemberWalletContractEntity;
import com.xcong.excoin.modules.platform.entity.PlatformTradeSettingEntity;
import com.xcong.excoin.utils.*;
@@ -57,6 +59,8 @@
    @Resource
    private RedisUtils redisUtils;
    @Resource
    private MemberSettingDao memberSettingDao;
    @Transactional(rollbackFor = Exception.class)
    @Override
@@ -93,16 +97,18 @@
            BigDecimal profitOrLoss = BigDecimal.ZERO;
            Integer orderType = null;
            Integer closingType = null;
            MemberSettingEntity memberSettingEntity = memberSettingDao.selectMemberSettingByMemberId(memberEntity.getId());
            // 开多
            if (ContractHoldOrderEntity.OPENING_TYPE_MORE == holdOrderEntity.getOpeningType()) {
                newPrice = newPrice.multiply(BigDecimal.ONE.subtract(memberEntity.getClosingSpread().divide(BigDecimal.valueOf(10000), 4, BigDecimal.ROUND_DOWN)));
                newPrice = newPrice.multiply(BigDecimal.ONE.subtract(memberSettingEntity.getClosingSpread().divide(BigDecimal.valueOf(10000), 4, BigDecimal.ROUND_DOWN)));
                // (最新价-开仓价)*规格*张数
                profitOrLoss = newPrice.subtract(holdOrderEntity.getOpeningPrice()).multiply(lotNumber).multiply(new BigDecimal(holdOrderEntity.getSymbolCnt()));
                orderType = ContractOrderEntity.ORDER_TYPE_CLOSE_MORE;
                closingType = OrderClosingTypeEnum.CLOSE_MORE.getValue();
                // 开空
            } else {
                newPrice = newPrice.multiply(BigDecimal.ONE.add(memberEntity.getClosingSpread().divide(BigDecimal.valueOf(10000), 4, BigDecimal.ROUND_DOWN)));
                newPrice = newPrice.multiply(BigDecimal.ONE.add(memberSettingEntity.getClosingSpread().divide(BigDecimal.valueOf(10000), 4, BigDecimal.ROUND_DOWN)));
                // (开仓价-最新价)*规格*张数
                profitOrLoss = holdOrderEntity.getOpeningPrice().subtract(newPrice).multiply(lotNumber).multiply(new BigDecimal(holdOrderEntity.getSymbolCnt()));
                orderType = ContractOrderEntity.ORDER_TYPE_CLOSE_LESS;
src/main/java/com/xcong/excoin/modules/member/dao/MemberSettingDao.java
New file
@@ -0,0 +1,19 @@
package com.xcong.excoin.modules.member.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xcong.excoin.modules.member.entity.MemberSettingEntity;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * @author wzy
 * @date 2020-08-13
 **/
public interface MemberSettingDao extends BaseMapper<MemberSettingEntity> {
    public MemberSettingEntity selectMemberSettingByMemberId(@Param("memberId") Long memberId);
    public int batchInsert(@Param("list") List<MemberSettingEntity> list);
}
src/main/java/com/xcong/excoin/modules/member/entity/MemberSettingEntity.java
New file
@@ -0,0 +1,34 @@
package com.xcong.excoin.modules.member.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.xcong.excoin.common.system.base.BaseEntity;
import lombok.Data;
import java.math.BigDecimal;
/**
 * @author wzy
 * @date 2020-08-13
 **/
@Data
@TableName("member_setting")
public class MemberSettingEntity extends BaseEntity {
    private Long memberId;
    /**
     * 滑点
     */
    private BigDecimal spread;
    /**
     * 平仓点数
     */
    private BigDecimal closingSpread;
    /**
     * 强平系数
     */
    private BigDecimal forceParam;
}
src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java
@@ -106,6 +106,8 @@
    @Resource
    AppVersionDao appVersionDao;
    @Resource
    private MemberSettingDao memberSettingDao;
    @Resource
    private MemberWalletContractSimulateDao memberWalletContractSimulateDao;
@@ -154,11 +156,15 @@
        member.setCertifyStatus(MemberEntity.CERTIFY_STATUS_UN_SUBMIT);
        member.setIsForce(1);
        member.setIsProfit(0);
        member.setSpread(BigDecimal.ONE);
        member.setClosingSpread(BigDecimal.ONE);
        member.setForceParam(BigDecimal.valueOf(0.0015));
        memberDao.insert(member);
        MemberSettingEntity memberSettingEntity = new MemberSettingEntity();
        memberSettingEntity.setSpread(BigDecimal.ONE);
        memberSettingEntity.setClosingSpread(BigDecimal.ONE);
        memberSettingEntity.setForceParam(BigDecimal.valueOf(0.0015));
        memberSettingEntity.setMemberId(member.getId());
        memberSettingDao.insert(memberSettingEntity);
        String inviteId = ShareCodeUtil.toSerialCode(member.getId());
        member.setInviteId(inviteId);
src/main/java/com/xcong/excoin/utils/CalculateUtil.java
@@ -1,7 +1,9 @@
package com.xcong.excoin.utils;
import com.xcong.excoin.modules.member.dao.MemberSettingDao;
import com.xcong.excoin.modules.member.entity.MemberEntity;
import com.xcong.excoin.modules.member.entity.MemberSettingEntity;
import com.xcong.excoin.modules.platform.entity.PlatformTradeSettingEntity;
import lombok.extern.slf4j.Slf4j;
@@ -25,21 +27,23 @@
     */
    public static BigDecimal getForceSetPrice(BigDecimal bondAmount, BigDecimal openPrice, int symbolSkuNumber, BigDecimal lotNumber,
                                              int type, MemberEntity member) {
        CacheSettingUtils cacheSettingUtils = SpringContextHolder.getBean(CacheSettingUtils.class);
        MemberSettingDao memberSettingDao = SpringContextHolder.getBean(MemberSettingDao.class);
        BigDecimal forcePrice = BigDecimal.ZERO;
        BigDecimal money = bondAmount.divide(new BigDecimal(symbolSkuNumber).multiply(lotNumber), 8, BigDecimal.ROUND_DOWN);
        //卖空
        if (type == 2) {
            forcePrice = money.add(openPrice);
            if (member.getIsForce() == 1) {
                MemberSettingEntity memberSetting = memberSettingDao.selectMemberSettingByMemberId(member.getId());
                //预估强平价 = 预估强平价-预估强平价*系数
                forcePrice = forcePrice.subtract(forcePrice.multiply(member.getForceParam() == null ? BigDecimal.ZERO : member.getForceParam()));
                forcePrice = forcePrice.subtract(forcePrice.multiply(memberSetting.getForceParam() == null ? BigDecimal.ZERO : memberSetting.getForceParam()));
            }
        } else {//开多
            forcePrice = openPrice.subtract(money);
            if (member.getIsForce() == 1) {
                MemberSettingEntity memberSetting = memberSettingDao.selectMemberSettingByMemberId(member.getId());
                //预估强平价 = 预估强平价-预估强平价*系数
                forcePrice = forcePrice.add(forcePrice.multiply(member.getForceParam() == null ? BigDecimal.ZERO : member.getForceParam()));
                forcePrice = forcePrice.add(forcePrice.multiply(memberSetting.getForceParam() == null ? BigDecimal.ZERO : memberSetting.getForceParam()));
            }
        }
        if (forcePrice.compareTo(BigDecimal.ZERO) < 0) {
src/main/resources/mapper/member/MemberSettingDao.xml
New file
@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xcong.excoin.modules.member.dao.MemberSettingDao">
    <select id="selectMemberSettingByMemberId" resultType="com.xcong.excoin.modules.member.entity.MemberSettingEntity">
        select * from member_setting where member_id=#{memberId}
    </select>
    <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id">
        insert into member_setting (
            create_by,
            create_time,
            update_by,
            update_time,
            version,
            id,
            member_id,
            force_param,
            spread,
            closing_spread
        ) values
        <foreach collection="list" item="item" index="index" separator=",">
            (
                #{item.createBy},
                now(),
                #{item.updateBy},
                now(),
                #{item.version},
                #{item.id},
                #{item.memberId},
                #{item.forceParam},
                #{item.spread},
                #{item.closingSpread}
            )
        </foreach>
    </insert>
</mapper>
src/test/java/com/xcong/excoin/MemberSettingTest.java
New file
@@ -0,0 +1,51 @@
package com.xcong.excoin;
import com.xcong.excoin.modules.member.dao.MemberDao;
import com.xcong.excoin.modules.member.dao.MemberSettingDao;
import com.xcong.excoin.modules.member.entity.MemberEntity;
import com.xcong.excoin.modules.member.entity.MemberSettingEntity;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @author wzy
 * @date 2020-08-13
 **/
@Slf4j
@SpringBootTest
public class MemberSettingTest {
    @Resource
    private MemberDao memberDao;
    @Resource
    private MemberSettingDao memberSettingDao;
    @Test
    public void settingDateTest() {
        Map<String, Object> map = new HashMap<>();
        List<MemberEntity> memberEntities = memberDao.selectByMap(map);
        log.info("--->{}", memberEntities.size());
        List<MemberSettingEntity> list = new ArrayList<>();
        for (MemberEntity memberEntity : memberEntities) {
            MemberSettingEntity memberSettingEntity = new MemberSettingEntity();
            memberSettingEntity.setCreateBy("system");
            memberSettingEntity.setUpdateBy("system");
            memberSettingEntity.setMemberId(memberEntity.getId());
            memberSettingEntity.setClosingSpread(memberEntity.getClosingSpread());
            memberSettingEntity.setForceParam(memberEntity.getForceParam());
            memberSettingEntity.setSpread(memberEntity.getSpread());
            list.add(memberSettingEntity);
        }
        memberSettingDao.batchInsert(list);
    }
}