hcst_sunzhen 4 роки тому
батько
коміт
56189eb49c

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

@@ -0,0 +1,20 @@
+package cn.com.ctop.kuaishou.modules.report.entity;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+
+@Data
+public class KuaishouInfoDTO implements Serializable {
+    private String startDate;
+    private String endDate;
+    private Long unitId;
+    private List<Long> projectList;
+    private Long accountId;  //广告主名称
+    private Long campaignId;
+    private Long projectId;
+
+}

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

@@ -0,0 +1,53 @@
+package cn.com.ctop.kuaishou.modules.report.entity;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+public class KuaishouReportDailyAccountDTO implements Serializable {
+    private String statDate;
+    private String accountId;
+    private String authName;
+    private Long projectId;
+    private String projectName;
+    private Long campaignId;
+    private String campaignName;
+    private Long creativeId;
+    private String creativeName;
+    private Long unitId;
+    private String unitName;
+    private BigDecimal charge;
+    private Long photoShow;
+    private Long photoClick;
+    private Long aclick;
+    private Long bclick;
+    private Long activation;
+    private Long submit;
+    private Long eventRegister;
+    private Long eventNextDayStay;
+    private BigDecimal activationCost;
+    private String photoClickRatio;
+    private String actionRate;
+    //@JsonSerialize(using = ToStringSerializer.class)
+    private BigDecimal impression1kCost;
+    private BigDecimal photoClickCost;
+    private BigDecimal actionCost;
+    private Long photoShare;
+    private Long photoComment;
+    private Long photoLike;
+    private Long follow;
+    private Long report;
+    private Long cancelFollow;
+    private Long block;
+    private Long nagative;
+    private Long downloadStarted;
+    private Long downloadCompleted;
+    private BigDecimal eventNextDayStayCost;
+    private Long photoId;
+    private String url;
+    private String coverUrl;
+}

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

@@ -0,0 +1,14 @@
+package cn.com.ctop.kuaishou.modules.report.entity;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+
+@Data
+public class KuaishouVideoInfoDTO implements Serializable {
+    private String url;
+    private String coverUrl;
+
+}

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

@@ -0,0 +1,43 @@
+package cn.com.ctop.kuaishou.modules.report.entity;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+
+@Data
+public class ProjectAccountDTO implements Serializable {
+    private String statDate;
+    private Long projectId;
+    private String projectName;
+    private String responsibleName;
+    private String advertiserName;  //广告主名称
+    private String designResponsibleName;
+    private BigDecimal charge;
+    private Long photoShow;
+    private Long photoClick;
+    private Long aclick;
+    private Long bclick;
+    private Long activation;
+    private Long submit;
+    private Long eventRegister;
+    private Long eventNextDayStay;
+    private BigDecimal activationCost;
+    private String photoClickRate;
+    private String bclickRate;
+    private BigDecimal impression1kCost;
+    private BigDecimal photoClickCost;
+    private BigDecimal actionCost;
+    private Long photoShare;
+    private Long photoComment;
+    private Long photoLike;
+    private Long follow;
+    private Long report;
+    private Long cancelFollow;
+    private Long block;
+    private Long nagative;
+    private Long downloadStarted;
+    private Long downloadCompleted;
+    private BigDecimal eventNextDayStayCost;
+}

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

@@ -0,0 +1,100 @@
+package cn.com.ctop.kuaishou.modules.report.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 项目成员
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-11-19
+ */
+@Data
+@TableName("ctop_project_member")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_project_member对象", description = "项目成员")
+public class ProjectMember implements  Serializable{
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "id")
+    private Long id;
+    /**
+     * 项目id
+     */
+    @Excel(name = "项目id", width = 15)
+    @ApiModelProperty(value = "项目id")
+    private Long projectId;
+
+
+    @Excel(name = "项目名称", width = 15)
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+    /**
+     * 成员id
+     */
+    @Excel(name = "成员id", width = 15)
+    @ApiModelProperty(value = "成员id")
+    private String userId;
+
+    @Excel(name = "成员名称", width = 15)
+    @ApiModelProperty(value = "成员名称")
+    private String userName;
+
+    private String roleCode;
+
+    @TableField(exist = false)
+    private Long maxBid;
+
+
+    @TableField(exist = false)
+    private String responsibleName;
+
+
+    @TableField(exist = false)
+    private String designResponsibleName;
+
+    @TableField(exist = false)
+    private String advertiserName;
+    @TableField(exist = false)
+    private String advertiserId;
+
+
+    @TableField(exist = false)
+    private String mediaId;
+
+
+    /**
+     * 创建时间
+     */
+    @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+    /**
+     * 修改时间
+     */
+    @Excel(name = "修改时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "修改时间")
+    private Date updateTime;
+}

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

