Helius
2020-08-13 a7b8fd2b18e652730cd4e48da61adee89564b4b6
merge master
4 files added
8 files modified
248 ■■■■■ changed files
src/main/java/com/xcong/excoin/configurations/security/WebSecurityConfig.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java 20 ●●●● 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/controller/MemberController.java 14 ●●●●● 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/MemberService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java 37 ●●●●● 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/configurations/security/WebSecurityConfig.java
@@ -49,7 +49,7 @@
                .antMatchers("/api/member/getMemberAccountInfo").permitAll()
                .antMatchers("/api/member/memberForgetPwd").permitAll()
                .antMatchers("/api/member/memberCoinInfoList").permitAll()
                .antMatchers("/api/member/getAppVersionInfo").permitAll()
                .antMatchers("/api/member/getPcVersionInfo").permitAll()
                .antMatchers("/api/orderCoin/searchSymbolResultList").permitAll()
                .antMatchers("/api/orderCoin/findCollect").permitAll()
                .antMatchers("/api/orderCoin/findCollect").permitAll()
src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java
@@ -29,11 +29,9 @@
import com.xcong.excoin.modules.documentary.entity.FollowTraderInfoEntity;
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;
@@ -88,6 +86,8 @@
    @Resource
    private MemberDao memberDao;
    @Resource
    private MemberSettingDao memberSettingDao;
    @Resource
    private FollowTraderInfoDao followTraderInfoDao;
@@ -133,12 +133,12 @@
        BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(submitOrderDto.getSymbol())));
        MemberWalletContractEntity walletContract = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeEnum.USDT.name());
        PlatformTradeSettingEntity tradeSettingEntity = cacheSettingUtils.getTradeSetting();
        MemberSettingEntity memberSetting = memberSettingDao.selectMemberSettingByMemberId(memberEntity.getId());
        BigDecimal spread = memberSetting.getSpread();
        // 规格
        BigDecimal lotNumber = cacheSettingUtils.getSymbolSku(submitOrderDto.getSymbol());
        MemberEntity member = memberDao.selectById(memberEntity.getId());
        // 划点
        BigDecimal spread = member.getSpread();
        // 开仓价
        BigDecimal openingPrice = CalculateUtil.getOpeningPrice(submitOrderDto.getOrderType(), newPrice, spread);
@@ -288,9 +288,9 @@
        // 规格
        BigDecimal lotNumber = cacheSettingUtils.getSymbolSku(submitOrderDto.getSymbol());
        MemberEntity member = memberDao.selectById(memberEntity.getId());
        // 划点
        BigDecimal spread = member.getSpread();
        MemberSettingEntity memberSetting = memberSettingDao.selectMemberSettingByMemberId(memberEntity.getId());
        BigDecimal spread = memberSetting.getSpread();
        // 开仓价
        BigDecimal openingPrice = CalculateUtil.getOpeningPrice(submitOrderDto.getOrderType(), newPrice, spread);
        log.info("开仓价:{}", openingPrice);
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
@@ -23,9 +23,11 @@
import com.xcong.excoin.modules.documentary.entity.FollowTraderProfitDetailEntity;
import com.xcong.excoin.modules.documentary.service.FollowOrderOperationService;
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.*;
@@ -69,6 +71,8 @@
    @Resource
    private RedisUtils redisUtils;
    @Resource
    private MemberSettingDao memberSettingDao;
    @Resource
    private FollowFollowerOrderRelationDao followFollowerOrderRelationDao;
@@ -129,16 +133,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/controller/MemberController.java
@@ -61,13 +61,25 @@
    /**
     *  获取当前版本号
     */
    @ApiOperation(value="获取当前版本号", notes="获取当前版本号")
    @ApiOperation(value="APP端获取当前版本号", notes="获取当前版本号")
    @ApiResponses({@ApiResponse( code = 200, message = "success", response = AppVersionListVo.class)})
    @GetMapping(value = "/getAppVersionInfo")
    public Result  getAppVersionInfo() {
        return memberService.getAppVersionInfo();
    }
    
    /**
     *  获取当前版本号
     */
    @ApiOperation(value="PC端获取当前版本号", notes="获取当前版本号")
    @ApiResponses({@ApiResponse( code = 200, message = "success", response = AppVersionListVo.class)})
    @GetMapping(value = "/getPcVersionInfo")
    public Result  getPcVersionInfo() {
        return memberService.getPcVersionInfo();
    }
    /**
     *  获取我的信息
     * @return
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/MemberService.java
@@ -88,5 +88,7 @@
    public Result getAppVersionInfo();
    public Result getPcVersionInfo();
}
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,10 +156,14 @@
        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);
@@ -956,6 +962,31 @@
    @Override
    public Result getAppVersionInfo() {
        MemberEntity memberEntity = LoginUserUtils.getAppLoginUser();
        Map<String, Object> columnMap = new HashMap<>();
        List<AppVersionEntity> selectByMap = appVersionDao.selectByMap(columnMap);
        List<Object> arrayList = new ArrayList<>();
        if (CollUtil.isNotEmpty(selectByMap)) {
            for (AppVersionEntity appVersionEntity : selectByMap) {
                AppVersionVo appVersionVo = new AppVersionVo();
                if ("37059551".equals(memberEntity.getInviteId())) {
                    appVersionVo.setAddress("www.baidu.com");
                    appVersionVo.setType(appVersionEntity.getType());
                    appVersionVo.setVersion(appVersionEntity.getVersion());
                } else {
                    appVersionVo.setAddress(appVersionEntity.getAddress());
                    appVersionVo.setType(appVersionEntity.getType());
                    appVersionVo.setVersion(appVersionEntity.getVersion());
                }
                arrayList.add(appVersionVo);
            }
        }
        return Result.ok(arrayList);
    }
    @Override
    public Result getPcVersionInfo() {
    Map<String, Object> columnMap = new HashMap<>();
    List<AppVersionEntity> selectByMap = appVersionDao.selectByMap(columnMap);
    List<Object> arrayList = new ArrayList<>();
src/main/java/com/xcong/excoin/utils/CalculateUtil.java
@@ -6,7 +6,9 @@
import com.xcong.excoin.modules.contract.dao.ContractHoldOrderDao;
import com.xcong.excoin.modules.contract.entity.ContractHoldOrderEntity;
import com.xcong.excoin.modules.member.dao.MemberWalletContractDao;
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;
@@ -30,21 +32,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);
    }
}