Bladeren bron

test: create adgroup

pudongliang 5 maanden geleden
bovenliggende
commit
e98c24e857

+ 1 - 1
TODO.md

@@ -10,7 +10,7 @@
 - 获取token
 - 生成定时任务维护token
 
-
+66628192
 福建茂同刘文化传媒有限公司南 66612379 线索企微
 
 福建茂同刘文化传媒有限公司南 76057781 roi 

+ 2 - 2
src/main/java/com/moka/gdtauto/client/TencentAdsApiClientFactory.java

@@ -32,12 +32,12 @@ public class TencentAdsApiClientFactory {
      * 根据手机号和账户ID获取TencentAds实例
      * 自动处理token刷新逻辑,并传入user_token
      * 
-     * @param phone 手机号
      * @param accountId 账户ID
+     * @param phone 手机号
      * @return TencentAds实例
      * @throws Exception 当获取token失败时抛出
      */
-    public TencentAds getTencentAds(String phone, Long accountId) throws Exception {
+    public TencentAds getTencentAds(Long accountId, String phone) throws Exception {
         // 获取账户的访问令牌
         TencentAdsAuth auth = authService.getByAccountId(accountId);
         if (auth == null) {

+ 30 - 5
src/main/java/com/moka/gdtauto/service/TencentAdsAccountService.java

@@ -46,17 +46,17 @@ public class TencentAdsAccountService {
      * @return 广告组列表响应数据
      * @throws Exception API异常
      */
-    public AdgroupsGetResponseData getAdgroups(Long accountId, Long page, Long pageSize) 
+    public AdgroupsGetResponseData getAdgroups(Long orgAccountId, Long accountId, Long page, Long pageSize) 
             throws TencentAdsResponseException, TencentAdsSDKException, Exception {
         log.info("开始获取广告组列表,accountId={}, page={}, pageSize={}", accountId, page, pageSize);
             
         // 获取TencentAds实例
-        TencentAds tencentAds = clientFactory.getTencentAdsWithoutUserToken(accountId);
+        TencentAds tencentAds = clientFactory.getTencentAdsWithoutUserToken(orgAccountId);
             
         // 调用SDK的adgroups().adgroupsGet()方法
         List<FilteringStruct> filtering = null; // 不传过滤条件,获取全部
         Boolean isDeleted = false; // 不包含已删除的广告组
-        List<String> fields = null; // 返回所有字段
+        List<String> fields = buildFields(); // 返回所有字段
         String paginationMode = null; // 使用默认分页模式
         String cursor = null; // 游标分页用,普通分页不需要
             
@@ -69,6 +69,31 @@ public class TencentAdsAccountService {
         return response;
     }
 
+
+
+    private List<String> buildFields() {
+        return List.of(
+            "adgroup_id",
+            "adgroup_name",
+            "targeting",
+            "marketing_goal",
+            "marketing_carrier_type",
+            "marketing_target_type",
+            "marketing_asset_id",
+            "begin_date",
+            "end_date",
+            "optimization_goal",
+            "time_series",
+            "site_set",
+            "bid_amount",
+            "daily_budget",
+            "conversion_id",
+            "bid_mode",
+            "auto_derived_creative_enabled",
+            "bid_scene"
+        );
+    }
+
     /**
      * 获取广告组列表(使用默认分页参数)
      * 默认获取第1页,10条数据
@@ -77,9 +102,9 @@ public class TencentAdsAccountService {
      * @return 广告组列表响应数据
      * @throws Exception API异常
      */
-    public AdgroupsGetResponseData getAdgroups(Long accountId) 
+    public AdgroupsGetResponseData getAdgroups(Long orgAccountId, Long accountId) 
             throws TencentAdsResponseException, TencentAdsSDKException, Exception {
-        return getAdgroups(accountId, 1L, 10L);
+        return getAdgroups(orgAccountId, accountId, 1L, 10L);
     }
 
     /**

+ 4 - 6
src/main/java/com/moka/gdtauto/service/TencentAdsAdgroupService.java

@@ -285,22 +285,20 @@ public class TencentAdsAdgroupService extends ServiceImpl<TencentAdsAdgroupMappe
      * 创建广告
      * 
      * @param accountId 广告主账户ID
+     * @param phone 手机号
      * @param request 创建广告请求参数
      * @return 创建成功的广告信息
      * @throws TencentAdsResponseException API响应异常
      * @throws TencentAdsSDKException SDK异常
      * @throws Exception 其他异常
      */
-    public AdgroupsAddResponseData createAdgroup(Long accountId, AdgroupsAddRequest request) 
+    public AdgroupsAddResponseData createAdgroup(Long accountId, String phone, AdgroupsAddRequest request) 
             throws TencentAdsResponseException, TencentAdsSDKException, Exception {
         log.info("开始创建广告,accountId={}, adgroupName={}", accountId, request.getAdgroupName());
         
         // 获取TencentAds实例
-        TencentAds tencentAds = clientFactory.getTencentAdsWithoutUserToken(accountId);
-        
-        // 设置账户ID
-        request.setAccountId(accountId);
-        
+        TencentAds tencentAds = clientFactory.getTencentAds(accountId, phone);
+        tencentAds.setDebug(true);
         // 调用SDK创建广告
         AdgroupsAddResponseData response = tencentAds.adgroups()
             .adgroupsAdd(request);

+ 13 - 2
src/main/java/com/moka/gdtauto/service/TencentAdsAuthService.java

@@ -299,8 +299,19 @@ public class TencentAdsAuthService extends ServiceImpl<TencentAdsAuthMapper, Ten
         auth.setCreateTime(LocalDateTime.now());
         auth.setUpdateTime(LocalDateTime.now());
         
-        save(auth);
-        
+        // select by accountId
+        LambdaQueryWrapper<TencentAdsAuth> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(TencentAdsAuth::getAccountId, auth.getAccountId())
+                .eq(TencentAdsAuth::getDeleted, 0)
+                .orderByDesc(TencentAdsAuth::getId)
+                .last("LIMIT 1");
+        TencentAdsAuth existAuth = getOne(wrapper);
+        if (existAuth != null) {
+            auth.setId(existAuth.getId());
+            updateById(auth);
+        } else {
+            save(auth);
+        }
         return auth;
     }
 

+ 6 - 3
src/test/java/com/moka/gdtauto/integration/AdgroupsApiManualTest.java

@@ -4,6 +4,8 @@ import com.alibaba.fastjson2.JSON;
 import com.moka.gdtauto.GdtAutoApplication;
 import com.moka.gdtauto.service.TencentAdsAccountService;
 import com.tencent.ads.model.v3.AdgroupsGetResponseData;
+
+import org.aspectj.weaver.ast.Or;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -18,13 +20,14 @@ import org.springframework.test.context.ActiveProfiles;
  * @since 2026-02-04
  */
 @SpringBootTest(classes = GdtAutoApplication.class)
-@ActiveProfiles("local")
+@ActiveProfiles("test")
 class AdgroupsApiManualTest {
 
     @Autowired
     private TencentAdsAccountService accountService;
 
-    private static final Long TEST_ACCOUNT_ID = 66612379L;
+   private static final Long ORG_ACCOUNT_ID = 33453856L;
+    private static final Long TEST_ACCOUNT_ID = 69781948L;
 
     @Test
     @DisplayName("手动测试-获取广告组列表第1页")
@@ -37,7 +40,7 @@ class AdgroupsApiManualTest {
         try {
             // 调用SDK获取第1页,10条数据
             System.out.println("正在调用腾讯广告API...");
-            AdgroupsGetResponseData response = accountService.getAdgroups(TEST_ACCOUNT_ID, 1L, 10L);
+            AdgroupsGetResponseData response = accountService.getAdgroups(ORG_ACCOUNT_ID, TEST_ACCOUNT_ID, 1L, 10L);
 
             // 将返回结果JSON化输出
             System.out.println("\n========== API返回结果(JSON格式) ==========");

+ 33 - 33
src/test/java/com/moka/gdtauto/service/TencentAdsAdgroupCreateTest.java

@@ -4,6 +4,8 @@ import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import com.moka.gdtauto.GdtAutoApplication;
 import com.tencent.ads.model.v3.*;
+
+import org.apache.tomcat.util.http.parser.TE;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -20,13 +22,18 @@ import java.util.List;
  * @since 2026-02-04
  */
 @SpringBootTest(classes = GdtAutoApplication.class)
-@ActiveProfiles("local")
+@ActiveProfiles("test")
 class TencentAdsAdgroupCreateTest {
 
     @Autowired
     private TencentAdsAdgroupService adgroupService;
 
-    private static final Long TEST_ACCOUNT_ID = 66612379L;
+    private static final Long ORG_ACCOUNT_ID = 33453856L;
+    private static final Long TEST_ACCOUNT_ID = 69781948L;
+    private static final String TEST_PHONE = "13057411858";
+
+
+
 
     @Test
     @DisplayName("测试创建广告-使用提供的测试数据")
@@ -38,7 +45,7 @@ class TencentAdsAdgroupCreateTest {
 
         try {
             // 构建测试数据(您提供的JSON数据)
-            AdgroupsAddRequest request = buildTestRequest();
+            AdgroupsAddRequest request = buildTestRequest(TEST_ACCOUNT_ID);
             
             // 输出请求参数
             System.out.println("========== 请求参数 ==========");
@@ -48,7 +55,7 @@ class TencentAdsAdgroupCreateTest {
 
             // 调用创建广告接口
             System.out.println("正在调用腾讯广告创建API...");
-            AdgroupsAddResponseData response = adgroupService.createAdgroup(TEST_ACCOUNT_ID, request);
+            AdgroupsAddResponseData response = adgroupService.createAdgroup(ORG_ACCOUNT_ID, TEST_PHONE, request);
 
             // 输出响应结果
             System.out.println("\n========== API返回结果 ==========");
@@ -76,46 +83,51 @@ class TencentAdsAdgroupCreateTest {
     /**
      * 构建测试请求对象
      */
-    private AdgroupsAddRequest buildTestRequest() {
+    private AdgroupsAddRequest buildTestRequest(Long accountId) {
         AdgroupsAddRequest request = new AdgroupsAddRequest();
 
         // 基础字段
         request.setAdgroupName("测试ROI-0204" + System.currentTimeMillis());
-        request.setMarketingGoal(MarketingGoal.USER_GROWTH);
+        request.setAccountId(accountId);
+        request.setMarketingGoal(MarketingGoal.LEAD_RETENTION);
         request.setMarketingCarrierType(MarketingCarrierType.JUMP_PAGE);
+        MarketingAssetOuterSpec outerSpec = new MarketingAssetOuterSpec();
+        outerSpec.setMarketingTargetType(MarketingTargetType.WECHAT_WORK);
+        outerSpec.setMarketingAssetOuterId("wp7eXwDAAAC2oIBdHTa0-QV8KNGDd3mA");
+        request.setMarketingAssetOuterSpec(outerSpec);
+    
+
         
         // 投放时间
-        request.setBeginDate("2026-02-04");
-        request.setEndDate("2026-02-05");
+        request.setBeginDate("2026-02-05");
+        request.setEndDate("2026-02-06");
         
         // 优化目标
-        request.setOptimizationGoal(OptimizationGoal.APP_REGISTER);
+        request.setOptimizationGoal(OptimizationGoal.PAGE_SCAN_CODE);
         
         // 时间序列(全部1表示24小时投放,共7天*48个半小时=336位)
         request.setTimeSeries("111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111");
         
         // 投放站点
         List<String> siteSet = new ArrayList<>();
-        siteSet.add("SITE_SET_SEARCH_SCENE");
         siteSet.add("SITE_SET_MOBILE_UNION");
         siteSet.add("SITE_SET_WECHAT");
-        siteSet.add("SITE_SET_KANDIAN");
-        siteSet.add("SITE_SET_QQ_MUSIC_GAME");
-        siteSet.add("SITE_SET_TENCENT_NEWS");
+        siteSet.add("SITE_SET_WECHAT_PLUGIN");
         siteSet.add("SITE_SET_TENCENT_VIDEO");
+        siteSet.add("SITE_SET_SEARCH_SCENE");
+
         request.setSiteSet(siteSet);
         
         // 出价金额(单位:分)
         request.setBidAmount(100L);
         
         // 日预算(单位:分)
-        request.setDailyBudget(1000L);
-        
-        // 转化ID
-        request.setConversionId(74719216L);
-        
+        request.setDailyBudget(10000L);
+    
         // 出价模式
         request.setBidMode(BidMode.OCPM);
+
+        request.setConversionId(67676141L);
         
         // 自动衍生创意
         request.setAutoDerivedCreativeEnabled(false);
@@ -168,28 +180,16 @@ class TencentAdsAdgroupCreateTest {
         conversionBehaviorList.add("OPTIMIZATIONGOAL_PAGE_SCAN_CODE");
         excludedConverted.setConversionBehaviorList(conversionBehaviorList);
         
-        excludedConverted.setExcludedDay(ExcludedDay.valueOf("EXCLUDED_DAY_ONE_MONTH"));
+        excludedConverted.setExcludedDay(ExcludedDay.ONE_MONTH);
         targeting.setExcludedConvertedAudience(excludedConverted);
 
         // 排除自定义人群
         List<Long> excludedCustomAudience = new ArrayList<>();
-        excludedCustomAudience.add(43712084L);
-        excludedCustomAudience.add(44107982L);
         excludedCustomAudience.add(44106830L);
-        excludedCustomAudience.add(44241932L);
+        excludedCustomAudience.add(44107982L);
+        excludedCustomAudience.add(43712084L);
         targeting.setExcludedCustomAudience(excludedCustomAudience);
 
         return targeting;
     }
-
-    @Test
-    @DisplayName("打印测试数据JSON")
-    void printTestDataJson() {
-        AdgroupsAddRequest request = buildTestRequest();
-        Gson gson = new GsonBuilder().setPrettyPrinting().create();
-        String json = gson.toJson(request);
-        System.out.println("\n========== 测试数据JSON ==========");
-        System.out.println(json);
-        System.out.println("========================================\n");
-    }
 }