From c82d277f7686b0d259523bb9733f5b15a4d4a097 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Fri, 29 May 2020 19:30:39 +0800
Subject: [PATCH] finish entrust order some interface

---
 src/main/java/com/xcong/excoin/common/system/service/impl/CommonServiceImpl.java                  |   27 +++++++++++++
 src/main/java/com/xcong/excoin/modules/contract/entity/ContractEntrustOrderEntity.java            |    5 ++
 src/main/java/com/xcong/excoin/common/system/service/CommonService.java                           |    1 
 src/main/java/com/xcong/excoin/modules/contract/entity/ContractOrderEntity.java                   |   21 +++++++++-
 src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java |   39 ++++++++++++++++---
 src/main/java/com/xcong/excoin/modules/contract/controller/ContractEntrustOrderController.java    |    4 +-
 src/main/resources/logback-spring.xml                                                             |    2 
 src/main/java/com/xcong/excoin/modules/contract/mapper/ContractEntrustOrderEntityMapper.java      |    6 +++
 src/main/java/com/xcong/excoin/common/system/controller/CommonController.java                     |    2 
 9 files changed, 94 insertions(+), 13 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/common/system/controller/CommonController.java b/src/main/java/com/xcong/excoin/common/system/controller/CommonController.java
index f34d016..ad88fe5 100644
--- a/src/main/java/com/xcong/excoin/common/system/controller/CommonController.java
+++ b/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);
diff --git a/src/main/java/com/xcong/excoin/common/system/service/CommonService.java b/src/main/java/com/xcong/excoin/common/system/service/CommonService.java
index be1ed3f..444fc77 100644
--- a/src/main/java/com/xcong/excoin/common/system/service/CommonService.java
+++ b/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);
 }
diff --git a/src/main/java/com/xcong/excoin/common/system/service/impl/CommonServiceImpl.java b/src/main/java/com/xcong/excoin/common/system/service/impl/CommonServiceImpl.java
index aad0d55..9a79ace 100644
--- a/src/main/java/com/xcong/excoin/common/system/service/impl/CommonServiceImpl.java
+++ b/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();
+    }
 }
diff --git a/src/main/java/com/xcong/excoin/modules/contract/controller/ContractEntrustOrderController.java b/src/main/java/com/xcong/excoin/modules/contract/controller/ContractEntrustOrderController.java
index 70ed50e..c770cbd 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/controller/ContractEntrustOrderController.java
+++ b/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);
     }
 }
diff --git a/src/main/java/com/xcong/excoin/modules/contract/entity/ContractEntrustOrderEntity.java b/src/main/java/com/xcong/excoin/modules/contract/entity/ContractEntrustOrderEntity.java
index 6511432..4494199 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/entity/ContractEntrustOrderEntity.java
+++ b/src/main/java/com/xcong/excoin/modules/contract/entity/ContractEntrustOrderEntity.java
@@ -60,6 +60,11 @@
     private BigDecimal entrustPrice;
 
     /**
+     * 委托金额
+     */
+    private BigDecimal entrustAmount;
+
+    /**
      * 币种
      */
     private String symbol;
diff --git a/src/main/java/com/xcong/excoin/modules/contract/entity/ContractOrderEntity.java b/src/main/java/com/xcong/excoin/modules/contract/entity/ContractOrderEntity.java
index 59b0212..e0f996b 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/entity/ContractOrderEntity.java
+++ b/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;
 
     /**
      * 平仓价
diff --git a/src/main/java/com/xcong/excoin/modules/contract/mapper/ContractEntrustOrderEntityMapper.java b/src/main/java/com/xcong/excoin/modules/contract/mapper/ContractEntrustOrderEntityMapper.java
index 849840b..b432983 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/mapper/ContractEntrustOrderEntityMapper.java
+++ b/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);
+
 }
diff --git a/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java b/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java
index 9434371..c779e95 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java
+++ b/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("撤销失败");
     }
-
-
 }
diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml
index 6f244db..c7d14c3 100644
--- a/src/main/resources/logback-spring.xml
+++ b/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" />

--
Gitblit v1.9.1