Sfoglia il codice sorgente

Finish send email callback

Mure 1 mese fa
parent
commit
0a925a80f2

+ 5 - 32
src/main/java/com/backendsys/modules/sdk/tencentcloud/ems/controller/TencentEmsController.java

@@ -4,6 +4,8 @@ import cn.hutool.json.JSONObject;
 import com.backendsys.modules.common.config.security.annotations.Anonymous;
 import com.backendsys.modules.common.config.security.utils.HttpRequestUtil;
 import com.backendsys.modules.common.utils.Result;
+import com.backendsys.modules.sdk.tencentcloud.ems.entity.TencentEmsCallback;
+import com.backendsys.modules.sdk.tencentcloud.ems.entity.TencentEmsCallbackParams;
 import com.backendsys.modules.sdk.tencentcloud.ems.service.TencentEmsService;
 import com.backendsys.modules.sdk.tencentcloud.ems.service.TencentEmsCallbackService;
 import com.tencentcloudapi.common.exception.TencentCloudSDKException;
@@ -23,28 +25,15 @@ import java.util.Map;
 @Tag(name = "腾讯云-邮件回调")
 public class TencentEmsController {
 
-    @Autowired
-    private HttpRequestUtil httpRequestUtil;
-
     @Autowired
     private TencentEmsService tencentEmsService;
     @Autowired
     private TencentEmsCallbackService tencentEmsCallbackService;
 
-
     @Anonymous
     @Operation(summary = "邮件推送 (测试)")
     @GetMapping("/api/ems/send")
     public Result send(String email) {
-
-        // 再尝试输出一下:来源地址、URL参数、headers
-        System.out.println("===============================");
-        System.out.println("邮件推送 (测试)");
-        // 1. 打印所有请求头
-        JSONObject headers = httpRequestUtil.getHeaders();
-        System.out.println("headers 参数: " + headers);
-        System.out.println("===============================");
-
         String templateParamSet = "{ \"code\": \"123456\", \"minute\": \"5\" }";
         return Result.success().put("data", tencentEmsService.send("邮件测试", 140698L, templateParamSet, email));
     }
@@ -56,30 +45,14 @@ public class TencentEmsController {
     @Anonymous
     @Operation(summary = "邮件推送通知事件回调")
     @PostMapping("/api/ems/callback")
-    //public Result receiveCallback(@RequestBody List<TencentEmsCallbackNew> emsCallbackList) {
-    public Result receiveCallback(@RequestBody Object body) {
+    public Result receiveCallback(@RequestBody TencentEmsCallbackParams tencentEmsCallbackParams) {
 
         System.out.println("===============================");
         System.out.println("邮件推送通知事件回调");
-        System.out.println("body 参数: " + body);
-        System.out.println("===============================");
-
-        HttpServletRequest request = httpRequestUtil.getRequest();
-        // 1. 打印所有请求头
-        JSONObject headers = httpRequestUtil.getHeaders();
-        System.out.println("headers 参数: " + headers);
-        System.out.println("===============================");
-
-        System.out.println("url params 参数: ");
-        // 1. 打印所有 URL 参数
-        Map<String, String[]> params = request.getParameterMap();
-        params.forEach((name, values) -> {
-            // 同一个参数名可能有多个值
-            System.out.println(name + " = " + String.join(",", values));
-        });
+        System.out.println("body 参数: " + tencentEmsCallbackParams);
         System.out.println("===============================");
 
-        // tencentEmsCallbackService.receiveCallback(emsCallbackList);
+        tencentEmsCallbackService.receiveCallback(tencentEmsCallbackParams);
         return Result.success();
     }
 

+ 2 - 2
src/main/java/com/backendsys/modules/sdk/tencentcloud/ems/dao/TencentEmsCallbackDao.java

@@ -1,9 +1,9 @@
 package com.backendsys.modules.sdk.tencentcloud.ems.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.backendsys.modules.sdk.tencentcloud.ems.entity.TencentEmsCallbackEntity;
+import com.backendsys.modules.sdk.tencentcloud.ems.entity.TencentEmsCallback;
 import org.apache.ibatis.annotations.Mapper;
 
 @Mapper
-public interface TencentEmsCallbackDao extends BaseMapper<TencentEmsCallbackEntity> {
+public interface TencentEmsCallbackDao extends BaseMapper<TencentEmsCallback> {
 }

+ 1 - 1
src/main/java/com/backendsys/modules/sdk/tencentcloud/ems/entity/TencentEmsCallbackEntity.java → src/main/java/com/backendsys/modules/sdk/tencentcloud/ems/entity/TencentEmsCallback.java

@@ -7,7 +7,7 @@ import lombok.Data;
 
 @Data
 @TableName("sys_ems_callback")
-public class TencentEmsCallbackEntity {
+public class TencentEmsCallback {
     @TableId(type = IdType.AUTO)
     private Long id;
     private String event;

+ 1 - 1
src/main/java/com/backendsys/modules/sdk/tencentcloud/ems/entity/TencentEmsCallbackNew.java → src/main/java/com/backendsys/modules/sdk/tencentcloud/ems/entity/TencentEmsCallbackParams.java

@@ -3,7 +3,7 @@ package com.backendsys.modules.sdk.tencentcloud.ems.entity;
 import lombok.Data;
 
 @Data
-public class TencentEmsCallbackNew {
+public class TencentEmsCallbackParams {
     private String event;
     private String email;
     private String bulkId;

+ 5 - 4
src/main/java/com/backendsys/modules/sdk/tencentcloud/ems/service/TencentEmsCallbackService.java

@@ -1,9 +1,10 @@
 package com.backendsys.modules.sdk.tencentcloud.ems.service;
 
-import com.backendsys.modules.sdk.tencentcloud.ems.entity.TencentEmsCallbackNew;
-
-import java.util.List;
+import com.backendsys.modules.sdk.tencentcloud.ems.entity.TencentEmsCallbackParams;
 
 public interface TencentEmsCallbackService {
-    void receiveCallback(List<TencentEmsCallbackNew> tencentEmsCallbackNew);
+
+    // 邮件推送通知事件回调
+    void receiveCallback(TencentEmsCallbackParams tencentEmsCallbackParams);
+
 }

+ 33 - 29
src/main/java/com/backendsys/modules/sdk/tencentcloud/ems/service/impl/TencentEmsCallbackServiceImpl.java

@@ -1,52 +1,56 @@
 package com.backendsys.modules.sdk.tencentcloud.ems.service.impl;
 
+import cn.hutool.core.lang.Validator;
+import cn.hutool.core.util.StrUtil;
 import com.backendsys.modules.sdk.tencentcloud.ems.dao.TencentEmsCallbackDao;
-import com.backendsys.modules.sdk.tencentcloud.ems.entity.TencentEmsCallbackEntity;
-import com.backendsys.modules.sdk.tencentcloud.ems.entity.TencentEmsCallbackNew;
+import com.backendsys.modules.sdk.tencentcloud.ems.entity.TencentEmsCallback;
+import com.backendsys.modules.sdk.tencentcloud.ems.entity.TencentEmsCallbackParams;
 import com.backendsys.modules.sdk.tencentcloud.ems.service.TencentEmsCallbackService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.dao.DuplicateKeyException;
 import org.springframework.stereotype.Service;
 
-import java.util.List;
-
 @Service
 public class TencentEmsCallbackServiceImpl implements TencentEmsCallbackService {
     @Autowired
     private TencentEmsCallbackDao tencentEmsCallbackDao;
 
     @Override
-    public void receiveCallback(List<TencentEmsCallbackNew> emsCallbackList) {
-        for (TencentEmsCallbackNew dto : emsCallbackList) {
-            String messageId = dto.getMessageId();
-            try {
-                // 幂等检查(根据 messageId)
-                if (tencentEmsCallbackDao.selectById(messageId) != null) {
-                    continue;
-                }
+    public void receiveCallback(TencentEmsCallbackParams tencentEmsCallbackParams) {
+        String messageId = tencentEmsCallbackParams.getMessageId();
+        try {
+
+            // 判断邮箱地址非空
+            String email = tencentEmsCallbackParams.getEmail();
+            if (!StrUtil.isBlank(email) && Validator.isEmail(email)) {
+
+                // 这里可能需要做更多的条件判断?
+
                 // 构建实体
-                TencentEmsCallbackEntity entity = new TencentEmsCallbackEntity();
-                entity.setEvent(dto.getEvent());
-                entity.setEmail(dto.getEmail());
-                entity.setBulk_id(dto.getBulkId());
-                entity.setTimestamp(dto.getTimestamp());
-                entity.setReason(dto.getReason());
-                entity.setBounce_type(dto.getBounceType());
-                entity.setUsername(dto.getUsername());
-                entity.setSender(dto.getFrom());
-                entity.setFrom_domain(dto.getFromDomain());
-                entity.setTemplate_id(dto.getTemplateId());
-                entity.setSubject(dto.getSubject());
+                TencentEmsCallback entity = new TencentEmsCallback();
+                entity.setEvent(tencentEmsCallbackParams.getEvent());
+                entity.setEmail(email);
+                entity.setBulk_id(tencentEmsCallbackParams.getBulkId());
+                entity.setTimestamp(tencentEmsCallbackParams.getTimestamp());
+                entity.setReason(tencentEmsCallbackParams.getReason());
+                entity.setBounce_type(tencentEmsCallbackParams.getBounceType());
+                entity.setUsername(tencentEmsCallbackParams.getUsername());
+                entity.setSender(tencentEmsCallbackParams.getFrom());
+                entity.setFrom_domain(tencentEmsCallbackParams.getFromDomain());
+                entity.setTemplate_id(tencentEmsCallbackParams.getTemplateId());
+                entity.setSubject(tencentEmsCallbackParams.getSubject());
                 entity.setMessage_id(messageId);
                 // 保存记录
                 tencentEmsCallbackDao.insert(entity);
+                System.out.println("邮件推送回调成功");
 
-            } catch (DuplicateKeyException e) {
-                // 数据库唯一索引冲突兜底幂等
-                System.out.println("重复插入数据:" + messageId);
-            } catch (Exception e) {
-                e.printStackTrace();
             }
+
+        } catch (DuplicateKeyException e) {
+            // 数据库唯一索引冲突兜底幂等
+            System.out.println("重复插入数据:" + messageId);
+        } catch (Exception e) {
+            e.printStackTrace();
         }
     }
 }