Helius
2022-05-10 7095bc6c6872aa09841c6e54db5db1c438c183f3
fix createOrder and payOrder for score
4 files modified
134 ■■■■■ changed files
src/main/java/cc/mrbird/febs/mall/dto/AddOrderDto.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/PayOrderDto.java 2 ●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/entity/MallOrderInfo.java 5 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java 124 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/AddOrderDto.java
@@ -25,6 +25,9 @@
    @ApiModelProperty(value = "备注")
    private String remark;
    @ApiModelProperty(value = "1-普通订单/2-积分订单")
    private Integer orderType;
    @ApiModelProperty(value = "商品明细")
    private List<AddOrderItemDto> items;
src/main/java/cc/mrbird/febs/mall/dto/PayOrderDto.java
@@ -20,7 +20,7 @@
    private Long id;
    @NotBlank(message = "参数不能为空")
    @ApiModelProperty(value = "支付类型", example = "1微信2支付宝3余额")
    @ApiModelProperty(value = "支付类型", example = "1微信2支付宝3余额4积分")
    private String type;
    @ApiModelProperty(value = "支付密码", example = "如果选择余额支付需要输入")
src/main/java/cc/mrbird/febs/mall/entity/MallOrderInfo.java
@@ -73,4 +73,9 @@
    private String payImage;
    private String payTradeNo;
    /**
     * 订单类型 1-普通订单 2-积分订单
     */
    private Integer orderType;
}
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -11,10 +11,7 @@
import cc.mrbird.febs.mall.dto.*;
import cc.mrbird.febs.mall.entity.*;
import cc.mrbird.febs.mall.mapper.*;
import cc.mrbird.febs.mall.service.IApiMallMemberService;
import cc.mrbird.febs.mall.service.IApiMallMemberWalletService;
import cc.mrbird.febs.mall.service.IApiMallOrderInfoService;
import cc.mrbird.febs.mall.service.MallMemberService;
import cc.mrbird.febs.mall.service.*;
import cc.mrbird.febs.mall.vo.OrderDetailVo;
import cc.mrbird.febs.mall.vo.OrderListVo;
import cc.mrbird.febs.mall.vo.OrderRefundVo;
@@ -57,6 +54,7 @@
    private final MallOrderRefundOperationMapper mallOrderRefundOperationMapper;
    private final MallShoppingCartMapper mallShoppingCartMapper;
    private final IApiMallMemberService memberService;
    private final IMallMoneyFlowService mallMoneyFlowService;
    private final RedisUtils redisUtils;
    private final AgentProducer agentProducer;
@@ -84,6 +82,7 @@
        orderInfo.setLatitude(address.getLatitude());
        orderInfo.setLongitude(address.getLongitude());
        orderInfo.setRemark(addOrderDto.getRemark());
        orderInfo.setOrderType(addOrderDto.getOrderType());
        if (CollUtil.isEmpty(addOrderDto.getItems())) {
            throw new FebsException("参数错误");
@@ -92,43 +91,67 @@
        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(sku.getSkuName() + "库存不足");
            }
            MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId());
            if (MallGoods.ISSALE_STATUS_DISABLED.equals(mallGoods.getIsSale())) {
                throw new FebsException(mallGoods.getGoodsName() + "已下架");
            }
            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());
            orderItem.setSkuName(sku.getSkuName());
            orderItem.setSkuImage(sku.getSkuImage());
            total = total.add(amount);
            mallOrderItemMapper.insert(orderItem);
            // 积分商品提交订单
            if (addOrderDto.getOrderType() == 2) {
                MallGoods mallGoods = mallGoodsMapper.selectById(item.getSkuId());
                if (mallGoods.getStock() < item.getCnt()) {
                    throw new FebsException(mallGoods.getGoodsName() + "库存不足");
                }
            sku.setStock(sku.getStock() - item.getCnt());
            sku.setSkuVolume(sku.getSkuVolume() + item.getCnt());
            mallGoodsSkuMapper.updateById(sku);
                if (MallGoods.ISSALE_STATUS_DISABLED.equals(mallGoods.getIsSale())) {
                    throw new FebsException(mallGoods.getGoodsName() + "已下架");
                }
            if (addOrderDto.getType() == 1) {
                mallShoppingCartMapper.delBySkuId(sku.getId(), member.getId());
                BigDecimal amount = mallGoods.getScore().multiply(BigDecimal.valueOf(item.getCnt()));
                orderItem.setAmount(amount);
                orderItem.setCnt(item.getCnt());
                orderItem.setOrderId(orderInfo.getId());
                orderItem.setPrice(mallGoods.getScore());
                orderItem.setGoodsId(mallGoods.getId());
                orderItem.setGoodsName(mallGoods.getGoodsName());
                orderItem.setStyleName(mallGoods.getGoodsName());
                orderItem.setSkuName(mallGoods.getGoodsName());
                orderItem.setSkuImage(mallGoods.getThumb());
            } else {
                MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(item.getSkuId());
                if (sku == null) {
                    throw new FebsException("购买商品或sku不存在");
                }
                if (sku.getStock() < item.getCnt()) {
                    throw new FebsException(sku.getSkuName() + "库存不足");
                }
                MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId());
                if (MallGoods.ISSALE_STATUS_DISABLED.equals(mallGoods.getIsSale())) {
                    throw new FebsException(mallGoods.getGoodsName() + "已下架");
                }
                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());
                orderItem.setSkuName(sku.getSkuName());
                orderItem.setSkuImage(sku.getSkuImage());
                total = total.add(amount);
                sku.setStock(sku.getStock() - item.getCnt());
                sku.setSkuVolume(sku.getSkuVolume() + item.getCnt());
                mallGoodsSkuMapper.updateById(sku);
                if (addOrderDto.getType() == 1) {
                    mallShoppingCartMapper.delBySkuId(sku.getId(), member.getId());
                }
            }
            mallOrderItemMapper.insert(orderItem);
        }
        orderInfo.setAmount(total);
