浏览代码

Merge remote-tracking branch 'origin/master'

marxjaw 4 月之前
父节点
当前提交
7beba20b76

+ 22 - 0
yt-agent/agent-service/src/main/java/com/ytpm/controller/AppController.java

@@ -1,5 +1,7 @@
 package com.ytpm.controller;
 
+import com.ytpm.advertise.param.AppCategoryParam;
+import com.ytpm.advertise.param.AppSubCategoryParam;
 import com.ytpm.advertise.param.RelativeChannelParam;
 import com.ytpm.agent.param.AppListParam;
 import com.ytpm.agent.param.AppParam;
@@ -71,4 +73,24 @@ public class AppController {
     public Result<?> relativeChannel(@RequestBody RelativeChannelParam param){
         return agentAppService.relativeChannel(param);
     }
+
+    /**
+     * 获取指定平台下的一级分类
+     */
+    @ApiOperation("获取指定平台下的一级分类")
+    @PostMapping("/getPrimaryCategories")
+    public Result<?> getPrimaryCategories(@RequestBody AppCategoryParam param){
+        return agentAppService.getPrimaryCategories(param.getPlatform());
+    }
+
+    /**
+     * 获取指定平台下的一级分类下的二级分类
+     */
+    @ApiOperation("获取指定平台下的一级分类下的二级分类")
+    @PostMapping("/getSecondaryCategories")
+    public Result<?> getPrimaryCategories(@RequestBody AppSubCategoryParam param){
+        return agentAppService.getSecondaryCategories(param.getPlatform(), param.getPrimaryCategory());
+    }
+
+
 }

+ 10 - 0
yt-agent/agent-service/src/main/java/com/ytpm/service/AgentAppService.java

@@ -33,4 +33,14 @@ public interface AgentAppService {
      * 应用关联广告平台 & 广告平台应用
      */
     Result<?> relativeChannel(RelativeChannelParam param);
+
+    /**
+     * 获取指定平台下的一级分类
+     */
+    Result<?> getPrimaryCategories(String platform);
+
+    /**
+     * 获取指定平台下的一级分类下的二级分类
+     */
+    Result<?> getSecondaryCategories(String platform,String primaryCategory);
 }

+ 14 - 0
yt-agent/agent-service/src/main/java/com/ytpm/service/impl/AgentAppServiceImpl.java

@@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.ytpm.advertise.enums.AppCategoryEnum;
 import com.ytpm.advertise.param.AddAppParam;
 import com.ytpm.advertise.param.ComprehensiveReportParam;
 import com.ytpm.advertise.param.RelativeChannelParam;
@@ -178,4 +179,17 @@ public class AgentAppServiceImpl implements AgentAppService {
         appMapper.updateOne(app);
         return Result.resultOk(RepMessage.RELATIVE_SUCCESS);
     }
+
+    @Override
+    public Result<?> getPrimaryCategories(String platform) {
+        List<String> primaryCategories = AppCategoryEnum.getPrimaryCategories(platform);
+        return Result.resultObjOk(primaryCategories);
+    }
+
+    @Override
+    public Result<?> getSecondaryCategories(String platform, String primaryCategory) {
+        List<String> secondaryCategories = AppCategoryEnum.getSecondaryCategories(platform, primaryCategory);
+        return Result.resultObjOk(secondaryCategories);
+    }
+
 }

+ 161 - 0
yt-common/src/main/java/com/ytpm/advertise/enums/AppCategoryEnum.java

