Forráskód Böngészése

feat(marketing): 添加优惠券核销功能并实现支付成功回调通知

- 在 MemberCouponService 接口中添加 verification 方法用于核销优惠券
- 在 MemberCouponServiceImpl 类中实现 verification 方法的具体逻辑
- 新增 InnerNotifyController 控制器处理内部回调通知,包括支付成功后的优惠券核销
hechunping 3 hónapja
szülő
commit
7878a29432

+ 38 - 0
src/main/java/com/xynet/marketing/controller/inner/InnerNotifyController.java

@@ -0,0 +1,38 @@
+package com.xynet.marketing.controller.inner;
+
+import com.xynet.marketing.service.MemberCouponService;
+import com.xynet.marketing.utils.R;
+import com.xynet.marketing.utils.collections.map.JHashMap;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+
+/**
+ * 内部回调通知接口
+ *
+ * @author hechunping
+ * @date 2025/2/26
+ */
+@RestController
+@RequestMapping("inner/notify")
+@AllArgsConstructor
+@Slf4j
+@CrossOrigin(origins = "*")
+public class InnerNotifyController {
+    private MemberCouponService memberCouponService;
+
+    @PostMapping("paySuccess")
+    public R paySuccess(@RequestBody JHashMap<String, Object> param, @RequestHeader Map<String, String> headers) {
+        String orderId = param.getString("orderId");
+//        String thirdMemberId = param.getString("thirdMemberId");
+//        String thirdMercId = param.getString("thirdMercId");
+        //TODO 检查订单是否已被处理过
+        //核销优惠券
+        memberCouponService.verification(param);
+        log.info("支付成功回调通知,订单号:{}", orderId);
+        return R.ok();
+    }
+
+}

+ 7 - 0
src/main/java/com/xynet/marketing/service/MemberCouponService.java

@@ -52,4 +52,11 @@ public interface MemberCouponService {
      * @return
      */
     List<Map<String, Object>> enableList(JMap<String, Object> param);
+
+    /**
+     * 核销优惠券
+     *
+     * @param param
+     */
+    void verification(JMap<String, Object> param);
 }

+ 16 - 0
src/main/java/com/xynet/marketing/service/impl/MemberCouponServiceImpl.java

@@ -2,6 +2,7 @@ package com.xynet.marketing.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xynet.marketing.entity.MemberCoupon;
@@ -19,6 +20,8 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -124,6 +127,19 @@ public class MemberCouponServiceImpl extends ServiceImpl<MemberCouponMapper, Mem
         return result;
     }
 
+    @Override
+    public void verification(JMap<String, Object> param) {
+        List<Object> memberCouponIdList = param.getList("memberCouponIdList");
+        String orderId = param.getString("orderId");
+        LocalDateTime orderTime = LocalDateTime.parse(param.getString("orderTime"), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+        LambdaUpdateWrapper<MemberCoupon> luw = new LambdaUpdateWrapper<MemberCoupon>()
+                .set(MemberCoupon::getStatus, MemberCouponStatusEnum.USED.getCode())
+                .set(MemberCoupon::getUseTime, orderTime)
+                .set(MemberCoupon::getUseOrderId, orderId)
+                .in(MemberCoupon::getId, memberCouponIdList);
+        update(luw);
+    }
+
     @Override
     public Map<String, Object> obj(JMap<String, Object> param) {
         LambdaQueryWrapper<MemberCoupon> lqw = commonQueryWrapper(param).last("limit 1");