src/main/java/com/xcong/excoin/configurations/RabbitMqConfig.java
@@ -46,10 +46,10 @@ public static final String QUEUE_COINOUT = "QUEUE_COINOUT_NEW"; //价格操作 public static final String QUEUE_PRICEOPERATE = "QUEUE_PRICEOPERATE"; public static final String QUEUE_PRICEOPERATE = "QUEUE_PRICEOPERATE_NEW"; // 平仓队列 public static final String QUEUE_CLOSETRADE = "QUEUE_CLOSETRADE"; public static final String QUEUE_CLOSETRADE = "QUEUE_CLOSETRADE_NEW"; // 开多止盈路由键 src/main/java/com/xcong/excoin/modules/contract/controller/ContractOrderController.java
@@ -1,12 +1,10 @@ package com.xcong.excoin.modules.contract.controller; import com.xcong.excoin.common.response.Result; import com.xcong.excoin.modules.contract.parameter.dto.ChangeBondDto; import com.xcong.excoin.modules.contract.parameter.dto.ProfitOrLessDto; import com.xcong.excoin.modules.contract.parameter.dto.SubmitOrderDto; import com.xcong.excoin.modules.contract.parameter.dto.SymbolDto; 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.HoldOrderListVo; import com.xcong.excoin.modules.contract.parameter.vo.OrderListVo; import com.xcong.excoin.modules.contract.service.ContractHoldOrderService; import com.xcong.excoin.modules.contract.service.ContractOrderService; import com.xcong.excoin.rabbit.producer.OrderProducer; @@ -48,10 +46,10 @@ return contractHoldOrderService.findHoldOrderList(symbol); } @ApiOperation(value = "未完成--根据Id查询订单详情") @ApiOperation(value = "根据Id查询持仓订单详情") @GetMapping(value = "/findHoldOrderDetail") public Result findHoldOrderDetail(@ApiParam(name = "id", value = "持仓ID", required = true, example = "1") @RequestParam(value = "id") Long id) { return null; return contractHoldOrderService.findHoldOrderDetailById(id); } @ApiOperation(value = "根据Id平仓") @@ -74,14 +72,17 @@ @ApiOperation(value = "调整保证金") @PostMapping(value = "/changeBond") public Result changeBond(ChangeBondDto changeBondDto) { public Result changeBond(@RequestBody @Validated ChangeBondDto changeBondDto) { return contractHoldOrderService.changeBond(changeBondDto); } @ApiOperation(value = "未完成--分页查询历史订单列表") @GetMapping(value = "/findHistoryOrderList") public Result findHistoryOrderList() { return null; @ApiOperation(value = "分页查询历史订单列表") @ApiResponses({ @ApiResponse(code = 0, message = "success", response = OrderListVo.class) }) @PostMapping(value = "/findHistoryOrderList") public Result findHistoryOrderList(@RequestBody @Validated OrderListDto orderListDto) { return contractHoldOrderService.findOrderList(orderListDto); } @ApiOperation(value = "获取合约页面资产信息") @@ -93,4 +94,16 @@ return contractHoldOrderService.findContractMoneyInfo(symbol); } @ApiOperation(value = "调整杠杆") @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
@@ -1,10 +1,17 @@ package com.xcong.excoin.modules.contract.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.xcong.excoin.modules.contract.entity.ContractOrderEntity; import org.apache.ibatis.annotations.Param; /** * @author helius */ public interface ContractOrderDao extends BaseMapper<ContractOrderEntity> { public IPage<ContractOrderEntity> selectContractOrderInPage(Page<ContractOrderEntity> page, Long memberId); public ContractOrderEntity selectOrderDetailByIdAndMemberId(@Param("id") Long id, @Param("memberId") Long memberId); } src/main/java/com/xcong/excoin/modules/contract/mapper/ContractHoldOrderEntityMapper.java
@@ -2,6 +2,7 @@ import com.xcong.excoin.modules.contract.entity.ContractHoldOrderEntity; import com.xcong.excoin.modules.contract.entity.ContractOrderEntity; import com.xcong.excoin.modules.contract.parameter.vo.HoldOrderDetailVo; import com.xcong.excoin.modules.contract.parameter.vo.HoldOrderListVo; import org.mapstruct.Mapper; import org.mapstruct.Mapping; @@ -16,7 +17,10 @@ public static final ContractHoldOrderEntityMapper INSTANCE = Mappers.getMapper(ContractHoldOrderEntityMapper.class); @Mapping(target = "orderType", source = "openingType") @Mapping(target = "openingTime", source = "createTime") public abstract ContractOrderEntity holdOrderToOrder(ContractHoldOrderEntity holdOrderEntity); public abstract HoldOrderListVo holdOrderToDto(ContractHoldOrderEntity holdOrderEntity); public abstract HoldOrderDetailVo holdOrderToOrderDetailVo(ContractHoldOrderEntity holdOrderEntity); } src/main/java/com/xcong/excoin/modules/contract/mapper/ContractOrderEntityMapper.java
New file @@ -0,0 +1,28 @@ package com.xcong.excoin.modules.contract.mapper; 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; import java.util.List; /** * @author wzy * @date 2020-06-05 **/ @Mapper public abstract class ContractOrderEntityMapper { public static final ContractOrderEntityMapper INSTANCE = Mappers.getMapper(ContractOrderEntityMapper.class); public abstract OrderListVo orderEntityToOrderListVo(ContractOrderEntity orderEntity); 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/ChangeLeverRateDto.java
New file @@ -0,0 +1,24 @@ package com.xcong.excoin.modules.contract.parameter.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotNull; /** * @Author wzy * @Date 2020/6/5 **/ @Data @ApiModel(value = "ChangeLeverRateDto", description = "调整杠杆接口接收参数类") public class ChangeLeverRateDto { @NotNull @ApiModelProperty(value = "杠杆", example = "100") private int leverRate; @NotNull @ApiModelProperty(value = "币种", example = "BTC/USDT") private String symbol; } src/main/java/com/xcong/excoin/modules/contract/parameter/dto/OrderListDto.java
New file @@ -0,0 +1,27 @@ package com.xcong.excoin.modules.contract.parameter.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; /** * @Author wzy * @Date 2020/6/5 **/ @Data @ApiModel(value = "OrderListDto", description = "历史委托订单列表接口参数接受类") public class OrderListDto { @NotNull @Min(1) @ApiModelProperty(value = "第几页", example = "1") private int pageNum; @NotNull @ApiModelProperty(value = "每页数量", example = "10") private int pageSize; } src/main/java/com/xcong/excoin/modules/contract/parameter/vo/HoldOrderDetailVo.java
New file @@ -0,0 +1,62 @@ package com.xcong.excoin.modules.contract.parameter.vo; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.Api; 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-01 **/ @Data @ApiModel(value = "HoldOrderDetailVo", description = "获取持仓订单详情接口返回类") public class HoldOrderDetailVo { @ApiModelProperty("订单编号") private String orderNo; @ApiModelProperty("交易类型 1-市价2-限价") private int tradeType; @ApiModelProperty("币种") private String symbol; @ApiModelProperty("张数") private int symbolCnt; @ApiModelProperty("规格") private BigDecimal symbolSku; @ApiModelProperty("开仓价") private BigDecimal openingPrice; @ApiModelProperty("开仓类型 1-开多 2-开空") private int openingType; @ApiModelProperty("开仓手续费") private BigDecimal openingFeeAmount; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @ApiModelProperty("开仓时间") private Date openingTime; @ApiModelProperty("保证金") private BigDecimal bondAmount; @ApiModelProperty("持仓费") private BigDecimal holdAmount; @ApiModelProperty("预估强平价") private BigDecimal forceClosingPrice; @ApiModelProperty("止损价") private BigDecimal stopLossPrice; @ApiModelProperty("止盈价") private BigDecimal stopProfitPrice; } src/main/java/com/xcong/excoin/modules/contract/parameter/vo/HoldOrderListVo.java
@@ -54,6 +54,9 @@ @ApiModelProperty(value = "可增加的最大保证金") private BigDecimal canAddMaxBond; @ApiModelProperty(value = "可减少最大保证金") private BigDecimal canReduceMaxBond; public BigDecimal getOpeningPrice() { return openingPrice.setScale(4, BigDecimal.ROUND_DOWN); } @@ -69,4 +72,8 @@ public BigDecimal getCanAddMaxBond() { return canAddMaxBond.setScale(4, BigDecimal.ROUND_DOWN); } public BigDecimal getCanReduceMaxBond() { return canReduceMaxBond.setScale(4, BigDecimal.ROUND_DOWN); } } src/main/java/com/xcong/excoin/modules/contract/parameter/vo/OrderDetailVo.java
@@ -1,11 +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-01 * @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
New file @@ -0,0 +1,57 @@ 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 = "OrderListVo", description = "历史委托订单接口返回参数类") public class OrderListVo { @ApiModelProperty("订单ID") private Long id; @ApiModelProperty("订单类型 -1撤单,1开多,2开空,3平多,4平空") private int orderType; @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 int symbolCnt; @ApiModelProperty("已实现盈亏") private BigDecimal rewardRatio; @ApiModelProperty("平仓类型 2平多3平空4爆仓平多5爆仓平空6止盈平多7止盈平空8止损平多9止损平空") private int closingType; @ApiModelProperty("平仓手续费") private BigDecimal closingFeeAmount; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @ApiModelProperty("平仓时间") private Date closingTime; @ApiModelProperty("强平价") private BigDecimal forceClosingPrice; } src/main/java/com/xcong/excoin/modules/contract/service/ContractHoldOrderService.java
@@ -3,10 +3,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.xcong.excoin.common.response.Result; import com.xcong.excoin.modules.contract.entity.ContractHoldOrderEntity; import com.xcong.excoin.modules.contract.parameter.dto.ChangeBondDto; import com.xcong.excoin.modules.contract.parameter.dto.ProfitOrLessDto; import com.xcong.excoin.modules.contract.parameter.dto.SubmitOrderDto; import com.xcong.excoin.modules.contract.parameter.dto.SymbolDto; import com.xcong.excoin.modules.contract.parameter.dto.*; import com.xcong.excoin.rabbit.pricequeue.OrderModel; import org.apache.ibatis.annotations.Param; @@ -37,4 +34,12 @@ public Result findContractMoneyInfo(String symbol); public Result changeLeverRate(ChangeLeverRateDto changeLeverRateDto); public Result findHoldOrderDetailById(Long id); public Result findOrderList(OrderListDto orderListDto); public Result findOrderDetailById(Long id); } src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java
@@ -121,7 +121,7 @@ int i = contractEntrustOrderDao.insert(entrustOrderEntity); memberWalletContractDao.increaseWalletContractBalanceById(entrustTotalAmount.negate(), null, entrustTotalAmount, walletContract.getId()); memberWalletContractDao.increaseWalletContractBalanceById(entrustTotalAmount.negate(), null, entrustOrderEntity.getBondAmount(), walletContract.getId()); if (i > 0) { // 发送委托单队列消息 src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java
@@ -3,6 +3,8 @@ import cn.hutool.core.collection.CollUtil; import com.alibaba.druid.sql.visitor.functions.If; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.xcong.excoin.common.LoginUserUtils; import com.xcong.excoin.common.enumerates.CoinTypeEnum; @@ -16,12 +18,9 @@ import com.xcong.excoin.modules.contract.entity.ContractHoldOrderEntity; import com.xcong.excoin.modules.contract.entity.ContractOrderEntity; import com.xcong.excoin.modules.contract.mapper.ContractHoldOrderEntityMapper; import com.xcong.excoin.modules.contract.parameter.dto.ChangeBondDto; import com.xcong.excoin.modules.contract.parameter.dto.ProfitOrLessDto; import com.xcong.excoin.modules.contract.parameter.dto.SubmitOrderDto; import com.xcong.excoin.modules.contract.parameter.dto.SymbolDto; import com.xcong.excoin.modules.contract.parameter.vo.ContractMoneyInfoVo; import com.xcong.excoin.modules.contract.parameter.vo.HoldOrderListVo; import com.xcong.excoin.modules.contract.mapper.ContractOrderEntityMapper; import com.xcong.excoin.modules.contract.parameter.dto.*; 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; @@ -159,14 +158,13 @@ contractOrderEntity.setOpeningTime(new Date()); contractHoldOrderDao.insert(holdOrderEntity); int i = contractOrderDao.insert(contractOrderEntity); memberWalletContractDao.increaseWalletContractBalanceById(prePaymentAmount.negate(), null, null, walletContract.getId()); if (i > 0) { memberWalletContractDao.increaseWalletContractBalanceById(prePaymentAmount.negate(), openFeePrice.negate(), null, walletContract.getId()); // 计算佣金 ThreadPoolUtils.calReturnMoney(memberEntity.getId(), contractOrderEntity.getOpeningFeeAmount(), contractOrderEntity, AgentReturnEntity.ORDER_TYPE_OPEN); if (i > 0) { return Result.ok("success"); return Result.ok("提交成功"); } return Result.fail("fail"); return Result.fail("提交失败"); } @Override @@ -189,6 +187,7 @@ MemberEntity memberEntity = LoginUserUtils.getAppLoginUser(); List<ContractHoldOrderEntity> list = contractHoldOrderDao.selectHoldOrderListByMemberIdAndSymbol(memberEntity.getId(), symbol); MemberWalletContractEntity walletContractEntity = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeEnum.USDT.name()); if (CollUtil.isNotEmpty(list)) { BigDecimal totalProfitOrLoss = BigDecimal.ZERO; List<HoldOrderListVo> resultList = new ArrayList<>(); @@ -228,12 +227,17 @@ .divide(new BigDecimal(holdOrderEntity.getLeverRatio()), 8, BigDecimal.ROUND_DOWN); // 可增加最大保证金 BigDecimal canAddMaxBond = holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getOpeningFeeAmount()).subtract(costPrice); if (canAddMaxBond.compareTo(BigDecimal.ZERO) < 0) { canAddMaxBond = BigDecimal.ZERO; // BigDecimal canAddMaxBond = holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getOpeningFeeAmount()).subtract(costPrice); // if (canAddMaxBond.compareTo(BigDecimal.ZERO) < 0) { // canAddMaxBond = BigDecimal.ZERO; // } BigDecimal canReduceMaxBond = holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getPrePaymentAmount()); if (canReduceMaxBond.compareTo(BigDecimal.ZERO) < 0) { canReduceMaxBond = BigDecimal.ZERO; } holdOrderListVo.setCanAddMaxBond(canAddMaxBond); holdOrderListVo.setCanReduceMaxBond(canReduceMaxBond); holdOrderListVo.setCanAddMaxBond(walletContractEntity.getAvailableBalance()); holdOrderListVo.setReturnRate(returnRate); holdOrderListVo.setProfitOrLoss(rewardRatio); resultList.add(holdOrderListVo); @@ -335,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("止盈价必须低于当前价"); } } } @@ -384,7 +388,6 @@ producer.sendPriceOperate(JSONObject.toJSONString(model)); return Result.ok("设置成功"); } return Result.fail("设置失败"); } @@ -509,4 +512,50 @@ contractMoneyInfoVo.setLeverRate(rateEntity.getLevelRateUp()); return Result.ok(contractMoneyInfoVo); } @Override public Result changeLeverRate(ChangeLeverRateDto changeLeverRateDto) { MemberEntity memberEntity = LoginUserUtils.getAppLoginUser(); MemberLevelRateEntity levelRateEntity = memberLevelRateDao.selectLeverRateByMemberIdAndSymbol(memberEntity.getId(), changeLeverRateDto.getSymbol()); levelRateEntity.setLevelRateUp(changeLeverRateDto.getLeverRate()); levelRateEntity.setLevelRateDown(changeLeverRateDto.getLeverRate()); int i = memberLevelRateDao.updateById(levelRateEntity); if (i > 0) { return Result.ok("调整成功"); } return Result.fail("调整失败"); } @Override public Result findHoldOrderDetailById(Long id) { MemberEntity memberEntity = LoginUserUtils.getAppLoginUser(); ContractHoldOrderEntity holdOrderEntity = contractHoldOrderDao.selectHoldOrderByMemberIdAndId(memberEntity.getId(), id); if (holdOrderEntity == null) { return Result.fail("订单不存在"); } HoldOrderDetailVo holdOrderDetailVo = ContractHoldOrderEntityMapper.INSTANCE.holdOrderToOrderDetailVo(holdOrderEntity); return Result.ok(holdOrderDetailVo); } @Override 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()); 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/RabbitOrderServiceImpl.java
@@ -134,13 +134,9 @@ contractOrderDao.insert(contractOrderEntity); // 计算盈利或亏损后可用金额和总金额应该增加或减少的 BigDecimal addMoney = holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getOpeningPrice()).add(profitOrLoss); log.info("平仓增加金额:{}", addMoney); BigDecimal addMoney = holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getOpeningFeeAmount()).add(profitOrLoss); walletContract.setFrozenBalance(walletContract.getFrozenBalance().subtract(holdOrderEntity.getBondAmount())); walletContract.setAvailableBalance(walletContract.getAvailableBalance().add(addMoney)); walletContract.setTotalBalance(walletContract.getTotalBalance().add(addMoney)); 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/home/service/impl/MemberQuickBuySaleServiceImpl.java
@@ -70,7 +70,7 @@ MemberQuickBuySaleVo memberQuickBuySaleVo = new MemberQuickBuySaleVo(); memberQuickBuySaleVo.setId(memberQuickBuySaleEntity.getId()); // 返回前台付款方式 return Result.ok(memberQuickBuySaleVo); return Result.ok("提交成功",memberQuickBuySaleVo); } @Override @@ -183,19 +183,6 @@ MemberQuickBuySaleEntity memberQuickBuySaleEntity = memberQuickBuySaleDao.selectByIdAndMemberId(member.getId(),id); memberQuickBuySaleEntity.setOrderStatus(MemberQuickBuySaleEntity.CHARGE_STATUS_CANCEL_USER); memberQuickBuySaleDao.updateById(memberQuickBuySaleEntity); // 判断是否存在足够余额 MemberWalletCoinEntity walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(member.getId(),CoinTypeEnum.USDT.toString()); boolean flag = true; while(flag) { walletCoin.setAvailableBalance(walletCoin.getAvailableBalance().add(memberQuickBuySaleEntity.getAmountUsdt())); walletCoin.setFrozenBalance(walletCoin.getFrozenBalance().subtract(memberQuickBuySaleEntity.getAmountUsdt())); int i = memberWalletCoinDao.updateById(walletCoin); if(i>0) { flag = false; } walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(member.getId(),CoinTypeEnum.USDT.toString()); } return Result.ok("成功"); } } src/main/resources/mapper/contract/ContractOrderDao.xml
@@ -2,4 +2,14 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.xcong.excoin.modules.contract.dao.ContractOrderDao"> <select id="selectContractOrderInPage" resultType="com.xcong.excoin.modules.contract.entity.ContractOrderEntity"> select * from contract_order where member_id=#{memberId} 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>