@@ -0,0 +1,161 @@
+package com.ytpm.advertise.enums;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+public enum AppCategoryEnum {
+    ANDROID(
+        "Android", 
+        Arrays.asList(
+            new PrimaryCategory("App", Arrays.asList(
+                "Daydream", "Android Wear", "Art & Design", "Auto & Vehicles", "Beauty", 
+                "Books & Reference", "Business", "Comics", "Communication", "Dating", 
+                "Education", "Entertainment", "Events", "Finance", "Food & Drink", 
+                "Health & Fitness", "House & Home", "Libraries & Demo", "Lifestyle", 
+                "Maps & Navigation", "Medical", "Music & Audio", "News & Magazines", 
+                "Parenting", "Personalisation", "Photography", "Productivity", "Shopping", 
+                "Social", "Sports", "Tools", "Travel & Local", "Video Players & Editors", "Weather"
+            )),
+            new PrimaryCategory("Game", Arrays.asList(
+                "Action", "Adventure", "Arcade", "Board", "Card", "Casino", "Casual", 
+                "Educational", "Music", "Puzzle", "Racing", "Role Playing", "Simulation", 
+                "Sports", "Strategy", "Trivia", "Word"
+            )),
+            new PrimaryCategory("Family", Arrays.asList(
+                "Ages 5 & Under", "Ages 6-8", "Ages 9 & Over", "Action & Adventure", 
+                "Brain Games", "Creativity", "Education", "Music and video", "Pretend play"
+            ))
+        )
+    ),
+    
+    IOS(
+        "iOS", 
+        Arrays.asList(
+            new PrimaryCategory("App", Arrays.asList(
+                "Books", "Business", "Catalogs", "Education", "Entertainment", "Finance", 
+                "Food & Drink", "Health & Fitness", "Lifestyle", "Magazines & Newspapers", 
+                "Medical", "Music", "Navigation", "News", "Photo & Video", "Productivity", 
+                "Reference", "Shopping", "Social Networking", "Sports", "Stickers", "Travel", 
+                "Utilities", "Weather"
+            )),
+            new PrimaryCategory("Game", Arrays.asList(
+                "Action", "Adventure", "Arcade", "Board", "Card", "Casino", "Dice", 
+                "Educational", "Family", "Music", "Puzzle", "Racing", "Role Playing", 
+                "Simulation", "Sports", "Strategy", "Trivia", "Word"
+            ))
+        )
+    );
+
+    private final String platform;
+    private final List<PrimaryCategory> primaryCategories;
+
+    AppCategoryEnum(String platform, List<PrimaryCategory> primaryCategories) {
+        this.platform = platform;
+        this.primaryCategories = primaryCategories;
+    }
+
+    public String getPlatform() {
+        return platform;
+    }
+
+    public List<PrimaryCategory> getPrimaryCategories() {
+        return primaryCategories;
+    }
+
+    /**
+     * 静态内部类:一级分类(包含二级分类列表)
+     */
+    public static class PrimaryCategory {
+        private final String name;
+        private final List<String> secondaryCategories;
+
+        public PrimaryCategory(String name, List<String> secondaryCategories) {
+            this.name = name;
+            this.secondaryCategories = secondaryCategories;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public List<String> getSecondaryCategories() {
+            return secondaryCategories;
+        }
+    }
+
+    /**
+     * 接口1:根据平台获取所有一级分类名称
+     * 
+     * @param platform 平台名称 ("Android" 或 "iOS")
+     * @return 一级分类名称列表(如果没有匹配平台则返回空列表)
+     */
+    public static List<String> getPrimaryCategories(String platform) {
+        return findPlatform(platform)
+                .map(appCategoryEnum ->
+                    appCategoryEnum.getPrimaryCategories().stream()
+                        .map(PrimaryCategory::getName)
+                        .collect(Collectors.toList()))
+                .orElse(Collections.emptyList());
+    }
+
+    /**
+     * 接口2:根据平台和一级分类获取所有二级分类
+     * 
+     * @param platform 平台名称 ("Android" 或 "iOS")
+     * @param primaryCategory 一级分类名称
+     * @return 二级分类名称列表(如果没有匹配则返回空列表)
+     */
+    public static List<String> getSecondaryCategories(String platform, String primaryCategory) {
+        return findPlatform(platform)
+                .flatMap(appCategoryEnum ->
+                    appCategoryEnum.getPrimaryCategories().stream()
+                        .filter(pc -> pc.getName().equalsIgnoreCase(primaryCategory))
+                        .findFirst()
+                        .map(PrimaryCategory::getSecondaryCategories))
+                .orElse(Collections.emptyList());
+    }
+
+    /**
+     * 辅助方法:根据平台名称查找枚举
+     */
+    private static Optional<AppCategoryEnum> findPlatform(String platform) {
+        return Arrays.stream(values())
+                .filter(app -> app.getPlatform().equalsIgnoreCase(platform))
+                .findFirst();
+    }
+
+    // 使用示例
+    public static void main(String[] args) {
+        // 测试接口1:获取Android平台的一级分类
+        System.out.println("Android平台一级分类:");
+        List<String> androidPrimary = getPrimaryCategories("Android");
+        androidPrimary.forEach(System.out::println);
+
+        // 测试接口1:获取iOS平台的一级分类
+        System.out.println("\niOS平台一级分类:");
+        List<String> iosPrimary = getPrimaryCategories("iOS");
+        iosPrimary.forEach(System.out::println);
+
+        // 测试接口2:获取Android平台的Game分类下的二级分类
+        System.out.println("\nAndroid平台Game分类的二级分类:");
+        List<String> androidGameSecondary = getSecondaryCategories("Android", "Game");
+        androidGameSecondary.forEach(System.out::println);
+
+        // 测试接口2:获取iOS平台的App分类下的二级分类
+        System.out.println("\niOS平台App分类的二级分类:");
+        List<String> iosAppSecondary = getSecondaryCategories("iOS", "App");
+        iosAppSecondary.forEach(System.out::println);
+
+        // 测试无效输入
+        System.out.println("\n测试无效平台:");
+        List<String> invalidPlatform = getPrimaryCategories("Windows");
+        System.out.println("结果: " + (invalidPlatform.isEmpty() ? "空列表" : invalidPlatform));
+
+        System.out.println("\n测试无效一级分类:");
+        List<String> invalidCategory = getSecondaryCategories("Android", "Invalid");
+        System.out.println("结果: " + (invalidCategory.isEmpty() ? "空列表" : invalidCategory));
+    }
+}

+ 14 - 0
yt-common/src/main/java/com/ytpm/advertise/param/AppCategoryParam.java

@@ -0,0 +1,14 @@
+package com.ytpm.advertise.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class AppCategoryParam {
+    @ApiModelProperty(value = "Android/iOS ",required = true)
+    private String platform;
+}

+ 18 - 0
yt-common/src/main/java/com/ytpm/advertise/param/AppSubCategoryParam.java

@@ -0,0 +1,18 @@
+package com.ytpm.advertise.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class AppSubCategoryParam {
+
+    @ApiModelProperty(value = "Android/iOS ",required = true)
+    private String platform;
+
+    @ApiModelProperty(value = "一级分类名称",required = true)
+    private String primaryCategory;
+}