Ver código fonte

修改支付回调的问题

jinshihui 11 horas atrás
pai
commit
689daecede

+ 18 - 2
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/PayController.java

@@ -29,9 +29,16 @@ import com.ylx.common.core.domain.R;
 import com.ylx.massage.domain.TRecharge;
 import com.ylx.massage.enums.BillTypeEnum;
 import com.ylx.massage.enums.PayTypeEnum;
+import com.ylx.massage.domain.ProductOrderInfo;
+import com.ylx.massage.domain.TConsumptionLog;
+import com.ylx.massage.domain.TWxUser;
+import com.ylx.massage.enums.BillTypeEnum;
+import com.ylx.massage.enums.ProductOrderStatusEnum;
+import com.ylx.massage.service.IProductOrderInfoService;
 import com.ylx.massage.service.RefundVoucherService;
 import com.ylx.massage.service.TOrderService;
 import com.ylx.massage.service.TRechargeService;
+import com.ylx.massage.service.TWxUserService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -73,6 +80,12 @@ public class PayController {
     @Resource
     private RefundVoucherService refundVoucherService;
 
+    @Resource
+    private IProductOrderInfoService productOrderInfoService;
+
+    @Resource
+    private TWxUserService wxUserService;
+
     //    @Resource
 //    private JsapiServiceExtension service;
     String serialNo;
@@ -261,8 +274,11 @@ public class PayController {
                     // 服务订单支付成功
                     orderService.payNotifyOrder(jsonObject.get("out_trade_no").toString());
                 } else if (jsonObject.get("attach").equals(PayTypeEnum.WX_PAY.getCode().toString())) {
-                    //商品订单支付成功
-
+                    // 商品订单支付成功
+                    String productOrderNo = jsonObject.get("out_trade_no").toString();
+                    log.info("商品订单支付回调开始处理,订单号:{}", productOrderNo);
+                    productOrderInfoService.handleWxPayCallback(productOrderNo);
+                    log.info("商品订单支付回调处理完成,订单号:{}", productOrderNo);
                 } else {
                     TRecharge outTradeNo = rechargeService.increaseAmount(jsonObject.get("out_trade_no").toString());
                 }

+ 2 - 2
nightFragrance-massage/src/main/java/com/ylx/massage/domain/TConsumptionLog.java

@@ -12,7 +12,7 @@ import java.math.BigDecimal;
 import java.util.Date;
 
 /**
- * 个人钱包记录表(TConsumptionLog)表实体类
+ * 个人消费记录表(TConsumptionLog)表实体类
  *
  * @author makejava
  * @since 2024-04-25 16:50:31
@@ -20,7 +20,7 @@ import java.util.Date;
 
 @SuppressWarnings("serial")
 @Data
-@ApiModel(value = "TConsumptionLog", description = "余额记录")
+@ApiModel(value = "TConsumptionLog", description = "个人消费记录")
 public class TConsumptionLog extends Model<TConsumptionLog> {
 
     /**

+ 6 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/IProductOrderInfoService.java

@@ -74,4 +74,10 @@ public interface IProductOrderInfoService extends IService<ProductOrderInfo> {
      * @return ProductOrderInfo 订单信息
      */
     ProductOrderInfo getAndCheckOrder(Long orderId, String openId);
+
+    /**
+     * 处理微信支付回调(商品订单)
+     * @param orderNo 订单编号
+     */
+    void handleWxPayCallback(String orderNo);
 }

+ 55 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/ProductOrderInfoServiceImpl.java

@@ -780,4 +780,59 @@ public class ProductOrderInfoServiceImpl extends ServiceImpl<ProductOrderInfoMap
         return receiverInfo;
     }
 
+    /**
+     * 处理微信支付回调(商品订单)
+     * 参照服务订单支付成功逻辑,更新用户表、消费记录表
+     *
+     * @param orderNo 订单编号
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void handleWxPayCallback(String orderNo) {
+        log.info("商品订单微信支付回调开始处理,订单号:{}", orderNo);
+
+        // 1. 查询未支付的商品订单
+        LambdaQueryWrapper<ProductOrderInfo> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ProductOrderInfo::getOrderNo, orderNo)
+                .eq(ProductOrderInfo::getOrderStatus, ProductOrderStatusEnum.WAIT_PAY.getCode());
+        ProductOrderInfo orderInfo = productOrderInfoMapper.selectOne(queryWrapper);
+        if (orderInfo == null) {
+            log.error("商品订单 {} 不存在或已支付", orderNo);
+            return;
+        }
+
+        // 2. 获取用户信息
+        TWxUser user = wxUserService.getByOpenId(orderInfo.getOpenId());
+        if (user == null) {
+            log.error("商品订单对应的用户不存在,openId:{}", orderInfo.getOpenId());
+            throw new ServiceException("用户不存在");
+        }
+
+        // 3. 更新用户金额及下单次数
+        TWxUser paramUser = new TWxUser();
+        paramUser.setId(user.getId());
+        paramUser.setcOpenid(user.getcOpenid());
+        paramUser.setdMoney(user.getdMoney().add(orderInfo.getTotalAmount()));
+        paramUser.setnNum(user.getnNum() + MassageConstants.INTEGER_ONE);
+        wxUserService.updateById(paramUser);
+
+        // 4. 增加消费记录
+        TConsumptionLog tConsumptionLog = new TConsumptionLog();
+        tConsumptionLog.setAmount(orderInfo.getTotalAmount().negate());
+        tConsumptionLog.setBillNo(orderInfo.getOrderNo());
+        tConsumptionLog.setOpenId(orderInfo.getOpenId());
+        tConsumptionLog.setBillType(BillTypeEnum.WX_PAY.getCode());
+        tConsumptionLog.setNote("微信支付");
+        consumptionLogService.save(tConsumptionLog);
+
+        // 5. 更新商品订单状态:待发货,支付状态:已支付
+        ProductOrderInfo updateOrder = new ProductOrderInfo();
+        updateOrder.setId(orderInfo.getId());
+        updateOrder.setOrderStatus(ProductOrderStatusEnum.WAIT_DELIVERY.getCode());
+        updateOrder.setPayStatus(MassageConstants.INTEGER_ONE);
+        updateOrder.setPayTime(LocalDateTime.now());
+        updateById(updateOrder);
+        log.info("商品订单微信支付回调处理完成,订单号:{},订单状态更新为待发货,支付状态更新为已支付", orderNo);
+    }
+
 }

+ 1 - 1
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TOrderServiceImpl.java

@@ -686,7 +686,7 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         paramUser.setnNum(user.getnNum() + MassageConstants.INTEGER_ONE);
         paramUser.setId(user.getId());
         wxUserService.updateById(paramUser);
-        //增加消费记录
+        //增加个人消费记录
         TConsumptionLog tConsumptionLog = new TConsumptionLog();
         tConsumptionLog.setAmount(orderNew.getTotalPrice().negate());
         tConsumptionLog.setBillNo(orderNew.getOrderNo());