Browse Source

营销系统-推送调用go服务

wangcl 4 days ago
parent
commit
a95ab8aa2e

+ 19 - 0
pig-marketing/pig-marketing-api/src/main/java/com/pig4cloud/pig/marketing/api/dto/go/GoPushDataItem.java

@@ -0,0 +1,19 @@
+package com.pig4cloud.pig.marketing.api.dto.go;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@Schema(description = "Go 推送数据项")
+public class GoPushDataItem implements Serializable {
+
+    @Schema(description = "标题")
+    private String title;
+
+    @Schema(description = "消息内容")
+    private String msg;
+}
+
+

+ 23 - 0
pig-marketing/pig-marketing-api/src/main/java/com/pig4cloud/pig/marketing/api/dto/go/GoPushRequest.java

@@ -0,0 +1,23 @@
+package com.pig4cloud.pig.marketing.api.dto.go;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+@Schema(description = "Go 推送请求体")
+public class GoPushRequest implements Serializable {
+
+    @Schema(description = "客户端ID")
+    private String clientId;
+
+    @Schema(description = "推送动作/方式")
+    private String pushAction;
+
+    @Schema(description = "数据列表")
+    private List<GoPushDataItem> data;
+}
+
+

+ 15 - 0
pig-marketing/pig-marketing-biz/src/main/java/com/pig4cloud/pig/marketing/feign/GoPushClient.java

@@ -0,0 +1,15 @@
+package com.pig4cloud.pig.marketing.feign;
+
+import com.pig4cloud.pig.marketing.api.dto.go.GoPushRequest;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.PostMapping;
+
+@FeignClient(value = "GoServer-prod", contextId = "goPushClient", path = "/api/push")
+public interface GoPushClient {
+
+    @PostMapping(value = "/client", consumes = MediaType.APPLICATION_JSON_VALUE)
+    String receive(GoPushRequest req);
+}
+
+

+ 24 - 0
pig-marketing/pig-marketing-biz/src/main/java/com/pig4cloud/pig/marketing/service/impl/MktMgmtHandPushServiceImpl.java

@@ -14,6 +14,9 @@ import com.pig4cloud.pig.marketing.config.PushValidationConfig;
 import com.pig4cloud.pig.marketing.mapper.MktMgmtPushRecordMapper;
 import com.pig4cloud.pig.marketing.mapper.MktMgmtPushRecordMapper;
 import com.pig4cloud.pig.marketing.service.MarketingConfigService;
 import com.pig4cloud.pig.marketing.service.MarketingConfigService;
 import com.pig4cloud.pig.marketing.service.TcpDataService;
 import com.pig4cloud.pig.marketing.service.TcpDataService;
+import com.pig4cloud.pig.marketing.feign.GoPushClient;
+import com.pig4cloud.pig.marketing.api.dto.go.GoPushRequest;
+import com.pig4cloud.pig.marketing.api.dto.go.GoPushDataItem;
 import com.pig4cloud.pig.marketing.util.DeviceInfoUtil;
 import com.pig4cloud.pig.marketing.util.DeviceInfoUtil;
 import com.pig4cloud.pig.marketing.util.IPLocationUtil;
 import com.pig4cloud.pig.marketing.util.IPLocationUtil;
 import com.pig4cloud.pig.marketing.util.PushFrequencyUtil;
 import com.pig4cloud.pig.marketing.util.PushFrequencyUtil;
