Просмотр исходного кода

Merge branch 'master' into jiaoyang

# Conflicts:
#	jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java
#	module-common/src/main/java/cn/com/ctop/common/module/service/impl/BindAccountAuthServiceImpl.java
#	module-job-bytedance/src/main/resources/application-prod.yml
#	module-job-kuaishou/src/main/resources/application-prod.yml
yumeng 4 лет назад
Родитель
Сommit
a720522286
100 измененных файлов с 3575 добавлено и 1313 удалено
  1. 814 784
      jeecg-boot-base-common/src/main/java/org/jeecg/common/system/query/QueryGenerator.java
  2. 31 0
      jeecg-boot-base-common/src/main/java/org/jeecg/common/util/TokenUtils.java
  3. 5 0
      jeecg-boot-module-system/pom.xml
  4. 0 1
      jeecg-boot-module-system/src/main/java/org/jeecg/config/MybatisPlusConfig.java
  5. 4 1
      jeecg-boot-module-system/src/main/java/org/jeecg/config/ShiroConfig.java
  6. 36 0
      jeecg-boot-module-system/src/main/java/org/jeecg/config/jimureport/JimureportServiceImpl.java
  7. 9 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/TestController.java
  8. 47 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/UserAllocationController.java
  9. 3 3
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/MaterialTopMapper.xml
  10. 57 0
      jeecg-boot-module-system/src/main/resources/application-dev.yml
  11. 246 0
      jeecg-boot-module-system/src/main/resources/application-jiaoyang.yml
  12. 58 1
      jeecg-boot-module-system/src/main/resources/application-prod.yml
  13. 58 1
      jeecg-boot-module-system/src/main/resources/application-prod2.yml
  14. 51 2
      jeecg-boot-module-system/src/main/resources/application-test.yml
  15. 51 0
      jeecg-boot-module-system/src/main/resources/application-wps.yml
  16. 2 2
      jeecg-boot-module-system/src/main/resources/jeecg/jeecg_database.properties
  17. 27 16
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/constant/MatchLogic.java
  18. 2 0
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/entity/AlarmEventSend.java
  19. 1 0
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/entity/RuleAccountTemplate.java
  20. 20 0
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/entity/vo/TemplateAppliedVo.java
  21. 2 0
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/mapper/xml/RuleAccountTemplateMapper.xml
  22. 45 11
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/service/impl/RuleGroupServiceImpl.java
  23. 5 0
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/service/impl/RuleTemplateServiceImpl.java
  24. 0 36
      module-common/src/main/java/cn/com/ctop/common/module/entity/ActCustomForm.java
  25. 0 33
      module-common/src/main/java/cn/com/ctop/common/module/entity/ActFormData.java
  26. 0 34
      module-common/src/main/java/cn/com/ctop/common/module/entity/ActFormField.java
  27. 0 33
      module-common/src/main/java/cn/com/ctop/common/module/entity/ActFormPorcess.java
  28. 0 2
      module-common/src/main/java/cn/com/ctop/common/module/entity/RuleDataAccount.java
  29. 45 0
      module-common/src/main/java/cn/com/ctop/common/module/entity/RuleDataAccountKuaishou.java
  30. 2 0
      module-common/src/main/java/cn/com/ctop/common/module/entity/RuleDataPlan.java
  31. 42 0
      module-common/src/main/java/cn/com/ctop/common/module/entity/RuleDataTargetKuaishou.java
  32. 27 0
      module-common/src/main/java/cn/com/ctop/common/module/entity/RuleDatePlanKuaishou.java
  33. 50 0
      module-common/src/main/java/cn/com/ctop/common/module/entity/RuleDateUnitKuaishou.java
  34. 7 0
      module-common/src/main/java/cn/com/ctop/common/module/entity/UserAllocation.java
  35. 0 14
      module-common/src/main/java/cn/com/ctop/common/module/mapper/ActCustomFormMapper.java
  36. 0 14
      module-common/src/main/java/cn/com/ctop/common/module/mapper/ActFormDataMapper.java
  37. 0 14
      module-common/src/main/java/cn/com/ctop/common/module/mapper/ActFormFieldMapper.java
  38. 0 14
      module-common/src/main/java/cn/com/ctop/common/module/mapper/ActFormPorcessMapper.java
  39. 11 0
      module-common/src/main/java/cn/com/ctop/common/module/mapper/RuleDataAccountKuaishouMapper.java
  40. 11 0
      module-common/src/main/java/cn/com/ctop/common/module/mapper/RuleDataTargetKuaishouMapper.java
  41. 11 0
      module-common/src/main/java/cn/com/ctop/common/module/mapper/RuleDatePlanKuaishouMapper.java
  42. 12 0
      module-common/src/main/java/cn/com/ctop/common/module/mapper/RuleDateUnitKuaishouMapper.java
  43. 2 0
      module-common/src/main/java/cn/com/ctop/common/module/mapper/UserAllocationMapper.java
  44. 2 2
      module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/ActFormDataMapper.xml
  45. 2 2
      module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/ActFormPorcessMapper.xml
  46. 2 2
      module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/ActFormFieldMapper.xml
  47. 11 0
      module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/UserAllocationMapper.xml
  48. 0 14
      module-common/src/main/java/cn/com/ctop/common/module/service/IActCustomFormService.java
  49. 0 14
      module-common/src/main/java/cn/com/ctop/common/module/service/IActFormDataService.java
  50. 0 14
      module-common/src/main/java/cn/com/ctop/common/module/service/IActFormFieldService.java
  51. 0 14
      module-common/src/main/java/cn/com/ctop/common/module/service/IActFormPorcessService.java
  52. 13 0
      module-common/src/main/java/cn/com/ctop/common/module/service/IRuleDataAccountKuaishouService.java
  53. 11 0
      module-common/src/main/java/cn/com/ctop/common/module/service/IRuleDataTargetKuaishouService.java
  54. 11 0
      module-common/src/main/java/cn/com/ctop/common/module/service/IRuleDataUnitKuaishouService.java
  55. 11 0
      module-common/src/main/java/cn/com/ctop/common/module/service/IRuleDatePlanKuaishouService.java
  56. 2 0
      module-common/src/main/java/cn/com/ctop/common/module/service/IUserAllocationService.java
  57. 0 18
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/ActCustomFormServiceImpl.java
  58. 0 18
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/ActFormDataServiceImpl.java
  59. 0 18
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/ActFormFieldServiceImpl.java
  60. 0 18
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/ActFormPorcessServiceImpl.java
  61. 6 1
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/BindAccountAuthServiceImpl.java
  62. 12 3
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/CtopOauthTokenServiceImpl.java
  63. 57 0
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/RuleDataAccountKuaishouServiceImpl.java
  64. 15 0
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/RuleDataTargetKuaishouServiceImpl.java
  65. 18 0
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/RuleDataUnitKuaishouServiceImpl.java
  66. 18 0
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/RuleDatePlanKuaishouServiceImpl.java
  67. 5 0
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/UserAllocationServiceImpl.java
  68. 0 1
      module-common/src/main/java/cn/com/ctop/common/module/utils/CloudVideoProcessUtil.java
  69. 0 5
      module-common/src/main/java/cn/com/ctop/common/module/utils/CosUtils.java
  70. 4 0
      module-common/src/main/java/cn/com/ctop/common/module/utils/KuaishouInterfaceConstant.java
  71. 7 0
      module-common/src/main/java/cn/com/ctop/common/module/utils/RandomUtil.java
  72. 5 5
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/taobao/service/impl/TaobaoJhsbybtServiceImpl.java
  73. 66 51
      module-ctop/src/main/java/cn/com/ctop/manage/modules/material/service/impl/MaterialUploadImageServiceImpl.java
  74. 6 0
      module-job-bytedance/pom.xml
  75. 16 1
      module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/ByteDancePlanRuleDataJob.java
  76. 8 5
      module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/RuleDataAccountCleanJob.java
  77. 50 1
      module-job-bytedance/src/main/resources/application-dev.yml
  78. 50 0
      module-job-bytedance/src/main/resources/application-jiaoyang.yml
  79. 61 1
      module-job-bytedance/src/main/resources/application-prod.yml
  80. 51 1
      module-job-bytedance/src/main/resources/application-test.yml
  81. 6 0
      module-job-kuaishou/pom.xml
  82. 53 0
      module-job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/handler/KuaiShouDeleteCommentJob.java
  83. 69 0
      module-job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/handler/KuaishouDailyAudienceReportJob.java
  84. 38 0
      module-job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/handler/RuleKuaiShouDataAccountCleanJob.java
  85. 36 0
      module-job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/handler/RuleKuaiShouDataPlanCleanJob.java
  86. 40 0
      module-job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/handler/RuleKuaiShouDataTargetCleanJob.java
  87. 42 0
      module-job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/handler/RuleKuaiShouDataUnitCleanJob.java
  88. 50 0
      module-job-kuaishou/src/main/resources/application-dev.yml
  89. 230 0
      module-job-kuaishou/src/main/resources/application-jiaoyang.yml
  90. 61 1
      module-job-kuaishou/src/main/resources/application-prod.yml
  91. 51 1
      module-job-kuaishou/src/main/resources/application-test.yml
  92. 67 82
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/controller/CrossAccountBatchController.java
  93. 258 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/controller/KuaishouStrategyController.java
  94. 4 3
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/controller/KuaishouTemplateController.java
  95. 30 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/controller/KuaishouTemplateTargetController.java
  96. 217 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/entity/KuaishouStrategy.java
  97. 4 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/KuaiShouAdvertiserBaseInfoMapper.java
  98. 3 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/KuaiShouCampaignMapper.java
  99. 2 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/KuaiShouGroupMapper.java
  100. 0 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/KuaishouStrategyMapper.java

Разница между файлами не показана из-за своего большого размера
+ 814 - 784
jeecg-boot-base-common/src/main/java/org/jeecg/common/system/query/QueryGenerator.java


+ 31 - 0
jeecg-boot-base-common/src/main/java/org/jeecg/common/util/TokenUtils.java

@@ -35,6 +35,37 @@ public class TokenUtils {
     /**
      * 验证Token
      */
+    public static boolean verifyToken(String token, ISysBaseApi sysBaseAPI, RedisUtil redisUtil) {
+        if (StringUtils.isBlank(token)) {
+            throw new AuthenticationException("token不能为空!");
+        }
+
+        // 解密获得username,用于和数据库进行对比
+        String username = JwtUtil.getUsername(token);
+        if (username == null) {
+            throw new AuthenticationException("token非法无效!");
+        }
+
+        // 查询用户信息
+        LoginUser user = sysBaseAPI.getUserByName(username);
+        if (user == null) {
+            throw new AuthenticationException("用户不存在!");
+        }
+        // 判断用户状态
+        if (user.getStatus() != 1) {
+            throw new AuthenticationException("账号已被锁定,请联系管理员!");
+        }
+        // 校验token是否超时失效 & 或者账号密码是否错误
+        if (!jwtTokenRefresh(token, username, user.getPassword(), redisUtil)) {
+            throw new AuthenticationException("Token失效,请重新登录!");
+        }
+        return true;
+    }
+
+
+    /**
+     * 验证Token
+     */
     public static boolean verifyToken(HttpServletRequest request, ISysBaseApi sysBaseAPI, RedisUtil redisUtil) {
         log.info(" -- url --" + request.getRequestURL());
         String token = getTokenByRequest(request);

+ 5 - 0
jeecg-boot-module-system/pom.xml

@@ -169,6 +169,11 @@
             <artifactId>pagehelper</artifactId>
             <version>5.1.11</version>
         </dependency>
+        <dependency>
+            <groupId>com.jimureport</groupId>
+            <artifactId>spring-boot-starter-jimureport</artifactId>
+            <version>1.1-beta</version>
+        </dependency>
     </dependencies>
 
     <dependencyManagement>

+ 0 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/config/MybatisPlusConfig.java

@@ -4,7 +4,6 @@ import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
-import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor;
 
 /**
  * 单数据源配置(jeecg.datasource.open = false时生效)

+ 4 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/config/ShiroConfig.java

@@ -90,7 +90,10 @@ public class ShiroConfig {
         filterChainDefinitionMap.put("/ctop/bytedanceInterestCategory/**", "anon");
         filterChainDefinitionMap.put("/template/creative/words/get", "anon");
         filterChainDefinitionMap.put("template/bytedance/industry/list", "anon");
-
+        //积木报表排除
+        filterChainDefinitionMap.put("/jmreport/**", "anon");
+        filterChainDefinitionMap.put("/**/*.js.map", "anon");
+        filterChainDefinitionMap.put("/**/*.css.map", "anon");
         filterChainDefinitionMap.put("/bytedance/batch/creative/words/get", "anon");
         filterChainDefinitionMap.put("/bytedance/batch/action/text", "anon");
         filterChainDefinitionMap.put("/bytedance/batch/industry/list", "anon");

+ 36 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/config/jimureport/JimureportServiceImpl.java

@@ -0,0 +1,36 @@
+package org.jeecg.config.jimureport;
+
+import org.jeecg.common.system.api.ISysBaseApi;
+import org.jeecg.common.system.util.JwtUtil;
+import org.jeecg.common.util.RedisUtil;
+import org.jeecg.common.util.TokenUtils;
+import org.jeecg.modules.jmreport.api.JmReportTokenServiceI;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletRequest;
+
+@Component
+class JimureportServiceImpl implements JmReportTokenServiceI {
+    @Autowired
+    private ISysBaseApi sysBaseAPI;
+    @Autowired
+    @Lazy
+    private RedisUtil redisUtil;
+
+    @Override
+    public String getToken(HttpServletRequest request) {
+        return TokenUtils.getTokenByRequest(request);
+    }
+
+    @Override
+    public String getUsername(String token) {
+        return JwtUtil.getUsername(token);
+    }
+
+    @Override
+    public Boolean verifyToken(String token) {
+        return TokenUtils.verifyToken(token, sysBaseAPI, redisUtil);
+    }
+}

+ 9 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/TestController.java

@@ -1199,5 +1199,13 @@ public class TestController {
 
         return result;
     }
-
+    @Autowired
+    private IKuaiShouCommentService kuaiShouCommentService;
+    @GetMapping("deleteComment")
+    public Map<String,Object>deleteComment(Long accountId){
+        Map<String,Object>result = new HashMap<>();
+        kuaiShouCommentService.shieldComment(accountId);
+        ResultMapUtils.setResultMap(result,StatusCode.COMMON_SUCCESS);
+        return result;
+    }
 }

+ 47 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/UserAllocationController.java

@@ -1,5 +1,7 @@
 package org.jeecg.modules.ctop.controller;
 
+import cn.com.ctop.alarm.modules.entity.RuleAccountTemplate;
+import cn.com.ctop.alarm.modules.service.IRuleAccountTemplateService;
 import cn.com.ctop.common.module.annotation.AutoLog;
 import cn.com.ctop.common.module.constant.CtopRoleCodeConstant;
 import cn.com.ctop.common.module.entity.CtopOauthToken;
@@ -16,6 +18,7 @@ import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouInterfaceService;
 import cn.com.ctop.toutiao.modules.material.service.IByteDanceAdvertiserDataService;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import io.swagger.annotations.Api;
@@ -361,6 +364,9 @@ public class UserAllocationController {
      * @param userAllocation
      * @return
      */
+    @Autowired
+    private IRuleAccountTemplateService ruleAccountTemplateService;
+
     @AutoLog(value = "用户分配-编辑")
     @ApiOperation(value = "用户分配-编辑", notes = "用户分配-编辑")
     @PutMapping(value = "/edit")
@@ -371,6 +377,17 @@ public class UserAllocationController {
             result.error500("未找到对应实体");
         } else {
             boolean ok = userAllocationService.updateById(userAllocation);
+            Integer accountStatus = userAllocation.getAccountStatus();
+            if (!Check.isNull(accountStatus)) {
+                if (accountStatus == 1) {
+                    QueryWrapper<RuleAccountTemplate> ruleAccountTemplateQueryWrapper = new QueryWrapper<>();
+                    ruleAccountTemplateQueryWrapper.eq("account_id", userAllocationEntity.getAccountId());
+                    RuleAccountTemplate updateRuleAccountTemplate = new RuleAccountTemplate();
+                    updateRuleAccountTemplate.setTemplateStatus(1);
+                    ruleAccountTemplateService.update(updateRuleAccountTemplate, ruleAccountTemplateQueryWrapper);
+                }
+            }
+
             UserAllocation update = userAllocationService.getById(userAllocation.getId());
             QueryWrapper<ProjectMember> memberQueryWrapper = new QueryWrapper<>();
             memberQueryWrapper.eq("user_id", update.getUserId());
@@ -476,4 +493,34 @@ public class UserAllocationController {
         return result;
     }
 
+    /**
+     * 账户绑定是否开启删评论开关
+     */
+    @PostMapping(value = "/onOrOffDeleteComment")
+    public Result<Object> onOrOffMonitoringLink(@RequestParam Long accountId, @RequestParam Integer switchType) {
+        Result<Object> result = new Result<>();
+        UserAllocation userAllocation = new UserAllocation();
+        userAllocation.setAccountId(accountId);
+        UpdateWrapper<UserAllocation> wrapper = new UpdateWrapper<>();
+        //开启删评论
+        if (switchType == 0) {
+            wrapper.set("delete_comment", 0);
+            wrapper.setEntity(userAllocation);
+            boolean update = userAllocationService.update(wrapper);
+            if (update) {
+                result.success("删评论开启成功");
+            }
+        } else if (switchType == 1) {
+            wrapper.set("delete_comment", 1);
+            wrapper.setEntity(userAllocation);
+            boolean update = userAllocationService.update(wrapper);
+            if (update) {
+                result.success("删评论关闭成功");
+            }
+        } else {
+            result.error500("未知操作");
+        }
+        return result;
+    }
+
 }

+ 3 - 3
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/MaterialTopMapper.xml

@@ -155,7 +155,7 @@
                       FROM
                           ctop_material_info info
                       WHERE
-                          info.CODE = t2.signature
+                          info.CODE = t1.signature
                       ORDER BY
                           create_time DESC
                       LIMIT 1),'') AS url,
@@ -164,7 +164,7 @@
                       FROM
                           ctop_material_info info
                       WHERE
-                          info.CODE = t2.signature
+                          info.CODE = t1.signature
                       ORDER BY
                           create_time DESC
                       LIMIT 1),'') AS cover_url,
@@ -174,7 +174,7 @@
                          FROM
                              ctop_material_info info
                          WHERE
-                             info.CODE = t2.signature
+                             info.CODE = t1.signature
                          ORDER BY
                              create_time DESC
                          LIMIT 1

+ 57 - 0
jeecg-boot-module-system/src/main/resources/application-dev.yml

@@ -174,6 +174,13 @@ mybatis-plus:
     #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
 #jeecg专用配置
 jeecg:
+  #积木报表设置
+  jmreport:
+    mode: dev
+    #是否需要校验token
+    is_verify_token: false
+    #必须校验方法
+    verify_methods: remove,delete,save,add,update
   elasticsearch:
     cluster-nodes:
     check-enabled: false
@@ -208,6 +215,21 @@ jeecg:
     report-history: D://report//history//
     report-daily: D://report//daily//
 kuaishou:
+  api-url: https://ad.e.kuaishou.com
+  auth-url: https://ad.e.kuaishou.com
+  appid: 27
+  third-appid: 328
+  oauth-type: agent
+  secret: QovprB1tNhXptgDc
+  third-secret: 1iFTBiMdohkyEQQs
+  callback-url: http://adsp.c-top.com.cn:8080/jeecg-boot/kuaishou
+  third-callback-url: http://callback.shyouteng.com.cn/kuaishou
+  apk-sava-path: /mnt/file/apk
+  image-sava-path: /mnt/file/image
+  video-sava-path: /mnt/file/video
+  model-video-src-path: /mnt/data/src/
+  model-video-fill-path: /mnt/data/fill/
+  model-video-final-path: /mnt/data/final/
   group-control:
     path: http://39.106.184.70
     port: 4723
@@ -229,3 +251,38 @@ oss:
 zip:
   local:
     download-path: /data/unzip/
+bytedance:
+  appId: 1635316529903624
+  secret: 0c51523e90d6166418fc8421a4896808e90e26f4
+  url:
+    auth-prefix: https://ad.oceanengine.com/openapi
+    api-prefix: https://ad.oceanengine.com/open_api
+    callback-url: http://adsp.c-top.com.cn:8080/jeecg-boot/bytedance
+    refresh-token: /oauth2/refresh_token
+    advertiser-info: /2/advertiser/public_info/
+    ad-get: /2/ad/get/
+    ad-create: /2/ad/create/
+    ad-update: /2/ad/update/
+    ad-update-status: /2/ad/update/status/
+    ad-update-bid: /2/ad/update/bid/
+    ad-update-budget: /2/ad/update/budget/
+    ad-update-reject-reason: 2/ad/reject_reason/
+    campaign-get: /2/campaign/get/
+    campaign-create: /2/campaign/create/
+    campaign-update-status: /2/campaign/update/status/
+    campaign-update: /2/campaign/update/
+    dmp-custom-audience-select: /2/dmp/custom_audience/select/
+    file-video-ad: /2/file/video/ad/
+    file-image-ad: /2/file/image/ad/
+    creative-update-status: /2/creative/update/status/
+    creative-material-get: /2/creative/material/read/
+    creative-create-v2: /2/creative/create_v2/
+    creative-get: /2/creative/get/
+    creative-read: /2/creative/read_v2/
+    creative-update: /2/creative/update_v2/
+    creative-reject-reason: /2/creative/reject_reason/
+    advertiser-report-get: /2/report/advertiser/get/
+    campaign-report-get: /2/report/campaign/get/
+    ad-report-get: /2/report/ad/get/
+    ad-creative-get: /2/report/creative/get/
+    advertiser-fund-daily-stat: /2/advertiser/fund/daily_stat/

+ 246 - 0
jeecg-boot-module-system/src/main/resources/application-jiaoyang.yml

