package com.xcong.excoin.modules.otc.service.impl; import cn.hutool.core.collection.CollUtil; 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.modules.member.dao.MemberDao; import com.xcong.excoin.modules.member.entity.MemberEntity; import com.xcong.excoin.modules.otc.dao.OtcEntrustOrderDao; import com.xcong.excoin.modules.otc.dao.OtcMarketBussinessDao; import com.xcong.excoin.modules.otc.dao.OtcOrderDao; import com.xcong.excoin.modules.otc.dao.OtcSettingDao; import com.xcong.excoin.modules.otc.dto.MbAddDto; import com.xcong.excoin.modules.otc.entity.OtcEntrustOrder; import com.xcong.excoin.modules.otc.entity.OtcMarketBussiness; import com.xcong.excoin.modules.otc.entity.OtcOrder; import com.xcong.excoin.modules.otc.entity.OtcSetting; import com.xcong.excoin.modules.otc.mapper.OtcEntrustOrderMapper; import com.xcong.excoin.modules.otc.mapper.OtcMarketBussinessMapper; import com.xcong.excoin.modules.otc.service.OtcMarketBussinessService; import com.xcong.excoin.modules.otc.vo.ApplyConditionsVo; import com.xcong.excoin.modules.otc.vo.EntrustListInfoVo; import com.xcong.excoin.modules.otc.vo.MarketBussinessInfoVo; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.List; @Service @RequiredArgsConstructor public class OtcMarketBussinessServiceImpl extends ServiceImpl implements OtcMarketBussinessService { private final OtcEntrustOrderDao otcEntrustOrderDao; private final MemberDao memberDao; private final OtcSettingDao otcSettingDao; private final OtcOrderDao otcOrderDao; @Override public void add() { MemberEntity member = LoginUserUtils.getAppLoginUser(); member = memberDao.selectById(member.getId()); // long memberId = 444L; // MemberEntity member = memberDao.selectById(memberId); if (MemberEntity.IS_TRADER_Y.equals(member.getIsTrader())) { throw new GlobalException("已经是市商"); } OtcSetting setting = otcSettingDao.selectById(1L); // 所有已完成订单 List finishOrders = otcOrderDao.selectOrderListForUser(member.getId(), 3); if (CollUtil.isEmpty(finishOrders) || setting.getOrderNum() > finishOrders.size()) { throw new GlobalException("条件未达标"); } List allOrders = otcOrderDao.selectOrderListForUser(member.getId(), null); if (CollUtil.isNotEmpty(allOrders)) { BigDecimal finishRatio = BigDecimal.valueOf(finishOrders.size()).divide(BigDecimal.valueOf(allOrders.size()), 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); if (setting.getCompletionRate().compareTo(finishRatio) > 0) { throw new GlobalException("条件未达标"); } } BigDecimal totalAmount = otcOrderDao.selectOrderTotalAmount(member.getId()); if (setting.getTotalAmount().compareTo(totalAmount) > 0) { throw new GlobalException("条件未达标"); } OtcMarketBussiness mb = this.baseMapper.selectMarketBussinessByMemberId(member.getId()); OtcMarketBussiness otcMb = new OtcMarketBussiness(); if (mb != null) { if (OtcMarketBussiness.CHECK_PASS.equals(mb.getStatus()) || OtcMarketBussiness.CHECK_WAIT.equals(mb.getStatus())) { throw new GlobalException("已经是市商或正在审核"); } otcMb = mb; otcMb.setStatus(OtcMarketBussiness.CHECK_WAIT); this.baseMapper.updateById(otcMb); } else { otcMb.setMemberId(member.getId()); otcMb.setAvgCoinTime(0); otcMb.setAvgPayTime(0); otcMb.setTotalOrderCnt(0); otcMb.setBuyCnt(0); otcMb.setFinishRatio(BigDecimal.ZERO); otcMb.setStatus(OtcMarketBussiness.CHECK_WAIT); this.baseMapper.insert(otcMb); } } @Override public Integer findMbStatus() { MemberEntity member = LoginUserUtils.getAppLoginUser(); OtcMarketBussiness mb = this.baseMapper.selectMarketBussinessByMemberId(member.getId()); if (mb == null) { return 0; } return mb.getStatus(); } @Override public Result findMbInfo(Long id) { OtcMarketBussiness mb = this.baseMapper.selectById(id); if (mb == null) { return Result.fail("未找到对应信息"); } MarketBussinessInfoVo mbVo = OtcMarketBussinessMapper.INSTANCE.entityToVo(mb); mbVo.setTotalOrderCnt(mb.getTotalOrderCnt() + mb.getSaleOrderCnt()); mbVo.setFinishRatio(mb.getFinishRatio().add(mb.getSaleFinishRatio()).divide(BigDecimal.valueOf(2), 4, BigDecimal.ROUND_DOWN)); MemberEntity member = memberDao.selectById(mb.getMemberId()); OtcEntrustOrder query = new OtcEntrustOrder(); query.setMemberId(mb.getMemberId()); query.setIsDefualt(1); query.setOrderType(OtcEntrustOrder.ORDER_TYPE_B); query.setStatus(OtcEntrustOrder.LINE_UP); List buysEntity = otcEntrustOrderDao.selectEntrustOrderByOrderType(query); List buys = OtcEntrustOrderMapper.INSTANCE.entrustToListInfoVoList(buysEntity); query.setOrderType(OtcEntrustOrder.ORDER_TYPE_S); List salesEntity = otcEntrustOrderDao.selectEntrustOrderByOrderType(query); List sales = OtcEntrustOrderMapper.INSTANCE.entrustToListInfoVoList(salesEntity); mbVo.setBuys(buys); mbVo.setSales(sales); mbVo.setNikename(member.getName()); return Result.ok(mbVo); } @Override public Result applyConditions() { MemberEntity member = LoginUserUtils.getAppLoginUser(); member = memberDao.selectById(member.getId()); // long memberId = 444L; // MemberEntity member = memberDao.selectById(memberId); ApplyConditionsVo applyConditionsVo = new ApplyConditionsVo(); OtcSetting setting = otcSettingDao.selectById(1L); applyConditionsVo.setOrderNum(setting.getOrderNum()); applyConditionsVo.setTotalAmount(setting.getTotalAmount()); applyConditionsVo.setCompletionRate(setting.getCompletionRate()); applyConditionsVo.setCancellNum(setting.getCancellNum()); // 所有已完成订单 List finishOrders = otcOrderDao.selectOrderListForUser(member.getId(), 3); if (CollUtil.isEmpty(finishOrders) || setting.getOrderNum() > finishOrders.size()) { applyConditionsVo.setOrderNumStatus(2); }else{ applyConditionsVo.setOrderNumStatus(1); } List allOrders = otcOrderDao.selectOrderListForUser(member.getId(), null); if (CollUtil.isNotEmpty(allOrders)) { BigDecimal finishRatio = BigDecimal.valueOf(finishOrders.size()).divide(BigDecimal.valueOf(allOrders.size()), 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); if (setting.getCompletionRate().compareTo(finishRatio) > 0) { applyConditionsVo.setCompletionRateStatus(2); }else{ applyConditionsVo.setCompletionRateStatus(1); } } BigDecimal totalAmount = otcOrderDao.selectOrderTotalAmount(member.getId()); totalAmount = totalAmount == null ? BigDecimal.ZERO : totalAmount; if (setting.getTotalAmount().compareTo(totalAmount) > 0) { applyConditionsVo.setTotalAmountStatus(2); }else{ applyConditionsVo.setTotalAmountStatus(1); } Integer certifyStatus = member.getCertifyStatus(); if(MemberEntity.CERTIFY_STATUS_Y == certifyStatus){ applyConditionsVo.setMemberAuthStatus(1); }else{ applyConditionsVo.setMemberAuthStatus(2); } return Result.ok(applyConditionsVo); } }