From 1356cf874d0fac038269d4277afea86d285dd623 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Thu, 13 Aug 2020 10:53:36 +0800
Subject: [PATCH] add table member_setting and change some column to member_setting

---
 src/main/java/com/xcong/excoin/modules/member/dao/MemberSettingDao.java                        |   19 ++++
 src/main/java/com/xcong/excoin/modules/member/entity/MemberSettingEntity.java                  |   34 ++++++++
 src/test/java/com/xcong/excoin/MemberSettingTest.java                                          |   51 ++++++++++++
 src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java       |   10 ++
 src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java |   13 +-
 src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java    |   11 ++
 src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java              |   12 ++
 src/main/resources/mapper/member/MemberSettingDao.xml                                          |   38 +++++++++
 src/main/java/com/xcong/excoin/utils/CalculateUtil.java                                        |   10 +
 9 files changed, 180 insertions(+), 18 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java b/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java
index 0fac134..6e4a42d 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java
+++ b/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());
 
diff --git a/src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java b/src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java
index c86ac4f..93b135e 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java
+++ b/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();
diff --git a/src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java b/src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java
index 2a2aac9..1f4e3ed 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java
+++ b/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;
diff --git a/src/main/java/com/xcong/excoin/modules/member/dao/MemberSettingDao.java b/src/main/java/com/xcong/excoin/modules/member/dao/MemberSettingDao.java
new file mode 100644
index 0000000..620a813
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/member/dao/MemberSettingDao.java
@@ -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);
+
+}
diff --git a/src/main/java/com/xcong/excoin/modules/member/entity/MemberSettingEntity.java b/src/main/java/com/xcong/excoin/modules/member/entity/MemberSettingEntity.java
new file mode 100644
index 0000000..36ea5a7
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/member/entity/MemberSettingEntity.java
@@ -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;
+
+}
diff --git a/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java b/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java
index 4e52040..8dd0b3a 100644
--- a/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java
+++ b/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);
 
diff --git a/src/main/java/com/xcong/excoin/utils/CalculateUtil.java b/src/main/java/com/xcong/excoin/utils/CalculateUtil.java
index 2e0e201..692d02b 100644
--- a/src/main/java/com/xcong/excoin/utils/CalculateUtil.java
+++ b/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) {
diff --git a/src/main/resources/mapper/member/MemberSettingDao.xml b/src/main/resources/mapper/member/MemberSettingDao.xml
new file mode 100644
index 0000000..2a56bce
--- /dev/null
+++ b/src/main/resources/mapper/member/MemberSettingDao.xml
@@ -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>
\ No newline at end of file
diff --git a/src/test/java/com/xcong/excoin/MemberSettingTest.java b/src/test/java/com/xcong/excoin/MemberSettingTest.java
new file mode 100644
index 0000000..68461c2
--- /dev/null
+++ b/src/test/java/com/xcong/excoin/MemberSettingTest.java
@@ -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);
+    }
+}

--
Gitblit v1.9.1