@@ -0,0 +1,246 @@
+server:
+  port: 8804
+  ip: 39.97.120.42
+  servlet:
+    context-path: /jeecg-boot
+    compression:
+      enabled: true
+      mime-types: application/javascript,application/json,application/xml,text/html,text/xml,text/plain,text/css,image/*
+management:
+  endpoints:
+    web:
+      exposure:
+        include: metrics,httptrace
+spring:
+  servlet:
+    multipart:
+      max-file-size: -1
+      max-request-size: -1
+  mail:
+    host: smtp.exmail.qq.com
+    username: notice@c-top.com.cn
+    password: Hcst@2019
+    properties:
+      mail:
+        smtp:
+          ssl.enable: enable
+          auth: true
+          starttls:
+            enable: true
+            required: true
+  ## quartz定时任务,采用数据库方式
+  #quartz:
+    #job-store-type: jdbc
+  #json 时间戳统一转换
+  jackson:
+    date-format:   yyyy-MM-dd HH:mm:ss
+    time-zone:   GMT+8
+  jpa:
+    open-in-view: false
+  activiti:
+    check-process-definitions: false
+    #启用作业执行器
+    async-executor-activate: false
+    #启用异步执行器
+    job-executor-activate: false
+  aop:
+    proxy-target-class: true
+  #配置freemarker
+  freemarker:
+    # 设置模板后缀名
+    suffix: .ftl
+    # 设置文档类型
+    content-type: text/html
+    # 设置页面编码格式
+    charset: UTF-8
+    # 设置页面缓存
+    cache: false
+    prefer-file-system-access: false
+    # 设置ftl文件路径
+    template-loader-path:
+      - classpath:/templates
+  # 设置静态文件路径,js,css等
+  mvc:
+    static-path-pattern: /**
+  resource:
+    static-locations: classpath:/static/,classpath:/public/
+  autoconfigure:
+    exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
+  datasource:
+    url: jdbc:mysql://172.30.0.4:4000/jiaoyang?characterEncoding=UTF-8&useUnicode=true&useSSL=false
+    username: hcst
+    password: hcst@2020
+    driver-class-name: com.mysql.jdbc.Driver
+    druid:
+      stat-view-servlet:
+        loginUsername: admin
+        loginPassword: hcst20161
+        enabled: true
+      web-stat-filter:
+        enabled: true
+    #      remove-abandoned: false
+    dynamic:
+      druid: # 全局druid参数,绝大部分值和默认保持一致。(现已支持的参数如下,不清楚含义不要乱设置)
+        # 连接池的配置信息
+        # 初始化大小,最小,最大
+        connection-init-sql: set names utf8mb4
+        initial-size: 5
+        min-idle: 5
+        maxActive: 20
+        # 配置获取连接等待超时的时间
+        maxWait: 60000
+        # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+        timeBetweenEvictionRunsMillis: 60000
+        # 配置一个连接在池中最小生存的时间,单位是毫秒
+        minEvictableIdleTimeMillis: 300000
+        validationQuery: SELECT 1 FROM DUAL
+        testWhileIdle: true
+        testOnBorrow: false
+        testOnReturn: false
+        # 打开PSCache,并且指定每个连接上PSCache的大小
+        poolPreparedStatements: true
+        maxPoolPreparedStatementPerConnectionSize: 20
+        # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
+        filters: stat,wall,slf4j
+        # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
+        connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
+      datasource:
+        master:
+          url: jdbc:mysql://172.30.0.4:4000/jiaoyang?characterEncoding=UTF-8&useUnicode=true&useSSL=false
+          username: hcst
+          password: hcst@2020
+          driver-class-name: com.mysql.jdbc.Driver
+  #redis 配置
+  redis:
+    database: 0
+    host: 172.30.0.17
+    lettuce:
+      pool:
+        max-active: 8   #最大连接数据库连接数,设 0 为没有限制
+        max-idle: 8     #最大等待连接中的数量,设 0 为没有限制
+        max-wait: -1ms  #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
+        min-idle: 0     #最小等待连接中的数量,设 0 为没有限制
+      shutdown-timeout: 100ms
+    password: foobared
+    port: 6379
+#mybatis plus 设置
+mybatis-plus:
+  mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml,classpath*:cn/com/ctop/**/xml/*Mapper.xml
+  global-config:
+    # 关闭MP3.0自带的banner
+    banner: false
+    db-config:
+      #主键类型  0:"数据库ID自增",1:"该类型为未设置主键类型", 2:"用户输入ID",3:"全局唯一ID (数字类型唯一ID)", 4:"全局唯一ID UUID",5:"字符串全局唯一ID (idWorker 的字符串表示)";
+      id-type: 4
+      # 默认数据库表下划线命名
+      table-underline: true
+#  configuration:
+#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+#jeecg专用配置
+jeecg:
+  elasticsearch:
+    cluster-nodes:
+    check-enabled: false
+  uploadType:
+  oss:
+    endpoint:
+    accessKey:
+    secretKey:
+    bucketName:
+    staticDomain:
+  sms:
+    accessKeyId:
+    accessKeySecret:
+  minio:
+    minio_url:
+    minio_name:
+    minio_pass:
+    bucketName:
+  ffmpeg:
+    bin: ffmpeg
+  path:
+    #文件上传根目录 设置
+    upload: /data/upload
+    #webapp文件路径
+    webapp: /data/webapp
+    video-upload: /data/upload/video/
+    image-upload: /data/upload/image/
+    kuaishou-agent-image: /data/upload/image/temp.png
+    kuaishou-account-captcha-image: /data/upload/image/captcha.png
+    chrome-driver: /usr/bin/chromedriver
+    csv-upload: /data/upload/csv/
+    bak-database-file: /data/data/bak/
+    report-history: /data/upload/report/history/
+    report-daily: /data/upload/report/daily/
+kuaishou:
+  api-url: https://ad.e.kuaishou.com
+  auth-url: https://ad.e.kuaishou.com
+  appid: 328
+  third-appid: 328
+  oauth-type: agent
+  secret: 1iFTBiMdohkyEQQs
+  third-secret: 1iFTBiMdohkyEQQs
+  callback-url: http://callback.shyouteng.com.cn/kuaishou
+  third-callback-url: http://callback.shyouteng.com.cn/kuaishou
+  apk-sava-path: /mnt/file/apk
+  image-sava-path: /mnt/file/image
+  video-sava-path: /mnt/file/video
+  model-video-src-path: /mnt/data/src/
+  model-video-fill-path: /mnt/data/fill/
+  model-video-final-path: /mnt/data/final/
+  group-control:
+    path: http://39.106.184.70
+    port: 4723
+logging:
+  level:
+    root: info
+  config: classpath:logback-prod.xml
+chrome:
+  script:
+    clean: sh /data/webapp/cleanProcess.sh
+cas:
+  prefixUrl:
+oss:
+  replace:
+    replace-value: oss-cn-beijing
+    replace-old-value: oss-cn-beijing
+    download: /data/file/video/
+
+zip:
+  local:
+    download-path: /data/unzip/
+bytedance:
+  appId: 1635316529903624
+  secret: 0c51523e90d6166418fc8421a4896808e90e26f4
+  url:
+    auth-prefix: https://ad.oceanengine.com/openapi
+    api-prefix: https://ad.oceanengine.com/open_api
+    callback-url: http://adsp.c-top.com.cn:8080/jeecg-boot/bytedance
+    refresh-token: /oauth2/refresh_token
+    advertiser-info: /2/advertiser/public_info/
+    ad-get: /2/ad/get/
+    ad-create: /2/ad/create/
+    ad-update: /2/ad/update/
+    ad-update-status: /2/ad/update/status/
+    ad-update-bid: /2/ad/update/bid/
+    ad-update-budget: /2/ad/update/budget/
+    ad-update-reject-reason: 2/ad/reject_reason/
+    campaign-get: /2/campaign/get/
+    campaign-create: /2/campaign/create/
+    campaign-update-status: /2/campaign/update/status/
+    campaign-update: /2/campaign/update/
+    dmp-custom-audience-select: /2/dmp/custom_audience/select/
+    file-video-ad: /2/file/video/ad/
+    file-image-ad: /2/file/image/ad/
+    creative-update-status: /2/creative/update/status/
+    creative-material-get: /2/creative/material/read/
+    creative-create-v2: /2/creative/create_v2/
+    creative-get: /2/creative/get/
+    creative-read: /2/creative/read_v2/
+    creative-update: /2/creative/update_v2/
+    creative-reject-reason: /2/creative/reject_reason/
+    advertiser-report-get: /2/report/advertiser/get/
+    campaign-report-get: /2/report/campaign/get/
+    ad-report-get: /2/report/ad/get/
+    ad-creative-get: /2/report/creative/get/
+    advertiser-fund-daily-stat: /2/advertiser/fund/daily_stat/

+ 58 - 1
jeecg-boot-module-system/src/main/resources/application-prod.yml

@@ -144,6 +144,13 @@ mybatis-plus:
 #    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
 #jeecg专用配置
 jeecg:
+  #积木报表设置
+  jmreport:
+    mode: dev
+    #是否需要校验token
+    is_verify_token: false
+    #必须校验方法
+    verify_methods: remove,delete,save,add,update
   elasticsearch:
     cluster-nodes:
     check-enabled: false
@@ -179,6 +186,21 @@ jeecg:
     report-history: /data/upload/report/history/
     report-daily: /data/upload/report/daily/
 kuaishou:
+  api-url: https://ad.e.kuaishou.com
+  auth-url: https://ad.e.kuaishou.com
+  appid: 27
+  third-appid: 328
+  oauth-type: agent
+  secret: QovprB1tNhXptgDc
+  third-secret: 1iFTBiMdohkyEQQs
+  callback-url: http://adsp.c-top.com.cn:8080/jeecg-boot/kuaishou
+  third-callback-url: http://callback.shyouteng.com.cn/kuaishou
+  apk-sava-path: /mnt/file/apk
+  image-sava-path: /mnt/file/image
+  video-sava-path: /mnt/file/video
+  model-video-src-path: /mnt/data/src/
+  model-video-fill-path: /mnt/data/fill/
+  model-video-final-path: /mnt/data/final/
   group-control:
     path: http://39.106.184.70
     port: 4723
@@ -199,4 +221,39 @@ oss:
 
 zip:
   local:
-    download-path: /data/unzip/
+    download-path: /data/unzip/
+bytedance:
+  appId: 1635316529903624
+  secret: 0c51523e90d6166418fc8421a4896808e90e26f4
+  url:
+    auth-prefix: https://ad.oceanengine.com/openapi
+    api-prefix: https://ad.oceanengine.com/open_api
+    callback-url: http://adsp.c-top.com.cn:8080/jeecg-boot/bytedance
+    refresh-token: /oauth2/refresh_token
+    advertiser-info: /2/advertiser/public_info/
+    ad-get: /2/ad/get/
+    ad-create: /2/ad/create/
+    ad-update: /2/ad/update/
+    ad-update-status: /2/ad/update/status/
+    ad-update-bid: /2/ad/update/bid/
+    ad-update-budget: /2/ad/update/budget/
+    ad-update-reject-reason: 2/ad/reject_reason/
+    campaign-get: /2/campaign/get/
+    campaign-create: /2/campaign/create/
+    campaign-update-status: /2/campaign/update/status/
+    campaign-update: /2/campaign/update/
+    dmp-custom-audience-select: /2/dmp/custom_audience/select/
+    file-video-ad: /2/file/video/ad/
+    file-image-ad: /2/file/image/ad/
+    creative-update-status: /2/creative/update/status/
+    creative-material-get: /2/creative/material/read/
+    creative-create-v2: /2/creative/create_v2/
+    creative-get: /2/creative/get/
+    creative-read: /2/creative/read_v2/
+    creative-update: /2/creative/update_v2/
+    creative-reject-reason: /2/creative/reject_reason/
+    advertiser-report-get: /2/report/advertiser/get/
+    campaign-report-get: /2/report/campaign/get/
+    ad-report-get: /2/report/ad/get/
+    ad-creative-get: /2/report/creative/get/
+    advertiser-fund-daily-stat: /2/advertiser/fund/daily_stat/

+ 58 - 1
jeecg-boot-module-system/src/main/resources/application-prod2.yml

@@ -136,6 +136,13 @@ mybatis-plus:
 #    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
 #jeecg专用配置
 jeecg:
+  #积木报表设置
+  jmreport:
+    mode: dev
+    #是否需要校验token
+    is_verify_token: false
+    #必须校验方法
+    verify_methods: remove,delete,save,add,update
   elasticsearch:
     cluster-nodes:
     check-enabled: false
@@ -171,6 +178,21 @@ jeecg:
     report-history: /data/upload/report/history/
     report-daily: /data/upload/report/daily/
 kuaishou:
+  api-url: https://ad.e.kuaishou.com
+  auth-url: https://ad.e.kuaishou.com
+  appid: 27
+  third-appid: 328
+  oauth-type: agent
+  secret: QovprB1tNhXptgDc
+  third-secret: 1iFTBiMdohkyEQQs
+  callback-url: http://adsp.c-top.com.cn:8080/jeecg-boot/kuaishou
+  third-callback-url: http://callback.shyouteng.com.cn/kuaishou
+  apk-sava-path: /mnt/file/apk
+  image-sava-path: /mnt/file/image
+  video-sava-path: /mnt/file/video
+  model-video-src-path: /mnt/data/src/
+  model-video-fill-path: /mnt/data/fill/
+  model-video-final-path: /mnt/data/final/
   group-control:
     path: http://39.106.184.70
     port: 4723
@@ -191,4 +213,39 @@ oss:
 
 zip:
   local:
-    download-path: /data/unzip/
+    download-path: /data/unzip/
+bytedance:
+  appId: 1635316529903624
+  secret: 0c51523e90d6166418fc8421a4896808e90e26f4
+  url:
+    auth-prefix: https://ad.oceanengine.com/openapi
+    api-prefix: https://ad.oceanengine.com/open_api
+    callback-url: http://adsp.c-top.com.cn:8080/jeecg-boot/bytedance
+    refresh-token: /oauth2/refresh_token
+    advertiser-info: /2/advertiser/public_info/
+    ad-get: /2/ad/get/
+    ad-create: /2/ad/create/
+    ad-update: /2/ad/update/
+    ad-update-status: /2/ad/update/status/
+    ad-update-bid: /2/ad/update/bid/
+    ad-update-budget: /2/ad/update/budget/
+    ad-update-reject-reason: 2/ad/reject_reason/
+    campaign-get: /2/campaign/get/
+    campaign-create: /2/campaign/create/
+    campaign-update-status: /2/campaign/update/status/
+    campaign-update: /2/campaign/update/
+    dmp-custom-audience-select: /2/dmp/custom_audience/select/
+    file-video-ad: /2/file/video/ad/
+    file-image-ad: /2/file/image/ad/
+    creative-update-status: /2/creative/update/status/
+    creative-material-get: /2/creative/material/read/
+    creative-create-v2: /2/creative/create_v2/
+    creative-get: /2/creative/get/
+    creative-read: /2/creative/read_v2/
+    creative-update: /2/creative/update_v2/
+    creative-reject-reason: /2/creative/reject_reason/
+    advertiser-report-get: /2/report/advertiser/get/
+    campaign-report-get: /2/report/campaign/get/
+    ad-report-get: /2/report/ad/get/
+    ad-creative-get: /2/report/creative/get/
+    advertiser-fund-daily-stat: /2/advertiser/fund/daily_stat/

+ 51 - 2
jeecg-boot-module-system/src/main/resources/application-test.yml

@@ -170,8 +170,23 @@ jeecg:
     report-history: /data/report/history/
     report-daily: /data/report/daily/
 kuaishou:
+  api-url: https://ad.e.kuaishou.com
+  auth-url: https://ad.e.kuaishou.com
+  appid: 27
+  third-appid: 328
+  oauth-type: agent
+  secret: QovprB1tNhXptgDc
+  third-secret: 1iFTBiMdohkyEQQs
+  callback-url: http://adsp.c-top.com.cn:8080/jeecg-boot/kuaishou
+  third-callback-url: http://callback.shyouteng.com.cn/kuaishou
+  apk-sava-path: /mnt/file/apk
+  image-sava-path: /mnt/file/image
+  video-sava-path: /mnt/file/video
+  model-video-src-path: /mnt/data/src/
+  model-video-fill-path: /mnt/data/fill/
+  model-video-final-path: /mnt/data/final/
   group-control:
-    path: http://127.0.0.1
+    path: http://39.106.184.70
     port: 4723
 logging:
   level:
@@ -187,7 +202,41 @@ oss:
     replace-value: oss-cn-beijing
     replace-old-value: oss-cn-beijing
     download: /mnt/file/video/
-
 zip:
   local:
     download-path: /data/unzip/
+bytedance:
+  appId: 1635316529903624
+  secret: 0c51523e90d6166418fc8421a4896808e90e26f4
+  url:
+    auth-prefix: https://ad.oceanengine.com/openapi
+    api-prefix: https://ad.oceanengine.com/open_api
+    callback-url: http://adsp.c-top.com.cn:8080/jeecg-boot/bytedance
+    refresh-token: /oauth2/refresh_token
+    advertiser-info: /2/advertiser/public_info/
+    ad-get: /2/ad/get/
+    ad-create: /2/ad/create/
+    ad-update: /2/ad/update/
+    ad-update-status: /2/ad/update/status/
+    ad-update-bid: /2/ad/update/bid/
+    ad-update-budget: /2/ad/update/budget/
+    ad-update-reject-reason: 2/ad/reject_reason/
+    campaign-get: /2/campaign/get/
+    campaign-create: /2/campaign/create/
+    campaign-update-status: /2/campaign/update/status/
+    campaign-update: /2/campaign/update/
+    dmp-custom-audience-select: /2/dmp/custom_audience/select/
+    file-video-ad: /2/file/video/ad/
+    file-image-ad: /2/file/image/ad/
+    creative-update-status: /2/creative/update/status/
+    creative-material-get: /2/creative/material/read/
+    creative-create-v2: /2/creative/create_v2/
+    creative-get: /2/creative/get/
+    creative-read: /2/creative/read_v2/
+    creative-update: /2/creative/update_v2/
+    creative-reject-reason: /2/creative/reject_reason/
+    advertiser-report-get: /2/report/advertiser/get/
+    campaign-report-get: /2/report/campaign/get/
+    ad-report-get: /2/report/ad/get/
+    ad-creative-get: /2/report/creative/get/
+    advertiser-fund-daily-stat: /2/advertiser/fund/daily_stat/

+ 51 - 0
jeecg-boot-module-system/src/main/resources/application-wps.yml

@@ -165,6 +165,21 @@ jeecg:
     report-history: D://mnt//reportKs//
     report-daily: D://mnt//reportKs//
 kuaishou:
+  api-url: https://ad.e.kuaishou.com
+  auth-url: https://ad.e.kuaishou.com
+  appid: 27
+  third-appid: 328
+  oauth-type: agent
+  secret: QovprB1tNhXptgDc
+  third-secret: 1iFTBiMdohkyEQQs
+  callback-url: http://adsp.c-top.com.cn:8080/jeecg-boot/kuaishou
+  third-callback-url: http://callback.shyouteng.com.cn/kuaishou
+  apk-sava-path: /mnt/file/apk
+  image-sava-path: /mnt/file/image
+  video-sava-path: /mnt/file/video
+  model-video-src-path: /mnt/data/src/
+  model-video-fill-path: /mnt/data/fill/
+  model-video-final-path: /mnt/data/final/
   group-control:
     path: http://39.106.184.70
     port: 4723
@@ -185,3 +200,39 @@ oss:
 zip:
   local:
     download-path: D://mnt//data//
+bytedance:
+  appId: 1635316529903624
+  secret: 0c51523e90d6166418fc8421a4896808e90e26f4
+  url:
+    auth-prefix: https://ad.oceanengine.com/openapi
+    api-prefix: https://ad.oceanengine.com/open_api
+    callback-url: http://adsp.c-top.com.cn:8080/jeecg-boot/bytedance
+    refresh-token: /oauth2/refresh_token
+    advertiser-info: /2/advertiser/public_info/
+    ad-get: /2/ad/get/
+    ad-create: /2/ad/create/
+    ad-update: /2/ad/update/
+    ad-update-status: /2/ad/update/status/
+    ad-update-bid: /2/ad/update/bid/
+    ad-update-budget: /2/ad/update/budget/
+    ad-update-reject-reason: 2/ad/reject_reason/
+    campaign-get: /2/campaign/get/
+    campaign-create: /2/campaign/create/
+    campaign-update-status: /2/campaign/update/status/
+    campaign-update: /2/campaign/update/
+    dmp-custom-audience-select: /2/dmp/custom_audience/select/
+    file-video-ad: /2/file/video/ad/
+    file-image-ad: /2/file/image/ad/
+    creative-update-status: /2/creative/update/status/
+    creative-material-get: /2/creative/material/read/
+    creative-create-v2: /2/creative/create_v2/
+    creative-get: /2/creative/get/
+    creative-read: /2/creative/read_v2/
+    creative-update: /2/creative/update_v2/
+    creative-reject-reason: /2/creative/reject_reason/
+    advertiser-report-get: /2/report/advertiser/get/
+    campaign-report-get: /2/report/campaign/get/
+    ad-report-get: /2/report/ad/get/
+    ad-creative-get: /2/report/creative/get/
+    advertiser-fund-daily-stat: /2/advertiser/fund/daily_stat/
+

+ 2 - 2
jeecg-boot-module-system/src/main/resources/jeecg/jeecg_database.properties

@@ -1,8 +1,8 @@
 #mysql
 diver_name=com.mysql.jdbc.Driver
-url=jdbc:mysql://139.186.27.96:3306/jeecg-boot?useUnicode=true&characterEncoding=UTF-8
+url=jdbc:mysql://139.186.27.96:4000/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false
 username=hcst
-password=test@20190531
+password=hcst@2020
 database_name=jeecg-boot
 #oracle
 #diver_name=oracle.jdbc.driver.OracleDriver

+ 27 - 16
module-alarm/src/main/java/cn/com/ctop/alarm/modules/constant/MatchLogic.java

@@ -183,7 +183,9 @@ public class MatchLogic {
                 append("预警账户:").append(accountId).append(",授权名称:").append(accountName).append("<br/>");
         if ("plan".equals(type)) {
             buf.append("预警计划:").append(codes).append("<br/>");
-        } else if ("creative".equals(type)) {
+        } else if ("unit".equals(type)) {
+            buf.append("预警组:").append(codes).append("<br/>");
+        }else if ("creative".equals(type)) {
             buf.append("预警创意:").append(codes).append("<br/>");
         }
         if (isNull) {
@@ -279,29 +281,38 @@ public class MatchLogic {
      * @throws
      * @author ZHAOXA
      */
