Explorar o código

完播、频道、每日统计

xdd hai 1 semana
pai
achega
25c08e66f6

+ 2 - 8
fs-admin/src/main/java/com/fs/stats/SalesWatchStatisController.java

@@ -30,12 +30,6 @@ public class SalesWatchStatisController {
     @Autowired
     private FsStatisSalerWatchService fsStatisSalerWatchService;
 
-    @Autowired
-    private FsStatisPeriodWatchService fsStatisPeriodWatchService;
-
-    @Autowired
-    private FsStatisEveryDayWatchService fsStatisEveryDayWatchService;
-
     @Autowired
     private IQwSopService qwSopService;
 
@@ -57,7 +51,7 @@ public class SalesWatchStatisController {
      */
     @PostMapping("/period/pageList")
     public R periodQueryList(@RequestBody StatsWatchLogPageListDTO param){
-        List<FsStatisPeriodWatch> list = fsStatisPeriodWatchService.queryList(param);
+        List<FsStatisSalerWatch> list = fsStatisSalerWatchService.queryPeriodList(param);
         return R.ok().put("data", list);
     }
 
@@ -68,7 +62,7 @@ public class SalesWatchStatisController {
      */
     @PostMapping("/everyDay/pageList")
     public R everyDayQueryList(@RequestBody StatsWatchLogPageListDTO param){
-        List<FsStatisSalerWatch> list = fsStatisEveryDayWatchService.queryList(param);
+        List<FsStatisSalerWatch> list = fsStatisSalerWatchService.queryTodayList(param);
         return R.ok().put("data", list);
     }
 

+ 3 - 0
fs-service-system/src/main/java/com/fs/company/mapper/CompanyUserMapper.java

@@ -276,4 +276,7 @@ public interface CompanyUserMapper
 
     Long queryCompanyUserWatchCountCompleted(@Param("companyUserId") Long companyUserId,
                                              @Param("previousDay") LocalDate previousDay);
+
+    Long queryCompanyUserInterruptCount(@Param("companyUserId") Long companyUserId,
+                                        @Param("previousDay") LocalDate previousDay);
 }

+ 2 - 0
fs-service-system/src/main/java/com/fs/sop/mapper/QwSopLogsMapper.java

@@ -294,4 +294,6 @@ public interface QwSopLogsMapper extends BaseMapper<QwSopLogs> {
                                         @Param("periodId") String periodId,
                                         @Param("previousDay") LocalDate previousDay);
 
+    @DataSource(DataSourceType.SOP)
+    String queryPeriodNameById(@Param("periodId") String periodId);
 }

+ 8 - 0
fs-service-system/src/main/java/com/fs/statis/domain/FsStatisSalerWatch.java

@@ -57,6 +57,10 @@ public class FsStatisSalerWatch {
      * 完课人数
      */
     private Long completedNum;
+    /**
+     * 看课中断数
+     */
+    private Long interruptNum;
 
     /**
      * 报名率
@@ -113,6 +117,10 @@ public class FsStatisSalerWatch {
      */
     private String periodId;
 
+    /**
+     * 营期名称
+     */
+    private String periodName;
     /**
      * 数据日期
      */

+ 4 - 0
fs-service-system/src/main/java/com/fs/statis/mapper/FsStatisSalerWatchMapper.java

@@ -83,4 +83,8 @@ public interface FsStatisSalerWatchMapper {
     List<FsStatisSalerWatch> queryList(StatsWatchLogPageListDTO param);
 
     void batchSave(@Param("list") List<FsStatisSalerWatch> writeData);
+
+    List<FsStatisSalerWatch> queryPeriodList(StatsWatchLogPageListDTO param);
+    List<FsStatisSalerWatch> queryTodayList(StatsWatchLogPageListDTO param);
+
 }

+ 2 - 0
fs-service-system/src/main/java/com/fs/statis/service/FsStatisSalerWatchService.java

@@ -50,6 +50,8 @@ public interface FsStatisSalerWatchService {
     boolean deleteById(Integer id);
 
     List<FsStatisSalerWatch> queryList(StatsWatchLogPageListDTO param);
+    List<FsStatisSalerWatch> queryPeriodList(StatsWatchLogPageListDTO param);
+    List<FsStatisSalerWatch> queryTodayList(StatsWatchLogPageListDTO param);
 
 
     /**

+ 69 - 1
fs-service-system/src/main/java/com/fs/statis/service/impl/FsStatisSalerWatchServiceImpl.java

@@ -25,6 +25,7 @@ import org.springframework.stereotype.Service;
 
 import java.time.LocalDate;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
@@ -142,6 +143,71 @@ public class FsStatisSalerWatchServiceImpl implements FsStatisSalerWatchService
                     item.setCompanyUserName(companyUserName);
                 }
             }
+
+            if(item.getPeriodId() != null) {
+                String periodName = qwSopLogsMapper.queryPeriodNameById(item.getPeriodId());
+                if(StringUtils.isNotEmpty(periodName)) {
+                    item.setPeriodName(periodName);
+                }
+            }
+
+
+        }
+        return fsStatisSalerWatches;
+    }
+
+    @Override
+    public List<FsStatisSalerWatch> queryPeriodList(StatsWatchLogPageListDTO param) {
+        List<FsStatisSalerWatch> fsStatisSalerWatches = fsStatisSalerWatchMapper.queryPeriodList(param);
+        for (FsStatisSalerWatch item : fsStatisSalerWatches) {
+            if(item.getDeptId() != null) {
+                CompanyDept companyDept = companyDeptMapper.selectCompanyDeptById(item.getDeptId());
+                if(ObjectUtils.isNotNull(companyDept)) {
+                    item.setDeptName(companyDept.getDeptName());
+                }
+            }
+            if(item.getCompanyUserId() != null) {
+                String companyUserName = companyUserCacheService.selectCompanyUserNameUserById(item.getCompanyUserId());
+                if(StringUtils.isNotEmpty(companyUserName)){
+                    item.setCompanyUserName(companyUserName);
+                }
+            }
+
+            if(item.getPeriodId() != null) {
+                String periodName = qwSopLogsMapper.queryPeriodNameById(item.getPeriodId());
+                if(StringUtils.isNotEmpty(periodName)) {
+                    item.setPeriodName(periodName);
+                }
+            }
+
+        }
+        return fsStatisSalerWatches;
+    }
+
+    @Override
+    public List<FsStatisSalerWatch> queryTodayList(StatsWatchLogPageListDTO param) {
+        List<FsStatisSalerWatch> fsStatisSalerWatches = fsStatisSalerWatchMapper.queryTodayList(param);
+        for (FsStatisSalerWatch item : fsStatisSalerWatches) {
+            if(item.getDeptId() != null) {
+                CompanyDept companyDept = companyDeptMapper.selectCompanyDeptById(item.getDeptId());
+                if(ObjectUtils.isNotNull(companyDept)) {
+                    item.setDeptName(companyDept.getDeptName());
+                }
+            }
+            if(item.getCompanyUserId() != null) {
+                String companyUserName = companyUserCacheService.selectCompanyUserNameUserById(item.getCompanyUserId());
+                if(StringUtils.isNotEmpty(companyUserName)){
+                    item.setCompanyUserName(companyUserName);
+                }
+            }
+
+            if(item.getPeriodId() != null) {
+                String periodName = qwSopLogsMapper.queryPeriodNameById(item.getPeriodId());
+                if(StringUtils.isNotEmpty(periodName)) {
+                    item.setPeriodName(periodName);
+                }
+            }
+
         }
         return fsStatisSalerWatches;
     }
@@ -182,7 +248,8 @@ public class FsStatisSalerWatchServiceImpl implements FsStatisSalerWatchService
                 // 再去course_watch_log找对应的销售观看记录作为已报名数
                 Long registerCount = companyUserMapper.queryCompanyUserWatchCount(companyUser.getUserId(),previousDay);
                 Long completedCount = companyUserMapper.queryCompanyUserWatchCountCompleted(companyUser.getUserId(),previousDay);
-
+                // 当前销售当天的看课中断数量
+                Long interruptCount = companyUserMapper.queryCompanyUserInterruptCount(companyUser.getUserId(),previousDay);
 
                 FsStatisSalerWatch fsStatisSalerWatch = new FsStatisSalerWatch();
                 fsStatisSalerWatch.setDeptId(companyUser.getDeptId());
@@ -191,6 +258,7 @@ public class FsStatisSalerWatchServiceImpl implements FsStatisSalerWatchService
                 fsStatisSalerWatch.setNotRegisteredNum(Math.max(0, periodCount - registerCount));
                 fsStatisSalerWatch.setRegisteredNum(registerCount);
                 fsStatisSalerWatch.setCompletedNum(completedCount);
+                fsStatisSalerWatch.setInterruptNum(interruptCount);
 
                 // 修复比率计算
                 float regRate = (periodCount > 0) ? (float) registerCount / periodCount : 0.0f;

+ 12 - 0
fs-service-system/src/main/resources/mapper/company/CompanyUserMapper.xml

@@ -525,6 +525,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             </if>
         </where>
     </select>
+    <select id="queryCompanyUserInterruptCount" resultType="java.lang.Long">
+        select count(1) from fs_course_watch_log
+        <where>
+            AND log_type = 4
+            <if test="companyUserId != null">
+                AND company_user_id = #{companyUserId}
+            </if>
+            <if test="previousDay != null">
+                and camp_period_time = ${previousDay}
+            </if>
+        </where>
+    </select>
 
     <update id="setIsRegisterMember" parameterType="Long">
         update company_user

+ 3 - 0
fs-service-system/src/main/resources/mapper/sop/QwSopLogsMapper.xml

@@ -569,6 +569,9 @@
         </where>
 
     </select>
+    <select id="queryPeriodNameById" resultType="java.lang.String">
+        select concat(qw_user_id,'-',start_time) from sop_user_logs where id=#{periodId}
+    </select>
 
 
     <!-- 批量更新 QwSopLogs -->

+ 118 - 20
fs-service-system/src/main/resources/mapper/statis/FsStatisSalerWatchMapper.xml

@@ -31,28 +31,36 @@
     </sql>
 
     <select id="queryList" resultType="com.fs.statis.domain.FsStatisSalerWatch">
-        select
-                company_user_id,
-                ANY_VALUE(dept_id) as dept_id,
-               sum(train_camp_num) as train_camp_num,
-               sum(not_registered_num) as not_registered_num,
-               sum(registered_num) as registered_num,
-               sum(reg_rate) as reg_rate,
-               sum(finished_rate) as finished_rate,
-               sum(offline_total) as offline_total,
-               sum(offline_not_part) as offline_not_part,
-               sum(offline_not_watched) as offline_not_watched,
-               sum(online_total) as online_total,
-               sum(online_online_rate) as online_online_rate,
-               sum(online_playback_comple_rate) as online_playback_comple_rate,
-               sum(online_incomplete_playback) as online_incomplete_playback,
-               sum(online_complete_playback) as online_complete_playback
-               from fs_statis_saler_watch
+        SELECT
+        company_user_id,
+        ANY_VALUE(dept_id) as dept_id,
+        SUM(train_camp_num) as train_camp_num,
+        SUM(not_registered_num) as not_registered_num,
+        SUM(registered_num) as registered_num,
+        SUM(offline_total) as offline_total,
+        SUM(offline_not_part) as offline_not_part,
+        SUM(offline_not_watched) as offline_not_watched,
+        SUM(online_total) as online_total,
+        SUM(online_incomplete_playback) as online_incomplete_playback,
+        SUM(online_complete_playback) as online_complete_playback,
+        CASE WHEN SUM(train_camp_num) > 0
+        THEN ROUND(SUM(registered_num) * 1.0 / SUM(train_camp_num), 4)
+        ELSE 0 END as reg_rate,
+        CASE WHEN SUM(registered_num) > 0
+        THEN ROUND((SUM(registered_num) - SUM(not_registered_num)) * 1.0 / SUM(registered_num), 4)
+        ELSE 0 END as finished_rate,
+        CASE WHEN SUM(online_total) > 0
+        THEN ROUND(SUM(online_complete_playback) * 1.0 / SUM(online_total), 4)
+        ELSE 0 END as online_online_rate,
+        CASE WHEN SUM(online_total) > 0
+        THEN ROUND(SUM(online_complete_playback) * 1.0 / SUM(online_total), 4)
+        ELSE 0 END as online_playback_comple_rate
+        FROM fs_statis_saler_watch
         <where>
             <if test="userIds != null and userIds.size() > 0">
                 AND company_user_id IN
-                 <foreach collection="userIds" open="(" close=")" separator="," item="item">
-                     ${item}
+                <foreach collection="userIds" open="(" close=")" separator="," item="item">
+                    ${item}
                 </foreach>
             </if>
             <if test="periodList != null and periodList.size() > 0">
@@ -65,7 +73,97 @@
                 AND data_date BETWEEN #{startDate} AND #{endDate}
             </if>
         </where>
-        group by company_user_id,data_date
+        GROUP BY company_user_id
+    </select>
+    <select id="queryPeriodList" resultType="com.fs.statis.domain.FsStatisSalerWatch">
+        SELECT
+        period_id,
+        ANY_VALUE(dept_id) as dept_id,
+        SUM(train_camp_num) as train_camp_num,
+        SUM(not_registered_num) as not_registered_num,
+        SUM(registered_num) as registered_num,
+        SUM(offline_total) as offline_total,
+        SUM(offline_not_part) as offline_not_part,
+        SUM(offline_not_watched) as offline_not_watched,
+        SUM(online_total) as online_total,
+        SUM(online_incomplete_playback) as online_incomplete_playback,
+        SUM(online_complete_playback) as online_complete_playback,
+        CASE WHEN SUM(train_camp_num) > 0
+        THEN ROUND(SUM(registered_num) * 1.0 / SUM(train_camp_num), 4)
+        ELSE 0 END as reg_rate,
+        CASE WHEN SUM(registered_num) > 0
+        THEN ROUND((SUM(registered_num) - SUM(not_registered_num)) * 1.0 / SUM(registered_num), 4)
+        ELSE 0 END as finished_rate,
+        CASE WHEN SUM(online_total) > 0
+        THEN ROUND(SUM(online_complete_playback) * 1.0 / SUM(online_total), 4)
+        ELSE 0 END as online_online_rate,
+        CASE WHEN SUM(online_total) > 0
+        THEN ROUND(SUM(online_complete_playback) * 1.0 / SUM(online_total), 4)
+        ELSE 0 END as online_playback_comple_rate
+        FROM fs_statis_saler_watch
+        <where>
+            <if test="userIds != null and userIds.size() > 0">
+                AND company_user_id IN
+                <foreach collection="userIds" open="(" close=")" separator="," item="item">
+                    ${item}
+                </foreach>
+            </if>
+            <if test="periodList != null and periodList.size() > 0">
+                AND period_id IN
+                <foreach collection="periodList" open="(" close=")" separator="," item="item">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="startDate != null and endDate != null">
+                AND data_date BETWEEN #{startDate} AND #{endDate}
+            </if>
+        </where>
+        GROUP BY period_id
+    </select>
+    <select id="queryTodayList" resultType="com.fs.statis.domain.FsStatisSalerWatch">
+        SELECT
+        data_date,
+        ANY_VALUE(dept_id) as dept_id,
+        SUM(train_camp_num) as train_camp_num,
+        SUM(not_registered_num) as not_registered_num,
+        SUM(registered_num) as registered_num,
+        SUM(offline_total) as offline_total,
+        SUM(offline_not_part) as offline_not_part,
+        SUM(offline_not_watched) as offline_not_watched,
+        SUM(online_total) as online_total,
+        SUM(online_incomplete_playback) as online_incomplete_playback,
+        SUM(online_complete_playback) as online_complete_playback,
+        CASE WHEN SUM(train_camp_num) > 0
+        THEN ROUND(SUM(registered_num) * 1.0 / SUM(train_camp_num), 4)
+        ELSE 0 END as reg_rate,
+        CASE WHEN SUM(registered_num) > 0
+        THEN ROUND((SUM(registered_num) - SUM(not_registered_num)) * 1.0 / SUM(registered_num), 4)
+        ELSE 0 END as finished_rate,
+        CASE WHEN SUM(online_total) > 0
+        THEN ROUND(SUM(online_complete_playback) * 1.0 / SUM(online_total), 4)
+        ELSE 0 END as online_online_rate,
+        CASE WHEN SUM(online_total) > 0
+        THEN ROUND(SUM(online_complete_playback) * 1.0 / SUM(online_total), 4)
+        ELSE 0 END as online_playback_comple_rate
+        FROM fs_statis_saler_watch
+        <where>
+            <if test="userIds != null and userIds.size() > 0">
+                AND company_user_id IN
+                <foreach collection="userIds" open="(" close=")" separator="," item="item">
+                    ${item}
+                </foreach>
+            </if>
+            <if test="periodList != null and periodList.size() > 0">
+                AND period_id IN
+                <foreach collection="periodList" open="(" close=")" separator="," item="item">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="startDate != null and endDate != null">
+                AND data_date BETWEEN #{startDate} AND #{endDate}
+            </if>
+        </where>
+        GROUP BY data_date
     </select>
 
     <insert id="batchSave">