From b4ee04b14d289262fc303967412a56202b6e002f Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Wed, 22 Sep 2021 16:41:04 +0800 Subject: [PATCH] Merge branch 'master' of http://120.27.238.55:7000/r/xc-mall --- src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java | 145 +++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 143 insertions(+), 2 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java index 41a6417..e02856a 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java @@ -1,12 +1,28 @@ package cc.mrbird.febs.mall.service.impl; -import cc.mrbird.febs.mall.entity.MallOrderInfo; -import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper; +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.dto.PayOrderDto; +import cc.mrbird.febs.mall.entity.*; +import cc.mrbird.febs.mall.mapper.*; +import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; import cc.mrbird.febs.mall.service.IApiMallOrderInfoService; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.SecureUtil; 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 @@ -16,4 +32,129 @@ @Service @RequiredArgsConstructor public class ApiMallOrderInfoServiceImpl extends ServiceImpl<MallOrderInfoMapper, MallOrderInfo> implements IApiMallOrderInfoService { + + private final MallGoodsMapper mallGoodsMapper; + private final MallGoodsSkuMapper mallGoodsSkuMapper; + private final MallAddressInfoMapper mallAddressInfoMapper; + private final MallOrderItemMapper mallOrderItemMapper; + private final MallMemberMapper memberMapper; + private final IApiMallMemberWalletService memberWalletService; + + @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); + } + + @Override + public String payOrder(PayOrderDto payOrderDto) { + MallMember member = LoginUserUtil.getLoginUser(); + MallOrderInfo orderInfo = this.baseMapper.selectOrderByMemberIdAndId(member.getId(), payOrderDto.getId()); + if (orderInfo == null) { + throw new FebsException("订单不存在"); + } + + if (OrderStatusEnum.WAIT_PAY.getValue() != orderInfo.getStatus()) { + throw new FebsException("订单状态不能支付"); + } + + switch (payOrderDto.getType()) { + case "1": + // TODO 微信支付 + break; + case "2": + // TODO 支付宝支付 + break; + case "3": + return balancePay(orderInfo, payOrderDto.getTradePwd()); + default: + + } + return ""; + } + + private String balancePay(MallOrderInfo orderInfo, String tradePwd) { + if (StrUtil.isBlank(tradePwd)) { + throw new FebsException("支付密码错误"); + } + + MallMember mallMember = memberMapper.selectById(orderInfo.getMemberId()); + if (!mallMember.getTradePassword().equals(SecureUtil.md5(tradePwd))) { + throw new FebsException("支付密码错误"); + } + + memberWalletService.reduceBalance(orderInfo.getAmount(), mallMember.getId()); + return orderInfo.getOrderNo(); + } } -- Gitblit v1.9.1