-    public static JSONArray getKuaiShouSendData(JSONArray accountDatas, JSONArray groupDatas, JSONArray planDatas, JSONArray creativeDatas, JSONArray targetDatas) {
+    public static JSONArray getKuaiShouSendData(JSONArray accountDatas, JSONArray planDatas, JSONArray groupDatas, JSONArray creativeDatas, JSONArray targetDatas) {
         JSONArray sendData = new JSONArray();
         if (!Check.isNull(accountDatas) && Check.isNull(groupDatas) && Check.isNull(planDatas) && Check.isNull(creativeDatas) && Check.isNull(targetDatas)) {
             sendData = accountDatas;
         } else {
-            if (Check.isNull(groupDatas)) {
-                if (!Check.isNull(planDatas) && Check.isNull(creativeDatas) && Check.isNull(targetDatas)) {
-                    sendData = planDatas;
-                } else if (Check.isNull(planDatas) && !Check.isNull(creativeDatas) && Check.isNull(targetDatas)) {
+            if (Check.isNull(planDatas)) {
+                if (!Check.isNull(groupDatas) && Check.isNull(creativeDatas) && Check.isNull(targetDatas)) {
+                    sendData = groupDatas;
+                } else if (Check.isNull(groupDatas) && !Check.isNull(creativeDatas) && Check.isNull(targetDatas)) {
                     sendData = creativeDatas;
-                } else if (Check.isNull(planDatas) && Check.isNull(creativeDatas) && !Check.isNull(targetDatas)) {
+                } else if (Check.isNull(groupDatas) && Check.isNull(creativeDatas) && !Check.isNull(targetDatas)) {
                     sendData = targetDatas;
                 }
             } else {
-                if (Check.isNull(planDatas) && Check.isNull(creativeDatas) && Check.isNull(targetDatas)) {
-                    sendData = groupDatas;
-                } else if (!Check.isNull(targetDatas)) {
-                    for (int i = 0; i < groupDatas.size(); i++) {
-                        Long gGroupId = groupDatas.getJSONObject(i).getLong("groupId");
-                        for (int k = 0; k < targetDatas.size(); k++) {
-                            Long tgGroupId = targetDatas.getJSONObject(k).getLong("groupId");
-                            if (tgGroupId == gGroupId) {
-                                sendData.add(creativeDatas.getJSONObject(k));
+                if (Check.isNull(groupDatas) && Check.isNull(creativeDatas) && Check.isNull(targetDatas)) {
+                    sendData = planDatas;
+                } else {
+                    for (int i = 0; i < planDatas.size(); i++) {
+                        Long planId = planDatas.getJSONObject(i).getLong("planId");
+                        if (!Check.isNull(targetDatas) && Check.isNull(groupDatas)) {
+                            for (int k = 0; k < targetDatas.size(); k++) {
+                                Long tgPlanId = targetDatas.getJSONObject(k).getLong("planId");
+                                if (tgPlanId == planId) {
+                                    sendData.add(creativeDatas.getJSONObject(k));
+                                }
+                            }
+                        } else if (Check.isNull(targetDatas) && !Check.isNull(groupDatas)) {
+                            for (int k = 0; k < groupDatas.size(); k++) {
+                                Long tgPlanId = groupDatas.getJSONObject(k).getLong("planId");
+                                if (tgPlanId == planId) {
+                                    sendData.add(creativeDatas.getJSONObject(k));
+                                }
                             }
                         }
                     }

+ 2 - 0
module-alarm/src/main/java/cn/com/ctop/alarm/modules/entity/AlarmEventSend.java

@@ -62,6 +62,8 @@ public class AlarmEventSend {
     private String alarmStatus;
 
     private String ruleDimension;
+
+    private String mediaType;
     /**
      * createTime
      */

+ 1 - 0
module-alarm/src/main/java/cn/com/ctop/alarm/modules/entity/RuleAccountTemplate.java

@@ -44,6 +44,7 @@ public class RuleAccountTemplate {
     @Excel(name = "模板id", width = 15)
     @ApiModelProperty(value = "模板id")
     private Long templateId;
+    private Integer templateStatus;
 
     /**
      * createTime

+ 20 - 0
module-alarm/src/main/java/cn/com/ctop/alarm/modules/entity/vo/TemplateAppliedVo.java

@@ -8,6 +8,8 @@ public class TemplateAppliedVo {
     private String templateName;
     private Long projectId;
     private String projectName;
+    private Integer templateStatus;
+    private Integer accountStatus;
     private String userId;
     private String userName;
 
@@ -67,6 +69,22 @@ public class TemplateAppliedVo {
         this.projectName = projectName;
     }
 
+    public Integer getTemplateStatus() {
+        return templateStatus;
+    }
+
+    public void setTemplateStatus(Integer templateStatus) {
+        this.templateStatus = templateStatus;
+    }
+
+    public Integer getAccountStatus() {
+        return accountStatus;
+    }
+
+    public void setAccountStatus(Integer accountStatus) {
+        this.accountStatus = accountStatus;
+    }
+
     public String getUserId() {
         return userId;
     }
@@ -93,6 +111,8 @@ public class TemplateAppliedVo {
                 ", templateName='" + templateName + '\'' +
                 ", projectId=" + projectId +
                 ", projectName='" + projectName + '\'' +
+                ", templateStatus=" + templateStatus +
+                ", accountStatus=" + accountStatus +
                 ", userId='" + userId + '\'' +
                 ", userName='" + userName + '\'' +
                 '}';

+ 2 - 0
module-alarm/src/main/java/cn/com/ctop/alarm/modules/mapper/xml/RuleAccountTemplateMapper.xml

@@ -6,6 +6,8 @@
             resultType="cn.com.ctop.alarm.modules.entity.vo.TemplateAppliedVo">
         select
         t1.id id,
+        t1.template_status templateStatus,
+        t2.account_status accountStatus,
         t1.account_id accountId,
         t2.auth_name authName,
         t1.template_id templateId,

+ 45 - 11
module-alarm/src/main/java/cn/com/ctop/alarm/modules/service/impl/RuleGroupServiceImpl.java

@@ -22,6 +22,7 @@ import cn.com.ctop.common.module.entity.UserAllocation;
 import cn.com.ctop.common.module.mapper.SysUserMapper;
 import cn.com.ctop.common.module.mapper.UserAllocationMapper;
 import cn.com.ctop.common.module.service.ICtopOauthTokenService;
+import cn.com.ctop.common.module.service.IRuleDataAccountKuaishouService;
 import cn.com.ctop.common.module.service.IRuleDataAccountService;
 import cn.com.ctop.common.module.service.ISendMessageService;
 import cn.com.ctop.common.module.utils.Check;
@@ -82,6 +83,8 @@ public class RuleGroupServiceImpl extends ServiceImpl<RuleGroupMapper, RuleGroup
     @Autowired
     private IRuleDataAccountService ruleDataAccountService;
     @Autowired
+    private IRuleDataAccountKuaishouService ruleDataAccountKuaishouService;
+    @Autowired
     private AlarmEventSendMapper alarmEventSendMapper;
     @Autowired
     private UserAllocationMapper userAllocationMapper;
@@ -94,6 +97,7 @@ public class RuleGroupServiceImpl extends ServiceImpl<RuleGroupMapper, RuleGroup
 
     private JSONObject userObj = null;
     private final static String ACCOUNT = "account";
+    private final static String UNIT = "unit";
     private final static String PLAN = "plan";
     private final static String CREATIVE = "creative";
 
@@ -102,7 +106,10 @@ public class RuleGroupServiceImpl extends ServiceImpl<RuleGroupMapper, RuleGroup
         log.info("------start------");
         Long startTime = System.currentTimeMillis();
         //查询账户绑定过的规则模板
-        List<RuleAccountTemplate> ruleAccountTemplates = ruleAccountTemplateMapper.selectByMap(null);
+        Map<String, Object> map = new HashMap<>();
+        //0状态为启动
+        map.put("template_status", 0);
+        List<RuleAccountTemplate> ruleAccountTemplates = ruleAccountTemplateMapper.selectByMap(map);
         if (Check.isNull(ruleAccountTemplates)) {
             log.error("查询账户绑定过的规则模板失败");
             return;
@@ -142,12 +149,12 @@ public class RuleGroupServiceImpl extends ServiceImpl<RuleGroupMapper, RuleGroup
         Map<Long, Object> map = (Map<Long, Object>) ruleGroupMap.get(templates.getTemplateId());
         Integer type = (Integer) map.get("type");
         JSONObject matchData = null;
-        //媒体类型 1:头条2:快手
+        //媒体类型 1,3:头条2:快手
         if (NoEn.NO1.valueInt() == type || NoEn.NO3.valueInt() == type) {
-            //查询抖音匹配数据
-            matchData = getRuleData(templates.getAccountId());
+            //查询头条匹配数据
+            matchData = getRuleData(templates.getAccountId(), "TT");
         } else {
-            //TODO 获取快手数据
+            matchData = getRuleData(templates.getAccountId(), "KS");
         }
         if (Check.isNull(matchData)) {
             log.warn("获取匹配数据失败");
@@ -398,9 +405,9 @@ public class RuleGroupServiceImpl extends ServiceImpl<RuleGroupMapper, RuleGroup
                     }
                     break;
                 }
-            } else if ("group".equals(ruleBase.getRuleDimension())) {
+            } else if (UNIT.equals(ruleBase.getRuleDimension())) {
                 groupDatas = getOKData(groupDatas, dimensionData, ruleBase, indicator, threshold);
-                if (Check.isNull(targetDatas)) {
+                if (Check.isNull(groupDatas)) {
                     if (!Check.isNull(accountDatas)) {
                         accountDatas = null;
                     }
@@ -471,6 +478,7 @@ public class RuleGroupServiceImpl extends ServiceImpl<RuleGroupMapper, RuleGroup
         }
         JSONObject user = getUserByAccountId(accountId);
         StringJoiner creativeJoiner = new StringJoiner(",");
+        StringJoiner unitJoiner = new StringJoiner(",");
         StringJoiner planJoiner = new StringJoiner(",");
         StringJoiner isNullCreativeJoiner = new StringJoiner(",");
         StringJoiner isNullPlanJoiner = new StringJoiner(",");
@@ -512,6 +520,15 @@ public class RuleGroupServiceImpl extends ServiceImpl<RuleGroupMapper, RuleGroup
                         creativeJoiner = new StringJoiner(",");
                         creativeJoiner.add(obj.getString("creativeId"));
                     }
+                } else if (!Check.isNull(obj.getLong("unitId"))) {
+                    if (unitJoiner.toString().getBytes().length <= 1800) {
+                        unitJoiner.add(obj.getString("unitId"));
+                    } else {
+                        String msg = MatchLogic.getMessage(ruleGroup.getGroupName(), accountId, accountName, UNIT, unitJoiner.toString(), isNull);
+                        sendMsg(msg, ruleGroup, user, UNIT, unitJoiner.toString(), accountId, mediaType);
+                        unitJoiner = new StringJoiner(",");
+                        unitJoiner.add(obj.getString("unitId"));
+                    }
                 } else if (!Check.isNull(obj.getLong("planId"))) {
                     if (planJoiner.toString().getBytes().length <= 1800) {
                         planJoiner.add(obj.getString("planId"));
@@ -531,6 +548,10 @@ public class RuleGroupServiceImpl extends ServiceImpl<RuleGroupMapper, RuleGroup
             String creativeMsg = MatchLogic.getMessage(ruleGroup.getGroupName(), accountId, accountName, CREATIVE, creativeJoiner.toString(), false);
             sendMsg(creativeMsg, ruleGroup, user, CREATIVE, creativeJoiner.toString(), accountId, mediaType);
         }
+        if (!Check.isNull(unitJoiner.toString())) {
+            String creativeMsg = MatchLogic.getMessage(ruleGroup.getGroupName(), accountId, accountName, UNIT, unitJoiner.toString(), false);
+            sendMsg(creativeMsg, ruleGroup, user, UNIT, unitJoiner.toString(), accountId, mediaType);
+        }
         if (!Check.isNull(planJoiner.toString())) {
             String planMsg = MatchLogic.getMessage(ruleGroup.getGroupName(), accountId, accountName, PLAN, planJoiner.toString(), false);
             sendMsg(planMsg, ruleGroup, user, PLAN, planJoiner.toString(), accountId, mediaType);
@@ -595,11 +616,14 @@ public class RuleGroupServiceImpl extends ServiceImpl<RuleGroupMapper, RuleGroup
                 send.setAlarmDetail(msg.replace("<br/>", ","));
                 send.setAlarmStatus(NoEn.NO1.valueStr());
                 send.setGroupId(ruleGroup.getId());
+                send.setMediaType((NoEn.NO1.valueInt() == mediaType || NoEn.NO3.valueInt() == mediaType) ? "头条" : "快手");
                 send.setGroupName(ruleGroup.getGroupName());
                 if (CREATIVE.equals(type)) {
-                    send.setRuleDimension(CREATIVE);
+                    send.setRuleDimension(type);
                 } else if (PLAN.equals(type)) {
-                    send.setRuleDimension(PLAN);
+                    send.setRuleDimension(type);
+                } else if (UNIT.equals(type)) {
+                    send.setRuleDimension(type);
                 } else {
                     send.setRuleDimension(ACCOUNT);
                 }
@@ -648,6 +672,11 @@ public class RuleGroupServiceImpl extends ServiceImpl<RuleGroupMapper, RuleGroup
                     if (!(boolean) updateMap.get("success")) {
                         msg = msg.replace(id, id + "(F)");
                     }
+                } else if (UNIT.equals(type)) {
+                    updateMap = kuaiShouUpdateService.updateUnitStatus(token.getAccessToken(), accountId, Long.valueOf(id), NoEn.NO2.valueInt(), userId);
+                    if (!(boolean) updateMap.get("success")) {
+                        msg = msg.replace(id, id + "(F)");
+                    }
                 } else if (PLAN.equals(type)) {
                     updateMap = kuaiShouUpdateService.updateCampaignStatus(token.getAccessToken(), accountId, Long.valueOf(id), NoEn.NO2.valueInt(), userId);
                     if (!(boolean) updateMap.get("success")) {
@@ -818,9 +847,14 @@ public class RuleGroupServiceImpl extends ServiceImpl<RuleGroupMapper, RuleGroup
      * @throws
      * @author ZHAOXA
      */
-    private JSONObject getRuleData(Long accountId) {
+    private JSONObject getRuleData(Long accountId, String type) {
         try {
-            return ruleDataAccountService.getRuleDataByAccountId(accountId);
+            if ("TT".equals(type)) {
+                return ruleDataAccountService.getRuleDataByAccountId(accountId);
+            }
+            if ("KS".equals(type)) {
+                return ruleDataAccountKuaishouService.getKuaiShouRuleDataByAccountId(accountId);
+            }
         } catch (Exception e) {
             log.error("获取匹配数据集异常", e);
         }

+ 5 - 0
module-alarm/src/main/java/cn/com/ctop/alarm/modules/service/impl/RuleTemplateServiceImpl.java

@@ -226,6 +226,7 @@ public class RuleTemplateServiceImpl extends ServiceImpl<RuleTemplateMapper, Rul
                 QueryWrapper<RuleIndicator> indicatorQueryWrapper = new QueryWrapper<>();
                 indicatorQueryWrapper.eq("code", ruleBase.getIndicatorCode());
                 indicatorQueryWrapper.eq("dimension", ruleBase.getRuleDimension());
+                indicatorQueryWrapper.eq("media_type", template.getMediaType());
                 indicatorQueryWrapper.last("limit 1");
                 RuleIndicator ruleIndicator = ruleIndicatorService.getOne(indicatorQueryWrapper);
                 if (!Check.isNull(ruleIndicator)) {
@@ -334,6 +335,7 @@ public class RuleTemplateServiceImpl extends ServiceImpl<RuleTemplateMapper, Rul
                     QueryWrapper<RuleIndicator> indicatorQueryWrapper = new QueryWrapper<>();
                     indicatorQueryWrapper.eq("code", ruleBase.getIndicatorCode());
                     indicatorQueryWrapper.eq("dimension", ruleBase.getRuleDimension());
+                    indicatorQueryWrapper.eq("media_type", template.getMediaType());
                     indicatorQueryWrapper.last("limit 1");
                     RuleIndicator ruleIndicator = ruleIndicatorService.getOne(indicatorQueryWrapper);  // 查询指标的详情信息
                     if (!Check.isNull(ruleIndicator)) {
@@ -396,6 +398,7 @@ public class RuleTemplateServiceImpl extends ServiceImpl<RuleTemplateMapper, Rul
                          */
                         QueryWrapper<RuleIndicator> indicatorQueryWrapper = new QueryWrapper<>();
                         indicatorQueryWrapper.eq("code", ruleBase.getIndicatorCode());
+                        indicatorQueryWrapper.eq("media_type", template.getMediaType());
                         indicatorQueryWrapper.eq("dimension", ruleBase.getRuleDimension());
                         indicatorQueryWrapper.last("limit 1");
                         RuleIndicator ruleIndicator = ruleIndicatorService.getOne(indicatorQueryWrapper); // 查询基础规则的指标信息
@@ -478,6 +481,7 @@ public class RuleTemplateServiceImpl extends ServiceImpl<RuleTemplateMapper, Rul
                     QueryWrapper<RuleIndicator> indicatorQueryWrapper = new QueryWrapper<>();
                     indicatorQueryWrapper.eq("code", ruleBase.getIndicatorCode());
                     indicatorQueryWrapper.eq("dimension", ruleBase.getRuleDimension());
+                    indicatorQueryWrapper.eq("media_type", template.getMediaType());
                     indicatorQueryWrapper.last("limit 1");
                     RuleIndicator ruleIndicator = ruleIndicatorService.getOne(indicatorQueryWrapper);
                     if (!Check.isNull(ruleIndicator)) {
@@ -515,6 +519,7 @@ public class RuleTemplateServiceImpl extends ServiceImpl<RuleTemplateMapper, Rul
                     QueryWrapper<RuleIndicator> indicatorQueryWrapper = new QueryWrapper<>();
                     indicatorQueryWrapper.eq("code", ruleBase.getIndicatorCode());
                     indicatorQueryWrapper.eq("dimension", ruleBase.getRuleDimension());
+                    indicatorQueryWrapper.eq("media_type", template.getMediaType());
                     indicatorQueryWrapper.last("limit 1");
                     RuleIndicator ruleIndicator = ruleIndicatorService.getOne(indicatorQueryWrapper);
                     if (!Check.isNull(ruleIndicator)) {

+ 0 - 36
module-common/src/main/java/cn/com/ctop/common/module/entity/ActCustomForm.java

@@ -1,36 +0,0 @@
-package cn.com.ctop.common.module.entity;
-
-import cn.com.ctop.common.module.annotation.Dict;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-import java.util.Date;
-
-/**
- * 自定义表单信息
- * @author jeecg-boot
- * @date   2020-08-25
- * @version V1.0
- */
-@Data
-@TableName("ctop_act_custom_form")
-@EqualsAndHashCode(callSuper = false)
-@Accessors(chain = true)
-@ApiModel(value="ctop_act_custom_form对象", description="自定义表单信息")
-public class ActCustomForm {
-
-	@TableId(type = IdType.AUTO)
-	private Long id;
-	private String name;
-	private String text;
-	@Dict(dicCode = "id",dictTable="sys_user",dicText="realname")
-	private String userId;
-	private Integer status;
-	private Date createTime;
-	private Date updateTime;
-}

+ 0 - 33
module-common/src/main/java/cn/com/ctop/common/module/entity/ActFormData.java

@@ -1,33 +0,0 @@
-package cn.com.ctop.common.module.entity;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-import java.util.Date;
-
-/**
- * 自定义表单存储数据
- * @author jeecg-boot
- * @date   2020-08-25
- * @version V1.0
- */
-@Data
-@TableName("ctop_act_form_data")
-@EqualsAndHashCode(callSuper = false)
-@Accessors(chain = true)
-public class ActFormData {
-
-	@TableId(type = IdType.AUTO)
-	private Long id;
-	private Long formId;
-	private String userId;
-	private String bussinessId;
-	private String content;
-	private Integer status;
-	private Date createTime;
-	private Date updateTime;
-}

+ 0 - 34
module-common/src/main/java/cn/com/ctop/common/module/entity/ActFormField.java

@@ -1,34 +0,0 @@
-package cn.com.ctop.common.module.entity;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-import java.util.Date;
-
-/**
- * 自定义表单字段信息
- * @author jeecg-boot
- * @date   2020-08-25
- * @version V1.0
- */
-@Data
-@TableName("ctop_act_form_field")
-@EqualsAndHashCode(callSuper = false)
-@Accessors(chain = true)
-@ApiModel(value="ctop_act_form_field对象", description="自定义表单字段信息")
-public class ActFormField {
-
-	@TableId(type = IdType.AUTO)
-	private Long id;
-	private Long formId;
-	private String key;
-	private String type;
-	private Integer status;
-	private Date createTime;
-	private Date updateTime;
-}

+ 0 - 33
module-common/src/main/java/cn/com/ctop/common/module/entity/ActFormPorcess.java

@@ -1,33 +0,0 @@
-package cn.com.ctop.common.module.entity;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-import java.util.Date;
-
-/**
- * 自定义表单关联流程信息
- * @author jeecg-boot
- * @date   2020-08-25
- * @version V1.0
- */
-@Data
-@TableName("ctop_act_form_porcess")
-@EqualsAndHashCode(callSuper = false)
-@Accessors(chain = true)
-@ApiModel(value="ctop_act_form_porcess对象", description="自定义表单关联流程信息")
-public class ActFormPorcess {
-
-	@TableId(type = IdType.AUTO)
-	private Long id;
-	private Long formId;
-	private String processId;
-	private Integer status;
-	private Date createTime;
-	private Date updateTime;
-}

+ 0 - 2
module-common/src/main/java/cn/com/ctop/common/module/entity/RuleDataAccount.java

@@ -1,7 +1,5 @@
 package cn.com.ctop.common.module.entity;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;

+ 45 - 0
module-common/src/main/java/cn/com/ctop/common/module/entity/RuleDataAccountKuaishou.java

@@ -0,0 +1,45 @@
+package cn.com.ctop.common.module.entity;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import lombok.Data;
+
+/**
+ * 快手预警数据账户维度
+ */
+@Data
+@TableName("ctop_rule_data_account_kuaishou")
+public class RuleDataAccountKuaishou {
+    
+	/**id*/
+	@TableId(type = IdType.AUTO)
+	private Long id;
+	/**账户id*/
+	private Long accountId;
+	/**accountName*/
+	private String accountName;
+	/**消耗*/
+	private BigDecimal cost;
+	/**validBalance*/
+	private BigDecimal validBalance;
+	/**转化数*/
+	private Long convertNum;
+	/**转化成本*/
+	private BigDecimal convertCost;
+	/**次留数*/
+	private Long nextDayOpenNum;
+	/**nextDayOpenCost*/
+	private BigDecimal nextDayOpenCost;
+	/**次留率*/
+	private BigDecimal nextDayOpenRate;
+	/**status*/
+	private Integer status;
+	/**createTime*/
+	private Date createTime;
+	/**updateTime*/
+	private Date updateTime;
+}

+ 2 - 0
module-common/src/main/java/cn/com/ctop/common/module/entity/RuleDataPlan.java

@@ -34,6 +34,8 @@ public class RuleDataPlan {
 	private String downloadUrl;
 	private BigDecimal cost;
 	private Long convertNum;
+	private Long convertId;
+	private String deepConvertTarget;
 	private BigDecimal convertCost;
 	private BigDecimal nextDayOpenRate;
 	private BigDecimal nextDayOpenCost;

+ 42 - 0
module-common/src/main/java/cn/com/ctop/common/module/entity/RuleDataTargetKuaishou.java

@@ -0,0 +1,42 @@
+package cn.com.ctop.common.module.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import lombok.Data;
+
+/**
+ * 快手预警指标数据
+ */
+@Data
+@TableName("ctop_rule_data_target_kuaishou")
+public class RuleDataTargetKuaishou {
+
+	/**id*/
+	private Long id;
+	/**accountId*/
+	private Long accountId;
+	/**planId*/
+	private Long planId;
+	/**unitId*/
+	private Long unitId;
+	/**广告位*/
+	private String sceneId;
+	/**地域定向*/
+	private String region;
+	/**gender*/
+	private Integer gender;
+	/**操作系统*/
+	private Integer platformOs;
+	/**手机品牌*/
+	private String deviceBrand;
+	/**手机价格*/
+	private String devicePrice;
+	/**智能扩量*/
+	private Integer isOpen;
+	/**过滤已转化人群*/
+	private Integer filterConvertedLevel;
+	/**投放时段*/
+	private String scheduleTime;
+
+	private Integer status;
+}

+ 27 - 0
module-common/src/main/java/cn/com/ctop/common/module/entity/RuleDatePlanKuaishou.java

@@ -0,0 +1,27 @@
+package cn.com.ctop.common.module.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import lombok.Data;
+
+/**
+ * 预警快手计划数据清洗
+ */
+@Data
+@TableName("ctop_rule_date_plan_kuaishou")
+public class RuleDatePlanKuaishou {
+    
+	/**id*/
+	private Long id;
+	/**accountId*/
+	private Long accountId;
+	/**accountName*/
+	private String accountName;
+	/**planId*/
+	private Long planId;
+	/**planName*/
+	private String planName;
+
+	private Integer status;
+
+}

+ 50 - 0
module-common/src/main/java/cn/com/ctop/common/module/entity/RuleDateUnitKuaishou.java

@@ -0,0 +1,50 @@
+package cn.com.ctop.common.module.entity;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * 快手预警组数据
+ */
+@Data
+@TableName("ctop_rule_data_unit_kuaishou")
+public class RuleDateUnitKuaishou {
+    
+	/**id*/
+	private Long id;
+	/**accountId*/
+	private Long accountId;
+    /**planId*/
+    private Long planId;
+	/**unitId*/
+	private Long unitId;
+	/**unitName*/
+	private String unitName;
+	/**消耗*/
+	private BigDecimal charge;
+
+	private Long convertNum;
+
+	private BigDecimal convertCost;
+
+	/**activation*/
+	private Long activation;
+	/**激活单价*/
+	private BigDecimal activationCost;
+	/**注册数*/
+	private Long eventRegister;
+	/**表单*/
+	private BigDecimal registerCost;
+	/**表单*/
+	private Long formCount;
+	/**表单提交单价*/
+	private BigDecimal formCost;
+	/**付费*/
+	private Long eventPay;
+	/**付费单价*/
+	private BigDecimal payCost;
+
+    private Integer status;
+
+}

+ 7 - 0
module-common/src/main/java/cn/com/ctop/common/module/entity/UserAllocation.java

@@ -126,6 +126,13 @@ public class UserAllocation implements Serializable {
     private Integer landingPage;
 
     /**
+     * 是否开启删评论
+     * 0 启动
+     * 1 禁用
+     */
+    private Integer deleteComment;
+
+    /**
      * 修改时间
      */
     @Excel(name = "修改时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")

+ 0 - 14
module-common/src/main/java/cn/com/ctop/common/module/mapper/ActCustomFormMapper.java

@@ -1,14 +0,0 @@
-package cn.com.ctop.common.module.mapper;
-
-import cn.com.ctop.common.module.entity.ActCustomForm;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-
-/**
- * 自定义表单信息
- * @author: jeecg-boot
- * @date:   2020-08-25
- * @cersion: V1.0
- */
-public interface ActCustomFormMapper extends BaseMapper<ActCustomForm> {
-
-}

+ 0 - 14
module-common/src/main/java/cn/com/ctop/common/module/mapper/ActFormDataMapper.java

@@ -1,14 +0,0 @@
-package cn.com.ctop.common.module.mapper;
-
-import cn.com.ctop.common.module.entity.ActFormData;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-
-/**
- * 自定义表单存储数据
- * @author: jeecg-boot
- * @date:   2020-08-25
- * @cersion: V1.0
- */
-public interface ActFormDataMapper extends BaseMapper<ActFormData> {
-
-}

+ 0 - 14
module-common/src/main/java/cn/com/ctop/common/module/mapper/ActFormFieldMapper.java

@@ -1,14 +0,0 @@
-package cn.com.ctop.common.module.mapper;
-
-import cn.com.ctop.common.module.entity.ActFormField;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-
-/**
- * 自定义表单字段信息
- * @author: jeecg-boot
- * @date:   2020-08-25
- * @cersion: V1.0
- */
-public interface ActFormFieldMapper extends BaseMapper<ActFormField> {
-
-}

+ 0 - 14
module-common/src/main/java/cn/com/ctop/common/module/mapper/ActFormPorcessMapper.java

@@ -1,14 +0,0 @@
-package cn.com.ctop.common.module.mapper;
-
-import cn.com.ctop.common.module.entity.ActFormPorcess;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-
-/**
- * 自定义表单关联流程信息
- * @author: jeecg-boot
- * @date:   2020-08-25
- * @cersion: V1.0
- */
-public interface ActFormPorcessMapper extends BaseMapper<ActFormPorcess> {
-
-}

+ 11 - 0
module-common/src/main/java/cn/com/ctop/common/module/mapper/RuleDataAccountKuaishouMapper.java

@@ -0,0 +1,11 @@
+package cn.com.ctop.common.module.mapper;
+
+import cn.com.ctop.common.module.entity.RuleDataAccountKuaishou;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 快手预警数据账户维度
+ */
+public interface RuleDataAccountKuaishouMapper extends BaseMapper<RuleDataAccountKuaishou> {
+
+}

+ 11 - 0
module-common/src/main/java/cn/com/ctop/common/module/mapper/RuleDataTargetKuaishouMapper.java

@@ -0,0 +1,11 @@
+package cn.com.ctop.common.module.mapper;
+
+import cn.com.ctop.common.module.entity.RuleDataTargetKuaishou;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 快手预警指标数据
+ */
+public interface RuleDataTargetKuaishouMapper extends BaseMapper<RuleDataTargetKuaishou> {
+
+}

+ 11 - 0
module-common/src/main/java/cn/com/ctop/common/module/mapper/RuleDatePlanKuaishouMapper.java

@@ -0,0 +1,11 @@
+package cn.com.ctop.common.module.mapper;
+
+import cn.com.ctop.common.module.entity.RuleDatePlanKuaishou;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 预警快手计划数据清洗
+ */
+public interface RuleDatePlanKuaishouMapper extends BaseMapper<RuleDatePlanKuaishou> {
+
+}

+ 12 - 0
module-common/src/main/java/cn/com/ctop/common/module/mapper/RuleDateUnitKuaishouMapper.java

@@ -0,0 +1,12 @@
+package cn.com.ctop.common.module.mapper;
+
+import cn.com.ctop.common.module.entity.RuleDateUnitKuaishou;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 预警快手计划数据清洗
+ */
+public interface RuleDateUnitKuaishouMapper extends BaseMapper<RuleDateUnitKuaishou> {
+
+}

+ 2 - 0
module-common/src/main/java/cn/com/ctop/common/module/mapper/UserAllocationMapper.java

@@ -31,4 +31,6 @@ public interface UserAllocationMapper extends BaseMapper<UserAllocation> {
     UserAllocation getUserAllocation(@Param("accountId") Long accountId);
 
     JSONObject getSwitchStatusByAccount(@Param("accountId") Long accountId);
+
+    List<Long>  queryAccountsByDeleteComment();
 }

+ 2 - 2
module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/ActFormDataMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="cn.com.ctop.common.module.mapper.ActFormDataMapper">
+<mapper namespace="cn.com.ctop.common.module.mapper.RuleDataAccountKuaishouMapper">
 
-</mapper>
+</mapper>

+ 2 - 2
module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/ActFormPorcessMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="cn.com.ctop.common.module.mapper.ActFormPorcessMapper">
+<mapper namespace="cn.com.ctop.common.module.mapper.RuleDataTargetKuaishouMapper">
 
-</mapper>
+</mapper>

+ 2 - 2
module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/ActFormFieldMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="cn.com.ctop.common.module.mapper.ActFormFieldMapper">
+<mapper namespace="cn.com.ctop.common.module.mapper.RuleDatePlanKuaishouMapper">
 
-</mapper>
+</mapper>

+ 11 - 0
module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/UserAllocationMapper.xml

@@ -85,5 +85,16 @@
             account_id = #{accountId}
     </select>
 
+    <select id="queryAccountsByDeleteComment" resultType="java.lang.Long">
+        SELECT
+            account_id
+        FROM
+            ctop_user_allocation
+        WHERE
+            media_id = 2
+          AND account_status = 0
+          AND delete_comment = 0
+    </select>
+
 
 </mapper>

+ 0 - 14
module-common/src/main/java/cn/com/ctop/common/module/service/IActCustomFormService.java

@@ -1,14 +0,0 @@
-package cn.com.ctop.common.module.service;
-
-import cn.com.ctop.common.module.entity.ActCustomForm;
-import com.baomidou.mybatisplus.extension.service.IService;
-
-/**
- * @Description: 自定义表单信息
- * @Author: jeecg-boot
- * @Date:   2020-08-25
- * @Version: V1.0
- */
-public interface IActCustomFormService extends IService<ActCustomForm> {
-
-}

+ 0 - 14
module-common/src/main/java/cn/com/ctop/common/module/service/IActFormDataService.java

@@ -1,14 +0,0 @@
-package cn.com.ctop.common.module.service;
-
-import cn.com.ctop.common.module.entity.ActFormData;
-import com.baomidou.mybatisplus.extension.service.IService;
-
-/**
- * @Description: 自定义表单存储数据
- * @Author: jeecg-boot
- * @Date:   2020-08-25
- * @Version: V1.0
- */
-public interface IActFormDataService extends IService<ActFormData> {
-
-}

+ 0 - 14
module-common/src/main/java/cn/com/ctop/common/module/service/IActFormFieldService.java

@@ -1,14 +0,0 @@
-package cn.com.ctop.common.module.service;
-
-import cn.com.ctop.common.module.entity.ActFormField;
-import com.baomidou.mybatisplus.extension.service.IService;
-
-/**
- * @Description: 自定义表单字段信息
- * @Author: jeecg-boot
- * @Date:   2020-08-25
- * @Version: V1.0
- */
-public interface IActFormFieldService extends IService<ActFormField> {
-
-}

+ 0 - 14
module-common/src/main/java/cn/com/ctop/common/module/service/IActFormPorcessService.java

@@ -1,14 +0,0 @@
-package cn.com.ctop.common.module.service;
-
-import cn.com.ctop.common.module.entity.ActFormPorcess;
-import com.baomidou.mybatisplus.extension.service.IService;
-
-/**
- * @Description: 自定义表单关联流程信息
- * @Author: jeecg-boot
- * @Date:   2020-08-25
- * @Version: V1.0
- */
-public interface IActFormPorcessService extends IService<ActFormPorcess> {
-
-}

+ 13 - 0
module-common/src/main/java/cn/com/ctop/common/module/service/IRuleDataAccountKuaishouService.java

@@ -0,0 +1,13 @@
+package cn.com.ctop.common.module.service;
+
+import cn.com.ctop.common.module.entity.RuleDataAccountKuaishou;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ *  快手预警数据账户维度
+ */
+public interface IRuleDataAccountKuaishouService extends IService<RuleDataAccountKuaishou> {
+
+    JSONObject getKuaiShouRuleDataByAccountId(Long accountId);
+}

+ 11 - 0
module-common/src/main/java/cn/com/ctop/common/module/service/IRuleDataTargetKuaishouService.java

@@ -0,0 +1,11 @@
+package cn.com.ctop.common.module.service;
+
+import cn.com.ctop.common.module.entity.RuleDataTargetKuaishou;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 快手预警指标数据
+ */
+public interface IRuleDataTargetKuaishouService extends IService<RuleDataTargetKuaishou> {
+
+}

+ 11 - 0
module-common/src/main/java/cn/com/ctop/common/module/service/IRuleDataUnitKuaishouService.java

@@ -0,0 +1,11 @@
+package cn.com.ctop.common.module.service;
+
+import cn.com.ctop.common.module.entity.RuleDateUnitKuaishou;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ *  组维度数据清洗
+ */
+public interface IRuleDataUnitKuaishouService extends IService<RuleDateUnitKuaishou> {
+
+}

+ 11 - 0
module-common/src/main/java/cn/com/ctop/common/module/service/IRuleDatePlanKuaishouService.java

@@ -0,0 +1,11 @@
+package cn.com.ctop.common.module.service;
+
+import cn.com.ctop.common.module.entity.RuleDatePlanKuaishou;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 预警快手计划数据清洗
+ */
+public interface IRuleDatePlanKuaishouService extends IService<RuleDatePlanKuaishou> {
+
+}

+ 2 - 0
module-common/src/main/java/cn/com/ctop/common/module/service/IUserAllocationService.java

@@ -36,4 +36,6 @@ public interface IUserAllocationService extends IService<UserAllocation> {
     List<UserAllocation> getUserAllocations(String mediaId ,int switchType);
 
     JSONObject getSwitchStatusByAccount(Long accountId);
+
+    List<Long> getAccountsByDeleteComment();
 }

+ 0 - 18
module-common/src/main/java/cn/com/ctop/common/module/service/impl/ActCustomFormServiceImpl.java

@@ -1,18 +0,0 @@
-package cn.com.ctop.common.module.service.impl;
-
-import cn.com.ctop.common.module.entity.ActCustomForm;
-import cn.com.ctop.common.module.mapper.ActCustomFormMapper;
-import cn.com.ctop.common.module.service.IActCustomFormService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.stereotype.Service;
-
-/**
- * 自定义表单信息
- * @author jeecg-boot
- * @date   2020-08-25
- * @version V1.0
- */
-@Service
-public class ActCustomFormServiceImpl extends ServiceImpl<ActCustomFormMapper, ActCustomForm> implements IActCustomFormService {
-
-}

+ 0 - 18
module-common/src/main/java/cn/com/ctop/common/module/service/impl/ActFormDataServiceImpl.java

@@ -1,18 +0,0 @@
-package cn.com.ctop.common.module.service.impl;
-
-import cn.com.ctop.common.module.entity.ActFormData;
-import cn.com.ctop.common.module.mapper.ActFormDataMapper;
-import cn.com.ctop.common.module.service.IActFormDataService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.stereotype.Service;
-
-/**
- * 自定义表单存储数据
- * @author jeecg-boot
- * @date   2020-08-25
- * @version V1.0
- */
-@Service
-public class ActFormDataServiceImpl extends ServiceImpl<ActFormDataMapper, ActFormData> implements IActFormDataService {
-
-}

+ 0 - 18
module-common/src/main/java/cn/com/ctop/common/module/service/impl/ActFormFieldServiceImpl.java

@@ -1,18 +0,0 @@
-package cn.com.ctop.common.module.service.impl;
-
-import cn.com.ctop.common.module.entity.ActFormField;
-import cn.com.ctop.common.module.mapper.ActFormFieldMapper;
-import cn.com.ctop.common.module.service.IActFormFieldService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.stereotype.Service;
-
-/**
- * 自定义表单字段信息
- * @author jeecg-boot
- * @date   2020-08-25
- * @version V1.0
- */
-@Service
-public class ActFormFieldServiceImpl extends ServiceImpl<ActFormFieldMapper, ActFormField> implements IActFormFieldService {
-
-}

+ 0 - 18
module-common/src/main/java/cn/com/ctop/common/module/service/impl/ActFormPorcessServiceImpl.java

@@ -1,18 +0,0 @@
-package cn.com.ctop.common.module.service.impl;
-
-import cn.com.ctop.common.module.entity.ActFormPorcess;
-import cn.com.ctop.common.module.mapper.ActFormPorcessMapper;
-import cn.com.ctop.common.module.service.IActFormPorcessService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.stereotype.Service;
-
-/**
- * 自定义表单关联流程信息
- * @author jeecg-boot
- * @date   2020-08-25
- * @version V1.0
- */
-@Service
-public class ActFormPorcessServiceImpl extends ServiceImpl<ActFormPorcessMapper, ActFormPorcess> implements IActFormPorcessService {
-
-}

+ 6 - 1
module-common/src/main/java/cn/com/ctop/common/module/service/impl/BindAccountAuthServiceImpl.java

@@ -28,7 +28,12 @@ import java.util.Map;
 @Service
 @Primary
 public class BindAccountAuthServiceImpl extends ServiceImpl<BindAccountAuthMapper, BindAccountAuth> implements IBindAccountAuthService {
-
+    @Value("${bytedance.appId}")
+    private String bytedanceAppId;
+    @Value("${bytedance.url.callback-url}")
+    private String bytedanceCallbackUrl;
+    @Value("${bytedance.url.auth-prefix}")
+    private String bytedanceAuthUrl;
     @Autowired
     private BindAccountAuthMapper bindAccountAuthMapper;
 

+ 12 - 3
module-common/src/main/java/cn/com/ctop/common/module/service/impl/CtopOauthTokenServiceImpl.java

@@ -13,6 +13,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.util.*;
@@ -26,6 +27,14 @@ import java.util.*;
 @Slf4j
 @Service
 public class CtopOauthTokenServiceImpl extends ServiceImpl<CtopOauthTokenMapper, CtopOauthToken> implements ICtopOauthTokenService {
+    @Value("${bytedance.appId}")
+    private String bytedanceAppId;
+    @Value("${bytedance.secret}")
+    private String bytedanceSecret;
+    @Value("${bytedance.url.api-prefix}")
+    private String bytedanceUrlApiPrefix;
+    @Value("${bytedance.url.refresh-token}")
+    private String bytedanceUrlRefreshToken;
     @Autowired
     private CtopOauthTokenMapper ctopOauthTokenMapper;
     @Autowired
@@ -56,10 +65,10 @@ public class CtopOauthTokenServiceImpl extends ServiceImpl<CtopOauthTokenMapper,
     @Override
     public Map<String, Object> getByteDanceAccessToken(CtopOauthToken token) {
         Map<String, Object> resultMap = new HashMap<>();
-        String url = PropertiesUtils.getValue("bytedance_config", "bytedance_api_url") + "/oauth2/refresh_token";
+        String url = bytedanceUrlApiPrefix + bytedanceUrlRefreshToken;
         Map<String, Object> param = new HashMap<>();
-        param.put("app_id", PropertiesUtils.getValue("bytedance_config", "bytedance_appid"));
-        param.put("secret", PropertiesUtils.getValue("bytedance_config", "bytedance_secret"));
+        param.put("app_id", bytedanceAppId);
+        param.put("secret", bytedanceSecret);
         param.put("grant_type", "refresh_token");
         param.put("refresh_token", token.getRefreshToken());
         String result = HttpUtils.httpPostRequest(url, param, new HashMap<>());

+ 57 - 0
module-common/src/main/java/cn/com/ctop/common/module/service/impl/RuleDataAccountKuaishouServiceImpl.java

@@ -0,0 +1,57 @@
+package cn.com.ctop.common.module.service.impl;
+
+import cn.com.ctop.common.module.entity.RuleDataAccountKuaishou;
+import cn.com.ctop.common.module.entity.RuleDataTargetKuaishou;
+import cn.com.ctop.common.module.entity.RuleDatePlanKuaishou;
+import cn.com.ctop.common.module.entity.RuleDateUnitKuaishou;
+import cn.com.ctop.common.module.mapper.RuleDataAccountKuaishouMapper;
+import cn.com.ctop.common.module.mapper.RuleDataTargetKuaishouMapper;
+import cn.com.ctop.common.module.mapper.RuleDatePlanKuaishouMapper;
+import cn.com.ctop.common.module.mapper.RuleDateUnitKuaishouMapper;
+import cn.com.ctop.common.module.service.IRuleDataAccountKuaishouService;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xxl.job.core.enums.NoEn;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 快手预警数据账户维度
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-12-03
+ */
+@Service
+public class RuleDataAccountKuaishouServiceImpl extends ServiceImpl<RuleDataAccountKuaishouMapper, RuleDataAccountKuaishou> implements IRuleDataAccountKuaishouService {
+
+    @Autowired
+    private RuleDataAccountKuaishouMapper ruleDataAccountKuaishouMapper;
+    @Autowired
+    private RuleDataTargetKuaishouMapper ruleDataTargetKuaishouMapper;
+    @Autowired
+    private RuleDateUnitKuaishouMapper ruleDateUnitKuaishouMapper;
+    @Autowired
+    private RuleDatePlanKuaishouMapper ruleDatePlanKuaishouMapper;
+
+    @Override
+    public JSONObject getKuaiShouRuleDataByAccountId(Long accountId) {
+        JSONObject obj = new JSONObject();
+        Map<String, Object> map = new HashMap<>();
+        map.put("account_id", accountId);
+        map.put("status", NoEn.NO1.valueInt());
+        List<RuleDataAccountKuaishou> accountList = ruleDataAccountKuaishouMapper.selectByMap(map);
+        obj.put("account", accountList);
+        List<RuleDateUnitKuaishou> unitKuaishous = ruleDateUnitKuaishouMapper.selectByMap(map);
+        obj.put("unit", unitKuaishous);
+        List<RuleDataTargetKuaishou> targetKuaishous = ruleDataTargetKuaishouMapper.selectByMap(map);
+        obj.put("target", targetKuaishous);
+        List<RuleDatePlanKuaishou> planKuaishous = ruleDatePlanKuaishouMapper.selectByMap(map);
+        obj.put("plan", planKuaishous);
+        return obj;
+    }
+}

+ 15 - 0
module-common/src/main/java/cn/com/ctop/common/module/service/impl/RuleDataTargetKuaishouServiceImpl.java

@@ -0,0 +1,15 @@
+package cn.com.ctop.common.module.service.impl;
+
+import cn.com.ctop.common.module.entity.RuleDataTargetKuaishou;
+import cn.com.ctop.common.module.mapper.RuleDataTargetKuaishouMapper;
+import cn.com.ctop.common.module.service.IRuleDataTargetKuaishouService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * 快手预警指标数据
+ */
+@Service
+public class RuleDataTargetKuaishouServiceImpl extends ServiceImpl<RuleDataTargetKuaishouMapper, RuleDataTargetKuaishou> implements IRuleDataTargetKuaishouService {
+
+}

+ 18 - 0
module-common/src/main/java/cn/com/ctop/common/module/service/impl/RuleDataUnitKuaishouServiceImpl.java

@@ -0,0 +1,18 @@
+package cn.com.ctop.common.module.service.impl;
+
+import cn.com.ctop.common.module.entity.RuleDateUnitKuaishou;
+import cn.com.ctop.common.module.mapper.RuleDateUnitKuaishouMapper;
+import cn.com.ctop.common.module.service.IRuleDataUnitKuaishouService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * 组维度数据清洗
+ * @author jeecg-boot
+ * @date   2020-12-04
+ * @version V1.0
+ */
+@Service
+public class RuleDataUnitKuaishouServiceImpl extends ServiceImpl<RuleDateUnitKuaishouMapper, RuleDateUnitKuaishou> implements IRuleDataUnitKuaishouService {
+
+}

+ 18 - 0
module-common/src/main/java/cn/com/ctop/common/module/service/impl/RuleDatePlanKuaishouServiceImpl.java

@@ -0,0 +1,18 @@
+package cn.com.ctop.common.module.service.impl;
+
+import cn.com.ctop.common.module.entity.RuleDatePlanKuaishou;
+import cn.com.ctop.common.module.mapper.RuleDatePlanKuaishouMapper;
+import cn.com.ctop.common.module.service.IRuleDatePlanKuaishouService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * 预警快手计划数据清洗
+ * @author jeecg-boot
+ * @date   2020-12-04
+ * @version V1.0
+ */
+@Service
+public class RuleDatePlanKuaishouServiceImpl extends ServiceImpl<RuleDatePlanKuaishouMapper, RuleDatePlanKuaishou> implements IRuleDatePlanKuaishouService {
+
+}

+ 5 - 0
module-common/src/main/java/cn/com/ctop/common/module/service/impl/UserAllocationServiceImpl.java

@@ -134,4 +134,9 @@ public class UserAllocationServiceImpl extends ServiceImpl<UserAllocationMapper,
     public JSONObject getSwitchStatusByAccount(Long accountId) {
         return userAllocationMapper.getSwitchStatusByAccount(accountId);
     }
+
+    @Override
+    public List<Long> getAccountsByDeleteComment() {
+        return userAllocationMapper.queryAccountsByDeleteComment();
+    }
 }

+ 0 - 1
module-common/src/main/java/cn/com/ctop/common/module/utils/CloudVideoProcessUtil.java

@@ -1,7 +1,6 @@
 package cn.com.ctop.common.module.utils;
 
 import cn.com.ctop.common.module.constant.CosConstant;
-import cn.com.ctop.common.module.vo.StatisticCampaignVo;
 import cn.hutool.core.map.MapUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.qcloud.cos.auth.BasicCOSCredentials;

+ 0 - 5
module-common/src/main/java/cn/com/ctop/common/module/utils/CosUtils.java

@@ -306,9 +306,4 @@ public class CosUtils {
         }
         return null;
     }
-
-
-
-
-
 }

+ 4 - 0
module-common/src/main/java/cn/com/ctop/common/module/utils/KuaishouInterfaceConstant.java

@@ -309,5 +309,9 @@ public class KuaishouInterfaceConstant {
      * 屏蔽评论接口
      */
     public static final String COMMENT_SHIELD = "/rest/openapi/v1/comment/shield";
+  /**
+     * 人群分析报表
+     */
+    public static final String AUDIENCE_REPORT = "/rest/openapi/v1/report/audience_report";
 
 }

+ 7 - 0
module-common/src/main/java/cn/com/ctop/common/module/utils/RandomUtil.java

@@ -41,4 +41,11 @@ public class RandomUtil {
         return c;
     }
 
+    public static void main(String[] args) {
+        for (int i = 0; i < 1000; i++) {
+            System.err.println(verifyCodeV2());
+        }
+
+    }
+
 }

+ 5 - 5
module-crawler/src/main/java/cn/com/ctop/crawler/modules/taobao/service/impl/TaobaoJhsbybtServiceImpl.java

@@ -138,19 +138,19 @@ public class TaobaoJhsbybtServiceImpl implements TaobaoJhsbybtService {
 
     public static void main(String[] args) {
         try {
-            PrintStream out = new PrintStream("D:/bybt1102.csv");
+            PrintStream out = new PrintStream("D:/bybt1208.csv");
             System.setOut(out);
         } catch (FileNotFoundException e) {
             e.printStackTrace();
         }
+
+        Boolean hasMore = true;
         System.out.println("商品id,商品名,销量,商品logo,设计图,商品图,商品链接,正常价,,,补贴价,补贴券");
 
         TaobaoJhsbybtServiceImpl tb = new TaobaoJhsbybtServiceImpl();
-        tb.taobaoLogin("流行之道","xzy19890417");
-//        tb.taobaoLogin("m228419161","cxq121119..");
+//        tb.taobaoLogin("流行之道","xzy19890417");
+        tb.taobaoLogin("m228419161","cxq121119..");
         int i = 1;
-
-        Boolean hasMore = true;
         while (hasMore) {
             try {
                 String result = tb.getGoodsList(i);

+ 66 - 51
module-ctop/src/main/java/cn/com/ctop/manage/modules/material/service/impl/MaterialUploadImageServiceImpl.java

@@ -6,6 +6,7 @@ import cn.com.ctop.common.module.utils.Check;
 import cn.com.ctop.common.module.utils.KuaishouInterfaceConstant;
 import cn.com.ctop.common.module.utils.PropertiesUtils;
 import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouImageGet;
+import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouAdvertiserBaseInfoService;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouImageGetService;
 import cn.com.ctop.manage.modules.material.service.IMaterialUploadImageService;
 import com.alibaba.fastjson.JSONObject;
@@ -35,7 +36,7 @@ import java.util.concurrent.Executors;
 @Slf4j
 @Service
 public class MaterialUploadImageServiceImpl implements IMaterialUploadImageService {
-    static ExecutorService executorService = Executors.newFixedThreadPool(8);
+    static ExecutorService executorService = Executors.newFixedThreadPool(15);
 
     @Value("${oss.replace.download}")
     private String downloadUrl;
@@ -44,6 +45,8 @@ public class MaterialUploadImageServiceImpl implements IMaterialUploadImageServi
     private IMaterialImageInfoService materialImageInfoService;
     @Autowired
     private IKuaiShouImageGetService imageGetService;
+    @Autowired
+    private IKuaiShouAdvertiserBaseInfoService baseInfoService;
 
     /**
      * 同步素材到账号下
@@ -58,63 +61,75 @@ public class MaterialUploadImageServiceImpl implements IMaterialUploadImageServi
                     if (Check.isNull(imageInfo)) {
                         continue;
                     }
-                    executorService.submit(new Runnable() {
-                        @SneakyThrows
-                        @Override
-                        public void run() {
-                            synchronized (this) {
-                                QueryWrapper<KuaiShouImageGet> imageQueryWrapper = new QueryWrapper<>();
-                                imageQueryWrapper.eq("account_id", accountId);
-                                imageQueryWrapper.eq("signature", imageInfo.getString("signature"));
-                                List<KuaiShouImageGet> imageGetList = imageGetService.list(imageQueryWrapper);
-                                if (Check.isNull(imageGetList)) {
-                                    Map<String, String> headerMap = new HashMap<>();
-                                    JSONObject requestJson = new JSONObject();
-                                    requestJson.put("advertiser_id", accountId);
-                                    headerMap.put("Access-Token", accessToken);
-                                    headerMap.put("Content-Type", "multipart/form-data");
 
-                                    requestJson.put("url", imageInfo.getString("imageUrl"));
-                                    requestJson.put("signature", imageInfo.getString("signature"));
-                                    requestJson.put("type", "2");
-                                    requestJson.put("upload_type", "2");
-                                    String requestUrl = PropertiesUtils.getConfig("kuaishou_api_url") + KuaishouInterfaceConstant.IMAGE_UPLOAD;
-                                    String result = exceptInfoForRestTemplate(requestUrl, requestJson, headerMap);
-                                    JSONObject resultJson = JSONObject.parseObject(result);
-                                    if (!Check.isNull(resultJson)) {
-                                        if (resultJson.getInteger("code") == 0) {
-                                            JSONObject dataJson = resultJson.getJSONObject("data");
-                                            if (!Check.isNull(dataJson)) {
-                                                String signature = dataJson.getString("signature");
-                                                String image_token = dataJson.getString("image_token");
-                                                KuaiShouImageGet imageGet = new KuaiShouImageGet();
-                                                imageGet.setId(accountId + image_token);
-                                                imageGet.setAccountId(accountId);
-                                                imageGet.setUrl(dataJson.getString("url"));
-                                                imageGet.setWidth(dataJson.getInteger("width"));
-                                                imageGet.setHeight(dataJson.getInteger("height"));
-                                                imageGet.setSize(dataJson.getInteger("size"));
-                                                imageGet.setFormat(dataJson.getString("format"));
-                                                Integer type = MaterialEnum.getTypeBySize(dataJson.getInteger("width"), dataJson.getInteger("height"));
-                                                if (!Check.isNull(type)) {
-                                                    imageGet.setMaterialType(type);
+                    List<Long> accountList = baseInfoService.getAccountListByAccountId(accountId);
+                    if (Check.isNull(accountList)) {
+                        return;
+                    }
+
+                    for (int j = 0; j < accountList.size(); j++) {
+                        Long imageAccountId = accountList.get(j);
+                        if (Check.isNull(imageAccountId)) {
+                            continue;
+                        }
+                        executorService.submit(new Runnable() {
+                            @SneakyThrows
+                            @Override
+                            public void run() {
+                                synchronized (this) {
+                                    QueryWrapper<KuaiShouImageGet> imageQueryWrapper = new QueryWrapper<>();
+                                    imageQueryWrapper.eq("account_id", imageAccountId);
+                                    imageQueryWrapper.eq("signature", imageInfo.getString("signature"));
+                                    List<KuaiShouImageGet> imageGetList = imageGetService.list(imageQueryWrapper);
+                                    if (Check.isNull(imageGetList)) {
+                                        Map<String, String> headerMap = new HashMap<>();
+                                        JSONObject requestJson = new JSONObject();
+                                        requestJson.put("advertiser_id", imageAccountId);
+                                        headerMap.put("Access-Token", accessToken);
+                                        headerMap.put("Content-Type", "multipart/form-data");
+
+                                        requestJson.put("url", imageInfo.getString("imageUrl"));
+                                        requestJson.put("signature", imageInfo.getString("signature"));
+                                        requestJson.put("type", "2");
+                                        requestJson.put("upload_type", "2");
+                                        String requestUrl = PropertiesUtils.getConfig("kuaishou_api_url") + KuaishouInterfaceConstant.IMAGE_UPLOAD;
+                                        String result = exceptInfoForRestTemplate(requestUrl, requestJson, headerMap);
+                                        JSONObject resultJson = JSONObject.parseObject(result);
+                                        if (!Check.isNull(resultJson)) {
+                                            if (resultJson.getInteger("code") == 0) {
+                                                JSONObject dataJson = resultJson.getJSONObject("data");
+                                                if (!Check.isNull(dataJson)) {
+                                                    String signature = dataJson.getString("signature");
+                                                    String image_token = dataJson.getString("image_token");
+                                                    KuaiShouImageGet imageGet = new KuaiShouImageGet();
+                                                    imageGet.setId(imageAccountId + image_token);
+                                                    imageGet.setAccountId(imageAccountId);
+                                                    imageGet.setUrl(dataJson.getString("url"));
+                                                    imageGet.setWidth(dataJson.getInteger("width"));
+                                                    imageGet.setHeight(dataJson.getInteger("height"));
+                                                    imageGet.setSize(dataJson.getInteger("size"));
+                                                    imageGet.setFormat(dataJson.getString("format"));
+                                                    Integer type = MaterialEnum.getTypeBySize(dataJson.getInteger("width"), dataJson.getInteger("height"));
+                                                    if (!Check.isNull(type)) {
+                                                        imageGet.setMaterialType(type);
+                                                    }
+                                                    String nowDate = DateUtils.getNowDate("yyyy-MM-dd");
+                                                    imageGet.setStatDate(DateUtils.parseDate(nowDate, "yyyy-MM-dd"));
+                                                    imageGet.setSignature(signature);
+                                                    imageGet.setImageToken(image_token);
+                                                    imageGetService.saveOrUpdate(imageGet);
                                                 }
-                                                String nowDate = DateUtils.getNowDate("yyyy-MM-dd");
-                                                imageGet.setStatDate(DateUtils.parseDate(nowDate, "yyyy-MM-dd"));
-                                                imageGet.setSignature(signature);
-                                                imageGet.setImageToken(image_token);
-                                                imageGetService.saveOrUpdate(imageGet);
+                                                log.info("快手封面素材素材同步完成,accountId:{},code:{},返回信息:{}", imageAccountId, imageInfo.getString("signature"), resultJson);
+                                            } else {
+                                                log.error("快手同步封面素材失败,返回信息:{},请求参数:{}", resultJson, requestJson);
                                             }
-                                            log.info("快手封面素材素材同步完成,accountId:{},code:{},返回信息:{}", accountId, imageInfo.getString("signature"), resultJson);
-                                        } else {
-                                            log.error("快手同步封面素材失败,返回信息:{},请求参数:{}", resultJson, requestJson);
                                         }
                                     }
-                                }
 
+                                }
                             }
-                        }
-                    });
+                        });
+                    }
                 }
             }
         } catch (Exception e) {

+ 6 - 0
module-job-bytedance/pom.xml

@@ -231,5 +231,11 @@
                 <activatedProperties>prod</activatedProperties>
             </properties>
         </profile>
+        <profile>
+            <id>jiaoyang</id>
+            <properties>
+                <activatedProperties>jiaoyang</activatedProperties>
+            </properties>
+        </profile>
     </profiles>
 </project>

+ 16 - 1
module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/ByteDancePlanRuleDataJob.java

@@ -2,6 +2,8 @@ package cn.com.ctop.job.bytedance.handler;
 
 import cn.com.ctop.common.module.entity.CtopOauthToken;
 import cn.com.ctop.common.module.service.ICtopOauthTokenService;
+import cn.com.ctop.common.module.service.IRuleDataPlanService;
+import cn.com.ctop.common.module.service.IRuleDataTargetService;
 import cn.com.ctop.common.module.utils.CtopAdConstant;
 import cn.com.ctop.toutiao.modules.report.service.IReportService;
 import com.xxl.job.core.handler.annotation.XxlJob;
@@ -9,7 +11,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
@@ -19,11 +23,22 @@ public class ByteDancePlanRuleDataJob {
     private ICtopOauthTokenService tokenService;
     @Autowired
     private IReportService reportService;
+    @Autowired
+    private IRuleDataPlanService ruleDataPlanService;
+    @Autowired
+    private IRuleDataTargetService ruleDataTargetService;
     private ExecutorService executorService = Executors.newFixedThreadPool(10);
     @XxlJob("bytedancePlanRuleLoadJob")
     public void execute() throws Exception {
         Date date = new Date();
         List<CtopOauthToken> tokens = tokenService.selectToutiaoToken();
-        tokens.forEach(token -> executorService.submit(()->reportService.getAdvertiserPlanRuleData(token,date,date,CtopAdConstant.BYTEDANCE_REPORT_TYPE_DAILY)));
+        tokens.forEach(token -> executorService.submit(()->{
+            //1:删除历史数据
+            Map<String,Object> params = new HashMap<>();
+            params.put("account_id",token.getAccountId());
+            ruleDataPlanService.removeByMap(params);
+            ruleDataTargetService.removeByMap(params);
+            reportService.getAdvertiserPlanRuleData(token,date,date, CtopAdConstant.BYTEDANCE_REPORT_TYPE_DAILY);
+        }));
     }
 }

+ 8 - 5
module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/RuleDataAccountCleanJob.java

@@ -12,25 +12,28 @@ import com.xxl.job.core.handler.annotation.XxlJob;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
 @Component
 public class RuleDataAccountCleanJob {
-
     @Autowired
     private ICtopOauthTokenService oauthTokenService;
-
     @Autowired
     private IRuleByteDanceAccountService ruleByteDanceAccountService;
-
     private ExecutorService executorService = Executors.newFixedThreadPool(10);
-
     @XxlJob("ruleDataAccountCleanJob")
     public void execute() throws Exception {
         XxlJobHelper.log("规则预警账户维度数据开始清洗");
         List<CtopOauthToken> tokens = oauthTokenService.selectToutiaoToken();
-        tokens.forEach(token -> executorService.submit(()->ruleByteDanceAccountService.cleanRuleDataAccount(token.getAccountId())));
+        tokens.forEach(token -> executorService.submit(()->{
+            Map<String,Object> params = new HashMap<>();
+            params.put("account_id",token.getAccountId());
+            ruleByteDanceAccountService.removeByMap(params);
+            ruleByteDanceAccountService.cleanRuleDataAccount(token.getAccountId());
+        }));
     }
 }

+ 50 - 1
module-job-bytedance/src/main/resources/application-dev.yml

@@ -136,6 +136,21 @@ jeecg:
     report-history: D://report//history//
     report-daily: D://report//daily//
 kuaishou:
+  api-url: https://ad.e.kuaishou.com
+  auth-url: https://ad.e.kuaishou.com
+  appid: 27
+  third-appid: 328
+  oauth-type: agent
+  secret: QovprB1tNhXptgDc
+  third-secret: 1iFTBiMdohkyEQQs
+  callback-url: http://adsp.c-top.com.cn:8080/jeecg-boot/kuaishou
+  third-callback-url: http://callback.shyouteng.com.cn/kuaishou
+  apk-sava-path: /mnt/file/apk
+  image-sava-path: /mnt/file/image
+  video-sava-path: /mnt/file/video
+  model-video-src-path: /mnt/data/src/
+  model-video-fill-path: /mnt/data/fill/
+  model-video-final-path: /mnt/data/final/
   group-control:
     path: http://39.106.184.70
     port: 4723
@@ -146,12 +161,46 @@ logging:
 chrome:
   script:
     clean: sh /mnt/webapp/cleanProcess.sh
-
 oss:
   replace:
     replace-value: oss-cn-beijing
     replace-old-value: oss-cn-beijing
     download: D:\mnt\file\video
+bytedance:
+  appId: 1635316529903624
+  secret: 0c51523e90d6166418fc8421a4896808e90e26f4
+  url:
+    auth-prefix: https://ad.oceanengine.com/openapi
+    api-prefix: https://ad.oceanengine.com/open_api
+    callback-url: http://adsp.c-top.com.cn:8080/jeecg-boot/bytedance
+    refresh-token: /oauth2/refresh_token
+    advertiser-info: /2/advertiser/public_info/
+    ad-get: /2/ad/get/
+    ad-create: /2/ad/create/
+    ad-update: /2/ad/update/
+    ad-update-status: /2/ad/update/status/
+    ad-update-bid: /2/ad/update/bid/
+    ad-update-budget: /2/ad/update/budget/
+    ad-update-reject-reason: 2/ad/reject_reason/
+    campaign-get: /2/campaign/get/
+    campaign-create: /2/campaign/create/
+    campaign-update-status: /2/campaign/update/status/
+    campaign-update: /2/campaign/update/
+    dmp-custom-audience-select: /2/dmp/custom_audience/select/
+    file-video-ad: /2/file/video/ad/
+    file-image-ad: /2/file/image/ad/
+    creative-update-status: /2/creative/update/status/
+    creative-material-get: /2/creative/material/read/
+    creative-create-v2: /2/creative/create_v2/
+    creative-get: /2/creative/get/
+    creative-read: /2/creative/read_v2/
+    creative-update: /2/creative/update_v2/
+    creative-reject-reason: /2/creative/reject_reason/
+    advertiser-report-get: /2/report/advertiser/get/
+    campaign-report-get: /2/report/campaign/get/
+    ad-report-get: /2/report/ad/get/
+    ad-creative-get: /2/report/creative/get/
+    advertiser-fund-daily-stat: /2/advertiser/fund/daily_stat/
 xxl:
   job:
     accessToken:

+ 50 - 0
module-job-bytedance/src/main/resources/application-jiaoyang.yml

@@ -151,6 +151,21 @@ jeecg:
     kuaishou-agent-image: /data/upload/image/temp.png
     kuaishou-account-captcha-image: /data/upload/image/captcha.png
 kuaishou:
+  api-url: https://ad.e.kuaishou.com
+  auth-url: https://ad.e.kuaishou.com
+  appid: 27
+  third-appid: 328
+  oauth-type: agent
+  secret: QovprB1tNhXptgDc
+  third-secret: 1iFTBiMdohkyEQQs
+  callback-url: http://adsp.c-top.com.cn:8080/jeecg-boot/kuaishou
+  third-callback-url: http://callback.shyouteng.com.cn/kuaishou
+  apk-sava-path: /mnt/file/apk
+  image-sava-path: /mnt/file/image
+  video-sava-path: /mnt/file/video
+  model-video-src-path: /mnt/data/src/
+  model-video-fill-path: /mnt/data/fill/
+  model-video-final-path: /mnt/data/final/
   group-control:
     path: http://39.106.184.70
     port: 4723
@@ -166,6 +181,41 @@ oss:
     replace-value: oss-cn-beijing-internal
     replace-old-value: oss-cn-beijing
     download: /data/file/video/
+bytedance:
+  appId: 1635316529903624
+  secret: 0c51523e90d6166418fc8421a4896808e90e26f4
+  url:
+    auth-prefix: https://ad.oceanengine.com/openapi
+    api-prefix: https://ad.oceanengine.com/open_api
+    callback-url: http://adsp.c-top.com.cn:8080/jeecg-boot/bytedance
+    refresh-token: /oauth2/refresh_token
+    advertiser-info: /2/advertiser/public_info/
+    ad-get: /2/ad/get/
+    ad-create: /2/ad/create/
+    ad-update: /2/ad/update/
+    ad-update-status: /2/ad/update/status/
+    ad-update-bid: /2/ad/update/bid/
+    ad-update-budget: /2/ad/update/budget/
+    ad-update-reject-reason: 2/ad/reject_reason/
+    campaign-get: /2/campaign/get/
+    campaign-create: /2/campaign/create/
+    campaign-update-status: /2/campaign/update/status/
+    campaign-update: /2/campaign/update/
+    dmp-custom-audience-select: /2/dmp/custom_audience/select/
+    file-video-ad: /2/file/video/ad/
+    file-image-ad: /2/file/image/ad/
+    creative-update-status: /2/creative/update/status/
+    creative-material-get: /2/creative/material/read/
+    creative-create-v2: /2/creative/create_v2/
+    creative-get: /2/creative/get/
+    creative-read: /2/creative/read_v2/
+    creative-update: /2/creative/update_v2/
+    creative-reject-reason: /2/creative/reject_reason/
+    advertiser-report-get: /2/report/advertiser/get/
+    campaign-report-get: /2/report/campaign/get/
+    ad-report-get: /2/report/ad/get/
+    ad-creative-get: /2/report/creative/get/
+    advertiser-fund-daily-stat: /2/advertiser/fund/daily_stat/
 xxl:
   job:
     accessToken:

+ 61 - 1
module-job-bytedance/src/main/resources/application-prod.yml

@@ -151,6 +151,21 @@ jeecg:
     kuaishou-agent-image: /data/upload/image/temp.png
     kuaishou-account-captcha-image: /data/upload/image/captcha.png
 kuaishou:
+  api-url: https://ad.e.kuaishou.com
+  auth-url: https://ad.e.kuaishou.com
+  appid: 27
+  third-appid: 328
+  oauth-type: agent
+  secret: QovprB1tNhXptgDc
+  third-secret: 1iFTBiMdohkyEQQs
+  callback-url: http://adsp.c-top.com.cn:8080/jeecg-boot/kuaishou
+  third-callback-url: http://callback.shyouteng.com.cn/kuaishou
+  apk-sava-path: /mnt/file/apk
+  image-sava-path: /mnt/file/image
+  video-sava-path: /mnt/file/video
+  model-video-src-path: /mnt/data/src/
+  model-video-fill-path: /mnt/data/fill/
+  model-video-final-path: /mnt/data/final/
   group-control:
     path: http://39.106.184.70
     port: 4723
@@ -161,9 +176,54 @@ logging:
 chrome:
   script:
     clean: sh /data/webapp/cleanProcess.sh
-
 oss:
   replace:
     replace-value: oss-cn-beijing-internal
     replace-old-value: oss-cn-beijing
     download: /data/file/video/
+bytedance:
+  appId: 1635316529903624
+  secret: 0c51523e90d6166418fc8421a4896808e90e26f4
+  url:
+    auth-prefix: https://ad.oceanengine.com/openapi
+    api-prefix: https://ad.oceanengine.com/open_api
+    callback-url: http://adsp.c-top.com.cn:8080/jeecg-boot/bytedance
+    refresh-token: /oauth2/refresh_token
+    advertiser-info: /2/advertiser/public_info/
+    ad-get: /2/ad/get/
+    ad-create: /2/ad/create/
+    ad-update: /2/ad/update/
+    ad-update-status: /2/ad/update/status/
+    ad-update-bid: /2/ad/update/bid/
+    ad-update-budget: /2/ad/update/budget/
+    ad-update-reject-reason: 2/ad/reject_reason/
+    campaign-get: /2/campaign/get/
+    campaign-create: /2/campaign/create/
+    campaign-update-status: /2/campaign/update/status/
+    campaign-update: /2/campaign/update/
+    dmp-custom-audience-select: /2/dmp/custom_audience/select/
+    file-video-ad: /2/file/video/ad/
+    file-image-ad: /2/file/image/ad/
+    creative-update-status: /2/creative/update/status/
+    creative-material-get: /2/creative/material/read/
+    creative-create-v2: /2/creative/create_v2/
+    creative-get: /2/creative/get/
+    creative-read: /2/creative/read_v2/
+    creative-update: /2/creative/update_v2/
+    creative-reject-reason: /2/creative/reject_reason/
+    advertiser-report-get: /2/report/advertiser/get/
+    campaign-report-get: /2/report/campaign/get/
+    ad-report-get: /2/report/ad/get/
+    ad-creative-get: /2/report/creative/get/
+    advertiser-fund-daily-stat: /2/advertiser/fund/daily_stat/
+xxl:
+  job:
+    accessToken:
+    executor:
+      appname: module-job-bytedance
+      port: 9998
+      ip:
+      logpath: /data/applogs/xxl-job/jobhandler
+      logretentiondays: 30
+    admin:
+      addresses: http://139.186.29.76:8090/xxl-job-admin

+ 51 - 1
module-job-bytedance/src/main/resources/application-test.yml

@@ -160,8 +160,23 @@ jeecg:
     report-history: /data/report/history/
     report-daily: /data/report/daily/
 kuaishou:
+  api-url: https://ad.e.kuaishou.com
+  auth-url: https://ad.e.kuaishou.com
+  appid: 27
+  third-appid: 328
+  oauth-type: agent
+  secret: QovprB1tNhXptgDc
+  third-secret: 1iFTBiMdohkyEQQs
+  callback-url: http://adsp.c-top.com.cn:8080/jeecg-boot/kuaishou
+  third-callback-url: http://callback.shyouteng.com.cn/kuaishou
+  apk-sava-path: /mnt/file/apk
+  image-sava-path: /mnt/file/image
+  video-sava-path: /mnt/file/video
+  model-video-src-path: /mnt/data/src/
+  model-video-fill-path: /mnt/data/fill/
+  model-video-final-path: /mnt/data/final/
   group-control:
-    path: http://127.0.0.1
+    path: http://39.106.184.70
     port: 4723
 logging:
   level:
@@ -175,6 +190,41 @@ oss:
     replace-value: oss-cn-beijing-internal
     replace-old-value: oss-cn-beijing
     download: /mnt/file/video/
+bytedance:
+  appId: 1635316529903624
+  secret: 0c51523e90d6166418fc8421a4896808e90e26f4
+  url:
+    auth-prefix: https://ad.oceanengine.com/openapi
+    api-prefix: https://ad.oceanengine.com/open_api
+    callback-url: http://adsp.c-top.com.cn:8080/jeecg-boot/bytedance
+    refresh-token: /oauth2/refresh_token
+    advertiser-info: /2/advertiser/public_info/
+    ad-get: /2/ad/get/
+    ad-create: /2/ad/create/
+    ad-update: /2/ad/update/
+    ad-update-status: /2/ad/update/status/
+    ad-update-bid: /2/ad/update/bid/
+    ad-update-budget: /2/ad/update/budget/
+    ad-update-reject-reason: 2/ad/reject_reason/
+    campaign-get: /2/campaign/get/
+    campaign-create: /2/campaign/create/
+    campaign-update-status: /2/campaign/update/status/
+    campaign-update: /2/campaign/update/
+    dmp-custom-audience-select: /2/dmp/custom_audience/select/
+    file-video-ad: /2/file/video/ad/
+    file-image-ad: /2/file/image/ad/
+    creative-update-status: /2/creative/update/status/
+    creative-material-get: /2/creative/material/read/
+    creative-create-v2: /2/creative/create_v2/
+    creative-get: /2/creative/get/
+    creative-read: /2/creative/read_v2/
+    creative-update: /2/creative/update_v2/
+    creative-reject-reason: /2/creative/reject_reason/
+    advertiser-report-get: /2/report/advertiser/get/
+    campaign-report-get: /2/report/campaign/get/
+    ad-report-get: /2/report/ad/get/
+    ad-creative-get: /2/report/creative/get/
+    advertiser-fund-daily-stat: /2/advertiser/fund/daily_stat/
 xxl:
   job:
     accessToken:

+ 6 - 0
module-job-kuaishou/pom.xml

@@ -215,5 +215,11 @@
                 <activatedProperties>prod</activatedProperties>
             </properties>
         </profile>
+        <profile>
+            <id>jiaoyang</id>
+            <properties>
+                <activatedProperties>jiaoyang</activatedProperties>
+            </properties>
+        </profile>
     </profiles>
 </project>

+ 53 - 0
module-job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/handler/KuaiShouDeleteCommentJob.java

@@ -0,0 +1,53 @@
+package cn.com.ctop.job.kuaishou.handler;
+
+import cn.com.ctop.common.module.service.IUserAllocationService;
+import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouCommentService;
+import com.xxl.job.core.context.XxlJobHelper;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+@Component
+public class KuaiShouDeleteCommentJob {
+
+    @Autowired
+    private IUserAllocationService allocationService;
+
+    @Autowired
+    private IKuaiShouCommentService kuaiShouCommentService;
+
+    static ExecutorService executorService = Executors.newFixedThreadPool(10);
+
+    static CountDownLatch countDownLatch = null;
+
+    @XxlJob("kuaiShouDeleteCommentJob")
+    public void kuaiShouDeleteComment(){
+        Long start = System.currentTimeMillis();
+        //查询需要删除的账户
+        List<Long> accountIds = allocationService.getAccountsByDeleteComment();
+        if (!accountIds.isEmpty()) {
+            countDownLatch = new CountDownLatch(accountIds.size());
+            accountIds.forEach(accountId -> executorService.submit(() -> {
+                try {
+                    kuaiShouCommentService.shieldComment(accountId);
+                } catch (Exception e) {
+                    XxlJobHelper.log(e.getMessage(), e);
+                } finally {
+                    countDownLatch.countDown();
+                }
+            }));
+            try {
+                countDownLatch.await();
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+            Long end = System.currentTimeMillis();
+            XxlJobHelper.log("快手删评论所用时长:{}毫秒", end - start);
+        }
+    }
+}

+ 69 - 0
module-job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/handler/KuaishouDailyAudienceReportJob.java

@@ -0,0 +1,69 @@
+package cn.com.ctop.job.kuaishou.handler;
+
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.service.ICtopOauthTokenService;
+import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouGroup;
+import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouCampaignService;
+import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouGroupService;
+import cn.com.ctop.kuaishou.modules.report.service.IKuaishouAudienceReportDailyService;
+import com.xxl.job.core.context.XxlJobHelper;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import org.jeecg.common.util.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+/**
+ * 快手广告主分天数据
+ *
+ * @author syh
+ */
+@Component
+public class KuaishouDailyAudienceReportJob {
+    @Autowired
+    private ICtopOauthTokenService tokenService;
+    @Autowired
+    private IKuaishouAudienceReportDailyService kuaishouAudienceReportDailyService;
+    @Autowired
+    private IKuaiShouCampaignService kuaiShouCampaignService;
+    @Autowired
+    private IKuaiShouGroupService kuaiShouGroupService;
+
+    static ExecutorService executorService = Executors.newFixedThreadPool(6);
+
+    @XxlJob("kuaishouDailyAudienceReportJob")
+    public void execute() throws Exception {
+        //查询两天前数据  策略
+        String date = DateUtils.getLastDay(DateUtils.date2Str(), 2);
+        List<CtopOauthToken> tokens = tokenService.selectKuaiShouToken();
+        if (null == tokens || tokens.isEmpty()) {
+            XxlJobHelper.log("定时获取人群分析报表数据异常:未获取到可用的token");
+            XxlJobHelper.handleFail();
+            return;
+        }
+        int page = 1;
+        int pageSize = 2000;
+        tokens.forEach(token -> executorService.submit(() -> {
+            getAudienceReportData(token, date, "province", page, pageSize);
+            getAudienceReportData(token, date, "city", page, pageSize);
+            getAudienceReportData(token, date, "gender", page, pageSize);
+            getAudienceReportData(token, date, "ageSegment", page, pageSize);
+            getAudienceReportData(token, date, "clientId", page, pageSize);
+            getAudienceReportData(token, date, "businessInterestTags", page, pageSize);
+        }));
+    }
+
+    private void getAudienceReportData(CtopOauthToken token, String date, String type, Integer page, Integer pageSize) {
+        try {
+            List<KuaiShouGroup> kuaiShouGroups = kuaiShouGroupService.queryUnitInfoByAccountId(token.getAccountId());
+            for (KuaiShouGroup kuaiShouGroup : kuaiShouGroups) {
+                kuaishouAudienceReportDailyService.crowdAnalysisReport(token, date, type, kuaiShouGroup.getCampaignId(), kuaiShouGroup.getUnitId(), page, pageSize);
+            }
+        } catch (Exception e) {
+            XxlJobHelper.log("定时获取人群分析报表数据异常", e);
+        }
+    }
+}

+ 38 - 0
module-job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/handler/RuleKuaiShouDataAccountCleanJob.java

@@ -0,0 +1,38 @@
+package cn.com.ctop.job.kuaishou.handler;
+
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.service.ICtopOauthTokenService;
+import cn.com.ctop.kuaishou.modules.report.service.IRuleKuaiShouAccountService;
+import com.xxl.job.core.context.XxlJobHelper;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+@Component
+public class RuleKuaiShouDataAccountCleanJob {
+    @Autowired
+    private ICtopOauthTokenService oauthTokenService;
+
+    @Autowired
+    private IRuleKuaiShouAccountService ruleKuaiShouAccountService;
+
+    private ExecutorService executorService = Executors.newFixedThreadPool(10);
+
+    @XxlJob("ruleKuaiShouDataAccountCleanJob")
+    public void execute() throws Exception {
+        XxlJobHelper.log("规则预警账户维度数据开始清洗");
+        List<CtopOauthToken> tokens = oauthTokenService.selectKuaiShouToken();
+        tokens.forEach(token -> executorService.submit(()->{
+            Map<String,Object> params = new HashMap<>();
+            params.put("account_id",token.getAccountId());
+            ruleKuaiShouAccountService.removeByMap(params);
+            ruleKuaiShouAccountService.cleanRuleDataAccount(token.getAccountId());
+        }));
+    }
+}

+ 36 - 0
module-job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/handler/RuleKuaiShouDataPlanCleanJob.java

@@ -0,0 +1,36 @@
+package cn.com.ctop.job.kuaishou.handler;
+
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.service.ICtopOauthTokenService;
+import cn.com.ctop.kuaishou.modules.report.service.IRuleKuaiShouPlanService;
+import com.xxl.job.core.context.XxlJobHelper;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+@Component
+public class RuleKuaiShouDataPlanCleanJob {
+    @Autowired
+    private ICtopOauthTokenService oauthTokenService;
+    @Autowired
+    private IRuleKuaiShouPlanService ruleKuaiShouPlanService;
+    private ExecutorService executorService = Executors.newFixedThreadPool(10);
+
+    @XxlJob("ruleKuaiShouDataPlanCleanJob")
+    public void execute() throws Exception {
+        XxlJobHelper.log("规则预警计划维度数据开始清洗");
+        List<CtopOauthToken> tokens = oauthTokenService.selectKuaiShouToken();
+        tokens.forEach(token -> executorService.submit(()->{
+            Map<String,Object> params = new HashMap<>();
+            params.put("account_id",token.getAccountId());
+            ruleKuaiShouPlanService.removeByMap(params);
+            ruleKuaiShouPlanService.cleanRuleDataPlan(token.getAccountId(),1);
+        }));
+    }
+}

+ 40 - 0
module-job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/handler/RuleKuaiShouDataTargetCleanJob.java

@@ -0,0 +1,40 @@
+package cn.com.ctop.job.kuaishou.handler;
+
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.service.ICtopOauthTokenService;
+import cn.com.ctop.common.module.service.IRuleDataTargetKuaishouService;
+import cn.com.ctop.kuaishou.modules.report.service.IRuleKuaiShouPlanService;
+import com.xxl.job.core.context.XxlJobHelper;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+@Component
+public class RuleKuaiShouDataTargetCleanJob {
+    @Autowired
+    private ICtopOauthTokenService oauthTokenService;
+    @Autowired
+    private IRuleKuaiShouPlanService ruleKuaiShouPlanService;
+    @Autowired
+    private IRuleDataTargetKuaishouService ruleDataTargetKuaishouService;
+    private ExecutorService executorService = Executors.newFixedThreadPool(10);
+
+    @XxlJob("ruleKuaiShouDataTargetCleanJob")
+    public void execute() throws Exception {
+        XxlJobHelper.log("规则预警定向维度数据开始清洗");
+        List<CtopOauthToken> tokens = oauthTokenService.selectKuaiShouToken();
+        tokens.forEach(token -> executorService.submit(() ->{
+            Map<String,Object>params = new HashMap<>();
+            params.put("account_id",token.getAccountId());
+            ruleDataTargetKuaishouService.removeByMap(params);
+            ruleKuaiShouPlanService.cleanRuleDataTarget(token.getAccountId(), 1);
+        }));
+    }
+
+}

+ 42 - 0
module-job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/handler/RuleKuaiShouDataUnitCleanJob.java

@@ -0,0 +1,42 @@
+package cn.com.ctop.job.kuaishou.handler;
+
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.service.ICtopOauthTokenService;
+import cn.com.ctop.common.module.service.IRuleDataUnitKuaishouService;
+import cn.com.ctop.kuaishou.modules.report.service.IRuleKuaiShouPlanService;
+import com.xxl.job.core.context.XxlJobHelper;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import org.jeecg.common.util.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+@Component
+public class RuleKuaiShouDataUnitCleanJob {
+    @Autowired
+    private ICtopOauthTokenService oauthTokenService;
+
+    @Autowired
+    private IRuleKuaiShouPlanService ruleKuaiShouPlanService;
+    @Autowired
+    private IRuleDataUnitKuaishouService ruleDataUnitKuaishouService;
+
+    private ExecutorService executorService = Executors.newFixedThreadPool(10);
+
+    @XxlJob("ruleKuaiShouDataUnitCleanJob")
+    public void execute() throws Exception {
+        XxlJobHelper.log("规则预警组维度数据开始清洗");
+        List<CtopOauthToken> tokens = oauthTokenService.selectKuaiShouToken();
+        tokens.forEach(token -> executorService.submit(() -> {
+            Map<String,Object>params = new HashMap<>();
+            params.put("account_id",token.getAccountId());
+            ruleDataUnitKuaishouService.removeByMap(params);
+            ruleKuaiShouPlanService.cleanRuleDataUnit(token.getAccountId(), DateUtils.date2Str(), DateUtils.date2Str(), 1);
+        }));
+    }
+
+}

+ 50 - 0
module-job-kuaishou/src/main/resources/application-dev.yml

@@ -118,6 +118,21 @@ jeecg:
     report-history: D://report//history//
     report-daily: D://report//daily//
 kuaishou:
+  api-url: https://ad.e.kuaishou.com
+  auth-url: https://ad.e.kuaishou.com
+  appid: 27
+  third-appid: 328
+  oauth-type: agent
+  secret: QovprB1tNhXptgDc
+  third-secret: 1iFTBiMdohkyEQQs
+  callback-url: http://adsp.c-top.com.cn:8080/jeecg-boot/kuaishou
+  third-callback-url: http://callback.shyouteng.com.cn/kuaishou
+  apk-sava-path: /mnt/file/apk
+  image-sava-path: /mnt/file/image
+  video-sava-path: /mnt/file/video
+  model-video-src-path: /mnt/data/src/
+  model-video-fill-path: /mnt/data/fill/
+  model-video-final-path: /mnt/data/final/
   group-control:
     path: http://39.106.184.70
     port: 4723
@@ -133,6 +148,41 @@ oss:
     replace-value: oss-cn-beijing
     replace-old-value: oss-cn-beijing
     download: D:\mnt\file\video
+bytedance:
+  appId: 1635316529903624
+  secret: 0c51523e90d6166418fc8421a4896808e90e26f4
+  url:
+    auth-prefix: https://ad.oceanengine.com/openapi
+    api-prefix: https://ad.oceanengine.com/open_api
+    callback-url: http://adsp.c-top.com.cn:8080/jeecg-boot/bytedance
+    refresh-token: /oauth2/refresh_token
+    advertiser-info: /2/advertiser/public_info/
+    ad-get: /2/ad/get/
+    ad-create: /2/ad/create/
+    ad-update: /2/ad/update/
+    ad-update-status: /2/ad/update/status/
+    ad-update-bid: /2/ad/update/bid/
+    ad-update-budget: /2/ad/update/budget/
+    ad-update-reject-reason: 2/ad/reject_reason/
+    campaign-get: /2/campaign/get/
+    campaign-create: /2/campaign/create/
+    campaign-update-status: /2/campaign/update/status/
+    campaign-update: /2/campaign/update/
+    dmp-custom-audience-select: /2/dmp/custom_audience/select/
+    file-video-ad: /2/file/video/ad/
+    file-image-ad: /2/file/image/ad/
+    creative-update-status: /2/creative/update/status/
+    creative-material-get: /2/creative/material/read/
+    creative-create-v2: /2/creative/create_v2/
+    creative-get: /2/creative/get/
+    creative-read: /2/creative/read_v2/
+    creative-update: /2/creative/update_v2/
+    creative-reject-reason: /2/creative/reject_reason/
+    advertiser-report-get: /2/report/advertiser/get/
+    campaign-report-get: /2/report/campaign/get/
+    ad-report-get: /2/report/ad/get/
+    ad-creative-get: /2/report/creative/get/
+    advertiser-fund-daily-stat: /2/advertiser/fund/daily_stat/
 xxl:
   job:
     accessToken:

+ 230 - 0
module-job-kuaishou/src/main/resources/application-jiaoyang.yml

@@ -0,0 +1,230 @@
+management:
+  endpoints:
+    web:
+      exposure:
+        include: metrics,httptrace
+spring:
+  servlet:
+    multipart:
+      max-file-size: -1
+      max-request-size: -1
+  mail:
+    host: smtp.163.com
+    username: jeecgos@163.com
+    password: ??
+    properties:
+      mail:
+        smtp:
+          auth: true
+          starttls:
+            enable: true
+            required: true
+  #json 时间戳统一转换
+  jackson:
+    date-format:   yyyy-MM-dd HH:mm:ss
+    time-zone:   GMT+8
+  aop:
+    proxy-target-class: true
+  #配置freemarker
+  freemarker:
+    # 设置模板后缀名
+    suffix: .ftl
+    # 设置文档类型
+    content-type: text/html
+    # 设置页面编码格式
+    charset: UTF-8
+    # 设置页面缓存
+    cache: false
+    prefer-file-system-access: false
+    # 设置ftl文件路径
+    template-loader-path:
+      - classpath:/templates
+  # 设置静态文件路径,js,css等
+  mvc:
+    static-path-pattern: /**
+  resource:
+    static-locations: classpath:/static/,classpath:/public/
+  autoconfigure:
+    exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
+  datasource:
+    url: jdbc:mysql://172.30.0.4:4000/jiaoyang?characterEncoding=UTF-8&useUnicode=true&useSSL=false
+    username: hcst
+    password: hcst@2020
+    driver-class-name: com.mysql.jdbc.Driver
+    druid:
+      stat-view-servlet:
+        loginUsername: admin
+        loginPassword: hcst2016
+        enabled: true
+      web-stat-filter:
+        enabled: true
+    #      remove-abandoned: false
+    dynamic:
+      druid: # 全局druid参数,绝大部分值和默认保持一致。(现已支持的参数如下,不清楚含义不要乱设置)
+        # 连接池的配置信息
+        # 初始化大小,最小,最大
+        connection-init-sql: set names utf8mb4
+        initial-size: 5
+        min-idle: 5
+        maxActive: 20
+        # 配置获取连接等待超时的时间
+        maxWait: 60000
+        # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+        timeBetweenEvictionRunsMillis: 60000
+        # 配置一个连接在池中最小生存的时间,单位是毫秒
+        minEvictableIdleTimeMillis: 300000
+        validationQuery: SELECT 1 FROM DUAL
+        testWhileIdle: true
+        testOnBorrow: false
+        testOnReturn: false
+        # 打开PSCache,并且指定每个连接上PSCache的大小
+        poolPreparedStatements: true
+        maxPoolPreparedStatementPerConnectionSize: 20
+        # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
+        filters: stat,slf4j
+        # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
+        connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
+      datasource:
+        master:
+          url: jdbc:mysql://172.30.0.4:4000/jiaoyang?characterEncoding=UTF-8&useUnicode=true&useSSL=false
+          username: hcst
+          password: hcst@2020
+          driver-class-name: com.mysql.jdbc.Driver
+  #redis 配置
+  redis:
+    database: 0
+    host: 172.30.0.17
+#    host: 127.0.0.1
+    lettuce:
+      pool:
+        max-active: 8   #最大连接数据库连接数,设 0 为没有限制
+        max-idle: 8     #最大等待连接中的数量,设 0 为没有限制
+        max-wait: -1ms  #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
+        min-idle: 0     #最小等待连接中的数量,设 0 为没有限制
+      shutdown-timeout: 100ms
+    password: foobared
+    port: 6379
+#mybatis plus 设置
+mybatis-plus:
+  mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml,classpath*:cn/com/ctop/**/xml/*Mapper.xml
+  global-config:
+    # 关闭MP3.0自带的banner
+    banner: false
+    db-config:
+      #主键类型  0:"数据库ID自增",1:"该类型为未设置主键类型", 2:"用户输入ID",3:"全局唯一ID (数字类型唯一ID)", 4:"全局唯一ID UUID",5:"字符串全局唯一ID (idWorker 的字符串表示)";
+      id-type: 4
+      # 默认数据库表下划线命名
+      table-underline: true
+#jeecg专用配置
+jeecg:
+  elasticsearch:
+    cluster-nodes:
+    check-enabled: false
+  uploadType:
+  oss:
+    endpoint:
+    accessKey:
+    secretKey:
+    bucketName:
+    staticDomain:
+  sms:
+    accessKeyId:
+    accessKeySecret:
+  minio:
+    minio_url:
+    minio_name:
+    minio_pass:
+    bucketName:
+  ffmpeg:
+    bin: ffmpeg
+  path:
+    #文件上传根目录 设置
+    upload: /data/upload
+    #webapp文件路径
+    webapp: /data/webapp
+    video-upload: /data/upload/video/
+    image-upload: /data/upload/image/
+    chrome-driver: /usr/bin/chromedriver
+    csv-upload: /data/upload/csv/
+    bak-database-file: /data/data/bak/
+    report-history: /data/upload/report/history/
+    report-daily: /data/upload/report/daily/
+    kuaishou-agent-image: /data/upload/image/temp.png
+    kuaishou-account-captcha-image: /data/upload/image/captcha.png
+kuaishou:
+  api-url: https://ad.e.kuaishou.com
+  auth-url: https://ad.e.kuaishou.com
+  appid: 328
+  third-appid: 328
+  oauth-type: agent
+  secret: 1iFTBiMdohkyEQQs
+  third-secret: 1iFTBiMdohkyEQQs
+  callback-url: http://callback.shyouteng.com.cn/kuaishou
+  third-callback-url: http://callback.shyouteng.com.cn/kuaishou
+  apk-sava-path: /mnt/file/apk
+  image-sava-path: /mnt/file/image
+  video-sava-path: /mnt/file/video
+  model-video-src-path: /mnt/data/src/
+  model-video-fill-path: /mnt/data/fill/
+  model-video-final-path: /mnt/data/final/
+  group-control:
+    path: http://39.106.184.70
+    port: 4723
+logging:
+  level:
+    root: info
+  config: classpath:logback-prod.xml
+chrome:
+  script:
+    clean: sh /data/webapp/cleanProcess.sh
+oss:
+  replace:
+    replace-value: oss-cn-beijing-internal
+    replace-old-value: oss-cn-beijing
+    download: /data/file/video/
+bytedance:
+  appId: 1635316529903624
+  secret: 0c51523e90d6166418fc8421a4896808e90e26f4
+  url:
+    auth-prefix: https://ad.oceanengine.com/openapi
+    api-prefix: https://ad.oceanengine.com/open_api
+    callback-url: http://adsp.c-top.com.cn:8080/jeecg-boot/bytedance
+    refresh-token: /oauth2/refresh_token
+    advertiser-info: /2/advertiser/public_info/
+    ad-get: /2/ad/get/
+    ad-create: /2/ad/create/
+    ad-update: /2/ad/update/
+    ad-update-status: /2/ad/update/status/
+    ad-update-bid: /2/ad/update/bid/
+    ad-update-budget: /2/ad/update/budget/
+    ad-update-reject-reason: 2/ad/reject_reason/
+    campaign-get: /2/campaign/get/
+    campaign-create: /2/campaign/create/
+    campaign-update-status: /2/campaign/update/status/
+    campaign-update: /2/campaign/update/
+    dmp-custom-audience-select: /2/dmp/custom_audience/select/
+    file-video-ad: /2/file/video/ad/
+    file-image-ad: /2/file/image/ad/
+    creative-update-status: /2/creative/update/status/
+    creative-material-get: /2/creative/material/read/
+    creative-create-v2: /2/creative/create_v2/
+    creative-get: /2/creative/get/
+    creative-read: /2/creative/read_v2/
+    creative-update: /2/creative/update_v2/
+    creative-reject-reason: /2/creative/reject_reason/
+    advertiser-report-get: /2/report/advertiser/get/
+    campaign-report-get: /2/report/campaign/get/
+    ad-report-get: /2/report/ad/get/
+    ad-creative-get: /2/report/creative/get/
+    advertiser-fund-daily-stat: /2/advertiser/fund/daily_stat/
+xxl:
+  job:
+    accessToken:
+    executor:
+      appname: module-job-kuaishou
+      port: 9998
+      ip:
+      logpath: /data/applogs/xxl-job/jobhandler
+      logretentiondays: 30
+    admin:
+      addresses: http://129.28.150.229:8090/xxl-job-admin

+ 61 - 1
module-job-kuaishou/src/main/resources/application-prod.yml

@@ -157,6 +157,21 @@ jeecg:
     kuaishou-agent-image: /data/upload/image/temp.png
     kuaishou-account-captcha-image: /data/upload/image/captcha.png
 kuaishou:
+  api-url: https://ad.e.kuaishou.com
+  auth-url: https://ad.e.kuaishou.com
+  appid: 27
+  third-appid: 328
+  oauth-type: agent
+  secret: QovprB1tNhXptgDc
+  third-secret: 1iFTBiMdohkyEQQs
+  callback-url: http://adsp.c-top.com.cn:8080/jeecg-boot/kuaishou
+  third-callback-url: http://callback.shyouteng.com.cn/kuaishou
+  apk-sava-path: /mnt/file/apk
+  image-sava-path: /mnt/file/image
+  video-sava-path: /mnt/file/video
+  model-video-src-path: /mnt/data/src/
+  model-video-fill-path: /mnt/data/fill/
+  model-video-final-path: /mnt/data/final/
   group-control:
     path: http://39.106.184.70
     port: 4723
@@ -167,9 +182,54 @@ logging:
 chrome:
   script:
     clean: sh /data/webapp/cleanProcess.sh
-
 oss:
   replace:
     replace-value: oss-cn-beijing-internal
     replace-old-value: oss-cn-beijing
     download: /data/file/video/
+bytedance:
+  appId: 1635316529903624
+  secret: 0c51523e90d6166418fc8421a4896808e90e26f4
+  url:
+    auth-prefix: https://ad.oceanengine.com/openapi
+    api-prefix: https://ad.oceanengine.com/open_api
+    callback-url: http://adsp.c-top.com.cn:8080/jeecg-boot/bytedance
+    refresh-token: /oauth2/refresh_token
+    advertiser-info: /2/advertiser/public_info/
+    ad-get: /2/ad/get/
+    ad-create: /2/ad/create/
+    ad-update: /2/ad/update/
+    ad-update-status: /2/ad/update/status/
+    ad-update-bid: /2/ad/update/bid/
+    ad-update-budget: /2/ad/update/budget/
+    ad-update-reject-reason: 2/ad/reject_reason/
+    campaign-get: /2/campaign/get/
+    campaign-create: /2/campaign/create/
+    campaign-update-status: /2/campaign/update/status/
+    campaign-update: /2/campaign/update/
+    dmp-custom-audience-select: /2/dmp/custom_audience/select/
+    file-video-ad: /2/file/video/ad/
+    file-image-ad: /2/file/image/ad/
+    creative-update-status: /2/creative/update/status/
+    creative-material-get: /2/creative/material/read/
+    creative-create-v2: /2/creative/create_v2/
+    creative-get: /2/creative/get/
+    creative-read: /2/creative/read_v2/
+    creative-update: /2/creative/update_v2/
+    creative-reject-reason: /2/creative/reject_reason/
+    advertiser-report-get: /2/report/advertiser/get/
+    campaign-report-get: /2/report/campaign/get/
+    ad-report-get: /2/report/ad/get/
+    ad-creative-get: /2/report/creative/get/
+    advertiser-fund-daily-stat: /2/advertiser/fund/daily_stat/
+xxl:
+  job:
+    accessToken:
+    executor:
+      appname: module-job-kuaishou
+      port: 9998
+      ip:
+      logpath: /data/applogs/xxl-job/jobhandler
+      logretentiondays: 30
+    admin:
+      addresses: http://139.186.29.76:8090/xxl-job-admin

+ 51 - 1
module-job-kuaishou/src/main/resources/application-test.yml

@@ -136,8 +136,23 @@ jeecg:
     report-history: /data/report/history/
     report-daily: /data/report/daily/
 kuaishou:
+  api-url: https://ad.e.kuaishou.com
+  auth-url: https://ad.e.kuaishou.com
+  appid: 27
+  third-appid: 328
+  oauth-type: agent
+  secret: QovprB1tNhXptgDc
+  third-secret: 1iFTBiMdohkyEQQs
+  callback-url: http://adsp.c-top.com.cn:8080/jeecg-boot/kuaishou
+  third-callback-url: http://callback.shyouteng.com.cn/kuaishou
+  apk-sava-path: /mnt/file/apk
+  image-sava-path: /mnt/file/image
+  video-sava-path: /mnt/file/video
+  model-video-src-path: /mnt/data/src/
+  model-video-fill-path: /mnt/data/fill/
+  model-video-final-path: /mnt/data/final/
   group-control:
-    path: http://127.0.0.1
+    path: http://39.106.184.70
     port: 4723
 logging:
   level:
@@ -151,6 +166,41 @@ oss:
     replace-value: oss-cn-beijing-internal
     replace-old-value: oss-cn-beijing
     download: /mnt/file/video/
+bytedance:
+  appId: 1635316529903624
+  secret: 0c51523e90d6166418fc8421a4896808e90e26f4
+  url:
+    auth-prefix: https://ad.oceanengine.com/openapi
+    api-prefix: https://ad.oceanengine.com/open_api
+    callback-url: http://adsp.c-top.com.cn:8080/jeecg-boot/bytedance
+    refresh-token: /oauth2/refresh_token
+    advertiser-info: /2/advertiser/public_info/
+    ad-get: /2/ad/get/
+    ad-create: /2/ad/create/
+    ad-update: /2/ad/update/
+    ad-update-status: /2/ad/update/status/
+    ad-update-bid: /2/ad/update/bid/
+    ad-update-budget: /2/ad/update/budget/
+    ad-update-reject-reason: 2/ad/reject_reason/
+    campaign-get: /2/campaign/get/
+    campaign-create: /2/campaign/create/
+    campaign-update-status: /2/campaign/update/status/
+    campaign-update: /2/campaign/update/
+    dmp-custom-audience-select: /2/dmp/custom_audience/select/
+    file-video-ad: /2/file/video/ad/
+    file-image-ad: /2/file/image/ad/
+    creative-update-status: /2/creative/update/status/
+    creative-material-get: /2/creative/material/read/
+    creative-create-v2: /2/creative/create_v2/
+    creative-get: /2/creative/get/
+    creative-read: /2/creative/read_v2/
+    creative-update: /2/creative/update_v2/
+    creative-reject-reason: /2/creative/reject_reason/
+    advertiser-report-get: /2/report/advertiser/get/
+    campaign-report-get: /2/report/campaign/get/
+    ad-report-get: /2/report/ad/get/
+    ad-creative-get: /2/report/creative/get/
+    advertiser-fund-daily-stat: /2/advertiser/fund/daily_stat/
 xxl:
   job:
     accessToken:

+ 67 - 82
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/controller/CrossAccountBatchController.java

@@ -8,6 +8,7 @@ import cn.com.ctop.common.module.service.IProjectService;
 import cn.com.ctop.common.module.service.IUserAllocationService;
 import cn.com.ctop.common.module.utils.Check;
 import cn.com.ctop.kuaishou.modules.batch.Enums.CampaignTypeEnum;
+import cn.com.ctop.kuaishou.modules.batch.service.ICrossAccountBatchService;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouInterfaceService;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -43,7 +44,8 @@ public class CrossAccountBatchController {
     private IKuaishouInterfaceService kuaishouInterfaceService;
     @Autowired
     private IUserAllocationService userAllocationService;
-
+    @Autowired
+    private ICrossAccountBatchService crossAccountBatchService;
 
     /**
      * 批量创建广告计划
@@ -55,7 +57,6 @@ public class CrossAccountBatchController {
     public Result<JSONArray> campaignCreate(@RequestBody JSONObject requestJson) {
         Result<JSONArray> result = new Result<>();
         try {
-            System.err.println(requestJson);
             JSONArray accountArr = requestJson.getJSONArray("accountArr");
             if (Check.isNull(accountArr)) {
                 throw new Exception("请选择需要创建的账户");
@@ -190,122 +191,106 @@ public class CrossAccountBatchController {
     }
 
 
-
-
-
     /**
      * 批量创建广告组
      *
      * @param requestJson
      * @return
      */
-    @PostMapping(value = "/batchUnitCreate")
+    @PostMapping(value = "/crossAccountUnitCreate")
     public Result<JSONArray> batchUnitCreate(@RequestBody JSONObject requestJson) {
+        System.err.println(requestJson);
         Result<JSONArray> result = new Result<>();
         try {
-            System.err.println(requestJson);
+
+            if (Check.isNull(requestJson)) {
+                throw new Exception("参数不能为空");
+            }
             JSONArray accountArr = requestJson.getJSONArray("accountArr");
             if (Check.isNull(accountArr)) {
-                throw new Exception("请选择需要创建的账户");
+                throw new Exception("accountArr节点不能为空");
             }
-            JSONArray returnArr = new JSONArray();
 
+            JSONArray createUnitArr = new JSONArray();
             for (int i = 0; i < accountArr.size(); i++) {
-                Long accountId = accountArr.getLong(i);
-                CtopOauthToken oauthToken = oauthTokenService.getTokenByAccountId(accountId);
-                if (Check.isNull(oauthToken)) {
-                    throw new Exception("未获取到账户信息");
+                JSONObject accountJson = accountArr.getJSONObject(i);
+                if (Check.isNull(accountJson)) {
+                    continue;
                 }
-
-                JSONObject returnJson = new JSONObject();
-                returnJson.put("accountId", accountId);
-                JSONObject campaignJson = new JSONObject();
-                campaignJson.put("day_budget", requestJson.getLong("dayBudget"));
-                Integer nameType = requestJson.getInteger("nameType");
-                Integer type = requestJson.getInteger("type");
-                campaignJson.put("type", type);
-                if (!Check.isNull(requestJson.getLong("dayBudget"))) {
-                    campaignJson.put("day_budget", requestJson.getLong("dayBudget"));
+                Long accountId = accountJson.getLong("accountId");
+                if (Check.isNull(accountId)) {
+                    log.error("账户id不能为空");
+                    continue;
                 }
-
-                if (!Check.isNull(requestJson.getJSONArray("dayBudgetSchedule"))) {
-                    campaignJson.put("day_budget_schedule", requestJson.getJSONArray("dayBudgetSchedule"));
+                CtopOauthToken oauthToken = oauthTokenService.getTokenByAccountId(accountId);
+                if (Check.isNull(oauthToken)) {
+                    log.error("未获取到授权信息");
+                    continue;
                 }
-
-                JSONArray campaignNames = new JSONArray();
-                if (nameType == 0) { // 0 为统一命名  1 为分别命名
-                    //    Integer startNum = requestJson.getInteger("startNum");
-                    Integer createTotal = requestJson.getInteger("createTotal");
-                    String campaignName = requestJson.getString("campaignName");
-                    for (int j = 0; j < createTotal; j++) {
-                        if (campaignName.contains("{{数值}}")) {
-                            String name = getName(campaignName, accountId, j, type);
-                            campaignNames.add(name);
-                        } else {
-                            String name = null;
-                            if (createTotal == 1) {
-                                name = getName(campaignName, accountId, null, type);
-                            } else {
-                                name = getName(campaignName + "_" + j, accountId, null, type);
-                            }
-                            campaignNames.add(name);
-                        }
-                    }
-                } else if (nameType == 1) { // "分别命名"
-                    JSONArray nameArr = requestJson.getJSONArray("nameArr");
-                    for (int j = 0; j < nameArr.size(); j++) {
-                        JSONObject nameJson = nameArr.getJSONObject(j);
-                        if (nameJson.getLong("accountId").equals(accountId)) {
-                            campaignNames = nameJson.getJSONArray("campaignNames");
-                        }
+                Integer campaignAgreement = accountJson.getInteger("campaignAgreement");  //判断是否计划相同   0为相同取值campaignOne   1不同取值campaignList
+                if (campaignAgreement == 0) { // 计划下组相同
+                    JSONObject campaignOne = accountJson.getJSONObject("campaignOne");
+                    if (Check.isNull(campaignOne)) {
+                        continue;
                     }
-                }
-                if (!Check.isNull(campaignNames)) {
-                    JSONArray returnCampaigns = new JSONArray();
-                    for (int j = 0; j < campaignNames.size(); j++) {
-                        JSONObject returnCampaignJson = new JSONObject();
-                        String campaignName = (String) campaignNames.get(j);
-                        campaignJson.put("campaign_name", campaignName);
-                        Map<String, Object> campaignMap = kuaishouInterfaceService.campaignCreate(oauthToken.getAccessToken(), accountId, campaignJson);
-                        if ((Integer) campaignMap.get("code") == 0) {
-                            returnCampaignJson.put("code", 0);
-                            returnCampaignJson.put("campaignId", campaignMap.get("campaignId"));
-                            returnCampaignJson.put("campaignName", campaignName);
-                            returnCampaignJson.put("type", type);
-                            returnCampaignJson.put("message", campaignMap.get("message"));
-                        } else {
-                            returnCampaignJson.put("code", -1);
-                            returnCampaignJson.put("campaignName", campaignName);
-                            returnCampaignJson.put("message", campaignMap.get("message"));
-                        }
-                        returnCampaigns.add(returnCampaignJson);
+                    createUnitArr = crossAccountBatchService.assembleUnitJson(oauthToken, createUnitArr, campaignOne);
 
+                } else if (campaignAgreement == 1) { // 计划下组不同
+                    JSONArray campaignList = accountJson.getJSONArray("campaignList");
+                    if (Check.isNull(campaignList)) {
+                        continue;
                     }
-                    returnJson.put("createDetail", returnCampaigns);
-
+                    createUnitArr = crossAccountBatchService.assembleUnitArray(oauthToken, createUnitArr, campaignList);
                 }
-                returnArr.add(returnJson);
             }
+            System.err.println("组装数据:"+createUnitArr);
+            JSONArray returnArray = crossAccountBatchService.createUnit(createUnitArr);
+            System.err.println(returnArray);
             result.setSuccess(true);
-            System.err.println(returnArr);
-            result.setResult(returnArr);
+            result.setResult(returnArray);
         } catch (Exception e) {
             e.printStackTrace();
-            result.setSuccess(false);
+            result.setSuccess(true);
             result.setMessage(e.getMessage());
-
         }
         return result;
 
     }
 
 
+    @PostMapping(value = "/crossAccountCreativeCreate")
+    public Result<JSONArray> crossAccountCreativeCreate(@RequestBody JSONObject requestJson) {
+        Result<JSONArray> result = new Result<>();
+        try {
+            System.err.println(requestJson);
 
+            if (Check.isNull(requestJson)) {
+                throw new Exception("参数不能为空");
+            }
+            JSONArray accountArr = requestJson.getJSONArray("accountArr");
+            if (Check.isNull(accountArr)) {
+                throw new Exception("accountArr节点不能为空");
+            }
+            JSONArray creativeArray = new JSONArray();
+            for (int i = 0; i < accountArr.size(); i++) {
+                JSONObject accountJson = accountArr.getJSONObject(i);
+                creativeArray = crossAccountBatchService.assembleCreativeJson(creativeArray, accountJson);
+            }
+            System.err.println("组装数据:"+creativeArray);
+            JSONArray returnArray = crossAccountBatchService.createCreative(creativeArray);
+            System.err.println(returnArray);
+            result.setSuccess(true);
+            result.setResult(returnArray);
 
+        } catch (Exception e) {
+            e.printStackTrace();
+            result.setSuccess(true);
+            result.setMessage(e.getMessage());
+        }
 
 
-
-
+        return result;
+    }
 
 
     /**

+ 258 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/controller/KuaishouStrategyController.java

@@ -0,0 +1,258 @@
+package cn.com.ctop.kuaishou.modules.batch.controller;
+
+import cn.com.ctop.common.module.annotation.AutoLog;
+import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.kuaishou.modules.batch.entity.KuaishouStrategy;
+import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouStrategyService;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * kuaishou.modules.batch-优化评估策略表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-12-10
+ */
+@Slf4j
+@Api(tags = "kuaishou.modules.batch-优化评估策略表")
+@RestController
+@RequestMapping("/kuaishouStrategy")
+public class KuaishouStrategyController {
+    @Autowired
+    private IKuaishouStrategyService kuaishouStrategyService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param kuaishouStrategy
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @AutoLog(value = "kuaishou.modules.batch-优化评估策略表-分页列表查询")
+    @ApiOperation(value = "kuaishou.modules.batch-优化评估策略表-分页列表查询", notes = "kuaishou.modules.batch-优化评估策略表-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<KuaishouStrategy>> queryPageList(KuaishouStrategy kuaishouStrategy,
+                                                         @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                         @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                         HttpServletRequest req) {
+        Result<IPage<KuaishouStrategy>> result = new Result<>();
+        QueryWrapper<KuaishouStrategy> queryWrapper = QueryGenerator.initQueryWrapper(kuaishouStrategy, req.getParameterMap());
+        Page<KuaishouStrategy> page = new Page<KuaishouStrategy>(pageNo, pageSize);
+        IPage<KuaishouStrategy> pageList = kuaishouStrategyService.page(page, queryWrapper);
+        result.setSuccess(true);
+        result.setResult(pageList);
+        return result;
+    }
+
+    /**
+     * 添加
+     *
+     * @param kuaishouStrategy
+     * @return
+     */
+    @AutoLog(value = "kuaishou.modules.batch-优化评估策略表-添加")
+    @ApiOperation(value = "kuaishou.modules.batch-优化评估策略表-添加", notes = "kuaishou.modules.batch-优化评估策略表-添加")
+    @PostMapping(value = "/add")
+    public Result<Object> add(@RequestBody KuaishouStrategy kuaishouStrategy) {
+        Result<Object> result = new Result<>();
+        try {
+            if (Check.isNull(kuaishouStrategy.getAccountId())) {
+                return Result.error(-1, "请选择账户");
+            }
+            kuaishouStrategyService.save(kuaishouStrategy);
+            result.success("添加成功!");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            result.error500("操作失败");
+        }
+        return result;
+    }
+
+    /**
+     * 编辑
+     *
+     * @param kuaishouStrategy
+     * @return
+     */
+    @AutoLog(value = "kuaishou.modules.batch-优化评估策略表-编辑")
+    @ApiOperation(value = "kuaishou.modules.batch-优化评估策略表-编辑", notes = "kuaishou.modules.batch-优化评估策略表-编辑")
+    @PostMapping(value = "/edit")
+    public Result<KuaishouStrategy> edit(@RequestBody KuaishouStrategy kuaishouStrategy) {
+        Result<KuaishouStrategy> result = new Result<KuaishouStrategy>();
+        KuaishouStrategy kuaishouStrategyEntity = kuaishouStrategyService.getById(kuaishouStrategy.getId());
+        if (kuaishouStrategyEntity == null) {
+            result.error500("未找到对应实体");
+        } else {
+            boolean ok = kuaishouStrategyService.updateById(kuaishouStrategy);
+            if (ok) {
+                result.success("修改成功!");
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "kuaishou.modules.batch-优化评估策略表-通过id删除")
+    @ApiOperation(value = "kuaishou.modules.batch-优化评估策略表-通过id删除", notes = "kuaishou.modules.batch-优化评估策略表-通过id删除")
+    @DeleteMapping(value = "/delete")
+    public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
+        try {
+            kuaishouStrategyService.removeById(id);
+        } catch (Exception e) {
+            log.error("删除失败", e.getMessage());
+            return Result.error("删除失败!");
+        }
+        return Result.ok("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "kuaishou.modules.batch-优化评估策略表-批量删除")
+    @ApiOperation(value = "kuaishou.modules.batch-优化评估策略表-批量删除", notes = "kuaishou.modules.batch-优化评估策略表-批量删除")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<KuaishouStrategy> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        Result<KuaishouStrategy> result = new Result<>();
+        if (ids == null || "".equals(ids.trim())) {
+            result.error500("参数不识别!");
+        } else {
+            this.kuaishouStrategyService.removeByIds(Arrays.asList(ids.split(",")));
+            result.success("删除成功!");
+        }
+        return result;
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "kuaishou.modules.batch-优化评估策略表-通过id查询")
+    @ApiOperation(value = "kuaishou.modules.batch-优化评估策略表-通过id查询", notes = "kuaishou.modules.batch-优化评估策略表-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<Object> queryById(@RequestParam(name = "id", required = true) String id) {
+        if (Check.isNull(id)) {
+            return Result.error(-1, "请选择查看的策略");
+        }
+        KuaishouStrategy strategy = kuaishouStrategyService.getById(id);
+        if (Check.isNull(strategy)) {
+            return Result.error(-1, "策略不存在");
+        }
+        return Result.ok(strategy);
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param response
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+        // Step.1 组装查询条件
+        QueryWrapper<KuaishouStrategy> queryWrapper = null;
+        try {
+            String paramsStr = request.getParameter("paramsStr");
+            if (oConvertUtils.isNotEmpty(paramsStr)) {
+                String deString = URLDecoder.decode(paramsStr, "UTF-8");
+                KuaishouStrategy kuaishouStrategy = JSON.parseObject(deString, KuaishouStrategy.class);
+                queryWrapper = QueryGenerator.initQueryWrapper(kuaishouStrategy, request.getParameterMap());
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+
+        //Step.2 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        List<KuaishouStrategy> pageList = kuaishouStrategyService.list(queryWrapper);
+        //导出文件名称
+        mv.addObject(NormalExcelConstants.FILE_NAME, "kuaishou.modules.batch-优化评估策略表列表");
+        mv.addObject(NormalExcelConstants.CLASS, KuaishouStrategy.class);
+        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("kuaishou.modules.batch-优化评估策略表列表数据", "导出人:Jeecg", "导出信息"));
+        mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+        return mv;
+    }
+
+    /**
+     * 通过excel导入数据
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+            MultipartFile file = entity.getValue();
+            ImportParams params = new ImportParams();
+            params.setTitleRows(2);
+            params.setHeadRows(1);
+            params.setNeedSave(true);
+            try {
+                List<KuaishouStrategy> listKuaishouStrategys = ExcelImportUtil.importExcel(file.getInputStream(), KuaishouStrategy.class, params);
+                kuaishouStrategyService.saveBatch(listKuaishouStrategys);
+                return Result.ok("文件导入成功!数据行数:" + listKuaishouStrategys.size());
+            } catch (Exception e) {
+                log.error(e.getMessage(), e);
+                return Result.error("文件导入失败:" + e.getMessage());
+            } finally {
+                try {
+                    file.getInputStream().close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return Result.ok("文件导入失败!");
+    }
+
+}

+ 4 - 3
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/controller/KuaishouTemplateController.java

@@ -118,9 +118,9 @@ public class KuaishouTemplateController {
      * @param
      * @return
      */
-    @GetMapping(value = "/createTemplate")
-    public Result<Boolean> createTemplate(@RequestBody JSONObject requestJson) {
-        Result<Boolean> result = new Result<>();
+    @PostMapping(value = "/createTemplate")
+    public Result<JSONObject> createTemplate(@RequestBody JSONObject requestJson) {
+        Result<JSONObject> result = new Result<>();
         try {
 
             Long accountId = requestJson.getLong("accountId");
@@ -133,6 +133,7 @@ public class KuaishouTemplateController {
             }
             JSONObject returnJson = kuaishouTemplateService.createTemplate(accountId, oauthToken.getAccessToken(), requestJson);
             result.setSuccess(true);
+            result.setResult(returnJson);
         } catch (Exception e) {
             e.printStackTrace();
             result.setSuccess(false);

+ 30 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/controller/KuaishouTemplateTargetController.java

@@ -1,9 +1,12 @@
 package cn.com.ctop.kuaishou.modules.batch.controller;
 
 import cn.com.ctop.common.module.annotation.AutoLog;
+import cn.com.ctop.kuaishou.modules.batch.entity.KuaishouTemplate;
 import cn.com.ctop.kuaishou.modules.batch.entity.KuaishouTemplateTarget;
+import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouTemplateService;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouTemplateTargetService;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -47,6 +50,8 @@ import java.util.Map;
 public class KuaishouTemplateTargetController {
     @Autowired
     private IKuaishouTemplateTargetService kuaishouTemplateTargetService;
+    @Autowired
+    private IKuaishouTemplateService kuaishouTemplateService;
 
     /**
      * 分页列表查询
@@ -73,6 +78,31 @@ public class KuaishouTemplateTargetController {
         return result;
     }
 
+    @AutoLog(value = "快手-定向模板-详情-分页列表查询")
+    @ApiOperation(value = "快手-定向模板-详情-分页列表查询", notes = "快手-定向模板-详情-分页列表查询")
+    @GetMapping(value = "/getDetailByTemplateId")
+    public Result<JSONObject> getDetailByTemplateId(KuaishouTemplateTarget kuaishouTemplateTarget,
+                                                    @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                    @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                    HttpServletRequest req) {
+        Result<JSONObject> result = new Result<>();
+        QueryWrapper<KuaishouTemplateTarget> queryWrapper = QueryGenerator.initQueryWrapper(kuaishouTemplateTarget, req.getParameterMap());
+        queryWrapper.last("limit 1");
+        KuaishouTemplateTarget one = kuaishouTemplateTargetService.getOne(queryWrapper);
+        JSONObject json = new JSONObject();
+        json.put("detail", one);
+        QueryWrapper<KuaishouTemplate> baseQueryWrapper = new QueryWrapper<>();
+        baseQueryWrapper.eq("template_id", kuaishouTemplateTarget.getTemplateId());
+        baseQueryWrapper.last("limit 1");
+        // KuaishouTemplate
+        KuaishouTemplate base = kuaishouTemplateService.getOne(baseQueryWrapper);
+        json.put("base", base);
+        result.setSuccess(true);
+        result.setResult(json);
+        return result;
+    }
+
+
     /**
      * 添加
      *

+ 217 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/entity/KuaishouStrategy.java

@@ -0,0 +1,217 @@
+package cn.com.ctop.kuaishou.modules.batch.entity;
+
+import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.util.Date;
+
+/**
+ * 快手-优化评估策略表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-12-10
+ */
+@Data
+@TableName("ctop_kuaishou_strategy")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_kuaishou_strategy对象", description = "快手-优化评估策略表")
+public class KuaishouStrategy {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.ID_WORKER_STR)
+    @ApiModelProperty(value = "id")
+    private String id;
+    /**
+     * 账户ID
+     */
+    @Excel(name = "账户ID", width = 15)
+    @ApiModelProperty(value = "账户ID")
+    private Long accountId;
+    /**
+     * 策略名称
+     */
+    @Excel(name = "策略名称", width = 15)
+    @ApiModelProperty(value = "策略名称")
+    private String strategyName;
+    /**
+     * 策略状态 0 关停,1激活
+     */
+    @Excel(name = "策略状态 0 关停,1激活", width = 15)
+    @ApiModelProperty(value = "策略状态 0 关停,1激活")
+    private String strategyState;
+    /**
+     * 应用场景{1:素材+出价}{2:素材+定向}{3:时间+出价}。。。
+     */
+    @Excel(name = "应用场景{1:素材+出价}{2:素材+定向}{3:时间+出价}。。。", width = 15)
+    @ApiModelProperty(value = "应用场景{1:素材+出价}{2:素材+定向}{3:时间+出价}。。。")
+    private String scenes;
+    /**
+     * 营销目标{1应用安装},{2电商下单},{3推广品牌},{4营销线上},{5应用活跃}
+     */
+    @Excel(name = "营销目标{1应用安装},{2电商下单},{3推广品牌},{4营销线上},{5应用活跃}", width = 15)
+    @ApiModelProperty(value = "营销目标{1应用安装},{2电商下单},{3推广品牌},{4营销线上},{5应用活跃}")
+    private String marketingGoal;
+    /**
+     * 应用id集
+     */
+    @Excel(name = "应用id集", width = 15)
+    @ApiModelProperty(value = "应用id集")
+    private String appIds;
+    /**
+     * 转化目标
+     */
+    @Excel(name = "转化目标", width = 15)
+    @ApiModelProperty(value = "转化目标")
+    private Long convertId;
+    /**
+     * 定向模板id
+     */
+    @Excel(name = "模板id", width = 15)
+    @ApiModelProperty(value = "模板id")
+    private Long templateId;
+    /**
+     * 地域
+     */
+    @Excel(name = "地域", width = 15)
+    @ApiModelProperty(value = "地域")
+    private String region;
+    /**
+     * 年龄段:{0:不限}{18:18-23岁}{24:24-30岁}{31:31-40岁}{41:41-49岁}{50:50岁+
+     */
+    @Excel(name = "年龄段:{[]:不限}{18:18-23岁}{24:24-30岁}{31:31-40岁}{41:41-49岁}{50:50岁+", width = 15)
+    @ApiModelProperty(value = "年龄段:{[]:不限}{18:18-23岁}{24:24-30岁}{31:31-40岁}{41:41-49岁}{50:50岁+")
+    private String agesRange;
+    /**
+     * 性别 1:女性, 2:男性, 0:不限
+     */
+    @Excel(name = "性别 1:女性, 2:男性, 0:不限", width = 15)
+    @ApiModelProperty(value = "性别 1:女性, 2:男性, 0:不限")
+    private Integer gender;
+    /**
+     * 操作系统 1: Android, 2: iOS, 0:不限
+     */
+    @Excel(name = "操作系统 1: Android, 2: iOS, 0:不限", width = 15)
+    @ApiModelProperty(value = "操作系统 1: Android, 2: iOS, 0:不限")
+    private Integer platformOs;
+    /**
+     * 自定义人群 0不限,1:定向,:2:排除,:3同时定向排除
+     */
+    @Excel(name = "自定义人群 0不限,1:定向,:2:排除,:3同时定向排除", width = 15)
+    @ApiModelProperty(value = "自定义人群 0不限,1:定向,:2:排除,:3同时定向排除")
+    private String customCrowd;
+    /**
+     * 定向人群包
+     */
+    @Excel(name = "定向人群包", width = 15)
+    @ApiModelProperty(value = "定向人群包")
+    private String population;
+    /**
+     * 排除人群包
+     */
+    @Excel(name = "排除人群包", width = 15)
+    @ApiModelProperty(value = "排除人群包")
+    private String excludePopulation;
+    /**
+     * 投放开始时间
+     */
+    @Excel(name = "投放开始时间", width = 15)
+    @ApiModelProperty(value = "投放开始时间")
+    private String beginTime;
+    /**
+     * 投放结束时间
+     */
+    @Excel(name = "投放结束时间", width = 15)
+    @ApiModelProperty(value = "投放结束时间")
+    private String endTime;
+    /**
+     * 投放时段
+     */
+    @Excel(name = "投放时段", width = 15)
+    @ApiModelProperty(value = "投放时段")
+    private Object scheduleTime;
+    /**
+     * 策略预算
+     */
+    @Excel(name = "策略预算", width = 15)
+    @ApiModelProperty(value = "策略预算")
+    private Long budget;
+    /**
+     * 出价类型(优化目标) 2点击数(CPC),10转化数(OCPM)
+     */
+    @Excel(name = "出价类型(优化目标) 2点击数(CPC),10转化数(OCPM)", width = 15)
+    @ApiModelProperty(value = "出价类型(优化目标) 2点击数(CPC),10转化数(OCPM)")
+    private Integer bidType;
+    /**
+     * 封面点击出价
+     */
+    @Excel(name = "封面点击出价", width = 15)
+    @ApiModelProperty(value = "封面点击出价")
+    private Long bid;
+    /**
+     * 转化目标,2:行为数,180:激活数,53:表单数,190: 付费,191:首日ROI 。。。
+     */
+    @Excel(name = "转化目标,2:行为数,180:激活数,53:表单数,190: 付费,191:首日ROI 。。。", width = 15)
+    @ApiModelProperty(value = "转化目标,2:行为数,180:激活数,53:表单数,190: 付费,191:首日ROI 。。。")
+    private Integer ocpxActionType;
+    /**
+     * 转化目标出价
+     */
+    @Excel(name = "转化目标出价", width = 15)
+    @ApiModelProperty(value = "转化目标出价")
+    private Integer cpaBid;
+    /**
+     * 深度转化目标 3: 付费,7: 次日留存,10: 完件, 11: 授信 ,0:无
+     */
+    @Excel(name = "深度转化目标 3: 付费,7: 次日留存,10: 完件, 11: 授信 ,0:无", width = 15)
+    @ApiModelProperty(value = "深度转化目标 3: 付费,7: 次日留存,10: 完件, 11: 授信 ,0:无")
+    private Integer deepConversionType;
+    /**
+     * 深度转化目标出价
+     */
+    @Excel(name = "深度转化目标出价", width = 15)
+    @ApiModelProperty(value = "深度转化目标出价")
+    private Integer deepConversionBid;
+
+    /**
+     * 广告位 1:优选广告位
+     */
+    private JSONArray sceneId;
+    /**
+     * 下载详情页ID,建站id
+     */
+    private Integer siteId;
+    /**
+     * 第三方开始播放监测链接
+     */
+    private String impressionUrl;
+    /**
+     * 第三方有效播放监测链接
+     */
+    private String adPhotoPlayedT3sUrl;
+    /**
+     * 第三方点击按钮监测链接
+     */
+    private String actionbarClickUrl;
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+    /**
+     * updateTime
+     */
+    @ApiModelProperty(value = "updateTime")
+    private Date updateTime;
+}

+ 4 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/KuaiShouAdvertiserBaseInfoMapper.java

@@ -2,6 +2,9 @@ package cn.com.ctop.kuaishou.modules.batch.mapper;
 
 import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouAdvertiserBaseInfo;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 快手-广告主基本信息
@@ -12,4 +15,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface KuaiShouAdvertiserBaseInfoMapper extends BaseMapper<KuaiShouAdvertiserBaseInfo> {
 
+    List<Long> getAccountListByAccountId(@Param("userId") String userId);
 }

+ 3 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/KuaiShouCampaignMapper.java

@@ -1,6 +1,7 @@
 package cn.com.ctop.kuaishou.modules.batch.mapper;
 
 import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouCampaign;
+import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -17,4 +18,6 @@ public interface KuaiShouCampaignMapper extends BaseMapper<KuaiShouCampaign> {
     void replaceBatch(@Param(value = "campaigns") List<KuaiShouCampaign> campaigns);
 
     List<Long> queryIdsByPutStatus(Long accountId,String putStatus);
+
+    JSONArray queryCampaignIdByAccountId(Long accountId);
 }

+ 2 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/KuaiShouGroupMapper.java

@@ -22,4 +22,6 @@ public interface KuaiShouGroupMapper extends BaseMapper<KuaiShouGroup> {
     List<String> selectWarningCpaBid(@Param("accountId") Long accountId, @Param("maxBid") BigDecimal maxDeepCapBid);
 
     List<KuaiShouGroup> queryByMap(Map<String, Object> map);
+
+    List<KuaiShouGroup> queryUnitInfoByAccountId(Long accountId);
 }

+ 0 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/KuaishouStrategyMapper.java


Некоторые файлы не были показаны из-за большого количества измененных файлов