| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- package cn.hobbystocks.auc.service.impl;
- import cn.hobbystocks.auc.common.exception.ServiceException;
- import cn.hobbystocks.auc.common.utils.DateUtils;
- import cn.hobbystocks.auc.domain.Auction;
- import cn.hobbystocks.auc.domain.Lot;
- import cn.hobbystocks.auc.domain.Order;
- import cn.hobbystocks.auc.dto.OrderApiResponse;
- import cn.hobbystocks.auc.dto.SkuOrderDTO;
- import cn.hobbystocks.auc.forest.OrderApi;
- import cn.hobbystocks.auc.mapper.OrderMapper;
- import cn.hobbystocks.auc.service.IAuctionService;
- import cn.hobbystocks.auc.service.ILotService;
- import cn.hobbystocks.auc.service.IOrderService;
- import cn.hobbystocks.auc.vo.OrderVO;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import javax.annotation.Resource;
- import java.math.BigDecimal;
- import java.math.RoundingMode;
- import java.util.Date;
- import java.util.List;
- import java.util.Objects;
- @Service
- public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements IOrderService {
- @Autowired
- ILotService lotService;
- @Autowired
- IAuctionService auctionService;
- @Resource
- OrderApi orderApi;
- @Value("${hobbystocks.host.orderUrl}")
- private String orderUrl;
- @Override
- @Transactional
- public OrderVO createSkuOrder(Order order) {
- Lot lot = lotService.selectLotById(order.getLotId());
- Auction auction = auctionService.selectAuctionById(lot.getAuctionId());
- BigDecimal serviceTariff = lot.getServiceTariff();
- Integer payTimeLimit = lot.getPayTimeLimit();
- if (serviceTariff == null) {
- serviceTariff = auction.getServiceTariff();
- }
- if (payTimeLimit == null) {
- payTimeLimit = auction.getPayTimeLimit();
- }
- if (Objects.isNull(order.getAmount())) {
- throw new ServiceException("创建订单失败:成交金额为空");
- }
- BigDecimal amount = BigDecimal.valueOf(order.getAmount());
- BigDecimal serviceExpense = serviceTariff.multiply(amount)
- .divide(BigDecimal.valueOf(100), 0, RoundingMode.HALF_UP);
- order.setServiceExpense(serviceExpense);
- Date expireTime = DateUtils.addHours(new Date(), payTimeLimit);
- order.setExpireTime(expireTime);
- save(order);
- OrderApiResponse response = orderApi.createSkuOrder(orderUrl, buildSkuOrderDTO(order, lot, auction));
- OrderVO orderVO = response.toOrderVO();
- order.setOrderId(orderVO.getOrderId());
- order.setOrderNo(orderVO.getOrderNo());
- order.setStatus(orderVO.getStatus());
- updateById(order);
- return orderVO;
- }
- SkuOrderDTO buildSkuOrderDTO(Order order, Lot lot, Auction auction) {
- SkuOrderDTO skuOrderDTO = new SkuOrderDTO();
- skuOrderDTO.setLotId(order.getLotId());
- skuOrderDTO.setSpuId(order.getSkuId());
- skuOrderDTO.setUserId(order.getUserId());
- skuOrderDTO.setAuctionId(lot.getAuctionId());
- skuOrderDTO.setAuctionName(auction.getName());
- skuOrderDTO.setLotName(lot.getName());
- skuOrderDTO.setLotImage(lot.getImgs());
- skuOrderDTO.setMerchantId(Objects.isNull(order.getMerchantId()) ? lot.getMerchantId() : order.getMerchantId());
- skuOrderDTO.setPaymentAmount(order.getAmount());
- skuOrderDTO.setServiceExpense(order.getServiceExpense().longValue());
- skuOrderDTO.setTotalAmount(BigDecimal.valueOf(order.getAmount()).add(order.getServiceExpense()).longValue());
- skuOrderDTO.setExpireTime(order.getExpireTime());
- return skuOrderDTO;
- }
- @Override
- public int modifyOrder(Order order) {
- return getBaseMapper().updateOrderStatus(order);
- }
- @Override
- public List<Order> getOrderListByUserAndAuction(Long auctionId, Integer userId) {
- return getBaseMapper().selectOrderByAuctionId(auctionId, userId);
- }
- }
|