syh 4 лет назад
Родитель
Сommit
56feb57462
15 измененных файлов с 1035 добавлено и 40 удалено
  1. 0 7
      jeecg-boot-module-system/pom.xml
  2. 13 17
      jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java
  3. 467 0
      module-common/src/main/java/cn/com/ctop/common/module/vo/ByteDanceReportAccountDailyDTOEntity.java
  4. 1 1
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/xml/KuaishouReportDailyAccountMapper.xml
  5. 47 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/controller/BytedanceReportController.java
  6. 2 2
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/entity/ByteDanceVideoReportDaily.java
  7. 2 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/mapper/ByteDanceVideoReportDailyMapper.java
  8. 2 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/mapper/BytedanceAccountReportMapper.java
  9. 401 10
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/mapper/xml/ByteDanceVideoReportDailyMapper.xml
  10. 45 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/mapper/xml/BytedanceAccountReportMapper.xml
  11. 2 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/service/IBytedanceAccountReportService.java
  12. 15 2
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/service/impl/ByteDanceVideoReportDailyServiceImpl.java
  13. 29 1
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/service/impl/BytedanceAccountReportServiceImpl.java
  14. 4 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/service/impl/ReportServiceImpl.java
  15. 5 0
      pom.xml

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

@@ -161,13 +161,6 @@
             <artifactId>poi-ooxml-schemas</artifactId>
             <version>3.17</version>
         </dependency>
-
-        <dependency>
-            <groupId>com.alibaba</groupId>
-            <artifactId>easyexcel</artifactId>
-            <version>1.1.2-beat1</version>
-        </dependency>
-
         <dependency>
             <groupId>com.bstek.ureport</groupId>
             <artifactId>ureport2-core</artifactId>

+ 13 - 17
jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java