@@ -137,6 +160,7 @@
        agentProducer.sendOrderCancelDelayMsg(orderInfo.getId(), 15 * 60 * 1000L);
        return orderInfo.getId();
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -187,7 +211,7 @@
                orderInfo.setPayMethod("支付宝支付");
                break;
            case "3":
                payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd());
                payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd(), "balance");
                orderInfo.setPayOrderNo(orderInfo.getOrderNo());
                orderInfo.setPayMethod("余额支付");
@@ -211,20 +235,34 @@
                        BigDecimal score = sku.getOriginalPrice().multiply(mallGoods.getStaticMulti());
                        memberWalletService.add(score, member.getId(), "score");
                        memberService.addMoneyFlow(member.getId(), score, MoneyFlowTypeEnum.STATIC_BONUS.getValue(), orderInfo.getOrderNo(), null, null, null, null, FlowTypeEnum.SCORE.getValue());
                        mallMoneyFlowService.addMoneyFlow(member.getId(), score, MoneyFlowTypeEnum.STATIC_BONUS.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.SCORE.getValue());
                    }
                }
                memberService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), null, null, null, null, FlowTypeEnum.BALANCE.getValue());
                mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue());
//                agentProducer.sendAutoLevelUpMsg(member.getId());
//                agentProducer.sendReturnMoneyMsg(orderInfo.getId());
                break;
            case "4":
                if (orderInfo.getOrderType() != 2) {
                    throw new FebsException("非积分订单,无法使用积分支付");
                }
                payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd(), "prizeScore");
                orderInfo.setPayOrderNo(orderInfo.getOrderNo());
                orderInfo.setPayMethod("积分支付");
                orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
                orderInfo.setPayTime(new Date());
                orderInfo.setPayResult("1");
                mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(),  FlowTypeEnum.PRIZE_SCORE.getValue());
                break;
            default:
        }
        this.baseMapper.updateById(orderInfo);
        Map<String, Object> map = new HashMap<>();
        map.put("orderInfo", payResultStr);
        map.put("orderNo", orderInfo.getOrderNo());
@@ -233,13 +271,12 @@
        return map;
    }
    private String balancePay(MallOrderInfo orderInfo, String tradePwd) {
    private String balancePay(MallOrderInfo orderInfo, String tradePwd, String field) {
        if (StrUtil.isBlank(tradePwd)) {
            throw new FebsException("支付密码错误");
        }
        MallMember mallMember = memberMapper.selectById(orderInfo.getMemberId());
        if (StrUtil.isBlank(mallMember.getTradePassword())) {
            throw new FebsException("未设置支付密码");
        }
@@ -248,8 +285,7 @@
            throw new FebsException("支付密码错误");
        }
        memberWalletService.reduce(orderInfo.getAmount(), mallMember.getId(), "balance");
        memberWalletService.reduce(orderInfo.getAmount(), mallMember.getId(), field);
        return orderInfo.getOrderNo();
    }