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