From 4d08b2cd312f837a0ea02641d973acd234567797 Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Thu, 28 May 2020 15:32:39 +0800 Subject: [PATCH] modify --- src/main/resources/mapper/platform/TradeSettingDao.xml | 10 +- src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java | 48 +++++++++++ src/main/java/com/xcong/excoin/utils/CoinTypeConvert.java | 50 ++++++++++++ src/main/java/com/xcong/excoin/modules/contract/parameter/dto/SubmitEntrustDto.java | 4 + src/main/java/com/xcong/excoin/modules/platform/entity/PlatformSymbolsSkuEntity.java | 4 src/main/java/com/xcong/excoin/modules/platform/dao/TradeSettingDao.java | 6 src/main/java/com/xcong/excoin/utils/CacheSettingUtils.java | 82 ++++++++++++++++++++ 7 files changed, 192 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/xcong/excoin/modules/contract/parameter/dto/SubmitEntrustDto.java b/src/main/java/com/xcong/excoin/modules/contract/parameter/dto/SubmitEntrustDto.java index 3d13c94..bf588cb 100644 --- a/src/main/java/com/xcong/excoin/modules/contract/parameter/dto/SubmitEntrustDto.java +++ b/src/main/java/com/xcong/excoin/modules/contract/parameter/dto/SubmitEntrustDto.java @@ -35,4 +35,8 @@ @ApiModelProperty(value = "币种数量", example = "1") private int symbolCnt; + @NotNull + @ApiModelProperty(value = "杠杆倍率", example = "100") + private int leverRatio; + } diff --git a/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java b/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java index c2e5bef..2f55f16 100644 --- a/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java +++ b/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java @@ -7,11 +7,17 @@ import com.xcong.excoin.modules.contract.entity.ContractEntrustOrderEntity; import com.xcong.excoin.modules.contract.parameter.dto.SubmitEntrustDto; import com.xcong.excoin.modules.contract.service.ContractEntrustOrderService; +import com.xcong.excoin.modules.member.dao.MemberWalletContractDao; import com.xcong.excoin.modules.member.entity.MemberEntity; +import com.xcong.excoin.modules.member.entity.MemberWalletContractEntity; +import com.xcong.excoin.utils.CacheSettingUtils; +import com.xcong.excoin.utils.CoinTypeConvert; +import com.xcong.excoin.utils.RedisUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.math.BigDecimal; /** * @author wzy @@ -24,19 +30,57 @@ @Resource private ContractEntrustOrderDao contractEntrustOrderDao; + @Resource + private MemberWalletContractDao memberWalletContractDao; + + @Resource + private RedisUtils redisUtils; + + @Resource + private CacheSettingUtils cacheSettingUtils; @Override public Result addContractEntrustOrder(SubmitEntrustDto submitEntrustDto) { MemberEntity memberEntity = LoginUserUtils.getAppLoginUser(); + // 获取最新价 + BigDecimal newPirce = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(submitEntrustDto.getSymbol()))); + + // 委托开仓 if (submitEntrustDto.getEntrustType() == ContractEntrustOrderEntity.ENTRUST_TYPE_OPEN_MORE || submitEntrustDto.getEntrustType() == ContractEntrustOrderEntity.ENTRUST_TYPE_OPEN_LESS) { + // 开多委托价不能大于当前价 + if (submitEntrustDto.getEntrustType() == ContractEntrustOrderEntity.ENTRUST_TYPE_OPEN_MORE) { + if (submitEntrustDto.getEntrustPrice().compareTo(newPirce) > -1) { + return Result.fail("委托价不能大于当前价"); + } + } + + // 开空委托价不能小于当前价 + if (submitEntrustDto.getEntrustType() == ContractEntrustOrderEntity.ENTRUST_TYPE_OPEN_LESS) { + if (submitEntrustDto.getEntrustPrice().compareTo(newPirce) < 1) { + return Result.fail("委托价不能小于当前价"); + } + } + + MemberWalletContractEntity walletContract = memberWalletContractDao.selectById(memberEntity.getId()); + // 委托总额 + BigDecimal entrustTotalAmount = submitEntrustDto.getEntrustPrice().multiply(BigDecimal.valueOf(submitEntrustDto.getSymbolCnt())); + + if (entrustTotalAmount.compareTo(walletContract.getAvailableBalance()) > -1) { + return Result.fail("可用余额不足"); + } + + BigDecimal lotNumber = cacheSettingUtils.getSymbolSku(submitEntrustDto.getSymbol()); + + + } - // 委托平仓 + // 委托平仓 (全仓模式) if (submitEntrustDto.getEntrustType() == ContractEntrustOrderEntity.ENTRUST_TYPE_CLOSE_MORE || submitEntrustDto.getEntrustType() == ContractEntrustOrderEntity.ENTRUST_TYPE_CLOSE_LESS) { - + return Result.fail("功能暂未开放,敬请期待"); } return null; } diff --git a/src/main/java/com/xcong/excoin/modules/platform/dao/TradeSettingDao.java b/src/main/java/com/xcong/excoin/modules/platform/dao/TradeSettingDao.java index c633b28..aec081a 100644 --- a/src/main/java/com/xcong/excoin/modules/platform/dao/TradeSettingDao.java +++ b/src/main/java/com/xcong/excoin/modules/platform/dao/TradeSettingDao.java @@ -2,20 +2,20 @@ import java.util.List; +import com.xcong.excoin.modules.platform.entity.PlatformSymbolsSkuEntity; import org.apache.ibatis.annotations.Param; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.xcong.excoin.modules.platform.entity.PlatformLeverageSettingEntity; -import com.xcong.excoin.modules.platform.entity.PlatformSymbolsSku; import com.xcong.excoin.modules.platform.entity.PlatformTradeSettingEntity; public interface TradeSettingDao extends BaseMapper<PlatformTradeSettingEntity> { PlatformTradeSettingEntity findTradeSetting(); - PlatformSymbolsSku findSymbolSkubySymbol(@Param("symbol") String symbol); + PlatformSymbolsSkuEntity findSymbolSkubySymbol(@Param("symbol") String symbol); - List<PlatformSymbolsSku> findAllSymbolSkubySymbol(); + List<PlatformSymbolsSkuEntity> findAllSymbolSkubySymbol(); List<PlatformLeverageSettingEntity> findLeverageSetting(); diff --git a/src/main/java/com/xcong/excoin/modules/platform/entity/PlatformSymbolsSku.java b/src/main/java/com/xcong/excoin/modules/platform/entity/PlatformSymbolsSkuEntity.java similarity index 85% rename from src/main/java/com/xcong/excoin/modules/platform/entity/PlatformSymbolsSku.java rename to src/main/java/com/xcong/excoin/modules/platform/entity/PlatformSymbolsSkuEntity.java index a94171d..ec1f804 100644 --- a/src/main/java/com/xcong/excoin/modules/platform/entity/PlatformSymbolsSku.java +++ b/src/main/java/com/xcong/excoin/modules/platform/entity/PlatformSymbolsSkuEntity.java @@ -13,7 +13,7 @@ */ @Data @TableName("platform_symbols_sku") -public class PlatformSymbolsSku implements Serializable { +public class PlatformSymbolsSkuEntity implements Serializable { /** * */ @@ -27,6 +27,6 @@ /** * 规格 */ - private String sku; + private String lotnumber; } diff --git a/src/main/java/com/xcong/excoin/utils/CacheSettingUtils.java b/src/main/java/com/xcong/excoin/utils/CacheSettingUtils.java new file mode 100644 index 0000000..9145008 --- /dev/null +++ b/src/main/java/com/xcong/excoin/utils/CacheSettingUtils.java @@ -0,0 +1,82 @@ +package com.xcong.excoin.utils; + +import cn.hutool.core.bean.BeanUtil; +import com.xcong.excoin.modules.platform.dao.TradeSettingDao; +import com.xcong.excoin.modules.platform.entity.PlatformSymbolsSkuEntity; +import com.xcong.excoin.modules.platform.entity.PlatformTradeSettingEntity; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author wzy + * @date 2020-05-28 + **/ +@Component +public class CacheSettingUtils { + + + /** + * 交易设置缓存Key + */ + private final static String TRADE_SETTING_KEY = "trade_setting_key"; + + /** + * 币种规格缓存key + */ + private final static String TRADE_SYMBOL_SKU_KEY = "trade_symbol_sku_key"; + + @Resource + private TradeSettingDao tradeSettingDao; + + @Resource + private RedisUtils redisUtils; + + + /** + * 获取币种规格 + * + * @param symbol + * @return + */ + public BigDecimal getSymbolSku(String symbol) { + Object hget = redisUtils.hget(TRADE_SYMBOL_SKU_KEY, symbol); + if (hget == null) { + List<PlatformSymbolsSkuEntity> symbolSkubySymbol = tradeSettingDao.findAllSymbolSkubySymbol(); + Map<String, Object> map = new HashMap<String, Object>(); + if (CollectionUtils.isNotEmpty(symbolSkubySymbol)) { + for (PlatformSymbolsSkuEntity symbolSku : symbolSkubySymbol) { + map.put(symbolSku.getName(), symbolSku.getLotnumber()); + } + // 存入redis + redisUtils.hmset(TRADE_SYMBOL_SKU_KEY, map); + } + + hget = redisUtils.hget(TRADE_SYMBOL_SKU_KEY, symbol); + } + + return new BigDecimal(hget.toString()); + } + + /** + * 获取交易设置缓存 + * + * @return + */ + public PlatformTradeSettingEntity getTradeSetting() { + Map<Object, Object> hmget = redisUtils.hmget(TRADE_SETTING_KEY); + + if (hmget == null || hmget.size() == 0) { + PlatformTradeSettingEntity tradeSetting = tradeSettingDao.findTradeSetting(); + redisUtils.hmset(TRADE_SETTING_KEY, BeanUtil.beanToMap(tradeSetting)); + return tradeSetting; + } + return BeanUtil.mapToBean(hmget, PlatformTradeSettingEntity.class, true); + } + +} diff --git a/src/main/java/com/xcong/excoin/utils/CoinTypeConvert.java b/src/main/java/com/xcong/excoin/utils/CoinTypeConvert.java new file mode 100644 index 0000000..fc2dc6c --- /dev/null +++ b/src/main/java/com/xcong/excoin/utils/CoinTypeConvert.java @@ -0,0 +1,50 @@ +package com.xcong.excoin.utils; + +/** + * @author wzy + * @date 2020-05-28 + **/ +public class CoinTypeConvert { + + public static String convert(String symbol) { + switch (symbol) { + case "btcusdt": + return "BTC/USDT"; + case "ethusdt": + return "ETH/USDT"; + case "xrpusdt": + return "XRP/USDT"; + case "ltcusdt": + return "LTC/USDT"; + case "bchusdt": + return "BCH/USDT"; + case "eosusdt": + return "EOS/USDT"; + case "etcusdt": + return "ETC/USDT"; + default: + return null; + } + } + + public static String convertToKey(String symbol) { + switch (symbol) { + case "BTC/USDT": + return "BTC_NEW_PRICE"; + case "ETH/USDT": + return "ETH_NEW_PRICE"; + case "XRP/USDT": + return "XRP_NEW_PRICE"; + case "LTC/USDT": + return "LTC_NEW_PRICE"; + case "BCH/USDT": + return "BCH_NEW_PRICE"; + case "EOS/USDT": + return "EOS_NEW_PRICE"; + case "ETC/USDT": + return "ETC_NEW_PRICE"; + default: + return null; + } + } +} diff --git a/src/main/resources/mapper/platform/TradeSettingDao.xml b/src/main/resources/mapper/platform/TradeSettingDao.xml index e0e56ba..7537a80 100644 --- a/src/main/resources/mapper/platform/TradeSettingDao.xml +++ b/src/main/resources/mapper/platform/TradeSettingDao.xml @@ -1,12 +1,12 @@ <?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.coin.dao.platform.TradeSettingDao"> +<mapper namespace="com.xcong.excoin.modules.platform.dao.TradeSettingDao"> - <select id="findTradeSetting" resultType="com.xcong.excoin.modules.coin.entity.PlatformTradeSettingEntity"> + <select id="findTradeSetting" resultType="com.xcong.excoin.modules.platform.entity.PlatformTradeSettingEntity"> SELECT * FROM platform_trade_setting </select> - <select id="findSymbolSkubySymbol" resultType="com.xcong.excoin.modules.coin.entity.PlatformSymbolsSku"> + <select id="findSymbolSkubySymbol" resultType="com.xcong.excoin.modules.platform.entity.PlatformSymbolsSkuEntity"> select * from platform_symbols_sku <where> <if test="symbol!=null and symbol!=''"> @@ -15,11 +15,11 @@ </where> </select> - <select id="findAllSymbolSkubySymbol" resultType="com.xcong.excoin.modules.coin.entity.PlatformSymbolsSku"> + <select id="findAllSymbolSkubySymbol" resultType="com.xcong.excoin.modules.platform.entity.PlatformSymbolsSkuEntity"> select * from platform_symbols_sku </select> - <select id="findLeverageSetting" resultType="com.xcong.excoin.modules.coin.entity.PlatformLeverageSettingEntity"> + <select id="findLeverageSetting" resultType="com.xcong.excoin.modules.platform.entity.PlatformLeverageSettingEntity"> select * from platform_leverage_setting order by value ASC </select> -- Gitblit v1.9.1