From 7095bc6c6872aa09841c6e54db5db1c438c183f3 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Tue, 10 May 2022 16:41:11 +0800
Subject: [PATCH] fix createOrder and payOrder for score
---
src/main/java/cc/mrbird/febs/mall/dto/PayOrderDto.java | 2
src/main/java/cc/mrbird/febs/mall/dto/AddOrderDto.java | 3 +
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java | 124 ++++++++++++++++++++++++++--------------
src/main/java/cc/mrbird/febs/mall/entity/MallOrderInfo.java | 5 +
4 files changed, 89 insertions(+), 45 deletions(-)
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/AddOrderDto.java b/src/main/java/cc/mrbird/febs/mall/dto/AddOrderDto.java
index 4bf68c5..11d73f6 100644
--- a/src/main/java/cc/mrbird/febs/mall/dto/AddOrderDto.java
+++ b/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;
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/PayOrderDto.java b/src/main/java/cc/mrbird/febs/mall/dto/PayOrderDto.java
index 622769f..9d2094f 100644
--- a/src/main/java/cc/mrbird/febs/mall/dto/PayOrderDto.java
+++ b/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 = "如果选择余额支付需要输入")
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallOrderInfo.java b/src/main/java/cc/mrbird/febs/mall/entity/MallOrderInfo.java
index 2dc801e..777df59 100644
--- a/src/main/java/cc/mrbird/febs/mall/entity/MallOrderInfo.java
+++ b/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;
}
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 972451a..bc4c6a5 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
@@ -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();
}
--
Gitblit v1.9.1