From f6a912c1a6a26c809568f964941fb4ad4483274e Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Mon, 31 May 2021 11:19:40 +0800
Subject: [PATCH] modify
---
src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcEntrustOrderServiceImpl.java | 215 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 213 insertions(+), 2 deletions(-)
diff --git a/src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcEntrustOrderServiceImpl.java b/src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcEntrustOrderServiceImpl.java
index 292ead7..2df1c07 100644
--- a/src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcEntrustOrderServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcEntrustOrderServiceImpl.java
@@ -1,14 +1,225 @@
package com.xcong.excoin.modules.otc.service.impl;
+import cn.hutool.core.collection.CollUtil;
+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.exception.GlobalException;
+import com.xcong.excoin.common.response.Result;
+import com.xcong.excoin.common.system.service.CommonService;
+import com.xcong.excoin.modules.member.dao.MemberAuthenticationDao;
+import com.xcong.excoin.modules.member.dao.MemberDao;
+import com.xcong.excoin.modules.member.dao.MemberPaymentMethodDao;
+import com.xcong.excoin.modules.member.dao.MemberWalletCoinDao;
+import com.xcong.excoin.modules.member.entity.MemberEntity;
+import com.xcong.excoin.modules.member.entity.MemberPaymentMethodEntity;
+import com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity;
+import com.xcong.excoin.modules.otc.dao.OtcBlackListDao;
+import com.xcong.excoin.modules.otc.dao.OtcMarketBussinessDao;
+import com.xcong.excoin.modules.otc.dao.OtcOrderDao;
+import com.xcong.excoin.modules.otc.dto.EntrustOrderAddDto;
+import com.xcong.excoin.modules.otc.dto.EntrustOrderListDto;
+import com.xcong.excoin.modules.otc.entity.OtcBlackList;
import com.xcong.excoin.modules.otc.entity.OtcEntrustOrder;
-import com.xcong.excoin.modules.otc.dao.OtcEntrustOrderMapper;
+import com.xcong.excoin.modules.otc.dao.OtcEntrustOrderDao;
+import com.xcong.excoin.modules.otc.entity.OtcMarketBussiness;
+import com.xcong.excoin.modules.otc.entity.OtcOrder;
+import com.xcong.excoin.modules.otc.mapper.OtcEntrustOrderMapper;
import com.xcong.excoin.modules.otc.service.OtcEntrustOrderService;
+import com.xcong.excoin.modules.otc.vo.EntrustListInfoVo;
+import com.xcong.excoin.modules.otc.vo.EntrustListVo;
+import com.xcong.excoin.modules.otc.vo.EntrustOrderDetailVo;
import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import netscape.javascript.JSObject;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import java.math.BigDecimal;
+import java.util.List;
+
+@Slf4j
@Service
@RequiredArgsConstructor
-public class OtcEntrustOrderServiceImpl extends ServiceImpl<OtcEntrustOrderMapper, OtcEntrustOrder> implements OtcEntrustOrderService {
+public class OtcEntrustOrderServiceImpl extends ServiceImpl<OtcEntrustOrderDao, OtcEntrustOrder> implements OtcEntrustOrderService {
+
+ private final MemberDao memberDao;
+ private final MemberPaymentMethodDao memberPaymentMethodDao;
+ private final OtcMarketBussinessDao otcMarketBussinessDao;
+ private final MemberWalletCoinDao memberWalletCoinDao;
+ private final OtcOrderDao otcOrderDao;
+ private final CommonService commonService;
+ private final OtcBlackListDao otcBlackListDao;
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void add(EntrustOrderAddDto addDto) {
+ MemberEntity member = LoginUserUtils.getAppLoginUser();
+ OtcEntrustOrder otcEntrustOrder = OtcEntrustOrderMapper.INSTANCE.entrustOrderDtoToEntity(addDto);
+ otcEntrustOrder.setMemberId(member.getId());
+
+ member = memberDao.selectById(member.getId());
+ if (!MemberEntity.CERTIFY_STATUS_Y.equals(member.getCertifyStatus())) {
+ throw new GlobalException("未实名认证");
+ }
+
+ List<MemberPaymentMethodEntity> payments = memberPaymentMethodDao.selectByMemberId(member.getId());
+ if (CollUtil.isEmpty(payments)) {
+ throw new GlobalException("未绑定收款方式");
+ }
+
+ BigDecimal totalAmount = addDto.getUnitPrice().multiply(addDto.getAmount());
+ otcEntrustOrder.setTotalAmount(totalAmount);
+
+ if (totalAmount.compareTo(addDto.getMax()) < 0) {
+ throw new GlobalException("最大限额应小于总金额");
+ }
+
+ if (OtcEntrustOrder.ORDER_TYPE_S.equals(addDto.getType())) {
+ MemberWalletCoinEntity coinWallet = memberWalletCoinDao.selectWalletCoinBymIdAndCode(member.getId(), "USDT");
+// BigDecimal multiply = addDto.getUnitPrice().multiply(coinWallet.getAvailableBalance());
+ if(coinWallet.getAvailableBalance().compareTo(addDto.getAmount()) < 0) {
+ throw new GlobalException("可用金额不足");
+ }
+
+ memberWalletCoinDao.updateFrozenBalance(member.getId(), coinWallet.getId(), addDto.getAmount());
+ }
+
+ if (!MemberEntity.IS_TRADER_Y.equals(member.getIsTrader())) {
+ throw new GlobalException("不是市商");
+ }
+
+ if (member.getIsTrader() == 2) {
+ otcEntrustOrder.setIsMb(OtcEntrustOrder.IS_MB_N);
+ } else {
+ otcEntrustOrder.setIsMb(OtcEntrustOrder.IS_MB_Y);
+ }
+
+ otcEntrustOrder.setRemainCoinAmount(addDto.getAmount());
+ otcEntrustOrder.setStatus(OtcEntrustOrder.LINE_UP);
+ otcEntrustOrder.setEntrustOrderNo(commonService.generateOrderNo(member.getId()));
+ otcEntrustOrder.setId(null);
+ this.baseMapper.insert(otcEntrustOrder);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void modify(EntrustOrderAddDto modifyDto) {
+ MemberEntity member = LoginUserUtils.getAppLoginUser();
+ OtcEntrustOrder otcEntrustOrder = OtcEntrustOrderMapper.INSTANCE.entrustOrderDtoToEntity(modifyDto);
+ otcEntrustOrder.setMemberId(member.getId());
+
+ otcEntrustOrder.setRemainCoinAmount(modifyDto.getAmount());
+ otcEntrustOrder.setStatus(OtcEntrustOrder.LINE_UP);
+
+ List<OtcOrder> orders = otcOrderDao.selectOrderListUnFinish(member.getId(), otcEntrustOrder.getId());
+ if (CollUtil.isNotEmpty(orders)) {
+ throw new GlobalException("存在未完成的订单, 无法编辑");
+ }
+
+ OtcEntrustOrder prevEntity = this.baseMapper.selectById(modifyDto.getId());
+ if (prevEntity == null) {
+ throw new GlobalException("参数错误");
+ }
+
+ if (!prevEntity.getOrderType().equals(modifyDto.getType())) {
+ throw new GlobalException("类型错误");
+ }
+
+ if (member.getIsTrader() == 2) {
+ otcEntrustOrder.setIsMb(OtcEntrustOrder.IS_MB_N);
+ } else {
+ otcEntrustOrder.setIsMb(OtcEntrustOrder.IS_MB_Y);
+ }
+
+ BigDecimal totalAmount = modifyDto.getUnitPrice().multiply(modifyDto.getAmount());
+ otcEntrustOrder.setTotalAmount(totalAmount);
+ if (OtcEntrustOrder.ORDER_TYPE_S.equals(modifyDto.getType())) {
+ MemberWalletCoinEntity coinWallet = memberWalletCoinDao.selectWalletCoinBymIdAndCode(member.getId(), "USDT");
+ coinWallet.setAvailableBalance(coinWallet.getAvailableBalance().add(coinWallet.getFrozenBalance()));
+ if(coinWallet.getAvailableBalance().compareTo(totalAmount) < 0) {
+ throw new GlobalException("可用金额不足");
+ }
+
+ coinWallet.setAvailableBalance(coinWallet.getAvailableBalance().subtract(totalAmount));
+ coinWallet.setFrozenBalance(totalAmount);
+ memberWalletCoinDao.updateById(coinWallet);
+ }
+
+ this.baseMapper.updateById(otcEntrustOrder);
+ }
+
+ @Override
+ public IPage<EntrustListVo> findEntrustListInPage(EntrustOrderListDto dto) {
+ MemberEntity member = LoginUserUtils.getAppLoginUser();
+ Page<EntrustListVo> page = new Page<>(dto.getPageNum(), dto.getPageSize());
+// List<OtcBlackList> blackLists = otcBlackListDao.selectBlackListByMemberId(member.getId());
+// if (CollUtil.isNotEmpty(blackLists)) {
+ dto.setMemberId(member.getId());
+// }
+ return this.baseMapper.selectEntrustListInPage(dto, page);
+ }
+
+ @Override
+ public List<EntrustListInfoVo> findOwnEntrustOrder(EntrustOrderListDto orderListDto) {
+ MemberEntity member = LoginUserUtils.getAppLoginUser();
+
+ OtcEntrustOrder query = new OtcEntrustOrder();
+ query.setStatus(3);
+ query.setMemberId(member.getId());
+
+ Page<OtcEntrustOrder> page = new Page<>(orderListDto.getPageNum(), orderListDto.getPageSize());
+ IPage<OtcEntrustOrder> result = this.baseMapper.selectOwnEntrustListInPage(query, page);
+ return OtcEntrustOrderMapper.INSTANCE.entrustToListInfoVoList(result.getRecords());
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void cancelEntrustOrder(Long id) {
+ MemberEntity member = LoginUserUtils.getAppLoginUser();
+ OtcEntrustOrder otcEntrustOrder = this.baseMapper.selectById(id);
+ if (otcEntrustOrder == null) {
+ throw new GlobalException("参数错误");
+ }
+
+ if (OtcEntrustOrder.LINE_CANCEL.equals(otcEntrustOrder.getStatus())) {
+ throw new GlobalException("请勿重复撤销");
+ }
+
+ List<OtcOrder> orders = otcOrderDao.selectOrderListUnFinish(member.getId(), otcEntrustOrder.getId());
+ if (CollUtil.isNotEmpty(orders)) {
+ throw new GlobalException("存在未完成的订单, 无法撤销");
+ }
+
+ if (OtcEntrustOrder.ORDER_TYPE_S.equals(otcEntrustOrder.getOrderType())) {
+ MemberWalletCoinEntity wallet = memberWalletCoinDao.selectWalletCoinBymIdAndCode(member.getId(), "USDT");
+ memberWalletCoinDao.subFrozenBalance(member.getId(), wallet.getId(), otcEntrustOrder.getRemainCoinAmount());
+ }
+
+ otcEntrustOrder = new OtcEntrustOrder();
+ otcEntrustOrder.setId(id);
+ otcEntrustOrder.setStatus(OtcEntrustOrder.LINE_CANCEL);
+ this.baseMapper.updateById(otcEntrustOrder);
+ }
+
+ @Override
+ public Result findEntrustOrderDetail(Long id) {
+ OtcEntrustOrder otcEntrustOrder = this.baseMapper.selectById(id);
+ if (otcEntrustOrder == null) {
+ return Result.fail("参数错误");
+ }
+
+ MemberPaymentMethodEntity defualtMethod = memberPaymentMethodDao.selectDefualtMethod(otcEntrustOrder.getMemberId(), null, "1");
+ MemberEntity member = memberDao.selectById(otcEntrustOrder.getMemberId());
+ OtcMarketBussiness mb = otcMarketBussinessDao.selectMarketBussinessByMemberId(member.getId());
+ EntrustOrderDetailVo detail = OtcEntrustOrderMapper.INSTANCE.entityToOrderDetail(otcEntrustOrder);
+ detail.setName(member.getName());
+ detail.setOrderCnt(mb.getBuyCnt());
+ detail.setFinishRatio(mb.getFinishRatio());
+ detail.setPayType(defualtMethod.getPaymentType());
+ return Result.ok(detail);
+ }
}
--
Gitblit v1.9.1