Explorar o código

Merge branch 'test'

songyh %!s(int64=4) %!d(string=hai) anos
pai
achega
b6f82c0cd7
Modificáronse 33 ficheiros con 1612 adicións e 100 borrados
  1. 2 1
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java
  2. 1 1
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/dockapi/MarketingServiceImpl.java
  3. 2 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/entity/AiBytedanceAdvertiserStrategy.java
  4. 41 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/entity/BytedanceAiVideoCreativeLog.java
  5. 2 2
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/enums/BytedanceCreativeMatTypeEnum.java
  6. 14 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/mapper/BytedanceAiVideoCreativeLogMapper.java
  7. 5 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/mapper/xml/BytedanceAiVideoCreativeLogMapper.xml
  8. 14 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/service/IBytedanceAiVideoCreativeLogService.java
  9. 139 66
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/service/impl/AiBytedanceAdvertiserStrategyServiceImpl.java
  10. 18 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/service/impl/BytedanceAiVideoCreativeLogServiceImpl.java
  11. 6 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/common/mapper/MaterialInfoMapper.java
  12. 19 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/common/mapper/xml/MaterialInfoMapper.xml
  13. 7 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/common/service/IMaterialInfoService.java
  14. 29 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/common/service/impl/MaterialInfoServiceImpl.java
  15. 11 1
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/common/utils/StringUtils.java
  16. 340 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/report/entity/BytedanceAdvertiserHourlyReport.java
  17. 342 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/report/entity/BytedancePlanHourlyReport.java
  18. 328 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/report/entity/BytedanceReportMaterialDaily.java
  19. 17 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/report/mapper/BytedanceAdvertiserHourlyReportMapper.java
  20. 18 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/report/mapper/BytedancePlanHourlyReportMapper.java
  21. 16 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/report/mapper/BytedanceReportMaterialDailyMapper.java
  22. 7 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/report/mapper/xml/BytedanceAdvertiserHourlyReportMapper.xml
  23. 5 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/report/mapper/xml/BytedancePlanHourlyReportMapper.xml
  24. 6 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/report/mapper/xml/BytedanceReportMaterialDailyMapper.xml
  25. 14 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/report/service/IBytedanceAdvertiserHourlyReportService.java
  26. 16 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/report/service/IBytedancePlanHourlyReportService.java
  27. 14 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/report/service/IBytedanceReportMaterialDailyService.java
  28. 21 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/report/service/impl/BytedanceAdvertiserHourlyReportServiceImpl.java
  29. 23 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/report/service/impl/BytedancePlanHourlyReportServiceImpl.java
  30. 22 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/report/service/impl/BytedanceReportMaterialDailyServiceImpl.java
  31. 4 29
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/bytedance/advertise/controller/AiBytedanceAdvertiserStrategyController.java
  32. 53 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/bytedance/advertise/controller/BytedanceReportController.java
  33. 56 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/bytedance/advertise/controller/MaterialInfoController.java

+ 2 - 1
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java

@@ -129,7 +129,8 @@ public class ShiroConfig {
         filterChainDefinitionMap.put("/vxeSocket/**", "anon");//JVxeTable无痕刷新示例
         filterChainDefinitionMap.put("/eoaSocket/**","anon");//我的聊天
 
-        filterChainDefinitionMap.put("/advertiser/aiBytedanceAdvertiserStrategy/**","anon");//
+        //filterChainDefinitionMap.put("/advertiser/aiBytedanceAdvertiserStrategy/**","anon");//
+        filterChainDefinitionMap.put("/advertiser/**","anon");//
         filterChainDefinitionMap.put("/file/**","anon");//
 
         filterChainDefinitionMap.put("/sys/dict/**","anon");//

+ 1 - 1
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/dockapi/MarketingServiceImpl.java

@@ -2,7 +2,6 @@ package org.jeecg.modules.bytedance.advertise.dockapi;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.google.gson.JsonObject;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.http.HttpEntity;
 import org.apache.http.client.methods.CloseableHttpResponse;
@@ -325,6 +324,7 @@ public class MarketingServiceImpl implements MarketingService{
             log.error("广告计划创建失败==》accountId:{},message:{}", token.getAccountId(), jsonObject.getString("message"));
             Result.error(jsonObject.getString("message"));
         }
+        System.out.println(jsonObject);
         //strategy.setId(jsonObject.getJSONObject("data").getLong("ad_id"));
         return Result.successMsg("广告计划创建成功",jsonObject.getJSONObject("data").getLong("ad_id"));
     }

+ 2 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/entity/AiBytedanceAdvertiserStrategy.java

