From 5c5589c0d343437275563a1a84f3a415a4ea16d3 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Fri, 17 Jun 2022 16:50:40 +0800
Subject: [PATCH] fix
---
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java | 199 ++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 153 insertions(+), 46 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 5cfa585..e97f141 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,8 +1,6 @@
package cc.mrbird.febs.mall.service.impl;
-import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum;
-import cc.mrbird.febs.common.enumerates.OrderRefundStatusEnum;
-import cc.mrbird.febs.common.enumerates.OrderStatusEnum;
+import cc.mrbird.febs.common.enumerates.*;
import cc.mrbird.febs.common.exception.FebsException;
import cc.mrbird.febs.common.utils.AppContants;
import cc.mrbird.febs.common.utils.LoginUserUtil;
@@ -13,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;
@@ -59,10 +54,12 @@
private final MallOrderRefundOperationMapper mallOrderRefundOperationMapper;
private final MallShoppingCartMapper mallShoppingCartMapper;
private final IApiMallMemberService memberService;
+ private final IMallMoneyFlowService mallMoneyFlowService;
private final RedisUtils redisUtils;
private final AgentProducer agentProducer;
private final IPayService payService;
+ private final IMallAchieveService mallAchieveService;
@Override
@Transactional(rollbackFor = Exception.class)
@@ -86,6 +83,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("参数错误");
@@ -93,47 +91,93 @@
this.baseMapper.insert(orderInfo);
BigDecimal total = BigDecimal.ZERO;
+ BigDecimal carriage = 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());
- 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());
+
+ total = total.add(amount);
+ } 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 (new BigDecimal(mallGoods.getPresentPrice()).compareTo(BigDecimal.ZERO) == 0) {
+ List<MallOrderItem> items = mallOrderItemMapper.selectItemByGoodsIdUnCancel(mallGoods.getId(), member.getId());
+ if (CollUtil.isNotEmpty(items)) {
+ throw new FebsException("无法重复领取同一个商品");
+ }
+ }
+
+ 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());
+ orderItem.setIsNormal(mallGoods.getIsNormal());
+ orderItem.setCostPrice(sku.getCostPrice());
+
+ total = total.add(amount);
+ carriage = carriage.add(mallGoods.getCarriage());
+
+ 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);
+ orderInfo.setCarriage(carriage);
this.baseMapper.updateById(orderInfo);
agentProducer.sendOrderCancelDelayMsg(orderInfo.getId(), 15 * 60 * 1000L);
return orderInfo.getId();
}
+
@Override
@Transactional(rollbackFor = Exception.class)
@@ -172,46 +216,97 @@
// orderInfo.setPayOrderNo(payOrderDto.getPayOrderNo());
// orderInfo.setPayImage(payOrderDto.getPayImage());
orderInfo.setPayMethod("微信支付");
+ agentProducer.sendOrderReturn(orderInfo.getId());
break;
case "2":
- payResultStr = payService.aliPay(orderInfo);
+ if (StrUtil.isNotBlank(orderInfo.getPayOrderNo())) {
+ payResultStr = orderInfo.getPayOrderNo();
+ } else {
+ payResultStr = payService.aliPay(orderInfo);
+ }
orderInfo.setPayOrderNo(payResultStr);
orderInfo.setPayMethod("支付宝支付");
+ agentProducer.sendOrderReturn(orderInfo.getId());
break;
case "3":
- payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd());
+ payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd(), "balance");
orderInfo.setPayOrderNo(orderInfo.getOrderNo());
- orderInfo.setPayMethod("积分支付");
-
+ orderInfo.setPayMethod("余额支付");
orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
orderInfo.setPayTime(new Date());
orderInfo.setPayResult("1");
- this.baseMapper.updateById(orderInfo);
- memberService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), null, null, null, null);
+ boolean hasTc = false;
+ // 静态倍数
+ List<MallOrderItem> orderItems = this.baseMapper.getMallOrderItemByOrderId(orderInfo.getId());
+ if (CollUtil.isNotEmpty(orderItems)) {
+ for (MallOrderItem orderItem : orderItems) {
+ MallGoods mallGoods = mallGoodsMapper.selectById(orderItem.getGoodsId());
+ BigDecimal score = BigDecimal.ZERO;
+ MallGoodsSku sku = mallGoodsSkuMapper.selectById(orderItem.getSkuId());
+ if (mallGoods.getIsNormal() == 2) {
+ hasTc = true;
+ score = sku.getPresentPrice().multiply(mallGoods.getStaticMulti());
+ }
+
+ if (score.compareTo(BigDecimal.ZERO) > 0) {
+ memberWalletService.add(score, member.getId(), "score");
+ mallMoneyFlowService.addMoneyFlow(member.getId(), score, MoneyFlowTypeEnum.STATIC_BONUS.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.SCORE.getValue());
+
+ // 添加业绩
+ mallAchieveService.add(orderItem.getId());
+ }
+ }
+ }
+
+ // 购买套餐后,升级为普通会员
+ if (hasTc) {
+ MallMember mallMember = memberMapper.selectById(member.getId());
+ if (AgentLevelEnum.ZERO_LEVEL.name().equals(mallMember.getLevel())) {
+ mallMember.setLevel(AgentLevelEnum.FIRST_LEVEL.name());
+ memberMapper.updateById(mallMember);
+ }
+ }
+
+ mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue());
+ agentProducer.sendAutoLevelUpMsg(member.getId());
+ agentProducer.sendOrderReturn(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());
map.put("orderId", orderInfo.getId());
-// agentProducer.sendAutoLevelUpMsg(member.getId());
-// agentProducer.sendReturnMoneyMsg(orderInfo.getId());
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("未设置支付密码");
}
@@ -220,8 +315,7 @@
throw new FebsException("支付密码错误");
}
- memberWalletService.reduceBalance(orderInfo.getAmount(), mallMember.getId());
-
+ memberWalletService.reduce(orderInfo.getAmount().add(orderInfo.getCarriage()), mallMember.getId(), field);
return orderInfo.getOrderNo();
}
@@ -328,6 +422,13 @@
orderRefund.setRefundTime(new Date());
orderRefund.setBeforeStatus(beforeStatus);
orderRefund.setStatus(OrderRefundStatusEnum.REFUND_APPLY.getValue());
+
+ // 未发货则退运费,发货了则不退
+ if (beforeStatus == 2) {
+ orderRefund.setAmount(orderInfo.getAmount().add(orderInfo.getCarriage()));
+ } else {
+ orderRefund.setAmount(orderInfo.getAmount());
+ }
mallOrderRefundMapper.insert(orderRefund);
} else {
orderRefund.setDesp(addRefundDto.getDesp());
@@ -336,6 +437,12 @@
orderRefund.setRefundTime(new Date());
orderRefund.setBeforeStatus(beforeStatus);
orderRefund.setStatus(OrderRefundStatusEnum.REFUND_APPLY.getValue());
+ // 未发货则退运费,发货了则不退
+ if (beforeStatus == 2) {
+ orderRefund.setAmount(orderInfo.getAmount().add(orderInfo.getCarriage()));
+ } else {
+ orderRefund.setAmount(orderInfo.getAmount());
+ }
mallOrderRefundMapper.updateById(orderRefund);
}
--
Gitblit v1.9.1