Helius
2020-05-29 c82d277f7686b0d259523bb9733f5b15a4d4a097
finish entrust order some interface
9 files modified
107 ■■■■ changed files
src/main/java/com/xcong/excoin/common/system/controller/CommonController.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/common/system/service/CommonService.java 1 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/common/system/service/impl/CommonServiceImpl.java 27 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/controller/ContractEntrustOrderController.java 4 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/entity/ContractEntrustOrderEntity.java 5 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/entity/ContractOrderEntity.java 21 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/mapper/ContractEntrustOrderEntityMapper.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java 39 ●●●● patch | view | raw | blame | history
src/main/resources/logback-spring.xml 2 ●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/common/system/controller/CommonController.java
@@ -59,7 +59,7 @@
        // 发送手机验证码
        if (AppContants.ACCOUNT_TYPE_MOBILE.equals(type)) {
            Map<String, Object> result = SmsUtils.sendVerifyCode(account, code);
            if (SUCCESS.equals(result.get("resultstatus"))) {
            if (SUCCESS.equals(result.get("returnstatus"))) {
                Map<String, Object> map = new HashMap<>();
                boolean flag = redisUtils.set(AppContants.VERIFY_CODE_PREFIX + account, code, 120);
                map.put("code", flag);
src/main/java/com/xcong/excoin/common/system/service/CommonService.java
@@ -8,4 +8,5 @@
    public boolean verifyCode(String account, String code);
    public String generateOrderNo(Long mid);
}
src/main/java/com/xcong/excoin/common/system/service/impl/CommonServiceImpl.java
@@ -1,5 +1,7 @@
package com.xcong.excoin.common.system.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import com.xcong.excoin.common.contants.AppContants;
import com.xcong.excoin.common.system.service.CommonService;
@@ -8,6 +10,7 @@
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
/**
 * @author wzy
@@ -29,4 +32,28 @@
        return code.equals(cacheCode);
    }
    @Override
    public String generateOrderNo(Long mid) {
        StringBuilder orderNo = new StringBuilder();
        String date = DateUtil.format(new Date(), "yyyyMMdd");
        orderNo.append(date);
        orderNo.append(mid);
        orderNo.append(RandomUtil.randomNumbers(2));
        Object countObj = redisUtils.get(date);
        if (countObj == null) {
            countObj = 0;
        }
        int count = (int) countObj;
        count++;
        redisUtils.set(date, count, 24 * 60 * 60);
        int size = 4;
        for (int i = 0; i < size - String.valueOf(count).length(); i++) {
            orderNo.append("0");
        }
        orderNo.append(count);
        return orderNo.toString();
    }
}
src/main/java/com/xcong/excoin/modules/contract/controller/ContractEntrustOrderController.java
@@ -54,7 +54,7 @@
    @ApiOperation(value = "撤销委托单", notes = "撤销委托单")
    @GetMapping(value = "/cancelEntrustOrder")
    public Result cancelEntrustOrder(@ApiParam(name = "id", value="委托单ID", required = true, example = "1") Long id) {
        return null;
    public Result cancelEntrustOrder(@ApiParam(name = "id", value="委托单ID", required = true, example = "1") @RequestParam("id") Long id) {
        return contractEntrustOrderService.cancelEntrustOrder(id);
    }
}
src/main/java/com/xcong/excoin/modules/contract/entity/ContractEntrustOrderEntity.java
@@ -60,6 +60,11 @@
    private BigDecimal entrustPrice;
    /**
     * 委托金额
     */
    private BigDecimal entrustAmount;
    /**
     * 币种
     */
    private String symbol;
src/main/java/com/xcong/excoin/modules/contract/entity/ContractOrderEntity.java
@@ -14,8 +14,25 @@
 * @date 2020-05-27
 **/
@Data
@TableName("contract_order_entity")
@TableName("contract_order")
public class ContractOrderEntity extends BaseEntity {
    /**
     * 交易类型 市价
     */
    public static final int TRADE_TYPE_MARK_PRICE = 1;
    /**
     * 交易类型 限价
     */
    public static final int TRADE_TYPE_LIMIT_PRICE = 2;
    /**
     * 订单类型 撤单
     */
    public static final int ORDER_TYPE_CANCEL = -1;
    /**
     * 会员Id
@@ -65,7 +82,7 @@
    /**
     * 币种规格
     */
    private Long symbolSku;
    private BigDecimal symbolSku;
    /**
     * 平仓价
src/main/java/com/xcong/excoin/modules/contract/mapper/ContractEntrustOrderEntityMapper.java
@@ -1,8 +1,10 @@
package com.xcong.excoin.modules.contract.mapper;
import com.xcong.excoin.modules.contract.entity.ContractEntrustOrderEntity;
import com.xcong.excoin.modules.contract.entity.ContractOrderEntity;
import com.xcong.excoin.modules.contract.parameter.dto.SubmitEntrustDto;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
/**
@@ -15,4 +17,8 @@
    public abstract ContractEntrustOrderEntity submitEntrustDtoToEntity(SubmitEntrustDto dto);
    @Mapping(source = "entrustPrice", target = "entrustOpeningPrice")
    @Mapping(source = "createTime", target = "entrustTime")
    public abstract ContractOrderEntity entrustOrderToOrder(ContractEntrustOrderEntity orderEntity);
}
src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java
@@ -2,10 +2,13 @@
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.common.system.service.CommonService;
import com.xcong.excoin.modules.contract.dao.ContractEntrustOrderDao;
import com.xcong.excoin.modules.contract.dao.ContractOrderDao;
import com.xcong.excoin.modules.contract.entity.ContractEntrustOrderEntity;
import com.xcong.excoin.modules.contract.entity.ContractOrderEntity;
import com.xcong.excoin.modules.contract.mapper.ContractEntrustOrderEntityMapper;
import com.xcong.excoin.modules.contract.parameter.dto.SubmitEntrustDto;
import com.xcong.excoin.modules.contract.service.ContractEntrustOrderService;
@@ -45,33 +48,36 @@
    @Resource
    private ContractOrderDao contractOrderDao;
    @Resource
    private CommonService commonService;
    @Transactional(rollbackFor = Exception.class)
    @Override
    public Result addContractEntrustOrder(SubmitEntrustDto submitEntrustDto) {
        MemberEntity memberEntity = LoginUserUtils.getAppLoginUser();
        // 获取最新价
        BigDecimal newPirce = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(submitEntrustDto.getSymbol())));
        BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(submitEntrustDto.getSymbol())));
        // 委托开仓
        if (submitEntrustDto.getEntrustType() == ContractEntrustOrderEntity.ENTRUST_TYPE_OPEN_MORE || submitEntrustDto.getEntrustType() == ContractEntrustOrderEntity.ENTRUST_TYPE_OPEN_LESS) {
            // 开多委托价不能大于当前价
            if (submitEntrustDto.getEntrustType() == ContractEntrustOrderEntity.ENTRUST_TYPE_OPEN_MORE) {
                if (submitEntrustDto.getEntrustPrice().compareTo(newPirce) > -1) {
                if (submitEntrustDto.getEntrustPrice().compareTo(newPrice) > -1) {
                    return Result.fail("委托价不能大于当前价");
                }
            }
            // 开空委托价不能小于当前价
            if (submitEntrustDto.getEntrustType() == ContractEntrustOrderEntity.ENTRUST_TYPE_OPEN_LESS) {
                if (submitEntrustDto.getEntrustPrice().compareTo(newPirce) < 1) {
                if (submitEntrustDto.getEntrustPrice().compareTo(newPrice) < 1) {
                    return Result.fail("委托价不能小于当前价");
                }
            }
            MemberWalletContractEntity walletContract = memberWalletContractDao.selectById(memberEntity.getId());
            // 委托总额
            BigDecimal entrustTotalAmount = submitEntrustDto.getEntrustPrice().multiply(BigDecimal.valueOf(submitEntrustDto.getSymbolCnt()));
            BigDecimal entrustTotalAmount = submitEntrustDto.getEntrustPrice().multiply(BigDecimal.valueOf(submitEntrustDto.getSymbolCnt())).setScale(8, BigDecimal.ROUND_DOWN);
            BigDecimal lotNumber = cacheSettingUtils.getSymbolSku(submitEntrustDto.getSymbol());
            // 保证金计算 -- 建仓价X规格X手数X(1/杠杆倍率)
@@ -83,9 +89,11 @@
            ContractEntrustOrderEntityMapper convert = ContractEntrustOrderEntityMapper.INSTANCE;
            ContractEntrustOrderEntity entrustOrderEntity = convert.submitEntrustDtoToEntity(submitEntrustDto);
            entrustOrderEntity.setOrderNo(commonService.generateOrderNo(memberEntity.getId()));
            entrustOrderEntity.setMemberId(memberEntity.getId());
            entrustOrderEntity.setBondAmount(bondAmount);
            entrustOrderEntity.setSymbolSku(lotNumber);
            entrustOrderEntity.setEntrustAmount(entrustTotalAmount);
            // 暂默认逐仓
            entrustOrderEntity.setPositionType(ContractEntrustOrderEntity.POSITION_TYPE_ADD);
@@ -116,6 +124,7 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Result cancelEntrustOrder(Long id) {
        MemberEntity memberEntity = LoginUserUtils.getAppLoginUser();
@@ -125,8 +134,24 @@
            return Result.fail("该委托单不存在");
        }
        return null;
        MemberWalletContractEntity walletContractEntity = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), MemberWalletCoinEnum.WALLETCOINCODE.getValue());
        BigDecimal total = entrustOrderEntity.getEntrustAmount().add(entrustOrderEntity.getBondAmount());
        log.info("{}", total);
        log.info("{}", walletContractEntity.getAvailableBalance());
        walletContractEntity.setAvailableBalance(walletContractEntity.getAvailableBalance().add(total));
        walletContractEntity.setFrozenBalance(walletContractEntity.getFrozenBalance().subtract(total));
        memberWalletContractDao.updateById(walletContractEntity);
        ContractOrderEntity orderEntity = ContractEntrustOrderEntityMapper.INSTANCE.entrustOrderToOrder(entrustOrderEntity);
        orderEntity.setTradeType(ContractOrderEntity.TRADE_TYPE_MARK_PRICE);
        orderEntity.setOrderType(ContractOrderEntity.ORDER_TYPE_CANCEL);
        int i = contractOrderDao.insert(orderEntity);
        contractEntrustOrderDao.deleteById(entrustOrderEntity.getId());
        if (i > 0) {
            return Result.ok("撤销成功");
        }
        return Result.fail("撤销失败");
    }
}
src/main/resources/logback-spring.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="false">
<configuration>
    <contextName>logback</contextName>
    <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
    <property name="log.path" value="logs" />