@@ -190,12 +190,14 @@ public class SampleTest {
 
     @Test
     public void loadBytedanceData(){
-        List<CtopOauthToken> tokens = tokenService.selectToutiaoToken();
-        for (CtopOauthToken token:tokens) {
-            for(int i=0;i<20;i++){
-                Date getDate = DateUtils.addDay(new Date(), -i);
-                String date = DateUtils.formatDate(getDate);
-                bytedanceReportService.bytedanceMaterialReport(token, date, date);
+        String strings = "1672894840372238_1674183267750990_1673076203257870_1650079154438157_1670286873337870_1648709018451972_1661556811389966_1676540488471559";
+        String[] tokens = strings.split("_");
+        for (int i=0;i<tokens.length;i++) {
+            Long accountId = Long.parseLong(tokens[i]);
+            CtopOauthToken token = tokenService.getTokenByAccountId(accountId);
+            for(int j=10;j<110;j++){
+                Date getDate = DateUtils.addDay(new Date(), -j);
+                reportService.getAdvertiserReport(token, getDate, getDate,CtopAdConstant.BYTEDANCE_REPORT_TYPE_DAILY);
             }
 
         }
@@ -203,17 +205,11 @@ public class SampleTest {
 
     @Test
     public void loaddata(){
-//        List<UserAllocation> allocations = allocationService.getByParams(643L,null,0);
-//        for (UserAllocation allocation:allocations) {
-            for(int i=0;i<50;i++){
-//                CtopOauthToken token = tokenService.getTokenByAccountId(allocation.getAccountId());
-                Date getDate = DateUtils.addDay(new Date(), -i);
-                String date = DateUtils.formatDate(getDate);
-//                bytedanceReportService.bytedanceMaterialReport(token, date, date);
-                videoReportDailyService.videoInfoList(date, date);
-            }
-
-//        }
+        for(int i=0;i<30;i++){
+            Date getDate = DateUtils.addDay(new Date(), -i);
+            String date = DateUtils.formatDate(getDate);
+            videoReportDailyService.videoInfoList(date, date);
+        }
     }
 
     @Autowired

Разница между файлами не показана из-за своего большого размера
+ 467 - 0
module-common/src/main/java/cn/com/ctop/common/module/vo/ByteDanceReportAccountDailyDTOEntity.java


+ 1 - 1
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/xml/KuaishouReportDailyAccountMapper.xml

@@ -702,7 +702,7 @@
                  open="(" close=")">
             #{item}
         </foreach>
-        group by b.project_id
+        group by b.project_id  order by sum(a.charge) desc
     </select>
 
     <!-- 计划汇总 -->

+ 47 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/controller/BytedanceReportController.java

@@ -2,12 +2,18 @@ package cn.com.ctop.toutiao.modules.report.controller;
 
 import cn.com.ctop.common.module.entity.CtopOauthToken;
 import cn.com.ctop.common.module.service.ICtopOauthTokenService;
+import cn.com.ctop.common.module.utils.HttpUtils;
+import cn.com.ctop.common.module.vo.ByteDanceReportAccountDailyDTOEntity;
+import cn.com.ctop.common.module.vo.SheetInfoVo;
 import cn.com.ctop.toutiao.modules.report.DTO.ByteDanceReportAccountDailyDTO;
 import cn.com.ctop.toutiao.modules.report.DTO.BytedanceInfoDTO;
 import cn.com.ctop.toutiao.modules.report.entity.BytedanceReportMaterialRetry;
 import cn.com.ctop.toutiao.modules.report.service.IByteDanceVideoReportDailyService;
 import cn.com.ctop.toutiao.modules.report.service.IBytedanceAccountReportService;
 import cn.com.ctop.toutiao.modules.report.service.IBytedanceReportService;
+import com.alibaba.excel.EasyExcelFactory;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.metadata.Sheet;
 import com.alibaba.fastjson.JSONObject;
 import com.github.pagehelper.PageInfo;
 import lombok.extern.slf4j.Slf4j;
@@ -17,7 +23,11 @@ import org.jeecg.common.util.DateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.OutputStream;
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.concurrent.ExecutorService;
@@ -452,4 +462,41 @@ public class BytedanceReportController {
         return result;
     }
 
+
+    /**
+     * 导出报表
+     *
+     * @return
+     */
+    @RequestMapping(value = "/exportBytedanceSaleProjectInfo")
+    @ResponseBody
+    public void exportXxl(@RequestBody BytedanceInfoDTO dto,HttpServletResponse response) throws IOException {
+        List<SheetInfoVo> sheets = new ArrayList<>();
+        if(dto == null || dto.getStartDate() ==null || dto.getEndDate() == null){
+            Date getDate = DateUtils.addDay(new Date(), -1);
+            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+            String dateString = dateFormat.format(getDate);
+
+            dto = new BytedanceInfoDTO();
+            dto.setStartDate(dateString);
+            dto.setEndDate(dateString);
+        }
+
+        if(dto.getPageSize() == 0 ){
+            dto.setPageSize(1000000000);
+        }
+        //查询总的消耗信息
+        SheetInfoVo totalSheetVo = bytedanceAccountReportService.getBytedanceSaleProjectInfoSheetVO(dto.getStartDate(), dto.getEndDate(), dto.getProjectList(),dto.getPageNum(),dto.getPageSize(),dto.getSort(), dto.getYn());
+        OutputStream outputStream = response.getOutputStream();
+        String date = DateUtils.formatDate(new Date());
+        HttpUtils.setResponseHeader(response, "头条销售报表" + date + ".xlsx");
+        ExcelWriter excelWriter = EasyExcelFactory.getWriter(outputStream);
+        Sheet sheet = new Sheet(1, 0, ByteDanceReportAccountDailyDTOEntity.class);
+        sheet.setSheetName(totalSheetVo.getSheetName());
+        excelWriter.write(totalSheetVo.getDetails(), sheet);
+        excelWriter.finish();
+        outputStream.flush();
+        outputStream.close();
+    }
+
 }

+ 2 - 2
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/entity/ByteDanceVideoReportDaily.java

@@ -29,11 +29,11 @@ public class ByteDanceVideoReportDaily {
 	/**id*/
 	@TableId(type = IdType.AUTO)
     @ApiModelProperty(value = "id")
-	private Integer id;
+	private Long id;
 	/**项目id*/
 	@Excel(name = "项目id", width = 15)
     @ApiModelProperty(value = "项目id")
-	private Integer projectId;
+	private Long projectId;
 	/**项目名称*/
 	@Excel(name = "项目名称", width = 15)
     @ApiModelProperty(value = "项目名称")

+ 2 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/mapper/ByteDanceVideoReportDailyMapper.java

@@ -77,4 +77,6 @@ public interface ByteDanceVideoReportDailyMapper extends BaseMapper<ByteDanceVid
     List<Long> getAccountIds(@Param("companyId") String companyId, @Param("signature") String signature);
 
     List<Long> getAccountIdsByUserIdAndMediaIds(@Param("userId") String userId, @Param("mediaIds") List<Integer> mediaIds);
+
+    void insertBatch(@Param("mlist")List<ByteDanceVideoReportDaily> mList);
 }

+ 2 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/mapper/BytedanceAccountReportMapper.java

@@ -1,5 +1,6 @@
 package cn.com.ctop.toutiao.modules.report.mapper;
 
+import cn.com.ctop.common.module.vo.ByteDanceReportAccountDailyDTOEntity;
 import cn.com.ctop.toutiao.modules.report.DTO.ByteDanceReportAccountDailyDTO;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -67,4 +68,5 @@ public interface BytedanceAccountReportMapper {
 
     List<Long> getUserProjectAccountIdsByAdmin();
 
+    List<ByteDanceReportAccountDailyDTOEntity> getBytedanceProjectInfoEntity(@Param("startDate")String startDate, @Param("endDate")String endDate,@Param("projectList")List<Long> projectList, @Param("yn")Integer yn);
 }

+ 401 - 10
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/mapper/xml/ByteDanceVideoReportDailyMapper.xml

@@ -446,6 +446,203 @@
         )
         </foreach>
     </insert>
+    <insert id="insertBatch">
+        insert into ctop_bytedance_video_report_daily(
+        account_id,
+        project_id,
+        project_name,
+        advertiser_id,
+        advertiser_name,
+        signature,
+        video_url,
+        url,
+        huanbi,
+        material_name,
+        app_type,
+        company_id,
+        material_id,
+        stat_datetime,
+        click,
+        cost,
+        active,
+        download_finish,
+        download_start,
+        install_finish,
+        register,
+        pay_count,
+        in_app_uv,
+        in_app_detail_uv,
+        in_app_cart,
+        in_app_order,
+        in_app_pay,
+        phone,
+        form,
+        map_search,
+        view_material,
+        qq,
+        lottery,
+        vote,
+        redirect,
+        shopping,
+        consult,
+        wechat,
+        phone_confirm,
+        phone_connect,
+        consult_effective,
+        total_play,
+        valid_play,
+        wifi_play,
+        play25_feed_break_rate,
+        play25_feed_break,
+        play50_feed_break,
+        play75_feed_break,
+        play100_feed_break,
+        advanced_creative_phone_click,
+        advanced_creative_counsel_click,
+        advanced_creative_form_click,
+        share_material,
+        comment_material,
+        follow,
+        home_visited,
+        ies_challenge_click,
+        ies_music_click,
+        next_day_open,
+        next_day_open_rate,
+        next_day_open_cost,
+        active_pay_amount,
+        valid_play_cost,
+        advanced_creative_coupon_addition,
+        convert_material,
+        active_pay_cost,
+        download,
+        cpc,
+        location_click,
+        play_over_rate,
+        ctr,
+        cpm,
+        wifi_play_rate,
+        like_material,
+        active_cost,
+        game_addiction_cost,
+        game_addiction,
+        active_rate,
+        game_addiction_rate,
+        active_register_rate,
+        download_finish_cost,
+        active_register_cost,
+        convert_rate,
+        download_finish_rate,
+        install_finish_rate,
+        coupon,
+        coupon_single_page,
+        play_over,
+        download_start_cost,
+        message,
+        valid_play_rate,
+        average_play_time_per_play,
+        convert_cost,
+        install_finish_cost,
+        download_start_rate
+        )
+        values
+        <foreach collection="mlist" item="image" separator=",">
+            (#{image.accountId},
+            #{image.projectId},
+            #{image.projectName},
+            #{image.advertiserId},
+            #{image.advertiserName},
+            #{image.signature},
+            #{image.videoUrl},
+            #{image.url},
+            #{image.huanbi},
+            #{image.materialName},
+            #{image.appType},
+            #{image.companyId},
+            #{image.materialId},
+            #{image.statDatetime},
+            #{image.click},
+            #{image.cost},
+            #{image.active},
+            #{image.downloadFinish},
+            #{image.downloadStart},
+            #{image.installFinish},
+            #{image.register},
+            #{image.payCount},
+            #{image.inAppUv},
+            #{image.inAppDetailUv},
+            #{image.inAppCart},
+            #{image.inAppOrder},
+            #{image.inAppPay},
+            #{image.phone},
+            #{image.form},
+            #{image.mapSearch},
+            #{image.viewMaterial},
+            #{image.qq},
+            #{image.lottery},
+            #{image.vote},
+            #{image.redirect},
+            #{image.shopping},
+            #{image.consult},
+            #{image.wechat},
+            #{image.phoneConfirm},
+            #{image.phoneConnect},
+            #{image.consultEffective},
+            #{image.totalPlay},
+            #{image.validPlay},
+            #{image.wifiPlay},
+            #{image.play25FeedBreakRate},
+            #{image.play25FeedBreak},
+            #{image.play50FeedBreak},
+            #{image.play75FeedBreak},
+            #{image.play100FeedBreak},
+            #{image.advancedCreativePhoneClick},
+            #{image.advancedCreativeCounselClick},
+            #{image.advancedCreativeFormClick},
+            #{image.shareMaterial},
+            #{image.commentMaterial},
+            #{image.follow},
+            #{image.homeVisited},
+            #{image.iesChallengeClick},
+            #{image.iesMusicClick},
+            #{image.nextDayOpen},
+            #{image.nextDayOpenRate},
+            #{image.nextDayOpenCost},
+            #{image.activePayAmount},
+            #{image.validPlayCost},
+            #{image.advancedCreativeCouponAddition},
+            #{image.convertMaterial},
+            #{image.activePayCost},
+            #{image.download},
+            #{image.cpc},
+            #{image.locationClick},
+            #{image.playOverRate},
+            #{image.ctr},
+            #{image.cpm},
+            #{image.wifiPlayRate},
+            #{image.likeMaterial},
+            #{image.activeCost},
+            #{image.gameAddictionCost},
+            #{image.gameAddiction},
+            #{image.activeRate},
+            #{image.gameAddictionRate},
+            #{image.activeRegisterRate},
+            #{image.downloadFinishCost},
+            #{image.activeRegisterCost},
+            #{image.convertRate},
+            #{image.downloadFinishRate},
+            #{image.installFinishRate},
+            #{image.coupon},
+            #{image.couponSinglePage},
+            #{image.playOver},
+            #{image.downloadStartCost},
+            #{image.message},
+            #{image.validPlayRate},
+            #{image.averagePlayTimePerPlay},
+            #{image.convertCost},
+            #{image.installFinishCost},
+            #{image.downloadStartRate})
+        </foreach>
+    </insert>
 
     <select id="getAccountIdByprojectIds" resultType="long">
         select
@@ -678,18 +875,212 @@
 
     <select id="videoInfoList" resultType="cn.com.ctop.toutiao.modules.report.entity.ByteDanceVideoReportDaily">
         select
-        <include refid="videoInfoSql"></include>
-        #{companyId} as companyId
+        a.account_id as accountId,
+        b.project_id as projectId,
+        b.project_name as projectName,
+        b.advertiser_id as advertiserId,
+        b.advertiser_name as advertiserName,
+        a.stat_datetime as statDatetime,
+        sum(a.cost) as cost,
+        d.signature as signature,
+        d.video_url as videoUrl,
+        (select mat.url from ctop_material_info mat where mat.code = d.signature order by id desc limit 1) as url,
+        '-' as materialDesc,
+        1 as appType,
+        sum(a.click) as click,
+        case
+        when sum(a.total_play) != 0
+        then sum(a.play25_feed_break)/sum(a.total_play)
+        else 0 end as play25FeedBreakRate,
+
+        case
+        when sum(a.total_play) != 0
+        then sum(a.play_over)/sum(a.total_play)
+        else 0 end as playOverRate,
+
+        case
+        when sum(a.click) != 0
+        then sum(a.convert_material)/sum(a.click)
+        else 0 end as convertRate,
+        sum(a.active) as active,
+        sum(a.download_finish) as downloadFinish,
+        sum(a.download_start) as downloadStart,
+        sum(a.install_finish) as installFinish,
+        sum(a.register) as register,
+        sum(a.pay_count) as payCount,
+        sum(a.in_app_uv) as inAppUv,
+        sum(a.in_app_detail_uv) as inAppDetailUv,
+        sum(a.in_app_cart) as inAppCart,
+        sum(a.in_app_order) as inAppOrder,
+        sum(a.in_app_pay) as inAppPay,
+        sum(a.phone) as phone,
+        sum(a.form) as form,
+        sum(a.map_search) as mapSearch,
+        sum(a.button) as button,
+        sum(a.view_material) as viewMaterial,
+        sum(a.qq) as qq,
+        sum(a.lottery) as lottery,
+        sum(a.vote) as vote,
+        sum(a.redirect) as redirect,
+        sum(a.shopping) as shopping,
+        sum(a.consult) as consult,
+        sum(a.wechat) as wechat,
+        sum(a.phone_confirm) as phoneConfirm,
+        sum(a.phone_connect) as phoneConnect,
+        sum(a.consult_effective) as consultEffective,
+        sum(a.total_play) as totalPlay,
+        sum(a.valid_play) as validPlay,
+        sum(a.wifi_play) as wifiPlay,
+        sum(a.play25_feed_break) as play25FeedBreak,
+        sum(a.play50_feed_break) as play50FeedBreak,
+        sum(a.play75_feed_break) as play75FeedBreak,
+        sum(a.play100_feed_break) as play100FeedBreak,
+        sum(a.advanced_creative_phone_click) as advancedCreativePhoneClick,
+        sum(a.advanced_creative_counsel_click) as advancedCreativeCounselClick,
+        sum(a.advanced_creative_form_click) as advancedCreativeFormClick,
+        sum(a.share_material) as shareMaterial,
+        sum(a.comment_material) as commentMaterial,
+        sum(a.follow) as follow,
+        sum(a.home_visited) as homeVisited,
+        sum(a.ies_challenge_click) as iesChallengeClick,
+        sum(a.ies_music_click) as iesMusicClick,
+        sum(a.next_day_open) as nextDayOpen,
+        case
+        when sum(a.active) != 0
+        then sum(a.next_day_open)/sum(a.active)
+        else 0 end as nextDayOpenRate,
+
+        case
+        when sum(a.next_day_open) != 0
+        then sum(a.cost)/sum(a.next_day_open)
+        else 0 end as nextDayOpenCost,
+
+        case when sum(a.pay_count) != 0
+        then sum(a.cost)/sum(a.pay_count)
+        else 0 end
+        as activePayCost,
+
+        sum(a.active_pay_amount) as activePayAmount,
+
+        case
+        when sum(a.valid_play) != 0
+        then sum(a.cost)/sum(a.valid_play)
+        else 0 end validPlayCost,
+        sum(a.advanced_creative_coupon_addition) as advancedCreativeCouponAddition,
+        sum(a.convert_material) as convertMaterial,
+
+        case
+        when sum(a.active_pay_amount) != 0
+        then sum(a.cost)/sum(a.active_pay_amount)
+        else 0 end as activePayCost,
+        sum(a.download) as download,
+
+        case
+        when sum(a.click) != 0
+        then sum(a.cost) / sum(a.click)
+        else 0 end                           as cpc,
+        sum(a.location_click) as locationClick,
+
+        case
+        when sum(a.show_material) != 0
+        then sum(a.click)/sum(a.show_material)
+        else 0 end as ctr,
+
+        case
+        when sum(a.show_material) != 0
+        then sum(a.cost)/sum(a.show_material)*1000
+        else 0 end cpm,
+        sum(a.wifi_play_rate) as wifiPlayRate,
+        sum(a.like_material) as likeMaterial,
+
+        case
+        when sum(a.active) != 0
+        then sum(a.cost)/sum(a.active)
+        else 0 end activeCost,
+
+        case
+        when sum(a.game_addiction) != 0
+        then sum(a.cost)/sum(a.game_addiction)
+        else 0 end as gameAddictionCost,
+        sum(a.game_addiction) as gameAddiction,
+
+        case
+        when sum(a.click) != 0
+        then sum(a.active)/sum(a.click)
+        else 0 end as activeRate,
+
+        case
+        when sum(a.active) != 0
+        then sum(a.game_addiction)/sum(a.active)
+        else 0 end gameAddictionRate,
+
+        case
+        when sum(a.active) != 0
+        then sum(a.register)/sum(a.active)
+        else 0 end as activeRegisterRate,
+
+
+        case
+        when sum(a.download_finish) != 0
+        then sum(a.cost)/sum(a.download_finish)
+        else 0 end as downloadFinishCost,
+
+
+        case
+        when sum(a.register) != 0
+        then sum(a.cost)/sum(a.register)
+        else 0 end as activeRegisterCost,
+        sum(a.show_material) as showMaterial,
+
+        case
+        when sum(a.download_start) != 0
+        then sum(a.download_finish)/sum(a.download_start)
+        else 0 end as downloadFinishRate,
+
+        case
+        when sum(a.download_finish) != 0
+        then sum(a.install_finish)/sum(a.download_finish)
+        else 0 end as installFinishRate,
+        sum(a.coupon) as coupon,
+        sum(a.coupon_single_page) as couponSinglePage,
+        sum(a.play_over) as playOver,
+
+        case
+        when sum(a.download_start) != 0
+        then sum(a.cost)/sum(a.download_start)
+        else 0 end as downloadStartCost,
+        sum(a.message) as message,
+        case
+        when sum(a.show_material) != 0
+        then sum(a.valid_play)/sum(a.show_material)
+        else 0 end as validPlayRate,
+
+        case
+        when sum(a.valid_play) != 0
+        then sum(a.average_play_time_per_play*a.valid_play)/sum(a.valid_play)
+        else 0 end as averagePlayTimePerPlay,
+
+        case
+        when sum(a.convert_material) != 0
+        then sum(a.cost)/sum(a.convert_material)
+        else 0 end as convertCost,
+        case
+        when sum(a.install_finish) != 0
+        then sum(a.cost)/sum(a.install_finish)
+        else 0 end as installFinishCost,
+
+        case
+        when sum(a.click) != 0
+        then sum(a.download_start)/sum(a.click)
+        else 0 end as downloadStartRate,
+        c.company_id as companyId
         from ctop_bytedance_report_material_daily a
-        left join (select * from ctop_user_allocation group by account_id) b on a.account_id = b.account_id
+        left join ctop_user_allocation b on a.account_id = b.account_id
         left join user_company c on b.user_id = c.user_id
-        left join (select * from ctop_bytedance_video_info group by material_id) d on a.material_id = d.material_id
-        left join (select code,url,material_name from ctop_material_info group by code) e on d.signature = e.code
-        where c.company_id = #{companyId}      -- '6608ed13c0dd42de93c790dbdf124234'
-        and a.image_mode in ('CREATIVE_IMAGE_MODE_VIDEO',
-        'CREATIVE_IMAGE_MODE_VIDEO_VERTICAL')
-        and date_format(stat_datetime,'%Y-%m-%d') &gt;= #{startDate}
-        and date_format(stat_datetime,'%Y-%m-%d') &lt;= #{endDate}
+        left join (select signature,video_url,material_id from ctop_bytedance_video_info group by material_id) d on a.material_id = d.material_id
+        where c.company_id = #{companyId}
+        and stat_datetime &gt;= #{startDate}
+        and stat_datetime &lt;= #{endDate}
         <if test="accountId != null">
             and a.account_id = #{accountId}
         </if>

+ 45 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/mapper/xml/BytedanceAccountReportMapper.xml

@@ -507,5 +507,50 @@
         b.media_id in (1,3)
 
     </select>
+    <select id="getBytedanceProjectInfoEntity"
+            resultType="cn.com.ctop.common.module.vo.ByteDanceReportAccountDailyDTOEntity">
+        select * from (
+        select
+        concat(#{startDate},'~',#{endDate}) as statDate,
+        a.advertiser_id as 'accountId',
+        c.advertiser_id as 'advertiserId',
+        (select name from ctop_advertiser where id = c.advertiser_id) as 'advertiserName',
+
+        (
+        select realname from sys_user where id = (
+        select responsible_id from ctop_project where id = b.project_id
+        )
+        ) as 'responsibleName',
+        (
+        select realname from sys_user where id = (
+        select design_responsible_id from ctop_project where id = b.project_id
+        )
+        ) as 'designResponsibleName',
+        b.auth_name as 'authName',
+        b.project_id as 'projectId',
+        (select project_name from ctop_project where id = b.project_id) as 'projectName',
+        c.media_id as 'mediaId',
+        <include refid="selectSql"></include>
+        from
+        ctop_bytedance_report_advertiser_daily a
+        left join ctop_user_allocation b on a.advertiser_id = b.account_id
+        left join ctop_project c on b.project_id = c.id
+        where
+        date_format(a.stat_datetime, '%Y-%m-%d') &gt;= #{startDate}
+        and
+        date_format(a.stat_datetime, '%Y-%m-%d') &lt;= #{endDate}
+        and
+        b.project_id in
+        <foreach collection="projectList" item="item" separator=","
+                 open="(" close=")">
+            #{item}
+        </foreach>
+        group by b.project_id
+        )m
+        <if test="yn = 1">
+            where
+            m.cost != 0
+        </if>
+    </select>
 
 </mapper>

+ 2 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/service/IBytedanceAccountReportService.java

@@ -1,5 +1,6 @@
 package cn.com.ctop.toutiao.modules.report.service;
 
+import cn.com.ctop.common.module.vo.SheetInfoVo;
 import cn.com.ctop.toutiao.modules.report.DTO.ByteDanceReportAccountDailyDTO;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -24,4 +25,5 @@ public interface IBytedanceAccountReportService {
 
     PageInfo<ByteDanceReportAccountDailyDTO> getBytedanceSaleProjectInfo(String startDate, String endDate, List<Long> projectList, Integer pageNum, Integer pageSize, String sort, Integer yn);
 
+    SheetInfoVo getBytedanceSaleProjectInfoSheetVO(String startDate, String endDate, List<Long> projectList, Integer pageNum, Integer pageSize, String sort, Integer yn);
 }

+ 15 - 2
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/service/impl/ByteDanceVideoReportDailyServiceImpl.java

@@ -54,8 +54,21 @@ public class ByteDanceVideoReportDailyServiceImpl extends ServiceImpl<ByteDanceV
         byteDanceVideoReportDailyMapper.delete(wrapper);
 
         List<ByteDanceVideoReportDaily> mList = byteDanceVideoReportDailyMapper.videoInfoList(startDate, endDate, companyId, null);
-        for (ByteDanceVideoReportDaily m:mList){
-            byteDanceVideoReportDailyMapper.insert(m);
+        if(null!=mList&&!mList.isEmpty()){
+            List<ByteDanceVideoReportDaily> reports = new ArrayList<>();
+            for(ByteDanceVideoReportDaily report :mList){
+                if(null == report.getMaterialName()||report.getMaterialName().trim().equals("")){
+                    report.setMaterialName("-");
+                }
+                if(null == report.getProjectName()||report.getProjectName().trim().equals("")){
+                    report.setProjectName("-");
+                }
+                if(null == report.getAdvertiserName()||report.getAdvertiserName().trim().equals("")){
+                    report.setAdvertiserName("-");
+                }
+                reports.add(report);
+            }
+            byteDanceVideoReportDailyMapper.insertBatch(reports);
         }
     }
 

+ 29 - 1
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/service/impl/BytedanceAccountReportServiceImpl.java

@@ -1,6 +1,8 @@
 package cn.com.ctop.toutiao.modules.report.service.impl;
 
 import cn.com.ctop.common.module.utils.CtopAdConstant;
+import cn.com.ctop.common.module.vo.ByteDanceReportAccountDailyDTOEntity;
+import cn.com.ctop.common.module.vo.SheetInfoVo;
 import cn.com.ctop.toutiao.modules.report.DTO.ByteDanceReportAccountDailyDTO;
 import cn.com.ctop.toutiao.modules.report.mapper.BytedanceAccountReportMapper;
 import cn.com.ctop.toutiao.modules.report.service.IBytedanceAccountReportService;
@@ -196,7 +198,6 @@ public class BytedanceAccountReportServiceImpl implements IBytedanceAccountRepor
 
     @Override
     public PageInfo<ByteDanceReportAccountDailyDTO> getBytedanceSaleProjectInfo(String startDate, String endDate, List<Long> projectList, Integer pageNum, Integer pageSize, String sort, Integer yn){
-        //List<ByteDanceReportAccountDailyDTO> list = new ArrayList<>();
 
         if(projectList==null || projectList.size()==0){
             LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
@@ -222,6 +223,33 @@ public class BytedanceAccountReportServiceImpl implements IBytedanceAccountRepor
     }
 
     @Override
+    public SheetInfoVo getBytedanceSaleProjectInfoSheetVO(String startDate, String endDate, List<Long> projectList, Integer pageNum, Integer pageSize, String sort, Integer yn) {
+        SheetInfoVo vo = new SheetInfoVo<ByteDanceReportAccountDailyDTOEntity>();
+        if(projectList==null || projectList.size()==0){
+            LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+            String userId = sysUser.getId();
+            //String userId = "388e787edd294ecfb9243fe176a3ae56";
+            String roleCode = bytedanceAccountReportMapper.getRoleCodeByUserId(userId);
+
+            List<Long> mediaIds = new ArrayList<>();
+            mediaIds.add(1L);
+            mediaIds.add(3L);
+
+            if("admin".equals(roleCode)){
+                projectList = bytedanceAccountReportMapper.queryProjectInfoByAdmin(mediaIds);
+            }else{
+                projectList = bytedanceAccountReportMapper.getSaleProjects(userId,mediaIds);
+            }
+        }
+
+        PageHelper.startPage(pageNum,pageSize);
+        List<ByteDanceReportAccountDailyDTOEntity> dtos = bytedanceAccountReportMapper.getBytedanceProjectInfoEntity(startDate, endDate, projectList, yn);
+        vo.setSheetName("头条销售报表");
+        vo.setDetails(dtos);
+        return vo;
+    }
+
+    @Override
     public PageInfo<ByteDanceReportAccountDailyDTO> getBytedanceAccountInfoByProjectId(String startDate, String endDate, Long projectId, Integer pageNo, Integer pageSize, String sort, Integer yn){
 
         LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();

+ 4 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/service/impl/ReportServiceImpl.java

@@ -82,6 +82,10 @@ public class ReportServiceImpl implements IReportService {
         config.propertyNamingStrategy = PropertyNamingStrategy.SnakeCase;
         JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(conditions, config));
         JSONObject getObject = getAdvertiserStat(token, jsonObject);
+        if(null == getObject){
+            XxlJobLogger.log("头条广告主数据获取异常");
+            return;
+        }
         Integer code = getObject.getInteger("code");
         String message = getObject.getString("message");
         if (null == code || code != 0) {

+ 5 - 0
pom.xml

@@ -165,6 +165,11 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-freemarker</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>easyexcel</artifactId>
+            <version>1.1.2-beat1</version>
+        </dependency>
 
         <!-- Lombok -->
         <dependency>