Prechádzať zdrojové kódy

Merge remote-tracking branch 'origin/master'

jiequan.bi 4 rokov pred
rodič
commit
d490748ada
67 zmenil súbory, kde vykonal 4171 pridanie a 464 odobranie
  1. 50 0
      jeecg-boot-module-system/src/main/resources/application-dev.yml
  2. 246 0
      jeecg-boot-module-system/src/main/resources/application-jiaoyang.yml
  3. 51 1
      jeecg-boot-module-system/src/main/resources/application-prod.yml
  4. 51 1
      jeecg-boot-module-system/src/main/resources/application-prod2.yml
  5. 51 2
      jeecg-boot-module-system/src/main/resources/application-test.yml
  6. 53 2
      jeecg-boot-module-system/src/main/resources/application-wps.yml
  7. 10 0
      jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java
  8. 0 36
      module-common/src/main/java/cn/com/ctop/common/module/entity/ActCustomForm.java
  9. 0 33
      module-common/src/main/java/cn/com/ctop/common/module/entity/ActFormData.java
  10. 0 34
      module-common/src/main/java/cn/com/ctop/common/module/entity/ActFormField.java
  11. 0 33
      module-common/src/main/java/cn/com/ctop/common/module/entity/ActFormPorcess.java
  12. 0 14
      module-common/src/main/java/cn/com/ctop/common/module/mapper/ActCustomFormMapper.java
  13. 0 14
      module-common/src/main/java/cn/com/ctop/common/module/mapper/ActFormDataMapper.java
  14. 0 14
      module-common/src/main/java/cn/com/ctop/common/module/mapper/ActFormFieldMapper.java
  15. 0 14
      module-common/src/main/java/cn/com/ctop/common/module/mapper/ActFormPorcessMapper.java
  16. 0 5
      module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/ActCustomFormMapper.xml
  17. 0 5
      module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/ActFormDataMapper.xml
  18. 0 5
      module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/ActFormPorcessMapper.xml
  19. 0 14
      module-common/src/main/java/cn/com/ctop/common/module/service/IActCustomFormService.java
  20. 0 14
      module-common/src/main/java/cn/com/ctop/common/module/service/IActFormDataService.java
  21. 0 14
      module-common/src/main/java/cn/com/ctop/common/module/service/IActFormFieldService.java
  22. 0 14
      module-common/src/main/java/cn/com/ctop/common/module/service/IActFormPorcessService.java
  23. 0 18
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/ActCustomFormServiceImpl.java
  24. 0 18
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/ActFormDataServiceImpl.java
  25. 0 18
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/ActFormFieldServiceImpl.java
  26. 0 18
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/ActFormPorcessServiceImpl.java
  27. 12 3
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/CtopOauthTokenServiceImpl.java
  28. 0 1
      module-common/src/main/java/cn/com/ctop/common/module/utils/CloudVideoProcessUtil.java
  29. 0 5
      module-common/src/main/java/cn/com/ctop/common/module/utils/CosUtils.java
  30. 4 0
      module-common/src/main/java/cn/com/ctop/common/module/utils/KuaishouInterfaceConstant.java
  31. 7 0
      module-common/src/main/java/cn/com/ctop/common/module/utils/RandomUtil.java
  32. 6 0
      module-job-bytedance/pom.xml
  33. 50 1
      module-job-bytedance/src/main/resources/application-dev.yml
  34. 50 0
      module-job-bytedance/src/main/resources/application-jiaoyang.yml
  35. 50 1
      module-job-bytedance/src/main/resources/application-prod.yml
  36. 51 1
      module-job-bytedance/src/main/resources/application-test.yml
  37. 6 0
      module-job-kuaishou/pom.xml
  38. 48 0
      module-job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/handler/KuaishouDailyAudienceReportJob.java
  39. 50 0
      module-job-kuaishou/src/main/resources/application-dev.yml
  40. 231 0
      module-job-kuaishou/src/main/resources/application-jiaoyang.yml
  41. 53 8
      module-job-kuaishou/src/main/resources/application-prod.yml
  42. 51 1
      module-job-kuaishou/src/main/resources/application-test.yml
  43. 65 82
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/controller/CrossAccountBatchController.java
  44. 55 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/ICrossAccountBatchService.java
  45. 648 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/CrossAccountBatchServiceImpl.java
  46. 12 3
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/IKuaiShouCommentServiceImpl.java
  47. 2 1
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaishouInterfaceServiceImpl.java
  48. 256 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/controller/KuaishouAudienceReportDailyController.java
  49. 750 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/entity/KuaishouAudienceReportDaily.java
  50. 22 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/entity/KuaishouAudienceReportDailyAge.java
  51. 30 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/entity/KuaishouAudienceReportDailyBussiness.java
  52. 30 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/entity/KuaishouAudienceReportDailyCity.java
  53. 31 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/entity/KuaishouAudienceReportDailyClient.java
  54. 30 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/entity/KuaishouAudienceReportDailyGender.java
  55. 749 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/entity/KuaishouAudienceReportDailyProvince.java
  56. 15 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/KuaishouAudienceReportDailyAgeMapper.java
  57. 16 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/KuaishouAudienceReportDailyBusinessMapper.java
  58. 16 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/KuaishouAudienceReportDailyCityMapper.java
  59. 16 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/KuaishouAudienceReportDailyClientMapper.java
  60. 16 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/KuaishouAudienceReportDailyGenderMapper.java
  61. 15 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/KuaishouAudienceReportDailyMapper.java
  62. 15 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/KuaishouAudienceReportDailyProvinceMapper.java
  63. 2 2
      module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/ActFormFieldMapper.xml
  64. 24 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/service/IKuaishouAudienceReportDailyService.java
  65. 157 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/service/impl/KuaishouAudienceReportDailyServiceImpl.java
  66. 18 6
      module-kuaishou/src/main/resources/kuaishou_config.properties
  67. 0 8
      module-toutiao/src/main/resources/bytedance_config.properties

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

@@ -208,6 +208,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 +244,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/

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

@@ -179,6 +179,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 +214,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 - 1
jeecg-boot-module-system/src/main/resources/application-prod2.yml

@@ -171,6 +171,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 +206,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/

+ 53 - 2
jeecg-boot-module-system/src/main/resources/application-wps.yml

@@ -56,7 +56,7 @@ spring:
   autoconfigure:
     exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
   datasource:
-    url: jdbc:mysql://139.186.27.96:4000/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false
+    url: jdbc:mysql://139.186.27.96:4000/jiaoyang?characterEncoding=UTF-8&useUnicode=true&useSSL=false
     username: hcst
     password: hcst@2020
     driver-class-name: com.mysql.jdbc.Driver
@@ -96,7 +96,7 @@ spring:
         connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
       datasource:
         master:
-          url: jdbc:mysql://139.186.27.96:4000/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false
+          url: jdbc:mysql://139.186.27.96:4000/jiaoyang?characterEncoding=UTF-8&useUnicode=true&useSSL=false
           username: hcst
           password: hcst@2020
           driver-class-name: com.mysql.jdbc.Driver
@@ -164,6 +164,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
@@ -184,3 +199,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/
+

+ 10 - 0
jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java

@@ -251,6 +251,16 @@ public class SampleTest {
     }
 
     @Test
+    public void loadKuaishouData(){
+        Date getDate = DateUtils.addDay(new Date(), -1);
+        //1:查询当日数据
+        List<CtopOauthToken> tokens = tokenService.selectKuaiShouToken();
+        for (CtopOauthToken token:tokens){
+            kuaishouInterfaceService.getAdvertiserCampaignReportDaily(token, getDate, getDate);
+        }
+    }
+
+    @Test
     public void loadKuaishouHourlyReportData(){
         Date getDate = new Date();
         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH");

+ 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 - 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> {
-
-}

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

@@ -1,5 +0,0 @@
-<?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.ActCustomFormMapper">
-
-</mapper>

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

@@ -1,5 +0,0 @@
-<?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>

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

@@ -1,5 +0,0 @@
-<?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>

+ 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> {
-
-}

+ 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 {
-
-}

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

@@ -14,6 +14,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xxl.job.core.context.XxlJobHelper;
 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.*;
@@ -27,6 +28,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
@@ -57,10 +66,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<>());

+ 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());
+        }
+
+    }
+
 }

+ 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>

+ 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:

+ 50 - 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,12 +176,46 @@ 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:

+ 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>

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

@@ -0,0 +1,48 @@
+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.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;
+    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;
+        }
+        tokens.forEach(token -> executorService.submit(() -> {
+            kuaishouAudienceReportDailyService.crowdAnalysisReport(token, date, "province", 1, 2000);
+            kuaishouAudienceReportDailyService.crowdAnalysisReport(token, date, "city", 1, 2000);
+            kuaishouAudienceReportDailyService.crowdAnalysisReport(token, date, "gender", 1, 2000);
+            kuaishouAudienceReportDailyService.crowdAnalysisReport(token, date, "ageSegment", 1, 2000);
+            kuaishouAudienceReportDailyService.crowdAnalysisReport(token, date, "clientId", 1, 2000);
+            kuaishouAudienceReportDailyService.crowdAnalysisReport(token, date, "businessInterestTags", 1, 2000);
+        }));
+    }
+}

+ 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:

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

@@ -0,0 +1,231 @@
+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-v2
+      port: 9998
+      ip:
+      logpath: /data/applogs/xxl-job/jobhandler
+      logretentiondays: 30
+    admin:
+      addresses: http://129.28.150.229:8090/xxl-job-admin
+#      addresses: http://139.186.29.76:8090/xxl-job-admin

+ 53 - 8
module-job-kuaishou/src/main/resources/application-prod.yml

@@ -4,11 +4,6 @@ management:
       exposure:
         include: metrics,httptrace
 spring:
-  rabbitmq:
-    host: 39.106.184.70
-    port: 5672
-    username: guest
-    password: guest
   servlet:
     multipart:
       max-file-size: -1
@@ -157,6 +152,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
@@ -172,15 +182,50 @@ 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:
     executor:
-      appname: module-job-kuaishou
+      appname: module-job-kuaishou-v2
       port: 9998
       ip:
       logpath: /data/applogs/xxl-job/jobhandler
       logretentiondays: 30
     admin:
-#      addresses: http://129.28.150.229:8090/xxl-job-admin
-      addresses: http://139.186.29.76:8090/xxl-job-admin
+      addresses: http://129.28.150.229:8090/xxl-job-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:

+ 65 - 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,104 @@ 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);
             }
+            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);
+            }
+            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;
+    }
 
 
     /**

+ 55 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/ICrossAccountBatchService.java

@@ -0,0 +1,55 @@
+package cn.com.ctop.kuaishou.modules.batch.service;
+
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+
+public interface ICrossAccountBatchService {
+    /**
+     * \
+     * 组装数据 JSON
+     *
+     * @param oauthToken
+     * @param createUnitArr
+     * @param campaignOne
+     * @return
+     */
+    JSONArray assembleUnitJson(CtopOauthToken oauthToken, JSONArray createUnitArr, JSONObject campaignOne);
+
+    /**
+     * 组装数据 JSONArray
+     *
+     * @param oauthToken
+     * @param createUnitArr
+     * @param campaignList
+     * @return
+     */
+    JSONArray assembleUnitArray(CtopOauthToken oauthToken, JSONArray createUnitArr, JSONArray campaignList);
+
+    /**
+     * 跨账户批量创建组
+     *
+     * @param createUnitArr
+     * @return
+     */
+
+    JSONArray createUnit(JSONArray createUnitArr);
+
+    /**
+     * 组装批量创建创意数据
+     *
+     * @param creativeArray
+     * @param accountJson
+     * @return
+     */
+    JSONArray assembleCreativeJson(JSONArray creativeArray, JSONObject accountJson);
+
+
+    /**
+     * 跨账户批量创建计划
+     *
+     * @param creativeArray
+     * @return
+     */
+    JSONArray createCreative(JSONArray creativeArray);
+}

+ 648 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/CrossAccountBatchServiceImpl.java