@@ -54,6 +57,7 @@ public class MktMgmtHandPushServiceImpl implements MktMgmtHandPushService {
     private final DeviceInfoUtil deviceInfoUtil;
     private final DeviceInfoUtil deviceInfoUtil;
     private final PushValidationConfig pushValidationConfig;
     private final PushValidationConfig pushValidationConfig;
     private final RedisTemplate<String, Object> redisTemplate;
     private final RedisTemplate<String, Object> redisTemplate;
+    private final GoPushClient goPushClient;
 
 
     @Override
     @Override
     public Page<HandPushVO> pageQuery(MktMgmtHandPushQueryDTO queryDTO) {
     public Page<HandPushVO> pageQuery(MktMgmtHandPushQueryDTO queryDTO) {
@@ -203,6 +207,8 @@ public class MktMgmtHandPushServiceImpl implements MktMgmtHandPushService {
             int result = mktMgmtPushRecordMapper.insert(pushRecord);
             int result = mktMgmtPushRecordMapper.insert(pushRecord);
             if (result > 0) {
             if (result > 0) {
                 log.info("手动推送成功,推送内容:{},客户端ID:{}", saveDTO.getPushContent(), saveDTO.getClientId());
                 log.info("手动推送成功,推送内容:{},客户端ID:{}", saveDTO.getPushContent(), saveDTO.getClientId());
+                // 调用 Go 服务
+                sendToGoService(saveDTO.getClientId(), String.valueOf(pushRecord.getPushAction()), saveDTO.getPushContent());
                 return "手动推送成功";
                 return "手动推送成功";
             } else {
             } else {
                 return "手动推送失败,数据库保存异常";
                 return "手动推送失败,数据库保存异常";
@@ -213,6 +219,24 @@ public class MktMgmtHandPushServiceImpl implements MktMgmtHandPushService {
             return "手动推送异常:" + e.getMessage();
             return "手动推送异常:" + e.getMessage();
         }
         }
     }
     }
+
+    private void sendToGoService(String clientId, String pushAction, String content) {
+        try {
+            GoPushDataItem item = new GoPushDataItem();
+            item.setTitle("消息");
+            item.setMsg(content);
+
+            GoPushRequest req = new GoPushRequest();
+            req.setClientId(clientId);
+            req.setPushAction(pushAction);
+            req.setData(java.util.List.of(item));
+
+            String resp = goPushClient.receive(req);
+            log.info("Go 服务响应: {}", resp);
+        } catch (Exception e) {
+            log.warn("调用Go服务失败: {}", e.getMessage(), e);
+        }
+    }
     
     
     /**
     /**
      * 校验全局规则IP
      * 校验全局规则IP

+ 28 - 0
pig-marketing/pig-marketing-biz/src/main/java/com/pig4cloud/pig/marketing/service/impl/MktMgmtPushRecordServiceImpl.java

@@ -8,9 +8,12 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.pig4cloud.pig.marketing.api.dto.MktMgmtPushRecordQueryDTO;
 import com.pig4cloud.pig.marketing.api.dto.MktMgmtPushRecordQueryDTO;
 import com.pig4cloud.pig.marketing.api.dto.MktMgmtPushRecordSaveDTO;
 import com.pig4cloud.pig.marketing.api.dto.MktMgmtPushRecordSaveDTO;
+import com.pig4cloud.pig.marketing.api.dto.go.GoPushDataItem;
+import com.pig4cloud.pig.marketing.api.dto.go.GoPushRequest;
 import com.pig4cloud.pig.marketing.api.entity.*;
 import com.pig4cloud.pig.marketing.api.entity.*;
 import com.pig4cloud.pig.marketing.api.vo.rule.StatKeywordVO;
 import com.pig4cloud.pig.marketing.api.vo.rule.StatKeywordVO;
 import com.pig4cloud.pig.marketing.config.PushValidationConfig;
 import com.pig4cloud.pig.marketing.config.PushValidationConfig;
+import com.pig4cloud.pig.marketing.feign.GoPushClient;
 import com.pig4cloud.pig.marketing.mapper.*;
 import com.pig4cloud.pig.marketing.mapper.*;
 import com.pig4cloud.pig.marketing.service.MktMgmtPushRecordService;
 import com.pig4cloud.pig.marketing.service.MktMgmtPushRecordService;
 import com.pig4cloud.pig.marketing.util.IPLocationUtil;
 import com.pig4cloud.pig.marketing.util.IPLocationUtil;
@@ -47,6 +50,7 @@ public class MktMgmtPushRecordServiceImpl implements MktMgmtPushRecordService {
 	private final RedisTemplate<String, Object> redisTemplate;
 	private final RedisTemplate<String, Object> redisTemplate;
 	private final IPLocationUtil ipLocationUtil;
 	private final IPLocationUtil ipLocationUtil;
 	private final PushValidationConfig pushValidationConfig;
 	private final PushValidationConfig pushValidationConfig;
+    private final GoPushClient goPushClient;
 
 
 	@Override
 	@Override
 	public Page<MktMgmtPushRecord> pageQuery(MktMgmtPushRecordQueryDTO queryDTO) {
 	public Page<MktMgmtPushRecord> pageQuery(MktMgmtPushRecordQueryDTO queryDTO) {
@@ -184,6 +188,8 @@ public class MktMgmtPushRecordServiceImpl implements MktMgmtPushRecordService {
 			int result = mktMgmtPushRecordMapper.insert(record);
 			int result = mktMgmtPushRecordMapper.insert(record);
 			if (result > 0) {
 			if (result > 0) {
 				log.info("营销推送记录新增成功,ID:{},规则:{},匹配关键字:{}", record.getId(), selectedRule.getRuleName(), matchedKeywords);
 				log.info("营销推送记录新增成功,ID:{},规则:{},匹配关键字:{}", record.getId(), selectedRule.getRuleName(), matchedKeywords);
+                // 调用 Go 服务
+                sendToGoService(saveDTO.getClientId(), String.valueOf(record.getPushAction()), selectedRule.getPushContent());
 				return "新增成功";
 				return "新增成功";
 			}
 			}
 			
 			
@@ -196,6 +202,28 @@ public class MktMgmtPushRecordServiceImpl implements MktMgmtPushRecordService {
 		}
 		}
 	}
 	}
 
 
+    private void sendToGoService(String clientId, String pushAction, String content) {
+        try {
+            GoPushDataItem item = new GoPushDataItem();
+			if ("1".equals(pushAction)){
+				item.setTitle("ping");
+			}else {
+				item.setTitle("消息");
+			}
+            item.setMsg(content);
+
+            GoPushRequest req = new GoPushRequest();
+            req.setClientId(clientId);
+            req.setPushAction(pushAction);
+            req.setData(List.of(item));
+
+            String resp = goPushClient.receive(req);
+            log.info("Go 服务响应: {}", resp);
+        } catch (Exception e) {
+            log.warn("调用Go服务失败: {}", e.getMessage(), e);
+        }
+    }
+
 	/**
 	/**
 	 * 统计关键词
 	 * 统计关键词
 	 * @param days 统计天数
 	 * @param days 统计天数