@@ -1,6 +1,9 @@
 package cn.com.ctop.kuaishou.modules.report.mapper;
 
 import cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportDailyAccount;
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportDailyAccountDTO;
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouVideoInfoDTO;
+import cn.com.ctop.kuaishou.modules.report.entity.ProjectAccountDTO;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
@@ -15,4 +18,17 @@ public interface KuaishouReportDailyAccountMapper extends BaseMapper<KuaishouRep
 
     List<JSONObject> selectCost(@Param("accountId") Long accountId, @Param("startDate") String startDate, @Param("endDate") String endDate);
 
+    ProjectAccountDTO getKuaishouProjectInfo(@Param("startDate")String startDate, @Param("endDate")String endDate, @Param("projectId")Long projectId);
+
+    List<KuaishouReportDailyAccountDTO> getKuaishouAccountInfoByProjectId(@Param("startDate")String startDate, @Param("endDate")String endDate, @Param("projectId")Long projectId);
+
+    List<KuaishouReportDailyAccountDTO> getKuaishouCampaignInfoByAccountId(@Param("startDate")String startDate, @Param("endDate")String endDate, @Param("accountId")Long accountId);
+
+    List<KuaishouReportDailyAccountDTO> getKuaishouUnitInfoByCampaignId(@Param("startDate")String startDate, @Param("endDate")String endDate, @Param("campaignId")Long campaignId);
+
+    List<Long> queryProjectMemberByUserId(@Param("userId")String userId, @Param("mediaIds")List<Long> mediaIds);
+
+    List<KuaishouReportDailyAccountDTO> getKuaishouCreativeInfoByUnitId(@Param("startDate")String startDate, @Param("endDate")String endDate, @Param("unitId")Long unitId);
+
+    KuaishouVideoInfoDTO getVideoUrl(@Param("photoId")Long photoId);
 }

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

@@ -529,4 +529,388 @@
         group by stat_date
     </select>
 