@@ -0,0 +1,648 @@
+package cn.com.ctop.kuaishou.modules.batch.service.impl;
+
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.service.ICtopOauthTokenService;
+import cn.com.ctop.common.module.utils.*;
+import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouImageGet;
+import cn.com.ctop.kuaishou.modules.batch.service.*;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Slf4j
+@Service
+public class CrossAccountBatchServiceImpl implements ICrossAccountBatchService {
+
+
+    @Autowired
+    private IKuaiShouGroupService getKuaiShouGroupService;
+    @Autowired
+    private ICtopOauthTokenService oauthTokenService;
+    @Autowired
+    private IKuaiShouImageGetService imageGetService;
+    @Autowired
+    private IKuaiShouMaterialUploadService uploadService;
+    @Autowired
+    private IKuaiShouOverRunSendMessageService overRunSendMessageService;
+    @Autowired
+    private IKuaishouInterfaceService kuaishouInterfaceService;
+
+
+    /**
+     * 组装数据  jason
+     *
+     * @param oauthToken
+     * @param createUnitArr
+     * @param campaignOne
+     * @return
+     */
+    @Override
+    public JSONArray assembleUnitJson(CtopOauthToken oauthToken, JSONArray createUnitArr, JSONObject campaignOne) {
+        if (Check.isNull(campaignOne)) {
+            return createUnitArr;
+        }
+        JSONArray campaignIds = campaignOne.getJSONArray("campaignIds"); // 计划ids
+        if (Check.isNull(campaignIds)) {
+            return createUnitArr;
+
+        }
+        JSONObject createUnitJson = this.getCreateUnitJson(campaignOne);// 通用参数组装
+        JSONArray unitNames = campaignOne.getJSONArray("unitNames"); // 组名称集合
+        if (Check.isNull(unitNames)) {
+            return createUnitArr;
+        }
+        createUnitJson.put("advertiser_id", oauthToken.getAccountId());
+        createUnitJson.put("access_token", oauthToken.getAccessToken());
+        for (int i = 0; i < campaignIds.size(); i++) {
+            Long campaignId = campaignIds.getLong(i);
+            if (Check.isNull(campaignId)) {
+                continue;
+            }
+            for (int j = 0; j < unitNames.size(); j++) {
+                String unitName = unitNames.getString(j);
+                if (!Check.isNull(unitName)) {
+                    createUnitJson.remove("campaign_id");
+                    createUnitJson.remove("unit_name");
+                    createUnitJson.put("campaign_id", campaignId);
+                    createUnitJson.put("unit_name", unitName);
+                    createUnitArr.add(createUnitJson);
+                }
+            }
+        }
+        return createUnitArr;
+    }
+
+    /**
+     * 组装数据 array
+     *
+     * @param oauthToken
+     * @param createUnitArr
+     * @param campaignList
+     * @return
+     */
+    @Override
+    public JSONArray assembleUnitArray(CtopOauthToken oauthToken, JSONArray createUnitArr, JSONArray campaignList) {
+        for (int i = 0; i < campaignList.size(); i++) {
+            JSONObject campaignJson = campaignList.getJSONObject(i);
+            if (Check.isNull(campaignJson)) {
+                continue;
+            }
+            Long campaignId = campaignJson.getLong("campaignId");
+            Integer check = campaignJson.getInteger("check");
+            if (check == 1) { // 计划下组相同
+                JSONObject unitIdenticalJson = campaignJson.getJSONObject("unitIdentical");
+                if (Check.isNull(unitIdenticalJson)) {
+                    continue;
+                }
+                JSONArray unitNames = unitIdenticalJson.getJSONArray("unitName");
+                if (Check.isNull(unitNames)) {
+                    continue;
+                }
+
+                JSONObject createUnitJson = this.getCreateUnitJson(unitIdenticalJson);// 通用参数组装
+                for (int j = 0; j < unitNames.size(); j++) {
+                    String unitName = unitNames.getString(j);
+                    createUnitJson.put("advertiser_id", oauthToken.getAccountId());
+                    createUnitJson.put("access_token", oauthToken.getAccessToken());
+                    createUnitJson.remove("campaign_id");
+                    createUnitJson.remove("unit_name");
+                    createUnitJson.put("campaign_id", campaignId);
+                    createUnitJson.put("unit_name", unitName);
+                    createUnitArr.add(createUnitJson);
+                }
+            } else if (check == 2) {// 计划下组不同
+                JSONArray unitArray = campaignJson.getJSONArray("unit");
+                if (Check.isNull(unitArray)) {
+                    continue;
+                }
+                for (int j = 0; j < unitArray.size(); j++) {
+                    JSONObject unitJson = unitArray.getJSONObject(j);
+                    if (Check.isNull(unitJson)) {
+                        continue;
+                    }
+                    JSONObject createUnitJson = this.getCreateUnitJson(unitJson);// 通用参数组装
+                    createUnitJson.put("advertiser_id", oauthToken.getAccountId());
+                    createUnitJson.put("access_token", oauthToken.getAccessToken());
+                    createUnitJson.remove("campaign_id");
+                    createUnitJson.remove("unit_name");
+                    createUnitJson.put("campaign_id", campaignId);
+                    createUnitJson.put("unit_name", unitJson.getString("name"));
+                    createUnitArr.add(createUnitJson);
+                }
+            }
+        }
+        return createUnitArr;
+    }
+
+    /**
+     * 批量创建广告组
+     *
+     * @param createUnitArr
+     * @return
+     */
+    @Override
+    public JSONArray createUnit(JSONArray createUnitArr) {
+        JSONArray returnArr = new JSONArray();
+        for (int i = 0; i < createUnitArr.size(); i++) {
+            JSONObject createUnitJson = createUnitArr.getJSONObject(i);
+            if (Check.isNull(createUnitJson)) {
+                continue;
+            }
+            JSONObject resultJson = adUnitCreate(createUnitJson, 1);
+            returnArr.add(resultJson);
+
+        }
+        return returnArr;
+    }
+
+    /**
+     * 组装创建创意数据
+     *
+     * @param creativeArray
+     * @param accountJson
+     * @return
+     */
+    @Override
+    public JSONArray assembleCreativeJson(JSONArray creativeArray, JSONObject accountJson) {
+        if (Check.isNull(accountJson)) {
+            return creativeArray;
+        }
+        Long accountId = accountJson.getLong("accountId");
+        if (Check.isNull(accountId)) {
+            return creativeArray;
+        }
+        CtopOauthToken oauthToken = oauthTokenService.getTokenByAccountId(accountId);
+        if (Check.isNull(oauthToken)) {
+            return creativeArray;
+        }
+        Long unitId = accountJson.getLong("unitId");
+        if (Check.isNull(unitId)) {
+            return creativeArray;
+        }
+
+        JSONArray photoArr = accountJson.getJSONArray("photoArr");
+        if (Check.isNull(photoArr)) {
+            return creativeArray;
+        }
+
+
+        for (int i = 0; i < photoArr.size(); i++) {
+            JSONObject photoJson = photoArr.getJSONObject(i);
+            if (Check.isNull(photoJson)) {
+                continue;
+            }
+            JSONObject creativeJson = new JSONObject();
+            creativeJson.put("advertiser_id", oauthToken.getAccountId());
+            creativeJson.put("access_token", oauthToken.getAccessToken());
+            creativeJson.put("unit_id", unitId);
+            if (!Check.isNull(photoJson.getString("clickTrackUrl"))) {
+                creativeJson.put("click_track_url", photoJson.getString("clickTrackUrl")); //第三方点击检测链接
+            }
+            if (!Check.isNull(photoJson.getString("impressionUrl"))) {
+                creativeJson.put("impression_url", photoJson.getString("impressionUrl")); //第三方开始播放监测链接
+            }
+            if (!Check.isNull(photoJson.getString("adPhotoPlayedT3sUrl"))) {
+                creativeJson.put("ad_photo_played_t3s_url", photoJson.getString("adPhotoPlayedT3sUrl")); //第三方有效播放监测链接
+            }
+            if (!Check.isNull(photoJson.getString("actionbarClickUrl"))) {
+                creativeJson.put("actionbar_click_url", photoJson.getString("actionbarClickUrl")); //第三方点击按钮监测链接
+            }
+            if (!Check.isNull(photoJson.getInteger("creativeCategory"))) {
+                creativeJson.put("creative_category", photoJson.getInteger("creativeCategory")); // 创意分类
+            }
+            if (!Check.isNull(photoJson.getJSONArray("creativeTag"))) {
+                creativeJson.put("creative_tag", photoJson.getJSONArray("creativeTag")); //创意标签
+            }
+
+            Long creativeMaterialType = photoJson.getLong("creativeMaterialType");
+
+            JSONArray creatives = new JSONArray();
+            JSONObject createJson = new JSONObject();
+            if (!Check.isNull(photoJson.getString("creativeName"))) {
+                createJson.put("creative_name", photoJson.getString("creativeName")); // 创意名称
+            }
+            if (!Check.isNull(creativeMaterialType)) {
+                createJson.put("creative_material_type", creativeMaterialType); // 素材类型
+            }
+            if (!Check.isNull(photoJson.getString("actionBar_text"))) {
+                createJson.put("action_bar_text", photoJson.getString("actionBarText")); // 行动号召按钮文案
+            }
+            if (!Check.isNull(photoJson.getString("description"))) {
+                createJson.put("description", photoJson.getString("description")); // 广告语
+            }
+            if (!Check.isNull(photoJson.getString("stickerTitle"))) {
+                createJson.put("sticker_title", photoJson.getString("stickerTitle")); //封面广告语标题
+            }
+            if (!Check.isNull(photoJson.getString("overlayType"))) {
+                createJson.put("overlay_type", photoJson.getString("overlayType")); // 贴纸样式类型
+            }
+            if (!Check.isNull(photoJson.getString("exposeTag"))) {
+                createJson.put("expose_tag", photoJson.getString("exposeTag")); //广告标签
+            }
+            if (!Check.isNull(photoJson.getString("newExposeTag"))) {
+                createJson.put("new_expose_tag", photoJson.getString("newExposeTag")); // 广告标签2期
+            }
+            if (!Check.isNull(photoJson.getString("siteId"))) {
+                createJson.put("site_id", photoJson.getString("siteId")); //安卓下载中间页ID
+            }
+
+            String creativeName = photoJson.getString("creativeName");// 创意名称
+            if (4 == creativeMaterialType) { // 便利贴组装数据
+                if (!Check.isNull(photoJson.getString("shortSlogan"))) {
+                    createJson.put("short_slogan", photoJson.getString("shortSlogan")); // 便利贴创意短广告语
+                }
+                JSONArray imageTokens = photoJson.getJSONArray("imageTokens");
+                for (int j = 0; j < imageTokens.size(); j++) {
+                    String imageToken = imageTokens.getString(j);
+                    if (!Check.isNull(imageToken)) {
+                        createJson.put("image_tokens", imageToken); // 便利贴创意短广告语
+                        if (!Check.isNull(creativeName)) {
+                            createJson.put("creative_name", creativeName + "_" + RandomUtil.verifyCodeV2()); // 便利贴创意短广告语
+                        }
+                        creatives.add(createJson);
+                    }
+                }
+
+            } else { //  非便利贴组装数据
+                if (!Check.isNull(photoJson.getLong("photoId"))) {
+                    createJson.put("photo_id", photoJson.getLong("photoId")); // 视频id
+                }
+                JSONArray imageTokenArr = photoJson.getJSONArray("imageToken");
+                if (Check.isNull(imageTokenArr)) { // 如果图片为空 说明是首帧创建
+                    createJson.put("creative_name", creativeName); // 创意名称
+                    creatives.add(createJson);
+                } else { // 选择多张图片进行创建
+                    for (int j = 0; j < imageTokenArr.size(); j++) {
+                        String signature = imageTokenArr.getString(j);
+
+                        if (Check.isNull(signature)) {
+                            continue;
+                        }
+                        QueryWrapper<KuaiShouImageGet> queryWrapper = new QueryWrapper<>();
+                        queryWrapper.eq("account_id", accountId);
+                        queryWrapper.eq("signature", signature);
+                        queryWrapper.last("limit 1");
+                        String imageToken = null;
+                        KuaiShouImageGet imageGet = imageGetService.getOne(queryWrapper);
+                        if (!Check.isNull(imageGet)) {
+                            imageToken = imageGet.getImageToken();
+                        } else {
+                            String url = imageGetService.getUrlByCode(signature);
+                            imageToken = uploadService.kuauiShouImageUpload(url, signature, accountId, oauthToken.getAccessToken());
+                        }
+                        if (!Check.isNull(imageToken)) {
+                            createJson.put("image_token", imageToken); // 封面图片 token
+                        }
+                        String name = creativeName + "_" + RandomUtil.verifyCodeV2();
+                        createJson.put("creative_name", name); // 创意名称
+                        creatives.add(createJson);
+                    }
+
+                }
+
+
+            }
+            createJson.put("creatives", creatives);
+            creativeArray.add(createJson);
+        }
+
+        return creativeArray;
+    }
+
+    /**
+     * 跨账户批量创建计划
+     *
+     * @param creativeArray
+     * @return
+     */
+    @Override
+    public JSONArray createCreative(JSONArray creativeArray) {
+        JSONArray returnArr = new JSONArray();
+        for (int i = 0; i < creativeArray.size(); i++) {
+            JSONObject createUnitJson = creativeArray.getJSONObject(i);
+            if (Check.isNull(createUnitJson)) {
+                continue;
+            }
+            JSONObject resultJson = aCreativeCreate(createUnitJson, 1);
+            returnArr.add(resultJson);
+        }
+        return returnArr;
+    }
+
+    /**
+     * 调用快手创建接口
+     *
+     * @param requestJson
+     * @param count
+     * @return
+     */
+
+    private JSONObject adUnitCreate(JSONObject requestJson, Integer count) {
+        JSONObject returnJson = new JSONObject();
+        try {
+            if (Check.isNull(requestJson)) {
+                throw new Exception("参数不能为空");
+            }
+            String url = PropertiesUtils.getConfig("kuaishou_api_url") + KuaishouInterfaceConstant.AD_UNIT_CREATE;
+            Long advertiserId = requestJson.getLong("advertiser_id");
+            String accessToken = requestJson.getString("access_token");
+            Map<String, String> headers = new HashMap<>();
+            headers.put("Access-Token", accessToken);
+            headers.put("Content-Type", " application/json");
+            String result = HttpUtils.kuaiShouhttpPostRequest(url, requestJson.toJSONString(), headers);
+            JSONObject resultJson = JSONObject.parseObject(result);
+            log.info("快手创建广告组返回,accountId:{},返回结果:{}", requestJson.getString("advertiser_id"), resultJson);
+            if (!Check.isNull(resultJson)) {
+                Integer code = resultJson.getInteger("code");
+                if (code == 0) {
+                    JSONObject dataJson = resultJson.getJSONObject("data");
+                    if (!Check.isNull(dataJson)) {
+                        Long unitId = dataJson.getLong("unit_id");
+
+                        Thread thread = new Thread() {
+                            @Override
+                            public void run() {
+                                getKuaiShouGroupService.getGroupByUnitId(accessToken, advertiserId, unitId);
+                            }
+
+                        };
+                        thread.start();
+                        returnJson.put("code", 0);
+                        returnJson.put("accountId", requestJson.getLong("advertiser_id"));
+                        returnJson.put("unitId", unitId);
+                        returnJson.put("accountName", requestJson.getString("account_name"));
+                        returnJson.put("unitName", requestJson.getString("unit_name"));
+                        returnJson.put("sceneId", requestJson.getJSONArray("scene_id").toJSONString());
+                        returnJson.put("ocpxActionType", requestJson.getLong("ocpx_action_type"));
+                        returnJson.put("unitType", requestJson.getInteger("unit_type"));
+                    }
+
+                } else {
+
+                    if (code == 500000 && count <= 4) {
+                        adUnitCreate(requestJson, count + 1);
+                    }
+                    log.error("创建广告信息失败,advertiser_id:{},返回信息:{},入参:{}", advertiserId, resultJson, requestJson);
+                    returnJson.put("code", -1);
+                    returnJson.put("message", resultJson.getString("message"));
+                    returnJson.put("accountId", requestJson.getLong("advertiser_id"));
+                    returnJson.put("accountName", requestJson.getString("account_name"));
+                    returnJson.put("unitName", requestJson.getString("unit_name"));
+                }
+            } else {
+                if (count <= 4) {
+                    log.info("创建组失败,重试,入参:{}", requestJson);
+                    adUnitCreate(requestJson, count + 1);
+                }
+                log.error("快手创建广告计划返回内容为空,advertiser_id:{},入参:{}", advertiserId, requestJson);
+                returnJson.put("code", -1);
+                returnJson.put("message", "创建广告组异常,返回结果为空");
+                returnJson.put("accountName", requestJson.getString("account_name"));
+                returnJson.put("accountId", requestJson.getLong("advertiser_id"));
+                returnJson.put("unitName", requestJson.getString("unit_name"));
+
+            }
+        } catch (Exception e) {
+            log.error("创建广告计划失败,advertiser_id:{}", requestJson.getLong("advertiser_id"));
+            returnJson.put("code", -1);
+            returnJson.put("message", "创建广告组错误,系统异常");
+            returnJson.put("accountId", requestJson.getLong("advertiser_id"));
+            returnJson.put("accountName", requestJson.getString("account_name"));
+            returnJson.put("unitName", requestJson.getString("unit_name"));
+            returnJson.put("desc", "Interface exception");
+
+            e.printStackTrace();
+        }
+        return returnJson;
+    }
+
+    /**
+     * 创建创意
+     *
+     * @param
+     * @param
+     * @param requestJson
+     * @param count
+     * @return
+     */
+    private JSONObject aCreativeCreate(JSONObject requestJson, Integer count) {
+        JSONObject retuenJson = new JSONObject();
+        try {
+            Long advertiserId = requestJson.getLong("advertiser_id");
+            String accessToken = requestJson.getString("access_token");
+            String url = "https://ad.e.kuaishou.com/rest/openapi/v2/creative/batch/update";
+            requestJson.put("advertiser_id", advertiserId);
+            Map<String, String> header = new HashMap<String, String>();
+            header.put("Content-Type", " application/json");
+            header.put("Access-Token", accessToken);
+
+            String result = HttpUtils.kuaiShouhttpPostRequest(url, requestJson.toJSONString(), header);
+            JSONObject resultJson = JSONObject.parseObject(result);
+            log.info("快手创建创意返回:accountId:{},返回结果{}", requestJson.getLong("advertiser_id"), resultJson);
+            if (!Check.isNull(resultJson)) {
+                Integer code = resultJson.getInteger("code");
+                if (code == 0) {
+                    JSONObject dataJson = resultJson.getJSONObject("data");
+                    if (!Check.isNull(dataJson)) {
+                        JSONArray add_creative_ids = dataJson.getJSONArray("add_creative_ids");
+                        Thread thread = new Thread() {
+                            @Override
+                            public void run() {
+                                try {
+                                    Thread.sleep(100);
+                                    kuaishouInterfaceService.getCreativeByCreativeIds(accessToken, advertiserId, add_creative_ids);
+
+                                } catch (InterruptedException e) {
+                                    e.printStackTrace();
+                                }
+                            }
+                        };
+                        thread.start();
+                        retuenJson.put("code", 0);
+                        retuenJson.put("unit_id", requestJson.getString("unit_id"));
+                    }
+                } else {
+                    if (code == 500000 && count <= 4) {
+                        aCreativeCreate(requestJson, count + 1);
+                    }
+                    if (code == 400001 && "/rest/openapi/v2/creative/create已超日限".equals(resultJson.getString("message"))) {
+                        overRunSendMessageService.creativeOverRunSendMessage(advertiserId);
+                    }
+                    log.error("创建广告创意失败,advertiser_id:{},返回信息:{},入参:{}", advertiserId, resultJson, requestJson, count + 1);
+                    retuenJson.put("code", -1);
+                    retuenJson.put("message", resultJson.getString("message"));
+                    retuenJson.put("unit_id", requestJson.getString("unit_id"));
+                }
+            } else {
+                if (count <= 4) {
+                    aCreativeCreate(requestJson, count + 1);
+                }
+                log.error("快手创建广告创意返回内容为空,advertiser_id:{},入参:{}", advertiserId, requestJson);
+                retuenJson.put("code", -1);
+                retuenJson.put("message", "创建创意失败,返回信息为空");
+                retuenJson.put("unit_id", requestJson.getString("unit_id"));
+            }
+
+        } catch (Exception e) {
+            log.error("创建广告创意失败,advertiser_id:{}", requestJson.getLong("advertiser_id"));
+            retuenJson.put("code", -1);
+            retuenJson.put("message", e.getMessage());
+            retuenJson.put("unit_id", requestJson.getString("unit_id"));
+            e.printStackTrace();
+        }
+        return retuenJson;
+
+    }
+
+    /**
+     * 通用组创建数据组装
+     *
+     * @param campaignOne
+     * @return
+     */
+    private JSONObject getCreateUnitJson(JSONObject campaignOne) {
+        JSONObject createUnitJson = new JSONObject();
+
+
+        if (!Check.isNull(campaignOne.getString("accountName"))) {
+            createUnitJson.put("account_name", campaignOne.getString("accountName")); // 优化目标类型
+        }
+
+        if (!Check.isNull(campaignOne.getInteger("bidType"))) {
+            createUnitJson.put("bid_type", campaignOne.getInteger("bidType")); // 优化目标类型
+        }
+
+        if (!Check.isNull(campaignOne.getInteger("useAppMarket"))) {
+            createUnitJson.put("use_app_market", campaignOne.getInteger("useAppMarket")); //优先从系统应用商店下载
+        }
+        if (!Check.isNull(campaignOne.getJSONArray("appStore"))) {
+            createUnitJson.put("app_store", campaignOne.getJSONArray("appStore")); //应用商店列表
+        }
+        if (!Check.isNull(campaignOne.getLong("bid"))) {
+            createUnitJson.put("bid", campaignOne.getLong("bid")); //出价
+
+        }
+        if (!Check.isNull(campaignOne.getLong("cpaBid"))) {
+            createUnitJson.put("cpa_bid", campaignOne.getLong("cpaBid")); //出价
+
+        }
+        if (!Check.isNull(campaignOne.getInteger("smartBid"))) {
+            createUnitJson.put("smart_bid", campaignOne.getInteger("smartBid")); //优先低成本出价(设置条件)
+
+        }
+        if (!Check.isNull(campaignOne.getInteger("ocpxActionType"))) {
+            createUnitJson.put("ocpx_action_type", campaignOne.getInteger("ocpxActionType")); //优化目标
+
+        }
+        if (!Check.isNull(campaignOne.getInteger("deepConversionType"))) {
+            createUnitJson.put("deep_conversion_type", campaignOne.getInteger("deepConversionType")); //深度转化目标
+
+        }
+        if (!Check.isNull(campaignOne.getDouble("roiRatio"))) {
+            createUnitJson.put("roi_ratio", campaignOne.getDouble("roiRatio")); //付费ROI系数
+
+        }
+        if (!Check.isNull(campaignOne.getLong("deepConversionBid"))) {
+            createUnitJson.put("deep_conversion_bid", campaignOne.getLong("deepConversionBid")); //深度转化目标出价
+
+        }
+        if (!Check.isNull(campaignOne.getJSONArray("sceneId"))) {
+            createUnitJson.put("scene_id", campaignOne.getJSONArray("sceneId")); //资源位置
+
+        }
+        if (!Check.isNull(campaignOne.getInteger("unitType"))) {
+            createUnitJson.put("unit_type", campaignOne.getInteger("unitType")); //创意制作方式
+
+        }
+        if (!Check.isNull(campaignOne.getString("beginTime"))) {
+            createUnitJson.put("begin_time", campaignOne.getString("beginTime")); //投放开始时间
+
+        }
+        if (!Check.isNull(campaignOne.getString("endTime"))) {
+            createUnitJson.put("end_time", campaignOne.getString("endTime")); //投放结束时间
+
+        }
+        if (!Check.isNull(campaignOne.getString("scheduleTime"))) {
+            createUnitJson.put("schedule_time", campaignOne.getString("scheduleTime")); //投放时间段
+
+        }
+        if (!Check.isNull(campaignOne.getLong("dayBudget"))) {
+            createUnitJson.put("day_budget", campaignOne.getLong("dayBudget")); //单日预算金额
+
+        }
+        if (!Check.isNull(campaignOne.getJSONArray("dayBudgetSchedule"))) {
+            createUnitJson.put("day_budget_schedule", campaignOne.getJSONArray("dayBudgetSchedule")); //分日预算
+
+        }
+        if (!Check.isNull(campaignOne.getInteger("convert_id"))) {
+            createUnitJson.put("convert_id", campaignOne.getInteger("convert_id")); //转化目标ID
+
+        }
+        if (!Check.isNull(campaignOne.getString("url_type"))) {
+            createUnitJson.put("url_type", campaignOne.getString("url_type")); //url类型
+
+        }
+        if (!Check.isNull(campaignOne.getString("webUriType"))) {
+            createUnitJson.put("web_uri_type", campaignOne.getString("webUriType")); //url类型
+
+        }
+        if (!Check.isNull(campaignOne.getString("url"))) {
+            createUnitJson.put("url", campaignOne.getString("url")); // 投放链接
+
+        }
+        if (!Check.isNull(campaignOne.getString("schemaUri"))) {
+            createUnitJson.put("schema_uri", campaignOne.getString("schemaUri")); // 调起链接
+
+        }
+        if (!Check.isNull(campaignOne.getString("appId"))) {
+            createUnitJson.put("app_id", campaignOne.getString("appId")); // 应用ID
+
+        }
+        if (!Check.isNull(campaignOne.getInteger("showMode"))) {
+            createUnitJson.put("show_mode", campaignOne.getInteger("showMode")); // 创意展现方式
+
+        }
+        if (!Check.isNull(campaignOne.getInteger("speed"))) {
+            createUnitJson.put("speed", campaignOne.getInteger("speed")); // 投放方式
+
+        }
+        if (!Check.isNull(campaignOne.getInteger("siteType"))) {
+            createUnitJson.put("site_type", campaignOne.getInteger("siteType")); //预约广告
+
+        }
+        if (!Check.isNull(campaignOne.getInteger("giftData"))) {
+            createUnitJson.put("gift_data", campaignOne.getInteger("giftData")); //游戏礼包码
+
+        }
+        if (!Check.isNull(campaignOne.getBoolean("videoLandingPage"))) {
+            createUnitJson.put("video_landing_page", campaignOne.getBoolean("videoLandingPage")); //游戏礼包码
+
+        }
+        if (!Check.isNull(campaignOne.getBoolean("autoTarget"))) {
+            createUnitJson.put("auto_target", campaignOne.getBoolean("autoTarget")); //智能定向
+
+        }
+        if (!Check.isNull(campaignOne.getBoolean("smartCover"))) {
+            createUnitJson.put("smart_cover", campaignOne.getBoolean("smartCover")); //是否开启智能抽帧
+
+        }
+        if (!Check.isNull(campaignOne.getBoolean("assetMining"))) {
+            createUnitJson.put("asset_mining", campaignOne.getBoolean("assetMining")); //是否开启历史素材挖掘
+
+        }
+
+        if (!Check.isNull(campaignOne.getLong("templateId"))) {
+            createUnitJson.put("template_id", campaignOne.getLong("templateId")); //定向模板id
+        }
+
+        return createUnitJson;
+    }
+
+
+}