@@ -109,6 +109,8 @@ public class AiBytedanceAdvertiserStrategy{
 	private String adGender;
 	/**年龄(用户定向)*/
 	private String adAge;
+	/**定向人群包类型  1-定向 2-排除 3-同时定向和排除*/
+	private String adRetargetingTagsType;
 	/**定向人群包(用户定向)*/
 	private String adRetargetingTagsInclude;
 	/**排除人群包(用户定向)*/

+ 41 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/entity/BytedanceAiVideoCreativeLog.java

@@ -0,0 +1,41 @@
+package org.jeecg.modules.bytedance.advertise.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   2021-05-19
+ * @version V1.0
+ */
+@Data
+@TableName("ctop_bytedance_ai_video_creative_log")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class BytedanceAiVideoCreativeLog {
+    
+	/**id*/
+	@TableId(type = IdType.AUTO)
+	private Long id;
+	/**videoCode*/
+	private String videoCode;
+	/**creativeUuid*/
+	private String creativeUuid;
+	/**strategyId*/
+	private Long strategyId;
+	/**stateDate*/
+	private String stateDate;
+	/**status*/
+	private Integer status;
+	/**createTime*/
+	private Date createTime;
+	/**updateTime*/
+	private Date updateTime;
+}

+ 2 - 2
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/enums/BytedanceCreativeMatTypeEnum.java

@@ -7,9 +7,9 @@ public enum BytedanceCreativeMatTypeEnum {
      * 快手创意素材获取类型
      */
     BYTEDANCE_CREATIVE_MAT_TYPE_ENUM_NEW("1","上新",-60*8L,-5L),
-    BYTEDANCE_CREATIVE_MAT_TYPE_ENUM_HIGH_QUALITY("2","高质量",-28*60*24L,-1*60*24L),
+    BYTEDANCE_CREATIVE_MAT_TYPE_ENUM_HIGH_QUALITY("2","高质量",-14*60*24L,-1*60*24L),
     BYTEDANCE_CREATIVE_MAT_TYPE_ENUM_MISSING("3","上新",-60*60*24L,-1*60*24L),
-    BYTEDANCE_CREATIVE_MAT_TYPE_ENUM_HISTORY("4","历史",-60*60*24L,-1*60*24L);
+    BYTEDANCE_CREATIVE_MAT_TYPE_ENUM_HISTORY("4","历史",-14*60*24L,-1*60*24L);
 
     /**
      * 类型

+ 14 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/mapper/BytedanceAiVideoCreativeLogMapper.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.bytedance.advertise.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.bytedance.advertise.entity.BytedanceAiVideoCreativeLog;
+
+/**
+ * 视频创建创意记录信息
+ * @author jeecg-boot
+ * 2021-05-19
+ * @version V1.0
+ */
+public interface BytedanceAiVideoCreativeLogMapper extends BaseMapper<BytedanceAiVideoCreativeLog> {
+
+}

+ 5 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/mapper/xml/BytedanceAiVideoCreativeLogMapper.xml

@@ -0,0 +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="org.jeecg.modules.bytedance.advertise.mapper.BytedanceAiVideoCreativeLogMapper">
+
+</mapper>

+ 14 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/service/IBytedanceAiVideoCreativeLogService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.bytedance.advertise.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.bytedance.advertise.entity.BytedanceAiVideoCreativeLog;
+
+/**
+ * 视频创建创意记录信息
+ * @author jeecg-boot
+ * 2021-05-19
+ * @version V1.0
+ */
+public interface IBytedanceAiVideoCreativeLogService extends IService<BytedanceAiVideoCreativeLog> {
+
+}

+ 139 - 66
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/service/impl/AiBytedanceAdvertiserStrategyServiceImpl.java

@@ -83,6 +83,8 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
             log.info("此账户不存在或者已经被关闭=>accountId:{}", token.getAccountId());
             return videoCnt;
         }
+        //获取全量广告组数据
+        campaignService.getAdvertiserCampaign(token, null, null);
         //查询相应的素材信息
         Long timeStart = BytedanceCreativeMatTypeEnum.getStartTimeByType(createType.toString());
         Long timeEnd = BytedanceCreativeMatTypeEnum.getEndTimeByType(createType.toString());
@@ -106,64 +108,121 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
             if(null == slogenInfos||slogenInfos.isEmpty()){
                 continue;
             }
-            // 2:创建计划
-            Long dpIndex ;
-            AiBytedanceAdDplinkInfo adDplinkInfo = adDplinkInfoService.getlatestDpLinkInfo(strategy.getId(),strategy.getAccountId(),1);
-            if(null == adDplinkInfo){
-                adDplinkInfo = new AiBytedanceAdDplinkInfo();
-                if("FIX".equalsIgnoreCase(strategy.getAdBidCreateType())){
-                    adDplinkInfo.setAdBid(strategy.getAdCpaBid());
+            Integer useDplinkIndex = strategy.getDpLinkIndexUsed();
+            if(null==useDplinkIndex||useDplinkIndex.equals(0)){
+                Long dpIndex ;
+                AiBytedanceAdDplinkInfo adDplinkInfo = adDplinkInfoService.getlatestDpLinkInfo(strategy.getId(),strategy.getAccountId(),1);
+                if(null == adDplinkInfo){
+                    adDplinkInfo = new AiBytedanceAdDplinkInfo();
+                    if("FIX".equalsIgnoreCase(strategy.getAdBidCreateType())){
+                        adDplinkInfo.setAdBid(strategy.getAdCpaBid());
+                    }else{
+                        adDplinkInfo.setAdBid(strategy.getAdMinBid());
+                    }
+                    adDplinkInfo.setDpLinkIndex(strategy.getDpLinkStartIndex());
                 }else{
-                    adDplinkInfo.setAdBid(strategy.getAdMinBid());
+                    adDplinkInfo.setId(null);
+                    adDplinkInfo.setDpLinkIndex(adDplinkInfo.getDpLinkIndex()+1);
+                }
+
+                //不使用dp链接
+                String date = DateUtils.formatDate();
+                String campaignName = getCampaignName(strategy,null,date);
+                Long campaignId = getCampaignId(strategy,campaignName,token);
+                if(null == campaignId){
+                    return videoCnt;
+                }
+                //计划名称
+                String adName = getAdName(strategy,null,video);
+                //计算本次出价
+                BigDecimal currentCpaBid = StringUtils.getRandomAdCpaBid(strategy.getAdBidCreateType(),strategy.getAdMaxBid(),strategy.getAdMinBid(),strategy.getAdStepBid(),adDplinkInfo.getAdBid());
+                JSONObject adParams = getAdParams(strategy,adName,campaignId,currentCpaBid);
+                Long adId = createAdInfo(token,strategy,adParams);
+                if(null == adId){
+                    continue;
+                }
+                adDplinkInfo.setAdId(adId);
+                adDplinkInfo.setAccountId(strategy.getAccountId());
+                adDplinkInfo.setStatus(1);
+                adDplinkInfo.setStrategyId(strategy.getId());
+                adDplinkInfoService.save(adDplinkInfo);
+                //3:创建创意
+                JSONObject creativeParams = getCreativeParams(strategy,adId,video,token);
+                log.info("创意创建参数:{}",creativeParams);
+                JSONObject creativeObject =  marketingService.creativeCreate(token,adId,creativeParams);
+                if(null!=creativeObject.getInteger("code")&&creativeObject.getInteger("code")!=0){
+                    String message = creativeObject.getString("message");
+                    Integer code = creativeObject.getInteger("code");
+                    //创建创意失败
+                    log.info("创意创建失败:code==>{};message==>{}",code,message);
+                    continue;
+                }
+                videoCnt --;
+                if(videoCnt<=0){
+                    return 0L;
                 }
-                adDplinkInfo.setDpLinkIndex(strategy.getDpLinkStartIndex());
             }else{
-                adDplinkInfo.setId(null);
-                adDplinkInfo.setDpLinkIndex(adDplinkInfo.getDpLinkIndex()+1);
-            }
-            dpIndex = adDplinkInfo.getDpLinkIndex();
-            if(dpIndex>strategy.getDpLinkEndIndex()){
-                log.info("此账户策略创建结束=>账户id:{};策略id:{}", token.getAccountId(),strategy.getId());
-                return 0L;
-            }
-            String campaignName = getCampaignName(strategy,dpIndex);
-            Long campaignId = getCampaignId(strategy,campaignName,token);
-            if(null == campaignId){
-                return videoCnt;
-            }
-            strategy.setAdOpenUrl(openUrl.replace("{{dp链接下标}}",dpIndex.toString()));
-            String dplinkCode = StringUtils.getParamFromUrl(strategy.getAdOpenUrl(),"bc_fl_src");
-            String adName = getAdName(strategy,dplinkCode,video);
-            //计算本次出价
-            BigDecimal currentCpaBid = StringUtils.getRandomAdCpaBid(strategy.getAdBidCreateType(),strategy.getAdMaxBid(),strategy.getAdMinBid(),strategy.getAdStepBid(),adDplinkInfo.getAdBid());
-            adDplinkInfo.setAdBid(currentCpaBid);
-            JSONObject adParams = getAdParams(strategy,adName,campaignId,currentCpaBid);
-            Long adId = createAdInfo(token,strategy,adParams);
-            if(null == adId){
-                continue;
-            }
-            adDplinkInfo.setAdId(adId);
-            adDplinkInfo.setAccountId(strategy.getAccountId());
-            adDplinkInfo.setStatus(1);
-            adDplinkInfo.setStrategyId(strategy.getId());
-            adDplinkInfoService.save(adDplinkInfo);
-            //3:创建创意
-            JSONObject creativeParams = getCreativeParams(strategy,adId,video,token);
-            log.info("创意创建参数:{}",creativeParams);
-            JSONObject creativeObject =  marketingService.creativeCreate(token,adId,creativeParams);
-            if(null!=creativeObject.getInteger("code")&&creativeObject.getInteger("code")!=0){
-                String message = creativeObject.getString("message");
-                Integer code = creativeObject.getInteger("code");
-                //创建创意失败
-                log.info("创意创建失败:code==>{};message==>{}",code,message);
-                continue;
-            }
-            videoCnt --;
-            if(videoCnt<=0){
-                return 0L;
+                Long dpIndex ;
+                AiBytedanceAdDplinkInfo adDplinkInfo = adDplinkInfoService.getlatestDpLinkInfo(strategy.getId(),strategy.getAccountId(),1);
+                if(null == adDplinkInfo){
+                    adDplinkInfo = new AiBytedanceAdDplinkInfo();
+                    if("FIX".equalsIgnoreCase(strategy.getAdBidCreateType())){
+                        adDplinkInfo.setAdBid(strategy.getAdCpaBid());
+                    }else{
+                        adDplinkInfo.setAdBid(strategy.getAdMinBid());
+                    }
+                    adDplinkInfo.setDpLinkIndex(strategy.getDpLinkStartIndex());
+                }else{
+                    adDplinkInfo.setId(null);
+                    adDplinkInfo.setDpLinkIndex(adDplinkInfo.getDpLinkIndex()+1);
+                }
+                dpIndex = adDplinkInfo.getDpLinkIndex();
+                if(dpIndex>strategy.getDpLinkEndIndex()){
+                    log.info("此账户策略创建结束=>账户id:{};策略id:{}", token.getAccountId(),strategy.getId());
+                    return 0L;
+                }
+                //组名称
+                String campaignName = getCampaignName(strategy,dpIndex,null);
+                Long campaignId = getCampaignId(strategy,campaignName,token);
+                if(null == campaignId){
+                    return videoCnt;
+                }
+                strategy.setAdOpenUrl(openUrl.replace("{{dp链接下标}}",dpIndex.toString()));
+                String dplinkCode = StringUtils.getParamFromUrl(strategy.getAdOpenUrl(),"bc_fl_src");
+                //计划名称
+                String adName = getAdName(strategy,dplinkCode,video);
+                //计算本次出价
+                BigDecimal currentCpaBid = StringUtils.getRandomAdCpaBid(strategy.getAdBidCreateType(),strategy.getAdMaxBid(),strategy.getAdMinBid(),strategy.getAdStepBid(),adDplinkInfo.getAdBid());
+                adDplinkInfo.setAdBid(currentCpaBid);
+                JSONObject adParams = getAdParams(strategy,adName,campaignId,currentCpaBid);
+                Long adId = createAdInfo(token,strategy,adParams);
+                if(null == adId){
+                    continue;
+                }
+                adDplinkInfo.setAdId(adId);
+                adDplinkInfo.setAccountId(strategy.getAccountId());
+                adDplinkInfo.setStatus(1);
+                adDplinkInfo.setStrategyId(strategy.getId());
+                adDplinkInfoService.save(adDplinkInfo);
+                //3:创建创意
+                JSONObject creativeParams = getCreativeParams(strategy,adId,video,token);
+                log.info("创意创建参数:{}",creativeParams);
+                JSONObject creativeObject =  marketingService.creativeCreate(token,adId,creativeParams);
+                if(null!=creativeObject.getInteger("code")&&creativeObject.getInteger("code")!=0){
+                    String message = creativeObject.getString("message");
+                    Integer code = creativeObject.getInteger("code");
+                    //创建创意失败
+                    log.info("创意创建失败:code==>{};message==>{}",code,message);
+                    continue;
+                }
+                videoCnt --;
+                if(videoCnt<=0){
+                    return 0L;
+                }
             }
         }
         return videoCnt;
+
     }
     private JSONObject getCreativeParams(AiBytedanceAdvertiserStrategy strategy, Long adId,ByteDanceVideoInfo videoInfo,CtopOauthToken token) {
         JSONObject params = new JSONObject();
@@ -794,12 +853,12 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
             String date = DateUtils.formatDate(new Date(),"yyyyMMdd");
             adName = adName.replace("{{日期}}",date);
         }
-        if(adName.contains("{{dp链接标识}}")){
+        if(adName.contains("{{dp链接标识}}")&&null!=dplinkCode){
             adName = adName.replace("{{dp链接标识}}",dplinkCode);
         }
         if(adName.contains("{{出价方式}}")){
             String pricing = strategy.getAdPricing().replace("PRICING_","");
-            adName = adName.replace("{{出价方式}}",pricing);
+            adName = adName.replace("{{出价方式}}",pricing).toLowerCase(Locale.ROOT);
         }
         if(adName.contains("{{素材名称}}")){
             MaterialInfo info = materialInfoService.getParams(videoInfo.getSignature(),null);
@@ -849,9 +908,16 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
         return (Long)campaignData.getResult();
     }
 
-    private String getCampaignName(AiBytedanceAdvertiserStrategy strategy,Long dplinkIndex) {
-        String campaignSufix = getRangeIndex(strategy.getDpLinkStartIndex(),strategy.getDpLinkEndIndex(),strategy.getCampaignAdCnt(),dplinkIndex);
-        return strategy.getCampaignName()+campaignSufix;
+    private String getCampaignName(AiBytedanceAdvertiserStrategy strategy,Long dplinkIndex,String date) {
+        String result = strategy.getCampaignName();
+        if(null!=dplinkIndex&&dplinkIndex!=0){
+            String campaignSufix = getRangeIndex(strategy.getDpLinkStartIndex(),strategy.getDpLinkEndIndex(),strategy.getCampaignAdCnt(),dplinkIndex);
+            result = result+campaignSufix;
+        }
+        if(null!=date&&!date.trim().equals("")){
+            result = result +"-"+date;
+        }
+        return result;
     }
 
     private String getRangeIndex(Long dpLinkStartIndex,Long dpLinkEndIndex, Long campaignAdCnt, Long dpIndex) {
@@ -1136,8 +1202,8 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
      * @description: 添加配置 信息
      *
      * @param aiBytedanceAdvertiserStrategy
-     * @return: org.jeecg.common.api.vo.Result
-     * @author: zianY
+     * @return org.jeecg.common.api.vo.Result
+     * @author zianY
      */
     @Override
     public Result addBytedanceStrategy(AiBytedanceAdvertiserStrategy aiBytedanceAdvertiserStrategy) {
@@ -1225,7 +1291,13 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
     @Override
     public Result getAdActionText(String accountId, String landingType, String advancedCreativeType) throws Exception{
         CtopOauthToken token = tokenService.getOauthTokenByAccountId(accountId);
-       return marketingService.getActionText(token,landingType,advancedCreativeType);
+      // return marketingService.getActionText(token,landingType,advancedCreativeType);
+        //行动号召 不使用 api接口获取 使用自定义
+        String actionText[] = {"购买同款","专属优惠","抢抢看","去看看","立即下单",
+                                "获取优惠","查看详情","更多精彩","查看惊喜","领取好礼",
+                                "去逛逛","领取福利","来拼一拼","立即抢购","更多秒杀",
+                                "更多优惠","了解更多","了解详情","点击抢购"};
+       return Result.successMsg("返回行动号召成功。", actionText);
     }
 
 
@@ -1234,13 +1306,13 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
 
     /**
      *
-     * @description: 获取定向包
+     * 获取定向包
      *
      * @param accountId 广告主id
      * @param landingType 投放目标
      * @param deliveryRange
-     * @return: org.jeecg.common.api.vo.Result
-     * @author: zianY
+     * @return org.jeecg.common.api.vo.Result
+     * @author zianY
      */
     @Override
     public Result getAdAudiencePackage(String accountId, String landingType, String deliveryRange){
@@ -1273,11 +1345,11 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
 
     /**
      *
-     * @description: 获取人群包列表信息
+     * 获取人群包列表信息
      *
      * @param accountId
-     * @return: org.jeecg.common.api.vo.Result
-     * @author: zianY
+     * @return org.jeecg.common.api.vo.Result
+     * @author zianY
      */
     @Override
     public Result getDMPCustomAudience(String accountId){
@@ -1308,6 +1380,7 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
     }
 
 
+    @Override
     public Result createAudiencePackage(String accountId){
         CtopOauthToken token = tokenService.getOauthTokenByAccountId(accountId);
        Result list = marketingService.createAudiencePackage(token);

+ 18 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/service/impl/BytedanceAiVideoCreativeLogServiceImpl.java

@@ -0,0 +1,18 @@
+package org.jeecg.modules.bytedance.advertise.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.bytedance.advertise.entity.BytedanceAiVideoCreativeLog;
+import org.jeecg.modules.bytedance.advertise.mapper.BytedanceAiVideoCreativeLogMapper;
+import org.jeecg.modules.bytedance.advertise.service.IBytedanceAiVideoCreativeLogService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 视频创建创意记录信息
+ * @author jeecg-boot
+ * 2021-05-19
+ * @version V1.0
+ */
+@Service
+public class BytedanceAiVideoCreativeLogServiceImpl extends ServiceImpl<BytedanceAiVideoCreativeLogMapper, BytedanceAiVideoCreativeLog> implements IBytedanceAiVideoCreativeLogService {
+
+}

+ 6 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/common/mapper/MaterialInfoMapper.java

@@ -35,4 +35,10 @@ public interface MaterialInfoMapper extends BaseMapper<MaterialInfo> {
     List<MaterialInfo> getListByDate(@Param("startDate") String startDate,@Param("endDate") String endDate);
 
     List<MaterialInfo> getListByParams(@Param("tagCode")String tagCode,@Param("type")String type, @Param("status")Integer status, @Param("projectIds")List<Long> projectIds, @Param("materialName")String materialName, @Param("code")String code, @Param("startDate")String startDate, @Param("endDate")String endDate, @Param("userId")String userId);
+
+    Integer updMaterialOfflineById(@Param("id") String id,@Param("offlineFlag") Integer offlineFlag);
+
+
+
+
 }

+ 19 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/common/mapper/xml/MaterialInfoMapper.xml

@@ -136,4 +136,23 @@
     </select>
 
 
+
+    <!-- 素材信息 下线 -->
+    <update id="updMaterialOfflineById">
+        update ctop_material_info
+        <set>
+            <if test="offlineFlag != null">
+                offline_flag = #{offlineFlag},
+            </if>
+        </set>
+        WHERE
+        id = #{id}
+    </update>
+
+
+
+
+
+
+
 </mapper>

+ 7 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/common/service/IMaterialInfoService.java

@@ -1,8 +1,11 @@
 package org.jeecg.modules.bytedance.common.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.common.api.vo.Result;
 import org.jeecg.modules.bytedance.common.entity.MaterialInfo;
 
+import java.util.List;
+
 /**
  * 素材信息
  *
@@ -12,4 +15,8 @@ import org.jeecg.modules.bytedance.common.entity.MaterialInfo;
  */
 public interface IMaterialInfoService extends IService<MaterialInfo> {
     MaterialInfo getParams(String signature, Integer status);
+
+
+    Result updMaterialOfflineById(List<String> ids, Integer offlineFlag);
+
 }

+ 29 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/common/service/impl/MaterialInfoServiceImpl.java

@@ -3,11 +3,16 @@ package org.jeecg.modules.bytedance.common.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
 import org.jeecg.modules.bytedance.common.entity.MaterialInfo;
 import org.jeecg.modules.bytedance.common.mapper.MaterialInfoMapper;
 import org.jeecg.modules.bytedance.common.service.IMaterialInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Arrays;
+import java.util.List;
+
 /**
  * 素材信息
  *
@@ -19,6 +24,10 @@ import org.springframework.stereotype.Service;
 @Service
 public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, MaterialInfo> implements IMaterialInfoService {
 
+    @Autowired
+    private MaterialInfoMapper materialInfoMapper;
+
+
     @Override
     public MaterialInfo getParams(String signature, Integer status) {
         QueryWrapper<MaterialInfo>queryWrapper = new QueryWrapper<>();
@@ -31,6 +40,26 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
         queryWrapper.orderByDesc("create_time").last("limit 1");
         return this.getOne(queryWrapper);
     }
+
+
+    /**
+     *
+     * @description: 素材下线
+     *
+     * @param ids
+     * @param offlineFlag
+     * @return: org.jeecg.common.api.vo.Result
+     * @author: zianY
+     */
+    @Override
+    public Result updMaterialOfflineById(List<String> ids, Integer offlineFlag){
+        ids.forEach(id ->{
+            materialInfoMapper.updMaterialOfflineById(id,offlineFlag);
+        });
+        return Result.successMsg("素材下线成功。", null);
+    }
+
+
 }
 
 

+ 11 - 1
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/common/utils/StringUtils.java

@@ -206,7 +206,17 @@ public class StringUtils {
         }
         //当出价为阶梯出价时,创建的出价为 最低出价 + N * 浮动间隔 < 最高出价
         if ("STEP".equalsIgnoreCase(type)){
-            if(lastBid.add(stepBid).compareTo(maxBid)>0){
+            double max = maxBid.doubleValue();
+            double min = minBid.doubleValue();
+            double last = lastBid.doubleValue();
+            double step = stepBid.doubleValue();
+            if(last>max||last<min){
+                //如果不在出价范围内,设定为最低出价
+                reuslt = minBid.setScale(2, RoundingMode.DOWN);
+            }else if((last-min)%step!=0){
+                //表示上次是随机出价转变为阶梯出价
+                reuslt = minBid.setScale(2, RoundingMode.DOWN);
+            }else if(last+step>max){
                 reuslt = minBid.setScale(2, RoundingMode.DOWN);
             }else{
                 reuslt = lastBid.add(stepBid).setScale(2, RoundingMode.DOWN);

+ 340 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/report/entity/BytedanceAdvertiserHourlyReport.java

@@ -0,0 +1,340 @@
+package org.jeecg.modules.bytedance.report.entity;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.common.util.DateUtils;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.util.Date;
+
+/**
+ * 广告主小时级别报表信息
+ *
+ * @author jeecg-boot
+ * @version V1.0ss
+ * @date 2021-05-18
+ */
+@Data
+@TableName("ctop_bytedance_report_advertiser_hourly")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_bytedance_report_advertiser_hourly对象", description = "广告主小时级别报表信息")
+public class BytedanceAdvertiserHourlyReport {
+
+    /**
+     * id
+     */
+    @TableId
+    @ApiModelProperty(value = "id")
+    private String id;
+    /**
+     * 广告主id
+     */
+    @ApiModelProperty(value = "广告主id")
+    private Long advertiserId;
+
+    @ApiModelProperty(value = "数据起始时间")
+    private String statDatetime;
+
+    @ApiModelProperty(value = "小时数")
+    private Integer statHour;
+    /**
+     * 展示量
+     */
+    @ApiModelProperty(value = "展示量")
+    private Long showNum;
+    /**
+     * 点击量
+     */
+    @ApiModelProperty(value = "点击量")
+    private Long click;
+    /**
+     * 转化量
+     */
+    @ApiModelProperty(value = "转化量")
+    private Long convertNum;
+    /**
+     * 总花费
+     */
+    @ApiModelProperty(value = "总花费")
+    private BigDecimal cost;
+    /**
+     * 应用下载-激活
+     */
+    @ApiModelProperty(value = "应用下载-激活")
+    private Long active;
+    /**
+     * 应用下载-安卓下载完成
+     */
+    @ApiModelProperty(value = "应用下载-安卓下载完成")
+    private Long downloadFinish;
+    /**
+     * 应用下载-安卓下载开始
+     */
+    @ApiModelProperty(value = "应用下载-安卓下载开始")
+    private Long downloadStart;
+    /**
+     * 应用下载-点击安装数
+     */
+    @ApiModelProperty(value = "应用下载-点击安装数")
+    private Long clickInstall;
+    /**
+     * 应用下载-安卓安装完成
+     */
+    @ApiModelProperty(value = "应用下载-安卓安装完成")
+    private Long installFinish;
+    /**
+     * 应用下载-注册
+     */
+    @ApiModelProperty(value = "应用下载-注册")
+    private Long register;
+    /**
+     * 应用下载-付费数
+     */
+    @ApiModelProperty(value = "应用下载-付费数")
+    private Long payCount;
+    /**
+     * 应用下载-到达uv
+     */
+    @ApiModelProperty(value = "应用下载-到达uv")
+    private Long inAppUv;
+    /**
+     * 应用下载-详情页到站uv
+     */
+    @ApiModelProperty(value = "应用下载-详情页到站uv")
+    private Long inAppDetailUv;
+    /**
+     * 应用下载-加入购物车
+     */
+    @ApiModelProperty(value = "应用下载-加入购物车")
+    private Long inAppCart;
+    /**
+     * 应用下载-提交订单
+     */
+    @ApiModelProperty(value = "应用下载-提交订单")
+    private Long inAppOrder;
+    /**
+     * 应用下载-付费
+     */
+    @ApiModelProperty(value = "应用下载-付费")
+    private Long inAppPay;
+    /**
+     * 落地页-电话拨打数
+     */
+    @ApiModelProperty(value = "落地页-电话拨打数")
+    private Long phone;
+    /**
+     * 表单提交数
+     */
+    @ApiModelProperty(value = "表单提交数")
+    private Long form;
+    /**
+     * 落地页-地图搜索
+     */
+    @ApiModelProperty(value = "落地页-地图搜索")
+    private Long mapSearch;
+    /**
+     * 落地页-按钮button
+     */
+    @ApiModelProperty(value = "落地页-按钮button")
+    private Long button;
+    /**
+     * 落地页-关键页面浏览
+     */
+    @ApiModelProperty(value = "落地页-关键页面浏览")
+    private Long view;
+    /**
+     * 落地页-QQ咨询数
+     */
+    @ApiModelProperty(value = "落地页-QQ咨询数")
+    private Long qq;
+    /**
+     * 落地页-抽奖数
+     */
+    @ApiModelProperty(value = "落地页-抽奖数")
+    private Long lottery;
+    /**
+     * 落地页-投票
+     */
+    @ApiModelProperty(value = "落地页-投票")
+    private Long vote;
+    /**
+     * 落地页-页面跳转
+     */
+    @ApiModelProperty(value = "落地页-页面跳转")
+    private Long redirect;
+    /**
+     * 落地页-商品购买
+     */
+    @ApiModelProperty(value = "落地页-商品购买")
+    private Long shopping;
+    /**
+     * 落地页-在线咨询
+     */
+    @ApiModelProperty(value = "落地页-在线咨询")
+    private Long consult;
+    /**
+     * 落地页-微信
+     */
+    @ApiModelProperty(value = "落地页-微信")
+    private Long wechat;
+    /**
+     * 落地页-智能电话确认拨打
+     */
+    @ApiModelProperty(value = "落地页-智能电话确认拨打")
+    private Long phoneConfirm;
+    /**
+     * 落地页-智能电话确认接通
+     */
+    @ApiModelProperty(value = "落地页-智能电话确认接通")
+    private Long phoneConnect;
+    /**
+     * 落地页-智能电话有效咨询
+     */
+    @ApiModelProperty(value = "落地页-智能电话有效咨询")
+    private Long consultEffective;
+    /**
+     * 视频-总播放
+     */
+    @ApiModelProperty(value = "视频-总播放")
+    private Long totalPlay;
+    /**
+     * 视频-有效播放
+     */
+    @ApiModelProperty(value = "视频-有效播放")
+    private Long validPlay;
+    /**
+     * 视频-wifi播放
+     */
+    @ApiModelProperty(value = "视频-wifi播放")
+    private Long wifiPlay;
+    /**
+     * 视频-播放时长,单位ms
+     */
+    @ApiModelProperty(value = "视频-播放时长,单位ms")
+    private Long playDurationSum;
+    /**
+     * 视频-播放25%进度总数
+     */
+    @ApiModelProperty(value = "视频-播放25%进度总数")
+    private Long play25FeedBreak;
+    /**
+     * 视频-播放50%进度总数
+     */
+    @ApiModelProperty(value = "视频-播放50%进度总数")
+    private Long play50FeedBreak;
+    /**
+     * 视频-播放75%进度总数
+     */
+    @ApiModelProperty(value = "视频-播放75%进度总数")
+    private Long play75FeedBreak;
+    /**
+     * 视频-播放100%进度总数
+     */
+    @ApiModelProperty(value = "视频-播放100%进度总数")
+    private Long play100FeedBreak;
+    /**
+     * 附加创意-电话按钮
+     */
+    @ApiModelProperty(value = "附加创意-电话按钮")
+    private Long advancedCreativePhoneClick;
+    /**
+     * 附加创意-在线咨询
+     */
+    @ApiModelProperty(value = "附加创意-在线咨询")
+    private Long advancedCreativeCounselClick;
+    /**
+     * 附加创意-表单提交
+     */
+    @ApiModelProperty(value = "附加创意-表单提交")
+    private Long advancedCreativeFormClick;
+    /**
+     * 互动数据-分享数
+     */
+    @ApiModelProperty(value = "互动数据-分享数")
+    private Long share;
+    /**
+     * 互动数据-评论数
+     */
+    @ApiModelProperty(value = "互动数据-评论数")
+    private Long comment;
+    /**
+     * 互动数据-点赞数
+     */
+    @ApiModelProperty(value = "互动数据-点赞数")
+    private Long likeNum;
+    /**
+     * 互动数据-关注数
+     */
+    @ApiModelProperty(value = "互动数据-关注数")
+    private Long follow;
+    /**
+     * 互动数据-主页访问量
+     */
+    @ApiModelProperty(value = "互动数据-主页访问量")
+    private Long homeVisited;
+    /**
+     * 互动数据-挑战赛查看数
+     */
+    @ApiModelProperty(value = "互动数据-挑战赛查看数")
+    private Long iesChallengeClick;
+    /**
+     * 互动数据-音乐查看数
+     */
+    @ApiModelProperty(value = "互动数据-音乐查看数")
+    private Long iesMusicClick;
+    /**
+     * 互动数据-单次互动成本
+     */
+    @ApiModelProperty(value = "互动数据-单次互动成本")
+    private BigDecimal interactPerCost;
+    /**
+     * 次留数
+     */
+    @ApiModelProperty(value = "次留数")
+    private Long nextDayOpen;
+
+    /**
+     * 次留率
+     */
+    @ApiModelProperty(value = "次留率")
+    private BigDecimal nextDayOpenRate;
+    /**
+     * 次留成本
+     */
+    @ApiModelProperty(value = "次留成本")
+    private BigDecimal nextDayOpenCost;
+    /**
+     * 应用下载广告数据-次留数
+     */
+    private Long attributionNextDayOpenCnt;
+    /**
+     * 应用下载广告数据-次留成本
+     */
+    private BigDecimal attributionNextDayOpenCost;
+    /**
+     * 应用下载广告数据-次留率
+     */
+    private BigDecimal attributionNextDayOpenRate;
+    /**
+     * createTime
+     */
+    @ApiModelProperty(value = "createTime")
+    private Date createTime;
+    /**
+     * updateTime
+     */
+    @ApiModelProperty(value = "updateTime")
+    private Date updateTime;
+
+
+
+}

+ 342 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/report/entity/BytedancePlanHourlyReport.java

@@ -0,0 +1,342 @@
+package org.jeecg.modules.bytedance.report.entity;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.common.util.DateUtils;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.util.Date;
+
+/**
+ * @Description: 广告计划时报表信息
+ * @Author: jeecg-boot
+ * @Date: 2021-05-18
+ * @Version: V1.0
+ */
+@Data
+@TableName("ctop_bytedance_report_plan_hourly")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_bytedance_report_plan_hourly对象", description = "广告计划时报表信息")
+public class BytedancePlanHourlyReport {
+
+    /**
+     * id
+     */
+    @TableId
+    @ApiModelProperty(value = "id")
+    private String id;
+    /**
+     * 广告主id
+     */
+    @ApiModelProperty(value = "广告主id")
+    private Long advertiserId;
+    /**
+     * 数据起始时间
+     */
+    @ApiModelProperty(value = "数据起始时间")
+    private String statDatetime;
+
+    private Integer statHour;
+    /**
+     * 展示量
+     */
+    @ApiModelProperty(value = "展示量")
+    private Long showNum;
+    /**
+     * 点击量
+     */
+    @ApiModelProperty(value = "点击量")
+    private Long click;
+    /**
+     * 转化量
+     */
+    @ApiModelProperty(value = "转化量")
+    private Long convertNum;
+    /**
+     * 总花费
+     */
+    @ApiModelProperty(value = "总花费")
+    private BigDecimal cost;
+    /**
+     * 应用下载-激活
+     */
+    @ApiModelProperty(value = "应用下载-激活")
+    private Long active;
+    /**
+     * 应用下载-安卓下载完成
+     */
+    @ApiModelProperty(value = "应用下载-安卓下载完成")
+    private Long downloadFinish;
+    /**
+     * 应用下载-安卓下载开始
+     */
+    @ApiModelProperty(value = "应用下载-安卓下载开始")
+    private Long downloadStart;
+    /**
+     * 应用下载-点击安装数
+     */
+    @ApiModelProperty(value = "应用下载-点击安装数")
+    private Long clickInstall;
+    /**
+     * 应用下载-安卓安装完成
+     */
+    @ApiModelProperty(value = "应用下载-安卓安装完成")
+    private Long installFinish;
+    /**
+     * 应用下载-注册
+     */
+    @ApiModelProperty(value = "应用下载-注册")
+    private Long register;
+    /**
+     * 应用下载-付费数
+     */
+    @ApiModelProperty(value = "应用下载-付费数")
+    private Long payCount;
+    /**
+     * 应用下载-到达uv
+     */
+    @ApiModelProperty(value = "应用下载-到达uv")
+    private Long inAppUv;
+    /**
+     * 应用下载-详情页到站uv
+     */
+    @ApiModelProperty(value = "应用下载-详情页到站uv")
+    private Long inAppDetailUv;
+    /**
+     * 应用下载-加入购物车
+     */
+    @ApiModelProperty(value = "应用下载-加入购物车")
+    private Long inAppCart;
+    /**
+     * 应用下载-提交订单
+     */
+    @ApiModelProperty(value = "应用下载-提交订单")
+    private Long inAppOrder;
+    /**
+     * 应用下载-付费
+     */
+    @ApiModelProperty(value = "应用下载-付费")
+    private Long inAppPay;
+    /**
+     * 落地页-电话拨打数
+     */
+    @ApiModelProperty(value = "落地页-电话拨打数")
+    private Long phone;
+    /**
+     * 表单提交数
+     */
+    @ApiModelProperty(value = "表单提交数")
+    private Long form;
+    /**
+     * 落地页-地图搜索
+     */
+    @ApiModelProperty(value = "落地页-地图搜索")
+    private Long mapSearch;
+    /**
+     * 落地页-按钮button
+     */
+    @ApiModelProperty(value = "落地页-按钮button")
+    private Long button;
+    /**
+     * 落地页-关键页面浏览
+     */
+    @ApiModelProperty(value = "落地页-关键页面浏览")
+    private Long view;
+    /**
+     * 落地页-QQ咨询数
+     */
+    @ApiModelProperty(value = "落地页-QQ咨询数")
+    private Long qq;
+    /**
+     * 落地页-抽奖数
+     */
+    @ApiModelProperty(value = "落地页-抽奖数")
+    private Long lottery;
+    /**
+     * 落地页-投票
+     */
+    @ApiModelProperty(value = "落地页-投票")
+    private Long vote;
+    /**
+     * 落地页-页面跳转
+     */
+    @ApiModelProperty(value = "落地页-页面跳转")
+    private Long redirect;
+    /**
+     * 落地页-商品购买
+     */
+    @ApiModelProperty(value = "落地页-商品购买")
+    private Long shopping;
+    /**
+     * 落地页-在线咨询
+     */
+    @ApiModelProperty(value = "落地页-在线咨询")
+    private Long consult;
+    /**
+     * 落地页-微信
+     */
+    @ApiModelProperty(value = "落地页-微信")
+    private Long wechat;
+    /**
+     * 落地页-智能电话确认拨打
+     */
+    @ApiModelProperty(value = "落地页-智能电话确认拨打")
+    private Long phoneConfirm;
+    /**
+     * 落地页-智能电话确认接通
+     */
+    @ApiModelProperty(value = "落地页-智能电话确认接通")
+    private Long phoneConnect;
+    /**
+     * 落地页-智能电话有效咨询
+     */
+    @ApiModelProperty(value = "落地页-智能电话有效咨询")
+    private Long consultEffective;
+    /**
+     * 视频-总播放
+     */
+    @ApiModelProperty(value = "视频-总播放")
+    private Long totalPlay;
+    /**
+     * 视频-有效播放
+     */
+    @ApiModelProperty(value = "视频-有效播放")
+    private Long validPlay;
+    /**
+     * 视频-wifi播放
+     */
+    @ApiModelProperty(value = "视频-wifi播放")
+    private Long wifiPlay;
+    /**
+     * 视频-播放时长,单位ms
+     */
+    @ApiModelProperty(value = "视频-播放时长,单位ms")
+    private Long playDurationSum;
+    /**
+     * 视频-播放25%进度总数
+     */
+    @ApiModelProperty(value = "视频-播放25%进度总数")
+    private Long play25FeedBreak;
+    /**
+     * 视频-播放50%进度总数
+     */
+    @ApiModelProperty(value = "视频-播放50%进度总数")
+    private Long play50FeedBreak;
+    /**
+     * 视频-播放75%进度总数
+     */
+    @ApiModelProperty(value = "视频-播放75%进度总数")
+    private Long play75FeedBreak;
+    /**
+     * 视频-播放100%进度总数
+     */
+    @ApiModelProperty(value = "视频-播放100%进度总数")
+    private Long play100FeedBreak;
+    /**
+     * 附加创意-电话按钮
+     */
+    @ApiModelProperty(value = "附加创意-电话按钮")
+    private Long advancedCreativePhoneClick;
+    /**
+     * 附加创意-在线咨询
+     */
+    @ApiModelProperty(value = "附加创意-在线咨询")
+    private Long advancedCreativeCounselClick;
+    /**
+     * 附加创意-表单提交
+     */
+    @ApiModelProperty(value = "附加创意-表单提交")
+    private Long advancedCreativeFormClick;
+    /**
+     * 互动数据-分享数
+     */
+    @ApiModelProperty(value = "互动数据-分享数")
+    private Long share;
+    /**
+     * 互动数据-评论数
+     */
+    @ApiModelProperty(value = "互动数据-评论数")
+    private Long comment;
+    /**
+     * 互动数据-点赞数
+     */
+    @ApiModelProperty(value = "互动数据-点赞数")
+    private Long likeNum;
+    /**
+     * 互动数据-关注数
+     */
+    @ApiModelProperty(value = "互动数据-关注数")
+    private Long follow;
+    /**
+     * 互动数据-主页访问量
+     */
+    @ApiModelProperty(value = "互动数据-主页访问量")
+    private Long homeVisited;
+    /**
+     * 互动数据-挑战赛查看数
+     */
+    @ApiModelProperty(value = "互动数据-挑战赛查看数")
+    private Long iesChallengeClick;
+    /**
+     * 互动数据-音乐查看数
+     */
+    @ApiModelProperty(value = "互动数据-音乐查看数")
+    private Long iesMusicClick;
+    /**
+     * 互动数据-单次互动成本
+     */
+    @ApiModelProperty(value = "互动数据-单次互动成本")
+    private BigDecimal interactPerCost;
+    /**
+     * 次留数
+     */
+    @ApiModelProperty(value = "次留数")
+    private Long nextDayOpen;
+    /**
+     * 次留率
+     */
+    @ApiModelProperty(value = "次留率")
+    private BigDecimal nextDayOpenRate;
+    /**
+     * 次留成本
+     */
+    @ApiModelProperty(value = "次留成本")
+    private BigDecimal nextDayOpenCost;
+    /**
+     * 广告组id
+     */
+    @ApiModelProperty(value = "广告组id")
+    private Long adId;
+    /**
+     * 广告组名称
+     */
+    @ApiModelProperty(value = "广告组名称")
+    private String adName;
+    /**
+     * campaignId
+     */
+    @ApiModelProperty(value = "campaignId")
+    private Long campaignId;
+    /**
+     * createTime
+     */
+    @ApiModelProperty(value = "createTime")
+    private Date createTime;
+    /**
+     * updateTime
+     */
+    @ApiModelProperty(value = "updateTime")
+    private Date updateTime;
+
+    private String channelCode;
+
+}

+ 328 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/report/entity/BytedanceReportMaterialDaily.java

@@ -0,0 +1,328 @@
+package org.jeecg.modules.bytedance.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;
+
+/**
+ * aaa
+ * @author jeecg-boot
+ * @date   2021-05-18
+ * @version V1.0
+ */
+@Data
+@TableName("ctop_bytedance_report_material_daily")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="ctop_bytedance_report_material_daily对象", description="素材报表信息")
+public class BytedanceReportMaterialDaily {
+    
+	/**id*/
+	@TableId(type = IdType.UUID)
+    @ApiModelProperty(value = "id")
+	private Integer id;
+	/**广告主id*/
+    @ApiModelProperty(value = "广告主id")
+	private Integer accountId;
+	/**素材id*/
+    @ApiModelProperty(value = "素材id")
+	private Integer materialId;
+	/**数据起始时间*/
+    @ApiModelProperty(value = "数据起始时间")
+	private String statDatetime;
+	/**点击量*/
+    @ApiModelProperty(value = "点击量")
+	private Integer click;
+	/**总花费*/
+    @ApiModelProperty(value = "总花费")
+	private java.math.BigDecimal cost;
+	/**应用下载广告数据-激活数*/
+    @ApiModelProperty(value = "应用下载广告数据-激活数")
+	private Integer active;
+	/**应用下载-安卓下载完成*/
+    @ApiModelProperty(value = "应用下载-安卓下载完成")
+	private Integer downloadFinish;
+	/**应用下载-安卓下载开始*/
+    @ApiModelProperty(value = "应用下载-安卓下载开始")
+	private Integer downloadStart;
+	/**应用下载-安卓安装完成*/
+    @ApiModelProperty(value = "应用下载-安卓安装完成")
+	private Integer installFinish;
+	/**应用下载-注册*/
+    @ApiModelProperty(value = "应用下载-注册")
+	private Integer register;
+	/**应用下载-付费数*/
+    @ApiModelProperty(value = "应用下载-付费数")
+	private Integer payCount;
+	/**应用下载广告数据-APP内访问*/
+    @ApiModelProperty(value = "应用下载广告数据-APP内访问")
+	private Integer inAppUv;
+	/**应用下载广告数据-APP内访问详情页*/
+    @ApiModelProperty(value = "应用下载广告数据-APP内访问详情页")
+	private Integer inAppDetailUv;
+	/**	应用下载广告数据-APP内加入购物车*/
+    @ApiModelProperty(value = "	应用下载广告数据-APP内加入购物车")
+	private Integer inAppCart;
+	/**	应用下载广告数据-APP内下单*/
+    @ApiModelProperty(value = "	应用下载广告数据-APP内下单")
+	private Integer inAppOrder;
+	/**应用下载广告数据-APP内付费*/
+    @ApiModelProperty(value = "应用下载广告数据-APP内付费")
+	private Integer inAppPay;
+	/**落地页转化数据-点击电话按钮*/
+    @ApiModelProperty(value = "落地页转化数据-点击电话按钮")
+	private Integer phone;
+	/**落地页转化数据-表单提交*/
+    @ApiModelProperty(value = "落地页转化数据-表单提交")
+	private Integer form;
+	/**落地页-地图搜索*/
+    @ApiModelProperty(value = "落地页-地图搜索")
+	private Integer mapSearch;
+	/**落地页-按钮button*/
+    @ApiModelProperty(value = "落地页-按钮button")
+	private Integer button;
+	/**落地页-关键页面浏览*/
+    @ApiModelProperty(value = "落地页-关键页面浏览")
+	private Integer viewMaterial;
+	/**落地页-QQ咨询数*/
+    @ApiModelProperty(value = "落地页-QQ咨询数")
+	private Integer qq;
+	/**落地页-抽奖数*/
+    @ApiModelProperty(value = "落地页-抽奖数")
+	private Integer lottery;
+	/**落地页-投票*/
+    @ApiModelProperty(value = "落地页-投票")
+	private Integer vote;
+	/**落地页-页面跳转*/
+    @ApiModelProperty(value = "落地页-页面跳转")
+	private Integer redirect;
+	/**落地页-商品购买*/
+    @ApiModelProperty(value = "落地页-商品购买")
+	private Integer shopping;
+	/**落地页-在线咨询*/
+    @ApiModelProperty(value = "落地页-在线咨询")
+	private Integer consult;
+	/**落地页-微信*/
+    @ApiModelProperty(value = "落地页-微信")
+	private Integer wechat;
+	/**落地页-智能电话确认拨打*/
+    @ApiModelProperty(value = "落地页-智能电话确认拨打")
+	private Integer phoneConfirm;
+	/**落地页-智能电话确认接通*/
+    @ApiModelProperty(value = "落地页-智能电话确认接通")
+	private Integer phoneConnect;
+	/**落地页-智能电话有效咨询*/
+    @ApiModelProperty(value = "落地页-智能电话有效咨询")
+	private Integer consultEffective;
+	/**视频-总播放*/
+    @ApiModelProperty(value = "视频-总播放")
+	private Integer totalPlay;
+	/**视频-有效播放*/
+    @ApiModelProperty(value = "视频-有效播放")
+	private Integer validPlay;
+	/**视频-wifi播放*/
+    @ApiModelProperty(value = "视频-wifi播放")
+	private Integer wifiPlay;
+	/**视频-播放时长,单位ms*/
+    @ApiModelProperty(value = "视频-播放时长,单位ms")
+	private Integer playDurationSum;
+	/**视频-播放25%进度总数*/
+    @ApiModelProperty(value = "视频-播放25%进度总数")
+	private Integer play25FeedBreak;
+	/**视频-播放50%进度总数*/
+    @ApiModelProperty(value = "视频-播放50%进度总数")
+	private Integer play50FeedBreak;
+	/**视频-播放75%进度总数*/
+    @ApiModelProperty(value = "视频-播放75%进度总数")
+	private Integer play75FeedBreak;
+	/**视频数据-99%进度播放数*/
+    @ApiModelProperty(value = "视频数据-99%进度播放数")
+	private Integer play100FeedBreak;
+	/**附加创意-电话按钮*/
+    @ApiModelProperty(value = "附加创意-电话按钮")
+	private Integer advancedCreativePhoneClick;
+	/**附加创意-在线咨询*/
+    @ApiModelProperty(value = "附加创意-在线咨询")
+	private Integer advancedCreativeCounselClick;
+	/**附加创意-表单提交*/
+    @ApiModelProperty(value = "附加创意-表单提交")
+	private Integer advancedCreativeFormClick;
+	/**互动数据-分享数*/
+    @ApiModelProperty(value = "互动数据-分享数")
+	private Integer shareMaterial;
+	/**互动数据-评论数*/
+    @ApiModelProperty(value = "互动数据-评论数")
+	private Integer commentMaterial;
+	/**互动数据-新增关注数*/
+    @ApiModelProperty(value = "互动数据-新增关注数")
+	private Integer follow;
+	/**互动数据-主页访问量*/
+    @ApiModelProperty(value = "互动数据-主页访问量")
+	private Integer homeVisited;
+	/**互动数据-挑战赛查看数*/
+    @ApiModelProperty(value = "互动数据-挑战赛查看数")
+	private Integer iesChallengeClick;
+	/**互动数据-音乐查看数*/
+    @ApiModelProperty(value = "互动数据-音乐查看数")
+	private Integer iesMusicClick;
+	/**次留数*/
+    @ApiModelProperty(value = "次留数")
+	private Integer nextDayOpen;
+	/**次留率*/
+    @ApiModelProperty(value = "次留率")
+	private java.math.BigDecimal nextDayOpenRate;
+	/**次留成本*/
+    @ApiModelProperty(value = "次留成本")
+	private java.math.BigDecimal nextDayOpenCost;
+	/**素材类型*/
+    @ApiModelProperty(value = "素材类型")
+	private String imageMode;
+	/**INVENTORY_FEED头条信息流__INVENTORY_TEXT_LINK头条文章详情页(已废弃)__INVENTORY_VIDEO_FEED西瓜信息流__INVENTORY_HOTSOON_FEED火山信息流|__NVENTORY_AWEME_FEED抖音信息流__INVENTORY_UNION_SLOT穿山甲__UNION_BOUTIQUE_GAME穿山甲精选休闲游戏__INVENTORY_UNION_SPLASH_SLOT穿山甲开屏广告__INVENTORY_AWEME_SEARCH搜索广告——抖音位__INVENTORY_SEARCH搜索广告——头条位*/
+    @ApiModelProperty(value = "INVENTORY_FEED头条信息流__INVENTORY_TEXT_LINK头条文章详情页(已废弃)__INVENTORY_VIDEO_FEED西瓜信息流__INVENTORY_HOTSOON_FEED火山信息流|__NVENTORY_AWEME_FEED抖音信息流__INVENTORY_UNION_SLOT穿山甲__UNION_BOUTIQUE_GAME穿山甲精选休闲游戏__INVENTORY_UNION_SPLASH_SLOT穿山甲开屏广告__INVENTORY_AWEME_SEARCH搜索广告——抖音位__INVENTORY_SEARCH搜索广告——头条位")
+	private String inventory;
+	/**付费价值*/
+    @ApiModelProperty(value = "付费价值")
+	private Integer activePayAmount;
+	/**视频数据-有效播放成本*/
+    @ApiModelProperty(value = "视频数据-有效播放成本")
+	private java.math.BigDecimal validPlayCost;
+	/**附加创意-附加创意卡券领取*/
+    @ApiModelProperty(value = "附加创意-附加创意卡券领取")
+	private Integer advancedCreativeCouponAddition;
+	/**convertMaterial*/
+    @ApiModelProperty(value = "convertMaterial")
+	private Integer convertMaterial;
+	/**应用下载广告数据-付费成本*/
+    @ApiModelProperty(value = "应用下载广告数据-付费成本")
+	private java.math.BigDecimal activePayCost;
+	/**落地页转化数据-下载开始*/
+    @ApiModelProperty(value = "落地页转化数据-下载开始")
+	private Integer download;
+	/**cpa*/
+    @ApiModelProperty(value = "cpa")
+	private java.math.BigDecimal cpa;
+	/**cpc*/
+    @ApiModelProperty(value = "cpc")
+	private java.math.BigDecimal cpc;
+	/**互动数据-POI点击数*/
+    @ApiModelProperty(value = "互动数据-POI点击数")
+	private Integer locationClick;
+	/**视频数据-播完率*/
+	@Excel(name = "视频数据-播完率", width = 15)
+    @ApiModelProperty(value = "视频数据-播完率")
+	private java.math.BigDecimal playOverRate;
+	/**展现数据-点击率*/
+    @ApiModelProperty(value = "展现数据-点击率")
+	private java.math.BigDecimal ctr;
+	/**cpm*/
+    @ApiModelProperty(value = "cpm")
+	private java.math.BigDecimal cpm;
+	/**视频数据-WiFi播放占比*/
+    @ApiModelProperty(value = "视频数据-WiFi播放占比")
+	private java.math.BigDecimal wifiPlayRate;
+	/**互动数据-点赞数*/
+    @ApiModelProperty(value = "互动数据-点赞数")
+	private Integer likeMaterial;
+	/**应用下载广告数据-付费率*/
+    @ApiModelProperty(value = "应用下载广告数据-付费率")
+	private java.math.BigDecimal activePayRate;
+	/**应用下载广告数据-激活成本*/
+    @ApiModelProperty(value = "应用下载广告数据-激活成本")
+	private java.math.BigDecimal activeCost;
+	/**应用下载广告数据-关键行为成本*/
+    @ApiModelProperty(value = "应用下载广告数据-关键行为成本")
+	private java.math.BigDecimal gameAddictionCost;
+	/**应用下载广告数据-关键行为数*/
+    @ApiModelProperty(value = "应用下载广告数据-关键行为数")
+	private Integer gameAddiction;
+	/**应用下载广告数据-激活率*/
+    @ApiModelProperty(value = "应用下载广告数据-激活率")
+	private java.math.BigDecimal activeRate;
+	/**播放超过10秒的总数*/
+    @ApiModelProperty(value = "播放超过10秒的总数")
+	private Integer playDuration10s;
+	/**有效电话数*/
+    @ApiModelProperty(value = "有效电话数")
+	private Integer phoneEffective;
+	/**应用下载广告数据-关键行为率*/
+    @ApiModelProperty(value = "应用下载广告数据-关键行为率")
+	private java.math.BigDecimal gameAddictionRate;
+	/**应用下载广告数据-注册率*/
+    @ApiModelProperty(value = "应用下载广告数据-注册率")
+	private java.math.BigDecimal activeRegisterRate;
+	/**视频平均播放时长*/
+    @ApiModelProperty(value = "视频平均播放时长")
+	private java.math.BigDecimal averageVideoPlay;
+	/**应用下载广告数据-安卓下载完成成本*/
+    @ApiModelProperty(value = "应用下载广告数据-安卓下载完成成本")
+	private java.math.BigDecimal downloadFinishCost;
+	/**播放超过3秒的总数*/
+    @ApiModelProperty(value = "播放超过3秒的总数")
+	private Integer playDuration3s;
+	/**应用下载广告数据-注册成本*/
+    @ApiModelProperty(value = "应用下载广告数据-注册成本")
+	private java.math.BigDecimal activeRegisterCost;
+	/**showMaterial*/
+    @ApiModelProperty(value = "showMaterial")
+	private Integer showMaterial;
+	/**转化数据-转化率*/
+    @ApiModelProperty(value = "转化数据-转化率")
+	private java.math.BigDecimal convertRate;
+	/**应用下载广告数据-安卓下载完成率*/
+    @ApiModelProperty(value = "应用下载广告数据-安卓下载完成率")
+	private java.math.BigDecimal downloadFinishRate;
+	/**应用下载广告数据-安卓安装完成率*/
+    @ApiModelProperty(value = "应用下载广告数据-安卓安装完成率")
+	private java.math.BigDecimal installFinishRate;
+	/**落地页转化数据-建站卡券领取*/
+    @ApiModelProperty(value = "落地页转化数据-建站卡券领取")
+	private Integer coupon;
+	/**落地页转化数据-卡券页领取*/
+    @ApiModelProperty(value = "落地页转化数据-卡券页领取")
+	private Integer couponSinglePage;
+	/**播放完成总数(已下线)*/
+    @ApiModelProperty(value = "播放完成总数(已下线)")
+	private Integer playOver;
+	/**应用下载广告数据-安卓下载开始成本*/
+    @ApiModelProperty(value = "应用下载广告数据-安卓下载开始成本")
+	private java.math.BigDecimal downloadStartCost;
+	/**落地页转化数据-短信咨询*/
+    @ApiModelProperty(value = "落地页转化数据-短信咨询")
+	private Integer message;
+	/**playDuration*/
+    @ApiModelProperty(value = "playDuration")
+	private Integer playDuration;
+	/**视频数据-有效播放率*/
+    @ApiModelProperty(value = "视频数据-有效播放率")
+	private java.math.BigDecimal validPlayRate;
+	/**视频数据-平均单次播放时长*/
+    @ApiModelProperty(value = "视频数据-平均单次播放时长")
+	private java.math.BigDecimal averagePlayTimePerPlay;
+	/**转化数据-转化成本*/
+    @ApiModelProperty(value = "转化数据-转化成本")
+	private java.math.BigDecimal convertCost;
+	/**转化展示率*/
+    @ApiModelProperty(value = "转化展示率")
+	private java.math.BigDecimal convertShowRate;
+	/**应用下载广告数据-安卓安装完成成本*/
+    @ApiModelProperty(value = "应用下载广告数据-安卓安装完成成本")
+	private java.math.BigDecimal installFinishCost;
+	/**应用下载广告数据-安卓下载开始率*/
+    @ApiModelProperty(value = "应用下载广告数据-安卓下载开始率")
+	private java.math.BigDecimal downloadStartRate;
+    @ApiModelProperty(value = "createTime")
+	private Date createTime;
+    @ApiModelProperty(value = "updateTime")
+	private Date updateTime;
+}

+ 17 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/report/mapper/BytedanceAdvertiserHourlyReportMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.bytedance.report.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import org.jeecg.modules.bytedance.report.entity.BytedanceAdvertiserHourlyReport;
+
+import java.math.BigDecimal;
+
+/**
+ * @Description: 广告主小时级别报表信息
+ * @Author: jeecg-boot
+ * @Date: 2021-05-18
+ * @Version: V1.0
+ */
+public interface BytedanceAdvertiserHourlyReportMapper extends BaseMapper<BytedanceAdvertiserHourlyReport> {
+
+}

+ 18 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/report/mapper/BytedancePlanHourlyReportMapper.java

@@ -0,0 +1,18 @@
+package org.jeecg.modules.bytedance.report.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.bytedance.report.entity.BytedancePlanHourlyReport;
+
+import java.util.List;
+
+/**
+ * @Description: 广告计划时报表信息
+ * @Author: jeecg-boot
+ * @Date: 2021-05-18
+ * @Version: V1.0
+ */
+public interface BytedancePlanHourlyReportMapper extends BaseMapper<BytedancePlanHourlyReport> {
+
+
+}

+ 16 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/report/mapper/BytedanceReportMaterialDailyMapper.java

@@ -0,0 +1,16 @@
+package org.jeecg.modules.bytedance.report.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.bytedance.report.entity.BytedanceReportMaterialDaily;
+
+
+/**
+ * 素材报表
+ * @author: jeecg-boot
+ * @date:   2021-05-18
+ * @cersion: V1.0
+ */
+public interface BytedanceReportMaterialDailyMapper extends BaseMapper<BytedanceReportMaterialDaily> {
+
+}

+ 7 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/report/mapper/xml/BytedanceAdvertiserHourlyReportMapper.xml

@@ -0,0 +1,7 @@
+<?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="org.jeecg.modules.bytedance.report.mapper.BytedanceAdvertiserHourlyReportMapper">
+
+
+
+</mapper>

+ 5 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/report/mapper/xml/BytedancePlanHourlyReportMapper.xml

@@ -0,0 +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="org.jeecg.modules.bytedance.report.mapper.BytedancePlanHourlyReportMapper">
+
+</mapper>

+ 6 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/report/mapper/xml/BytedanceReportMaterialDailyMapper.xml

@@ -0,0 +1,6 @@
+<?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="org.jeecg.modules.bytedance.report.mapper.BytedanceReportMaterialDailyMapper">
+
+
+</mapper>

+ 14 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/report/service/IBytedanceAdvertiserHourlyReportService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.bytedance.report.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.bytedance.report.entity.BytedanceAdvertiserHourlyReport;
+
+/**
+ * @Description: 广告主小时级别报表信息
+ * @Author: jeecg-boot
+ * @Date: 2021-05-18
+ * @Version: V1.0
+ */
+public interface IBytedanceAdvertiserHourlyReportService extends IService<BytedanceAdvertiserHourlyReport> {
+
+}

+ 16 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/report/service/IBytedancePlanHourlyReportService.java

@@ -0,0 +1,16 @@
+package org.jeecg.modules.bytedance.report.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.bytedance.report.entity.BytedancePlanHourlyReport;
+
+import java.util.List;
+
+/**
+ * @Description: 广告计划时报表信息
+ * @Author: jeecg-boot
+ * @Date: 2021-05-18
+ * @Version: V1.0
+ */
+public interface IBytedancePlanHourlyReportService extends IService<BytedancePlanHourlyReport> {
+
+}

+ 14 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/report/service/IBytedanceReportMaterialDailyService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.bytedance.report.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.bytedance.report.entity.BytedanceReportMaterialDaily;
+
+/**
+ * 素材报表
+ * @author jeecg-boot
+ * @date   2021-05-18
+ * @version V1.0
+ */
+public interface IBytedanceReportMaterialDailyService extends IService<BytedanceReportMaterialDaily> {
+
+}

+ 21 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/report/service/impl/BytedanceAdvertiserHourlyReportServiceImpl.java

@@ -0,0 +1,21 @@
+package org.jeecg.modules.bytedance.report.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.bytedance.report.entity.BytedanceAdvertiserHourlyReport;
+import org.jeecg.modules.bytedance.report.mapper.BytedanceAdvertiserHourlyReportMapper;
+import org.jeecg.modules.bytedance.report.service.IBytedanceAdvertiserHourlyReportService;
+import org.springframework.context.annotation.Primary;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Description: 广告主小时级别报表信息
+ * @Author: jeecg-boot
+ * @Date: 2021-05-18
+ * @Version: V1.0
+ */
+@Service
+@Primary
+
+public class BytedanceAdvertiserHourlyReportServiceImpl extends ServiceImpl<BytedanceAdvertiserHourlyReportMapper, BytedanceAdvertiserHourlyReport> implements IBytedanceAdvertiserHourlyReportService {
+
+}

+ 23 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/report/service/impl/BytedancePlanHourlyReportServiceImpl.java

@@ -0,0 +1,23 @@
+package org.jeecg.modules.bytedance.report.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.bytedance.report.entity.BytedancePlanHourlyReport;
+import org.jeecg.modules.bytedance.report.mapper.BytedancePlanHourlyReportMapper;
+import org.jeecg.modules.bytedance.report.service.IBytedancePlanHourlyReportService;
+import org.springframework.context.annotation.Primary;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @Description: 广告计划时报表信 息
+ * @Author: jeecg-boot
+ * @Date: 2021-05-18
+ * @Version: V1.0
+ */
+@Service
+@Primary
+
+public class BytedancePlanHourlyReportServiceImpl extends ServiceImpl<BytedancePlanHourlyReportMapper, BytedancePlanHourlyReport> implements IBytedancePlanHourlyReportService {
+
+}

+ 22 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/report/service/impl/BytedanceReportMaterialDailyServiceImpl.java

@@ -0,0 +1,22 @@
+package org.jeecg.modules.bytedance.report.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.bytedance.report.entity.BytedanceReportMaterialDaily;
+import org.jeecg.modules.bytedance.report.mapper.BytedanceReportMaterialDailyMapper;
+import org.jeecg.modules.bytedance.report.service.IBytedanceReportMaterialDailyService;
+import org.springframework.context.annotation.Primary;
+import org.springframework.stereotype.Service;
+
+/**
+ * 素材报表
+ * @author jeecg-boot
+ * @date   2021-05-18
+ * @version V1.0
+ */
+@Service
+@Primary
+
+public class BytedanceReportMaterialDailyServiceImpl extends ServiceImpl<BytedanceReportMaterialDailyMapper, BytedanceReportMaterialDaily> implements IBytedanceReportMaterialDailyService {
+
+
+}

+ 4 - 29
jeecg-boot-module-system/src/main/java/org/jeecg/modules/bytedance/advertise/controller/AiBytedanceAdvertiserStrategyController.java

@@ -101,8 +101,6 @@ public class AiBytedanceAdvertiserStrategyController {
 				//拼接 目标转化出价
 				pojo.setAdCpaBidStr("FIX".equalsIgnoreCase(pojo.getAdBidCreateType()) ? pojo.getAdCpaBid().toString() : (pojo.getAdMinBid() + "~" + pojo.getAdMaxBid()));
 			}
-
-
 		});
 
 		result.setSuccess(true);
@@ -223,7 +221,6 @@ public class AiBytedanceAdvertiserStrategyController {
 		return result;
 	}
 
-
 	@ApiOperation(value="头条智能投放账户配置信息-修改状态(0开-1关)", notes="头条智能投放账户配置信息-修改状态(0开-1关)")
 	@PutMapping(value = "/updStaById")
 	public Result updStaById(@RequestParam("id")String id,
@@ -261,7 +258,6 @@ public class AiBytedanceAdvertiserStrategyController {
 		}
 	}
 
-
 	@ApiOperation(value="头条智能投放账户配置-获取广告组", notes="头条智能投放账户配置-获取广告组")
 	@PostMapping(value = "/getCampaignGroupList")
 	public Result getCampaignGroup(List<AdGroupSearchVo> adGroupSearchVoList,
@@ -301,8 +297,6 @@ public class AiBytedanceAdvertiserStrategyController {
 		}
 	}
 
-
-
 	@ApiOperation(value="查询广告计划可用转化目标", notes="查询广告计划可用转化目标")
 	@PostMapping(value = "/getToolConvert")
 	public Result getToolConvert(@RequestBody AdConvertQueryVo adConvertQueryVo) {
@@ -343,10 +337,6 @@ public class AiBytedanceAdvertiserStrategyController {
 		return result;
 	}
 
-
-
-
-
 	/**
 	 *
 	 * 根据下载链接获取应用包名
@@ -380,7 +370,6 @@ public class AiBytedanceAdvertiserStrategyController {
 		}
 	}
 
-
 	@ApiOperation(value="获取行动号召", notes="获取行动号召")
 	@GetMapping(value = "/getAdActionText")
 	public Result getAdActionText(@RequestParam("accountId") String accountId,
@@ -394,9 +383,6 @@ public class AiBytedanceAdvertiserStrategyController {
 		}
 	}
 
-
-
-
 	@ApiOperation(value="获取行动号召", notes="获取行动号召")
 	@GetMapping(value = "/getAdAudiencePackage")
 	public Result getAdAudiencePackage(@RequestParam("accountId") String accountId,
@@ -410,11 +396,13 @@ public class AiBytedanceAdvertiserStrategyController {
 		}
 	}
 
-
 	@ApiOperation(value="获取人群包列表信息", notes="获取人群包列表信息")
 	@GetMapping(value = "/getDMPCustomAudience")
-	public Result getDMPCustomAudience(@RequestParam("accountId") String accountId) {
+	public Result getDMPCustomAudience(@RequestParam(value = "accountId",required = false) String accountId) {
 		try {
+			if (Check.isNull(accountId)){
+				return Result.errorMsg("请选择账户。");
+			}
 			return aiBytedanceAdvertiserStrategyService.getDMPCustomAudience(accountId);
 		}catch (Exception e){
 			log.error("获取人群包列表异常",e);
@@ -422,8 +410,6 @@ public class AiBytedanceAdvertiserStrategyController {
 		}
 	}
 
-
-
 	@ApiOperation(value="创建定向包", notes="创建定向包")
 	@PostMapping(value = "/createAudiencePackage")
 	public Result createAudiencePackage(@RequestParam("accountId") String accountId) {
@@ -434,15 +420,4 @@ public class AiBytedanceAdvertiserStrategyController {
 			return Result.error("请求失败,请联系开发人员!");
 		}
 	}
-
-
-
-
-
-
-
-
-
-
-
 }

+ 53 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/bytedance/advertise/controller/BytedanceReportController.java

@@ -0,0 +1,53 @@
+package org.jeecg.modules.bytedance.advertise.controller;
+
+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.modules.bytedance.common.service.IMaterialInfoService;
+import org.jeecg.modules.bytedance.report.service.IBytedanceAdvertiserHourlyReportService;
+import org.jeecg.modules.bytedance.report.service.IBytedancePlanHourlyReportService;
+import org.jeecg.modules.bytedance.report.service.IBytedanceReportMaterialDailyService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 投放数据
+ * @author jeecg-boot
+ * @date   2021-05-18
+ * @version V1.0
+ */
+@RestController
+@RequestMapping("/advertiser/bytedanceReportController")
+@Api(tags="投放数据")
+@Slf4j
+public class BytedanceReportController {
+	@Autowired
+	private IBytedanceAdvertiserHourlyReportService bytedanceAdvertiserHourlyReportService;
+
+	@Autowired
+	private IBytedancePlanHourlyReportService bytedancePlanHourlyReportService;
+
+	@Autowired
+	private IBytedanceReportMaterialDailyService bytedanceReportMaterialDailyService;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}

+ 56 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/bytedance/advertise/controller/MaterialInfoController.java

@@ -0,0 +1,56 @@
+package org.jeecg.modules.bytedance.advertise.controller;
+
+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.modules.bytedance.common.service.IMaterialInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 头条智能投放账户配置信息表
+ * @author jeecg-boot
+ * @date   2021-04-20
+ * @version V1.0
+ */
+@RestController
+@RequestMapping("/advertiser/materialInfoController")
+@Api(tags="视频素材")
+@Slf4j
+public class MaterialInfoController {
+	@Autowired
+	private IMaterialInfoService materialInfoService;
+
+
+
+	@ApiOperation(value="素材下线", notes="素材下线")
+	@GetMapping(value = "/updMaterialOfflineById")
+	public Result updMaterialOfflineById(@RequestParam("id") String id,
+								  		@RequestParam("offlineFlag") Integer offlineFlag) {
+		try {
+			List<String> listIds = Arrays.asList(id.split(","));
+			if (listIds.size() > 8){
+				return Result.errorMsg("已选视频素材最多支持8个。");
+			}
+			return materialInfoService.updMaterialOfflineById(listIds,offlineFlag);
+		}catch (Exception e){
+			log.error("素材下线异常",e);
+			return Result.error("请求失败,请联系开发人员!");
+		}
+	}
+
+
+
+
+
+
+
+
+
+
+
+}