-</mapper>
+    <select id="getKuaishouAccountInfoByProjectId" resultType="cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportDailyAccountDTO">
+        select
+        concat(#{startDate}, '~' ,#{endDate}) as 'statDate',
+        a.account_id as 'accountId',
+        b.auth_name as 'authName',
+        b.project_id as 'projectId',
+        b.project_name as 'projectName',
+        round(sum(a.charge),2) as 'charge',
+        sum(a.photo_show) as 'photoShow',  -- 封面曝光数
+        sum(a.photo_click) as 'photoClick', -- 封面点击数
+        sum(a.aclick) as 'aclick',  -- 素材曝光数
+        sum(a.bclick) as 'bclick',  -- 行为数
+        sum(a.activation) as 'activation',  -- 激活数
+        sum(a.submit) as 'submit',   -- 提交按钮点击数
+        sum(a.event_register) as 'eventRegister',   -- 注册数
+        sum(a.event_next_day_stay) as 'eventNextDayStay',  -- 次日留存数
+        ROUND(IFNULL(sum(a.charge)/sum(a.activation),0),2) as 'activationCost',   -- 激活成本
+        case when photo_show!=0 then concat(round(sum(a.photo_click)/sum(a.photo_show) * 100 ,2),'%') else 0 end as 'photoClickRatio',   -- 封面点击率
+        case when aclick!=0 then concat(round(sum(a.bclick)/sum(a.aclick) * 100 ,2),'%') else 0 end as 'actionRate',  -- 行为率
+        (case
+        when sum(a.photo_show) != 0
+        then round((sum(a.charge) / sum(a.photo_show)) * 1000,2)
+        else 0
+        end
+        ) as 'impression1kCost', -- 均千次封面曝光花费
+        (case
+        when sum(a.photo_click) != 0
+        then round(sum(a.charge) / sum(a.photo_click),2)
+        else 0
+        end
+        ) as 'photoClickCost', -- 平均封面点击单价
+        (CASE
+        WHEN sum(a.photo_click) != 0
+        THEN round(sum(a.charge) / sum(a.photo_click),2)
+        ELSE 0
+        end
+        ) as 'actionCost', -- 平均行为单价
+        sum(a.photo_share) as 'photoShare',  -- 分享数
+        sum(a.photo_comment) as 'photoComment', -- 评论数
+        sum(a.photo_like) as 'photoLike', -- 点赞数
+        sum(a.follow) as 'follow', -- 新增关注数
+        sum(a.report) as 'report', -- 举报数
+        sum(a.cancel_follow) as 'cancelFollow', -- 取消关注数
+        sum(a.block) as 'block', -- 拉黑数
+        sum(a.negative) as 'nagative', -- 减少此类作品数
+        sum(a.download_started) as 'downloadStarted',  -- 应用下载数据-安卓下载开始数
+        sum(a.download_completed) as 'downloadCompleted',  -- 应用下载数据-安卓下载完成数
+        (CASE
+        WHEN sum(a.event_next_day_stay) != 0
+        THEN round(sum(a.charge) / sum(a.event_next_day_stay),2)
+        ELSE 0
+        end
+        ) as 'eventNextDayStayCost'  -- 次日留存成本
+        from
+        ctop_kuaishou_report_daily_account a
+        left join (select * from ctop_user_allocation group by account_id) b on a.account_id = b.account_id
+        where
+        a.stat_date &gt;= #{startDate}
+        and
+        a.stat_date &lt;= #{endDate}
+        and
+        b.project_id = #{projectId}
+        group by a.account_id
+        order by sum(a.charge) desc
+    </select>
+
+    <select id="getKuaishouProjectInfo" resultType="cn.com.ctop.kuaishou.modules.report.entity.ProjectAccountDTO">
+        select
+        concat(#{startDate}, '~' , #{endDate}) as 'statDate',
+        (select project_id from ctop_user_allocation where account_id = a.account_id limit 1) as 'projectId',
+        (select project_name from ctop_user_allocation where account_id = a.account_id limit 1) as 'projectName',
+        (select advertiser_name from ctop_project where id = (select project_id from ctop_user_allocation where
+         					account_id = a.account_id limit 1
+					)) as 'advertiserName',
+        (select responsible_name from ctop_project where id = (select project_id from ctop_user_allocation where
+        					account_id = a.account_id limit 1
+					)) as 'responsibleName',
+        (select design_responsible_name from ctop_project where id = (select project_id from ctop_user_allocation where 					account_id = a.account_id limit 1
+					)) as 'designResponsibleName',
+        ifnull(round(sum(a.charge),2),0) as 'charge',
+        ifnull(sum(a.photo_show),0) as 'photoShow',  -- 封面曝光数
+        ifnull(sum(a.photo_click),0) as 'photoClick', -- 封面点击数
+        ifnull(sum(a.aclick),0) as 'aclick',  -- 素材曝光数
+        ifnull(sum(a.bclick),0) as 'bclick',  -- 行为数
+        ifnull(sum(a.activation),0) as 'activation',  -- 激活数
+        ifnull(sum(a.submit),0) as 'submit',   -- 提交按钮点击数
+        ifnull(sum(a.event_register),0) as 'eventRegister',   -- 注册数
+        ifnull(sum(event_next_day_stay),0) as 'eventNextDayStay',  -- 次日留存数
+        ROUND(IFNULL(sum(a.charge)/sum(a.activation),0),2) as 'activationCost',   -- 激活成本
+        case when (sum(a.photo_show) is not null and sum(a.photo_show)!=0) then concat(round(ifnull(sum(a.photo_click),0)/sum(a.photo_show) * 100 ,2),'%') else 0 end as 'photoClickRate',   -- 封面点击率
+        case when (sum(a.aclick) is not null and sum(a.aclick)!=0) then concat(round(ifnull(sum(a.bclick),0)/sum(a.aclick) * 100 ,2),'%') else 0 end as 'bclickRate',  -- 行为率
+        (case
+        when (sum(a.photo_show) is not null and sum(a.photo_show) != 0)
+        then round((ifnull(sum(a.charge),0) / sum(a.photo_show)) * 1000,2)
+        else 0
+        end
+        ) as 'impression1kCost', -- 均千次封面曝光花费
+        (case
+        when (sum(a.photo_click) is not null and sum(a.photo_click) != 0)
+        then round( ifnull(sum(a.charge),0) / sum(a.photo_click),2)
+        else 0
+        end
+        ) as 'photoClickCost', -- 平均封面点击单价
+        (CASE
+        WHEN ( sum(a.photo_click) is not null and sum(a.photo_click) != 0)
+        THEN round(sum(a.charge) / sum(a.photo_click),2)
+        ELSE 0
+        end
+        ) as 'actionCost', -- 平均行为单价
+        ifnull(sum(a.photo_share),0) as 'photoShare',  -- 分享数
+        ifnull(sum(a.photo_comment),0) as 'photoComment', -- 评论数
+        ifnull(sum(a.photo_like),0) as 'photoLike', -- 点赞数
+        ifnull(sum(a.follow),0) as 'follow', -- 新增关注数
+        ifnull(sum(a.report),0) as 'report', -- 举报数
+        ifnull(sum(a.cancel_follow),0) as 'cancelFollow', -- 取消关注数
+        ifnull(sum(a.block),0) as 'block', -- 拉黑数
+        ifnull(sum(a.negative),0) as 'nagative', -- 减少此类作品数
+        ifnull(sum(a.download_started),0) as 'downloadStarted',  -- 应用下载数据-安卓下载开始数
+        ifnull(sum(a.download_completed),0) as 'downloadCompleted',  -- 应用下载数据-安卓下载完成数
+        (CASE
+        WHEN ( sum(a.event_next_day_stay) is not null and sum(a.event_next_day_stay) != 0)
+        THEN round(  ifnull(sum(a.charge),0) / sum(a.event_next_day_stay)  ,2)
+        ELSE 0
+        end
+        ) as 'eventNextDayStayCost'  -- 次日留存成本
+        from
+        ctop_kuaishou_report_daily_account a
+        left join (select * from ctop_user_allocation group by account_id) b on a.account_id = b.account_id
+        left join ctop_project c on b.project_id = c.id
+        where
+        a.stat_date &gt;= #{startDate}
+        and
+        a.stat_date &lt;= #{endDate}
+        and
+        b.project_id = #{projectId}
+    </select>
+
+    <!-- 计划汇总 -->
+    <select id="getKuaishouCampaignInfoByAccountId" resultType="cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportDailyAccountDTO">
+        select
+        concat(#{startDate}, '~' ,#{endDate}) as 'statDate',
+        b.project_id as 'projectId',
+        b.project_name as 'projectName',
+        b.auth_name as 'authName',
+        a.account_id as 'accountId',
+        a.campaign_id as 'campaignId',  -- 计划id
+        a.campaign_name as 'campaignName',   -- 计划名称
+        round(sum(a.charge),2) as 'charge',
+        sum(a.photo_show) as 'photoShow',  -- 封面曝光数
+        sum(a.photo_click) as 'photoClick', -- 封面点击数
+        sum(a.aclick) as 'aclick',  -- 素材曝光数
+        sum(a.bclick) as 'bclick',  -- 行为数
+        sum(a.activation) as 'activation',  -- 激活数
+        sum(a.submit) as 'submit',   -- 提交按钮点击数
+        sum(a.event_register) as 'eventRegister',   -- 注册数
+        sum(event_next_day_stay) as 'eventNextDayStay',  -- 次日留存数
+        ROUND(IFNULL(sum(a.charge)/sum(a.activation),0),2) as 'activationCost',   -- 激活成本
+        case when photo_show!=0 then concat(round(sum(a.photo_click)/sum(a.photo_show) * 100 ,2),'%') else 0 end as 'photoClickRatio',   -- 封面点击率
+        case when aclick!=0 then concat(round(sum(a.bclick)/sum(a.aclick) * 100 ,2),'%') else 0 end as 'actionRate',  -- 行为率
+        (case
+        when sum(a.photo_show) != 0
+        then round((sum(a.charge) / sum(a.photo_show)) * 1000,2)
+        else 0
+        end
+        ) as 'impression1kCost', -- 均千次封面曝光花费
+        (case
+        when sum(a.photo_click) != 0
+        then round(sum(a.charge) / sum(a.photo_click),2)
+        else 0
+        end
+        ) as 'photoClickCost', -- 平均封面点击单价
+        (CASE
+        WHEN sum(a.photo_click) != 0
+        THEN round(sum(a.charge) / sum(a.photo_click),2)
+        ELSE 0
+        end
+        ) as 'actionCost', -- 平均行为单价
+        sum(a.photo_share) as 'photoShare',  -- 分享数
+        sum(a.photo_comment) as 'photoComment', -- 评论数
+        sum(a.photo_like) as 'photoLike', -- 点赞数
+        sum(a.follow) as 'follow', -- 新增关注数
+        sum(a.report) as 'report', -- 举报数
+        sum(a.cancel_follow) as 'cancelFollow', -- 取消关注数
+        sum(a.block) as 'block', -- 拉黑数
+        sum(a.negative) as 'nagative', -- 减少此类作品数
+        sum(a.download_started) as 'downloadStarted',  -- 应用下载数据-安卓下载开始数
+        sum(a.download_completed) as 'downloadCompleted',  -- 应用下载数据-安卓下载完成数
+        (CASE
+        WHEN sum(a.event_next_day_stay) != 0
+        THEN round(sum(a.charge) / sum(a.event_next_day_stay),2)
+        ELSE 0
+        end
+        ) as 'eventNextDayStayCost'  -- 次日留存成本
+        from
+        ctop_kuaishou_report_daily_campaign a
+        left join (select * from ctop_user_allocation group by account_id) b on a.account_id = b.account_id
+        where
+        a.stat_date &gt;= #{startDate}
+        and
+        a.stat_date &lt;= #{endDate}
+        and
+        a.account_id = #{accountId}
+        group by a.campaign_id
+    </select>
+
+    <!-- 根据计划id获取组信息 -->
+    <select id="getKuaishouUnitInfoByCampaignId" resultType="cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportDailyAccountDTO">
+        select
+        concat(#{startDate}, '~' ,#{endDate}) as 'statDate',
+        b.project_id as 'projectId',
+        b.project_name as 'projectName',
+        a.account_id as 'accountId',
+        b.auth_name as 'authName',
+        a.campaign_id as 'campaignId',  -- 计划id
+        a.campaign_name as 'campaignName',  -- 计划名称
+        a.unit_id as 'unitId',  -- 组id,
+        a.unit_name as 'unitName',  -- 组名称
+        round(sum(a.charge),2) as 'charge',
+        sum(a.photo_show) as 'photoShow',  -- 封面曝光数
+        sum(a.photo_click) as 'photoClick', -- 封面点击数
+        sum(a.aclick) as 'aclick',  -- 素材曝光数
+        sum(a.bclick) as 'bclick',  -- 行为数
+        sum(a.activation) as 'activation',  -- 激活数
+        sum(a.submit) as 'submit',   -- 提交按钮点击数
+        sum(a.event_register) as 'eventRegister',   -- 注册数
+        sum(event_next_day_stay) as 'eventNextDayStay',  -- 次日留存数
+        ROUND(IFNULL(sum(a.charge)/sum(a.activation),0),2) as 'activationCost',   -- 激活成本
+        case when photo_show!=0 then concat(round(sum(a.photo_click)/sum(a.photo_show) * 100 ,2),'%') else 0 end as 'photoClickRatio',   -- 封面点击率
+        case when aclick!=0 then concat(round(sum(a.bclick)/sum(a.aclick) * 100 ,2),'%') else 0 end as 'actionRate',  -- 行为率
+        (case
+        when sum(a.photo_show) != 0
+        then round((sum(a.charge) / sum(a.photo_show)) * 1000,2)
+        else 0
+        end
+        ) as 'impression1kCost', -- 均千次封面曝光花费
+        (case
+        when sum(a.photo_click) != 0
+        then round(sum(a.charge) / sum(a.photo_click),2)
+        else 0
+        end
+        ) as 'photoClickCost', -- 平均封面点击单价
+        (CASE
+        WHEN sum(a.photo_click) != 0
+        THEN round(sum(a.charge) / sum(a.photo_click),2)
+        ELSE 0
+        end
+        ) as 'actionCost', -- 平均行为单价
+        sum(a.photo_share) as 'photoShare',  -- 分享数
+        sum(a.photo_comment) as 'photoComment', -- 评论数
+        sum(a.photo_like) as 'photoLike', -- 点赞数
+        sum(a.follow) as 'follow', -- 新增关注数
+        sum(a.report) as 'report', -- 举报数
+        sum(a.cancel_follow) as 'cancelFollow', -- 取消关注数
+        sum(a.block) as 'block', -- 拉黑数
+        sum(a.negative) as 'nagative', -- 减少此类作品数
+        sum(a.download_started) as 'downloadStarted',  -- 应用下载数据-安卓下载开始数
+        sum(a.download_completed) as 'downloadCompleted',  -- 应用下载数据-安卓下载完成数
+        (CASE
+        WHEN sum(a.event_next_day_stay) != 0
+        THEN round(sum(a.charge) / sum(a.event_next_day_stay),2)
+        ELSE 0
+        end
+        ) as 'eventNextDayStayCost'  -- 次日留存成本
+        from
+        ctop_kuaishou_report_daily_group a
+        left join (select * from ctop_user_allocation group by account_id) b on a.account_id = b.account_id
+--         left join ctop_kuaishou_campaign c on a.campaign_id = c.campaign_id
+        where
+        a.stat_date &gt;= #{startDate}
+        and
+        a.stat_date &lt;= #{endDate}
+        and
+        a.campaign_id = #{campaignId}
+        group by unit_id
+    </select>
+
+    <select id="queryProjectMemberByUserId" resultType="long">
+        select
+        distinct b.project_id as projectId
+--         b.project_name as projectName,
+--         a.advertiser_id as advertiserId,
+--         a.advertiser_name as advertiserName,
+--         (SELECT media_id from ctop_project c where c.id=a.project_id limit 1) as mediaId,
+--         c.responsible_name as responsibleName,
+--         c.design_responsible_name as designResponsibleName
+        from
+        ctop_user_allocation a
+        left join ctop_project_member b on a.project_id = b.project_id
+        where b.user_id = #{userId}
+        and a.media_id in
+        <foreach collection="mediaIds" item="item" separator=","
+                 open="(" close=")">
+            #{item}
+        </foreach>
+    </select>
+
+    <select id="getKuaishouCreativeInfoByUnitId" resultType="cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportDailyAccountDTO">
+        select
+        a.*,
+        b.photo_id as 'photoId'
+        from
+        (
+            select
+            concat(#{startDate}, '~' ,#{endDate}) as 'statDate',
+            b.project_id as 'projectId',
+            b.project_name as 'projectName',
+            a.account_id as 'accountId',
+            b.auth_name as 'authName',
+            a.creative_id as 'creativeId',
+            a.creative_name as 'creativeName',
+            a.campaign_id as 'campaignId',  -- 计划id
+            a.campaign_name as 'campaignName',  -- 计划名称
+            a.unit_id as 'unitId',  -- 组id,
+            a.unit_name as 'unitName',  -- 组名称
+            round(sum(a.charge),2) as 'charge',
+            sum(a.photo_show) as 'photoShow',  -- 封面曝光数
+            sum(a.photo_click) as 'photoClick', -- 封面点击数
+            sum(a.aclick) as 'aclick',  -- 素材曝光数
+            sum(a.bclick) as 'bclick',  -- 行为数
+            sum(a.activation) as 'activation',  -- 激活数
+            sum(a.submit) as 'submit',   -- 提交按钮点击数
+            sum(a.event_register) as 'eventRegister',   -- 注册数
+            sum(event_next_day_stay) as 'eventNextDayStay',  -- 次日留存数
+            ROUND(IFNULL(sum(a.charge)/sum(a.activation),0),2) as 'activationCost',   -- 激活成本
+            case when photo_show!=0 then concat(round(sum(a.photo_click)/sum(a.photo_show) * 100 ,2),'%') else 0 end as 'photoClickRatio',   -- 封面点击率
+            case when aclick!=0 then concat(round(sum(a.bclick)/sum(a.aclick) * 100 ,2),'%') else 0 end as 'actionRate',  -- 行为率
+            (case
+            when sum(a.photo_show) != 0 and sum(a.photo_show) is not null
+            then round((sum(a.charge) / sum(a.photo_show)) * 1000,2)
+            else 0
+            end
+            ) as 'impression1kCost', -- 均千次封面曝光花费
+            (case
+            when sum(a.photo_click) != 0
+            then round(sum(a.charge) / sum(a.photo_click),2)
+            else 0
+            end
+            ) as 'photoClickCost', -- 平均封面点击单价
+            (CASE
+            WHEN sum(a.photo_click) != 0
+            THEN round(sum(a.charge) / sum(a.photo_click),2)
+            ELSE 0
+            end
+            ) as 'actionCost', -- 平均行为单价
+            sum(a.photo_share) as 'photoShare',  -- 分享数
+            sum(a.photo_comment) as 'photoComment', -- 评论数
+            sum(a.photo_like) as 'photoLike', -- 点赞数
+            sum(a.follow) as 'follow', -- 新增关注数
+            sum(a.report) as 'report', -- 举报数
+            sum(a.cancel_follow) as 'cancelFollow', -- 取消关注数
+            sum(a.block) as 'block', -- 拉黑数
+            sum(a.negative) as 'nagative', -- 减少此类作品数
+            sum(a.download_started) as 'downloadStarted',  -- 应用下载数据-安卓下载开始数
+            sum(a.download_completed) as 'downloadCompleted',  -- 应用下载数据-安卓下载完成数
+            (CASE
+            WHEN sum(a.event_next_day_stay) != 0
+            THEN round(sum(a.charge) / sum(a.event_next_day_stay),2)
+            ELSE 0
+            end
+            ) as 'eventNextDayStayCost'  -- 次日留存成本
+            from
+            ctop_kuaishou_report_daily_creative a
+            left join (select * from ctop_user_allocation group by account_id) b on a.account_id = b.account_id
+            where
+            a.stat_date &gt;= #{startDate}
+            and
+            a.stat_date &lt;= #{endDate}
+            and
+            a.unit_id = #{unitId}
+            group by creative_id
+        ) a
+        left join  ctop_kuaishou_creative b on a.creativeId = b.creative_id
+    </select>
+
+    <select id="getVideoUrl" resultType="cn.com.ctop.kuaishou.modules.report.entity.KuaishouVideoInfoDTO">
+        select
+        url as url,
+        cover_url as coverUrl
+        from
+        ctop_kuaishou_video_get
+        where photo_id = #{photoId}
+        limit 1
+    </select>
+
+</mapper>

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

@@ -1,13 +1,28 @@
 package cn.com.ctop.kuaishou.modules.report.service;
 
 import cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportDailyAccount;
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportDailyAccountDTO;
+import cn.com.ctop.kuaishou.modules.report.entity.ProjectAccountDTO;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.system.vo.LoginUser;
 
+import java.util.ArrayList;
 import java.util.List;
 
 public interface IKuaishouReportDailyAccountService extends IService<KuaishouReportDailyAccount> {
 
     List<JSONObject> selectCost(Long accountId, String startDate, String endDate);
 
+    List<ProjectAccountDTO> getKuaishouProjectInfo(String startDate, String endDate, List<Long> projectList);
+
+    List<KuaishouReportDailyAccountDTO> getKuaishouAccountInfoByProjectId(Long projectId, String startDate, String endDate);
+
+    List<KuaishouReportDailyAccountDTO> getKuaishouCampaignInfoByAccountId(Long accountId, String startDate, String endDate);
+
+    List<KuaishouReportDailyAccountDTO> getKuaishouUnitInfoByCampaignId(Long campaignId, String startDate, String endDate);
+
+    List<KuaishouReportDailyAccountDTO> getKuaishouCreativeInfoByUnitId(Long unitId, String startDate, String endDate);
+
 }

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

@@ -1,13 +1,20 @@
 package cn.com.ctop.kuaishou.modules.report.service.impl;
 
 import cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportDailyAccount;
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportDailyAccountDTO;
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouVideoInfoDTO;
+import cn.com.ctop.kuaishou.modules.report.entity.ProjectAccountDTO;
 import cn.com.ctop.kuaishou.modules.report.mapper.KuaishouReportDailyAccountMapper;
 import cn.com.ctop.kuaishou.modules.report.service.IKuaishouReportDailyAccountService;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.mgt.SecurityManager;
+import org.jeecg.common.system.vo.LoginUser;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.List;
 
 @Service
@@ -20,4 +27,52 @@ public class KuaishouReportDailyAccountServiceImpl extends ServiceImpl<KuaishouR
     public List<JSONObject> selectCost(Long accountId, String startDate, String endDate) {
         return dailyAccountMapper.selectCost(accountId, startDate, endDate);
     }
+
+    @Override
+    public List<ProjectAccountDTO> getKuaishouProjectInfo(String startDate, String endDate, List<Long> projectList){
+        if(projectList==null || projectList.size()==0){
+            //LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+            String userId = "a6abfea0f27843bf8595a234410afb04";
+            List<Long> mediaIds = new ArrayList<>();
+            mediaIds.add(2L);
+            mediaIds.add(4L);
+            projectList = dailyAccountMapper.queryProjectMemberByUserId(userId,mediaIds);
+        }
+
+        List<ProjectAccountDTO> projectAccountDTOList = new ArrayList<>();
+
+        for(Long projectId:projectList){
+            ProjectAccountDTO kuaishouProjectInfo = dailyAccountMapper.getKuaishouProjectInfo(startDate, endDate, projectId);
+            projectAccountDTOList.add(kuaishouProjectInfo);
+        }
+
+        return projectAccountDTOList;
+    }
+
+    @Override
+    public List<KuaishouReportDailyAccountDTO> getKuaishouAccountInfoByProjectId(Long projectId, String startDate, String endDate){
+        return dailyAccountMapper.getKuaishouAccountInfoByProjectId(startDate, endDate, projectId);
+    }
+
+    @Override
+    public List<KuaishouReportDailyAccountDTO> getKuaishouCampaignInfoByAccountId(Long accountId, String startDate, String endDate){
+        return dailyAccountMapper.getKuaishouCampaignInfoByAccountId(startDate, endDate, accountId);
+    }
+
+    @Override
+    public List<KuaishouReportDailyAccountDTO> getKuaishouUnitInfoByCampaignId(Long campaignId, String startDate, String endDate){
+        return dailyAccountMapper.getKuaishouUnitInfoByCampaignId(startDate, endDate, campaignId);
+    }
+
+    @Override
+    public List<KuaishouReportDailyAccountDTO> getKuaishouCreativeInfoByUnitId(Long unitId, String startDate, String endDate){
+        List<KuaishouReportDailyAccountDTO> kuaishouCreativeInfoList = dailyAccountMapper.getKuaishouCreativeInfoByUnitId(startDate, endDate, unitId);
+        for(KuaishouReportDailyAccountDTO creativeInfo:kuaishouCreativeInfoList){
+            KuaishouVideoInfoDTO videoInfo = dailyAccountMapper.getVideoUrl(creativeInfo.getPhotoId());
+            creativeInfo.setUrl(videoInfo.getUrl());
+            creativeInfo.setCoverUrl(videoInfo.getCoverUrl());
+        }
+        return kuaishouCreativeInfoList;
+    }
+
 }