From cf909807ff63a31954ee8dbe5d0eda010923e096 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Mon, 25 May 2020 10:29:48 +0800 Subject: [PATCH] 20200525 代码提交 --- src/main/java/com/xcong/excoin/modules/coin/service/impl/OrderCoinServiceImpl.java | 287 ++++++++++++++++++++ src/main/java/com/xcong/excoin/modules/coin/dao/OrderCoinDao.java | 8 src/main/java/com/xcong/excoin/modules/coin/entity/PlatformSymbolsSku.java | 32 ++ src/main/java/com/xcong/excoin/modules/coin/dao/MemberSelectSymbolsDao.java | 14 + src/main/java/com/xcong/excoin/modules/coin/dao/OrderCoinDealDao.java | 8 src/main/java/com/xcong/excoin/modules/coin/parameter/dto/InOrderCoinDto.java | 27 + src/main/java/com/xcong/excoin/modules/member/entity/MemberSelectSymbolsEntity.java | 29 ++ src/main/java/com/xcong/excoin/modules/coin/controller/CoinController.java | 7 src/main/resources/mapper/member/MemberSelectSymbolsDao.xml | 9 src/main/java/com/xcong/excoin/modules/coin/entity/PlatformTradeSettingEntity.java | 59 ++++ src/main/java/com/xcong/excoin/modules/coin/entity/OrderCoinsDealEntity.java | 19 + src/main/java/com/xcong/excoin/modules/coin/parameter/dto/SubmitSalesWalletCoinOrderDto.java | 32 ++ src/main/resources/mapper/platform/TradeSettingDao.xml | 35 ++ src/main/java/com/xcong/excoin/modules/coin/entity/PlatformLeverageSettingEntity.java | 41 ++ src/main/java/com/xcong/excoin/modules/coin/controller/OrderCoinController.java | 61 ++++ src/main/java/com/xcong/excoin/modules/coin/entity/OrderCoinsEntity.java | 75 +++++ src/main/java/com/xcong/excoin/modules/coin/service/OrderCoinService.java | 16 + src/main/java/com/xcong/excoin/common/enumerates/MemberWalletCoinEnum.java | 21 + src/main/java/com/xcong/excoin/modules/coin/dao/platform/TradeSettingDao.java | 22 + 19 files changed, 798 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/xcong/excoin/common/enumerates/MemberWalletCoinEnum.java b/src/main/java/com/xcong/excoin/common/enumerates/MemberWalletCoinEnum.java index 20d6648..3a286be 100644 --- a/src/main/java/com/xcong/excoin/common/enumerates/MemberWalletCoinEnum.java +++ b/src/main/java/com/xcong/excoin/common/enumerates/MemberWalletCoinEnum.java @@ -18,8 +18,27 @@ CONTENTFROMAGENT("0005","由代理账户转入"), - WALLETCOINCODE("USDT", "USDT") + WALLETCOINCODE("USDT", "USDT"), + + SUBMITSALESWALLETCOINORDER_SERVICERATE("ServiceRate","0.002"), + SUBMITSALESWALLETCOINORDER_TYPE("type","1"), + + + ENTERTRANSACTIONPAGEOFWALLETCOIN_ISCOLLECT_NO("isCollect","0"), + ENTERTRANSACTIONPAGEOFWALLETCOIN_ISCOLLECT_YES("isCollect","1"), + ENTERTRANSACTIONPAGEOFWALLETCOIN_SPREAD("spread","spread"), + ENTERTRANSACTIONPAGEOFWALLETCOIN_CLOSINGRATIO("closingRatio","closingRatio"), + ENTERTRANSACTIONPAGEOFWALLETCOIN_MEMBERMONEY("memberMoney","memberMoney"), + ENTERTRANSACTIONPAGEOFWALLETCOIN_CURRENTPRICE("currentPrice","currentPrice"), + ENTERTRANSACTIONPAGEOFWALLETCOIN_CNYUSDT("cnyUsdt","cnyUsdt"), + ENTERTRANSACTIONPAGEOFWALLETCOIN_CURRENTPRICECNY("currentPriceCny","currentPriceCny"), + ENTERTRANSACTIONPAGEOFWALLETCOIN_BUY("buy","1") + ; + + + + private String name; private String value; diff --git a/src/main/java/com/xcong/excoin/modules/coin/controller/CoinController.java b/src/main/java/com/xcong/excoin/modules/coin/controller/CoinController.java index e24da80..cd552d6 100644 --- a/src/main/java/com/xcong/excoin/modules/coin/controller/CoinController.java +++ b/src/main/java/com/xcong/excoin/modules/coin/controller/CoinController.java @@ -18,12 +18,13 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; @Slf4j @Api(value = "会员资产接口", tags = "会员资产接口") @RestController -@RequestMapping(value = "/api/coin") +@RequestMapping(value = "/api/walletCoin") public class CoinController { @Resource @@ -76,7 +77,7 @@ */ @ApiOperation(value="查询币币账户里面的可用资产余额", notes="查询币币账户里面的可用资产余额") @GetMapping(value="/findWalletCoinBySymbol") - public Result findWalletCoinBysymbol(String symbol) { + public Result findWalletCoinBysymbol(@ApiParam(name="symbol",value="币种",required=true)String symbol) { return coinService.findWalletCoinBySymbol(symbol); } @@ -106,7 +107,7 @@ */ @ApiOperation(value="获取合约资产交易记录", notes="获取合约资产交易记录") @GetMapping(value="/getWalletContractRecords") - public Result getWalletContractRecords(String symbol) { + public Result getWalletContractRecords(@ApiParam(name="symbol",value="币种",required=true)String symbol) { return coinService.getWalletContractRecords(symbol); } diff --git a/src/main/java/com/xcong/excoin/modules/coin/controller/OrderCoinController.java b/src/main/java/com/xcong/excoin/modules/coin/controller/OrderCoinController.java new file mode 100644 index 0000000..b5b0b20 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/coin/controller/OrderCoinController.java @@ -0,0 +1,61 @@ +package com.xcong.excoin.modules.coin.controller; + +import java.math.BigDecimal; + +import javax.annotation.Resource; +import javax.validation.Valid; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.xcong.excoin.common.response.Result; +import com.xcong.excoin.modules.coin.parameter.dto.SubmitSalesWalletCoinOrderDto; +import com.xcong.excoin.modules.coin.parameter.dto.TransferOfBalanceDto; +import com.xcong.excoin.modules.coin.service.OrderCoinService; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Api(value = "币币交易接口", tags = "币币交易接口") +@RestController +@RequestMapping(value = "/api/orderCoin") +public class OrderCoinController { + + @Resource + OrderCoinService orderCoinService; + + /** + * 进入交易页面 + * @return + */ + @ApiOperation(value = "进入交易页面", notes = "进入交易页面") + @GetMapping(value = "/enterTransactionPageOfWalletCoin") + public Result enterTransactionPageOfWalletCoin( @ApiParam(name="symbol",value="币种",required=true)String symbol, + @ApiParam(name="type",value="买入卖出类型",required=true)String type) { + return orderCoinService.enterTransactionPageOfWalletCoin(symbol,type); + } + + /** + * 提交买卖订单 + * @param buySymbolTradeVo + * @param token + * @return + */ + @ApiOperation(value = "提交买卖订单", notes = "提交买卖订单") + @PostMapping(value="/submitSalesWalletCoinOrder") + public Result submitSalesWalletCoinOrder(@RequestBody @Valid SubmitSalesWalletCoinOrderDto submitSalesWalletCoinOrderDto) { + String symbol = submitSalesWalletCoinOrderDto.getSymbol(); + Integer type = submitSalesWalletCoinOrderDto.getType(); + Integer tradeType = submitSalesWalletCoinOrderDto.getTradeType(); + BigDecimal price = submitSalesWalletCoinOrderDto.getPrice(); + BigDecimal amount = submitSalesWalletCoinOrderDto.getAmount(); + return orderCoinService.submitSalesWalletCoinOrder(symbol,type,tradeType,price,amount); + } + +} diff --git a/src/main/java/com/xcong/excoin/modules/coin/dao/MemberSelectSymbolsDao.java b/src/main/java/com/xcong/excoin/modules/coin/dao/MemberSelectSymbolsDao.java new file mode 100644 index 0000000..0de89ee --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/coin/dao/MemberSelectSymbolsDao.java @@ -0,0 +1,14 @@ +package com.xcong.excoin.modules.coin.dao; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xcong.excoin.modules.member.entity.MemberSelectSymbolsEntity; + +public interface MemberSelectSymbolsDao extends BaseMapper<MemberSelectSymbolsEntity>{ + + List<MemberSelectSymbolsEntity> selectSymbolByMemIdAndSymbol(@Param("memberId")Long memberId,@Param("symbol")String symbol); + +} diff --git a/src/main/java/com/xcong/excoin/modules/coin/dao/OrderCoinDao.java b/src/main/java/com/xcong/excoin/modules/coin/dao/OrderCoinDao.java new file mode 100644 index 0000000..dfc8a98 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/coin/dao/OrderCoinDao.java @@ -0,0 +1,8 @@ +package com.xcong.excoin.modules.coin.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xcong.excoin.modules.coin.entity.OrderCoinEntity; + +public interface OrderCoinDao extends BaseMapper<OrderCoinEntity>{ + +} diff --git a/src/main/java/com/xcong/excoin/modules/coin/dao/OrderCoinDealDao.java b/src/main/java/com/xcong/excoin/modules/coin/dao/OrderCoinDealDao.java new file mode 100644 index 0000000..d3c80b4 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/coin/dao/OrderCoinDealDao.java @@ -0,0 +1,8 @@ +package com.xcong.excoin.modules.coin.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xcong.excoin.modules.coin.entity.OrderCoinDealEntity; + +public interface OrderCoinDealDao extends BaseMapper<OrderCoinDealEntity>{ + +} diff --git a/src/main/java/com/xcong/excoin/modules/coin/dao/platform/TradeSettingDao.java b/src/main/java/com/xcong/excoin/modules/coin/dao/platform/TradeSettingDao.java new file mode 100644 index 0000000..f68b080 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/coin/dao/platform/TradeSettingDao.java @@ -0,0 +1,22 @@ +package com.xcong.excoin.modules.coin.dao.platform; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xcong.excoin.modules.coin.entity.PlatformLeverageSettingEntity; +import com.xcong.excoin.modules.coin.entity.PlatformSymbolsSku; +import com.xcong.excoin.modules.coin.entity.PlatformTradeSettingEntity; + +public interface TradeSettingDao extends BaseMapper<PlatformTradeSettingEntity> { + + PlatformTradeSettingEntity findTradeSetting(); + + PlatformSymbolsSku findSymbolSkubySymbol(@Param("symbol") String symbol); + + List<PlatformSymbolsSku> findAllSymbolSkubySymbol(); + + List<PlatformLeverageSettingEntity> findLeverageSetting(); + +} diff --git a/src/main/java/com/xcong/excoin/modules/coin/entity/OrderCoinsDealEntity.java b/src/main/java/com/xcong/excoin/modules/coin/entity/OrderCoinsDealEntity.java new file mode 100644 index 0000000..02b24ad --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/coin/entity/OrderCoinsDealEntity.java @@ -0,0 +1,19 @@ +package com.xcong.excoin.modules.coin.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.xcong.excoin.common.system.base.BaseEntity; + +import lombok.Data; + +/** + * 币币订单成交表 + */ +@Data +@TableName("coins_order_deal") +public class OrderCoinsDealEntity extends BaseEntity{ + /** + * + */ + private static final long serialVersionUID = 1L; + +} diff --git a/src/main/java/com/xcong/excoin/modules/coin/entity/OrderCoinsEntity.java b/src/main/java/com/xcong/excoin/modules/coin/entity/OrderCoinsEntity.java new file mode 100644 index 0000000..a99e77e --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/coin/entity/OrderCoinsEntity.java @@ -0,0 +1,75 @@ +package com.xcong.excoin.modules.coin.entity; + +import java.math.BigDecimal; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.xcong.excoin.common.system.base.BaseEntity; + +import lombok.Data; + +/** + * 币币订单表 + */ +@Data +@TableName("coins_order") +public class OrderCoinsEntity extends BaseEntity{ + /** + * + */ + private static final long serialVersionUID = 1L; + + /** + * 会员ID + */ + private Long memberId; + /** + * 订单编号 + */ + private String orderNo; + /** + * 订单类型 1、买入2、卖出 + */ + private int orderType; + /** + * 币种 + */ + private String symbol; + /** + * 市场价 + */ + private BigDecimal markPrice; + /** + * 委托量 + */ + private BigDecimal entrustCnt; + /** + * 委托价 + */ + private BigDecimal entrustPrice; + /** + * 成交量 + */ + private BigDecimal dealCnt; + /** + * 成交价 + */ + private Double dealPrice; + /** + * 成交金额 + */ + private BigDecimal dealAmount; + /** + * 状态 1:委托中2:撤单3:已成交 + */ + private Integer orderStatus; + /** + * 交易类型 1:市价2:限价 + */ + private Integer tradeType; + /** + * 手续费 + */ + private String feeAmount; + +} diff --git a/src/main/java/com/xcong/excoin/modules/coin/entity/PlatformLeverageSettingEntity.java b/src/main/java/com/xcong/excoin/modules/coin/entity/PlatformLeverageSettingEntity.java new file mode 100644 index 0000000..ac907da --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/coin/entity/PlatformLeverageSettingEntity.java @@ -0,0 +1,41 @@ +package com.xcong.excoin.modules.coin.entity; + +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import lombok.Data; + +/** + * 杠杆设置表 + */ +@Data +@TableName("platform_leverage_setting") +public class PlatformLeverageSettingEntity implements Serializable { + + /** + * + */ + private static final long serialVersionUID = 1L; + @TableId(value = "id",type = IdType.AUTO) + private Long id; + /** + * 杠杆值 + */ + private String value; + /** + * 杠杆名称 + */ + private String name; + /** + * 币种 + */ + private String symbol; + /** + * 维持保证金率 + */ + private String prePriceRate; + +} diff --git a/src/main/java/com/xcong/excoin/modules/coin/entity/PlatformSymbolsSku.java b/src/main/java/com/xcong/excoin/modules/coin/entity/PlatformSymbolsSku.java new file mode 100644 index 0000000..268f301 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/coin/entity/PlatformSymbolsSku.java @@ -0,0 +1,32 @@ +package com.xcong.excoin.modules.coin.entity; + +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import lombok.Data; + +/** + * 币种规格表 + */ +@Data +@TableName("platform_symbols_sku") +public class PlatformSymbolsSku implements Serializable { + /** + * + */ + private static final long serialVersionUID = 1L; + @TableId(value = "id",type = IdType.AUTO) + private Long id; + /** + * 币种名称 + */ + private String name; + /** + * 规格 + */ + private String sku; + +} diff --git a/src/main/java/com/xcong/excoin/modules/coin/entity/PlatformTradeSettingEntity.java b/src/main/java/com/xcong/excoin/modules/coin/entity/PlatformTradeSettingEntity.java new file mode 100644 index 0000000..1eae490 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/coin/entity/PlatformTradeSettingEntity.java @@ -0,0 +1,59 @@ +package com.xcong.excoin.modules.coin.entity; + +import java.io.Serializable; +import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import lombok.Data; +/** + * 交易设置表 + * @author Administrator + * + */ +@Data +@TableName("platform_trade_setting") +public class PlatformTradeSettingEntity implements Serializable { + + /** + * + */ + private static final long serialVersionUID = 1L; + @TableId(value = "id",type = IdType.AUTO) + private Long id; + /** + * 点差 + */ + private BigDecimal spread; + /** + * 杠杆 + */ + private BigDecimal leverageRatio; + /** + * 爆仓 + */ + private BigDecimal outstock; + /** + * 手续费率 + */ + private BigDecimal feeRatio; + /** + * 代理返佣比例 + */ + private BigDecimal agentReturnRatio; + /** + * 持仓系数 + */ + private BigDecimal doingRatio; + /** + * 预估强平价系数 + */ + private BigDecimal forceParam; + + /** + *盈亏难度系数 + */ + private BigDecimal profitParam; +} diff --git a/src/main/java/com/xcong/excoin/modules/coin/parameter/dto/InOrderCoinDto.java b/src/main/java/com/xcong/excoin/modules/coin/parameter/dto/InOrderCoinDto.java new file mode 100644 index 0000000..b69daf2 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/coin/parameter/dto/InOrderCoinDto.java @@ -0,0 +1,27 @@ +package com.xcong.excoin.modules.coin.parameter.dto; + +import java.math.BigDecimal; + +import javax.validation.constraints.NotNull; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "进入交易页面参数接收类", description = "进入交易页面参数接收类") +public class InOrderCoinDto { + + @NotNull(message = "划转金额不能为空") + @ApiModelProperty(value = "划转金额", example = "100") + private BigDecimal balance; + + @NotNull(message = "币种不能为空") + @ApiModelProperty(value = "币种", example = "USDT") + private String symbol; + + @NotNull(message = "账户类型不能为空") + @ApiModelProperty(value = "账户类型", example = "1") + private Integer transfertype; + +} diff --git a/src/main/java/com/xcong/excoin/modules/coin/parameter/dto/SubmitSalesWalletCoinOrderDto.java b/src/main/java/com/xcong/excoin/modules/coin/parameter/dto/SubmitSalesWalletCoinOrderDto.java new file mode 100644 index 0000000..bdff678 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/coin/parameter/dto/SubmitSalesWalletCoinOrderDto.java @@ -0,0 +1,32 @@ +package com.xcong.excoin.modules.coin.parameter.dto; + +import java.math.BigDecimal; +import javax.validation.constraints.NotNull; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "提交买卖订单接收类", description = "提交买卖订单接收类") +public class SubmitSalesWalletCoinOrderDto { + + @ApiModelProperty(value = "币种", example = "BTC") + private String symbol; + + @NotNull(message = "币种不能为空") + @ApiModelProperty(value = "币种", example = "USDT") + private Integer type; + + @NotNull(message = "账户类型不能为空") + @ApiModelProperty(value = "账户类型", example = "1") + private Integer tradeType; + + @NotNull(message = "数量不能为空") + @ApiModelProperty(value = "数量", example = "100") + private BigDecimal amount; + + @NotNull(message = "建仓价不能为空") + @ApiModelProperty(value = "建仓价", example = "20.0000") + private BigDecimal price; + +} diff --git a/src/main/java/com/xcong/excoin/modules/coin/service/OrderCoinService.java b/src/main/java/com/xcong/excoin/modules/coin/service/OrderCoinService.java new file mode 100644 index 0000000..cedd8bb --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/coin/service/OrderCoinService.java @@ -0,0 +1,16 @@ +package com.xcong.excoin.modules.coin.service; + +import java.math.BigDecimal; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.xcong.excoin.common.response.Result; +import com.xcong.excoin.modules.coin.entity.OrderCoinEntity; + +public interface OrderCoinService extends IService<OrderCoinEntity>{ + + Result enterTransactionPageOfWalletCoin(String symbol, String type); + + Result submitSalesWalletCoinOrder(String symbol, Integer type, Integer tradeType, BigDecimal price, + BigDecimal amount); + +} diff --git a/src/main/java/com/xcong/excoin/modules/coin/service/impl/OrderCoinServiceImpl.java b/src/main/java/com/xcong/excoin/modules/coin/service/impl/OrderCoinServiceImpl.java new file mode 100644 index 0000000..b4543ee --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/coin/service/impl/OrderCoinServiceImpl.java @@ -0,0 +1,287 @@ +package com.xcong.excoin.modules.coin.service.impl; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.kebex.app.entity.member.Member; +import com.kebex.app.entity.member.MemberAccountFlowRecord; +import com.kebex.app.entity.member.WalletCoin; +import com.kebex.app.entity.order.CoinOrderMain; +import com.kebex.app.entity.order.CoinsOrderDetail; +import com.kebex.app.entity.trade.TradeSetting; +import com.kebex.common.huobiapi.CoinTypeConConvert; +import com.xcong.excoin.common.LoginUserUtils; +import com.xcong.excoin.common.enumerates.MemberWalletCoinEnum; +import com.xcong.excoin.common.response.Result; +import com.xcong.excoin.modules.coin.dao.MemberSelectSymbolsDao; +import com.xcong.excoin.modules.coin.dao.OrderCoinDao; +import com.xcong.excoin.modules.coin.dao.platform.CnyUsdtExchangeDao; +import com.xcong.excoin.modules.coin.dao.platform.TradeSettingDao; +import com.xcong.excoin.modules.coin.entity.CnyUsdtExchange; +import com.xcong.excoin.modules.coin.entity.OrderCoinEntity; +import com.xcong.excoin.modules.coin.entity.PlatformTradeSettingEntity; +import com.xcong.excoin.modules.coin.service.OrderCoinService; +import com.xcong.excoin.modules.member.dao.MemberWalletCoinDao; +import com.xcong.excoin.modules.member.entity.MemberSelectSymbolsEntity; +import com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity; +import com.xcong.excoin.utils.MessageSourceUtils; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; + +@Service +public class OrderCoinServiceImpl extends ServiceImpl<OrderCoinDao, OrderCoinEntity> implements OrderCoinService{ + + @Resource + TradeSettingDao platformTradeSettingDao; + @Resource + MemberWalletCoinDao memberWalletCoinDao; + @Resource + MemberSelectSymbolsDao memberSelectSymbolsDao; + @Resource + CnyUsdtExchangeDao cnyUsdtExchangeDao; + + @Override + public Result enterTransactionPageOfWalletCoin(String symbol, String type) { + if (StrUtil.isBlank(symbol)) { + return Result.fail(MessageSourceUtils.getString("order_service_0001")); + } + //获取用户ID + Long memberId = LoginUserUtils.getAppLoginUser().getId(); + //获取该币种的币币账户信息 + MemberWalletCoinEntity walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, symbol); + + PlatformTradeSettingEntity tradeSetting = platformTradeSettingDao.findTradeSetting(); + if (tradeSetting == null) { + return Result.fail(MessageSourceUtils.getString("order_service_0003")); + } + //获取USDT的币币账户信息 + MemberWalletCoinEntity walletCoinUsdt = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, + MemberWalletCoinEnum.WALLETCOINCODE.getValue()); + /** + * todo + */ + //获取某个币种的收盘价 + //Double closePrice = symbolsService.getCloseSymbolsBySymbolsName(symbol+"/USDT"); + BigDecimal closePrice = new BigDecimal("100.0000"); + + List<MemberSelectSymbolsEntity> memSymbols = memberSelectSymbolsDao.selectSymbolByMemIdAndSymbol(memberId, symbol); + + CnyUsdtExchange cnyUsdtExchange = cnyUsdtExchangeDao.getCNYAndUSDTOne(); + BigDecimal cnyUsdt = cnyUsdtExchange.getValue(); + + Map<String, Object> map = new HashMap<String, Object>(); + if(CollUtil.isEmpty(memSymbols)) { + map.put(MemberWalletCoinEnum.ENTERTRANSACTIONPAGEOFWALLETCOIN_ISCOLLECT_NO.getName(), + MemberWalletCoinEnum.ENTERTRANSACTIONPAGEOFWALLETCOIN_ISCOLLECT_NO.getValue());//是否已经自选该币种 + }else { + map.put(MemberWalletCoinEnum.ENTERTRANSACTIONPAGEOFWALLETCOIN_ISCOLLECT_YES.getName(), + MemberWalletCoinEnum.ENTERTRANSACTIONPAGEOFWALLETCOIN_ISCOLLECT_YES.getValue());//是否已经自选该币种 + } + if (ObjectUtil.isEmpty(walletCoin)) + return Result.fail(MessageSourceUtils.getString("order_service_0003")); + + map.put(MemberWalletCoinEnum.ENTERTRANSACTIONPAGEOFWALLETCOIN_SPREAD.getValue(), tradeSetting.getSpread());// 点差 + map.put(MemberWalletCoinEnum.ENTERTRANSACTIONPAGEOFWALLETCOIN_CLOSINGRATIO.getValue(), tradeSetting.getFeeRatio());// 手续费用率 + if(MemberWalletCoinEnum.ENTERTRANSACTIONPAGEOFWALLETCOIN_BUY.getValue().equals(type)) {//买入 + map.put(MemberWalletCoinEnum.ENTERTRANSACTIONPAGEOFWALLETCOIN_MEMBERMONEY.getValue(), walletCoinUsdt.getAvailableBalance());// 用户可用金额 + }else { + map.put(MemberWalletCoinEnum.ENTERTRANSACTIONPAGEOFWALLETCOIN_MEMBERMONEY.getValue(), walletCoin.getAvailableBalance());// 用户可用金额 + } + + map.put(MemberWalletCoinEnum.ENTERTRANSACTIONPAGEOFWALLETCOIN_CURRENTPRICE.getValue(), closePrice);//当前价 + map.put(MemberWalletCoinEnum.ENTERTRANSACTIONPAGEOFWALLETCOIN_CNYUSDT.getValue(), cnyUsdt);//比例 + map.put(MemberWalletCoinEnum.ENTERTRANSACTIONPAGEOFWALLETCOIN_CURRENTPRICECNY.getValue(), cnyUsdt.multiply(closePrice));//换算成人民币的币种价格 + return Result.ok(map); +} + + @Override + @Transactional + public Result submitSalesWalletCoinOrder(String symbol, Integer type, Integer tradeType, BigDecimal price, + BigDecimal amount) { + try { + //获取用户ID + Long memberId = LoginUserUtils.getAppLoginUser().getId(); + + String[] symbols = symbol.split("/"); + if (symbols.length <= 0) { + return Result.fail(MessageSourceUtils.getString("order_service_0008")); + } + /** + * todo + */ + //查询当前价 + //BigDecimal nowPrice = new BigDecimal(redisUtil.getString(CoinTypeConConvert.convertToKey(symbol+"/USDT"))); + BigDecimal nowPrice = new BigDecimal("100.0000"); + + // 获取交易管理的杠杠倍率,手续费率等信息,由平台进行设置 + symbol = symbol.toUpperCase(); + MemberWalletCoinEntity walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, symbols[0]); + MemberWalletCoinEntity walletCoinUsdt = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, + MemberWalletCoinEnum.WALLETCOINCODE.getValue()); + if (ObjectUtil.isEmpty(walletCoin) || ObjectUtil.isEmpty(walletCoinUsdt) ) { + return Result.fail(MessageSourceUtils.getString("order_service_0003")); + } + // 查询交易设置 + PlatformTradeSettingEntity tradeSetting = platformTradeSettingDao.findTradeSetting(); + if(ObjectUtil.isEmpty(tradeSetting)) { + return Result.fail(MessageSourceUtils.getString("order_service_0009")); + } + //手续费率 + BigDecimal ServiceRate = new BigDecimal(MemberWalletCoinEnum.SUBMITSALESWALLETCOINORDER_SERVICERATE.getValue()); + // 手续费用(手续费=建仓价X数量X手续费率) + BigDecimal closingPrice = price.multiply(amount).multiply(ServiceRate).setScale(4, BigDecimal.ROUND_DOWN); + //总费用 = 成交价*数量+手续费 + BigDecimal totalPayPrice = price.multiply(amount).add(closingPrice).setScale(4, BigDecimal.ROUND_DOWN); + if(MemberWalletCoinEnum.SUBMITSALESWALLETCOINORDER_TYPE.getValue().equals(type.toString())) { + //买入,所需总费用跟用户USDT金额进行比较 + if (totalPayPrice.compareTo(walletCoinUsdt.getAvailableBalance()) > 0) { + return Result.fail(MessageSourceUtils.getString("order_service_0010")); + } + }else { + //卖出,所需总费用跟用户所对应的币种金额进行比较 + if (amount.compareTo(walletCoin.getAvailableBalance()) > 0) { + return Result.fail(MessageSourceUtils.getString("order_service_0010")); + } + } + + CoinOrderMain order = new CoinOrderMain(); + + // 创建订单 + if (tradeType == 2) {// 如果是限价交易直接插入主表数据 + order.setStatus(1); + order.setMemId(member.getmId()); + order.setOpenPrice(price.doubleValue()); + order.setOpenTime(new Date()); + order.setOrderNo(generateSimpleSerialno(member.getmId() + "")); + order.setOrderType(type); + order.setRewardRatio(price + .multiply(amount).doubleValue()); + order.setForceSetPrice(nowPrice.doubleValue()); +// order.setStatus(3); + order.setSysbol(symbol); + order.setSysbolNumber(amount); + order.setSysbolFlatNumber(amount); + order.setTradeType(tradeType); + order.setVersion(1); + order.setClosingPrice(closingPrice); + orderMapper.addCoinMainOrder(order); + + //更新用户钱包信息 + //冻结相应的资产 + if(type == 1) {//如果是买入,所对应的币种增加,USDT账户减少金额 + // 更新用户的可用金额,冻结金额 + walletCoinUsdt.setAvailableBalance(walletCoinUsdt.getAvailableBalance()-totalPayPrice.doubleValue()); + walletCoinUsdt.setFrozenBalance(walletCoinUsdt.getFrozenBalance()+totalPayPrice.doubleValue()); + walletCoinDao.updateByModel(walletCoinUsdt); + }else { + //如果是卖出,币种减少,USDT增加 + BigDecimal availableBalance = new BigDecimal(walletCoin.getAvailableBalance()).subtract(amount).setScale(8, BigDecimal.ROUND_HALF_UP); + walletCoin.setAvailableBalance(availableBalance.doubleValue()); + walletCoin.setFrozenBalance(walletCoin.getFrozenBalance()+amount.doubleValue()); + walletCoinDao.updateByModel(walletCoin); + } + } else { + //如果是市价交易,主表和附表都需要插入数据 + order.setStatus(3); + order.setMemId(member.getmId()); + order.setForceSetPrice(nowPrice.doubleValue()); + order.setOpenPrice(nowPrice.doubleValue()); + order.setOpenTime(new Date()); + order.setOrderNo(generateSimpleSerialno(member.getmId() + "")); + order.setOrderType(type); + order.setRewardRatio(nowPrice + .multiply(amount).doubleValue()); +// order.setStatus(3); + order.setSysbol(symbol); + order.setSysbolNumber(amount); + order.setSysbolFlatNumber(amount); + order.setTradeType(tradeType); + order.setVersion(1); + order.setClosingPrice(closingPrice); + orderMapper.addCoinMainOrder(order); + // + CoinsOrderDetail detail = new CoinsOrderDetail(); + detail.setClosingPrice(closingPrice.doubleValue()); + detail.setCreateTime(new Date()); + detail.setEntrustStatus(1); + detail.setEntrustType(type); + detail.setExitPrice(price.doubleValue()); + detail.setExitType(1); + detail.setMainId(order.getId()); + detail.setMemberId(member.getmId()); + detail.setMemberPhone(member.getPhone()); + detail.setPrePrice(price + .multiply(amount).doubleValue()); + detail.setRewardRatio(0.0); + detail.setSerialno(generateSimpleSerialno(member.getmId() + "")); + detail.setSymbol(symbol); + detail.setSymbolSku(amount); + detail.setSymbolSkuNumber(amount); + detail.setTradePrice(price.doubleValue()); + detail.setTradeType(tradeType); + detail.setVersion(1); + coinOrderDetailMapper.insert(detail); + + if(type == 1) {//如果是买入,所对应的币种增加,USDT账户减少金额 + // 更新用户的可用金额 + BigDecimal availableBalance = new BigDecimal(walletCoin.getAvailableBalance()).add(amount).setScale(8, BigDecimal.ROUND_HALF_UP); + walletCoin.setAvailableBalance(availableBalance.doubleValue()); + walletCoinDao.updateByModel(walletCoin); + + walletCoinUsdt.setAvailableBalance(walletCoinUsdt.getAvailableBalance()-totalPayPrice.doubleValue()); + walletCoinDao.updateByModel(walletCoinUsdt); + }else { + //如果是卖出,币种减少,USDT增加 + BigDecimal availableBalance = new BigDecimal(walletCoin.getAvailableBalance()).subtract(amount).setScale(8, BigDecimal.ROUND_HALF_UP); + walletCoin.setAvailableBalance(availableBalance.doubleValue()); + walletCoinDao.updateByModel(walletCoin); + + walletCoinUsdt.setAvailableBalance(walletCoinUsdt.getAvailableBalance()+totalPayPrice.doubleValue()); + walletCoinDao.updateByModel(walletCoinUsdt); + } + + //返佣 +// calYj(member.getmId(), closingPrice, order); +// String reference = member.getReference(); + //返佣 +// agentReturn(reference,closingPrice.doubleValue(),detail); + + } + // 流水记录 + MemberAccountFlowRecord record = new MemberAccountFlowRecord(); + record.setCreateTime(new Date()); + if (type == 1) { + record.setDirectionSource("币币买入"+symbol); + record.setRemark("买入"+symbol+":"+amount); + record.setPrice(totalPayPrice.doubleValue()); + } else { + record.setDirectionSource("币币卖出"+symbol); + record.setRemark("卖出"+symbol+":"+amount); + record.setPrice(-totalPayPrice.doubleValue()); + } + record.setMemberBalance(walletCoinUsdt.getAvailableBalance()); + record.setMemberid(member.getmId()); + record.setSymbolName(symbol); + record.setMemberName(member.getRealName()); + record.setMemberPhone(member.getPhone()); + + memberMapper.addFlowRecord(record); + } catch (Exception e) { + e.printStackTrace(); + } + return Result.success(MessageSourceUtils.getString("order_service_0011")); + } + +} diff --git a/src/main/java/com/xcong/excoin/modules/member/entity/MemberSelectSymbolsEntity.java b/src/main/java/com/xcong/excoin/modules/member/entity/MemberSelectSymbolsEntity.java new file mode 100644 index 0000000..82c98db --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/member/entity/MemberSelectSymbolsEntity.java @@ -0,0 +1,29 @@ +package com.xcong.excoin.modules.member.entity; + +import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.xcong.excoin.common.system.base.BaseEntity; + +import lombok.Data; + +/** + * 会员自选币种 + */ +@Data +@TableName +public class MemberSelectSymbolsEntity extends BaseEntity{ + /** + * + */ + private static final long serialVersionUID = 1L; + /** + * 会员ID + */ + private BigDecimal memberId; + /** + * 币种 + */ + private BigDecimal symbol; + +} diff --git a/src/main/resources/mapper/member/MemberSelectSymbolsDao.xml b/src/main/resources/mapper/member/MemberSelectSymbolsDao.xml new file mode 100644 index 0000000..c5780d1 --- /dev/null +++ b/src/main/resources/mapper/member/MemberSelectSymbolsDao.xml @@ -0,0 +1,9 @@ +<?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.MemberSelectSymbolsDao"> + + <select id="selectSymbolByMemIdAndSymbol" resultType="com.xcong.excoin.modules.member.entity.MemberSelectSymbolsEntity"> + select id id,symbol symbol,member_id memId from member_select_symbols where member_id = #{memberId} and symbol = #{symbol} + </select> + +</mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/platform/TradeSettingDao.xml b/src/main/resources/mapper/platform/TradeSettingDao.xml new file mode 100644 index 0000000..4d4461d --- /dev/null +++ b/src/main/resources/mapper/platform/TradeSettingDao.xml @@ -0,0 +1,35 @@ +<?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"> + + <select id="findTradeSetting" resultType="com.xcong.excoin.modules.coin.entity.PlatformTradeSettingEntity"> + SELECT + id id, + spread spread, + leverageratio leverageRatio, + outstock outStock, + closingratio closingRatio, + agent_return agent_return, + doing_rate doingRate + FROM + platform_trade_setting + </select> + + <select id="findSymbolSkubySymbol" resultType="com.xcong.excoin.modules.coin.entity.PlatformSymbolsSku"> + select * from platform_symbols_sku + <where> + <if test="symbol!=null and symbol!=''"> + name = #{symbol} + </if> + </where> + </select> + + <select id="findAllSymbolSkubySymbol" resultType="com.xcong.excoin.modules.coin.entity.PlatformSymbolsSku"> + select * from platform_symbols_sku + </select> + + <select id="findLeverageSetting" resultType="com.xcong.excoin.modules.coin.entity.PlatformLeverageSettingEntity"> + select * from platform_leverage_setting order by value ASC + </select> + +</mapper> -- Gitblit v1.9.1