package com.tzy.service.impl; import com.github.pagehelper.PageHelper; import com.tzy.common.dto.UserInfo; import com.tzy.common.exception.ServiceException; import com.tzy.common.utils.DateUtils; import com.tzy.common.utils.UserUtils; import com.tzy.dto.LogisticsDTO; import com.tzy.entity.LotOrder; import com.tzy.entity.Spu; import com.tzy.mapper.LotOrderExpressMapper; import com.tzy.mapper.LotOrderMapper; import com.tzy.req.LotOrderConfirmRequest; import com.tzy.service.LotOrderService; import com.tzy.service.SpuService; import com.tzy.sportcard.api.service.MineApiService; import com.tzy.system.domain.TzyShippingAddress; import com.tzy.system.service.ITzyShippingAddressService; import com.tzy.util.RandomUtil; 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 LotOrderServiceImpl implements LotOrderService { @Resource private LotOrderMapper lotOrderMapper; @Resource MineApiService mineApiService; @Resource private SpuService spuService; @Resource ITzyShippingAddressService shippingAddressService; @Resource LotOrderExpressMapper lotOrderExpressMapper; @Override public List getLotOrders(LotOrder lotOrder) { UserInfo userInfo = UserUtils.getSimpleUserInfo(); if (userInfo == null) { throw new ServiceException(500, "请先登录"); } lotOrder.setUserId(userInfo.getId().longValue()); PageHelper.startPage(lotOrder.getPageNum(), lotOrder.getPageSize()); List lotOrders = lotOrderMapper.selectLotOrder(lotOrder); fillTimestamp(lotOrders); return lotOrders; } @Override @Transactional(rollbackFor = Exception.class) public int createLotOrder(LotOrder lotOrder) { UserInfo userInfo = UserUtils.getSimpleUserInfo(); if (userInfo == null && Objects.isNull(lotOrder.getUserId())) { throw new ServiceException(500, "请先登录"); } //判断该拍品订单是否已存在 int countedLotOrderByLotId = lotOrderMapper.countLotOrderByLotId(lotOrder); if (countedLotOrderByLotId > 0) { throw new ServiceException(500, "auctionId:"+ lotOrder.getLotId() + "订单已存在"); } //检查商品是否存在, Spu spu = spuService.getSpuById(lotOrder.getSpuId()); if (spu == null) { throw new ServiceException(500, "商品不存在,请联系管理员!"); } lotOrder.setCreateTime(DateUtils.getNowDate()); lotOrder.setStatus(100);//待支付 lotOrder.setUserId(Objects.isNull(userInfo) ? lotOrder.getUserId() : userInfo.getId()); lotOrder.setOrderNo(RandomUtil.getRandom(RandomUtil.MALL_USER_ORDER)); return lotOrderMapper.insertLotOrder(lotOrder); } @Override public LotOrder getLotOrderById(Long id) { LotOrder lotOrder = lotOrderMapper.selectLotOrderById(id); fillTimestamp(lotOrder); LogisticsDTO logisticsDTO = logisticsInfo(lotOrder.getOrderNo()); lotOrder.setLogisticsDTO(logisticsDTO); return lotOrder; } private void fillTimestamp(List lotOrders) { if (lotOrders == null) { return; } long now = System.currentTimeMillis(); for (LotOrder lotOrder : lotOrders) { fillTimestamp(lotOrder, now); } } private void fillTimestamp(LotOrder lotOrder) { fillTimestamp(lotOrder, System.currentTimeMillis()); } private void fillTimestamp(LotOrder lotOrder, long now) { if (lotOrder == null) { return; } Date expireTime = lotOrder.getExpireTime(); if (expireTime == null) { lotOrder.setTimestamp(0L); return; } lotOrder.setTimestamp(Math.max(expireTime.getTime() - now, 0L)); } @Override public int updateLotOrderAddress(LotOrder lotOrder) { TzyShippingAddress tzyShippingAddress = shippingAddressService.selectUserAddress(Math.toIntExact(lotOrder.getUserId()), Math.toIntExact(lotOrder.getShippingAddressId())); lotOrder.setShippingAddressId(tzyShippingAddress.getId()); lotOrder.setShippingAddressLinkname(tzyShippingAddress.getLinkname()); lotOrder.setShippingAddressPhone(tzyShippingAddress.getPhone()); lotOrder.setShippingAddress(tzyShippingAddress.getAddress() + tzyShippingAddress.getAddressMore()); return lotOrderMapper.updateLotOrderAddress(lotOrder); } @Override public LogisticsDTO logisticsInfo(String orderNo) { int count = lotOrderMapper.findOrderByStatus(orderNo, 104); if (count <= 0) { return new LogisticsDTO(); } return lotOrderExpressMapper.logisticsInfo(orderNo); } @Override public void updateOrderStatus(String orderNo, Integer status, Integer addressId) { LotOrder lotOrder = new LotOrder(); lotOrder.setOrderNo(orderNo); if (status == 102) { List lotOrders = lotOrderMapper.selectLotOrder(lotOrder); if (lotOrders == null || lotOrders.isEmpty()) { throw new ServiceException(500, "订单不存在"); } LotOrder updateOrder = lotOrders.get(0); updateOrder.setShippingAddressId(Long.valueOf(addressId)); updateLotOrderAddress(updateOrder); } lotOrder.setStatus(status); if (status == 101) { lotOrder.setPayTime(DateUtils.getNowDate()); } int i = lotOrderMapper.updateOrderStatus(lotOrder); if (i <=0) { throw new ServiceException(500, "订单不存在"); } } @Override public void confirm(LotOrderConfirmRequest lotOrderConfirmRequest) { LotOrder lotOrder = new LotOrder(); lotOrder.setOrderNo(lotOrderConfirmRequest.getOrderNo()); lotOrder.setStatus(103); lotOrderMapper.updateOrderStatus(lotOrder); } @Override public List queryExpireOrder() { List lotOrders = lotOrderMapper.queryExpireOrder(); fillTimestamp(lotOrders); return lotOrders; } @Override public int batchTimeoutUnpaidOrders() { return lotOrderMapper.batchTimeoutUnpaidOrders(); } @Override public List queryPaidOrdersLastThreeDays() { List lotOrders = lotOrderMapper.queryPaidOrdersLastThreeDays(); fillTimestamp(lotOrders); return lotOrders; } }