Преглед изворни кода

巨量平台监控链接回传

chenbiao пре 2 година
родитељ
комит
d40f2b2346

+ 3 - 0
netflix-service/src/main/java/com/cyksj/redis/RedisService.java

@@ -636,6 +636,9 @@ public class RedisService {
         CORP_GROUP_CHAT_LIST("corp_group_chat_list:%s", "企业微信客户群列表", 60 * 60 * 24),
         PLUS_GOODS_ADDRESS_KEY("plus_goods_address_key:", "优惠加购实物地址key", 10 * 60l),
         GROUPS_TRIPS_OUTSIDE_RELATION("groups_trips_outside_relation:key", "额外车位", 30l),
+
+        //巨量广告平台临时存储 callback
+        OCEANENGINE_MONITOR_CALLBCAK("oceanengine:monitor:callback","巨量广告投放临时数据",60L*60L*24L),
         ;
 
         private String name;

+ 12 - 0
netflix-service/src/main/java/com/cyksj/service/corp/impl/CorpEventActionServiceImpl.java

@@ -27,6 +27,7 @@ import com.cyksj.service.corp.WxCorpOps;
 import com.cyksj.service.corp.msg.CorpEventActionService;
 import com.cyksj.service.mange.coupon.CouponCommonService;
 import com.cyksj.service.market.MarketFrontService;
+import com.cyksj.service.oceanengine.OceanengineService;
 import com.cyksj.service.relation.GroupRelationFrontService;
 import com.cyksj.service.sys.SysConfigService;
 import lombok.RequiredArgsConstructor;
@@ -81,6 +82,8 @@ public class CorpEventActionServiceImpl implements CorpEventActionService {
 
 	private final CouponCommonService couponCommonService;
 
+	private final OceanengineService oceanengineService;
+
 	private static final String DEFAULT_MSG = "您好,欢迎加入银河录像局";
 
 	/**
@@ -101,6 +104,7 @@ public class CorpEventActionServiceImpl implements CorpEventActionService {
 		if (corpUserInfo == null) {
 			return null;
 		}
+
 		THREAD_POOL.execute(()->{
 			//保存企微用户
 			CorpUser corpUser = saveOrUpdateCorpUser(message, corpUserInfo);
@@ -127,6 +131,14 @@ public class CorpEventActionServiceImpl implements CorpEventActionService {
 					.forEach(followedUser -> updateUserFollowRelation(followedUser, corpUserInfo.getExternalUserId(), wxCorpApp.getId()));
 		});
 
+		//如果是该客服添加用户,代表通过巨量平台 添加用户.执行广告回传.
+		if(userId.equals("yami")){
+			THREAD_POOL.execute(()->{
+				oceanengineService.monitorAddCorpPost();
+			});
+		}
+
+
 		//发送自定义欢迎语
 		//sendDesignWelcomeMsg(corpId, welcomeCode, userId, corpUserInfo.getCorpName());
 		return null;

+ 15 - 0
netflix-service/src/main/java/com/cyksj/service/oceanengine/OceanengineService.java

@@ -0,0 +1,15 @@
+package com.cyksj.service.oceanengine;
+
+import java.io.IOException;
+
+/**
+ * @author chan
+ * @date 2023/10/18 14:14
+ */
+public interface OceanengineService {
+    /**
+     * 监控链接 用户添加企业微信回传.
+     */
+    void monitorAddCorpPost();
+
+}

+ 58 - 0
netflix-service/src/main/java/com/cyksj/service/oceanengine/impl/OceanengineServiceImpl.java

@@ -0,0 +1,58 @@
+package com.cyksj.service.oceanengine.impl;
+
+import cn.hutool.json.JSONObject;
+import com.cyksj.common.util.IoKit;
+import com.cyksj.common.util.J11HttpC;
+import com.cyksj.common.util.Jsons;
+import com.cyksj.common.util.StringUtil;
+import com.cyksj.redis.RedisService;
+import com.cyksj.service.oceanengine.OceanengineService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.net.http.HttpResponse;
+import java.util.Set;
+
+/**
+ * @author chan
+ * @date 2023/10/18 14:14
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class OceanengineServiceImpl implements OceanengineService {
+
+    private final RedisService redisService;
+
+    @Override
+    public void monitorAddCorpPost() {
+        Set<Object> callbackSet = redisService.sGet(RedisService.key.OCEANENGINE_MONITOR_CALLBCAK.getName());
+        if (callbackSet.size() > 0) {
+            String callback = StringUtil.getString(callbackSet.stream().findFirst().get());
+            JSONObject params = new JSONObject();
+            params.putOpt("event_type", "active_pay");
+            JSONObject context = new JSONObject();
+            JSONObject ad = new JSONObject();
+            ad.putOpt("callback", StringUtil.getString(callback));
+            context.putOpt("ad", ad);
+            params.putOpt("context", context);
+            params.putOpt("timestamp", System.currentTimeMillis());
+
+            try {
+                HttpResponse<String> res =
+                        J11HttpC.custom()
+                                .ofPost()
+                                .url("https://analytics.oceanengine.com/api/v2/conversion")
+                                .headers(J11HttpC.ReqType.raw_json)
+                                .body(java.net.http.HttpRequest.BodyPublishers.ofString(params.toString(), IoKit.Charsets.UTF_8.getCharset()))
+                                .send(HttpResponse.BodyHandlers.ofString());
+                log.info("巨量回传 res:{}",res.body());
+                redisService.setRemove(RedisService.key.OCEANENGINE_MONITOR_CALLBCAK.getName(), callback);
+            } catch (Exception e) {
+                log.error("巨量回传 error:{}",StringUtil.getErrorMsg(e));
+            }
+        }
+    }
+}

+ 50 - 0
netflix-web/src/main/java/com/cyksj/web/controller/post/OceanengineController.java

@@ -0,0 +1,50 @@
+package com.cyksj.web.controller.post;
+
+import cn.hutool.http.HttpUtil;
+import cn.hutool.json.JSONObject;
+import com.cyksj.common.util.IoKit;
+import com.cyksj.common.util.J11HttpC;
+import com.cyksj.common.util.Jsons;
+import com.cyksj.common.util.StringUtil;
+import com.cyksj.dto.Result;
+import com.cyksj.enums.GatewayResponse;
+import com.cyksj.redis.RedisService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import java.net.URL;
+import java.net.http.HttpResponse;
+import java.nio.charset.StandardCharsets;
+import java.util.Map;
+
+/**
+ * 数据回传
+ * @author chan
+ * @date 2023/10/18 13:49
+ */
+@Slf4j
+@RestController
+@RequestMapping("/applets/oceanengine")
+@RequiredArgsConstructor
+public class OceanengineController {
+    private final RedisService redisService;
+
+    @RequestMapping("/monitor")
+    private Result<String> monitor(HttpServletRequest request, String callback_url) throws Exception {
+        Map<String, String[]> parameterMap = request.getParameterMap();
+
+        //https://analytics,oceanengine.com/api/v2/conversion
+        //customer_effective
+        log.info("巨量监控地址 参数:\n{}", Jsons.toJson(parameterMap));
+        if(StringUtils.isNotBlank(callback_url) && !"__CALLBACK_URL__".equals(callback_url)){
+            Map<String, String> paramMap1 = HttpUtil.decodeParamMap(callback_url, StandardCharsets.UTF_8);
+                redisService.sSetAndTime(RedisService.key.OCEANENGINE_MONITOR_CALLBCAK.getName(), RedisService.key.OCEANENGINE_MONITOR_CALLBCAK.getTimeout(), StringUtil.getString(paramMap1.get("callback")));
+            }
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
+}