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