Browse Source

Merge branch 'video-dev' into test

# Conflicts:
#	module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/mapper/xml/ByteDanceVideoReportDailyMapper.xml
hcst_sunzhen 5 years ago
parent
commit
e9721b5c53
15 changed files with 1663 additions and 221 deletions
  1. 28 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ProjectMemberController.java
  2. 13 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/ProjectMemberMapper.java
  3. 92 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/ProjectMemberMapper.xml
  4. 2 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IProjectMemberService.java
  5. 26 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/ProjectMemberServiceImpl.java
  6. 1 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/xml/AccountReportMapper.xml
  7. 12 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/DTO/AccountVideoDTO.java
  8. 2 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/DTO/DateDTO.java
  9. 74 22
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/controller/ByteDanceVideoReportDailyController.java
  10. 13 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/controller/BytedanceReportController.java
  11. 30 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/mapper/ByteDanceVideoReportDailyMapper.java
  12. 683 179
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/mapper/xml/ByteDanceVideoReportDailyMapper.xml
  13. 218 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/mapper/xml/BytedanceReportMapper.xml
  14. 9 4
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/service/IByteDanceVideoReportDailyService.java
  15. 460 15
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/service/impl/ByteDanceVideoReportDailyServiceImpl.java

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

@@ -10,9 +10,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.modules.ctop.entity.Project;
 import org.jeecg.modules.ctop.entity.ProjectMember;
 import org.jeecg.modules.ctop.mapper.ProjectMemberMapper;
@@ -318,4 +320,30 @@ public class ProjectMemberController {
         }
         return result;
     }
+
+    /**
+     * 我参与项目
+     *
+     * @return
+     */
+    @AutoLog(value = "头条视频报表-参与项目列表")
+    @ApiOperation(value = "头条视频报表-参与项目列表", notes = "头条视频报表-参与项目列表")
+    @GetMapping(value = "/bytedanceProjectParticipateInList")
+    public  Result<List<ProjectMember>> bytedanceProjectParticipateInList() {
+        Result<List<ProjectMember>> result = new Result<>();
+        Integer mediaId = 1;
+        List<ProjectMember> projectMemberList = projectMemberService.getProjects(mediaId);
+        if (projectMemberList == null) {
+            result.error500("未找到对应实体");
+        } else {
+            result.setResult(projectMemberList);
+            result.setSuccess(true);
+        }
+        return result;
+
+    }
+
+
+
+
 }

+ 13 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/ProjectMemberMapper.java

@@ -16,4 +16,17 @@ import java.util.List;
 public interface ProjectMemberMapper extends BaseMapper<ProjectMember> {
 
     List<Long> selectProjectsByUserId(@Param("userId") String userId);
+
+    List<ProjectMember> adminProjects(@Param("mediaId")Integer mediaId);
+
+    List<ProjectMember> designLeaderProjects(@Param("companyId")String companyId ,@Param("mediaId")Integer mediaId);
+
+    List<ProjectMember> designProjects(@Param("userId")String userId, @Param("mediaId")Integer mediaId);
+
+    List<ProjectMember> operationProjects(@Param("userId")String userId, @Param("mediaId")Integer mediaId);
+
+    String getRoleCodeByUserId(@Param("userId")String userId);
+
+    String getCompanyIdByUserId(@Param("userId")String userId);
+
 }

+ 92 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/ProjectMemberMapper.xml

@@ -9,4 +9,95 @@
         where user_id = #{userId}
     </select>
 
-</mapper>
+    <!-- 设计师展示所有自己的角色下制作的视频 -->
+    <select id="adminProjects" resultType="org.jeecg.modules.ctop.entity.ProjectMember">
+        select
+        id,
+        project_name,
+        advertiser_id,
+        advertiser_name,
+        media_id,
+        max_bid,
+        advertiser_name,
+        responsible_name
+        from
+        ctop_project
+        where
+        media_id = #{mediaId}
+    </select>
+
+    <!-- 视频报表设计师leader展示自己所在公司的所有项目 -->
+    <select id="designLeaderProjects" resultType="org.jeecg.modules.ctop.entity.ProjectMember">
+        select
+        b.id,
+        b.project_name,
+        b.advertiser_id,
+        b.advertiser_name,
+        b.media_id,
+        b.max_bid,
+        b.advertiser_name,
+        b.responsible_name
+        from
+        ctop_project_member a
+        left join ctop_project b on a.project_id = b.id
+        where
+        b.company_id = #{companyId}
+        and b.media_id = #{mediaId}
+    </select>
+
+    <!-- 设计师展示所有自己的角色下制作的视频 -->
+    <select id="designProjects" resultType="org.jeecg.modules.ctop.entity.ProjectMember">
+        select
+        b.project_id,
+        b.project_name,
+        b.advertiser_id,
+        b.advertiser_name,
+        b.media_id,
+        b.maxBid,
+        b.advertiser_name,
+        b.responsible_name
+        from
+        ctop_project_member a
+        left join ctop_project b on a.project_id = b.id
+        where a.user_id = #{userId}
+        and b.media_id = #{mediaId}
+        group by a.project_id
+    </select>
+
+    <!-- 运营和运营负责人展示所在项目视频 -->
+    <select id="operationProjects" resultType="org.jeecg.modules.ctop.entity.ProjectMember">
+        select
+        b.id,
+        b.project_name,
+        b.advertiser_id,
+        b.advertiser_name,
+        b.media_id,
+        b.max_bid,
+        b.advertiser_name,
+        b.responsible_name
+        from
+        ctop_user_allocation a
+        left join ctop_project b on a.project_id = b.id
+        where a.user_id = #{userId}
+        and b.media_id = #{mediaId}
+        group by a.project_id
+    </select>
+
+    <select id="getRoleCodeByUserId" resultType="string">
+        select
+        role_code
+        from
+        sys_user_role a
+        left join sys_role b on a.role_id = b.id
+        where a.user_id = #{userId}
+    </select>
+
+    <select id="getCompanyIdByUserId" resultType="string">
+            select
+            company_id
+        from
+        user_company
+        where user_id = #{userId}
+    </select>
+
+</mapper>

+ 2 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IProjectMemberService.java

@@ -19,4 +19,6 @@ public interface IProjectMemberService extends IService<ProjectMember> {
 
 
     List<Long> selectProjectsByUserId(String userId);
+
+    List<ProjectMember> getProjects(Integer mediaId);
 }

+ 26 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/ProjectMemberServiceImpl.java

@@ -3,6 +3,8 @@ package org.jeecg.modules.ctop.service.impl;
 import cn.com.ctop.common.module.service.ISysRoleService;
 import cn.com.ctop.common.module.utils.Check;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.modules.ctop.entity.Project;
 import org.jeecg.modules.ctop.entity.ProjectMember;
 import org.jeecg.modules.ctop.mapper.ProjectMemberMapper;
@@ -59,4 +61,28 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
         return memberMapper.selectProjectsByUserId(userId);
     }
 
+    //视频报表
+    public List<ProjectMember> getProjects(Integer mediaId){
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        String userId = sysUser.getId();
+        String roleCode = memberMapper.getRoleCodeByUserId(userId);
+        String companyId = memberMapper.getCompanyIdByUserId(userId);
+
+        //角色权限判断
+        List<ProjectMember> projectMemberList = null;
+        if(roleCode.equals("plan") || roleCode.equals("clip") || roleCode.equals("shot") || roleCode.equals("plane")|| roleCode.equals("planeLeader")){
+            projectMemberList = memberMapper.designProjects(userId, mediaId);
+        }else if( roleCode.equals("designTeamLeader")){
+            projectMemberList = memberMapper.designLeaderProjects(companyId, mediaId);
+        }else if(roleCode.equals("admin")){
+            projectMemberList = memberMapper.adminProjects(mediaId);
+        }else if(roleCode.equals("operator") || roleCode.equals("operationAssistant") || roleCode.equals("touTiaoOperationManager")){
+            projectMemberList = memberMapper.operationProjects(userId, mediaId);
+        }
+
+        return projectMemberList;
+    }
+
+
+
 }

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

@@ -584,4 +584,5 @@
 
     </select>
 
+
 </mapper>

+ 12 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/DTO/AccountVideoDTO.java

@@ -0,0 +1,12 @@
+package cn.com.ctop.toutiao.modules.report.DTO;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+
+@Data
+public class AccountVideoDTO implements Serializable {
+    private Long accountId;
+    private String signature;
+}

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

@@ -14,4 +14,6 @@ public class DateDTO extends PageDTO implements Serializable {
     private String date;
     private BigDecimal cost;
     private String[] columns;
+    private Long[] projectIds;
+    private Long[] accountIds;
 }

+ 74 - 22
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/controller/ByteDanceVideoReportDailyController.java

@@ -6,6 +6,7 @@ import cn.com.ctop.toutiao.modules.report.DTO.ColumnDTO;
 import cn.com.ctop.toutiao.modules.report.DTO.DateDTO;
 import cn.com.ctop.toutiao.modules.report.entity.ByteDanceVideoReportDaily;
 import cn.com.ctop.toutiao.modules.report.service.IByteDanceVideoReportDailyService;
+import com.github.pagehelper.PageInfo;
 import io.micrometer.core.instrument.util.StringUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -78,14 +79,33 @@ public class ByteDanceVideoReportDailyController {
 		 return result;
 	 }
 
+	@AutoLog(value = "头条视频账户视频关联方法")
+	@ApiOperation(value = "头条视频账户视频关联方法", notes = "头条视频账户视频关联方法")
+	@PostMapping(value = "/accountVideoMap")
+	public Result accountVideoMap(HttpServletRequest req){
+		Result result = new Result();
+		videoReportDailyService.accountVideoMap();
+		result.setSuccess(true);
+		return result;
+	}
 
 	 @AutoLog(value = "头条视频按天汇总")
 	 @ApiOperation(value = "头条视频按天汇总", notes = "头条视频按天汇总")
 	 @PostMapping(value = "/bytedanceVideoInfoListDaily")
