package cc.mrbird.febs.mall.service.impl; import cc.mrbird.febs.common.enumerates.OrderStatusEnum; import cc.mrbird.febs.common.exception.FebsException; import cc.mrbird.febs.common.utils.LoginUserUtil; import cc.mrbird.febs.common.utils.MallUtils; import cc.mrbird.febs.mall.dto.AddOrderDto; import cc.mrbird.febs.mall.dto.AddOrderItemDto; import cc.mrbird.febs.mall.entity.*; import cc.mrbird.febs.mall.mapper.*; import cc.mrbird.febs.mall.service.IApiMallOrderInfoService; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Random; /** * @author wzy * @date 2021-09-18 **/ @Slf4j @Service @RequiredArgsConstructor public class ApiMallOrderInfoServiceImpl extends ServiceImpl implements IApiMallOrderInfoService { private final MallGoodsMapper mallGoodsMapper; private final MallGoodsSkuMapper mallGoodsSkuMapper; private final MallAddressInfoMapper mallAddressInfoMapper; private final MallOrderItemMapper mallOrderItemMapper; @Override public Long createOrder(AddOrderDto addOrderDto) { MallMember member = LoginUserUtil.getLoginUser(); MallAddressInfo address = mallAddressInfoMapper.selectById(addOrderDto.getAddressId()); if (address == null) { throw new FebsException("地址不存在"); } String orderNo = MallUtils.getOrderNum(); MallOrderInfo orderInfo = new MallOrderInfo(); orderInfo.setOrderNo(orderNo); orderInfo.setOrderTime(new Date()); orderInfo.setMemberId(member.getId()); orderInfo.setStatus(OrderStatusEnum.WAIT_PAY.getValue()); orderInfo.setName(address.getName()); orderInfo.setAddress(address.getArea() + address.getAddress()); orderInfo.setPhone(address.getPhone()); orderInfo.setLatitude(address.getLatitude()); orderInfo.setLongitude(address.getLongitude()); orderInfo.setRemark(addOrderDto.getRemark()); if (CollUtil.isEmpty(addOrderDto.getItems())) { throw new FebsException("参数错误"); } this.baseMapper.insert(orderInfo); BigDecimal total = BigDecimal.ZERO; for (AddOrderItemDto item : addOrderDto.getItems()) { MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(item.getSkuId()); if (sku == null) { throw new FebsException("购买商品或sku不存在"); } if (sku.getStock() < item.getCnt()) { throw new FebsException("库存不足"); } MallOrderItem orderItem = new MallOrderItem(); BigDecimal amount = sku.getPresentPrice().multiply(BigDecimal.valueOf(item.getCnt())); orderItem.setAmount(amount); orderItem.setCnt(item.getCnt()); orderItem.setOrderId(orderInfo.getId()); orderItem.setPrice(sku.getPresentPrice()); orderItem.setGoodsId(sku.getGoodsId()); orderItem.setGoodsName(sku.getGoodsName()); orderItem.setSkuId(sku.getId()); orderItem.setStyleName(sku.getStyleName()); total = total.add(amount); mallOrderItemMapper.insert(orderItem); sku.setStock(sku.getStock() - item.getCnt()); mallGoodsSkuMapper.updateById(sku); } return orderInfo.getId(); } @Override public void cancelOrder(Long id) { MallMember member = LoginUserUtil.getLoginUser(); MallOrderInfo orderInfo = this.baseMapper.selectOrderByMemberIdAndId(member.getId(), id); if (orderInfo == null) { throw new FebsException("订单不存在"); } if (OrderStatusEnum.WAIT_PAY.getValue() != orderInfo.getStatus()) { throw new FebsException("订单不是待付款, 无法取消"); } orderInfo.setStatus(OrderStatusEnum.CANCEL.getValue()); orderInfo.setCancelType(MallOrderInfo.CANCEL_BY_SELF); this.baseMapper.updateById(orderInfo); } }