+ 12 - 3
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/IKuaiShouCommentServiceImpl.java

@@ -29,8 +29,12 @@ public class IKuaiShouCommentServiceImpl implements IKuaiShouCommentService {
 
     @Override
     public void shieldComment(Long accountId) {
-        CtopOauthToken oauthToken = oauthTokenService.getTokenByAccountId(accountId);
-        queryComments(oauthToken.getAccessToken(), accountId, 1, 500, 0);
+        try {
+            CtopOauthToken oauthToken = oauthTokenService.getTokenByAccountId(accountId);
+            queryComments(oauthToken.getAccessToken(), accountId, 1, 500, 1);
+        } catch (Exception e) {
+            log.error("屏蔽评论异常", e);
+        }
     }
 
     /**
@@ -59,6 +63,7 @@ public class IKuaiShouCommentServiceImpl implements IKuaiShouCommentService {
                 JSONObject dataJson = resultJson.getJSONObject("data");
                 JSONArray details = dataJson.getJSONArray("details");
                 if (!Check.isNull(details)) {
+                    log.info("账户({})删除第{}次,待删除条数:{}", accountId, num, details.size());
                     if (num <= 50) {
                         if (shieldCommentApi(token, accountId, details)) {
                             queryComments(token, accountId, page, pageSize, ++num);
@@ -96,7 +101,11 @@ public class IKuaiShouCommentServiceImpl implements IKuaiShouCommentService {
         JSONObject resultJson = JSONObject.parseObject(result);
         if (!Check.isNull(resultJson)) {
             Integer code = resultJson.getInteger("code");
-            return code == 0;
+            if (code == 0) {
+                return true;
+            } else {
+                log.info("删除评论失败,accountId:{},返回信息:{}", accountId, resultJson);
+            }
         }
         return false;
     }

+ 2 - 1
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaishouInterfaceServiceImpl.java

@@ -335,6 +335,7 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
 
         String result = HttpUtils.httpPostRequest(url, param, headers);
         JSONObject resultJson = JSONObject.parseObject(result);
+        System.out.println(resultJson);
         Integer code = resultJson.getInteger("code");
         String message = resultJson.getString("message");
         if (null == code || code != 0) {
@@ -3168,7 +3169,7 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
      */
     @Override
     public void getAppList(Long advertiserId, String accessToken) {
-        Integer pageSize = 500;
+        Integer pageSize = 100;
         Integer page = 1;
         getAppList2ByPage(advertiserId, accessToken, page, pageSize);
     }

+ 256 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/controller/KuaishouAudienceReportDailyController.java

@@ -0,0 +1,256 @@
+package cn.com.ctop.kuaishou.modules.report.controller;
+
+import cn.com.ctop.common.module.annotation.AutoLog;
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouAudienceReportDaily;
+import cn.com.ctop.kuaishou.modules.report.service.IKuaishouAudienceReportDailyService;
+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.PutMapping;
+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;
+
+/**
+ * 人群分析报表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-12-03
+ */
+@Slf4j
+@Api(tags = "人群分析报表")
+@RestController
+@RequestMapping("/modules.batch/kuaishouAudienceReportDaily")
+public class KuaishouAudienceReportDailyController {
+    @Autowired
+    private IKuaishouAudienceReportDailyService kuaishouAudienceReportDailyService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param kuaishouAudienceReportDaily
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @AutoLog(value = "人群分析报表-分页列表查询")
+    @ApiOperation(value = "人群分析报表-分页列表查询", notes = "人群分析报表-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<KuaishouAudienceReportDaily>> queryPageList(KuaishouAudienceReportDaily kuaishouAudienceReportDaily,
+                                                                    @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                                    @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                                    HttpServletRequest req) {
+        Result<IPage<KuaishouAudienceReportDaily>> result = new Result<>();
+        QueryWrapper<KuaishouAudienceReportDaily> queryWrapper = QueryGenerator.initQueryWrapper(kuaishouAudienceReportDaily, req.getParameterMap());
+        Page<KuaishouAudienceReportDaily> page = new Page<KuaishouAudienceReportDaily>(pageNo, pageSize);
+        IPage<KuaishouAudienceReportDaily> pageList = kuaishouAudienceReportDailyService.page(page, queryWrapper);
+        result.setSuccess(true);
+        result.setResult(pageList);
+        return result;
+    }
+
+    /**
+     * 添加
+     *
+     * @param kuaishouAudienceReportDaily
+     * @return
+     */
+    @AutoLog(value = "人群分析报表-添加")
+    @ApiOperation(value = "人群分析报表-添加", notes = "人群分析报表-添加")
+    @PostMapping(value = "/add")
+    public Result<KuaishouAudienceReportDaily> add(@RequestBody KuaishouAudienceReportDaily kuaishouAudienceReportDaily) {
+        Result<KuaishouAudienceReportDaily> result = new Result<>();
+        try {
+            kuaishouAudienceReportDailyService.save(kuaishouAudienceReportDaily);
+            result.success("添加成功!");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            result.error500("操作失败");
+        }
+        return result;
+    }
+
+    /**
+     * 编辑
+     *
+     * @param kuaishouAudienceReportDaily
+     * @return
+     */
+    @AutoLog(value = "人群分析报表-编辑")
+    @ApiOperation(value = "人群分析报表-编辑", notes = "人群分析报表-编辑")
+    @PutMapping(value = "/edit")
+    public Result<KuaishouAudienceReportDaily> edit(@RequestBody KuaishouAudienceReportDaily kuaishouAudienceReportDaily) {
+        Result<KuaishouAudienceReportDaily> result = new Result<KuaishouAudienceReportDaily>();
+        KuaishouAudienceReportDaily kuaishouAudienceReportDailyEntity = kuaishouAudienceReportDailyService.getById(kuaishouAudienceReportDaily.getId());
+        if (kuaishouAudienceReportDailyEntity == null) {
+            result.error500("未找到对应实体");
+        } else {
+            boolean ok = kuaishouAudienceReportDailyService.updateById(kuaishouAudienceReportDaily);
+            if (ok) {
+                result.success("修改成功!");
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "人群分析报表-通过id删除")
+    @ApiOperation(value = "人群分析报表-通过id删除", notes = "人群分析报表-通过id删除")
+    @DeleteMapping(value = "/delete")
+    public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
+        try {
+            kuaishouAudienceReportDailyService.removeById(id);
+        } catch (Exception e) {
+            log.error("删除失败", e.getMessage());
+            return Result.error("删除失败!");
+        }
+        return Result.ok("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "人群分析报表-批量删除")
+    @ApiOperation(value = "人群分析报表-批量删除", notes = "人群分析报表-批量删除")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<KuaishouAudienceReportDaily> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        Result<KuaishouAudienceReportDaily> result = new Result<>();
+        if (ids == null || "".equals(ids.trim())) {
+            result.error500("参数不识别!");
+        } else {
+            this.kuaishouAudienceReportDailyService.removeByIds(Arrays.asList(ids.split(",")));
+            result.success("删除成功!");
+        }
+        return result;
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "人群分析报表-通过id查询")
+    @ApiOperation(value = "人群分析报表-通过id查询", notes = "人群分析报表-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<KuaishouAudienceReportDaily> queryById(@RequestParam(name = "id", required = true) String id) {
+        Result<KuaishouAudienceReportDaily> result = new Result<>();
+        KuaishouAudienceReportDaily kuaishouAudienceReportDaily = kuaishouAudienceReportDailyService.getById(id);
+        if (kuaishouAudienceReportDaily == null) {
+            result.error500("未找到对应实体");
+        } else {
+            result.setResult(kuaishouAudienceReportDaily);
+            result.setSuccess(true);
+        }
+        return result;
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param response
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+        // Step.1 组装查询条件
+        QueryWrapper<KuaishouAudienceReportDaily> queryWrapper = null;
+        try {
+            String paramsStr = request.getParameter("paramsStr");
+            if (oConvertUtils.isNotEmpty(paramsStr)) {
+                String deString = URLDecoder.decode(paramsStr, "UTF-8");
+                KuaishouAudienceReportDaily kuaishouAudienceReportDaily = JSON.parseObject(deString, KuaishouAudienceReportDaily.class);
+                queryWrapper = QueryGenerator.initQueryWrapper(kuaishouAudienceReportDaily, request.getParameterMap());
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+
+        //Step.2 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        List<KuaishouAudienceReportDaily> pageList = kuaishouAudienceReportDailyService.list(queryWrapper);
+        //导出文件名称
+        mv.addObject(NormalExcelConstants.FILE_NAME, "人群分析报表列表");
+        mv.addObject(NormalExcelConstants.CLASS, KuaishouAudienceReportDaily.class);
+        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("人群分析报表列表数据", "导出人: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<KuaishouAudienceReportDaily> listKuaishouAudienceReportDailys = ExcelImportUtil.importExcel(file.getInputStream(), KuaishouAudienceReportDaily.class, params);
+                kuaishouAudienceReportDailyService.saveBatch(listKuaishouAudienceReportDailys);
+                return Result.ok("文件导入成功!数据行数:" + listKuaishouAudienceReportDailys.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("文件导入失败!");
+    }
+
+}

+ 750 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/entity/KuaishouAudienceReportDaily.java

@@ -0,0 +1,750 @@
+package cn.com.ctop.kuaishou.modules.report.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+/**
+ * 人群分析报表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-12-03
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_kuaishou_audience_report_daily_province对象", description = "人群分析报表")
+public class KuaishouAudienceReportDaily {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.INPUT)
+    @ApiModelProperty(value = "id")
+    private java.lang.Long id;
+    /**
+     * 账户ID
+     */
+    @Excel(name = "账户ID", width = 15)
+    @ApiModelProperty(value = "账户ID")
+    private java.lang.Long accountId;
+    /**
+     * placementType
+     */
+    @Excel(name = "placementType", width = 15)
+    @ApiModelProperty(value = "placementType")
+    private java.lang.String placementType;
+    /**
+     * 日期
+     */
+    @Excel(name = "日期", width = 15)
+    @ApiModelProperty(value = "日期")
+    private java.lang.String statDate;
+    /**
+     * 素材曝光数
+     */
+    @Excel(name = "素材曝光数", width = 15)
+    @ApiModelProperty(value = "素材曝光数")
+    private java.lang.Long aclick;
+    /**
+     * 行为数
+     */
+    @Excel(name = "行为数", width = 15)
+    @ApiModelProperty(value = "行为数")
+    private java.lang.Long bclick;
+    /**
+     * 封面点成本
+     */
+    @Excel(name = "封面点成本", width = 15)
+    @ApiModelProperty(value = "封面点成本")
+    private java.lang.Double photoClickCost;
+    /**
+     * 新增关注数
+     */
+    @Excel(name = "新增关注数", width = 15)
+    @ApiModelProperty(value = "新增关注数")
+    private java.lang.Long follow;
+    /**
+     * 取消关注数
+     */
+    @Excel(name = "取消关注数", width = 15)
+    @ApiModelProperty(value = "取消关注数")
+    private java.lang.Long cancelFollow;
+    /**
+     * 举报数
+     */
+    @Excel(name = "举报数", width = 15)
+    @ApiModelProperty(value = "举报数")
+    private java.lang.Long report;
+    /**
+     * 拉黑数
+     */
+    @Excel(name = "拉黑数", width = 15)
+    @ApiModelProperty(value = "拉黑数")
+    private java.lang.Long block;
+    /**
+     * 减少此类作品数
+     */
+    @Excel(name = "减少此类作品数", width = 15)
+    @ApiModelProperty(value = "减少此类作品数")
+    private java.lang.Long negative;
+    /**
+     * 应用下载数据-安卓下载开始数
+     */
+    @Excel(name = "应用下载数据-安卓下载开始数", width = 15)
+    @ApiModelProperty(value = "应用下载数据-安卓下载开始数")
+    private java.lang.Long downloadStarted;
+    /**
+     * 应用下载数据-安卓下载完成数
+     */
+    @Excel(name = "应用下载数据-安卓下载完成数", width = 15)
+    @ApiModelProperty(value = "应用下载数据-安卓下载完成数")
+    private java.lang.Long downloadCompleted;
+    /**
+     * 应用下载数据-激活数
+     */
+    @Excel(name = "应用下载数据-激活数", width = 15)
+    @ApiModelProperty(value = "应用下载数据-激活数")
+    private java.lang.Long activation;
+    /**
+     * 提交按钮点击数
+     */
+    @Excel(name = "提交按钮点击数", width = 15)
+    @ApiModelProperty(value = "提交按钮点击数")
+    private java.lang.Long submit;
+    /**
+     * 封面点击数
+     */
+    @Excel(name = "封面点击数", width = 15)
+    @ApiModelProperty(value = "封面点击数")
+    private java.lang.Long photoClick;
+    /**
+     * 封面点击率
+     */
+    @Excel(name = "封面点击率", width = 15)
+    @ApiModelProperty(value = "封面点击率")
+    private java.lang.Double photoClickRatio;
+    /**
+     * 花费
+     */
+    @Excel(name = "花费", width = 15)
+    @ApiModelProperty(value = "花费")
+    private java.lang.Double charge;
+    /**
+     * 行为率
+     */
+    @Excel(name = "行为率", width = 15)
+    @ApiModelProperty(value = "行为率")
+    private java.lang.Double actionRatio;
+    /**
+     * 平均千次曝光花费(元)
+     */
+    @Excel(name = "平均千次曝光花费(元)", width = 15)
+    @ApiModelProperty(value = "平均千次曝光花费(元)")
+    private java.math.BigDecimal impression_1kCost;
+    /**
+     * 平均行为单价(元)
+     */
+    @Excel(name = "平均行为单价(元)", width = 15)
+    @ApiModelProperty(value = "平均行为单价(元)")
+    private java.math.BigDecimal actionCost;
+    /**
+     * 应用下载数据-首日付费次数
+     */
+    @Excel(name = "应用下载数据-首日付费次数", width = 15)
+    @ApiModelProperty(value = "应用下载数据-首日付费次数")
+    private java.lang.Long eventPayFirstDay;
+    /**
+     * 应用下载数据-首日付费金额
+     */
+    @Excel(name = "应用下载数据-首日付费金额", width = 15)
+    @ApiModelProperty(value = "应用下载数据-首日付费金额")
+    private java.math.BigDecimal eventPayPurchaseAmountFirstDay;
+    /**
+     * 应用下载数据-首日ROI
+     */
+    @Excel(name = "应用下载数据-首日ROI", width = 15)
+    @ApiModelProperty(value = "应用下载数据-首日ROI")
+    private java.lang.Double eventPayFirstDayRoi;
+    /**
+     * 应用下载数据-付费次数
+     */
+    @Excel(name = "应用下载数据-付费次数", width = 15)
+    @ApiModelProperty(value = "应用下载数据-付费次数")
+    private java.lang.Long eventPay;
+    /**
+     * 应用下载数据-付费金额
+     */
+    @Excel(name = "应用下载数据-付费金额", width = 15)
+    @ApiModelProperty(value = "应用下载数据-付费金额")
+    private java.math.BigDecimal eventPayPurchaseAmount;
+    /**
+     * 应用下载数据-ROI
+     */
+    @Excel(name = "应用下载数据-ROI", width = 15)
+    @ApiModelProperty(value = "应用下载数据-ROI")
+    private java.lang.Double eventPayRoi;
+    /**
+     * 应用下载数据-注册数
+     */
+    @Excel(name = "应用下载数据-注册数", width = 15)
+    @ApiModelProperty(value = "应用下载数据-注册数")
+    private java.lang.Long eventRegister;
+    /**
+     * 应用下载数据-注册成本
+     */
+    @Excel(name = "应用下载数据-注册成本", width = 15)
+    @ApiModelProperty(value = "应用下载数据-注册成本")
+    private java.math.BigDecimal eventRegisterCost;
+    /**
+     * 应用下载数据-注册率
+     */
+    @Excel(name = "应用下载数据-注册率", width = 15)
+    @ApiModelProperty(value = "应用下载数据-注册率")
+    private java.lang.Double eventRegisterRatio;
+    /**
+     * 应用下载数据-完件数
+     */
+    @Excel(name = "应用下载数据-完件数", width = 15)
+    @ApiModelProperty(value = "应用下载数据-完件数")
+    private java.lang.Long eventJinJianApp;
+    /**
+     * 应用下载数据-完件成本
+     */
+    @Excel(name = "应用下载数据-完件成本", width = 15)
+    @ApiModelProperty(value = "应用下载数据-完件成本")
+    private java.math.BigDecimal eventJinJianAppCost;
+    /**
+     * 应用下载数据-授信数
+     */
+    @Excel(name = "应用下载数据-授信数", width = 15)
+    @ApiModelProperty(value = "应用下载数据-授信数")
+    private java.lang.Long eventCreditGrantApp;
+    /**
+     * 应用下载数据-授信成本
+     */
+    @Excel(name = "应用下载数据-授信成本", width = 15)
+    @ApiModelProperty(value = "应用下载数据-授信成本")
+    private java.math.BigDecimal eventCreditGrantAppCost;
+    /**
+     * 应用下载数据-付款成功数
+     */
+    @Excel(name = "应用下载数据-付款成功数", width = 15)
+    @ApiModelProperty(value = "应用下载数据-付款成功数")
+    private java.lang.Long eventOrderPaid;
+    /**
+     * 应用下载数据-付款成功金额
+     */
+    @Excel(name = "应用下载数据-付款成功金额", width = 15)
+    @ApiModelProperty(value = "应用下载数据-付款成功金额")
+    private java.math.BigDecimal eventOrderPaidPurchaseAmount;
+    /**
+     * 落地页数据-落地页完件数
+     */
+    @Excel(name = "落地页数据-落地页完件数", width = 15)
+    @ApiModelProperty(value = "落地页数据-落地页完件数")
+    private java.lang.Long eventJinJianLandingPage;
+    /**
+     * 落地页数据-落地页完件成本
+     */
+    @Excel(name = "落地页数据-落地页完件成本", width = 15)
+    @ApiModelProperty(value = "落地页数据-落地页完件成本")
+    private java.math.BigDecimal eventJinJianLandingPageCost;
+    /**
+     * 落地页数据-落地页授信数
+     */
+    @Excel(name = "落地页数据-落地页授信数", width = 15)
+    @ApiModelProperty(value = "落地页数据-落地页授信数")
+    private java.lang.Long eventCreditGrantLandingPage;
+    /**
+     * 落地页数据-落地页授信成本
+     */
+    @Excel(name = "落地页数据-落地页授信成本", width = 15)
+    @ApiModelProperty(value = "落地页数据-落地页授信成本")
+    private java.math.BigDecimal eventCreditGrantLandingPageCost;
+    /**
+     * 落地页数据-落地页授信率
+     */
+    @Excel(name = "落地页数据-落地页授信率", width = 15)
+    @ApiModelProperty(value = "落地页数据-落地页授信率")
+    private java.lang.Double eventCreditGrantLandingRatio;
+    /**
+     * 应用下载数据-次留成本(仅支持分日查询)
+     */
+    @Excel(name = "应用下载数据-次留成本(仅支持分日查询)", width = 15)
+    @ApiModelProperty(value = "应用下载数据-次留成本(仅支持分日查询)")
+    private java.math.BigDecimal eventNextDayStayCost;
+    /**
+     * 应用下载数据-次留率(仅支持分日查询)
+     */
+    @Excel(name = "应用下载数据-次留率(仅支持分日查询)", width = 15)
+    @ApiModelProperty(value = "应用下载数据-次留率(仅支持分日查询)")
+    private java.math.BigDecimal eventNextDayStayRatio;
+    /**
+     * 落地页数据-表单提交点击率
+     */
+    @Excel(name = "落地页数据-表单提交点击率", width = 15)
+    @ApiModelProperty(value = "落地页数据-表单提交点击率")
+    private java.lang.Double formActionRatio;
+    /**
+     * 应用下载数据-单次付款成本
+     */
+    @Excel(name = "应用下载数据-单次付款成本", width = 15)
+    @ApiModelProperty(value = "应用下载数据-单次付款成本")
+    private java.math.BigDecimal eventOrderPaidCost;
+    /**
+     * 应用下载数据-次留数(仅支持分日查询)
+     */
+    @Excel(name = "应用下载数据-次留数(仅支持分日查询)", width = 15)
+    @ApiModelProperty(value = "应用下载数据-次留数(仅支持分日查询)")
+    private java.lang.Long eventNextDayStay;
+    /**
+     * 落地页数据-表单提交单价
+     */
+    @Excel(name = "落地页数据-表单提交单价", width = 15)
+    @ApiModelProperty(value = "落地页数据-表单提交单价")
+    private java.math.BigDecimal formCost;
+    /**
+     * 落地页数据-表单提交数
+     */
+    @Excel(name = "落地页数据-表单提交数", width = 15)
+    @ApiModelProperty(value = "落地页数据-表单提交数")
+    private java.lang.Long formCount;
+    /**
+     * 3s播放率
+     */
+    @Excel(name = "3s播放率", width = 15)
+    @ApiModelProperty(value = "3s播放率")
+    private java.lang.Double play_3sRatio;
+    /**
+     * 数据小时
+     */
+    @Excel(name = "数据小时", width = 15)
+    @ApiModelProperty(value = "数据小时")
+    private java.lang.Long statHour;
+    /**
+     * click1kCost
+     */
+    @Excel(name = "click1kCost", width = 15)
+    @ApiModelProperty(value = "click1kCost")
+    private java.lang.String click_1kCost;
+    /**
+     * 落地页数据-有效线索数
+     */
+    @Excel(name = "落地页数据-有效线索数", width = 15)
+    @ApiModelProperty(value = "落地页数据-有效线索数")
+    private java.lang.Long eventValidClues;
+    /**
+     * 落地页数据-有效线索成本
+     */
+    @Excel(name = "落地页数据-有效线索成本", width = 15)
+    @ApiModelProperty(value = "落地页数据-有效线索成本")
+    private java.math.BigDecimal eventValidCluesCost;
+    /**
+     * 商品成交数
+     */
+    @Excel(name = "商品成交数", width = 15)
+    @ApiModelProperty(value = "商品成交数")
+    private java.lang.Long adProductCnt;
+    /**
+     * 商品访问数
+     */
+    @Excel(name = "商品访问数", width = 15)
+    @ApiModelProperty(value = "商品访问数")
+    private java.lang.Long eventGoodsView;
+    /**
+     * 涨粉量
+     */
+    @Excel(name = "涨粉量", width = 15)
+    @ApiModelProperty(value = "涨粉量")
+    private java.lang.Long merchantRecoFans;
+    /**
+     * 涨粉量
+     */
+    @Excel(name = "涨粉量", width = 15)
+    @ApiModelProperty(value = "涨粉量")
+    private java.lang.Long eventOrderAmountRoi;
+    /**
+     * 新增付费人数
+     */
+    @Excel(name = "新增付费人数", width = 15)
+    @ApiModelProperty(value = "新增付费人数")
+    private java.lang.Long eventNewUserPay;
+    /**
+     * 新增付费人数成本:当日消耗 / 当日新增
+     */
+    @Excel(name = "新增付费人数成本:当日消耗 / 当日新增", width = 15)
+    @ApiModelProperty(value = "新增付费人数成本:当日消耗 / 当日新增")
+    private java.math.BigDecimal eventNewUserPayCost;
+    /**
+     * 新增付费人数率:当日新增付费人数 / 当日行为数
+     */
+    @Excel(name = "新增付费人数率:当日新增付费人数 / 当日行为数", width = 15)
+    @ApiModelProperty(value = "新增付费人数率:当日新增付费人数 / 当日行为数")
+    private java.math.BigDecimal eventNewUserPayRatio;
+    /**
+     * 按钮点击数
+     */
+    @Excel(name = "按钮点击数", width = 15)
+    @ApiModelProperty(value = "按钮点击数")
+    private java.lang.Long eventButtonClick;
+    /**
+     * 按钮点击成本
+     */
+    @Excel(name = "按钮点击成本", width = 15)
+    @ApiModelProperty(value = "按钮点击成本")
+    private java.math.BigDecimal eventButtonClickCost;
+    /**
+     * 按钮点击成率
+     */
+    @Excel(name = "按钮点击成率", width = 15)
+    @ApiModelProperty(value = "按钮点击成率")
+    private java.math.BigDecimal eventButtonClickRatio;
+    /**
+     * 5s播放率
+     */
+    @Excel(name = "5s播放率", width = 15)
+    @ApiModelProperty(value = "5s播放率")
+    private java.math.BigDecimal play_5sRatio;
+    /**
+     * 完播率
+     */
+    @Excel(name = "完播率", width = 15)
+    @ApiModelProperty(value = "完播率")
+    private java.math.BigDecimal playEndRatio;
+    /**
+     * 订单支付率
+     */
+    @Excel(name = "订单支付率", width = 15)
+    @ApiModelProperty(value = "订单支付率")
+    private java.math.BigDecimal eventOrderPaidRoi;
+    /**
+     * 新增完件人数
+     */
+    @Excel(name = "新增完件人数", width = 15)
+    @ApiModelProperty(value = "新增完件人数")
+    private java.lang.Long eventNewUserJinjianApp;
+    /**
+     * 新增完件人数成本
+     */
+    @Excel(name = "新增完件人数成本", width = 15)
+    @ApiModelProperty(value = "新增完件人数成本")
+    private java.math.BigDecimal eventNewUserJinjianAppCost;
+    /**
+     * 新增完件人数率
+     */
+    @Excel(name = "新增完件人数率", width = 15)
+    @ApiModelProperty(value = "新增完件人数率")
+    private java.math.BigDecimal eventNewUserJinjianAppRoi;
+    /**
+     * 新增授信人数
+     */
+    @Excel(name = "新增授信人数", width = 15)
+    @ApiModelProperty(value = "新增授信人数")
+    private java.lang.Long eventNewUserCreditGrantApp;
+    /**
+     * 新增授信人数成本
+     */
+    @Excel(name = "新增授信人数成本", width = 15)
+    @ApiModelProperty(value = "新增授信人数成本")
+    private java.math.BigDecimal eventNewUserCreditGrantAppCost;
+    /**
+     * 新增授信人数率
+     */
+    @Excel(name = "新增授信人数率", width = 15)
+    @ApiModelProperty(value = "新增授信人数率")
+    private java.math.BigDecimal eventNewUserCreditGrantAppRoi;
+    /**
+     * 落地页新增完件人数
+     */
+    @Excel(name = "落地页新增完件人数", width = 15)
+    @ApiModelProperty(value = "落地页新增完件人数")
+    private java.lang.Long eventNewUserJinjianPage;
+    /**
+     * 落地页新增完件人数成本
+     */
+    @Excel(name = "落地页新增完件人数成本", width = 15)
+    @ApiModelProperty(value = "落地页新增完件人数成本")
+    private java.math.BigDecimal eventNewUserJinjianPageCost;
+    /**
+     * 落地页新增完件人数率
+     */
+    @Excel(name = "落地页新增完件人数率", width = 15)
+    @ApiModelProperty(value = "落地页新增完件人数率")
+    private java.math.BigDecimal eventNewUserJinjianPageRoi;
+    /**
+     * 落地页新增授信人数
+     */
+    @Excel(name = "落地页新增授信人数", width = 15)
+    @ApiModelProperty(value = "落地页新增授信人数")
+    private java.lang.Long eventNewUserCreditGrantPage;
+    /**
+     * 落地页新增授信人数成本
+     */
+    @Excel(name = "落地页新增授信人数成本", width = 15)
+    @ApiModelProperty(value = "落地页新增授信人数成本")
+    private java.math.BigDecimal eventNewUserCreditGrantPageCost;
+    /**
+     * 落地页新增授信人数率
+     */
+    @Excel(name = "落地页新增授信人数率", width = 15)
+    @ApiModelProperty(value = "落地页新增授信人数率")
+    private java.math.BigDecimal eventNewUserCreditGrantPageRoi;
+    /**
+     * eventAppointForm
+     */
+    @Excel(name = "eventAppointForm", width = 15)
+    @ApiModelProperty(value = "eventAppointForm")
+    private java.lang.Long eventAppointForm;
+    /**
+     * eventAppointFormCost
+     */
+    @Excel(name = "eventAppointFormCost", width = 15)
+    @ApiModelProperty(value = "eventAppointFormCost")
+    private java.math.BigDecimal eventAppointFormCost;
+    /**
+     * eventAppointFormRatio
+     */
+    @Excel(name = "eventAppointFormRatio", width = 15)
+    @ApiModelProperty(value = "eventAppointFormRatio")
+    private java.math.BigDecimal eventAppointFormRatio;
+    /**
+     * eventAppointJumpClick
+     */
+    @Excel(name = "eventAppointJumpClick", width = 15)
+    @ApiModelProperty(value = "eventAppointJumpClick")
+    private java.lang.Long eventAppointJumpClick;
+    /**
+     * eventAppointJumpClickCost
+     */
+    @Excel(name = "eventAppointJumpClickCost", width = 15)
+    @ApiModelProperty(value = "eventAppointJumpClickCost")
+    private java.math.BigDecimal eventAppointJumpClickCost;
+    /**
+     * eventAppointJumpClickRatio
+     */
+    @Excel(name = "eventAppointJumpClickRatio", width = 15)
+    @ApiModelProperty(value = "eventAppointJumpClickRatio")
+    private java.math.BigDecimal eventAppointJumpClickRatio;
+    /**
+     * unionEventPayPurchaseAmount7d
+     */
+    @Excel(name = "unionEventPayPurchaseAmount_7d", width = 15)
+    @ApiModelProperty(value = "unionEventPayPurchaseAmount_7d")
+    private java.lang.String unionEventPayPurchaseAmount_7d;
+    /**
+     * 省份
+     */
+    @Excel(name = "省份", width = 15)
+    @ApiModelProperty(value = "省份")
+    private java.lang.String province;
+    /**
+     * eventAppInvoked
+     */
+    @Excel(name = "eventAppInvoked", width = 15)
+    @ApiModelProperty(value = "eventAppInvoked")
+    private java.lang.String eventAppInvoked;
+    /**
+     * unionEventPayPurchaseAmount7dRoi
+     */
+    @Excel(name = "unionEventPayPurchaseAmount_7dRoi", width = 15)
+    @ApiModelProperty(value = "unionEventPayPurchaseAmount_7dRoi")
+    private java.lang.String unionEventPayPurchaseAmount_7dRoi;
+    /**
+     * eventAddShoppingCartCost
+     */
+    @Excel(name = "eventAddShoppingCartCost", width = 15)
+    @ApiModelProperty(value = "eventAddShoppingCartCost")
+    private java.lang.String eventAddShoppingCartCost;
+    /**
+     * 性别
+     */
+    @Excel(name = "性别", width = 15)
+    @ApiModelProperty(value = "性别")
+    private java.lang.String gender;
+    /**
+     * 城市
+     */
+    @Excel(name = "城市", width = 15)
+    @ApiModelProperty(value = "城市")
+    private java.lang.String city;
+    /**
+     * eventAdWatchTimesRatio
+     */
+    @Excel(name = "eventAdWatchTimesRatio", width = 15)
+    @ApiModelProperty(value = "eventAdWatchTimesRatio")
+    private java.lang.String eventAdWatchTimesRatio;
+    /**
+     * 分享数
+     */
+    @Excel(name = "分享数", width = 15)
+    @ApiModelProperty(value = "分享数")
+    private java.lang.String shares;
+    /**
+     * 商业兴趣
+     */
+    @Excel(name = "商业兴趣", width = 15)
+    @ApiModelProperty(value = "商业兴趣")
+    private java.lang.String businessInterestTags;
+    /**
+     * eventWatchAppAd
+     */
+    @Excel(name = "eventWatchAppAd", width = 15)
+    @ApiModelProperty(value = "eventWatchAppAd")
+    private java.lang.String eventWatchAppAd;
+    /**
+     * eventMultiConversionCost
+     */
+    @Excel(name = "eventMultiConversionCost", width = 15)
+    @ApiModelProperty(value = "eventMultiConversionCost")
+    private java.lang.String eventMultiConversionCost;
+    /**
+     * 涨粉成本
+     */
+    @Excel(name = "涨粉成本", width = 15)
+    @ApiModelProperty(value = "涨粉成本")
+    private java.math.BigDecimal merchantRecoFansCost;
+    /**
+     * 广告投放场景
+     */
+    @Excel(name = "广告投放场景", width = 15)
+    @ApiModelProperty(value = "广告投放场景")
+    private java.lang.String adScene;
+    /**
+     * eventAdWatchTimesCost
+     */
+    @Excel(name = "eventAdWatchTimesCost", width = 15)
+    @ApiModelProperty(value = "eventAdWatchTimesCost")
+    private java.lang.String eventAdWatchTimesCost;
+    /**
+     * eventAddShoppingCart
+     */
+    @Excel(name = "eventAddShoppingCart", width = 15)
+    @ApiModelProperty(value = "eventAddShoppingCart")
+    private java.lang.String eventAddShoppingCart;
+    /**
+     * 年龄
+     */
+    @Excel(name = "年龄", width = 15)
+    @ApiModelProperty(value = "年龄")
+    private java.lang.String ageSegment;
+    /**
+     * 点赞数
+     */
+    @Excel(name = "点赞数", width = 15)
+    @ApiModelProperty(value = "点赞数")
+    private java.lang.Long photoLike;
+    /**
+     * 微信复制数
+     */
+    @Excel(name = "微信复制数", width = 15)
+    @ApiModelProperty(value = "微信复制数")
+    private java.lang.Long eventAddWechat;
+    /**
+     * 微信复制成本
+     */
+    @Excel(name = "微信复制成本", width = 15)
+    @ApiModelProperty(value = "微信复制成本")
+    private java.math.BigDecimal eventAddWechatCost;
+    /**
+     * 微信复制率
+     */
+    @Excel(name = "微信复制率", width = 15)
+    @ApiModelProperty(value = "微信复制率")
+    private java.math.BigDecimal eventAddWechatRatio;
+    /**
+     * eventAppInvokedCost
+     */
+    @Excel(name = "eventAppInvokedCost", width = 15)
+    @ApiModelProperty(value = "eventAppInvokedCost")
+    private java.math.BigDecimal eventAppInvokedCost;
+    /**
+     * eventMultiConversion
+     */
+    @Excel(name = "eventMultiConversion", width = 15)
+    @ApiModelProperty(value = "eventMultiConversion")
+    private java.lang.String eventMultiConversion;
+    /**
+     * eventDspGiftForm
+     */
+    @Excel(name = "eventDspGiftForm", width = 15)
+    @ApiModelProperty(value = "eventDspGiftForm")
+    private java.lang.String eventDspGiftForm;
+    /**
+     * eventAppInvokedRatio
+     */
+    @Excel(name = "eventAppInvokedRatio", width = 15)
+    @ApiModelProperty(value = "eventAppInvokedRatio")
+    private java.lang.String eventAppInvokedRatio;
+    /**
+     * 封面曝光数
+     */
+    @Excel(name = "封面曝光数", width = 15)
+    @ApiModelProperty(value = "封面曝光数")
+    private java.lang.Long photoShow;
+    /**
+     * eventMultiConversionRatio
+     */
+    @Excel(name = "eventMultiConversionRatio", width = 15)
+    @ApiModelProperty(value = "eventMultiConversionRatio")
+    private java.lang.String eventMultiConversionRatio;
+    /**
+     * 系统
+     */
+    @Excel(name = "系统", width = 15)
+    @ApiModelProperty(value = "系统")
+    private java.lang.String client;
+    /**
+     * 商品访问成本
+     */
+    @Excel(name = "商品访问成本", width = 15)
+    @ApiModelProperty(value = "商品访问成本")
+    private java.math.BigDecimal eventGoodsViewCost;
+    /**
+     * 应用下载数据-授信率
+     */
+    @Excel(name = "应用下载数据-授信率", width = 15)
+    @ApiModelProperty(value = "应用下载数据-授信率")
+    private java.math.BigDecimal eventCreditGrantAppRatio;
+    /**
+     * eventAdWatchTimes
+     */
+    @Excel(name = "eventAdWatchTimes", width = 15)
+    @ApiModelProperty(value = "eventAdWatchTimes")
+    private java.lang.String eventAdWatchTimes;
+    /**
+     * 评论数
+     */
+    @Excel(name = "评论数", width = 15)
+    @ApiModelProperty(value = "评论数")
+    private java.lang.Long comments;
+    /**
+     * 创建时间
+     */
+    @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private java.util.Date createTime;
+    /**
+     * 修改时间
+     */
+    @Excel(name = "修改时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "修改时间")
+    private java.util.Date updateTime;
+}

+ 22 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/entity/KuaishouAudienceReportDailyAge.java

@@ -0,0 +1,22 @@
+package cn.com.ctop.kuaishou.modules.report.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * 年龄人群分析报表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-12-03
+ */
+@Data
+@TableName("ctop_kuaishou_audience_report_daily_age")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_kuaishou_audience_report_daily_age对象", description = "年龄人群分析报表")
+public class KuaishouAudienceReportDailyAge extends KuaishouAudienceReportDaily {
+}

+ 30 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/entity/KuaishouAudienceReportDailyBussiness.java

@@ -0,0 +1,30 @@
+package cn.com.ctop.kuaishou.modules.report.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+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 org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 商业兴趣人群分析报表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-12-03
+ */
+@Data
+@TableName("ctop_kuaishou_audience_report_daily_business")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_kuaishou_audience_report_daily_business对象", description = "商业兴趣人群分析报表")
+public class KuaishouAudienceReportDailyBussiness extends KuaishouAudienceReportDaily {
+}

+ 30 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/entity/KuaishouAudienceReportDailyCity.java

@@ -0,0 +1,30 @@
+package cn.com.ctop.kuaishou.modules.report.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+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 org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 城市人群分析报表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-12-03
+ */
+@Data
+@TableName("ctop_kuaishou_audience_report_daily_city")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_kuaishou_audience_report_daily_city对象", description = "城市人群分析报表")
+public class KuaishouAudienceReportDailyCity  extends KuaishouAudienceReportDaily {
+}

+ 31 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/entity/KuaishouAudienceReportDailyClient.java

@@ -0,0 +1,31 @@
+package cn.com.ctop.kuaishou.modules.report.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+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 org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 系统人群分析报表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-12-03
+ */
+@Data
+@TableName("ctop_kuaishou_audience_report_daily_client")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_kuaishou_audience_report_daily_client对象", description = "系统人群分析报表")
+public class KuaishouAudienceReportDailyClient  extends KuaishouAudienceReportDaily {
+}
+

+ 30 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/entity/KuaishouAudienceReportDailyGender.java

@@ -0,0 +1,30 @@
+package cn.com.ctop.kuaishou.modules.report.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+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 org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 性别分析报表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-12-03
+ */
+@Data
+@TableName("ctop_kuaishou_audience_report_daily_gender")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_kuaishou_audience_report_daily_gender对象", description = "人群分析报表")
+public class KuaishouAudienceReportDailyGender  extends KuaishouAudienceReportDaily {
+}

+ 749 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/entity/KuaishouAudienceReportDailyProvince.java

@@ -0,0 +1,749 @@
+package cn.com.ctop.kuaishou.modules.report.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+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 org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 省级地域人群分析报表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-12-03
+ */
+@Data
+@TableName("ctop_kuaishou_audience_report_daily_province")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_kuaishou_audience_report_daily_province对象", description = "人群分析报表")
+public class KuaishouAudienceReportDailyProvince  extends KuaishouAudienceReportDaily{
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.INPUT)
+    @ApiModelProperty(value = "id")
+    private Long id;
+    /**
+     * 账户ID
+     */
+    @Excel(name = "账户ID", width = 15)
+    @ApiModelProperty(value = "账户ID")
+    private Long accountId;
+    /**
+     * placementType
+     */
+    @Excel(name = "placementType", width = 15)
+    @ApiModelProperty(value = "placementType")
+    private String placementType;
+    /**
+     * 日期
+     */
+    @Excel(name = "日期", width = 15)
+    @ApiModelProperty(value = "日期")
+    private String statDate;
+    /**
+     * 素材曝光数
+     */
+    @Excel(name = "素材曝光数", width = 15)
+    @ApiModelProperty(value = "素材曝光数")
+    private Long aclick;
+    /**
+     * 行为数
+     */
+    @Excel(name = "行为数", width = 15)
+    @ApiModelProperty(value = "行为数")
+    private Long bclick;
+    /**
+     * 封面点成本
+     */
+    @Excel(name = "封面点成本", width = 15)
+    @ApiModelProperty(value = "封面点成本")
+    private Double photoClickCost;
+    /**
+     * 新增关注数
+     */
+    @Excel(name = "新增关注数", width = 15)
+    @ApiModelProperty(value = "新增关注数")
+    private Long follow;
+    /**
+     * 取消关注数
+     */
+    @Excel(name = "取消关注数", width = 15)
+    @ApiModelProperty(value = "取消关注数")
+    private Long cancelFollow;
+    /**
+     * 举报数
+     */
+    @Excel(name = "举报数", width = 15)
+    @ApiModelProperty(value = "举报数")
+    private Long report;
+    /**
+     * 拉黑数
+     */
+    @Excel(name = "拉黑数", width = 15)
+    @ApiModelProperty(value = "拉黑数")
+    private Long block;
+    /**
+     * 减少此类作品数
+     */
+    @Excel(name = "减少此类作品数", width = 15)
+    @ApiModelProperty(value = "减少此类作品数")
+    private Long negative;
+    /**
+     * 应用下载数据-安卓下载开始数
+     */
+    @Excel(name = "应用下载数据-安卓下载开始数", width = 15)
+    @ApiModelProperty(value = "应用下载数据-安卓下载开始数")
+    private Long downloadStarted;
+    /**
+     * 应用下载数据-安卓下载完成数
+     */
+    @Excel(name = "应用下载数据-安卓下载完成数", width = 15)
+    @ApiModelProperty(value = "应用下载数据-安卓下载完成数")
+    private Long downloadCompleted;
+    /**
+     * 应用下载数据-激活数
+     */
+    @Excel(name = "应用下载数据-激活数", width = 15)
+    @ApiModelProperty(value = "应用下载数据-激活数")
+    private Long activation;
+    /**
+     * 提交按钮点击数
+     */
+    @Excel(name = "提交按钮点击数", width = 15)
+    @ApiModelProperty(value = "提交按钮点击数")
+    private Long submit;
+    /**
+     * 封面点击数
+     */
+    @Excel(name = "封面点击数", width = 15)
+    @ApiModelProperty(value = "封面点击数")
+    private Long photoClick;
+    /**
+     * 封面点击率
+     */
+    @Excel(name = "封面点击率", width = 15)
+    @ApiModelProperty(value = "封面点击率")
+    private Double photoClickRatio;
+    /**
+     * 花费
+     */
+    @Excel(name = "花费", width = 15)
+    @ApiModelProperty(value = "花费")
+    private Double charge;
+    /**
+     * 行为率
+     */
+    @Excel(name = "行为率", width = 15)
+    @ApiModelProperty(value = "行为率")
+    private Double actionRatio;
+    /**
+     * 平均千次曝光花费(元)
+     */
+    @Excel(name = "平均千次曝光花费(元)", width = 15)
+    @ApiModelProperty(value = "平均千次曝光花费(元)")
+    private java.math.BigDecimal impression_1kCost;
+    /**
+     * 平均行为单价(元)
+     */
+    @Excel(name = "平均行为单价(元)", width = 15)
+    @ApiModelProperty(value = "平均行为单价(元)")
+    private java.math.BigDecimal actionCost;
+    /**
+     * 应用下载数据-首日付费次数
+     */
+    @Excel(name = "应用下载数据-首日付费次数", width = 15)
+    @ApiModelProperty(value = "应用下载数据-首日付费次数")
+    private Long eventPayFirstDay;
+    /**
+     * 应用下载数据-首日付费金额
+     */
+    @Excel(name = "应用下载数据-首日付费金额", width = 15)
+    @ApiModelProperty(value = "应用下载数据-首日付费金额")
+    private java.math.BigDecimal eventPayPurchaseAmountFirstDay;
+    /**
+     * 应用下载数据-首日ROI
+     */
+    @Excel(name = "应用下载数据-首日ROI", width = 15)
+    @ApiModelProperty(value = "应用下载数据-首日ROI")
+    private Double eventPayFirstDayRoi;
+    /**
+     * 应用下载数据-付费次数
+     */
+    @Excel(name = "应用下载数据-付费次数", width = 15)
+    @ApiModelProperty(value = "应用下载数据-付费次数")
+    private Long eventPay;
+    /**
+     * 应用下载数据-付费金额
+     */
+    @Excel(name = "应用下载数据-付费金额", width = 15)
+    @ApiModelProperty(value = "应用下载数据-付费金额")
+    private java.math.BigDecimal eventPayPurchaseAmount;
+    /**
+     * 应用下载数据-ROI
+     */
+    @Excel(name = "应用下载数据-ROI", width = 15)
+    @ApiModelProperty(value = "应用下载数据-ROI")
+    private Double eventPayRoi;
+    /**
+     * 应用下载数据-注册数
+     */
+    @Excel(name = "应用下载数据-注册数", width = 15)
+    @ApiModelProperty(value = "应用下载数据-注册数")
+    private Long eventRegister;
+    /**
+     * 应用下载数据-注册成本
+     */
+    @Excel(name = "应用下载数据-注册成本", width = 15)
+    @ApiModelProperty(value = "应用下载数据-注册成本")
+    private java.math.BigDecimal eventRegisterCost;
+    /**
+     * 应用下载数据-注册率
+     */
+    @Excel(name = "应用下载数据-注册率", width = 15)
+    @ApiModelProperty(value = "应用下载数据-注册率")
+    private Double eventRegisterRatio;
+    /**
+     * 应用下载数据-完件数
+     */
+    @Excel(name = "应用下载数据-完件数", width = 15)
+    @ApiModelProperty(value = "应用下载数据-完件数")
+    private Long eventJinJianApp;
+    /**
+     * 应用下载数据-完件成本
+     */
+    @Excel(name = "应用下载数据-完件成本", width = 15)
+    @ApiModelProperty(value = "应用下载数据-完件成本")
+    private java.math.BigDecimal eventJinJianAppCost;
+    /**
+     * 应用下载数据-授信数
+     */
+    @Excel(name = "应用下载数据-授信数", width = 15)
+    @ApiModelProperty(value = "应用下载数据-授信数")
+    private Long eventCreditGrantApp;
+    /**
+     * 应用下载数据-授信成本
+     */
+    @Excel(name = "应用下载数据-授信成本", width = 15)
+    @ApiModelProperty(value = "应用下载数据-授信成本")
+    private java.math.BigDecimal eventCreditGrantAppCost;
+    /**
+     * 应用下载数据-付款成功数
+     */
+    @Excel(name = "应用下载数据-付款成功数", width = 15)
+    @ApiModelProperty(value = "应用下载数据-付款成功数")
+    private Long eventOrderPaid;
+    /**
+     * 应用下载数据-付款成功金额
+     */
+    @Excel(name = "应用下载数据-付款成功金额", width = 15)
+    @ApiModelProperty(value = "应用下载数据-付款成功金额")
+    private java.math.BigDecimal eventOrderPaidPurchaseAmount;
+    /**
+     * 落地页数据-落地页完件数
+     */
+    @Excel(name = "落地页数据-落地页完件数", width = 15)
+    @ApiModelProperty(value = "落地页数据-落地页完件数")
+    private Long eventJinJianLandingPage;
+    /**
+     * 落地页数据-落地页完件成本
+     */
+    @Excel(name = "落地页数据-落地页完件成本", width = 15)
+    @ApiModelProperty(value = "落地页数据-落地页完件成本")
+    private java.math.BigDecimal eventJinJianLandingPageCost;
+    /**
+     * 落地页数据-落地页授信数
+     */
+    @Excel(name = "落地页数据-落地页授信数", width = 15)
+    @ApiModelProperty(value = "落地页数据-落地页授信数")
+    private Long eventCreditGrantLandingPage;
+    /**
+     * 落地页数据-落地页授信成本
+     */
+    @Excel(name = "落地页数据-落地页授信成本", width = 15)
+    @ApiModelProperty(value = "落地页数据-落地页授信成本")
+    private java.math.BigDecimal eventCreditGrantLandingPageCost;
+    /**
+     * 落地页数据-落地页授信率
+     */
+    @Excel(name = "落地页数据-落地页授信率", width = 15)
+    @ApiModelProperty(value = "落地页数据-落地页授信率")
+    private Double eventCreditGrantLandingRatio;
+    /**
+     * 应用下载数据-次留成本(仅支持分日查询)
+     */
+    @Excel(name = "应用下载数据-次留成本(仅支持分日查询)", width = 15)
+    @ApiModelProperty(value = "应用下载数据-次留成本(仅支持分日查询)")
+    private java.math.BigDecimal eventNextDayStayCost;
+    /**
+     * 应用下载数据-次留率(仅支持分日查询)
+     */
+    @Excel(name = "应用下载数据-次留率(仅支持分日查询)", width = 15)
+    @ApiModelProperty(value = "应用下载数据-次留率(仅支持分日查询)")
+    private java.math.BigDecimal eventNextDayStayRatio;
+    /**
+     * 落地页数据-表单提交点击率
+     */
+    @Excel(name = "落地页数据-表单提交点击率", width = 15)
+    @ApiModelProperty(value = "落地页数据-表单提交点击率")
+    private Double formActionRatio;
+    /**
+     * 应用下载数据-单次付款成本
+     */
+    @Excel(name = "应用下载数据-单次付款成本", width = 15)
+    @ApiModelProperty(value = "应用下载数据-单次付款成本")
+    private java.math.BigDecimal eventOrderPaidCost;
+    /**
+     * 应用下载数据-次留数(仅支持分日查询)
+     */
+    @Excel(name = "应用下载数据-次留数(仅支持分日查询)", width = 15)
+    @ApiModelProperty(value = "应用下载数据-次留数(仅支持分日查询)")
+    private Long eventNextDayStay;
+    /**
+     * 落地页数据-表单提交单价
+     */
+    @Excel(name = "落地页数据-表单提交单价", width = 15)
+    @ApiModelProperty(value = "落地页数据-表单提交单价")
+    private java.math.BigDecimal formCost;
+    /**
+     * 落地页数据-表单提交数
+     */
+    @Excel(name = "落地页数据-表单提交数", width = 15)
+    @ApiModelProperty(value = "落地页数据-表单提交数")
+    private Long formCount;
+    /**
+     * 3s播放率
+     */
+    @Excel(name = "3s播放率", width = 15)
+    @ApiModelProperty(value = "3s播放率")
+    private Double play_3sRatio;
+    /**
+     * 数据小时
+     */
+    @Excel(name = "数据小时", width = 15)
+    @ApiModelProperty(value = "数据小时")
+    private Long statHour;
+    /**
+     * click1kCost
+     */
+    @Excel(name = "click1kCost", width = 15)
+    @ApiModelProperty(value = "click1kCost")
+    private String click_1kCost;
+    /**
+     * 落地页数据-有效线索数
+     */
+    @Excel(name = "落地页数据-有效线索数", width = 15)
+    @ApiModelProperty(value = "落地页数据-有效线索数")
+    private Long eventValidClues;
+    /**
+     * 落地页数据-有效线索成本
+     */
+    @Excel(name = "落地页数据-有效线索成本", width = 15)
+    @ApiModelProperty(value = "落地页数据-有效线索成本")
+    private java.math.BigDecimal eventValidCluesCost;
+    /**
+     * 商品成交数
+     */
+    @Excel(name = "商品成交数", width = 15)
+    @ApiModelProperty(value = "商品成交数")
+    private Long adProductCnt;
+    /**
+     * 商品访问数
+     */
+    @Excel(name = "商品访问数", width = 15)
+    @ApiModelProperty(value = "商品访问数")
+    private Long eventGoodsView;
+    /**
+     * 涨粉量
+     */
+    @Excel(name = "涨粉量", width = 15)
+    @ApiModelProperty(value = "涨粉量")
+    private Long merchantRecoFans;
+    /**
+     * 涨粉量
+     */
+    @Excel(name = "涨粉量", width = 15)
+    @ApiModelProperty(value = "涨粉量")
+    private Long eventOrderAmountRoi;
+    /**
+     * 新增付费人数
+     */
+    @Excel(name = "新增付费人数", width = 15)
+    @ApiModelProperty(value = "新增付费人数")
+    private Long eventNewUserPay;
+    /**
+     * 新增付费人数成本:当日消耗 / 当日新增
+     */
+    @Excel(name = "新增付费人数成本:当日消耗 / 当日新增", width = 15)
+    @ApiModelProperty(value = "新增付费人数成本:当日消耗 / 当日新增")
+    private java.math.BigDecimal eventNewUserPayCost;
+    /**
+     * 新增付费人数率:当日新增付费人数 / 当日行为数
+     */
+    @Excel(name = "新增付费人数率:当日新增付费人数 / 当日行为数", width = 15)
+    @ApiModelProperty(value = "新增付费人数率:当日新增付费人数 / 当日行为数")
+    private java.math.BigDecimal eventNewUserPayRatio;
+    /**
+     * 按钮点击数
+     */
+    @Excel(name = "按钮点击数", width = 15)
+    @ApiModelProperty(value = "按钮点击数")
+    private Long eventButtonClick;
+    /**
+     * 按钮点击成本
+     */
+    @Excel(name = "按钮点击成本", width = 15)
+    @ApiModelProperty(value = "按钮点击成本")
+    private java.math.BigDecimal eventButtonClickCost;
+    /**
+     * 按钮点击成率
+     */
+    @Excel(name = "按钮点击成率", width = 15)
+    @ApiModelProperty(value = "按钮点击成率")
+    private java.math.BigDecimal eventButtonClickRatio;
+    /**
+     * 5s播放率
+     */
+    @Excel(name = "5s播放率", width = 15)
+    @ApiModelProperty(value = "5s播放率")
+    private java.math.BigDecimal play_5sRatio;
+    /**
+     * 完播率
+     */
+    @Excel(name = "完播率", width = 15)
+    @ApiModelProperty(value = "完播率")
+    private java.math.BigDecimal playEndRatio;
+    /**
+     * 订单支付率
+     */
+    @Excel(name = "订单支付率", width = 15)
+    @ApiModelProperty(value = "订单支付率")
+    private java.math.BigDecimal eventOrderPaidRoi;
+    /**
+     * 新增完件人数
+     */
+    @Excel(name = "新增完件人数", width = 15)
+    @ApiModelProperty(value = "新增完件人数")
+    private Long eventNewUserJinjianApp;
+    /**
+     * 新增完件人数成本
+     */
+    @Excel(name = "新增完件人数成本", width = 15)
+    @ApiModelProperty(value = "新增完件人数成本")
+    private java.math.BigDecimal eventNewUserJinjianAppCost;
+    /**
+     * 新增完件人数率
+     */
+    @Excel(name = "新增完件人数率", width = 15)
+    @ApiModelProperty(value = "新增完件人数率")
+    private java.math.BigDecimal eventNewUserJinjianAppRoi;
+    /**
+     * 新增授信人数
+     */
+    @Excel(name = "新增授信人数", width = 15)
+    @ApiModelProperty(value = "新增授信人数")
+    private Long eventNewUserCreditGrantApp;
+    /**
+     * 新增授信人数成本
+     */
+    @Excel(name = "新增授信人数成本", width = 15)
+    @ApiModelProperty(value = "新增授信人数成本")
+    private java.math.BigDecimal eventNewUserCreditGrantAppCost;
+    /**
+     * 新增授信人数率
+     */
+    @Excel(name = "新增授信人数率", width = 15)
+    @ApiModelProperty(value = "新增授信人数率")
+    private java.math.BigDecimal eventNewUserCreditGrantAppRoi;
+    /**
+     * 落地页新增完件人数
+     */
+    @Excel(name = "落地页新增完件人数", width = 15)
+    @ApiModelProperty(value = "落地页新增完件人数")
+    private Long eventNewUserJinjianPage;
+    /**
+     * 落地页新增完件人数成本
+     */
+    @Excel(name = "落地页新增完件人数成本", width = 15)
+    @ApiModelProperty(value = "落地页新增完件人数成本")
+    private java.math.BigDecimal eventNewUserJinjianPageCost;
+    /**
+     * 落地页新增完件人数率
+     */
+    @Excel(name = "落地页新增完件人数率", width = 15)
+    @ApiModelProperty(value = "落地页新增完件人数率")
+    private java.math.BigDecimal eventNewUserJinjianPageRoi;
+    /**
+     * 落地页新增授信人数
+     */
+    @Excel(name = "落地页新增授信人数", width = 15)
+    @ApiModelProperty(value = "落地页新增授信人数")
+    private Long eventNewUserCreditGrantPage;
+    /**
+     * 落地页新增授信人数成本
+     */
+    @Excel(name = "落地页新增授信人数成本", width = 15)
+    @ApiModelProperty(value = "落地页新增授信人数成本")
+    private java.math.BigDecimal eventNewUserCreditGrantPageCost;
+    /**
+     * 落地页新增授信人数率
+     */
+    @Excel(name = "落地页新增授信人数率", width = 15)
+    @ApiModelProperty(value = "落地页新增授信人数率")
+    private java.math.BigDecimal eventNewUserCreditGrantPageRoi;
+    /**
+     * eventAppointForm
+     */
+    @Excel(name = "eventAppointForm", width = 15)
+    @ApiModelProperty(value = "eventAppointForm")
+    private Long eventAppointForm;
+    /**
+     * eventAppointFormCost
+     */
+    @Excel(name = "eventAppointFormCost", width = 15)
+    @ApiModelProperty(value = "eventAppointFormCost")
+    private java.math.BigDecimal eventAppointFormCost;
+    /**
+     * eventAppointFormRatio
+     */
+    @Excel(name = "eventAppointFormRatio", width = 15)
+    @ApiModelProperty(value = "eventAppointFormRatio")
+    private java.math.BigDecimal eventAppointFormRatio;
+    /**
+     * eventAppointJumpClick
+     */
+    @Excel(name = "eventAppointJumpClick", width = 15)
+    @ApiModelProperty(value = "eventAppointJumpClick")
+    private Long eventAppointJumpClick;
+    /**
+     * eventAppointJumpClickCost
+     */
+    @Excel(name = "eventAppointJumpClickCost", width = 15)
+    @ApiModelProperty(value = "eventAppointJumpClickCost")
+    private java.math.BigDecimal eventAppointJumpClickCost;
+    /**
+     * eventAppointJumpClickRatio
+     */
+    @Excel(name = "eventAppointJumpClickRatio", width = 15)
+    @ApiModelProperty(value = "eventAppointJumpClickRatio")
+    private java.math.BigDecimal eventAppointJumpClickRatio;
+    /**
+     * unionEventPayPurchaseAmount7d
+     */
+    @Excel(name = "unionEventPayPurchaseAmount_7d", width = 15)
+    @ApiModelProperty(value = "unionEventPayPurchaseAmount_7d")
+    private String unionEventPayPurchaseAmount_7d;
+    /**
+     * 省份
+     */
+    @Excel(name = "省份", width = 15)
+    @ApiModelProperty(value = "省份")
+    private String province;
+    /**
+     * eventAppInvoked
+     */
+    @Excel(name = "eventAppInvoked", width = 15)
+    @ApiModelProperty(value = "eventAppInvoked")
+    private String eventAppInvoked;
+    /**
+     * unionEventPayPurchaseAmount7dRoi
+     */
+    @Excel(name = "unionEventPayPurchaseAmount_7dRoi", width = 15)
+    @ApiModelProperty(value = "unionEventPayPurchaseAmount_7dRoi")
+    private String unionEventPayPurchaseAmount_7dRoi;
+    /**
+     * eventAddShoppingCartCost
+     */
+    @Excel(name = "eventAddShoppingCartCost", width = 15)
+    @ApiModelProperty(value = "eventAddShoppingCartCost")
+    private String eventAddShoppingCartCost;
+    /**
+     * 性别
+     */
+    @Excel(name = "性别", width = 15)
+    @ApiModelProperty(value = "性别")
+    private String gender;
+    /**
+     * 城市
+     */
+    @Excel(name = "城市", width = 15)
+    @ApiModelProperty(value = "城市")
+    private String city;
+    /**
+     * eventAdWatchTimesRatio
+     */
+    @Excel(name = "eventAdWatchTimesRatio", width = 15)
+    @ApiModelProperty(value = "eventAdWatchTimesRatio")
+    private String eventAdWatchTimesRatio;
+    /**
+     * 分享数
+     */
+    @Excel(name = "分享数", width = 15)
+    @ApiModelProperty(value = "分享数")
+    private String shares;
+    /**
+     * 商业兴趣
+     */
+    @Excel(name = "商业兴趣", width = 15)
+    @ApiModelProperty(value = "商业兴趣")
+    private String businessInterestTags;
+    /**
+     * eventWatchAppAd
+     */
+    @Excel(name = "eventWatchAppAd", width = 15)
+    @ApiModelProperty(value = "eventWatchAppAd")
+    private String eventWatchAppAd;
+    /**
+     * eventMultiConversionCost
+     */
+    @Excel(name = "eventMultiConversionCost", width = 15)
+    @ApiModelProperty(value = "eventMultiConversionCost")
+    private String eventMultiConversionCost;
+    /**
+     * 涨粉成本
+     */
+    @Excel(name = "涨粉成本", width = 15)
+    @ApiModelProperty(value = "涨粉成本")
+    private java.math.BigDecimal merchantRecoFansCost;
+    /**
+     * 广告投放场景
+     */
+    @Excel(name = "广告投放场景", width = 15)
+    @ApiModelProperty(value = "广告投放场景")
+    private String adScene;
+    /**
+     * eventAdWatchTimesCost
+     */
+    @Excel(name = "eventAdWatchTimesCost", width = 15)
+    @ApiModelProperty(value = "eventAdWatchTimesCost")
+    private String eventAdWatchTimesCost;
+    /**
+     * eventAddShoppingCart
+     */
+    @Excel(name = "eventAddShoppingCart", width = 15)
+    @ApiModelProperty(value = "eventAddShoppingCart")
+    private String eventAddShoppingCart;
+    /**
+     * 年龄
+     */
+    @Excel(name = "年龄", width = 15)
+    @ApiModelProperty(value = "年龄")
+    private String ageSegment;
+    /**
+     * 点赞数
+     */
+    @Excel(name = "点赞数", width = 15)
+    @ApiModelProperty(value = "点赞数")
+    private Long photoLike;
+    /**
+     * 微信复制数
+     */
+    @Excel(name = "微信复制数", width = 15)
+    @ApiModelProperty(value = "微信复制数")
+    private Long eventAddWechat;
+    /**
+     * 微信复制成本
+     */
+    @Excel(name = "微信复制成本", width = 15)
+    @ApiModelProperty(value = "微信复制成本")
+    private java.math.BigDecimal eventAddWechatCost;
+    /**
+     * 微信复制率
+     */
+    @Excel(name = "微信复制率", width = 15)
+    @ApiModelProperty(value = "微信复制率")
+    private java.math.BigDecimal eventAddWechatRatio;
+    /**
+     * eventAppInvokedCost
+     */
+    @Excel(name = "eventAppInvokedCost", width = 15)
+    @ApiModelProperty(value = "eventAppInvokedCost")
+    private java.math.BigDecimal eventAppInvokedCost;
+    /**
+     * eventMultiConversion
+     */
+    @Excel(name = "eventMultiConversion", width = 15)
+    @ApiModelProperty(value = "eventMultiConversion")
+    private String eventMultiConversion;
+    /**
+     * eventDspGiftForm
+     */
+    @Excel(name = "eventDspGiftForm", width = 15)
+    @ApiModelProperty(value = "eventDspGiftForm")
+    private String eventDspGiftForm;
+    /**
+     * eventAppInvokedRatio
+     */
+    @Excel(name = "eventAppInvokedRatio", width = 15)
+    @ApiModelProperty(value = "eventAppInvokedRatio")
+    private String eventAppInvokedRatio;
+    /**
+     * 封面曝光数
+     */
+    @Excel(name = "封面曝光数", width = 15)
+    @ApiModelProperty(value = "封面曝光数")
+    private Long photoShow;
+    /**
+     * eventMultiConversionRatio
+     */
+    @Excel(name = "eventMultiConversionRatio", width = 15)
+    @ApiModelProperty(value = "eventMultiConversionRatio")
+    private String eventMultiConversionRatio;
+    /**
+     * 系统
+     */
+    @Excel(name = "系统", width = 15)
+    @ApiModelProperty(value = "系统")
+    private String client;
+    /**
+     * 商品访问成本
+     */
+    @Excel(name = "商品访问成本", width = 15)
+    @ApiModelProperty(value = "商品访问成本")
+    private java.math.BigDecimal eventGoodsViewCost;
+    /**
+     * 应用下载数据-授信率
+     */
+    @Excel(name = "应用下载数据-授信率", width = 15)
+    @ApiModelProperty(value = "应用下载数据-授信率")
+    private java.math.BigDecimal eventCreditGrantAppRatio;
+    /**
+     * eventAdWatchTimes
+     */
+    @Excel(name = "eventAdWatchTimes", width = 15)
+    @ApiModelProperty(value = "eventAdWatchTimes")
+    private String eventAdWatchTimes;
+    /**
+     * 评论数
+     */
+    @Excel(name = "评论数", width = 15)
+    @ApiModelProperty(value = "评论数")
+    private Long comments;
+    /**
+     * 创建时间
+     */
+    @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+    /**
+     * 修改时间
+     */
+    @Excel(name = "修改时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "修改时间")
+    private Date updateTime;
+}

+ 15 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/KuaishouAudienceReportDailyAgeMapper.java

@@ -0,0 +1,15 @@
+package cn.com.ctop.kuaishou.modules.report.mapper;
+
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouAudienceReportDailyAge;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 人群分析报表
+ *
+ * @author: jeecg-boot
+ * @date: 2020-12-03
+ * @cersion: V1.0
+ */
+public interface KuaishouAudienceReportDailyAgeMapper extends BaseMapper<KuaishouAudienceReportDailyAge> {
+
+}

+ 16 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/KuaishouAudienceReportDailyBusinessMapper.java

@@ -0,0 +1,16 @@
+package cn.com.ctop.kuaishou.modules.report.mapper;
+
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouAudienceReportDaily;
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouAudienceReportDailyBussiness;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 人群分析报表
+ *
+ * @author: jeecg-boot
+ * @date: 2020-12-03
+ * @cersion: V1.0
+ */
+public interface KuaishouAudienceReportDailyBusinessMapper extends BaseMapper<KuaishouAudienceReportDailyBussiness> {
+
+}

+ 16 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/KuaishouAudienceReportDailyCityMapper.java

@@ -0,0 +1,16 @@
+package cn.com.ctop.kuaishou.modules.report.mapper;
+
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouAudienceReportDaily;
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouAudienceReportDailyCity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 人群分析报表
+ *
+ * @author: jeecg-boot
+ * @date: 2020-12-03
+ * @cersion: V1.0
+ */
+public interface KuaishouAudienceReportDailyCityMapper extends BaseMapper<KuaishouAudienceReportDailyCity> {
+
+}

+ 16 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/KuaishouAudienceReportDailyClientMapper.java

@@ -0,0 +1,16 @@
+package cn.com.ctop.kuaishou.modules.report.mapper;
+
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouAudienceReportDaily;
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouAudienceReportDailyClient;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 人群分析报表
+ *
+ * @author: jeecg-boot
+ * @date: 2020-12-03
+ * @cersion: V1.0
+ */
+public interface KuaishouAudienceReportDailyClientMapper extends BaseMapper<KuaishouAudienceReportDailyClient> {
+
+}

+ 16 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/KuaishouAudienceReportDailyGenderMapper.java

@@ -0,0 +1,16 @@
+package cn.com.ctop.kuaishou.modules.report.mapper;
+
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouAudienceReportDaily;
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouAudienceReportDailyGender;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 人群分析报表
+ *
+ * @author: jeecg-boot
+ * @date: 2020-12-03
+ * @cersion: V1.0
+ */
+public interface KuaishouAudienceReportDailyGenderMapper extends BaseMapper<KuaishouAudienceReportDailyGender> {
+
+}

+ 15 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/KuaishouAudienceReportDailyMapper.java

@@ -0,0 +1,15 @@
+package cn.com.ctop.kuaishou.modules.report.mapper;
+
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouAudienceReportDaily;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 人群分析报表
+ *
+ * @author: jeecg-boot
+ * @date: 2020-12-03
+ * @cersion: V1.0
+ */
+public interface KuaishouAudienceReportDailyMapper extends BaseMapper<KuaishouAudienceReportDaily> {
+
+}

+ 15 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/KuaishouAudienceReportDailyProvinceMapper.java

@@ -0,0 +1,15 @@
+package cn.com.ctop.kuaishou.modules.report.mapper;
+
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouAudienceReportDailyProvince;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 人群分析报表
+ *
+ * @author: jeecg-boot
+ * @date: 2020-12-03
+ * @cersion: V1.0
+ */
+public interface KuaishouAudienceReportDailyProvinceMapper extends BaseMapper<KuaishouAudienceReportDailyProvince> {
+
+}

+ 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.kuaishou.modules.report.mapper.KuaishouAudienceReportDailyMapper">
 
-</mapper>
+</mapper>

+ 24 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/service/IKuaishouAudienceReportDailyService.java

@@ -0,0 +1,24 @@
+package cn.com.ctop.kuaishou.modules.report.service;
+
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouAudienceReportDaily;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 人群分析报表
+ * @Author: jeecg-boot
+ * @Date: 2020-12-03
+ * @Version: V1.0
+ */
+public interface IKuaishouAudienceReportDailyService extends IService<KuaishouAudienceReportDaily> {
+    /**
+     * 人群分析报表
+     *
+     * @param
+     * @return java.lang.Long
+     * @throws
+     * @author ZHAOXA
+     */
+    void crowdAnalysisReport(CtopOauthToken token, String date, String type, Integer page, Integer pageSize);
+
+}

+ 157 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/service/impl/KuaishouAudienceReportDailyServiceImpl.java

@@ -0,0 +1,157 @@
+package cn.com.ctop.kuaishou.modules.report.service.impl;
+
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.service.ICtopOauthTokenService;
+import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.common.module.utils.HttpUtils;
+import cn.com.ctop.common.module.utils.KuaishouInterfaceConstant;
+import cn.com.ctop.common.module.utils.PropertiesUtils;
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouAudienceReportDaily;
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouAudienceReportDailyAge;
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouAudienceReportDailyBussiness;
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouAudienceReportDailyCity;
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouAudienceReportDailyClient;
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouAudienceReportDailyGender;
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouAudienceReportDailyProvince;
+import cn.com.ctop.kuaishou.modules.report.mapper.KuaishouAudienceReportDailyAgeMapper;
+import cn.com.ctop.kuaishou.modules.report.mapper.KuaishouAudienceReportDailyBusinessMapper;
+import cn.com.ctop.kuaishou.modules.report.mapper.KuaishouAudienceReportDailyCityMapper;
+import cn.com.ctop.kuaishou.modules.report.mapper.KuaishouAudienceReportDailyClientMapper;
+import cn.com.ctop.kuaishou.modules.report.mapper.KuaishouAudienceReportDailyGenderMapper;
+import cn.com.ctop.kuaishou.modules.report.mapper.KuaishouAudienceReportDailyMapper;
+import cn.com.ctop.kuaishou.modules.report.mapper.KuaishouAudienceReportDailyProvinceMapper;
+import cn.com.ctop.kuaishou.modules.report.service.IKuaishouAudienceReportDailyService;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 人群分析报表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-12-03
+ */
+@Slf4j
+@Service
+public class KuaishouAudienceReportDailyServiceImpl extends ServiceImpl<KuaishouAudienceReportDailyMapper, KuaishouAudienceReportDaily> implements IKuaishouAudienceReportDailyService {
+
+    @Autowired
+    private KuaishouAudienceReportDailyProvinceMapper provinceMapper;
+    @Autowired
+    private KuaishouAudienceReportDailyAgeMapper ageMapper;
+    @Autowired
+    private KuaishouAudienceReportDailyCityMapper cityMapper;
+    @Autowired
+    private KuaishouAudienceReportDailyClientMapper clientMapper;
+    @Autowired
+    private KuaishouAudienceReportDailyBusinessMapper bussinessMapper;
+    @Autowired
+    private KuaishouAudienceReportDailyGenderMapper genderMapper;
+    @Autowired
+    private ICtopOauthTokenService tokenService;
+    private String urlPath = PropertiesUtils.getConfig("kuaishou_api_url");
+
+    /**
+     * 人群分析报表
+     *
+     * @param type      province: 省级地域分布, city: 地级地域分布,gender: 性别分布,ageSegment: 年龄分布clientId: 系统分布 businessInterestTags: 商业兴趣分布
+     * @param accountId 广告主ID
+     * @param file      请求的文件,最大支持500MB
+     * @return
+     */
+    @Override
+    public void crowdAnalysisReport(CtopOauthToken token, String date, String type, Integer page, Integer pageSize) {
+        long start = System.currentTimeMillis();
+        try {
+            String url = urlPath + KuaishouInterfaceConstant.AUDIENCE_REPORT;
+            JSONArray reportDims = new JSONArray();
+            reportDims.add(type);
+            Map<String, String> headers = new HashMap<>();
+            headers.put("Access-Token", token.getAccessToken());
+            headers.put("Content-Type", "application/json");
+            JSONObject requestJson = new JSONObject();
+            requestJson.put("advertiser_id", token.getAccountId());
+            requestJson.put("start_date", date);
+            requestJson.put("end_date", date);
+            requestJson.put("report_dims", reportDims);
+            requestJson.put("page", page);
+            requestJson.put("page_size", pageSize);
+            String result = HttpUtils.kuaiShouhttpPostRequest(url, requestJson.toJSONString(), headers);
+            JSONObject resultJson = JSONObject.parseObject(result);
+            if (!Check.isNull(resultJson)) {
+                Integer code = resultJson.getInteger("code");
+                if (code == 0) {
+                    JSONObject datas = resultJson.getJSONObject("data");
+                    JSONArray details = datas.getJSONArray("details");
+                    if (!Check.isNull(details)) {
+                        System.out.println(type + ",size:" + details.size());
+                        for (int i = 0; i < details.size(); i++) {
+                            JSONObject obj = details.getJSONObject(i);
+                            if ("province".equals(type)) {
+                                KuaishouAudienceReportDailyProvince entity = JSONObject.toJavaObject(obj, KuaishouAudienceReportDailyProvince.class);
+                                entity.setPhotoLike(obj.getLong("like"));
+                                entity.setComments(obj.getLong("comment"));
+                                entity.setPhotoShow(obj.getLong("show"));
+                                entity.setShares(obj.getString("share"));
+                                entity.setAccountId(Long.valueOf(token.getAccountId()));
+                                provinceMapper.insert(entity);
+                            } else if ("city".equals(type)) {
+                                KuaishouAudienceReportDailyCity entity = JSONObject.toJavaObject(obj, KuaishouAudienceReportDailyCity.class);
+                                entity.setPhotoLike(obj.getLong("like"));
+                                entity.setComments(obj.getLong("comment"));
+                                entity.setPhotoShow(obj.getLong("show"));
+                                entity.setShares(obj.getString("share"));
+                                entity.setAccountId(Long.valueOf(token.getAccountId()));
+                                cityMapper.insert(entity);
+                            } else if ("gender".equals(type)) {
+                                KuaishouAudienceReportDailyGender entity = JSONObject.toJavaObject(obj, KuaishouAudienceReportDailyGender.class);
+                                entity.setPhotoLike(obj.getLong("like"));
+                                entity.setComments(obj.getLong("comment"));
+                                entity.setPhotoShow(obj.getLong("show"));
+                                entity.setShares(obj.getString("share"));
+                                entity.setAccountId(Long.valueOf(token.getAccountId()));
+                                genderMapper.insert(entity);
+                            } else if ("ageSegment".equals(type)) {
+                                KuaishouAudienceReportDailyAge entity = JSONObject.toJavaObject(obj, KuaishouAudienceReportDailyAge.class);
+                                entity.setPhotoLike(obj.getLong("like"));
+                                entity.setComments(obj.getLong("comment"));
+                                entity.setPhotoShow(obj.getLong("show"));
+                                entity.setShares(obj.getString("share"));
+                                entity.setAccountId(Long.valueOf(token.getAccountId()));
+                                ageMapper.insert(entity);
+                            } else if ("clientId".equals(type)) {
+                                KuaishouAudienceReportDailyClient entity = JSONObject.toJavaObject(obj, KuaishouAudienceReportDailyClient.class);
+                                entity.setPhotoLike(obj.getLong("like"));
+                                entity.setComments(obj.getLong("comment"));
+                                entity.setPhotoShow(obj.getLong("show"));
+                                entity.setShares(obj.getString("share"));
+                                entity.setAccountId(Long.valueOf(token.getAccountId()));
+                                clientMapper.insert(entity);
+                            } else if ("businessInterestTags".equals(type)) {
+                                KuaishouAudienceReportDailyBussiness entity = JSONObject.toJavaObject(obj, KuaishouAudienceReportDailyBussiness.class);
+                                entity.setPhotoLike(obj.getLong("like"));
+                                entity.setComments(obj.getLong("comment"));
+                                entity.setPhotoShow(obj.getLong("show"));
+                                entity.setShares(obj.getString("share"));
+                                entity.setAccountId(Long.valueOf(token.getAccountId()));
+                                bussinessMapper.insert(entity);
+                            }
+                        }
+                    }
+                }else{
+                    log.error("查询人群分析报表数据返回信息错误:accountId:{},返回信息:{}", token.getAccountId(), resultJson);
+                }
+            }
+        } catch (Exception e) {
+            log.error("插入人群分析报表数据异常,数据维度:{}", type, e);
+        }
+        log.info("use time :{} ms", (System.currentTimeMillis() - start));
+    }
+}

+ 18 - 6
module-kuaishou/src/main/resources/kuaishou_config.properties

@@ -16,9 +16,21 @@ model_video_src_path=/mnt/data/src/
 model_video_fill_path=/mnt/data/fill/
 ##
 model_video_final_path=/mnt/data/final/
-## 模板视频存放路径
-model_video_src_path_test=D:\\data\\model\\src\\
-## 片段合成视频存放路径
-model_video_fill_path_test=D:\\data\\model\\fill\\
-##
-model_video_final_path_test=D:\\data\\model\\final\\
+
+
+## jiaoyang
+#kuaishou_api_url=https://ad.e.kuaishou.com
+#kuaishou_auth_url=https://ad.e.kuaishou.com
+#kuaishou_appid=328
+#oauth_type=agent
+#kuaishou_secret=1iFTBiMdohkyEQQs
+#kuaishou_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/

+ 0 - 8
module-toutiao/src/main/resources/bytedance_config.properties

@@ -6,7 +6,6 @@ bytedance_secret=0c51523e90d6166418fc8421a4896808e90e26f4
 #release
 bytedance_api_url=https://ad.oceanengine.com/open_api
 bytedance_auth_url=https://ad.oceanengine.com/openapi
-
 #sandbox
 #bytedance_api_url=https://test-ad.toutiao.com/open_api
 #bytedance_auth_url=https://test-ad.toutiao.com/open_api
@@ -14,13 +13,10 @@ bytedance_auth_url=https://ad.oceanengine.com/openapi
 bytedance_callback_url=http://adsp.c-top.com.cn:8080/jeecg-boot/bytedance
 bytedance_v2_advertiser_info=/2/advertiser/public_info/
 bytedance_v2_ad_get=/2/ad/get/
-bytedance_v2_advertiser_fund_daily_stat=/2/advertiser/fund/daily_stat/
 bytedance_v2_ad_create=/2/ad/create/
-bytedance_v2_ad_update=/2/ad/update/
 bytedance_v2_ad_update_status=/2/ad/update/status/
 bytedance_v2_ad_update_bid=/2/ad/update/bid/
 bytedance_v2_ad_update_budget=/2/ad/update/budget/
-bytedance_v2_ad_update_reject_reason=2/ad/reject_reason/
 bytedance_v2_campaign_get=/2/campaign/get/
 bytedance_v2_campaign_create=/2/campaign/create/
 bytedance_v2_campaign_update_status=/2/campaign/update/status/
@@ -32,10 +28,6 @@ bytedance_v2_creative_update_status=/2/creative/update/status/
 bytedance_v2_creative_material_get=/2/creative/material/read/
 bytedance_v2_creative_create_v2=/2/creative/create_v2/
 bytedance_v2_creative_get=/2/creative/get/
-bytedance_v2_creative_read=/2/creative/read_v2/
-bytedance_v2_creative_update=/2/creative/update_v2/
-bytedance_v2_creative_reject_reason=/2/creative/reject_reason/
-##报表相关
 bytedance_v2_advertiser_report_get=/2/report/advertiser/get/
 bytedance_v2_campaign_report_get=/2/report/campaign/get/
 bytedance_v2_ad_report_get=/2/report/ad/get/