Bladeren bron

支付下单添加了积分支付

jinshihui 10 uur geleden
bovenliggende
commit
f342e42abe

+ 1 - 1
nightFragrance-massage/src/main/java/com/ylx/massage/domain/ProductOrderInfo.java

@@ -46,7 +46,7 @@ public class ProductOrderInfo implements Serializable {
 
     /**
      * 支付方式
-     * 1微信 2余额
+     * 1微信 2余额 3:积分支付
      */
     private Integer payType;
 

+ 5 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/domain/dto/ProductOrderPayRequest.java

@@ -29,4 +29,9 @@ public class ProductOrderPayRequest implements Serializable {
      */
     private BigDecimal totalPrice;
 
+    /**
+     * 支付的积分
+     */
+    private Integer pointsToPay;
+
 }

+ 2 - 7
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/AfterSaleOrderServiceImpl.java

@@ -91,6 +91,7 @@ public class AfterSaleOrderServiceImpl extends ServiceImpl<AfterSaleOrderMapper,
         // 5. 更新订单状态
         ProductOrderInfo updateInfo = new ProductOrderInfo();
         updateInfo.setId(productOrderInfo.getId());
+        // 修改订单状态:售后中
         updateInfo.setOrderStatus(ProductOrderStatusEnum.AFTER_SALES.getCode());
         updateInfo.setUpdateTime(LocalDateTime.now());
 
@@ -292,16 +293,10 @@ public class AfterSaleOrderServiceImpl extends ServiceImpl<AfterSaleOrderMapper,
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void agreeRefund(Long orderId) {
-
         // 1. 查询并校验订单(公共方法提取)
         ProductOrderInfo productOrderInfo = this.productOrderInfoService.getAndCheckOrder(orderId, null);
 
-        // 2. 状态校验:必须是 售后中 才能确认收货
-        if (!ProductOrderStatusEnum.AFTER_SALES.getCode().equals(productOrderInfo.getOrderStatus())) {
-            throw new ServiceException("订单状态异常,仅售后中状态可确认收货");
-        }
-
-        // 3. 获取等待商家收货的售后单
+        // 2. 获取待审核或者等待商家收货的售后单
         LambdaQueryWrapper<AfterSaleOrder> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(AfterSaleOrder::getOrderId, orderId)
                 .in(AfterSaleOrder::getAfterSaleStatus,

+ 27 - 8
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/ProductOrderInfoServiceImpl.java

@@ -29,6 +29,7 @@ import com.ylx.massage.mapper.ProductOrderItemMapper;
 import com.ylx.massage.mapper.ProductSkuMapper;
 import com.ylx.massage.service.*;
 import com.ylx.massage.utils.OrderNumberGenerator;
+import com.ylx.point.service.IPointAccountService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -78,6 +79,9 @@ public class ProductOrderInfoServiceImpl extends ServiceImpl<ProductOrderInfoMap
     @Resource
     private IAfterSaleOrderService afterSaleOrderService;
 
+    @Resource
+    private IPointAccountService pointAccountService;
+
     /**
      * 创建商品订单
      *
@@ -255,20 +259,31 @@ public class ProductOrderInfoServiceImpl extends ServiceImpl<ProductOrderInfoMap
         if (orderInfo.getOrderStatus() != 0) {
             throw new ServiceException("订单状态错误");
         }
-        // 3、校验支付金额是否正确
-        if (orderInfo.getTotalAmount().compareTo(productOrderPayRequest.getTotalPrice()) != 0) {
-            throw new ServiceException("支付金额错误");
-        }
-        // 4、校验支付方式是否正确
+        // 3、校验支付方式是否正确
         if (orderInfo.getPayType() != productOrderPayRequest.getPayType()) {
-            throw new ServiceException("支付方式错误");
+            throw new ServiceException("支付方式不正确");
         }
-        //判断支付方式
+
+        // 4、校验支付金额是否正确
+        if(productOrderPayRequest.getPayType().equals(MassageConstants.INTEGER_ONE) || productOrderPayRequest.getPayType().equals(MassageConstants.INTEGER_TWO)){
+            if (orderInfo.getTotalAmount().compareTo(productOrderPayRequest.getTotalPrice()) != 0) {
+                throw new ServiceException("支付金额错误");
+            }
+        }
+
+        //5、如果支付方式为积分支付,那么只需要校验支付的积分
+        if (productOrderPayRequest.getPayType().equals(MassageConstants.INTEGER_THREE)) {
+            if (orderInfo.getPointsUsed() != productOrderPayRequest.getPointsToPay()) {
+                throw new ServiceException("支付积分不正确");
+            }
+        }
+
+        //6、判断支付方式
         if (productOrderPayRequest.getPayType().equals(MassageConstants.INTEGER_ONE)) {
             //微信支付
             R resp = rechargeService.getPay(orderInfo.getOrderNo(), orderInfo.getTotalAmount(), orderInfo.getOpenId(), BillTypeEnum.WX_PAY.getInfo(), BillTypeEnum.WX_PAY.getCode().toString());
             return resp;
-        } else {
+        } else if (productOrderPayRequest.getPayType().equals(MassageConstants.INTEGER_TWO)) {
             //余额支付
             TWxUser user = wxUserService.getByOpenId(orderInfo.getOpenId());
             if (null == user) {
@@ -280,6 +295,10 @@ public class ProductOrderInfoServiceImpl extends ServiceImpl<ProductOrderInfoMap
                 orderPayManage(user, orderInfo);
                 return R.ok();
             }
+        }else{
+            //积分支付
+            pointAccountService.deductPoints(orderInfo.getOpenId(), orderInfo.getPointsUsed(), orderInfo.getOrderNo(), "积分商品下单");
+            return R.ok();
         }
     }
 

+ 1 - 1
nightFragrance-massage/src/main/java/com/ylx/point/service/IPointAccountService.java

@@ -22,7 +22,7 @@ public interface IPointAccountService {
      * @param pointsToDeduct 需要扣减的积分数量(正数)
      * @param bizOrderNo 业务订单号
      * @param activityName 活动名称(如:积分商品兑换)
-     * @return 变动后的余额
+     * @return Integer 变动后的余额
      */
     Integer deductPoints(String openId, int pointsToDeduct, String bizOrderNo, String activityName);
 

+ 5 - 3
nightFragrance-massage/src/main/java/com/ylx/point/service/impl/PointAccountServiceImpl.java

@@ -83,7 +83,7 @@ public class PointAccountServiceImpl implements IPointAccountService {
     @Transactional(rollbackFor = Exception.class)
     public Integer deductPoints(String openId, int pointsToDeduct, String bizOrderNo, String activityName) {
 
-        // 1. 获取当前余额
+        // 1. 获取当前积分余额
         Integer currentBalance = getBalance(openId);
         if (currentBalance < pointsToDeduct) {
             throw new ServiceException("积分余额不足,当前余额:" + currentBalance + ",需要扣减:" + pointsToDeduct);
@@ -159,7 +159,6 @@ public class PointAccountServiceImpl implements IPointAccountService {
                 pointUserLogService.updateById(sourceLog);
             }
         }
-
         return currentBalance;
     }
 
@@ -204,6 +203,9 @@ public class PointAccountServiceImpl implements IPointAccountService {
     /**
      * 获取用户当前可用积分余额
      * 逻辑:SUM(所有未过期的收入记录的points) - SUM(所有支出记录的points绝对值)
+     *
+     * @param openId 用户ID
+     * @return Integer 用户当前可用积分余额
      */
     private Integer getBalance(String openId) {
         // 1. 查询所有未过期的收入记录总和
@@ -225,7 +227,7 @@ public class PointAccountServiceImpl implements IPointAccountService {
         PointUserLog expenseLog = pointUserLogService.getOne(expenseWrapper);
         int totalExpense = (expenseLog != null && expenseLog.getPoints() != null) ? expenseLog.getPoints() : 0;
 
-        // 3. 返回可用余额
+        // 3. 返回可用积分余额
         return totalIncome - totalExpense;
     }