src/main/java/com/xcong/excoin/modules/coin/controller/OrderCoinController.java
@@ -161,4 +161,14 @@ return orderCoinService.findCollectList(); } /** * 币种搜索 * @return */ @ApiOperation(value = "币种搜索", notes = "币种搜索") @GetMapping(value = "/searchSymbolResultList") public Result searchSymbolResultList() { return orderCoinService.searchSymbolResultList(); } } src/main/java/com/xcong/excoin/modules/coin/service/OrderCoinService.java
@@ -29,4 +29,6 @@ public Result findCollectList(); public Result searchSymbolResultList(); } src/main/java/com/xcong/excoin/modules/coin/service/impl/CoinServiceImpl.java
@@ -87,7 +87,7 @@ totalUsdt = walletCoin.getAvailableBalance().add(walletCoin.getFrozenBalance()); totalUsdts = totalUsdts.add(totalUsdt); BigDecimal totalCny = totalUsdt.multiply(cnyUsdt); walletCoin.setTotalBalance(totalCny.setScale(4, BigDecimal.ROUND_DOWN)); walletCoin.setTotalBalance(totalCny); } else { BigDecimal amount = walletCoin.getAvailableBalance().add(walletCoin.getFrozenBalance()); // 获取最新价 @@ -96,7 +96,7 @@ //Double closePrice = symbolsService.getCloseSymbolsBySymbolsName(walletCoin.getWalletCode()+"/USDT"); totalUsdt = totalUsdt.add(amount.multiply(closePrice)); totalUsdts = totalUsdts.add(totalUsdt); walletCoin.setTotalBalance(totalUsdt.multiply(cnyUsdt).setScale(4, BigDecimal.ROUND_DOWN)); walletCoin.setTotalBalance(totalUsdt.multiply(cnyUsdt)); } } } @@ -235,10 +235,10 @@ MemberWalletContractEntity walletContract = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberId, walletCode); BigDecimal availableBalance = walletContract.getAvailableBalance(); BigDecimal add = availableBalance.add(balance); walletContract.setAvailableBalance(add.setScale(4, BigDecimal.ROUND_DOWN)); walletContract.setAvailableBalance(add); BigDecimal totalBalance = walletContract.getTotalBalance(); BigDecimal totalBigDecimal = totalBalance.add(balance); walletContract.setTotalBalance(totalBigDecimal.setScale(4, BigDecimal.ROUND_DOWN)); walletContract.setTotalBalance(totalBigDecimal); int updateWalletContractById = memberWalletContractDao.updateById(walletContract); if (updateWalletContractById < 1) { return Result.fail(MessageSourceUtils.getString("member_service_0096")); @@ -247,7 +247,7 @@ MemberAccountMoneyChange memberAccountRecord = new MemberAccountMoneyChange(); memberAccountRecord.setContent(MemberWalletCoinEnum.CONTENTTOCONTRACT.getValue()); memberAccountRecord.setMemberId(memberId); memberAccountRecord.setAmount(balance.negate().setScale(4, BigDecimal.ROUND_DOWN)); memberAccountRecord.setAmount(balance.negate()); memberAccountRecord.setStatus(MemberAccountMoneyChange.STATUS_SUCCESS_INTEGER); memberAccountRecord.setSymbol(MemberWalletCoinEnum.WALLETCOINCODE.getValue()); memberAccountRecord.setType(MemberAccountMoneyChange.TYPE_WALLET_COIN); @@ -256,7 +256,7 @@ //添加合约资金划转历史记录 memberAccountRecord.setContent(MemberWalletCoinEnum.CONTENTFROMWALLETCOIN.getValue()); memberAccountRecord.setSymbol(MemberWalletCoinEnum.WALLETCOINCODE.getValue()); memberAccountRecord.setAmount(balance.setScale(4, BigDecimal.ROUND_DOWN)); memberAccountRecord.setAmount(balance); memberAccountRecord.setType(MemberAccountMoneyChange.TYPE_WALLET_CONTRACT); memberAccountMoneyChangeDao.insert(memberAccountRecord); } @@ -283,8 +283,8 @@ BigDecimal totalBalance = walletContract.getTotalBalance(); BigDecimal totalSubtract = totalBalance.subtract(balance); walletContract.setAvailableBalance(availableSubtract.setScale(4, BigDecimal.ROUND_DOWN)); walletContract.setTotalBalance(totalSubtract.setScale(4, BigDecimal.ROUND_DOWN)); walletContract.setAvailableBalance(availableSubtract); walletContract.setTotalBalance(totalSubtract); int updateWalletCoinById = memberWalletContractDao.updateById(walletContract); if (updateWalletCoinById < 1) { return Result.fail(MessageSourceUtils.getString("member_service_0096")); @@ -296,8 +296,8 @@ BigDecimal walletCoinTotalBalance = walletCoin.getTotalBalance(); BigDecimal CoinTotalBalance = walletCoinTotalBalance.add(balance); walletCoin.setAvailableBalance(CoinAvailableBalance.setScale(4, BigDecimal.ROUND_DOWN)); walletCoin.setTotalBalance(CoinTotalBalance.setScale(4, BigDecimal.ROUND_DOWN)); walletCoin.setAvailableBalance(CoinAvailableBalance); walletCoin.setTotalBalance(CoinTotalBalance); int updateById = memberWalletCoinDao.updateById(walletCoin); if (updateById < 1) { return Result.fail(MessageSourceUtils.getString("member_service_0096")); @@ -307,7 +307,7 @@ MemberAccountMoneyChange memberAccountRecord = new MemberAccountMoneyChange(); memberAccountRecord.setContent(MemberWalletCoinEnum.CONTENTTOWALLETCOIN.getValue()); memberAccountRecord.setMemberId(memberId); memberAccountRecord.setAmount(balance.negate().setScale(4, BigDecimal.ROUND_DOWN)); memberAccountRecord.setAmount(balance.negate()); memberAccountRecord.setStatus(MemberAccountMoneyChange.STATUS_SUCCESS_INTEGER); memberAccountRecord.setSymbol(walletCode); memberAccountRecord.setType(MemberAccountMoneyChange.TYPE_WALLET_CONTRACT); @@ -317,7 +317,7 @@ memberAccountRecord.setContent(MemberWalletCoinEnum.CONTENTFROMCONTRACT.getValue()); memberAccountRecord.setSymbol(walletCode); memberAccountRecord.setType(MemberAccountMoneyChange.TYPE_WALLET_COIN); memberAccountRecord.setAmount(balance.setScale(4, BigDecimal.ROUND_DOWN)); memberAccountRecord.setAmount(balance); memberAccountMoneyChangeDao.insert(memberAccountRecord); return Result.ok(MessageSourceUtils.getString("member_service_0006")); } @@ -435,8 +435,8 @@ return Result.fail(MessageSourceUtils.getString("member_service_0008")); } walletAgent.setAvailableBalance(available.setScale(4, BigDecimal.ROUND_DOWN)); walletAgent.setTotalBalance(total.setScale(4, BigDecimal.ROUND_DOWN)); walletAgent.setAvailableBalance(available); walletAgent.setTotalBalance(total); int i = memberWalletAgentDao.updateById(walletAgent); if (i < 1) { @@ -450,8 +450,8 @@ BigDecimal walletCoinAvailableBalance = walletCoin.getAvailableBalance(); BigDecimal walletCoinTotalBalance = walletCoin.getTotalBalance(); walletCoin.setAvailableBalance(walletCoinAvailableBalance.add(balance).setScale(4, BigDecimal.ROUND_DOWN)); walletCoin.setTotalBalance(walletCoinTotalBalance.add(balance).setScale(4, BigDecimal.ROUND_DOWN)); walletCoin.setAvailableBalance(walletCoinAvailableBalance.add(balance)); walletCoin.setTotalBalance(walletCoinTotalBalance.add(balance)); int updateById = memberWalletCoinDao.updateById(walletCoin); if (updateById < 1) { @@ -463,7 +463,7 @@ memberAccountRecord.setSymbol(walletCode); memberAccountRecord.setContent(MemberWalletCoinEnum.CONTENTFROMAGENT.getValue()); memberAccountRecord.setType(MemberAccountMoneyChange.TYPE_WALLET_COIN); memberAccountRecord.setAmount(balance.setScale(4, BigDecimal.ROUND_DOWN)); memberAccountRecord.setAmount(balance); memberAccountMoneyChangeDao.insert(memberAccountRecord); memberAccountRecord.setContent(MemberWalletCoinEnum.CONTENTTOWALLETCOIN.getValue()); @@ -473,8 +473,8 @@ BigDecimal walletContractAvailableBalance = walletContract.getAvailableBalance(); BigDecimal walletContractTotalBalance = walletContract.getTotalBalance(); walletContract.setAvailableBalance(walletContractAvailableBalance.add(balance).setScale(4, BigDecimal.ROUND_DOWN)); walletContract.setTotalBalance(walletContractTotalBalance.add(balance).setScale(4, BigDecimal.ROUND_DOWN)); walletContract.setAvailableBalance(walletContractAvailableBalance.add(balance)); walletContract.setTotalBalance(walletContractTotalBalance.add(balance)); int updateById = memberWalletContractDao.updateById(walletContract); if (updateById < 1) { @@ -487,11 +487,11 @@ memberAccountRecord.setSymbol(walletCode); memberAccountRecord.setContent(MemberWalletCoinEnum.CONTENTFROMAGENT.getValue()); memberAccountRecord.setType(MemberAccountMoneyChange.TYPE_WALLET_CONTRACT); memberAccountRecord.setAmount(balance.setScale(4, BigDecimal.ROUND_DOWN)); memberAccountRecord.setAmount(balance); memberAccountMoneyChangeDao.insert(memberAccountRecord); memberAccountRecord.setContent(MemberWalletCoinEnum.CONTENTTOCONTRACT.getValue()); } memberAccountRecord.setAmount(balance.negate().setScale(4, BigDecimal.ROUND_DOWN)); memberAccountRecord.setAmount(balance.negate()); memberAccountRecord.setType(MemberAccountMoneyChange.TYPE_WALLET_AGENT); memberAccountMoneyChangeDao.insert(memberAccountRecord); src/main/java/com/xcong/excoin/modules/coin/service/impl/OrderCoinServiceImpl.java
@@ -13,9 +13,12 @@ import javax.annotation.Resource; import com.xcong.excoin.modules.platform.entity.PlatformCnyUsdtExchangeEntity; import com.xcong.excoin.modules.platform.entity.PlatformSymbolsCoinEntity; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.xcong.excoin.common.LoginUserUtils; import com.xcong.excoin.common.enumerates.MemberWalletCoinEnum; @@ -41,6 +44,7 @@ import com.xcong.excoin.modules.member.entity.MemberSelectSymbolsEntity; import com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity; import com.xcong.excoin.modules.platform.dao.PlatformCnyUsdtExchangeDao; import com.xcong.excoin.modules.platform.dao.PlatformSymbolsCoinDao; import com.xcong.excoin.modules.platform.dao.TradeSettingDao; import com.xcong.excoin.modules.platform.entity.PlatformTradeSettingEntity; import com.xcong.excoin.utils.CoinTypeConvert; @@ -71,6 +75,8 @@ MemberAccountFlowEntityDao memberAccountFlowEntityDao; @Resource RedisUtils redisUtils; @Resource PlatformSymbolsCoinDao platformSymbolsCoinDao; @Override public String generateSimpleSerialno(String userId) { @@ -197,15 +203,15 @@ order.setOrderNo(generateSimpleSerialno(memberId.toString())); order.setOrderType(type); order.setSymbol(symbol); order.setMarkPrice(nowPrice.setScale(4, BigDecimal.ROUND_DOWN)); order.setEntrustCnt(amount.setScale(4, BigDecimal.ROUND_DOWN)); order.setEntrustPrice(price.setScale(4, BigDecimal.ROUND_DOWN)); order.setDealCnt(amount.setScale(4, BigDecimal.ROUND_DOWN)); order.setDealPrice(price.setScale(4, BigDecimal.ROUND_DOWN)); order.setDealAmount(totalPayPrice.setScale(4, BigDecimal.ROUND_DOWN)); order.setMarkPrice(nowPrice); order.setEntrustCnt(amount); order.setEntrustPrice(price); order.setDealCnt(amount); order.setDealPrice(price); order.setDealAmount(totalPayPrice); order.setOrderStatus(OrderCoinsEntity.ORDERSTATUS_DODING); order.setTradeType(tradeType); order.setFeeAmount(closingPrice.setScale(4, BigDecimal.ROUND_DOWN)); order.setFeeAmount(closingPrice); orderCoinsDao.insert(order); //更新用户钱包信息 @@ -214,15 +220,15 @@ //如果是买入,所对应的币种增加,USDT账户减少金额 BigDecimal availableBalance = walletCoinUsdt.getAvailableBalance().subtract(totalPayPrice); BigDecimal frozenBalance = walletCoinUsdt.getFrozenBalance().add(totalPayPrice); walletCoinUsdt.setAvailableBalance(availableBalance.setScale(4, BigDecimal.ROUND_DOWN)); walletCoinUsdt.setFrozenBalance(frozenBalance.setScale(4, BigDecimal.ROUND_DOWN)); walletCoinUsdt.setAvailableBalance(availableBalance); walletCoinUsdt.setFrozenBalance(frozenBalance); memberWalletCoinDao.updateById(walletCoinUsdt); }else { //如果是卖出,币种减少,USDT增加 BigDecimal availableBalance = walletCoin.getAvailableBalance().subtract(amount); BigDecimal frozenBalance = walletCoin.getFrozenBalance().add(amount); walletCoin.setAvailableBalance(availableBalance.setScale(4, BigDecimal.ROUND_DOWN)); walletCoin.setFrozenBalance(frozenBalance.setScale(4, BigDecimal.ROUND_DOWN)); walletCoin.setAvailableBalance(availableBalance); walletCoin.setFrozenBalance(frozenBalance); memberWalletCoinDao.updateById(walletCoin); } } else { @@ -231,15 +237,15 @@ order.setOrderNo(generateSimpleSerialno(memberId.toString())); order.setOrderType(type); order.setSymbol(symbol); order.setMarkPrice(nowPrice.setScale(4, BigDecimal.ROUND_DOWN)); order.setEntrustCnt(amount.setScale(4, BigDecimal.ROUND_DOWN)); order.setEntrustPrice(price.setScale(4, BigDecimal.ROUND_DOWN)); order.setDealCnt(amount.setScale(4, BigDecimal.ROUND_DOWN)); order.setDealPrice(price.setScale(4, BigDecimal.ROUND_DOWN)); order.setDealAmount(totalPayPrice.setScale(4, BigDecimal.ROUND_DOWN)); order.setMarkPrice(nowPrice); order.setEntrustCnt(amount); order.setEntrustPrice(price); order.setDealCnt(amount); order.setDealPrice(price); order.setDealAmount(totalPayPrice); order.setOrderStatus(OrderCoinsEntity.ORDERSTATUS_DONE); order.setTradeType(tradeType); order.setFeeAmount(closingPrice.setScale(4, BigDecimal.ROUND_DOWN)); order.setFeeAmount(closingPrice); orderCoinsDao.insert(order); OrderCoinsDealEntity detail = new OrderCoinsDealEntity(); @@ -249,29 +255,29 @@ detail.setOrderType(type); detail.setTradeType(tradeType); detail.setSymbol(symbol); detail.setSymbolCnt(amount.setScale(4, BigDecimal.ROUND_DOWN)); detail.setEntrustPrice(price.setScale(4, BigDecimal.ROUND_DOWN)); detail.setDealPrice(price.setScale(4, BigDecimal.ROUND_DOWN)); detail.setDealAmount(totalPayPrice.setScale(4, BigDecimal.ROUND_DOWN)); detail.setFeeAmount(closingPrice.setScale(4, BigDecimal.ROUND_DOWN)); detail.setSymbolCnt(amount); detail.setEntrustPrice(price); detail.setDealPrice(price); detail.setDealAmount(totalPayPrice); detail.setFeeAmount(closingPrice); detail.setOrderStatus(OrderCoinsDealEntity.ORDERSTATUS_DONE); orderCoinDealDao.insert(detail); if(OrderCoinsEntity.ORDERTYPE_BUY.equals(type)) { //如果是买入,所对应的币种增加,USDT账户减少金额 // 更新用户的可用金额 walletCoin.setAvailableBalance(walletCoin.getAvailableBalance().add(amount).setScale(4, BigDecimal.ROUND_DOWN)); walletCoin.setAvailableBalance(walletCoin.getAvailableBalance().add(amount)); memberWalletCoinDao.updateById(walletCoin); walletCoinUsdt.setAvailableBalance(walletCoinUsdt.getAvailableBalance().subtract(totalPayPrice).setScale(4, BigDecimal.ROUND_DOWN)); walletCoinUsdt.setAvailableBalance(walletCoinUsdt.getAvailableBalance().subtract(totalPayPrice)); memberWalletCoinDao.updateById(walletCoinUsdt); }else { //如果是卖出,币种减少,USDT增加 walletCoin.setAvailableBalance(walletCoin.getAvailableBalance().subtract(amount).setScale(4, BigDecimal.ROUND_DOWN)); walletCoin.setAvailableBalance(walletCoin.getAvailableBalance().subtract(amount)); memberWalletCoinDao.updateById(walletCoin); BigDecimal subtract = totalPayPrice.subtract(closingPrice).subtract(closingPrice); walletCoinUsdt.setAvailableBalance(walletCoinUsdt.getAvailableBalance().add(subtract).setScale(4, BigDecimal.ROUND_DOWN)); walletCoinUsdt.setAvailableBalance(walletCoinUsdt.getAvailableBalance().add(subtract)); memberWalletCoinDao.updateById(walletCoinUsdt); } } @@ -281,14 +287,14 @@ if (OrderCoinsEntity.ORDERTYPE_BUY.equals(type)) { record.setPrice(totalPayPrice.setScale(4, BigDecimal.ROUND_DOWN)); record.setSource(MemberAccountFlowEntity.SOURCE_BUY+symbol); record.setRemark(MemberAccountFlowEntity.REMARK_BUY+symbol+":"+amount.setScale(4, BigDecimal.ROUND_DOWN)); record.setRemark(MemberAccountFlowEntity.REMARK_BUY+symbol+":"+amount); } else { record.setPrice(totalPayPrice.negate().setScale(4, BigDecimal.ROUND_DOWN)); record.setSource(MemberAccountFlowEntity.SOURCE_SALE+symbol); record.setRemark(MemberAccountFlowEntity.REMARK_SALE+symbol+":"+amount.setScale(4, BigDecimal.ROUND_DOWN)); record.setRemark(MemberAccountFlowEntity.REMARK_SALE+symbol+":"+amount); } record.setSymbol(symbol); record.setBalance(walletCoinUsdt.getAvailableBalance().setScale(4, BigDecimal.ROUND_DOWN)); record.setBalance(walletCoinUsdt.getAvailableBalance()); memberAccountFlowEntityDao.insert(record); @@ -337,10 +343,10 @@ detail.setSymbol(symbol); detail.setOrderStatus(OrderCoinsDealEntity.ORDERSTATUS_CANCEL); detail.setSymbolCnt(orderCoinsEntity.getEntrustCnt()); detail.setEntrustPrice(orderCoinsEntity.getEntrustPrice().setScale(4, BigDecimal.ROUND_DOWN)); detail.setDealPrice(orderCoinsEntity.getDealPrice().setScale(4, BigDecimal.ROUND_DOWN)); detail.setDealAmount(orderCoinsEntity.getDealAmount().setScale(4, BigDecimal.ROUND_DOWN)); detail.setFeeAmount(orderCoinsEntity.getFeeAmount().setScale(4, BigDecimal.ROUND_DOWN)); detail.setEntrustPrice(orderCoinsEntity.getEntrustPrice()); detail.setDealPrice(orderCoinsEntity.getDealPrice()); detail.setDealAmount(orderCoinsEntity.getDealAmount()); detail.setFeeAmount(orderCoinsEntity.getFeeAmount()); orderCoinDealDao.insert(detail); if(OrderCoinsEntity.ORDERTYPE_BUY.equals(orderCoinsEntity.getOrderType())) { @@ -353,14 +359,14 @@ //返还金额=开仓价*未成交数量+手续费 BigDecimal returnBalance = orderCoinsEntity.getDealAmount(); walletCoin.setAvailableBalance(walletCoin.getAvailableBalance().add(returnBalance).setScale(4, BigDecimal.ROUND_DOWN)); walletCoin.setFrozenBalance(walletCoin.getFrozenBalance().subtract(returnBalance).setScale(4, BigDecimal.ROUND_DOWN)); walletCoin.setAvailableBalance(walletCoin.getAvailableBalance().add(returnBalance)); walletCoin.setFrozenBalance(walletCoin.getFrozenBalance().subtract(returnBalance)); memberWalletCoinDao.updateById(walletCoin); // 流水记录 MemberAccountFlowEntity record = new MemberAccountFlowEntity(); record.setSource(MemberAccountFlowEntity.SOURCE_CANCEL); record.setRemark(MemberAccountFlowEntity.REMARK_CANCEL+symbol+MemberAccountFlowEntity.REMARK_RETURNBALANCE+returnBalance); record.setBalance(walletCoin.getAvailableBalance().setScale(4, BigDecimal.ROUND_DOWN)); record.setBalance(walletCoin.getAvailableBalance()); record.setMemberId(memberId); record.setSymbol(symbol); record.setPrice(returnBalance); @@ -373,17 +379,17 @@ if (ObjectUtil.isNotEmpty(walletCoin)) { BigDecimal returnBalance = orderCoinsEntity.getEntrustCnt(); walletCoin.setAvailableBalance(walletCoin.getAvailableBalance().add(returnBalance).setScale(4, BigDecimal.ROUND_DOWN)); walletCoin.setFrozenBalance(walletCoin.getFrozenBalance().subtract(returnBalance).setScale(4, BigDecimal.ROUND_DOWN)); walletCoin.setAvailableBalance(walletCoin.getAvailableBalance().add(returnBalance)); walletCoin.setFrozenBalance(walletCoin.getFrozenBalance().subtract(returnBalance)); memberWalletCoinDao.updateById(walletCoin); // 流水记录 MemberAccountFlowEntity record = new MemberAccountFlowEntity(); record.setSource(MemberAccountFlowEntity.SOURCE_CANCEL); record.setRemark(MemberAccountFlowEntity.REMARK_CANCEL+symbol+MemberAccountFlowEntity.REMARK_RETURNBALANCE+returnBalance); record.setBalance(walletCoin.getAvailableBalance().setScale(4, BigDecimal.ROUND_DOWN)); record.setBalance(walletCoin.getAvailableBalance()); record.setMemberId(memberId); record.setSymbol(symbol); record.setPrice(walletCoin.getFrozenBalance().setScale(4, BigDecimal.ROUND_DOWN)); record.setPrice(walletCoin.getFrozenBalance()); memberAccountFlowEntityDao.insert(record); return Result.ok(MessageSourceUtils.getString("order_service_0013")); } @@ -476,4 +482,33 @@ return Result.ok(findCollectListVo); } @Override public Result searchSymbolResultList() { //获取用户ID Long memberId = LoginUserUtils.getAppLoginUser().getId(); FindCollectListVo findCollectListVo = new FindCollectListVo(); List<MemberSelectSymbolsVo> list = new ArrayList<>(); Map<String, Object> columnMap = new HashMap<>(); List<PlatformSymbolsCoinEntity> selectByMap = platformSymbolsCoinDao.selectByMap(columnMap); List<MemberSelectSymbolsEntity> selectSymbolByMemIdAndSymbol = memberSelectSymbolsDao.selectSymbolByMemId(memberId); for(PlatformSymbolsCoinEntity platformSymbolsCoinEntity : selectByMap) { MemberSelectSymbolsVo memberSelectSymbolsVo = new MemberSelectSymbolsVo(); memberSelectSymbolsVo.setSymbol(platformSymbolsCoinEntity.getName()); if(CollUtil.isNotEmpty(selectSymbolByMemIdAndSymbol)) { for(MemberSelectSymbolsEntity memberSelectSymbolsEntity : selectSymbolByMemIdAndSymbol) { if(platformSymbolsCoinEntity.getName().equals(memberSelectSymbolsEntity.getSymbol())) { memberSelectSymbolsVo.setIsCollect(MemberSelectSymbolsVo.ISCOLLECT_YES); } } }else { memberSelectSymbolsVo.setIsCollect(MemberSelectSymbolsVo.ISCOLLECT_NO); } list.add(memberSelectSymbolsVo); } findCollectListVo.setMemberSelectSymbolsVo(list); return Result.ok(findCollectListVo); } } src/main/java/com/xcong/excoin/modules/contract/controller/ContractOrderController.java
@@ -95,9 +95,15 @@ } @ApiOperation(value = "调整杠杆") @GetMapping(value = "/changeLeverRate") @PostMapping(value = "/changeLeverRate") public Result changeLeverRate(@RequestBody @Validated ChangeLeverRateDto changeLeverRateDto) { return contractHoldOrderService.changeLeverRate(changeLeverRateDto); } @ApiOperation(value = "查询历史委托订单详情") @GetMapping(value = "/findOrderDetailById") public Result findOrderDetailById(@ApiParam(name = "id", value = "订单id", required = true, example = "1") @RequestParam(value = "id") Long id) { return contractHoldOrderService.findOrderDetailById(id); } } src/main/java/com/xcong/excoin/modules/contract/dao/ContractOrderDao.java
@@ -4,11 +4,16 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.xcong.excoin.modules.contract.entity.ContractOrderEntity; import com.xcong.excoin.modules.contract.parameter.dto.OrderListDto; import com.xcong.excoin.modules.contract.parameter.vo.OrderListVo; import org.apache.ibatis.annotations.Param; /** * @author helius */ public interface ContractOrderDao extends BaseMapper<ContractOrderEntity> { public IPage<ContractOrderEntity> selectContractOrderInPage(Page<ContractOrderEntity> page, Long memberId); public IPage<ContractOrderEntity> selectContractOrderInPage(Page<ContractOrderEntity> page, @Param("record") ContractOrderEntity contractOrderEntity); public ContractOrderEntity selectOrderDetailByIdAndMemberId(@Param("id") Long id, @Param("memberId") Long memberId); } src/main/java/com/xcong/excoin/modules/contract/entity/ContractOrderEntity.java
@@ -1,5 +1,8 @@ package com.xcong.excoin.modules.contract.entity; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.xcong.excoin.common.system.base.BaseEntity; import lombok.Data; @@ -27,11 +30,15 @@ */ public static final int TRADE_TYPE_LIMIT_PRICE = 2; /** * 订单状态 撤单 */ public static final int ORDER_STATUS_CANCEL = 2; /** * 订单类型 撤单 * 订单状态 成交 */ public static final int ORDER_TYPE_CANCEL = -1; public static final int ORDER_STATUS_SUCCESS = 1; /** * 订单类型 开多 @@ -75,11 +82,16 @@ private int tradeType; /** * 订单类型 - 0撤单,1开多,2开空,3平多,4平空 * 订单类型 - 1开多,2开空,3平多,4平空 */ private int orderType; /** * 订单状态 - 1成交 2撤单 */ private int orderStatus = 1; /** * 委托开仓价 */ private BigDecimal entrustOpeningPrice; src/main/java/com/xcong/excoin/modules/contract/mapper/ContractEntrustOrderEntityMapper.java
@@ -24,6 +24,7 @@ @Mapping(source = "entrustPrice", target = "entrustOpeningPrice") @Mapping(source = "createTime", target = "entrustTime") @Mapping(source = "entrustAmount", target = "prePaymentAmount") @Mapping(source = "entrustType", target = "orderType") public abstract ContractOrderEntity entrustOrderToOrder(ContractEntrustOrderEntity orderEntity); @Mapping(source = "createTime", target = "entrustTime") src/main/java/com/xcong/excoin/modules/contract/mapper/ContractHoldOrderEntityMapper.java
@@ -22,5 +22,6 @@ public abstract HoldOrderListVo holdOrderToDto(ContractHoldOrderEntity holdOrderEntity); @Mapping(target = "openingTime", source = "createTime") public abstract HoldOrderDetailVo holdOrderToOrderDetailVo(ContractHoldOrderEntity holdOrderEntity); } src/main/java/com/xcong/excoin/modules/contract/mapper/ContractOrderEntityMapper.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.xcong.excoin.modules.contract.entity.ContractOrderEntity; import com.xcong.excoin.modules.contract.parameter.vo.OrderDetailVo; import com.xcong.excoin.modules.contract.parameter.vo.OrderListVo; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -22,4 +23,6 @@ public abstract List<OrderListVo> orderEntitiesToOrderListVo(List<ContractOrderEntity> orderEntities); public abstract Page<OrderListVo> pageEntityToPageVo(IPage<ContractOrderEntity> orderEntityIPage); public abstract OrderDetailVo entityToDetailVo(ContractOrderEntity orderEntity); } src/main/java/com/xcong/excoin/modules/contract/parameter/dto/OrderListDto.java
@@ -24,4 +24,8 @@ @ApiModelProperty(value = "每页数量", example = "10") private int pageSize; @NotNull @ApiModelProperty(value = "币种", example = "BTC/USDT") private String symbol; } src/main/java/com/xcong/excoin/modules/contract/parameter/vo/HoldOrderDetailVo.java
@@ -59,4 +59,8 @@ @ApiModelProperty("止盈价") private BigDecimal stopProfitPrice; @ApiModelProperty("倍率杠杆") private int leverRatio; } src/main/java/com/xcong/excoin/modules/contract/parameter/vo/OrderDetailVo.java
New file @@ -0,0 +1,81 @@ package com.xcong.excoin.modules.contract.parameter.vo; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.util.Date; /** * @author wzy * @date 2020-06-05 **/ @Data @ApiModel(value = "OrderDetailVo", description = "历史委托订单详情接口返回参数类") public class OrderDetailVo { @ApiModelProperty("交易类型 1-市价2-限价") private int tradeType; @ApiModelProperty("订单类型 -1撤单,1开多,2开空,3平多,4平空") private int orderType; @ApiModelProperty("订单编号") private String orderNo; @ApiModelProperty("委托开仓价") private BigDecimal entrustOpeningPrice; @ApiModelProperty("委托时间") private Date entrustTime; @ApiModelProperty("币种") private String symbol; @ApiModelProperty("张数") private int symbolCnt; @ApiModelProperty("平仓价") private BigDecimal closingPrice; @ApiModelProperty("平仓手续费") private BigDecimal closingFeeAmount; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @ApiModelProperty("平仓时间") private Date closingTime; @ApiModelProperty("平仓类型 2平多3平空4爆仓平多5爆仓平空6止盈平多7止盈平空8止损平多9止损平空") private int closingType; @ApiModelProperty("止损价") private BigDecimal stopLosePrice; @ApiModelProperty("止盈价") private BigDecimal stopProfitPrice; @ApiModelProperty("盈亏金额") private BigDecimal rewardAmount; @ApiModelProperty("盈亏比例") private BigDecimal rewardRatio; @ApiModelProperty("开仓价") private BigDecimal openingPrice; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @ApiModelProperty("开仓时间") private Date openingTime; @ApiModelProperty("开仓手续费") private BigDecimal openingFeeAmount; @ApiModelProperty("保证金") private BigDecimal bondAmount; @ApiModelProperty("持仓费") private BigDecimal holdAmount; } src/main/java/com/xcong/excoin/modules/contract/parameter/vo/OrderListVo.java
@@ -16,9 +16,15 @@ @ApiModel(value = "OrderListVo", description = "历史委托订单接口返回参数类") public class OrderListVo { @ApiModelProperty("订单类型 -1撤单,1开多,2开空,3平多,4平空") @ApiModelProperty("订单ID") private Long id; @ApiModelProperty("订单类型 1开多,2开空,3平多,4平空") private int orderType; @ApiModelProperty("订单状态 1成交 2撤单") private int orderStatus; @ApiModelProperty("开仓均价") private BigDecimal openingPrice; src/main/java/com/xcong/excoin/modules/contract/service/ContractHoldOrderService.java
@@ -40,4 +40,6 @@ public Result findOrderList(OrderListDto orderListDto); public Result findOrderDetailById(Long id); } src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java
@@ -168,11 +168,11 @@ MemberWalletContractEntity walletContractEntity = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), MemberWalletCoinEnum.WALLETCOINCODE.getValue()); BigDecimal total = entrustOrderEntity.getEntrustAmount(); memberWalletContractDao.increaseWalletContractBalanceById(total, null, total.negate(), walletContractEntity.getId()); memberWalletContractDao.increaseWalletContractBalanceById(total, null, entrustOrderEntity.getBondAmount().negate(), walletContractEntity.getId()); ContractOrderEntity orderEntity = ContractEntrustOrderEntityMapper.INSTANCE.entrustOrderToOrder(entrustOrderEntity); orderEntity.setTradeType(ContractOrderEntity.TRADE_TYPE_MARK_PRICE); orderEntity.setOrderType(ContractOrderEntity.ORDER_TYPE_CANCEL); orderEntity.setOrderStatus(ContractOrderEntity.ORDER_STATUS_CANCEL); int i = contractOrderDao.insert(orderEntity); contractEntrustOrderDao.deleteById(entrustOrderEntity.getId()); src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java
@@ -20,10 +20,7 @@ import com.xcong.excoin.modules.contract.mapper.ContractHoldOrderEntityMapper; import com.xcong.excoin.modules.contract.mapper.ContractOrderEntityMapper; import com.xcong.excoin.modules.contract.parameter.dto.*; import com.xcong.excoin.modules.contract.parameter.vo.ContractMoneyInfoVo; import com.xcong.excoin.modules.contract.parameter.vo.HoldOrderDetailVo; import com.xcong.excoin.modules.contract.parameter.vo.HoldOrderListVo; import com.xcong.excoin.modules.contract.parameter.vo.OrderListVo; import com.xcong.excoin.modules.contract.parameter.vo.*; import com.xcong.excoin.modules.contract.service.ContractHoldOrderService; import com.xcong.excoin.modules.member.dao.MemberLevelRateDao; import com.xcong.excoin.modules.member.dao.MemberWalletContractDao; @@ -342,11 +339,11 @@ if (stopProfitPrice != null) { if (newPrice.compareTo(openPrice) > 0) { if (stopProfitPrice.compareTo(openPrice) > 0) { return Result.fail("止损价必须低于开仓价"); return Result.fail("止盈价必须低于开仓价"); } } else { if (stopProfitPrice.compareTo(newPrice) > 0) { return Result.fail("止损价必须低于当前价"); return Result.fail("止盈价必须低于当前价"); } } } @@ -391,7 +388,6 @@ producer.sendPriceOperate(JSONObject.toJSONString(model)); return Result.ok("设置成功"); } return Result.fail("设置失败"); } @@ -546,8 +542,23 @@ public Result findOrderList(OrderListDto orderListDto) { MemberEntity memberEntity = LoginUserUtils.getAppLoginUser(); Page<ContractOrderEntity> page = new Page<>(orderListDto.getPageNum(), orderListDto.getPageSize()); IPage<ContractOrderEntity> list = contractOrderDao.selectContractOrderInPage(page, memberEntity.getId()); ContractOrderEntity contractOrderEntity = new ContractOrderEntity(); contractOrderEntity.setMemberId(memberEntity.getId()); contractOrderEntity.setSymbol(orderListDto.getSymbol()); IPage<ContractOrderEntity> list = contractOrderDao.selectContractOrderInPage(page, contractOrderEntity); Page<OrderListVo> result = ContractOrderEntityMapper.INSTANCE.pageEntityToPageVo(list); return Result.ok(result); } @Override public Result findOrderDetailById(Long id) { MemberEntity memberEntity = LoginUserUtils.getAppLoginUser(); ContractOrderEntity contractOrderEntity = contractOrderDao.selectOrderDetailByIdAndMemberId(id, memberEntity.getId()); if (contractOrderEntity == null) { return Result.fail("订单不存在"); } OrderDetailVo orderDetailVo = ContractOrderEntityMapper.INSTANCE.entityToDetailVo(contractOrderEntity); return Result.ok(orderDetailVo); } } src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java
@@ -191,14 +191,15 @@ BigDecimal totalReturn = BigDecimal.ZERO; contractOrderService.save(contractOrderEntity); contractEntrustOrderService.removeById(order.getId()); contractHoldOrderService.removeById(order.getId()); // 将需要退回的减去手续费 BigDecimal needReturn = prePrice.add(profitLossPrice); //总退回金额=保证金+收益-手续费 totalReturn = needReturn.subtract(contractOrderEntity.getClosingFeeAmount()); // 总的是收益-平仓手续费 BigDecimal totalBalance = profitLossPrice.subtract(contractOrderEntity.getClosingFeeAmount()); memberWalletContractService.increaseWalletContractBalanceById(totalBalance, totalReturn, null, wallet.getId()); memberWalletContractService.increaseWalletContractBalanceById(totalReturn, totalBalance, null, wallet.getId()); // 流水记录 TODO 531e insertAccountFlow(order, wallet, profitLossPrice, "止盈平仓"); @@ -287,8 +288,8 @@ // 更新钱包 // 总的是收益-平仓手续费 BigDecimal totalBalance = profitLossPrice.subtract(contractOrderEntity.getClosingFeeAmount()); memberWalletContractService.increaseWalletContractBalanceById(totalBalance, totalReturn, null, wallet.getId()); memberWalletContractService.increaseWalletContractBalanceById(totalReturn, totalBalance, null, wallet.getId()); insertAccountFlow(order, wallet, profitLossPrice, "止盈平仓"); @@ -369,6 +370,8 @@ contractOrderEntity.setClosingType(8); BigDecimal totalReturn = BigDecimal.ZERO; contractOrderService.save(contractOrderEntity); contractHoldOrderService.removeById(order.getId()); // 将需要退回的减去手续费 BigDecimal needReturn = prePrice.add(profitLossPrice); //总退回金额=保证金+收益-手续费 @@ -376,7 +379,8 @@ // 更新钱包 // 总的是收益-平仓手续费 BigDecimal totalBalance = profitLossPrice.subtract(contractOrderEntity.getClosingFeeAmount()); memberWalletContractService.increaseWalletContractBalanceById(totalBalance, totalReturn, null, wallet.getId()); memberWalletContractService.increaseWalletContractBalanceById(totalReturn, totalBalance, null, wallet.getId()); insertAccountFlow(order, wallet, profitLossPrice, "开多止损平仓"); @@ -420,7 +424,7 @@ String symbol = order.getSymbol(); Long memberId = order.getMemberId(); // 本次需要退回的预付款 BigDecimal prePrice = order.getPrePaymentAmount(); BigDecimal prePrice = order.getBondAmount(); MemberWalletContractEntity wallet = memberWalletContractService.findWalletContractByMemberIdAndSymbol(memberId, "USDT"); if (wallet != null) { @@ -456,6 +460,9 @@ contractOrderEntity.setClosingType(9); BigDecimal totalReturn = BigDecimal.ZERO; contractOrderService.save(contractOrderEntity); contractHoldOrderService.removeById(order.getId()); // 将需要退回的减去手续费 BigDecimal needReturn = prePrice.add(profitLossPrice); //总退回金额=保证金+收益-手续费 @@ -463,7 +470,7 @@ // 更新钱包 // 总的是收益-平仓手续费 BigDecimal totalBalance = profitLossPrice.subtract(contractOrderEntity.getClosingFeeAmount()); memberWalletContractService.increaseWalletContractBalanceById(totalBalance, totalReturn, null, wallet.getId()); memberWalletContractService.increaseWalletContractBalanceById(totalReturn, totalBalance, null, wallet.getId()); insertAccountFlow(order, wallet, profitLossPrice, "开空止损平仓"); @@ -547,6 +554,7 @@ contractOrderEntity.setEntrustOpeningPrice(coinsCoinsOrder.getEntrustPrice()); contractOrderEntity.setEntrustTime(coinsCoinsOrder.getCreateTime()); contractOrderEntity.setOpeningTime(new Date()); contractOrderEntity.setId(null); contractOrderService.save(contractOrderEntity); // 发送爆仓的队列 src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java
@@ -135,7 +135,6 @@ // 计算盈利或亏损后可用金额和总金额应该增加或减少的 BigDecimal addMoney = holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getOpeningFeeAmount()).add(profitOrLoss); memberWalletContractDao.increaseWalletContractBalanceById(addMoney, profitOrLoss.subtract(contractOrderEntity.getOpeningFeeAmount()), null, walletContract.getId()); // 计算佣金 ThreadPoolUtils.calReturnMoney(memberEntity.getId(), contractOrderEntity.getClosingFeeAmount(), contractOrderEntity, AgentReturnEntity.ORDER_TYPE_CLOSE); src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java
@@ -827,8 +827,8 @@ //新增提币记录 MemberCoinWithdrawEntity memberCoinWithdrawEntity = new MemberCoinWithdrawEntity(); memberCoinWithdrawEntity.setAddress(memberSubmitCoinApplyDto.getAddress()); memberCoinWithdrawEntity.setAmount(coinNumber.setScale(4, BigDecimal.ROUND_DOWN)); memberCoinWithdrawEntity.setFeeAmount(memberSubmitCoinApplyDto.getFeeAmount().setScale(4, BigDecimal.ROUND_DOWN)); memberCoinWithdrawEntity.setAmount(coinNumber); memberCoinWithdrawEntity.setFeeAmount(memberSubmitCoinApplyDto.getFeeAmount()); memberCoinWithdrawEntity.setSymbol(memberSubmitCoinApplyDto.getSymbol()); memberCoinWithdrawEntity.setMemberId(memberId); memberCoinWithdrawEntity.setStatus(MemberCoinWithdrawEntity.STATUS_DOING); @@ -844,9 +844,9 @@ } memberCoinWithdrawDao.insert(memberCoinWithdrawEntity); BigDecimal subtract = walletCoin.getAvailableBalance().subtract(coinNumber); walletCoin.setAvailableBalance(subtract.setScale(4, BigDecimal.ROUND_DOWN)); walletCoin.setAvailableBalance(subtract); BigDecimal add = walletCoin.getFrozenBalance().add(coinNumber); walletCoin.setFrozenBalance(add.setScale(4, BigDecimal.ROUND_DOWN)); walletCoin.setFrozenBalance(add); memberWalletCoinDao.updateById(walletCoin); MemberAccountMoneyChange accountRecord = new MemberAccountMoneyChange(); src/main/java/com/xcong/excoin/quartz/job/UsdtCnyExchangePriceUpdateJob.java
@@ -58,9 +58,6 @@ String code = jsonObject.getString("code"); if ("200".equals(code)) { JSONObject jsonData = (JSONObject) jsonObject.get("data"); log.info("{}", jsonData); log.info("{}", jsonData.getDouble("price")); log.info("{}", jsonData.getString("price")); cnyUsdtExchangeDao.updateUsdt(BigDecimal.valueOf(jsonData.getDouble("price"))); } } catch (Exception e) { src/main/resources/application-test.yml
@@ -94,9 +94,9 @@ debug: true redis_expire: 3000 kline-update-job: false newest-price-update-job: false other-job: false rabbit-consumer: false newest-price-update-job: true other-job: true rabbit-consumer: true aliyun: oss: src/main/resources/application.yml
@@ -96,10 +96,10 @@ # k线更新任务控制 kline-update-job: false #最新价任务控制 newest-price-update-job: true newest-price-update-job: false #其他任务控制 other-job: false rabbit-consumer: true rabbit-consumer: false aliyun: oss: src/main/resources/mapper/contract/ContractOrderDao.xml
@@ -4,8 +4,22 @@ <select id="selectContractOrderInPage" resultType="com.xcong.excoin.modules.contract.entity.ContractOrderEntity"> select * from contract_order where member_id=#{memberId} select * from contract_order <if test="record != null"> <where> <if test="record.memberId != null" > and member_id=#{record.memberId} </if> <if test="record.symbol != null and record.symbol != ''"> and symbol = #{record.symbol} </if> </where> </if> order by create_time desc </select> <select id="selectOrderDetailByIdAndMemberId" resultType="com.xcong.excoin.modules.contract.entity.ContractOrderEntity"> select * from contract_order where id=#{id} and member_id=#{memberId} </select> </mapper> src/test/java/com/xcong/excoin/RabbitMqTest.java
@@ -1,5 +1,6 @@ package com.xcong.excoin; import com.xcong.excoin.rabbit.pricequeue.WebsocketPriceService; import com.xcong.excoin.rabbit.producer.TestProducer; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -16,9 +17,17 @@ @Autowired private TestProducer testProducer; @Resource private WebsocketPriceService websocketPriceService; @Test public void sendTestMsg() { testProducer.sendTestMsg("this is test msg"); } @Test public void bombTest() { websocketPriceService.comparePriceDesc("BTC/USDT", "9608"); } }