| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- package cn.hobbystocks.auc.service.impl;
- import cn.hobbystocks.auc.common.exception.ServiceException;
- import cn.hobbystocks.auc.domain.Auction;
- import cn.hobbystocks.auc.domain.DepositOrder;
- import cn.hobbystocks.auc.domain.Lot;
- import cn.hobbystocks.auc.dto.DepositRecordDTO;
- import cn.hobbystocks.auc.dto.DepositOrderDTO;
- import cn.hobbystocks.auc.forest.OrderApi;
- import cn.hobbystocks.auc.mapper.DepositOrderMapper;
- import cn.hobbystocks.auc.request.DepositRecordRequest;
- import cn.hobbystocks.auc.service.DepositOrderService;
- import cn.hobbystocks.auc.service.IAuctionService;
- import cn.hobbystocks.auc.service.ILotService;
- import cn.hutool.core.collection.CollUtil;
- import cn.hutool.core.util.IdUtil;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import org.springframework.beans.BeanUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import javax.annotation.Resource;
- import java.util.Date;
- import java.util.List;
- import java.util.Objects;
- @Service
- public class DepositOrderServiceImpl extends ServiceImpl<DepositOrderMapper, DepositOrder> implements DepositOrderService {
- @Autowired
- ILotService lotService;
- @Autowired
- IAuctionService auctionService;
- @Resource
- OrderApi orderApi;
- final String DEPOSIT_ORDER_PRE = "DT";
- private static final String DEPOSIT_TYPE_LOT = "拍品";
- private static final String DEPOSIT_TYPE_AUCTION = "拍卖会";
- private static final Integer DEPOSIT_STATUS_WAITING_PAYMENT = 0;
- private static final Integer DEPOSIT_STATUS_PAID = 1;
- @Override
- @Transactional
- public int createDepositOrder(DepositOrderDTO depositOrderDTO) {
- //查询拍品保证金配置
- Long lotId = depositOrderDTO.getLotId();
- Lot lot = lotService.selectLotById(lotId);
- Long deposit = lot.getDeposit();
- String name= lot.getName();
- String depositType=DEPOSIT_TYPE_LOT;
- if (deposit ==null){
- //如果没有拍品保证金配置,创建拍卖会保证金配置
- Auction auction = auctionService.selectAuctionById(lot.getAuctionId());
- deposit=auction.getDeposit();
- name=auction.getName();
- depositType=DEPOSIT_TYPE_AUCTION;
- }
- if (hasPaidDeposit(depositOrderDTO.getUserId(), lot, depositType)) {
- throw new ServiceException("当前已有相关数据保证金订单");
- }
- depositOrderDTO.setAmount(deposit);
- depositOrderDTO.setAuctionId(lot.getAuctionId());
- depositOrderDTO.setName(name);
- depositOrderDTO.setDepositType(depositType);
- depositOrderDTO.setLotId(lotId);
- depositOrderDTO.setMerchantId(lot.getMerchantId());
- // OrderVO orderVO = orderApi.createDepositOrder(depositOrderDTO);
- //保存保证金订单记录
- DepositOrder depositOrder=new DepositOrder();
- BeanUtils.copyProperties(depositOrderDTO,depositOrder);
- depositOrder.setStatus(0);
- //生成订单号
- depositOrder.setOrderNo(DEPOSIT_ORDER_PRE + IdUtil.getSnowflakeNextId());
- depositOrder.setCreateTime(new Date());
- return baseMapper.insert(depositOrder);
- }
- private boolean hasPaidDeposit(Integer userId, Lot lot, String depositType) {
- LambdaQueryWrapper<DepositOrder> queryWrapper = new LambdaQueryWrapper<DepositOrder>()
- .eq(DepositOrder::getUserId, userId)
- .in(DepositOrder::getStatus, CollUtil.newArrayList(DEPOSIT_STATUS_PAID,DEPOSIT_STATUS_WAITING_PAYMENT))
- .eq(DepositOrder::getDepositType, depositType);
- if (Objects.equals(DEPOSIT_TYPE_LOT, depositType)) {
- queryWrapper.eq(DepositOrder::getLotId, lot.getId());
- } else {
- queryWrapper.eq(DepositOrder::getAuctionId, lot.getAuctionId());
- }
- return baseMapper.selectCount(queryWrapper) > 0;
- }
- @Override
- public void refundDepositOrder(String orderNo) {
- // OrderVO orderVO=new OrderVO();
- // orderVO.setOrderNo(orderNo);
- // //TODO 执行保证金退款逻辑
- // return orderApi.refundDepositOrder(orderVO);
- this.lambdaUpdate().eq(DepositOrder::getOrderNo,orderNo).set(DepositOrder::getStatus,2);
- }
- @Override
- public void reduceDeposit(String orderNo) {
- // OrderVO orderVO=new OrderVO();
- // orderVO.setOrderNo(orderNo);
- // //TODO 执行扣减保证金
- //
- // return orderApi.reduceDeposit(orderVO);
- this.lambdaUpdate().eq(DepositOrder::getOrderNo,orderNo).set(DepositOrder::getStatus,3);
- }
- @Override
- public List<DepositOrder> selectDepositOrder(DepositOrder depositOrder) {
- return getBaseMapper().selectDepositList(depositOrder);
- }
- @Override
- public List<DepositRecordDTO> selectDepositRecordPage(DepositRecordRequest request) {
- return getBaseMapper().selectDepositRecordPage(request);
- }
- }
|