src/main/java/com/xcong/excoin/common/enumerates/MemberWalletCoinEnum.java
@@ -3,9 +3,12 @@ public enum MemberWalletCoinEnum { WALLETCOINUSDT("walletCoinUsdt", "usdt"), WALLETCOINLIST("walletCoinList", "walletList"), WALLETCOINCNY("walletCoinCny", "cny"), WALLETAGENTCNY("walletCoinCny", "wallet"), WALLETCOINLIST("walletCoinList", "walletList"), WALLETAGENT("walletCoin", "wallet"), WALLETCONTRACT("walletContract", "walletContract"), CONTENTTOCONTRACT("0001","转出至合约账户"), CONTENTFROMWALLETCOIN("0002","由币币账户转入"), @@ -15,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; src/main/java/com/xcong/excoin/configurations/WebMvcConfig.java
@@ -38,8 +38,8 @@ .allowCredentials(true).maxAge(3600); } @Bean public SpringContextHolder springContextHolder() { return new SpringContextHolder(); } // @Bean // public SpringContextHolder springContextHolder() { // return new SpringContextHolder(); // } } src/main/java/com/xcong/excoin/configurations/security/TokenFilter.java
@@ -67,7 +67,13 @@ */ private String resolveToken(HttpServletRequest request) { try { String bearerToken = request.getHeader(AppContants.TOKEN_HEADER); // TODO debug模式下写死用户 String bearerToken = ""; if (applicationProperties.isDebug()) { bearerToken = "Bearer JSEre1ZUKEu2Ga5ORM+juxXv6yBwmt+FgLhxaeHf1EEJfIb3oRir4pXqe5JDhS6sXfLYOXRIAyBpq+SYBwAtGigxwzGVPn+k4Pt6vNxZ4h8Pk4IeG4+FqbFD0guzvu3WN2eRnnzYqCepl429v9Ju7n4jSG0Hj5ViM3MHQZs3qHo="; } else { bearerToken = request.getHeader(AppContants.TOKEN_HEADER); } if (StringUtils.hasText(bearerToken) && bearerToken.startsWith(AppContants.TOKEN_START_WITH)) { // 去掉令牌前缀 String rsaToken = bearerToken.replace(AppContants.TOKEN_START_WITH, ""); src/main/java/com/xcong/excoin/modules/coin/controller/CoinController.java
@@ -5,12 +5,13 @@ import javax.annotation.Resource; import javax.validation.Valid; import com.xcong.excoin.modules.coin.parameter.vo.MemberWalletCoinInfoVo; import com.xcong.excoin.modules.coin.parameter.vo.MemberWalletCoinVo; import io.swagger.annotations.*; 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.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @@ -19,14 +20,14 @@ import com.xcong.excoin.modules.coin.service.CoinService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; 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 @@ -37,6 +38,7 @@ * @return */ @ApiOperation(value = "获取我的币币账户信息", notes = "获取我的币币账户信息") @ApiResponses({@ApiResponse( code = 200, message = "success", response = MemberWalletCoinVo.class)}) @GetMapping(value = "/getWalletCoin") public Result getWalletCoin() { return coinService.getWalletCoin(); @@ -47,9 +49,10 @@ * @return */ @ApiOperation(value="获取币币账户某个币种信息", notes="获取币币账户某个币种信息") @GetMapping(value = "/getWalletCoinById") public Result getWalletCoinById(@RequestParam("id") Long id) { return coinService.getWalletCoinById(id); @ApiResponses({@ApiResponse( code = 200, message = "success", response = MemberWalletCoinInfoVo.class)}) @GetMapping(value = "/getWalletCoinBySymbol") public Result getWalletCoinBySymbol(@ApiParam(name="symbol",value="币种",required=true)String symbol) { return coinService.getWalletCoinBySymbol(symbol); } /** @@ -64,13 +67,13 @@ } /** * 查询合约账户里面的资产余额 * 查询合约账户里面的可用资产余额 * @return */ @ApiOperation(value="查询合约账户里面的资产余额", notes="查询合约账户里面的资产余额") @ApiOperation(value="查询合约账户里面的可用资产余额", notes="查询合约账户里面的可用资产余额") @GetMapping(value="/findWalletContractBySymbol") public Result findWalletContractBySymbol(String symbol) { return coinService.findWalletContractBySymbol(symbol); public Result findWalletContractBySymbol() { return coinService.findWalletContractBySymbol(); } /** @@ -79,7 +82,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); } @@ -87,7 +90,7 @@ * 查询代理账户里面的资产余额 * @return */ @ApiOperation(value="查询代理账户里面的资产余额", notes="查询代理账户里面的资产余额") @ApiOperation(value="查询代理账户里面的可用资产余额", notes="查询代理账户里面的可用资产余额") @GetMapping(value="/findWalletAgentBySymbol") public Result findWalletAgentBySymbol() { return coinService.findWalletAgentBySymbol(); @@ -109,7 +112,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); } @@ -151,7 +154,7 @@ * 代理账户划转到USDT账户 * @return */ @ApiOperation(value="代理账户划转到USDT账户", notes="代理账户划转到USDT账户") @ApiOperation(value="代理账户划转到合约或币币USDT账户()", notes="代理账户划转到合约或币币USDT账户") @PostMapping(value="/agentTransferToWalletCoin") public Result agentTransferToWalletCoin(@RequestBody @Valid TransferOfBalanceDto transferOfBalanceDto) { BigDecimal balance = transferOfBalanceDto.getBalance(); src/main/java/com/xcong/excoin/modules/coin/controller/OrderCoinController.java
New file @@ -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); } } src/main/java/com/xcong/excoin/modules/coin/dao/MemberSelectSymbolsDao.java
New file @@ -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); } src/main/java/com/xcong/excoin/modules/coin/dao/OrderCoinDao.java
New file @@ -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.OrderCoinsEntity; public interface OrderCoinDao extends BaseMapper<OrderCoinsEntity>{ } src/main/java/com/xcong/excoin/modules/coin/dao/OrderCoinDealDao.java
New file @@ -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.OrderCoinsDealEntity; public interface OrderCoinDealDao extends BaseMapper<OrderCoinsDealEntity>{ } src/main/java/com/xcong/excoin/modules/coin/dao/platform/TradeSettingDao.java
New file @@ -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(); } src/main/java/com/xcong/excoin/modules/coin/entity/OrderCoinsDealEntity.java
New file @@ -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; } src/main/java/com/xcong/excoin/modules/coin/entity/OrderCoinsEntity.java
New file @@ -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; } src/main/java/com/xcong/excoin/modules/coin/entity/PlatformLeverageSettingEntity.java
New file @@ -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; } src/main/java/com/xcong/excoin/modules/coin/entity/PlatformSymbolsSku.java
New file @@ -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; } src/main/java/com/xcong/excoin/modules/coin/entity/PlatformTradeSettingEntity.java
New file @@ -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; } src/main/java/com/xcong/excoin/modules/coin/parameter/dto/InOrderCoinDto.java
New file @@ -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; } src/main/java/com/xcong/excoin/modules/coin/parameter/dto/SubmitSalesWalletCoinOrderDto.java
New file @@ -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; } src/main/java/com/xcong/excoin/modules/coin/parameter/vo/MemberWalletCoinInfoVo.java
New file @@ -0,0 +1,81 @@ package com.xcong.excoin.modules.coin.parameter.vo; import java.math.BigDecimal; import io.swagger.annotations.ApiModelProperty; public class MemberWalletCoinInfoVo { /** * 用户Id */ @ApiModelProperty(value = "用户Id") private Long memberId; /** * 钱包标识 */ @ApiModelProperty(value = "币种名称") private String walletCode; /** * 可用余额 */ @ApiModelProperty(value = "可用余额") private BigDecimal availableBalance; /** * 总金额 */ @ApiModelProperty(value = "总金额") private BigDecimal totalBalance; /** * 冻结金额 */ @ApiModelProperty(value = "冻结金额") private BigDecimal frozenBalance; public String getWalletCode() { return walletCode; } public void setWalletCode(String walletCode) { this.walletCode = walletCode; } public Long getMemberId() { return memberId; } public void setMemberId(Long memberId) { this.memberId = memberId; } public BigDecimal getAvailableBalance() { return availableBalance; } public void setAvailableBalance(BigDecimal availableBalance) { this.availableBalance = availableBalance; } public BigDecimal getTotalBalance() { return totalBalance; } public void setTotalBalance(BigDecimal totalBalance) { this.totalBalance = totalBalance; } public BigDecimal getFrozenBalance() { return frozenBalance; } public void setFrozenBalance(BigDecimal frozenBalance) { this.frozenBalance = frozenBalance; } } src/main/java/com/xcong/excoin/modules/coin/parameter/vo/MemberWalletCoinVo.java
@@ -3,13 +3,14 @@ import java.math.BigDecimal; import java.util.List; import com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; /** * @author xy */ @ApiModel(value = "币币账户信息返回", description = "币币账户信息返回") public class MemberWalletCoinVo extends MemberWalletCoinEntity{ public class MemberWalletCoinVo { private static final long serialVersionUID = 1L; @@ -20,7 +21,7 @@ private BigDecimal totalCny; @ApiModelProperty(value = "币种详情") private List<MemberWalletCoinEntity> walletCoinEntities; private List<MemberWalletCoinInfoVo> memberWalletCoinInfoVo; public BigDecimal getTotalUsdt() { return totalUsdt; @@ -34,11 +35,11 @@ public void setTotalCny(BigDecimal totalCny) { this.totalCny = totalCny; } public List<MemberWalletCoinEntity> getWalletCoinEntities() { return walletCoinEntities; public List<MemberWalletCoinInfoVo> getMemberWalletCoinInfoVo() { return memberWalletCoinInfoVo; } public void setWalletCoinEntities(List<MemberWalletCoinEntity> walletCoinEntities) { this.walletCoinEntities = walletCoinEntities; public void setMemberWalletCoinInfoVo(List<MemberWalletCoinInfoVo> memberWalletCoinInfoVo) { this.memberWalletCoinInfoVo = memberWalletCoinInfoVo; } } src/main/java/com/xcong/excoin/modules/coin/service/CoinService.java
@@ -10,15 +10,13 @@ public Result getWalletCoin(); public Result getWalletCoinById(Long id); public Result getWalletContractById(); public Result coinWalletTransferToContract(BigDecimal balance, String symbol); public Result contractTransferToWalletCoin(BigDecimal balance, String symbol); public Result findWalletContractBySymbol(String symbol); public Result findWalletContractBySymbol(); public Result findWalletCoinBySymbol(String symbol); @@ -32,4 +30,6 @@ public Result findWalletAgentBySymbol(); public Result getWalletCoinBySymbol(String symbol); } src/main/java/com/xcong/excoin/modules/coin/service/OrderCoinService.java
New file @@ -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.OrderCoinsEntity; public interface OrderCoinService extends IService<OrderCoinsEntity>{ Result enterTransactionPageOfWalletCoin(String symbol, String type); Result submitSalesWalletCoinOrder(String symbol, Integer type, Integer tradeType, BigDecimal price, BigDecimal amount); } src/main/java/com/xcong/excoin/modules/coin/service/impl/CoinServiceImpl.java
@@ -2,26 +2,23 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.xcong.excoin.common.LoginUserUtils; import com.xcong.excoin.common.enumerates.CoinTypeEnum; import com.xcong.excoin.common.enumerates.MemberWalletCoinEnum; import com.xcong.excoin.common.exception.GlobalException; import com.xcong.excoin.common.response.Result; import com.xcong.excoin.modules.coin.dao.MemberAccountMoneyChangeDao; import com.xcong.excoin.modules.coin.dao.platform.CnyUsdtExchangeDao; import com.xcong.excoin.modules.coin.entity.CnyUsdtExchange; import com.xcong.excoin.modules.coin.entity.MemberAccountMoneyChange; import com.xcong.excoin.modules.coin.parameter.vo.MemberWalletCoinInfoVo; import com.xcong.excoin.modules.coin.parameter.vo.MemberWalletCoinVo; import com.xcong.excoin.modules.coin.service.CoinService; import com.xcong.excoin.modules.member.dao.MemberWalletAgentDao; @@ -31,8 +28,8 @@ import com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity; import com.xcong.excoin.modules.member.entity.MemberWalletContractEntity; 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 @@ -64,10 +61,23 @@ if(!StrUtil.isEmpty(memberId.toString())) { List<MemberWalletCoinEntity> MemberWalletCoinlist = memberWalletCoinDao.selectMemberWalletCoinsByMemberId(memberId); List<MemberWalletCoinEntity> memberWalletCoinlist = memberWalletCoinDao.selectMemberWalletCoinsByMemberId(memberId); if(CollUtil.isNotEmpty(MemberWalletCoinlist)) { for(MemberWalletCoinEntity walletCoin : MemberWalletCoinlist) { List<MemberWalletCoinInfoVo> memberWalletCoinInfoVolist = new ArrayList<MemberWalletCoinInfoVo>(); MemberWalletCoinInfoVo memberWalletCoinInfoVo = new MemberWalletCoinInfoVo(); if(ObjectUtil.isNotEmpty(memberWalletCoinlist)) { for(MemberWalletCoinEntity memberWalletCoinEntity : memberWalletCoinlist) { memberWalletCoinInfoVo.setAvailableBalance(memberWalletCoinEntity.getAvailableBalance()); memberWalletCoinInfoVo.setFrozenBalance(memberWalletCoinEntity.getFrozenBalance()); memberWalletCoinInfoVo.setMemberId(memberWalletCoinEntity.getMemberId()); memberWalletCoinInfoVo.setTotalBalance(memberWalletCoinEntity.getTotalBalance()); memberWalletCoinInfoVolist.add(memberWalletCoinInfoVo); } } if(CollUtil.isNotEmpty(memberWalletCoinlist)) { for(MemberWalletCoinEntity walletCoin : memberWalletCoinlist) { if(MemberWalletCoinEnum.WALLETCOINCODE.getValue().equals(walletCoin.getWalletCode())) { totalUsdt = walletCoin.getAvailableBalance().add(walletCoin.getFrozenBalance()); BigDecimal totalCny = totalUsdt.multiply(cnyUsdt); @@ -84,34 +94,35 @@ MemberWalletCoinVo memberWalletCoinVo = new MemberWalletCoinVo(); memberWalletCoinVo.setTotalUsdt(totalUsdt.setScale(4, BigDecimal.ROUND_DOWN)); memberWalletCoinVo.setTotalCny(totalUsdt.multiply(cnyUsdt).setScale(4, BigDecimal.ROUND_DOWN)); memberWalletCoinVo.setWalletCoinEntities(MemberWalletCoinlist); memberWalletCoinVo.setMemberWalletCoinInfoVo(memberWalletCoinInfoVolist); return Result.ok(memberWalletCoinVo); }else { List<MemberWalletCoinEntity> MemberWalletCoinlist = new ArrayList<MemberWalletCoinEntity>(); MemberWalletCoinEntity coin = new MemberWalletCoinEntity(); List<MemberWalletCoinInfoVo> memberWalletCoinlist = new ArrayList<MemberWalletCoinInfoVo>(); MemberWalletCoinInfoVo coin = new MemberWalletCoinInfoVo(); coin.setAvailableBalance(BigDecimal.ZERO); coin.setTotalBalance(BigDecimal.ZERO); coin.setFrozenBalance(BigDecimal.ZERO); coin.setWalletCode(CoinTypeEnum.BTC.toString()); MemberWalletCoinlist.add(coin); memberWalletCoinlist.add(coin); coin.setWalletCode(CoinTypeEnum.ETH.toString()); MemberWalletCoinlist.add(coin); memberWalletCoinlist.add(coin); coin.setWalletCode(CoinTypeEnum.LTC.toString()); MemberWalletCoinlist.add(coin); memberWalletCoinlist.add(coin); coin.setWalletCode(CoinTypeEnum.BCH.toString()); MemberWalletCoinlist.add(coin); memberWalletCoinlist.add(coin); coin.setWalletCode(CoinTypeEnum.USDT.toString()); MemberWalletCoinlist.add(coin); memberWalletCoinlist.add(coin); coin.setWalletCode(CoinTypeEnum.EOS.toString()); MemberWalletCoinlist.add(coin); memberWalletCoinlist.add(coin); coin.setWalletCode(CoinTypeEnum.XRP.toString()); MemberWalletCoinlist.add(coin); memberWalletCoinlist.add(coin); coin.setWalletCode(CoinTypeEnum.ETC.toString()); MemberWalletCoinlist.add(coin); memberWalletCoinlist.add(coin); MemberWalletCoinVo memberWalletCoinVo = new MemberWalletCoinVo(); memberWalletCoinVo.setTotalUsdt(totalUsdt.setScale(4, BigDecimal.ROUND_DOWN)); memberWalletCoinVo.setTotalCny(totalUsdt.multiply(cnyUsdt).setScale(4, BigDecimal.ROUND_DOWN)); memberWalletCoinVo.setWalletCoinEntities(MemberWalletCoinlist); memberWalletCoinVo.setMemberWalletCoinInfoVo(memberWalletCoinlist);; return Result.ok(memberWalletCoinVo); } } catch (Exception e) { @@ -121,27 +132,31 @@ } @Override public Result getWalletCoinById(Long id) { public Result getWalletCoinBySymbol(String symbol) { try { //获取用户ID Long memberId = LoginUserUtils.getAppLoginUser().getId(); MemberWalletCoinEntity walletCoin = memberWalletCoinDao.selectById(id); MemberWalletCoinEntity walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId,symbol); MemberWalletCoinInfoVo memberWalletCoinInfoVo = new MemberWalletCoinInfoVo(); memberWalletCoinInfoVo.setFrozenBalance(walletCoin.getFrozenBalance()); memberWalletCoinInfoVo.setAvailableBalance(walletCoin.getAvailableBalance()); memberWalletCoinInfoVo.setMemberId(memberId); memberWalletCoinInfoVo.setWalletCode(symbol); if(!StrUtil.isEmpty(memberId.toString())) { CnyUsdtExchange cnyUsdtExchange =cnyUsdtExchangeDao.getCNYAndUSDTOne(); BigDecimal cnyUsdt = cnyUsdtExchange.getValue(); BigDecimal total = walletCoin.getAvailableBalance().add(walletCoin.getFrozenBalance()); if(MemberWalletCoinEnum.WALLETCOINCODE.getValue().equals(walletCoin.getWalletCode())) { walletCoin.setTotalBalance(total.multiply(cnyUsdt).setScale(4, BigDecimal.ROUND_DOWN)); memberWalletCoinInfoVo.setTotalBalance(total.multiply(cnyUsdt).setScale(4, BigDecimal.ROUND_DOWN)); }else { BigDecimal closePrice = new BigDecimal("10.0000"); //Double closePrice = symbolsService.getCloseSymbolsBySymbolsName(wallet.getCode()+"/USDT"); walletCoin.setTotalBalance(total.multiply(closePrice).multiply(cnyUsdt).setScale(4, BigDecimal.ROUND_DOWN)); memberWalletCoinInfoVo.setTotalBalance(total.multiply(closePrice).multiply(cnyUsdt).setScale(4, BigDecimal.ROUND_DOWN)); } } return Result.ok(walletCoin); return Result.ok(memberWalletCoinInfoVo); } catch (Exception e) { e.printStackTrace(); return Result.fail(MessageSourceUtils.getString("member_service_0003")); @@ -151,8 +166,43 @@ @Override public Result getWalletContractById() { return Result.fail(MessageSourceUtils.getString("member_service_0002")); //获取用户ID Long memberId = LoginUserUtils.getAppLoginUser().getId(); CnyUsdtExchange cnyUsdtExchange =cnyUsdtExchangeDao.getCNYAndUSDTOne(); BigDecimal cnyUsdt = cnyUsdtExchange.getValue(); String walletCode = MemberWalletCoinEnum.WALLETCOINCODE.getValue(); MemberWalletContractEntity walletContract = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberId, walletCode); if(ObjectUtil.isEmpty(walletContract)) { return Result.fail(MessageSourceUtils.getString("member_service_0001")); } /** * todo */ //获取当前的合约持仓 //获取实时盈亏 BigDecimal profitAndLoss = new BigDecimal("50.000"); //获取总付款 BigDecimal totalPayment = new BigDecimal("50.000"); walletContract.setFrozenBalance(totalPayment.setScale(4, BigDecimal.ROUND_DOWN)); BigDecimal lastTotalBalance = new BigDecimal("0"); BigDecimal totalBalance = walletContract.getTotalBalance(); lastTotalBalance = totalBalance.add(profitAndLoss); if(lastTotalBalance.compareTo(BigDecimal.ZERO) < 0) { lastTotalBalance = new BigDecimal("0"); } walletContract.setAvailableBalance(walletContract.getAvailableBalance()); walletContract.setTotalBalance(lastTotalBalance.setScale(4, BigDecimal.ROUND_DOWN)); Map<String,Object> map = new HashMap<String, Object>(); map.put(MemberWalletCoinEnum.WALLETCOINUSDT.getValue(), lastTotalBalance.setScale(4, BigDecimal.ROUND_DOWN)); map.put(MemberWalletCoinEnum.WALLETCONTRACT.getValue(), walletContract); map.put(MemberWalletCoinEnum.WALLETCOINCNY.getValue(), lastTotalBalance.multiply(cnyUsdt).setScale(4, BigDecimal.ROUND_DOWN)); return Result.ok(map); } @Override @@ -276,11 +326,13 @@ } @Override public Result findWalletContractBySymbol(String symbol) { /** * ---todo */ return null; public Result findWalletContractBySymbol() { //获取用户ID Long memberId = LoginUserUtils.getAppLoginUser().getId(); String walletCode = MemberWalletCoinEnum.WALLETCOINCODE.getValue(); MemberWalletContractEntity walletContract = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberId, walletCode); return Result.ok(walletContract); } @Override @@ -426,7 +478,7 @@ walletAgent.setAvailableBalance(availableBalance); Map<String,Object> map = new HashMap<String, Object>(); map.put(MemberWalletCoinEnum.WALLETCOINUSDT.getValue(), availableBalance.setScale(4, BigDecimal.ROUND_DOWN)); map.put(MemberWalletCoinEnum.WALLETAGENTCNY.getValue(), walletAgent); map.put(MemberWalletCoinEnum.WALLETAGENT.getValue(), walletAgent); map.put(MemberWalletCoinEnum.WALLETCOINCNY.getValue(), multiply.setScale(4, BigDecimal.ROUND_DOWN)); return Result.ok(map); } src/main/java/com/xcong/excoin/modules/coin/service/impl/OrderCoinServiceImpl.java
New file @@ -0,0 +1,109 @@ 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.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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.OrderCoinsEntity; 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, OrderCoinsEntity> 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) { return Result.ok(MessageSourceUtils.getString("order_service_0011")); } } src/main/java/com/xcong/excoin/modules/home/mapper/MemberQuickBuySaleEntityMapper.java
@@ -1,5 +1,6 @@ package com.xcong.excoin.modules.home.mapper; import com.xcong.excoin.modules.home.entity.MemberQuickBuySaleEntity; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -13,9 +14,8 @@ public static final MemberQuickBuySaleEntityMapper INSTANCE = Mappers.getMapper(MemberQuickBuySaleEntityMapper.class); public abstract MemberQuickBuySaleEntityMapper dtoToEntity(MemberQuickBuySaleDto dto); public abstract MemberQuickBuySaleVo entityToVo(MemberQuickBuySaleEntity memberQuickBuySaleEntity); public abstract MemberQuickBuySaleEntity dtoToEntity(MemberQuickBuySaleDto dto); } src/main/java/com/xcong/excoin/modules/member/entity/MemberSelectSymbolsEntity.java
New file @@ -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; } src/main/java/com/xcong/excoin/modules/test/controller/TestUserController.java
@@ -11,10 +11,7 @@ import com.xcong.excoin.modules.test.service.TestUserService; import com.xcong.excoin.modules.test.vo.TestUserVo; import com.xcong.excoin.utils.MessageSourceUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; import io.swagger.annotations.*; import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.validation.annotation.Validated; src/main/java/com/xcong/excoin/utils/SpringContextHolder.java
@@ -5,6 +5,7 @@ import org.springframework.beans.factory.DisposableBean; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; /** * @Author wzy @@ -12,6 +13,7 @@ * @email wangdoubleone@gmail.com * @Version V1.0 **/ @Component @Slf4j public class SpringContextHolder implements ApplicationContextAware, DisposableBean { src/main/resources/application.yml
@@ -48,7 +48,7 @@ ## Redis数据库索引(默认为0) database: 1 ## Redis服务器地址 host: 121.40.158.8 host: 47.114.114.219 ## Redis服务器连接端口 port: 6379 ## Redis服务器连接密码(默认为空) src/main/resources/mapper/member/MemberSelectSymbolsDao.xml
New file @@ -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> src/main/resources/mapper/platform/TradeSettingDao.xml
New file @@ -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>