yangzian 3 роки тому
батько
коміт
3284977b9a

+ 1 - 1
jeecg-boot-material-view/src/main/java/org/jeecg/ctop/material/controller/KuaiShouMaterialStareController.java

@@ -509,7 +509,7 @@ public class KuaiShouMaterialStareController {
      * @return
      */
     @GetMapping("/getOperationGroupData")
-    public Result<PageInfo<JSONObject>> getOperationGroupData(@RequestParam(name="startTime") String startTime,
+    public Result<JSONObject> getOperationGroupData(@RequestParam(name="startTime") String startTime,
                                                               @RequestParam(name="endTime") String endTime,
                                                               @RequestParam(name="pageNum",defaultValue = "1") Integer pageNum,
                                                               @RequestParam(name="pageSize",defaultValue = "5") Integer pageSize) {

+ 6 - 3
jeecg-boot-material-view/src/main/java/org/jeecg/ctop/material/entity/vo/KuaiShouOperateProjectVo.java

@@ -1,9 +1,12 @@
 package org.jeecg.ctop.material.entity.vo;
 
 import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.alibaba.fastjson.JSONObject;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.List;
+
 /**
  * 盯盘-运营数据 项目维度
  * zian Y
@@ -112,11 +115,11 @@ public class KuaiShouOperateProjectVo {
     private Integer newUnitNum;
 
     @ApiModelProperty(value = "上传助手素材数")
-    private String adspNum;
+    private long adspNum;
     @ApiModelProperty(value = "上传媒体素材数")
-    private String mediaNum;
+    private long mediaNum;
     @ApiModelProperty(value = "版位数据")
-    private String adSceneNum;
+    private List<JSONObject> adSceneDate;
 
 
 

+ 4 - 1
jeecg-boot-material-view/src/main/java/org/jeecg/ctop/material/mapper/MaterialStareMapper.java

@@ -41,6 +41,7 @@ public interface MaterialStareMapper {
 
     //快手-查询账户数据信息
     List<KuaiShouOperateVo> getKuaiShouOperateInfo(@Param("startDate")Long startDate, @Param("endDate")Long endDate, @Param("list")Set<String> operatorUserIds);
+    List<KuaiShouOperateVo> getKuaiShouOperateInfoHourly(@Param("startDate")Long startDate, @Param("endDate")Long endDate, @Param("list")Set<String> operatorUserIds);
 
     //查看 快手 有效 计划 组
     JSONObject getKuaiShouAccountBaseByUserId(@Param("list")Set<String> operatorUserIds,@Param("projectId")String projectId,@Param("accountId")String accountId,@Param("startDate")Long startDate, @Param("endDate")Long endDate);
@@ -48,6 +49,8 @@ public interface MaterialStareMapper {
     JSONObject getKuaiShouAccountNowBaseByUserId(@Param("list")Set<String> operatorUserIds,@Param("projectId")String projectId,@Param("accountId")String accountId,@Param("startDate")Long startDate, @Param("endDate")Long endDate);
     //查看 上传到助手、媒体的素材数量 分版位花费
     List<JSONObject> getKuaiShouMaterailUploadType(@Param("projectId")String projectId,@Param("startDate")Long startDate, @Param("endDate")Long endDate);
+    //查看 快手 分版位花费
+    List<JSONObject> getKuaiShouAdSceneData(@Param("projectId")String projectId,@Param("startDate")Long startDate, @Param("endDate")Long endDate);
 
     //快手 -查询 项目 数据信息
     List<KuaiShouOperateProjectVo> getKuaiShouOperateProjectInfo(@Param("startDate")Long startDate, @Param("endDate")Long endDate, @Param("projectId")String projectId,@Param("list")Set<String> operatorUserIds);
@@ -110,7 +113,7 @@ public interface MaterialStareMapper {
      * 查询运营经理角色的人
      * @return
      */
-    List<JSONObject> getOperationManagerUser();
+    List<KuaiShouOperateGroupVo> getOperationManagerUser();
 
 
 }

+ 44 - 5
jeecg-boot-material-view/src/main/java/org/jeecg/ctop/material/mapper/xml/MaterialStareMapper.xml

@@ -212,7 +212,7 @@
 
     </select>
 
- <!-- 查看 上传到助手、媒体的素材数量 分版位花费-->
+ <!-- 查看 上传到助手、媒体的素材数量 -->
     <select id="getKuaiShouMaterailUploadType" resultType="com.alibaba.fastjson.JSONObject">
         SELECT
         IFNULL( SUM( material_num ), 0 ) 'num',
@@ -247,9 +247,15 @@
         <if test="endDate != null and endDate != '' ">
             and stat_date &lt;= #{endDate}
         </if>
-        UNION
+
+    </select>
+
+
+ <!-- 查看 快手 分版位数据 -->
+    <select id="getKuaiShouAdSceneData" resultType="com.alibaba.fastjson.JSONObject">
         SELECT
-        IFNULL(SUM(charge),0) 'num','adsceneNum'
+        IFNULL(SUM(charge),0) 'adSceneCost',
+        ad_scene as adSceneName
         FROM
         application.app_kuaishou_account_ad_scene_report_d
         <where>
@@ -263,6 +269,8 @@
                 and stat_date &lt;= #{endDate}
             </if>
         </where>
+        GROUP BY ad_scene
+
 
     </select>
 
@@ -299,6 +307,37 @@
         ORDER BY SUM( d.charge ) DESC
     </select>
 
+    <!-- 快手 快手-查询账户数据信息 -->
+    <select id="getKuaiShouOperateInfoHourly" resultType="org.jeecg.ctop.material.entity.vo.KuaiShouOperateVo">
+        SELECT
+        SUM( d.charge ) totalCost,
+        COUNT(DISTINCT d.account_id) accountNum,
+        COUNT(DISTINCT d.project_id) projectNum,
+        d.user_id as userId,
+        (SELECT u.realname from `jeecg-boot`.sys_user u where u.id = d.user_id) as userName
+        FROM
+        application.kuaishou_account_report_hourly_dw d
+        LEFT JOIN `jeecg-boot`.ctop_user_allocation u on d.account_id = u.account_id
+        WHERE
+        d.charge > 0
+        and u.account_status = 0
+        <if test="startDate != null and startDate != '' ">
+            and d.stat_date &gt;= #{startDate}
+        </if>
+        <if test="endDate != null and endDate != '' ">
+            and d.stat_date &lt;= #{endDate}
+        </if>
+        <if test='list!=null'>
+            AND d.user_id IN
+            <foreach collection="list" item="item" separator=","
+                     open="(" close=")">
+                #{item}
+            </foreach>
+        </if>
+        GROUP BY d.user_id
+        ORDER BY SUM( d.charge ) DESC
+    </select>
+
     <!-- 快手 -查询项目数据信息 master-->
     <select id="getKuaiShouOperateProjectInfo" resultType="org.jeecg.ctop.material.entity.vo.KuaiShouOperateProjectVo">
         SELECT
@@ -1285,12 +1324,12 @@
 
 
     <!-- 查询运营经理角色的人员 -->
-    <select id="getOperationManagerUser" resultType="com.alibaba.fastjson.JSONObject">
+    <select id="getOperationManagerUser" resultType="org.jeecg.ctop.material.entity.vo.KuaiShouOperateGroupVo">
 
         SELECT
             u.id as userId,
             u.username,
-            u.realname,
+            u.realname as realname,
             r.role_name as roleName
         FROM
             `jeecg-boot`.sys_user u,

+ 80 - 43
jeecg-boot-material-view/src/main/java/org/jeecg/ctop/material/service/impl/MaterialStareServiceImpl.java

@@ -381,18 +381,19 @@ public class MaterialStareServiceImpl implements MaterialStareService {
             }};
 
             //当天
-            if (startDate == entDate && entDate == now){
+            int newUnitNumNow = 0;
+            if (startDate == now || entDate == now){
                 //查询 当天有效 上新计划 上新组
-                JSONObject newEffect = materialStareMapper.getKuaiShouAccountNowBaseByUserId(ids,null,null,startDate,entDate);
-                operate.setNewUnitNum(Check.isNull(newEffect) ? 0 : newEffect.getInteger("newUnitNum"));//组
-            }else {
-                //查询 有效 上新计划 上新组
-                JSONObject newEffect = materialStareMapper.getKuaiShouAccountBaseByUserId(ids,null,null,startDate,entDate);
-                //operate.setNewEffectNum(Check.isNull(newEffect) ? 0 : newEffect.getInteger("newEffectNum"));//有效
-                operate.setNewCampaignNum(Check.isNull(newEffect) ? 0 : newEffect.getInteger("newCampaignNum"));//计划
-                operate.setNewUnitNum(Check.isNull(newEffect) ? 0 : newEffect.getInteger("newUnitNum"));//组
+                JSONObject newEffect = materialStareMapper.getKuaiShouAccountNowBaseByUserId(operatorUserIds,null,null,now,now);
+                newUnitNumNow = Check.isNull(newEffect) ? 0 : newEffect.getInteger("newUnitNum");//组
             }
 
+            //查询 有效 上新计划 上新组
+            JSONObject newEffect = materialStareMapper.getKuaiShouAccountBaseByUserId(ids,null,null,startDate,entDate);
+            //operate.setNewEffectNum(Check.isNull(newEffect) ? 0 : newEffect.getInteger("newEffectNum"));//有效
+            operate.setNewCampaignNum(Check.isNull(newEffect) ? 0 : newEffect.getInteger("newCampaignNum"));//计划
+            operate.setNewUnitNum(Check.isNull(newEffect) ? 0 : newEffect.getInteger("newUnitNum")+newUnitNumNow);//组
+
             Set<String> userSet = new HashSet<String>(){{
                 add(operate.getUserId());
             }};
@@ -530,9 +531,13 @@ public class MaterialStareServiceImpl implements MaterialStareService {
                 //查看 上传到助手、媒体的素材数量 分版位花费
                 List<JSONObject> materailUpload = materialStareMapper.getKuaiShouMaterailUploadType(projectInfo.getProjectId(),startDate,entDate);
 
-                projectInfo.setAdspNum(Check.isNull(materailUpload) ? "0" : JSONObject.parseObject(materailUpload.get(0)+"").getString("num"));//上传到助手
-                projectInfo.setMediaNum(Check.isNull(materailUpload) ? "0" : JSONObject.parseObject(materailUpload.get(1)+"").getString("num"));//上传到媒体
-                projectInfo.setAdSceneNum(Check.isNull(materailUpload) ? "0" : JSONObject.parseObject(materailUpload.get(2)+"").getString("num"));//分版位
+                projectInfo.setAdspNum(Check.isNull(materailUpload) ? 0L : JSONObject.parseObject(materailUpload.get(0)+"").getLong("num"));//上传到助手
+                projectInfo.setMediaNum(Check.isNull(materailUpload) ? 0L : JSONObject.parseObject(materailUpload.get(1)+"").getLong("num"));//上传到媒体
+
+                //分版位
+                List<JSONObject> adSceneDate = materialStareMapper.getKuaiShouAdSceneData(projectInfo.getProjectId(),startDate,entDate);
+                projectInfo.setAdSceneDate(adSceneDate);
+
 
                 String projectId = projectInfo.getProjectId();
                 List<KuaiShouOperateProjectVo> projectYearOnYearInfo = materialStareMapper.getKuaiShouOperateProjectInfo(lastTimeStart,lastTimeEnd,projectId,operatorUserIds);
@@ -606,9 +611,12 @@ public class MaterialStareServiceImpl implements MaterialStareService {
                 //查看 上传到助手、媒体的素材数量 分版位花费
                 List<JSONObject> materailUpload = materialStareMapper.getKuaiShouMaterailUploadType(projectInfo.getProjectId(),startDate,entDate);
 
-                projectInfo.setAdspNum(Check.isNull(materailUpload) ? "0" : JSONObject.parseObject(materailUpload.get(0)+"").getString("num"));//上传到助手
-                projectInfo.setMediaNum(Check.isNull(materailUpload) ? "0" : JSONObject.parseObject(materailUpload.get(1)+"").getString("num"));//上传到媒体
-                projectInfo.setAdSceneNum(Check.isNull(materailUpload) ? "0" : JSONObject.parseObject(materailUpload.get(2)+"").getString("num"));//分版位
+                projectInfo.setAdspNum(Check.isNull(materailUpload) ? 0L : JSONObject.parseObject(materailUpload.get(0)+"").getLong("num"));//上传到助手
+                projectInfo.setMediaNum(Check.isNull(materailUpload) ? 0L : JSONObject.parseObject(materailUpload.get(1)+"").getLong("num"));//上传到媒体
+
+                //分版位
+                List<JSONObject> adSceneDate = materialStareMapper.getKuaiShouAdSceneData(projectInfo.getProjectId(),startDate,entDate);
+                projectInfo.setAdSceneDate(adSceneDate);
 
                 String projectId = projectInfo.getProjectId();
                 List<KuaiShouOperateProjectVo> projectYearOnYearInfo = materialStareMapper.getKuaiShouOperateProjectInfo(lastTimeStart,lastTimeEnd,projectId,operatorUserIds);
@@ -1055,9 +1063,10 @@ public class MaterialStareServiceImpl implements MaterialStareService {
      */
     @Override
     public Result getOperationGroupData(String startTime,String endTime,Integer pageNum,Integer pageSize) {
-        List<KuaiShouOperateGroupVo> resultList = new ArrayList<>();
         DecimalFormat decimalFormat = new DecimalFormat("0.00%");
         try {
+            long nowDate = Long.valueOf(DateUtils.getDateInteger(DateUtils.getDate("yyyy-MM-dd")));
+
             long startDate = Long.valueOf(DateUtils.getDateInteger(startTime));
             long entDate = Long.valueOf(DateUtils.getDateInteger(endTime));
             //计算环比 时间值 上阶段时间 以及 两个日期之间的 间隔天数
@@ -1067,17 +1076,24 @@ public class MaterialStareServiceImpl implements MaterialStareService {
             Integer daysBetween = Integer.valueOf(lastTime.get("daysBetween"))+1;
             PageHelper.startPage(pageNum,pageSize);
             //查询运营经理
-            List<JSONObject> operationManagerList = materialStareMapper.getOperationManagerUser();
-            for (JSONObject operationManagerUser : operationManagerList) {
-                KuaiShouOperateGroupVo groupVo = new KuaiShouOperateGroupVo();
-                groupVo.setRealname(operationManagerUser.getString("realname"));
+            List<KuaiShouOperateGroupVo> operationManagerList = materialStareMapper.getOperationManagerUser();
+            for (KuaiShouOperateGroupVo groupVo : operationManagerList) {
+
                 //下级员工
-                Set<String> operatorUserIds = getAffiliateId(operationManagerUser.getString("userId"));
+                Set<String> operatorUserIds = getAffiliateId(groupVo.getUserId());
                 //运营数量
                 int operationNum = Check.isNull(operatorUserIds) ? 0 : operatorUserIds.size();
                 groupVo.setOperationNum(operationNum);
+
                 //查询账户数据
-                List<KuaiShouOperateVo> listOperate = materialStareMapper.getKuaiShouOperateInfo(startDate,entDate,operatorUserIds);
+                List<KuaiShouOperateVo> listOperate= new ArrayList<>();
+                if (daysBetween < 0){
+                    //时报
+                    listOperate= materialStareMapper.getKuaiShouOperateInfoHourly(startDate,entDate,operatorUserIds);
+                }else {
+                    listOperate = materialStareMapper.getKuaiShouOperateInfo(startDate,entDate,operatorUserIds);
+                }
+
                 //总花费
                 Double totalCost = Check.isNull(listOperate) ? 0 : listOperate.stream().mapToDouble(KuaiShouOperateVo::getTotalCost).sum();
                 groupVo.setTotalCost(new BigDecimal(totalCost).setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue());
@@ -1086,8 +1102,8 @@ public class MaterialStareServiceImpl implements MaterialStareService {
                 Double aveDay = daysBetween == 0 ? 0 : totalCost/daysBetween;
                 groupVo.setAverageDayCost(new BigDecimal(aveDay).setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue());
                 //人均消耗
-                OptionalDouble avePeople = listOperate.stream().mapToDouble(KuaiShouOperateVo::getTotalCost).average();
-                groupVo.setAveragePeopleCost(Check.isNull(listOperate) ? 0 : new BigDecimal( avePeople.getAsDouble()).setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue());
+                Double avePeople = totalCost/operationNum;
+                groupVo.setAveragePeopleCost(avePeople);
 
                 //项目数量
                 Double projectNum = Check.isNull(listOperate) ? 0 : listOperate.stream().mapToDouble(KuaiShouOperateVo::getProjectNum).sum();
@@ -1108,14 +1124,23 @@ public class MaterialStareServiceImpl implements MaterialStareService {
                 }
                 //花费环比
                 groupVo.setYearOnYearCost(yearOnYear);
-                //查询 上新组
+
+
+                //当天
+                int newUnitNumNow = 0;
+                if (startDate == nowDate || entDate == nowDate){
+                    //查询 当天有效 上新计划 上新组
+                    JSONObject newEffect = materialStareMapper.getKuaiShouAccountNowBaseByUserId(operatorUserIds,null,null,nowDate,nowDate);
+                    newUnitNumNow = Check.isNull(newEffect) ? 0 : newEffect.getInteger("newUnitNum");//组
+                }
+
+                //查询 历史上新组
                 JSONObject newEffect = materialStareMapper.getKuaiShouAccountBaseByUserId(operatorUserIds,null,null,startDate,entDate);
                 //基建数量
-                groupVo.setUnitNum(Check.isNull(newEffect) ? 0 : newEffect.getInteger("newUnitNum"));//组
-                resultList.add(groupVo);
+                groupVo.setUnitNum(Check.isNull(newEffect) ? 0 : newEffect.getInteger("newUnitNum")+newUnitNumNow);//组
             }
 
-            PageInfo<KuaiShouOperateGroupVo> pageInfo = new PageInfo<>(resultList);
+            PageInfo<KuaiShouOperateGroupVo> pageInfo = new PageInfo<>(operationManagerList);
             return Result.successMsg("运营组列表数据查询成功。",pageInfo);
         }catch (Exception e){
             e.printStackTrace();
@@ -1125,9 +1150,10 @@ public class MaterialStareServiceImpl implements MaterialStareService {
 
 
     public Result exportOperationGroupData(String startTime,String endTime, HttpServletResponse response) {
-        List<KuaiShouOperateGroupVo> resultList = new ArrayList<>();
         DecimalFormat decimalFormat = new DecimalFormat("0.00%");
         try {
+            long nowDate = Long.valueOf(DateUtils.getDateInteger(DateUtils.getDate("yyyy-MM-dd")));
+
             long startDate = Long.valueOf(DateUtils.getDateInteger(startTime));
             long entDate = Long.valueOf(DateUtils.getDateInteger(endTime));
             //计算环比 时间值 上阶段时间 以及 两个日期之间的 间隔天数
@@ -1137,17 +1163,22 @@ public class MaterialStareServiceImpl implements MaterialStareService {
             Integer daysBetween = Integer.valueOf(lastTime.get("daysBetween"))+1;
 
             //查询运营经理
-            List<JSONObject> operationManagerList = materialStareMapper.getOperationManagerUser();
-            for (JSONObject operationManagerUser : operationManagerList) {
-                KuaiShouOperateGroupVo groupVo = new KuaiShouOperateGroupVo();
-                groupVo.setRealname(operationManagerUser.getString("realname"));
+            List<KuaiShouOperateGroupVo> operationManagerList = materialStareMapper.getOperationManagerUser();
+            for (KuaiShouOperateGroupVo groupVo : operationManagerList) {
+
                 //下级员工
-                Set<String> operatorUserIds = getAffiliateId(operationManagerUser.getString("userId"));
+                Set<String> operatorUserIds = getAffiliateId(groupVo.getUserId());
                 //运营数量
                 int operationNum = Check.isNull(operatorUserIds) ? 0 : operatorUserIds.size();
                 groupVo.setOperationNum(operationNum);
                 //查询账户数据
-                List<KuaiShouOperateVo> listOperate = materialStareMapper.getKuaiShouOperateInfo(startDate,entDate,operatorUserIds);
+                List<KuaiShouOperateVo> listOperate= new ArrayList<>();
+                if (daysBetween < 0){
+                    //时报
+                    listOperate= materialStareMapper.getKuaiShouOperateInfoHourly(startDate,entDate,operatorUserIds);
+                }else {
+                    listOperate = materialStareMapper.getKuaiShouOperateInfo(startDate,entDate,operatorUserIds);
+                }
                 //总花费
                 Double totalCost = Check.isNull(listOperate) ? 0 : listOperate.stream().mapToDouble(KuaiShouOperateVo::getTotalCost).sum();
                 groupVo.setTotalCost(new BigDecimal(totalCost).setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue());
@@ -1155,10 +1186,9 @@ public class MaterialStareServiceImpl implements MaterialStareService {
                 Double aveDay = daysBetween == 0 ? 0 : totalCost/daysBetween;
                 groupVo.setAverageDayCost(new BigDecimal(aveDay).setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue());
                 //人均消耗
-                OptionalDouble avePeople = listOperate.stream().mapToDouble(KuaiShouOperateVo::getTotalCost).average();
-
-                groupVo.setAveragePeopleCost(Check.isNull(listOperate) ? 0 : new BigDecimal(String.valueOf( avePeople.getAsDouble())).setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue());
-                //项目数量
+                Double avePeople = totalCost/operationNum;
+                groupVo.setAveragePeopleCost(avePeople);
+                  //项目数量
                 Double projectNum = Check.isNull(listOperate) ? 0 : listOperate.stream().mapToDouble(KuaiShouOperateVo::getProjectNum).sum();
                 groupVo.setProjectNum(projectNum.longValue());
                 //账户数量
@@ -1177,13 +1207,20 @@ public class MaterialStareServiceImpl implements MaterialStareService {
                 }
                 //花费环比
                 groupVo.setYearOnYearCost(yearOnYear);
-                //查询 上新组
+                //当天
+                int newUnitNumNow = 0;
+                if (startDate == nowDate || entDate == nowDate){
+                    //查询 当天有效 上新计划 上新组
+                    JSONObject newEffect = materialStareMapper.getKuaiShouAccountNowBaseByUserId(operatorUserIds,null,null,nowDate,nowDate);
+                    newUnitNumNow = Check.isNull(newEffect) ? 0 : newEffect.getInteger("newUnitNum");//组
+                }
+
+                //查询 历史上新组
                 JSONObject newEffect = materialStareMapper.getKuaiShouAccountBaseByUserId(operatorUserIds,null,null,startDate,entDate);
                 //基建数量
-                groupVo.setUnitNum(Check.isNull(newEffect) ? 0 : newEffect.getInteger("newUnitNum"));//组
-                resultList.add(groupVo);
+                groupVo.setUnitNum(Check.isNull(newEffect) ? 0 : newEffect.getInteger("newUnitNum")+newUnitNumNow);//组
             }
-            Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("运营组数据详情", "运营组数据"), KuaiShouOperateGroupVo.class, resultList);
+            Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("运营组数据详情", "运营组数据"), KuaiShouOperateGroupVo.class, operationManagerList);
             response.setCharacterEncoding("UTF-8");
             response.setHeader("content-Type", "application/vnd.ms-excel");
             response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("运营组数据详情.xlsx", "UTF-8"));