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" />