-	 public Result<List<ByteDanceVideoReportDaily>> bytedanceVideoInfoList(@RequestBody DateDTO dateDTO,
+	 public Result<PageInfo<ByteDanceVideoReportDaily>> bytedanceVideoInfoList(@RequestBody DateDTO dateDTO,
 																		   HttpServletRequest req){
-		 Result<List<ByteDanceVideoReportDaily>> result = new Result();
-		 List<ByteDanceVideoReportDaily> list = videoReportDailyService.videoInfoListDaily(dateDTO.getDate(), dateDTO.getDate(), dateDTO.getSignature(), dateDTO.getCost());
+		 Result<PageInfo<ByteDanceVideoReportDaily>> result = new Result();
+
+		 Integer pageNo = dateDTO.getPageNo();
+		 Integer pageSize = dateDTO.getPageSize();
+		 if(pageNo == null){
+			 pageNo = 0;
+		 }
+		 if(pageSize == null){
+			 pageSize = 10;
+		 }
+
+		 PageInfo<ByteDanceVideoReportDaily> list = videoReportDailyService.videoInfoListDaily(dateDTO.getDate(), dateDTO.getDate(), dateDTO.getSignature(), dateDTO.getCost(), pageNo, pageSize, dateDTO.getProjectIds(), dateDTO.getAccountIds());
 
 		 result.setResult(list);
 		 result.setSuccess(true);
@@ -95,11 +115,20 @@ public class ByteDanceVideoReportDailyController {
 	 @AutoLog(value = "头条视频按周汇总")
 	 @ApiOperation(value = "头条视频按周汇总", notes = "头条视频按周汇总")
 	 @PostMapping(value = "/bytedanceVideoInfoListWeek")
-	 public Result<List<ByteDanceVideoReportDaily>> bytedanceVideoInfoListWeek(@RequestBody DateDTO dateDTO,
+	 public Result<PageInfo<ByteDanceVideoReportDaily>> bytedanceVideoInfoListWeek(@RequestBody DateDTO dateDTO,
 																		   HttpServletRequest req){
-		 Result<List<ByteDanceVideoReportDaily>> result = new Result();
+		 Result<PageInfo<ByteDanceVideoReportDaily>> result = new Result();
 
-		 List<ByteDanceVideoReportDaily> list = videoReportDailyService.videoInfoListWeek(dateDTO.getStartDate(), dateDTO.getEndDate(), dateDTO.getSignature(), dateDTO.getCost());
+		 Integer pageNo = dateDTO.getPageNo();
+		 Integer pageSize = dateDTO.getPageSize();
+		 if(pageNo == null){
+			 pageNo = 0;
+		 }
+		 if(pageSize == null){
+			 pageSize = 10;
+		 }
+
+		 PageInfo<ByteDanceVideoReportDaily> list = videoReportDailyService.videoInfoListWeek(dateDTO.getStartDate(), dateDTO.getEndDate(), dateDTO.getSignature(), dateDTO.getCost(), pageNo, pageSize, dateDTO.getProjectIds(), dateDTO.getAccountIds());
 		 result.setResult(list);
 		 result.setSuccess(true);
 		 return result;
@@ -108,11 +137,18 @@ public class ByteDanceVideoReportDailyController {
 	 @AutoLog(value = "头条视频汇总")
 	 @ApiOperation(value = "头条视频汇总", notes = "头条视频汇总")
 	 @PostMapping(value = "/videoInfoListTotal")
-	 public Result<List<ByteDanceVideoReportDaily>> videoInfoListTotal(@RequestBody DateDTO dateDTO,
+	 public Result<PageInfo<ByteDanceVideoReportDaily>> videoInfoListTotal(@RequestBody DateDTO dateDTO,
 																		HttpServletRequest req){
-		 Result<List<ByteDanceVideoReportDaily>> result = new Result();
-
-		 List<ByteDanceVideoReportDaily> list = videoReportDailyService.videoInfoListTotal(dateDTO.getStartDate(), dateDTO.getEndDate(), dateDTO.getSignature(), dateDTO.getCost());
+		 Result<PageInfo<ByteDanceVideoReportDaily>> result = new Result();
+		 Integer pageNo = dateDTO.getPageNo();
+		 Integer pageSize = dateDTO.getPageSize();
+		 if(pageNo == null){
+			 pageNo = 0;
+		 }
+		 if(pageSize == null){
+			 pageSize = 10;
+		 }
+		 PageInfo<ByteDanceVideoReportDaily> list = videoReportDailyService.videoInfoListTotal(dateDTO.getStartDate(), dateDTO.getEndDate(), dateDTO.getSignature(), dateDTO.getCost(), pageNo, pageSize, dateDTO.getProjectIds(), dateDTO.getAccountIds());
 		 result.setResult(list);
 		 result.setSuccess(true);
 		 return result;
@@ -121,14 +157,22 @@ public class ByteDanceVideoReportDailyController {
 	 @AutoLog(value = "头条视频按月汇总")
 	 @ApiOperation(value = "头条视频按月汇总", notes = "头条视频按月汇总")
 	 @PostMapping(value = "/bytedanceVideoInfoListMonth")
-	 public Result<List<ByteDanceVideoReportDaily>> bytedanceVideoInfoListMonth(@RequestBody DateDTO dateDTO,
+	 public Result<PageInfo<ByteDanceVideoReportDaily>> bytedanceVideoInfoListMonth(@RequestBody DateDTO dateDTO,
 																			   HttpServletRequest req){
-		 Result<List<ByteDanceVideoReportDaily>> result = new Result();
+		 Result<PageInfo<ByteDanceVideoReportDaily>> result = new Result();
 
 		 if(StringUtils.isBlank(dateDTO.getSignature())){
 			 dateDTO.setSignature(null);
 		 }
-		 List<ByteDanceVideoReportDaily> list = videoReportDailyService.videoInfoListMonth(dateDTO.getStartDate(), dateDTO.getEndDate(), dateDTO.getSignature(), dateDTO.getCost());
+		 Integer pageNo = dateDTO.getPageNo();
+		 Integer pageSize = dateDTO.getPageSize();
+		 if(pageNo == null){
+			 pageNo = 0;
+		 }
+		 if(pageSize == null){
+			 pageSize = 10;
+		 }
+		 PageInfo<ByteDanceVideoReportDaily> list = videoReportDailyService.videoInfoListMonth(dateDTO.getStartDate(), dateDTO.getEndDate(), dateDTO.getSignature(), dateDTO.getCost(), pageNo, pageSize, dateDTO.getProjectIds(), dateDTO.getAccountIds());
 		 result.setResult(list);
 		 result.setSuccess(true);
 		 return result;
@@ -188,12 +232,12 @@ public class ByteDanceVideoReportDailyController {
 		 result.setSuccess(true);
 		 result.setMessage("success");
 
-		 int perCode = videoReportDailyService.videoInfoListTotalExportExcelPermission();
-		 if(perCode == 0){
-		 	result.setMessage("无导出权限");
-		 	result.setCode(500);
-			return;
-		 }
+		 //int perCode = videoReportDailyService.videoInfoListTotalExportExcelPermission();
+		 //if(perCode == 0){
+		 //	result.setMessage("无导出权限");
+		 //	result.setCode(500);
+			//return;
+		 //}
 
 		 //公司报表
 		 List<ByteDanceVideoReportDaily> list = videoReportDailyService.videoInfoListDetail(dateDTO.getStartDate(), dateDTO.getEndDate(), dateDTO.getSignature());
@@ -204,7 +248,7 @@ public class ByteDanceVideoReportDailyController {
 			 for (ByteDanceVideoReportDaily sum : list) {
 				 List<Object> ByteDanceVideoReportDaily = new ArrayList();
 				 ByteDanceVideoReportDaily.add(sum.getAdvertiserName());  //客户
-				 ByteDanceVideoReportDaily.add(sum.getUrl() );  //视频链接
+				 ByteDanceVideoReportDaily.add(sum.getVideoUrl() );  //视频链接
 				 ByteDanceVideoReportDaily.add(DateUtils.formatDate(sum.getStatDatetime()));  //时间
 				 ByteDanceVideoReportDaily.add(sum.getCost());  //消耗
 				 ByteDanceVideoReportDaily.add(sum.getHuanbi().multiply(new BigDecimal("100")).setScale(2,BigDecimal.ROUND_HALF_UP) + "%");  //环比
@@ -234,9 +278,17 @@ public class ByteDanceVideoReportDailyController {
 		 result.setSuccess(true);
 		 result.setMessage("success");
 
+		 //权限判断
+		 int perCode = videoReportDailyService.videoInfoListTotalExportExcelPermission();
+		 if(perCode == 0){
+			 result.setMessage("无导出权限");
+			 result.setCode(500);
+			 return;
+		 }
+
 		 String[] columns = dateDTO.getColumns();
 
-  		 List<ByteDanceVideoReportDaily> list = videoReportDailyService.videoInfoListTotal(dateDTO.getStartDate(), dateDTO.getEndDate(), dateDTO.getSignature(), dateDTO.getCost());
+  		 List<ByteDanceVideoReportDaily> list = videoReportDailyService.videoInfoListTotalExcel(dateDTO.getStartDate(), dateDTO.getEndDate(), dateDTO.getSignature(), dateDTO.getCost());
 
 		 //导出excel
 		 List<List<Object>> group = new ArrayList<>();
@@ -286,7 +338,7 @@ public class ByteDanceVideoReportDailyController {
 					 }
 
 					 if( column.equals("url")){
-						 ByteDanceVideoReportDaily.add(sum.getUrl() );  //
+						 ByteDanceVideoReportDaily.add(sum.getVideoUrl() );  //下载的时候链接转换成头条的链接
 						 continue;
 					 }
 

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

@@ -208,4 +208,17 @@ public class BytedanceReportController {
     }
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
 }

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

@@ -1,5 +1,6 @@
 package cn.com.ctop.toutiao.modules.report.mapper;
 
+import cn.com.ctop.toutiao.modules.report.DTO.AccountVideoDTO;
 import cn.com.ctop.toutiao.modules.report.entity.ByteDanceVideoReportDaily;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
@@ -38,4 +39,33 @@ public interface ByteDanceVideoReportDailyMapper extends BaseMapper<ByteDanceVid
 
     List<ByteDanceVideoReportDaily> bytedanceVideoInfoList(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("role") String role, @Param("userId") String userId, @Param("signature") String signature, @Param("companyId") String companyId, @Param("cost") BigDecimal cost);
 
+    List<AccountVideoDTO> accountVideoMap();
+
+    void replaceIntoAccountVideoMapBatch(@Param("accountVideoDTOList")List<AccountVideoDTO> accountVideoDTOList);
+
+    //admin角色查询视频报表
+    List<ByteDanceVideoReportDaily> videoInfoListGroupAdmin(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("accountIds") List<Long> accountIds, @Param("signature") String signature, @Param("cost") BigDecimal cost);
+
+    //teamLeader角色查询视频报表
+    List<ByteDanceVideoReportDaily> videoInfoListGroupdesignTeamLeader(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("companyId")String companyId, @Param("accountIds") List<Long> accountIds, @Param("signature") String signature, @Param("cost") BigDecimal cost);
+
+    //平面设计角色查询视频报表
+    List<ByteDanceVideoReportDaily> videoInfoListGroupPlaneAndPlaneLeader(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("companyId")String companyId, @Param("userId")String userId, @Param("accountIds") List<Long> accountIds, @Param("signature") String signature, @Param("cost") BigDecimal cost);
+
+    //编导角色查询视频报表
+    List<ByteDanceVideoReportDaily> videoInfoListGroupPlan(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("companyId")String companyId, @Param("userId")String userId, @Param("accountIds") List<Long> accountIds, @Param("signature") String signature, @Param("cost") BigDecimal cost);
+
+    //剪辑角色查询视频报表
+    List<ByteDanceVideoReportDaily> videoInfoListGroupClip(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("companyId")String companyId, @Param("userId")String userId, @Param("accountIds") List<Long> accountIds, @Param("signature") String signature, @Param("cost") BigDecimal cost);
+
+    //拍摄
+    List<ByteDanceVideoReportDaily> videoInfoListGroupShot(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("companyId")String companyId, @Param("userId")String userId, @Param("accountIds") List<Long> accountIds, @Param("signature") String signature, @Param("cost") BigDecimal cost);
+
+    //运营
+    List<ByteDanceVideoReportDaily> videoInfoListGroupOperator(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("accountIds") List<Long> accountIds, @Param("signature") String signature, @Param("cost") BigDecimal cost);
+
+    List<Long> getAccountIdByprojectIds(@Param("projectIds")List<Long> projectIds);
+
+    List<Long> getAccountIdsByOperatorIdAndMediaId(@Param("mediaId")Integer mediaId, @Param("userId")String userId);
+
 }

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

@@ -4,7 +4,7 @@
 
     <select id="videoInfoList" resultType="cn.com.ctop.toutiao.modules.report.entity.ByteDanceVideoReportDaily">
         select
-       --  a.material_id as materialId,
+        --  a.material_id as materialId,
         --         a.account_id as accountId,
         --         b.auth_name as authName,
         b.project_id as projectId,
@@ -257,9 +257,8 @@
         and signature = #{signature}
     </update>
 
-    <select id="videoInfoListWeek" resultType="cn.com.ctop.toutiao.modules.report.entity.ByteDanceVideoReportDaily">
-        select
-        --  a.material_id as materialId,
+    <sql id="selectSql">
+--  a.material_id as materialId,
         --         a.account_id as accountId,
         --         b.auth_name as authName,
         a.project_id                             as projectId,
@@ -362,7 +361,7 @@
         then sum(a.cost) / sum(a.click)
         else 0 end                           as cpc,                            -- 平均点击单价
         -- sum(a.location_click)                    as locationClick,                  -- 互动数据-POI点击数
-        sum(a.play_over_rate)                    as playOverRate,                   -- 视频数据-播完率
+        -- sum(a.play_over_rate)                    as playOverRate,                   -- 视频数据-播完率
 
         case
         when sum(a.show_material) != 0
@@ -460,44 +459,237 @@
         case
         when sum(a.click) != 0
         then sum(a.download_start) / sum(a.click)
-        else 0 end                           as downloadStartRate               --  应用下载广告数据-安卓下载开始率  计算方法:安卓下载开始数/点击数
+        else 0 end                           as downloadStartRate,               --  应用下载广告数据-安卓下载开始率  计算方法:安卓下载开始数/点击数
+        a.huanbi as huanbi
+    </sql>
 
+    <select id="videoInfoListGroupAdmin" resultType="cn.com.ctop.toutiao.modules.report.entity.ByteDanceVideoReportDaily">
+        select
+        <include refid="selectSql"></include>
         from ctop_bytedance_video_report_daily a
         left join (select material_id,clip_id,shot_id,plan_id,plane_id from ctop_material_ascription group by material_id) f on a.signature = f.material_id
+        -- left join ctop_bytedance_account_video_map p on a.signature = p.signature
         where stat_datetime &gt;= #{startDate}
         and stat_datetime &lt;= #{endDate}
+        and f.material_id is not null
+        <!-- <if test="accountIds != null">
+             and p.account_id in
+                 <foreach item="item" index="index" collection="accountIds" open="(" separator="," close=")">
+                     #{item}
+                 </foreach>
+         </if>-->
+
+        <if test="accountIds != null">
+            and f.material_id in
+            (select signature from ctop_bytedance_account_video_map
+            where account_id in
+            <foreach item="item" index="index" collection="accountIds" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+            group by signature
+            )
+        </if>
 
-        <if test=" role != 'admin' ">
-           and a.company_id = #{companyId}
+        <if test="signature != null and signature != '' ">
+            and a.signature = #{signature}
         </if>
+        group by a.signature
+        <if test="cost != null">
+            having sum(a.cost) &gt;= #{cost}
+        </if>
+        order by sum(a.cost)
+    </select>
 
+    <select id="videoInfoListGroupdesignTeamLeader" resultType="cn.com.ctop.toutiao.modules.report.entity.ByteDanceVideoReportDaily">
+        select
+        <include refid="selectSql"></include>
+        from ctop_bytedance_video_report_daily a
+        left join (select material_id,clip_id,shot_id,plan_id,plane_id from ctop_material_ascription group by material_id) f on a.signature = f.material_id
+        -- left join ctop_bytedance_account_video_map p on a.signature = p.signature
+        where stat_datetime &gt;= #{startDate}
+        and stat_datetime &lt;= #{endDate}
+        and a.company_id = #{companyId}
         and f.material_id is not null
+        <!--        and f.material_id is not null-->
+        <!--        <if test="accountIds != null">-->
+        <!--            and p.account_id in-->
+        <!--                <foreach item="item" index="index" collection="accountIds" open="(" separator="," close=")">-->
+        <!--                    #{item}-->
+        <!--                </foreach>-->
+        <!--        </if>-->
+        <if test="accountIds != null">
+            and f.material_id in
+            (select signature from ctop_bytedance_account_video_map
+            where account_id in
+            <foreach item="item" index="index" collection="accountIds" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+            group by signature
+            )
+        </if>
 
-        <choose>   <!-- 编导、剪辑、拍摄、平面只能查看自己本职工作制作的视频,设计组长和管理员能查看所有的-->
-            <when test="role == 'plan'">
-                and f.plan_id = #{userId}
-            </when>
-            <when test="role == 'clip'">
-                and f.clip_id = #{userId}
-            </when>
-            <when test="role == 'shot' ">
-                and f.shot_id = #{userId}
-            </when>
-            <when test="role == 'plane'  or role == 'planeLeader' ">
-                and f.plane_id = #{userId}
-            </when>
-            <when test="role == 'admin' or role == 'designTeamLeader'">
-                and 1=1
-            </when>
-            <otherwise>F
-                and a.id = 0
-            </otherwise>
-        </choose>
+        <if test="signature != null and signature != '' ">
+            and a.signature = #{signature}
+        </if>
+        group by a.signature
+        <if test="cost != null">
+            having sum(a.cost) &gt;= #{cost}
+        </if>
+        order by sum(a.cost)
+    </select>
 
+    <select id="videoInfoListGroupPlaneAndPlaneLeader" resultType="cn.com.ctop.toutiao.modules.report.entity.ByteDanceVideoReportDaily">
+        select
+        <include refid="selectSql"></include>
+        from ctop_bytedance_video_report_daily a
+        left join (select material_id,clip_id,shot_id,plan_id,plane_id from ctop_material_ascription group by material_id) f on a.signature = f.material_id
+        -- left join ctop_bytedance_account_video_map p on a.signature = p.signature
+        where stat_datetime &gt;= #{startDate}
+        and stat_datetime &lt;= #{endDate}
+        and a.company_id = #{companyId}
+        and f.material_id is not null
+        and f.plane_id = #{userId}
+        <if test="accountIds != null">
+            and f.material_id in
+            (select signature from ctop_bytedance_account_video_map
+            where account_id in
+            <foreach item="item" index="index" collection="accountIds" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+            group by signature
+            )
+        </if>
         <if test="signature != null and signature != '' ">
             and a.signature = #{signature}
         </if>
+        group by a.signature
+        <if test="cost != null">
+            having sum(a.cost) &gt;= #{cost}
+        </if>
+        order by sum(a.cost)
+    </select>
 
+    <select id="videoInfoListGroupPlan" resultType="cn.com.ctop.toutiao.modules.report.entity.ByteDanceVideoReportDaily">
+        select
+        <include refid="selectSql"></include>
+        from ctop_bytedance_video_report_daily a
+        left join (select material_id,clip_id,shot_id,plan_id,plane_id from ctop_material_ascription group by material_id) f on a.signature = f.material_id
+        -- left join ctop_bytedance_account_video_map p on a.signature = p.signature
+        where stat_datetime &gt;= #{startDate}
+        and stat_datetime &lt;= #{endDate}
+        and a.company_id = #{companyId}
+        and f.material_id is not null
+        and f.plan_id = #{userId}
+        <if test="accountIds != null">
+            and f.material_id in
+            (select signature from ctop_bytedance_account_video_map
+            where account_id in
+            <foreach item="item" index="index" collection="accountIds" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+            group by signature
+            )
+        </if>
+        <if test="signature != null and signature != '' ">
+            and a.signature = #{signature}
+        </if>
+        group by a.signature
+        <if test="cost != null">
+            having sum(a.cost) &gt;= #{cost}
+        </if>
+        order by sum(a.cost)
+    </select>
+
+    <select id="videoInfoListGroupClip" resultType="cn.com.ctop.toutiao.modules.report.entity.ByteDanceVideoReportDaily">
+        select
+        <include refid="selectSql"></include>
+        from ctop_bytedance_video_report_daily a
+        left join (select material_id,clip_id,shot_id,plan_id,plane_id from ctop_material_ascription group by material_id) f on a.signature = f.material_id
+        -- left join ctop_bytedance_account_video_map p on a.signature = p.signature
+        where stat_datetime &gt;= #{startDate}
+        and stat_datetime &lt;= #{endDate}
+        and a.company_id = #{companyId}
+        and f.material_id is not null
+        and f.clip_id = #{userId}
+        <if test="accountIds != null">
+            and f.material_id in
+            (select signature from ctop_bytedance_account_video_map
+            where account_id in
+            <foreach item="item" index="index" collection="accountIds" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+            group by signature
+            )
+        </if>
+        <if test="signature != null and signature != '' ">
+            and a.signature = #{signature}
+        </if>
+        group by a.signature
+        <if test="cost != null">
+            having sum(a.cost) &gt;= #{cost}
+        </if>
+        order by sum(a.cost)
+    </select>
+
+    <select id="videoInfoListGroupShot" resultType="cn.com.ctop.toutiao.modules.report.entity.ByteDanceVideoReportDaily">
+        select
+        <include refid="selectSql"></include>
+        from ctop_bytedance_video_report_daily a
+        left join (select material_id,clip_id,shot_id,plan_id,plane_id from ctop_material_ascription group by material_id) f on a.signature = f.material_id
+        -- left join ctop_bytedance_account_video_map p on a.signature = p.signature
+        where stat_datetime &gt;= #{startDate}
+        and stat_datetime &lt;= #{endDate}
+        and a.company_id = #{companyId}
+        and f.material_id is not null
+        and f.shot_id = #{userId}
+        <if test="accountIds != null">
+            and f.material_id in
+            (select signature from ctop_bytedance_account_video_map
+            where account_id in
+            <foreach item="item" index="index" collection="accountIds" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+            group by signature
+            )
+        </if>
+        <if test="signature != null and signature != '' ">
+            and a.signature = #{signature}
+        </if>
+        group by a.signature
+        <if test="cost != null">
+            having sum(a.cost) &gt;= #{cost}
+        </if>
+        order by sum(a.cost)
+    </select>
+
+    <select id="videoInfoListGroupOperator" resultType="cn.com.ctop.toutiao.modules.report.entity.ByteDanceVideoReportDaily">
+        select
+        <include refid="selectSql"></include>
+        from ctop_bytedance_video_report_daily a
+        left join (select material_id from ctop_material_ascription group by material_id) f on a.signature = f.material_id
+        -- left join ctop_bytedance_account_video_map p on a.signature = p.signature
+        where stat_datetime &gt;= #{startDate}
+        and stat_datetime &lt;= #{endDate}
+        and f.material_id is not null
+        <!--        and p.account_id in-->
+        <!--        <foreach item="item" index="index" collection="accountIds" open="(" separator="," close=")">-->
+        <!--            #{item}-->
+        <!--        </foreach>-->
+
+        <if test="accountIds != null">
+            and f.material_id in
+            (select signature from ctop_bytedance_account_video_map
+            where account_id in
+            <foreach item="item" index="index" collection="accountIds" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+            group by signature
+            )
+        </if>
+
+        <if test="signature != null and signature != '' ">
+            and a.signature = #{signature}
+        </if>
         group by a.signature
         <if test="cost != null">
             having sum(a.cost) &gt;= #{cost}
@@ -562,17 +754,17 @@
     </update>
 
     <select id="videoInfoListDetail" resultType="cn.com.ctop.toutiao.modules.report.entity.ByteDanceVideoReportDaily">
-                select
-                --  a.project_id as projectId,
-                --  a.project_name as projectName,
-                a.advertiser_id as advertiserId,
-                a.advertiser_name as advertiserName,
-                a.stat_datetime as statDatetime,
-                a.cost as cost,  -- 消耗
-                -- a.signature as signature,
-                a.video_url as videoUrl,
-                (select info.url from ctop_material_info info where info.code = a.signature limit 1) as url,
-                huanbi as huanbi
+        select
+        --  a.project_id as projectId,
+        --  a.project_name as projectName,
+        a.advertiser_id as advertiserId,
+        a.advertiser_name as advertiserName,
+        a.stat_datetime as statDatetime,
+        a.cost as cost,  -- 消耗
+        -- a.signature as signature,
+        a.video_url as videoUrl,
+        (select info.url from ctop_material_info info where info.code = a.signature limit 1) as url,
+        huanbi as huanbi
 
         from ctop_bytedance_video_report_daily a
         left join (select material_id,clip_id,shot_id,plan_id,plane_id from ctop_material_ascription group by material_id) f on a.signature = f.material_id
@@ -586,156 +778,468 @@
         order by stat_datetime desc
     </select>
 
-    <select id="bytedanceVideoInfoList" resultType="cn.com.ctop.toutiao.modules.report.entity.ByteDanceVideoReportDaily">
-                    select
-                    a.project_id as projectId,
-                    a.project_name as projectName,
-                    a.advertiser_id as advertiserId,
-                    a.advertiser_name as advertiserName,
-                    a.stat_datetime as statDatetime,
-                    a.cost as cost,  -- 消耗
-                    a.signature as signature,
-                    (select info.url from ctop_material_info info where info.code = a.signature limit 1) as url,
-                    <!--  case when e.material_name is null
-                    then '-'
-                    else e.material_name end as materialName, -->
-                    '-' as materialDesc,
-                    1 as appType,
-                    a.click as clickMaterial,   -- 点击数
-                    a.play25_feed_break_rate as play25FeedBreakRate,  -- 25%进度播放率
-                    a.play_over_rate as playOverRate,  -- 整体完播率
-                    a.convert_rate as convertRate,  -- 转化率  转化数/点击数*100% !
-                    a.active as active, -- 应用下载-激活
-                    a.download_finish as downloadFinish, -- 应用下载-安卓下载完成
-                    a.download_start as downloadStart, -- 应用下载-安卓下载开始
-                    a.install_finish as installFinish, -- 应用下载-安卓安装完成
-                    a.register as register, -- 应用下载-注册
-                    a.pay_count as payCount, -- 应用下载-付费数
-                    -- a.in_app_uv as inAppUv, -- 应用下载-到达uv
-                    -- a.in_app_detail_uv as inAppDetailUv, -- 应用下载-详情页到站uv
-                    -- a.in_app_cart as inAppCart, -- 应用下载-加入购物车
-                    -- a.in_app_order as inAppOrder, -- 应用下载-提交订单
-                    -- a.in_app_pay as inAppPay, -- 应用下载-付费
-                    -- a.phone as phone, -- 落地页-电话拨打数
-                    a.form as form, --  表单提交数
-                    -- a.map_search as mapSearch, -- 落地页-地图搜索
-                    -- a.button as button, -- 落地页-按钮button
-                    -- a.view_material as viewMaterial, -- 落地页-关键页面浏览
-                    -- a.qq as qq, -- 落地页-QQ咨询数
-                    -- a.lottery as lottery, -- 落地页-抽奖数
-                    -- a.vote as vote, -- 落地页-投票
-                    -- a.redirect as redirect, -- 落地页-页面跳转
-                    -- a.shopping as shopping, -- 落地页-商品购买
-                    -- a.consult as consult, -- 落地页-在线咨询
-                    -- a.wechat as wechat, -- 落地页-微信
-                    -- a.phone_confirm as phoneConfirm, -- 落地页-智能电话确认拨打
-                    -- a.phone_connect as phoneConnect, -- 落地页-智能电话确认接通
-                    -- a.consult_effective as consultEffective, -- 落地页-智能电话有效咨询
-                    a.total_play as totalPlay, -- 视频-总播放
-                    a.valid_play as validPlay, -- 视频-有效播放
-                    a.wifi_play as wifiPlay, -- 视频-wifi播放
-                    a.play25_feed_break as play25FeedBreak, -- 视频-播放25%进度总数
-                    a.play50_feed_break as play50FeedBreak, -- 视频-播放50%进度总数
-                    a.play75_feed_break as play75FeedBreak, -- 视频-播放75%进度总数
-                    a.play100_feed_break as play100FeedBreak, -- 视频-播放100%进度总数
-                    -- a.advanced_creative_phone_click as advancedCreativePhoneClick, -- 附加创意-电话按钮
-                    -- a.advanced_creative_counsel_click as advancedCreativeCounselClick, -- 附加创意-在线咨询
-                    -- a.advanced_creative_form_click as advancedCreativeFormClick, -- 附加创意-表单提交
-                    a.share_material as shareMaterial, -- 互动数据-分享数
-                    -- a.comment_material as commentMaterial, -- 互动数据-评论数
-                    a.follow as follow, -- 互动数据-新增关注数
-                    -- a.home_visited as homeVisited, -- 互动数据-主页访问量
-                    -- a.ies_challenge_click as iesChallengeClick, -- 互动数据-挑战赛查看数
-                    -- a.ies_music_click as iesMusicClick, -- 互动数据-音乐查看数
-                    a.next_day_open as nextDayOpen, -- 次留数
-                    a.next_day_open_rate as nextDayOpenRate, -- 次留率 = 次留数/激活数
-                    a.next_day_open_cost as nextDayOpenCost, -- 次留成本 = 消耗/次留数
-                    a.active_pay_amount as activePayAmount, -- 应用下载广告数据-付费次数
-                    a.valid_play_cost as  validPlayCost, -- 视频数据-有效播放成本  计算公式:总花费/有效播放数,当天数据可能会有波动,次日早8点后稳定。
-                    -- a.advanced_creative_coupon_addition as advancedCreativeCouponAddition, -- 附加创意-附加创意卡券领取
-                    a.convert_material as convertMaterial, -- 转化数据-转化数
-                    a.active_pay_cost as activePayCost, -- 应用下载广告数据-付费成本 = 消耗/付费次数
-                    -- a.download as download, -- 落地页转化数据-下载开始
-                    a.cpc as cpc, -- 平均点击单价
-                    -- a.location_click as locationClick, -- 互动数据-POI点击数
-                    a.play_over_rate as playOverRate, -- 视频数据-播完率
-                    a.ctr as ctr, -- 展现数据-点击率   广告被点击的次数占展示次数的百分比。计算方法:点击数/展示数*100%
-                    a.cpm as  cpm, -- 平均千次展现费用  广告平均每一千次展现所付出的费用,计算公式是:总花费/展示数*1000。
-                    a.wifi_play_rate as wifiPlayRate, -- 视频数据-WiFi播放占比
-                    a.like_material as likeMaterial, -- 互动数据-点赞数
-                    a.active_cost as activeCost, -- 应用下载广告数据-激活成本  计算方式:总花费/激活数。
-                    a.game_addiction_cost as gameAddictionCost, -- 应用下载广告数据-关键行为成本  广告主为每个有APP内关键行为的用户所付出的成本,计算公式是总花费/关键行为数。当天数据可能会有波动,次日早8点后稳定。
-                    a.game_addiction as gameAddiction, -- 应用下载广告数据-关键行为数
-                    a.active_rate as activeRate, -- 应用下载广告数据-激活率   计算方式:激活数/点击数*100%
-                    a.game_addiction_rate as gameAddictionRate, -- 应用下载广告数据-关键行为率  关键行为用户占激活用户的比例
-                    a.active_register_rate as activeRegisterRate, -- 应用下载广告数据-注册率   注册用户占激活用户的比例
-                    a.download_finish_cost as downloadFinishCost, -- 应用下载广告数据-安卓下载完成成本 计算方式:总花费/安卓下载完成数。
-                    a.active_register_cost as activeRegisterCost, -- 应用下载广告数据-注册成本  总花费/注册数,当天数据可能会有波动,次日早8点后稳定。
-                    a.show_material as showMaterial, -- 展现数据-展示数
-                    a.download_finish_rate as downloadFinishRate, -- 应用下载广告数据-安卓下载完成率  计算方式:安卓下载完成数/安卓下载开始数
-                    a.install_finish_rate as installFinishRate, -- 应用下载广告数据-安卓安装完成率  计算方式:安卓安装完成数/安卓下载完成数
-                    -- a.coupon as coupon, -- 落地页转化数据-建站卡券领取
-                    -- a.coupon_single_page as couponSinglePage, -- 落地页转化数据-卡券页领取
-                    a.play_over as playOver, -- 完播数
-                    a.download_start_cost as downloadStartCost, -- 应用下载广告数据-安卓下载开始成本  计算方法:总花费/安卓下载开始数。
-                    -- a.message as message, -- 落地页转化数据-短信咨询  用户点击短信咨询的次数
-                    a.valid_play_rate as validPlayRate, -- 视频数据-有效播放率  有效播放数/展示数
-                    a.average_play_time_per_play as averagePlayTimePerPlay, -- 视频数据-平均单次播放时长
-                    a.convert_cost as convertCost, --  转化数据-转化成本=总花费/转化数
-                    a.install_finish_cost as installFinishCost, --  应用下载广告数据-安卓安装完成成本  计算方式:总花费/安卓安装完成数
-                    a.download_start_rate as downloadStartRate --  应用下载广告数据-安卓下载开始率  计算方法:安卓下载开始数/点击数
+    <select id="accountVideoMap" resultType="cn.com.ctop.toutiao.modules.report.DTO.AccountVideoDTO">
+            select
+            a.account_id,b.signature
+        FROM
+        ctop_bytedance_report_material_daily a
+        left join ctop_bytedance_video_info b on a.material_id = b.material_id
+        where a.image_mode in ('CREATIVE_IMAGE_MODE_VIDEO','CREATIVE_IMAGE_MODE_VIDEO_VERTICAL')
+        and b.signature is not null
+        group by a.account_id,b.signature
+    </select>
+
+    <insert id="replaceIntoAccountVideoMapBatch">
+        replace into
+        ctop_bytedance_account_video_map
+        (
+        account_id,
+        signature
+        )
+        values
+        <foreach collection="accountVideoDTOList" item="accountVideo" separator=",">
+            (
+            #{accountVideo.accountId},
+            #{accountVideo.signature}
+            )
+        </foreach>
+    </insert>
+
+
+    <select id="getAccountIdByprojectIds" resultType="long">
+        select
+        account_id
+        from
+        ctop_user_allocation
+        where
+        project_id in
+        <foreach collection="projectIds" item="item" separator=","
+                 open="(" close=")">
+            #{item}
+        </foreach>
+        group by account_id
+    </select>
+
+    <select id="getAccountIdsByOperatorIdAndMediaId" resultType="long">
+        select
+        account_id
+        from
+        ctop_user_allocation
+        where
+        user_id = #{userId}
+        and media_id = #{mediaId}
+    </select>
+
+
+    <select id="videoInfoList2" resultType="cn.com.ctop.toutiao.modules.report.entity.ByteDanceVideoReportDaily">
+        select
+        --  a.material_id as materialId,
+        --         a.account_id as accountId,
+        --         b.auth_name as authName,
+        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,
+        e.url as url,
+        <!-- e.material_name as materialName,  -->
+        '-' 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,  -- 25%进度播放率
+
+        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,  -- 转化率  转化数/点击数*100% !
+        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, -- 应用下载-到达uv
+        sum(a.in_app_detail_uv) as inAppDetailUv, -- 应用下载-详情页到站uv
+        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, -- 落地页-按钮button
+        sum(a.view_material) as viewMaterial, -- 落地页-关键页面浏览
+        sum(a.qq) as qq, -- 落地页-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, -- 视频-wifi播放
+        <!-- sum(a.play_duration_sum) as play_duration_sum, --> -- 视频-播放时长,单位ms
+        sum(a.play25_feed_break) as play25FeedBreak, -- 视频-播放25%进度总数
+        sum(a.play50_feed_break) as play50FeedBreak, -- 视频-播放50%进度总数
+        sum(a.play75_feed_break) as play75FeedBreak, -- 视频-播放75%进度总数
+        sum(a.play100_feed_break) as play100FeedBreak, -- 视频-播放100%进度总数
+        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, -- 视频数据-有效播放成本  计算公式:总花费/有效播放数,当天数据可能会有波动,次日早8点后稳定。
+        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, -- 落地页转化数据-下载开始
+        <!--sum(a.cpa) as cpa, -->--
+        case
+        when sum(a.click) != 0
+        then sum(a.cost) / sum(a.click)
+        else 0 end                           as cpc,                            -- 平均点击单价
+        sum(a.location_click) as locationClick, -- 互动数据-POI点击数
+        --  sum(a.play_over_rate) as playOverRate, -- 视频数据-播完率
+
+        case
+        when sum(a.show_material) != 0
+        then sum(a.click)/sum(a.show_material)
+        else 0 end as ctr, -- 展现数据-点击率   广告被点击的次数占展示次数的百分比。计算方法:点击数/展示数*100%
+
+        case
+        when sum(a.show_material) != 0
+        then sum(a.cost)/sum(a.show_material)*1000
+        else 0 end cpm, -- 平均千次展现费用  广告平均每一千次展现所付出的费用,计算公式是:总花费/展示数*1000。
+        sum(a.wifi_play_rate) as wifiPlayRate, -- 视频数据-WiFi播放占比
+        sum(a.like_material) as likeMaterial, -- 互动数据-点赞数
+        <!--  sum(a.active_pay_rate) as activePayRate,--> -- 应用下载广告数据-付费率
+
+        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, -- 应用下载广告数据-关键行为成本  广告主为每个有APP内关键行为的用户所付出的成本,计算公式是总花费/关键行为数。当天数据可能会有波动,次日早8点后稳定。
+        sum(a.game_addiction) as gameAddiction, -- 应用下载广告数据-关键行为数
+
+        case
+        when sum(a.click) != 0
+        then sum(a.active)/sum(a.click)
+        else 0 end as activeRate, -- 应用下载广告数据-激活率   计算方式:激活数/点击数*100%
+        <!-- sum(a.play_duration_10s) as playDuration10s,--> --
+        <!-- sum(a.phone_effective) as phone_effective,--> --
+
+        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, -- 应用下载广告数据-注册率   注册用户占激活用户的比例
+        <!-- sum(a.average_video_play) as averageVideoPlay,--> --
+
+        case
+        when sum(a.download_finish) != 0
+        then sum(a.cost)/sum(a.download_finish)
+        else 0 end as downloadFinishCost, -- 应用下载广告数据-安卓下载完成成本 计算方式:总花费/安卓下载完成数。
+        <!--sum(a.play_duration_3s) as playDuration3s,--> --
+
+        case
+        when sum(a.register) != 0
+        then sum(a.cost)/sum(a.register)
+        else 0 end as activeRegisterCost, -- 应用下载广告数据-注册成本  总花费/注册数,当天数据可能会有波动,次日早8点后稳定。
+        sum(a.show_material) as showMaterial, -- 展现数据-展示数
+
+        <!--  case
+        when sum(a.click) != 0
+        then sum(a.convert_material)/sum(a.click)
+        else 0 end as convertRate,  转化数据-转化率  计算方式:转化数/点击数*100%  -->
+
+        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, -- 落地页转化数据-短信咨询  用户点击短信咨询的次数
+        <!-- sum(a.play_duration) as playDuration, --> --
+
+        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, --  转化数据-转化成本=总花费/转化数
+        <!--  sum(a.convert_show_rate) as convert_show_rate, --> --
+
+        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, --  应用下载广告数据-安卓下载开始率  计算方法:安卓下载开始数/点击数
+
+        #{companyId} as companyId
+        from ctop_bytedance_report_material_daily a
+        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 ctop_bytedance_video_info 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}
+        group by `statDatetime`,`account_id`,`signature`
+    </select>
+
+    <select id="videoInfoListGroupOperator2" resultType="cn.com.ctop.toutiao.modules.report.entity.ByteDanceVideoReportDaily">
+        select
+        <include refid="selectSql"></include>
         from ctop_bytedance_video_report_daily a
-        left join (select id,code,url,material_name from ctop_material_info group by code) e on a.signature = e.code
-        left join (select material_id,clip_id,shot_id,plan_id,plane_id from ctop_material_ascription group by material_id) f on e.id = f.material_id
+        left join (select material_id from ctop_material_ascription group by material_id) f on a.signature = f.material_id
         where stat_datetime &gt;= #{startDate}
         and stat_datetime &lt;= #{endDate}
-        <if test=" role != 'admin' ">
-            and a.company_id = #{companyId}
+        and f.material_id is not null
+        and a.account_id in
+        <foreach item="item" index="index" collection="accountIds" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+        <if test="signature != null and signature != '' ">
+            and a.signature = #{signature}
+        </if>
+        group by a.signature
+        <if test="cost != null">
+            having sum(a.cost) &gt;= #{cost}
+        </if>
+        order by sum(a.cost)
+    </select>
+
+    <select id="videoInfoListGroupShot2" resultType="cn.com.ctop.toutiao.modules.report.entity.ByteDanceVideoReportDaily">
+        select
+        <include refid="selectSql"></include>
+        from ctop_bytedance_video_report_daily a
+        left join (select material_id,clip_id,shot_id,plan_id,plane_id from ctop_material_ascription group by material_id) f on a.signature = f.material_id
+        where stat_datetime &gt;= #{startDate}
+        and stat_datetime &lt;= #{endDate}
+        and a.company_id = #{companyId}
+        and f.material_id is not null
+        and f.shot_id = #{userId}
+        <if test="accountIds != null">
+            and a.account_id in
+            <foreach item="item" index="index" collection="accountIds" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="signature != null and signature != '' ">
+            and a.signature = #{signature}
+        </if>
+        group by a.signature
+        <if test="cost != null">
+            having sum(a.cost) &gt;= #{cost}
+        </if>
+        order by sum(a.cost)
+    </select>
+
+    <select id="videoInfoListGroupAdmin2" resultType="cn.com.ctop.toutiao.modules.report.entity.ByteDanceVideoReportDaily">
+        select
+        <include refid="selectSql"></include>
+        from ctop_bytedance_video_report_daily a
+        left join (select material_id,clip_id,shot_id,plan_id,plane_id from ctop_material_ascription group by material_id) f on a.signature = f.material_id
+        where stat_datetime &gt;= #{startDate}
+        and stat_datetime &lt;= #{endDate}
+        and f.material_id is not null
+        <if test="accountIds != null">
+            and a.account_id in
+            <foreach item="item" index="index" collection="accountIds" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+
+        <if test="signature != null and signature != '' ">
+            and a.signature = #{signature}
+        </if>
+        group by a.signature
+        <if test="cost != null">
+            having sum(a.cost) &gt;= #{cost}
+        </if>
+        order by sum(a.cost)
+    </select>
+
+    <select id="videoInfoListGroupdesignTeamLeader2" resultType="cn.com.ctop.toutiao.modules.report.entity.ByteDanceVideoReportDaily">
+        select
+        <include refid="selectSql"></include>
+        from ctop_bytedance_video_report_daily a
+        left join (select material_id,clip_id,shot_id,plan_id,plane_id from ctop_material_ascription group by material_id) f on a.signature = f.material_id
+        where stat_datetime &gt;= #{startDate}
+        and stat_datetime &lt;= #{endDate}
+        and a.company_id = #{companyId}
+        and f.material_id is not null
+        <if test="accountIds != null">
+            and a.account_id in
+            <foreach item="item" index="index" collection="accountIds" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+
+        <if test="signature != null and signature != '' ">
+            and a.signature = #{signature}
+        </if>
+        group by a.signature
+        <if test="cost != null">
+            having sum(a.cost) &gt;= #{cost}
+        </if>
+        order by sum(a.cost)
+    </select>
+
+    <select id="videoInfoListGroupPlaneAndPlaneLeader2" resultType="cn.com.ctop.toutiao.modules.report.entity.ByteDanceVideoReportDaily">
+        select
+        <include refid="selectSql"></include>
+        from ctop_bytedance_video_report_daily a
+        left join (select material_id,clip_id,shot_id,plan_id,plane_id from ctop_material_ascription group by material_id) f on a.signature = f.material_id
+        where stat_datetime &gt;= #{startDate}
+        and stat_datetime &lt;= #{endDate}
+        and a.company_id = #{companyId}
+        and f.material_id is not null
+        and f.plane_id = #{userId}
+        <if test="accountIds != null">
+            and a.account_id in
+            <foreach item="item" index="index" collection="accountIds" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="signature != null and signature != '' ">
+            and a.signature = #{signature}
+        </if>
+        group by a.signature
+        <if test="cost != null">
+            having sum(a.cost) &gt;= #{cost}
         </if>
-        and e.code is not null
-        <!--<if test="role == 'plan'">
-            and f.plan = #{userId}
-        </if>
-        <if test="role == 'clip'">
-            and f.clip = #{userId}
-        </if>
-        <if test="role == 'shot' ">
-            and f.shot = #{userId}
-        </if>
-        <if test="role == 'plane' ">
-            and f.plane = #{userId}
-        </if>
-        <if test="role == 'admin' or role == 'designTeamLeader'">
-            and 1=1
-        </if>-->
-
-        <choose>   <!-- 编导、剪辑、拍摄、平面只能查看自己本职工作制作的视频,设计组长和管理员能查看所有的-->
-            <when test="role == 'plan'">
-                and f.plan_id = #{userId}
-            </when>
-            <when test="role == 'clip'">
-                and f.clip_id = #{userId}
-            </when>
-            <when test="role == 'shot' ">
-                and f.shot_id = #{userId}
-            </when>
-            <when test="role == 'plane'  or role == 'planeLeader' ">
-                and f.plane_id = #{userId}
-            </when>
-            <when test="role == 'admin' or role == 'designTeamLeader'">
-                and 1=1
-            </when>
-            <otherwise>
-                and a.id = 0
-            </otherwise>
-        </choose>
+        order by sum(a.cost)
+    </select>
 
+    <select id="videoInfoListGroupPlan2" resultType="cn.com.ctop.toutiao.modules.report.entity.ByteDanceVideoReportDaily">
+        select
+        <include refid="selectSql"></include>
+        from ctop_bytedance_video_report_daily a
+        left join (select material_id,clip_id,shot_id,plan_id,plane_id from ctop_material_ascription group by material_id) f on a.signature = f.material_id
+        where stat_datetime &gt;= #{startDate}
+        and stat_datetime &lt;= #{endDate}
+        and a.company_id = #{companyId}
+        and f.material_id is not null
+        and f.plan_id = #{userId}
+        <if test="accountIds != null">
+            and a.account_id in
+            <foreach item="item" index="index" collection="accountIds" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
         <if test="signature != null and signature != '' ">
             and a.signature = #{signature}
         </if>
+        group by a.signature
         <if test="cost != null">
-            and cost &gt;= #{cost}
+            having sum(a.cost) &gt;= #{cost}
         </if>
+        order by sum(a.cost)
+    </select>
+
+    <select id="videoInfoListGroupClip2" resultType="cn.com.ctop.toutiao.modules.report.entity.ByteDanceVideoReportDaily">
+        select
+        <include refid="selectSql"></include>
+        from ctop_bytedance_video_report_daily a
+        left join (select material_id,clip_id,shot_id,plan_id,plane_id from ctop_material_ascription group by material_id) f on a.signature = f.material_id
+        where stat_datetime &gt;= #{startDate}
+        and stat_datetime &lt;= #{endDate}
+        and a.company_id = #{companyId}
+        and f.material_id is not null
+        and f.clip_id = #{userId}
+        <if test="accountIds != null">
+            and account_id in
+            <foreach item="item" index="index" collection="accountIds" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="signature != null and signature != '' ">
+            and a.signature = #{signature}
+        </if>
+        group by a.signature
+        <if test="cost != null">
+            having sum(a.cost) &gt;= #{cost}
+        </if>
+        order by sum(a.cost)
     </select>
 
 </mapper>

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

@@ -197,4 +197,222 @@
     </select>
 
 
+
+
+
+    <select id="videoInfoListWeek" resultType="cn.com.ctop.toutiao.modules.report.entity.ByteDanceVideoReportDaily">
+        select
+        --  a.material_id as materialId,
+        --         a.account_id as accountId,
+        --         b.auth_name as authName,
+        a.project_id                             as projectId,
+        a.project_name                           as projectName,
+        a.advertiser_id                          as advertiserId,
+        a.advertiser_name                        as advertiserName,
+        a.stat_datetime                          as statDatetime,
+        sum(a.cost)                              as cost,                           -- 消耗
+        a.signature                              as signature,
+        a.video_url                              as videoUrl,
+        '-'                                      as materialDesc,
+        (select info.url from ctop_material_info info where info.code = a.signature limit 1)                                    as url,
+        1                                        as appType,
+        sum(a.click)                             as clickMaterial,                  -- 点击数
+
+        case
+        when sum(a.total_play) != 0
+        then sum(a.play25_feed_break) / sum(a.total_play)
+        else 0 end                           as play25FeedBreakRate,            -- 25%进度播放率
+
+        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,                    -- 转化率  转化数/点击数*100% !
+        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.form)                              as form,                           --  表单提交数
+        sum(a.total_play)                        as totalPlay,                      -- 视频-总播放
+        sum(a.valid_play)                        as validPlay,                      -- 视频-有效播放
+        sum(a.wifi_play)                         as wifiPlay,                       -- 视频-wifi播放
+        sum(a.play25_feed_break)                 as play25FeedBreak,                -- 视频-播放25%进度总数
+        sum(a.play50_feed_break)                 as play50FeedBreak,                -- 视频-播放50%进度总数
+        sum(a.play75_feed_break)                 as play75FeedBreak,                -- 视频-播放75%进度总数
+        sum(a.play100_feed_break)                as play100FeedBreak,               -- 视频-播放100%进度总数
+        sum(a.share_material)                    as shareMaterial,                  -- 互动数据-分享数
+        sum(a.follow)                            as follow,                         -- 互动数据-新增关注数
+        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,                -- 次留成本 = 消耗/次留数
+
+        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,                  -- 视频数据-有效播放成本  计算公式:总花费/有效播放数,当天数据可能会有波动,次日早8点后稳定。
+        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,                  -- 应用下载广告数据-付费成本 = 消耗/付费次数
+
+        case
+        when sum(a.click) != 0
+        then sum(a.cost) / sum(a.click)
+        else 0 end                           as cpc,                            -- 平均点击单价
+        sum(a.play_over_rate)                    as playOverRate,                   -- 视频数据-播完率
+
+        case
+        when sum(a.show_material) != 0
+        then sum(a.click) / sum(a.show_material)
+        else 0 end                           as ctr,                            -- 展现数据-点击率   广告被点击的次数占展示次数的百分比。计算方法:点击数/展示数*100%
+
+        case
+        when sum(a.show_material) != 0
+        then sum(a.cost) / sum(a.show_material) * 1000
+        else 0 end                              cpm,                            -- 平均千次展现费用  广告平均每一千次展现所付出的费用,计算公式是:总花费/展示数*1000。
+        sum(a.wifi_play_rate)                    as wifiPlayRate,                   -- 视频数据-WiFi播放占比
+        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,              -- 应用下载广告数据-关键行为成本  广告主为每个有APP内关键行为的用户所付出的成本,计算公式是总花费/关键行为数。当天数据可能会有波动,次日早8点后稳定。
+        sum(a.game_addiction)                    as gameAddiction,                  -- 应用下载广告数据-关键行为数
+
+        case
+        when sum(a.click) != 0
+        then sum(a.active) / sum(a.click)
+        else 0 end                           as activeRate,                     -- 应用下载广告数据-激活率   计算方式:激活数/点击数*100%
+
+
+        case
+        when sum(a.active) != 0
+        then sum(a.game_addiction) / sum(a.active)
+        else 0 end                            as  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,             -- 应用下载广告数据-注册成本  总花费/注册数,当天数据可能会有波动,次日早8点后稳定。
+        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.play_over)                         as playOver,                       -- 完播数
+
+        case
+        when sum(a.download_start) != 0
+        then sum(a.cost) / sum(a.download_start)
+        else 0 end                           as downloadStartCost,              -- 应用下载广告数据-安卓下载开始成本  计算方法:总花费/安卓下载开始数。
+
+        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               --  应用下载广告数据-安卓下载开始率  计算方法:安卓下载开始数/点击数
+
+        from ctop_bytedance_video_report_daily a
+        left join (select material_id,clip_id,shot_id,plan_id,plane_id from ctop_material_ascription group by material_id) f on a.signature = f.material_id
+        where stat_datetime &gt;= #{startDate}
+        and stat_datetime &lt;= #{endDate}
+
+        <if test=" role != 'admin' ">
+            and a.company_id = #{companyId}
+        </if>
+
+        and f.material_id is not null
+
+        <choose>   <!-- 编导、剪辑、拍摄、平面只能查看自己本职工作制作的视频,设计组长和管理员能查看所有的-->
+            <when test="role == 'plan'">
+                and f.plan = #{userId}
+            </when>
+            <when test="role == 'clip'">
+                and f.clip = #{userId}
+            </when>
+            <when test="role == 'shot' ">
+                and f.shot = #{userId}
+            </when>
+            <when test="role == 'plane'  or role == 'planeLeader' ">
+                and f.plan = #{userId}
+            </when>
+            <when test="role == 'admin' or role == 'designTeamLeader'">
+                and 1=1
+            </when>
+            <otherwise>F
+                and a.id = 0
+            </otherwise>
+        </choose>
+
+        <if test="signature != null and signature != '' ">
+            and a.signature = #{signature}
+        </if>
+
+        group by a.signature
+        <if test="cost != null">
+            having sum(a.cost) &gt;= #{cost}
+        </if>
+        order by sum(a.cost)
+    </select>
+
+
 </mapper>

+ 9 - 4
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/service/IByteDanceVideoReportDailyService.java

@@ -2,6 +2,7 @@ package cn.com.ctop.toutiao.modules.report.service;
 
 import cn.com.ctop.toutiao.modules.report.entity.ByteDanceVideoReportDaily;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.github.pagehelper.PageInfo;
 
 import java.math.BigDecimal;
 import java.util.List;
@@ -16,11 +17,13 @@ public interface IByteDanceVideoReportDailyService extends IService<ByteDanceVid
 
     void videoInfoList(String startDate, String endDate);
 
-    List<ByteDanceVideoReportDaily> videoInfoListWeek(String startDate, String endDate, String signature, BigDecimal cost);
+    PageInfo<ByteDanceVideoReportDaily> videoInfoListWeek(String startDate, String endDate, String signature, BigDecimal cost, Integer pageNo, Integer pageSize, Long[] projectIds, Long[] accountIds);
 
-    List<ByteDanceVideoReportDaily> videoInfoListTotal(String startDate, String endDate, String signature, BigDecimal cost);
+    PageInfo<ByteDanceVideoReportDaily> videoInfoListTotal(String startDate, String endDate, String signature, BigDecimal cost, Integer pageNo, Integer pageSize, Long[] projectIds, Long[] accountIds);
 
-    List<ByteDanceVideoReportDaily> videoInfoListMonth(String startDate, String endDate, String signature, BigDecimal cost);
+    List<ByteDanceVideoReportDaily> videoInfoListTotalExcel(String startDate, String endDate, String signature, BigDecimal cost);
+
+    PageInfo<ByteDanceVideoReportDaily> videoInfoListMonth(String startDate, String endDate, String signature, BigDecimal cost, Integer pageNo, Integer pageSize, Long[] projectIds, Long[] accountIds);
 
     List<ByteDanceVideoReportDaily> videoInfoListDetail(String startDate, String endDate, String signature);
 
@@ -31,6 +34,8 @@ public interface IByteDanceVideoReportDailyService extends IService<ByteDanceVid
     //excel导出权限
     int videoInfoListTotalExportExcelPermission();
 
-    List<ByteDanceVideoReportDaily> videoInfoListDaily(String startDate, String endDate, String signature, BigDecimal cost);
+    PageInfo<ByteDanceVideoReportDaily> videoInfoListDaily(String startDate, String endDate, String signature, BigDecimal cost, Integer pageNo, Integer pageSize, Long[] projectIds, Long[] accountIds);
+
+    void accountVideoMap();
 
 }

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

@@ -1,10 +1,13 @@
 package cn.com.ctop.toutiao.modules.report.service.impl;
 
+import cn.com.ctop.toutiao.modules.report.DTO.AccountVideoDTO;
 import cn.com.ctop.toutiao.modules.report.entity.ByteDanceVideoReportDaily;
 import cn.com.ctop.toutiao.modules.report.mapper.ByteDanceVideoReportDailyMapper;
 import cn.com.ctop.toutiao.modules.report.service.IByteDanceVideoReportDailyService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
 import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.DateUtils;
@@ -13,6 +16,8 @@ import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -68,26 +73,237 @@ public class ByteDanceVideoReportDailyServiceImpl extends ServiceImpl<ByteDanceV
     }
 
     //视频按天列表
-    public List<ByteDanceVideoReportDaily> videoInfoListDaily(String startDate, String endDate, String signature, BigDecimal cost){
+    public PageInfo<ByteDanceVideoReportDaily> videoInfoListDaily(String startDate, String endDate, String signature, BigDecimal cost, Integer pageNo, Integer pageSize, Long[] projectIds, Long[] accountIds){
         LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
         String userId = sysUser.getId();
         String roleCode = byteDanceVideoReportDailyMapper.getRoleCodeByUserId(userId);
         String companyId = byteDanceVideoReportDailyMapper.getCompanyIdByUserId(userId);
 
-        List<ByteDanceVideoReportDaily> mList = byteDanceVideoReportDailyMapper.videoInfoListWeek(startDate, endDate, roleCode, userId, signature, companyId, cost);
+        List<ByteDanceVideoReportDaily> mList = new ArrayList<>();
+        //admin能看所有视频
+        if(roleCode.equals("admin")){
+            if (projectIds != null && projectIds.length != 0){
+                List<Long> projectIdsList = Arrays.asList(projectIds);
+                List<Long> accountIdsList = byteDanceVideoReportDailyMapper.getAccountIdByprojectIds(projectIdsList);
+                if(accountIdsList.size()==0 || accountIdsList == null){
+                    accountIdsList.add(-1L);
+                }
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupAdmin(startDate, endDate, accountIdsList, signature, cost);
+            }else{
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupAdmin(startDate, endDate, null, signature, cost);
+            }
+        }else if(roleCode.equals("touTiaoOperationManager") || roleCode.equals("operator") || roleCode.equals("operationAssistant")) {
+            if (projectIds != null && projectIds.length != 0){
+                List<Long> projectIdsList = Arrays.asList(projectIds);
+                List<Long> accountIdsList = byteDanceVideoReportDailyMapper.getAccountIdByprojectIds(projectIdsList);
+                if(accountIdsList.size()==0 || accountIdsList == null){
+                    accountIdsList.add(-1L);
+                }
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupOperator(startDate,endDate,accountIdsList,signature,cost);
+            }else{
+                List<Long> accoutnIds= byteDanceVideoReportDailyMapper.getAccountIdsByOperatorIdAndMediaId(1,userId);
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupOperator(startDate,endDate,accoutnIds,signature,cost);
+            }
+        }else if(roleCode.equals("shot")){
+            //设计师传入projectIds,根据projectIds解析出accountIdsList
+            if (projectIds != null && projectIds.length != 0){
+                List<Long> projectIdsList = Arrays.asList(projectIds);
+                List<Long> accountIdsList = byteDanceVideoReportDailyMapper.getAccountIdByprojectIds(projectIdsList);
+                if(accountIdsList.size() != 0){
+                    if(accountIdsList.size()==0 || accountIdsList == null){
+                        accountIdsList.add(-1L);
+                    }
+                    PageHelper.startPage(pageNo,pageSize);
+                    mList = byteDanceVideoReportDailyMapper.videoInfoListGroupShot(startDate, endDate, companyId, userId, accountIdsList, signature, cost);
+                }
+            }else{
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupShot(startDate, endDate, companyId, userId, null, signature, cost);
+            }
+        }else if(roleCode.equals("plan")){
+            if (projectIds != null && projectIds.length != 0){
+                List<Long> projectIdsList = Arrays.asList(projectIds);
+                List<Long> accountIdsList = byteDanceVideoReportDailyMapper.getAccountIdByprojectIds(projectIdsList);
+                if(accountIdsList.size()==0 || accountIdsList == null){
+                    accountIdsList.add(-1L);
+                }
+                if(accountIdsList.size() != 0){
+                    PageHelper.startPage(pageNo,pageSize);
+                    mList = byteDanceVideoReportDailyMapper.videoInfoListGroupPlan(startDate, endDate, companyId, userId, accountIdsList, signature, cost);
+                }
+            }else{
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupPlan(startDate, endDate, companyId, userId, null, signature, cost);
+            }
+        }else if(roleCode.equals("plane")){
+            if (projectIds != null && projectIds.length != 0){
+                List<Long> projectIdsList = Arrays.asList(projectIds);
+                List<Long> accountIdsList = byteDanceVideoReportDailyMapper.getAccountIdByprojectIds(projectIdsList);
+                if(accountIdsList.size()==0 || accountIdsList == null){
+                    accountIdsList.add(-1L);
+                }
+                if(accountIdsList.size() != 0){
+                    PageHelper.startPage(pageNo,pageSize);
+                    mList = byteDanceVideoReportDailyMapper.videoInfoListGroupPlaneAndPlaneLeader(startDate, endDate, companyId, userId, accountIdsList, signature, cost);
+                }
+            }else{
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupPlaneAndPlaneLeader(startDate, endDate, companyId, userId, null, signature, cost);
+            }
+        }else if(roleCode.equals("clip")){
+            if (projectIds != null && projectIds.length != 0){
+                List<Long> projectIdsList = Arrays.asList(projectIds);
+                List<Long> accountIdsList = byteDanceVideoReportDailyMapper.getAccountIdByprojectIds(projectIdsList);
+                if(accountIdsList.size()==0 || accountIdsList == null){
+                    accountIdsList.add(-1L);
+                }
+                if(accountIdsList.size() != 0){
+                    PageHelper.startPage(pageNo,pageSize);
+                    mList = byteDanceVideoReportDailyMapper.videoInfoListGroupClip(startDate, endDate, companyId, userId, accountIdsList, signature, cost);
+                }
+            }else{
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupClip(startDate, endDate, companyId, userId, null, signature, cost);
+            }
+        }else if(roleCode.equals("designTeamLeader")){
+            if (projectIds != null && projectIds.length != 0){
+                List<Long> projectIdsList = Arrays.asList(projectIds);
+                List<Long> accountIdsList = byteDanceVideoReportDailyMapper.getAccountIdByprojectIds(projectIdsList);
+                if(accountIdsList.size()==0 || accountIdsList == null){
+                    accountIdsList.add(-1L);
+                }
+                if(accountIdsList.size() != 0){
+                    PageHelper.startPage(pageNo,pageSize);
+                    mList = byteDanceVideoReportDailyMapper.videoInfoListGroupdesignTeamLeader(startDate, endDate, companyId, accountIdsList, signature, cost);
+                }
+            }else{
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupdesignTeamLeader(startDate, endDate, companyId, null, signature, cost);
+            }
+        }
 
-        return mList;
+        PageInfo<ByteDanceVideoReportDaily> pageInfo = new PageInfo<>(mList);
+        return pageInfo;
     }
 
 
     //视频报表月列表
-    public List<ByteDanceVideoReportDaily> videoInfoListMonth(String startDate, String endDate, String signature, BigDecimal cost){
+    public PageInfo<ByteDanceVideoReportDaily> videoInfoListMonth(String startDate, String endDate, String signature, BigDecimal cost, Integer pageNo, Integer pageSize, Long[] projectIds, Long[] accountIds){
         LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
         String userId = sysUser.getId();
         String roleCode = byteDanceVideoReportDailyMapper.getRoleCodeByUserId(userId);
         String companyId = byteDanceVideoReportDailyMapper.getCompanyIdByUserId(userId);
 
-        List<ByteDanceVideoReportDaily> mList = byteDanceVideoReportDailyMapper.videoInfoListWeek(startDate, endDate, roleCode, userId, signature, companyId, cost);
+        List<ByteDanceVideoReportDaily> mList = new ArrayList<>();
+        //admin能看所有视频
+        if(roleCode.equals("admin")){
+            if (projectIds != null && projectIds.length != 0){
+                List<Long> projectIdsList = Arrays.asList(projectIds);
+                List<Long> accountIdsList = byteDanceVideoReportDailyMapper.getAccountIdByprojectIds(projectIdsList);
+                if(accountIdsList.size()==0 || accountIdsList == null){
+                    accountIdsList.add(-1L);
+                }
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupAdmin(startDate, endDate, accountIdsList, signature, cost);
+            }else{
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupAdmin(startDate, endDate, null, signature, cost);
+            }
+        }else if(roleCode.equals("touTiaoOperationManager") || roleCode.equals("operator") || roleCode.equals("operationAssistant")) {
+            if (projectIds != null && projectIds.length != 0){
+                List<Long> projectIdsList = Arrays.asList(projectIds);
+                List<Long> accountIdsList = byteDanceVideoReportDailyMapper.getAccountIdByprojectIds(projectIdsList);
+                if(accountIdsList.size()==0 || accountIdsList == null){
+                    accountIdsList.add(-1L);
+                }
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupOperator(startDate,endDate,accountIdsList,signature,cost);
+            }else{
+                List<Long> accoutnIds= byteDanceVideoReportDailyMapper.getAccountIdsByOperatorIdAndMediaId(1,userId);
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupOperator(startDate,endDate,accoutnIds,signature,cost);
+            }
+        }else if(roleCode.equals("shot")){
+            //设计师传入projectIds,根据projectIds解析出accountIdsList
+            if (projectIds != null && projectIds.length != 0){
+                List<Long> projectIdsList = Arrays.asList(projectIds);
+                List<Long> accountIdsList = byteDanceVideoReportDailyMapper.getAccountIdByprojectIds(projectIdsList);
+                if(accountIdsList.size() != 0){
+                    if(accountIdsList.size()==0 || accountIdsList == null){
+                        accountIdsList.add(-1L);
+                    }
+                    PageHelper.startPage(pageNo,pageSize);
+                    mList = byteDanceVideoReportDailyMapper.videoInfoListGroupShot(startDate, endDate, companyId, userId, accountIdsList, signature, cost);
+                }
+            }else{
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupShot(startDate, endDate, companyId, userId, null, signature, cost);
+            }
+        }else if(roleCode.equals("plan")){
+            if (projectIds != null && projectIds.length != 0){
+                List<Long> projectIdsList = Arrays.asList(projectIds);
+                List<Long> accountIdsList = byteDanceVideoReportDailyMapper.getAccountIdByprojectIds(projectIdsList);
+                if(accountIdsList.size()==0 || accountIdsList == null){
+                    accountIdsList.add(-1L);
+                }
+                if(accountIdsList.size() != 0){
+                    PageHelper.startPage(pageNo,pageSize);
+                    mList = byteDanceVideoReportDailyMapper.videoInfoListGroupPlan(startDate, endDate, companyId, userId, accountIdsList, signature, cost);
+                }
+            }else{
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupPlan(startDate, endDate, companyId, userId, null, signature, cost);
+            }
+        }else if(roleCode.equals("plane")){
+            if (projectIds != null && projectIds.length != 0){
+                List<Long> projectIdsList = Arrays.asList(projectIds);
+                List<Long> accountIdsList = byteDanceVideoReportDailyMapper.getAccountIdByprojectIds(projectIdsList);
+                if(accountIdsList.size()==0 || accountIdsList == null){
+                    accountIdsList.add(-1L);
+                }
+                if(accountIdsList.size() != 0){
+                    PageHelper.startPage(pageNo,pageSize);
+                    mList = byteDanceVideoReportDailyMapper.videoInfoListGroupPlaneAndPlaneLeader(startDate, endDate, companyId, userId, accountIdsList, signature, cost);
+                }
+            }else{
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupPlaneAndPlaneLeader(startDate, endDate, companyId, userId, null, signature, cost);
+            }
+        }else if(roleCode.equals("clip")){
+            if (projectIds != null && projectIds.length != 0){
+                List<Long> projectIdsList = Arrays.asList(projectIds);
+                List<Long> accountIdsList = byteDanceVideoReportDailyMapper.getAccountIdByprojectIds(projectIdsList);
+                if(accountIdsList.size()==0 || accountIdsList == null){
+                    accountIdsList.add(-1L);
+                }
+                if(accountIdsList.size() != 0){
+                    PageHelper.startPage(pageNo,pageSize);
+                    mList = byteDanceVideoReportDailyMapper.videoInfoListGroupClip(startDate, endDate, companyId, userId, accountIdsList, signature, cost);
+                }
+            }else{
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupClip(startDate, endDate, companyId, userId, null, signature, cost);
+            }
+        }else if(roleCode.equals("designTeamLeader")){
+            if (projectIds != null && projectIds.length != 0){
+                List<Long> projectIdsList = Arrays.asList(projectIds);
+                List<Long> accountIdsList = byteDanceVideoReportDailyMapper.getAccountIdByprojectIds(projectIdsList);
+                if(accountIdsList.size()==0 || accountIdsList == null){
+                    accountIdsList.add(-1L);
+                }
+                if(accountIdsList.size() != 0){
+                    PageHelper.startPage(pageNo,pageSize);
+                    mList = byteDanceVideoReportDailyMapper.videoInfoListGroupdesignTeamLeader(startDate, endDate, companyId, accountIdsList, signature, cost);
+                }
+            }else{
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupdesignTeamLeader(startDate, endDate, companyId, null, signature, cost);
+            }
+        }
 
         //计算环比
         for(ByteDanceVideoReportDaily m:mList){
@@ -110,12 +326,131 @@ public class ByteDanceVideoReportDailyServiceImpl extends ServiceImpl<ByteDanceV
             m.setHuanbi(huanbi);
         }
 
-        return mList;
+        PageInfo<ByteDanceVideoReportDaily> pageInfo = new PageInfo<>(mList);
+        return pageInfo;
     }
 
 
     //视频总报表列表
-    public List<ByteDanceVideoReportDaily> videoInfoListTotal(String startDate, String endDate, String signature, BigDecimal cost){
+    public PageInfo<ByteDanceVideoReportDaily> videoInfoListTotal(String startDate, String endDate, String signature, BigDecimal cost , Integer pageNo, Integer pageSize, Long[] projectIds, Long[] accountIds){
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        String userId = sysUser.getId();
+        String roleCode = byteDanceVideoReportDailyMapper.getRoleCodeByUserId(userId);
+        String companyId = byteDanceVideoReportDailyMapper.getCompanyIdByUserId(userId);
+
+        List<ByteDanceVideoReportDaily> mList = new ArrayList<>();
+        //admin能看所有视频
+        if(roleCode.equals("admin")){
+            if (projectIds != null && projectIds.length != 0){
+                List<Long> projectIdsList = Arrays.asList(projectIds);
+                List<Long> accountIdsList = byteDanceVideoReportDailyMapper.getAccountIdByprojectIds(projectIdsList);
+                if(accountIdsList.size()==0 || accountIdsList == null){
+                    accountIdsList.add(-1L);
+                }
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupAdmin(startDate, endDate, accountIdsList, signature, cost);
+            }else{
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupAdmin(startDate, endDate, null, signature, cost);
+            }
+        }else if(roleCode.equals("touTiaoOperationManager") || roleCode.equals("operator") || roleCode.equals("operationAssistant")) {
+            if (projectIds != null && projectIds.length != 0){
+                List<Long> projectIdsList = Arrays.asList(projectIds);
+                List<Long> accountIdsList = byteDanceVideoReportDailyMapper.getAccountIdByprojectIds(projectIdsList);
+                if(accountIdsList.size()==0 || accountIdsList == null){
+                    accountIdsList.add(-1L);
+                }
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupOperator(startDate,endDate,accountIdsList,signature,cost);
+            }else{
+                List<Long> accoutnIds= byteDanceVideoReportDailyMapper.getAccountIdsByOperatorIdAndMediaId(1,userId);
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupOperator(startDate,endDate,accoutnIds,signature,cost);
+            }
+        }else if(roleCode.equals("shot")){
+            //设计师传入projectIds,根据projectIds解析出accountIdsList
+            if (projectIds != null && projectIds.length != 0){
+                List<Long> projectIdsList = Arrays.asList(projectIds);
+                List<Long> accountIdsList = byteDanceVideoReportDailyMapper.getAccountIdByprojectIds(projectIdsList);
+                if(accountIdsList.size() != 0){
+                    if(accountIdsList.size()==0 || accountIdsList == null){
+                        accountIdsList.add(-1L);
+                    }
+                    PageHelper.startPage(pageNo,pageSize);
+                    mList = byteDanceVideoReportDailyMapper.videoInfoListGroupShot(startDate, endDate, companyId, userId, accountIdsList, signature, cost);
+                }
+            }else{
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupShot(startDate, endDate, companyId, userId, null, signature, cost);
+            }
+        }else if(roleCode.equals("plan")){
+            if (projectIds != null && projectIds.length != 0){
+                List<Long> projectIdsList = Arrays.asList(projectIds);
+                List<Long> accountIdsList = byteDanceVideoReportDailyMapper.getAccountIdByprojectIds(projectIdsList);
+                if(accountIdsList.size()==0 || accountIdsList == null){
+                    accountIdsList.add(-1L);
+                }
+                if(accountIdsList.size() != 0){
+                    PageHelper.startPage(pageNo,pageSize);
+                    mList = byteDanceVideoReportDailyMapper.videoInfoListGroupPlan(startDate, endDate, companyId, userId, accountIdsList, signature, cost);
+                }
+            }else{
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupPlan(startDate, endDate, companyId, userId, null, signature, cost);
+            }
+        }else if(roleCode.equals("plane")){
+            if (projectIds != null && projectIds.length != 0){
+                List<Long> projectIdsList = Arrays.asList(projectIds);
+                List<Long> accountIdsList = byteDanceVideoReportDailyMapper.getAccountIdByprojectIds(projectIdsList);
+                if(accountIdsList.size()==0 || accountIdsList == null){
+                    accountIdsList.add(-1L);
+                }
+                if(accountIdsList.size() != 0){
+                    PageHelper.startPage(pageNo,pageSize);
+                    mList = byteDanceVideoReportDailyMapper.videoInfoListGroupPlaneAndPlaneLeader(startDate, endDate, companyId, userId, accountIdsList, signature, cost);
+                }
+            }else{
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupPlaneAndPlaneLeader(startDate, endDate, companyId, userId, null, signature, cost);
+            }
+        }else if(roleCode.equals("clip")){
+            if (projectIds != null && projectIds.length != 0){
+                List<Long> projectIdsList = Arrays.asList(projectIds);
+                List<Long> accountIdsList = byteDanceVideoReportDailyMapper.getAccountIdByprojectIds(projectIdsList);
+                if(accountIdsList.size()==0 || accountIdsList == null){
+                    accountIdsList.add(-1L);
+                }
+                if(accountIdsList.size() != 0){
+                    PageHelper.startPage(pageNo,pageSize);
+                    mList = byteDanceVideoReportDailyMapper.videoInfoListGroupClip(startDate, endDate, companyId, userId, accountIdsList, signature, cost);
+                }
+            }else{
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupClip(startDate, endDate, companyId, userId, null, signature, cost);
+            }
+        }else if(roleCode.equals("designTeamLeader")){
+            if (projectIds != null && projectIds.length != 0){
+                List<Long> projectIdsList = Arrays.asList(projectIds);
+                List<Long> accountIdsList = byteDanceVideoReportDailyMapper.getAccountIdByprojectIds(projectIdsList);
+                if(accountIdsList.size()==0 || accountIdsList == null){
+                    accountIdsList.add(-1L);
+                }
+                if(accountIdsList.size() != 0){
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupdesignTeamLeader(startDate, endDate, companyId, accountIdsList, signature, cost);
+                }
+            }else{
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupdesignTeamLeader(startDate, endDate, companyId, null, signature, cost);
+            }
+        }
+
+        PageInfo<ByteDanceVideoReportDaily> pageInfo = new PageInfo<>(mList);
+        return pageInfo;
+    }
+
+    //视频总报表列表导出excel
+    public List<ByteDanceVideoReportDaily> videoInfoListTotalExcel(String startDate, String endDate, String signature, BigDecimal cost){
         LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
         String userId = sysUser.getId();
         String roleCode = byteDanceVideoReportDailyMapper.getRoleCodeByUserId(userId);
@@ -126,18 +461,122 @@ public class ByteDanceVideoReportDailyServiceImpl extends ServiceImpl<ByteDanceV
         return mList;
     }
 
-    //视频报表列表
-    public List<ByteDanceVideoReportDaily> videoInfoListWeek(String startDate, String endDate, String signature, BigDecimal cost){
+    //视频报表列表
+    public PageInfo<ByteDanceVideoReportDaily> videoInfoListWeek(String startDate, String endDate, String signature, BigDecimal cost, Integer pageNo, Integer pageSize, Long[] projectIds, Long[] accountIds){
         LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
         String userId = sysUser.getId();
         String roleCode = byteDanceVideoReportDailyMapper.getRoleCodeByUserId(userId);
         String companyId = byteDanceVideoReportDailyMapper.getCompanyIdByUserId(userId);
 
-        //QueryWrapper<ByteDanceVideoReportDaily> wrapper = new QueryWrapper<>();
-        //wrapper.eq("stat_datetime",startDate);
-        //byteDanceVideoReportDailyMapper.delete(wrapper);
-
-        List<ByteDanceVideoReportDaily> mList = byteDanceVideoReportDailyMapper.videoInfoListWeek(startDate, endDate, roleCode, userId, signature, companyId, cost);
+        List<ByteDanceVideoReportDaily> mList = new ArrayList<>();
+        //PageHelper.startPage(pageNo,pageSize);
+        //mList = byteDanceVideoReportDailyMapper.videoInfoListWeek(startDate, endDate, roleCode, userId, signature, companyId, cost);
+
+        //admin能看所有视频
+        if(roleCode.equals("admin")){
+            if (projectIds != null && projectIds.length != 0){
+                List<Long> projectIdsList = Arrays.asList(projectIds);
+                List<Long> accountIdsList = byteDanceVideoReportDailyMapper.getAccountIdByprojectIds(projectIdsList);
+                if(accountIdsList.size()==0 || accountIdsList == null){
+                    accountIdsList.add(-1L);
+                }
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupAdmin(startDate, endDate, accountIdsList, signature, cost);
+            }else{
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupAdmin(startDate, endDate, null, signature, cost);
+            }
+        }else if(roleCode.equals("touTiaoOperationManager") || roleCode.equals("operator") || roleCode.equals("operationAssistant")) {
+            if (projectIds != null && projectIds.length != 0){
+                List<Long> projectIdsList = Arrays.asList(projectIds);
+                List<Long> accountIdsList = byteDanceVideoReportDailyMapper.getAccountIdByprojectIds(projectIdsList);
+                if(accountIdsList.size()==0 || accountIdsList == null){
+                    accountIdsList.add(-1L);
+                }
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupOperator(startDate,endDate,accountIdsList,signature,cost);
+            }else{
+                List<Long> accoutnIds= byteDanceVideoReportDailyMapper.getAccountIdsByOperatorIdAndMediaId(1,userId);
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupOperator(startDate,endDate,accoutnIds,signature,cost);
+            }
+        }else if(roleCode.equals("shot")){
+            //设计师传入projectIds,根据projectIds解析出accountIdsList
+            if (projectIds != null && projectIds.length != 0){
+                List<Long> projectIdsList = Arrays.asList(projectIds);
+                List<Long> accountIdsList = byteDanceVideoReportDailyMapper.getAccountIdByprojectIds(projectIdsList);
+                if(accountIdsList.size() != 0){
+                    if(accountIdsList.size()==0 || accountIdsList == null){
+                        accountIdsList.add(-1L);
+                    }
+                    PageHelper.startPage(pageNo,pageSize);
+                    mList = byteDanceVideoReportDailyMapper.videoInfoListGroupShot(startDate, endDate, companyId, userId, accountIdsList, signature, cost);
+                }
+            }else{
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupShot(startDate, endDate, companyId, userId, null, signature, cost);
+            }
+        }else if(roleCode.equals("plan")){
+            if (projectIds != null && projectIds.length != 0){
+                List<Long> projectIdsList = Arrays.asList(projectIds);
+                List<Long> accountIdsList = byteDanceVideoReportDailyMapper.getAccountIdByprojectIds(projectIdsList);
+                if(accountIdsList.size()==0 || accountIdsList == null){
+                    accountIdsList.add(-1L);
+                }
+                if(accountIdsList.size() != 0){
+                    PageHelper.startPage(pageNo,pageSize);
+                    mList = byteDanceVideoReportDailyMapper.videoInfoListGroupPlan(startDate, endDate, companyId, userId, accountIdsList, signature, cost);
+                }
+            }else{
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupPlan(startDate, endDate, companyId, userId, null, signature, cost);
+            }
+        }else if(roleCode.equals("plane")){
+            if (projectIds != null && projectIds.length != 0){
+                List<Long> projectIdsList = Arrays.asList(projectIds);
+                List<Long> accountIdsList = byteDanceVideoReportDailyMapper.getAccountIdByprojectIds(projectIdsList);
+                if(accountIdsList.size()==0 || accountIdsList == null){
+                    accountIdsList.add(-1L);
+                }
+                if(accountIdsList.size() != 0){
+                    PageHelper.startPage(pageNo,pageSize);
+                    mList = byteDanceVideoReportDailyMapper.videoInfoListGroupPlaneAndPlaneLeader(startDate, endDate, companyId, userId, accountIdsList, signature, cost);
+                }
+            }else{
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupPlaneAndPlaneLeader(startDate, endDate, companyId, userId, null, signature, cost);
+            }
+        }else if(roleCode.equals("clip")){
+            if (projectIds != null && projectIds.length != 0){
+                List<Long> projectIdsList = Arrays.asList(projectIds);
+                List<Long> accountIdsList = byteDanceVideoReportDailyMapper.getAccountIdByprojectIds(projectIdsList);
+                if(accountIdsList.size()==0 || accountIdsList == null){
+                    accountIdsList.add(-1L);
+                }
+                if(accountIdsList.size() != 0){
+                    PageHelper.startPage(pageNo,pageSize);
+                    mList = byteDanceVideoReportDailyMapper.videoInfoListGroupClip(startDate, endDate, companyId, userId, accountIdsList, signature, cost);
+                }
+            }else{
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupClip(startDate, endDate, companyId, userId, null, signature, cost);
+            }
+        }else if(roleCode.equals("designTeamLeader")){
+            if (projectIds != null && projectIds.length != 0){
+                List<Long> projectIdsList = Arrays.asList(projectIds);
+                List<Long> accountIdsList = byteDanceVideoReportDailyMapper.getAccountIdByprojectIds(projectIdsList);
+                if(accountIdsList.size()==0 || accountIdsList == null){
+                    accountIdsList.add(-1L);
+                }
+                if(accountIdsList.size() != 0){
+                    PageHelper.startPage(pageNo,pageSize);
+                    mList = byteDanceVideoReportDailyMapper.videoInfoListGroupdesignTeamLeader(startDate, endDate, companyId, accountIdsList, signature, cost);
+                }
+            }else{
+                PageHelper.startPage(pageNo,pageSize);
+                mList = byteDanceVideoReportDailyMapper.videoInfoListGroupdesignTeamLeader(startDate, endDate, companyId, null, signature, cost);
+            }
+        }
 
         //计算环比
         for(ByteDanceVideoReportDaily m:mList){
@@ -153,7 +592,9 @@ public class ByteDanceVideoReportDailyServiceImpl extends ServiceImpl<ByteDanceV
             m.setHuanbi(huanbi);
         }
 
-        return mList;
+        PageInfo<ByteDanceVideoReportDaily> pageInfo = new PageInfo<>(mList);
+
+        return pageInfo;
     }
 
     public List<ByteDanceVideoReportDaily> videoInfoListDetail(String startDate, String endDate, String signature){
@@ -195,5 +636,9 @@ public class ByteDanceVideoReportDailyServiceImpl extends ServiceImpl<ByteDanceV
         }
     }
 
+    public void accountVideoMap(){
+        List<AccountVideoDTO> accountVideoDTOList = byteDanceVideoReportDailyMapper.accountVideoMap();
+        byteDanceVideoReportDailyMapper.replaceIntoAccountVideoMapBatch(accountVideoDTOList);
+    }
 
 }