xw 1 gün önce
ebeveyn
işleme
a56595d4ca

+ 1 - 1
fs-company/src/main/java/com/fs/framework/config/DataSourceConfig.java

@@ -48,7 +48,7 @@ public class DataSourceConfig {
                                         @Qualifier("slaveDataSource") DataSource slaveDataSource) {
         Map<Object, Object> targetDataSources = new HashMap<>();
         targetDataSources.put(DataSourceType.MASTER.name(), masterDataSource);
-        targetDataSources.put(DataSourceType.SLAVE.name(), masterDataSource);
+        targetDataSources.put(DataSourceType.SLAVE.name(), slaveDataSource);
         targetDataSources.put(DataSourceType.SOP.name(), sopDataSource);
         return new DynamicDataSource(masterDataSource, targetDataSources);
     }

+ 4 - 0
fs-service/src/main/java/com/fs/course/mapper/FsCourseAnswerLogsMapper.java

@@ -1,5 +1,7 @@
 package com.fs.course.mapper;
 
+import com.fs.common.annotation.DataSource;
+import com.fs.common.enums.DataSourceType;
 import com.fs.course.domain.FsCourseAnswerLogs;
 import com.fs.course.param.FsCourseAnswerLogsParam;
 import com.fs.course.vo.FsCourseAnswerLogsListVO;
@@ -132,8 +134,10 @@ public interface FsCourseAnswerLogsMapper
 
     Long selectRedStatus(@Param("userId") Long userId, @Param("videoId") Long videoId, @Param("periodId") Long periodId);
     Integer selectRedStatus2(@Param("userId") Long userId, @Param("videoId") Long videoId, @Param("periodId") Long periodId);
+    @DataSource(DataSourceType.SLAVE)
     List<FsCourseAnswerLogsListVO> selectFsCourseAnswerLogsListVONew(FsCourseAnswerLogsParam param);
 
+    @DataSource(DataSourceType.SLAVE)
     Long selectFsCourseAnswerLogsListVONewCount(FsCourseAnswerLogsParam param);
 
     @Select("select * from fs_course_answer_logs where video_id = #{videoId} and user_id = #{userId} and is_right = 1 limit 1")

+ 16 - 2
fs-service/src/main/java/com/fs/course/mapper/FsCourseWatchLogMapper.java

@@ -1,6 +1,8 @@
 package com.fs.course.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.common.annotation.DataSource;
+import com.fs.common.enums.DataSourceType;
 import com.fs.course.domain.FsCourseWatchLog;
 import com.fs.course.dto.WatchLogDTO;
 import com.fs.course.param.*;
@@ -133,10 +135,22 @@ public interface FsCourseWatchLogMapper extends BaseMapper<FsCourseWatchLog> {
     @Select("select l.*,v.title,c.course_name from fs_course_watch_log l LEFT JOIN fs_user_course_video v ON v.video_id = l.video_id LEFT JOIN fs_user_course c ON c.course_id = l.course_id WHERE l.qw_external_contact_id =#{id} ORDER BY l.create_time  desc LIMIT 1  ")
     FsCourseWatchLogVO selectFsCourseWatchLogByExtId(Long id);
 
-    @Select("select l.qw_external_contact_id,l.company_id,l.company_user_id,l.log_type,ext.`level`,l.qw_user_id FROM fs_course_watch_log l LEFT JOIN qw_external_contact ext ON ext.id =l.qw_external_contact_id  where l.sop_id=#{SopId} and  date(l.create_time)= CURDATE() and l.log_type =3 and l.video_id not in (select video_id from fs_user_course_video WHERE is_first=1 ) ")
+    @DataSource(DataSourceType.SLAVE)
+    @Select("SELECT l.qw_external_contact_id,l.company_id,l.company_user_id,l.log_type,ext.`level`,l.qw_user_id "
+            + "FROM fs_course_watch_log l "
+            + "LEFT JOIN qw_external_contact ext ON ext.id = l.qw_external_contact_id "
+            + "WHERE l.sop_id = #{SopId} AND l.log_type = 3 "
+            + "AND l.create_time >= CURDATE() AND l.create_time < CURDATE() + INTERVAL 1 DAY "
+            + "AND NOT EXISTS (SELECT 1 FROM fs_user_course_video v WHERE v.video_id = l.video_id AND v.is_first = 1)")
     List<FsCourseWatchLogTaskVO> selectFsCourseWatchLogByDaySopId3(@Param("SopId")String SopId);
 
-    @Select("select l.qw_external_contact_id,l.company_id,l.company_user_id,l.log_type,ext.`level`,l.qw_user_id FROM fs_course_watch_log l LEFT JOIN qw_external_contact ext ON ext.id =l.qw_external_contact_id  where l.sop_id=#{SopId} and  date(l.create_time)= CURDATE() and l.log_type =4 and l.video_id not in (select video_id from fs_user_course_video WHERE is_first=1 ) ")
+    @DataSource(DataSourceType.SLAVE)
+    @Select("SELECT l.qw_external_contact_id,l.company_id,l.company_user_id,l.log_type,ext.`level`,l.qw_user_id "
+            + "FROM fs_course_watch_log l "
+            + "LEFT JOIN qw_external_contact ext ON ext.id = l.qw_external_contact_id "
+            + "WHERE l.sop_id = #{SopId} AND l.log_type = 4 "
+            + "AND l.create_time >= CURDATE() AND l.create_time < CURDATE() + INTERVAL 1 DAY "
+            + "AND NOT EXISTS (SELECT 1 FROM fs_user_course_video v WHERE v.video_id = l.video_id AND v.is_first = 1)")
     List<FsCourseWatchLogTaskVO> selectFsCourseWatchLogByDaySopId4(@Param("SopId")String SopId);
 
 //    @Select("   SELECT\n" +

+ 3 - 0
fs-service/src/main/java/com/fs/qw/mapper/QwContactWayMapper.java

@@ -1,6 +1,8 @@
 package com.fs.qw.mapper;
 
 import com.alibaba.fastjson.JSONObject;
+import com.fs.common.annotation.DataSource;
+import com.fs.common.enums.DataSourceType;
 import com.fs.qw.domain.QwContactWay;
 import com.fs.qw.param.QwStatisticsParam;
 import com.fs.qw.vo.QwWayStatisticsListVO;
@@ -36,6 +38,7 @@ public interface QwContactWayMapper
      * @param qwContactWay 企微活码
      * @return 企微活码集合
      */
+    @DataSource(DataSourceType.SLAVE)
     public List<QwContactWay> selectQwContactWayList(QwContactWay qwContactWay);
 
     /**

+ 1 - 0
fs-service/src/main/java/com/fs/qw/mapper/QwExternalContactMapper.java

@@ -313,6 +313,7 @@ public interface QwExternalContactMapper extends BaseMapper<QwExternalContact> {
             "        </where>"+
             "order by ec.create_time desc,ec.id desc"+
             "</script>"})
+    @DataSource(DataSourceType.SLAVE)
     List<QwExternalContactVO> selectQwExternalContactListVO(QwExternalContactParam qwExternalContact);
 
     @Select({"<script> " +

+ 3 - 0
fs-service/src/main/java/com/fs/qw/mapper/QwGroupChatUserMapper.java

@@ -1,5 +1,7 @@
 package com.fs.qw.mapper;
 
+import com.fs.common.annotation.DataSource;
+import com.fs.common.enums.DataSourceType;
 import com.fs.qw.domain.QwGroupChatUser;
 import com.fs.qw.param.QwGroupChatUserDataType;
 import com.fs.qw.vo.QwGroupChatUserVO;
@@ -152,5 +154,6 @@ public interface QwGroupChatUserMapper
 
     List<QwGroupChatUser> selectByChatId(SopUserLogsInfo sopUserLogsInfo);
 
+    @DataSource(DataSourceType.SLAVE)
     List<String> selectChatNameByUserId(@Param("userId")String userId);
 }

+ 3 - 0
fs-service/src/main/java/com/fs/qw/mapper/QwRestrictionPushRecordMapper.java

@@ -1,6 +1,8 @@
 package com.fs.qw.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.common.annotation.DataSource;
+import com.fs.common.enums.DataSourceType;
 import com.fs.fastGpt.domain.FastGptPushTokenTotal;
 import com.fs.fastGpt.param.FastGptPushTokenDeptTotalParam;
 import com.fs.fastGpt.vo.FastGptPushTokenDeptTotalVO;
@@ -49,6 +51,7 @@ public interface QwRestrictionPushRecordMapper extends BaseMapper<QwRestrictionP
             "</script>")
     public int deleteQwRestrictionPushRecordIds(@Param("ids") Long[] ids);
 
+    @DataSource(DataSourceType.SLAVE)
     List<FastGptPushTokenTotal> selectFastgptPushTokenTotal(String dateTime);
 
     FastGptPushTokenTotal selectFastGptPushTokenTotalByInfo(FastGptPushTokenTotal fastGptPushTotal);

+ 3 - 0
fs-service/src/main/java/com/fs/qw/mapper/QwTagMapper.java

@@ -1,5 +1,7 @@
 package com.fs.qw.mapper;
 
+import com.fs.common.annotation.DataSource;
+import com.fs.common.enums.DataSourceType;
 import com.fs.qw.domain.QwTag;
 import com.fs.qw.param.QwTagSearchParam;
 import com.fs.qw.param.newparam.ContactTagListParam;
@@ -96,6 +98,7 @@ public interface QwTagMapper
             "</script>")
     List<String> selectQwTagListNameByTagIds(@Param("date") QwTagSearchParam param);
 
+    @DataSource(DataSourceType.SLAVE)
     List<QwTag> selectQwTagListByTagIdsNew(@Param("tagIds") List<String> tagIds);
 
     List<QwTagVO> selectTagListByUserId(@Param("param") ContactTagListParam param,  @Param("keywords") String[] keywords);

+ 3 - 0
fs-service/src/main/java/com/fs/store/mapper/FsUserCourseCountMapper.java

@@ -1,5 +1,7 @@
 package com.fs.store.mapper;
 
+import com.fs.common.annotation.DataSource;
+import com.fs.common.enums.DataSourceType;
 import com.fs.store.domain.FsUserCourseCount;
 import com.fs.store.vo.FsUserLastCount;
 import org.apache.ibatis.annotations.Param;
@@ -78,6 +80,7 @@ public interface FsUserCourseCountMapper
      * @param pageSize 每页数量
      * @return
      */
+    @DataSource(DataSourceType.SLAVE)
     List<Long> getUsersByPage(@Param("offset") int offset, @Param("pageSize") int pageSize);
 
     /**

+ 46 - 60
fs-service/src/main/resources/mapper/statis/FsStatisSalerWatchMapper.xml

@@ -492,34 +492,35 @@
             interrupt_num,
             dept_id
         )
-        SELECT
-            temp.company_user_id,
-            temp.sop_id,
-            temp.period_id,
-            temp.this_date as data_date,
-            COALESCE(log_stats.send_count, 0) as send_num,
-            COALESCE(log_stats.period_count, 0) as train_camp_num,
-            COALESCE(log_stats.not_register_count, 0) as not_registered_num,
-            COALESCE(log_stats.completed_count, 0) as completed_num,
-            COALESCE(log_stats.interrupt_count, 0) as interrupt_num,
-            temp.dept_id
-        FROM fs_statis_temp_param temp
-                 LEFT JOIN (
-            -- 一次性统计所有指标,避免重复扫描
+        WITH log_stats AS (
             SELECT
                 company_user_id,
                 sop_id,
                 qw_user_id,
                 camp_period_time,
-                COUNT(DISTINCT log_id) as send_count,
-                COUNT(DISTINCT qw_external_contact_id) as period_count,
-                COUNT(DISTINCT CASE WHEN log_type = 3 THEN log_id END) as not_register_count,
-                COUNT(DISTINCT CASE WHEN log_type = 2 THEN log_id END) as completed_count,
-                COUNT(DISTINCT CASE WHEN (log_type = 4 or log_type = 1) THEN log_id END) as interrupt_count
+                COUNT(DISTINCT log_id) AS send_count,
+                COUNT(DISTINCT qw_external_contact_id) AS period_count,
+                COUNT(DISTINCT CASE WHEN log_type = 3 THEN log_id END) AS not_register_count,
+                COUNT(DISTINCT CASE WHEN log_type = 2 THEN log_id END) AS completed_count,
+                COUNT(DISTINCT CASE WHEN log_type IN (1, 4) THEN log_id END) AS interrupt_count
             FROM fs_course_watch_log
-            WHERE (DATE(create_time) = #{date})
+            WHERE create_time &gt;= STR_TO_DATE(#{date}, '%Y-%m-%d')
+              AND create_time &lt; DATE_ADD(STR_TO_DATE(#{date}, '%Y-%m-%d'), INTERVAL 1 DAY)
             GROUP BY company_user_id, sop_id, qw_user_id, camp_period_time
-        ) log_stats ON temp.company_user_id = log_stats.company_user_id
+        )
+        SELECT
+            temp.company_user_id,
+            temp.sop_id,
+            temp.period_id,
+            temp.this_date AS data_date,
+            COALESCE(log_stats.send_count, 0) AS send_num,
+            COALESCE(log_stats.period_count, 0) AS train_camp_num,
+            COALESCE(log_stats.not_register_count, 0) AS not_registered_num,
+            COALESCE(log_stats.completed_count, 0) AS completed_num,
+            COALESCE(log_stats.interrupt_count, 0) AS interrupt_num,
+            temp.dept_id
+        FROM fs_statis_temp_param temp
+        LEFT JOIN log_stats ON temp.company_user_id = log_stats.company_user_id
             AND temp.sop_id = log_stats.sop_id
             AND temp.start_time = log_stats.camp_period_time
             AND temp.qw_user_id = log_stats.qw_user_id
@@ -527,54 +528,39 @@
 
         UNION ALL
 
--- 孤立数据处理部分保持不变,但也进行了优化
         SELECT
             orphan_summary.company_user_id,
             orphan_summary.sop_id,
-            '-1' as period_id,
-            #{date} as data_date,
+            '-1' AS period_id,
+            #{date} AS data_date,
             orphan_summary.send_num,
             orphan_summary.train_camp_num,
             orphan_summary.not_registered_num,
             orphan_summary.completed_num,
             orphan_summary.interrupt_num,
-            cu.dept_id as dept_id
+            cu.dept_id AS dept_id
         FROM (
-                 SELECT
-                     orphan_data.company_user_id,
-                     orphan_data.sop_id,
-                     SUM(orphan_data.send_count) as send_num,
-                     SUM(orphan_data.period_count) as train_camp_num,
-                     SUM(orphan_data.not_registered_num) as not_registered_num,
-                     SUM(orphan_data.completed_count) as completed_num,
-                     SUM(orphan_data.interrupt_num) as interrupt_num
-                 FROM (
-                          SELECT
-                              log_data.company_user_id,
-                              log_data.sop_id,
-                              log_data.qw_user_id,
-                              log_data.camp_period_time,
-                              COUNT(DISTINCT log_data.log_id) as send_count,
-                              COUNT(DISTINCT log_data.qw_external_contact_id) as period_count,
-                              COUNT(DISTINCT CASE WHEN log_data.log_type = 3 THEN log_data.log_id END) as not_registered_num,
-                              COUNT(DISTINCT CASE WHEN log_data.log_type = 2 THEN log_data.log_id END) as completed_count,
-                              COUNT(DISTINCT CASE WHEN (log_data.log_type = 4 or log_type = 1) THEN log_data.log_id END) as interrupt_num
-                          FROM fs_course_watch_log log_data
-                          WHERE (DATE(log_data.create_time) = #{date})
-                          GROUP BY log_data.company_user_id, log_data.sop_id, log_data.qw_user_id, log_data.camp_period_time
-                      ) orphan_data
-                 WHERE NOT EXISTS (
-                     SELECT 1
-                     FROM fs_statis_temp_param temp
-                     WHERE temp.company_user_id = orphan_data.company_user_id
-                       AND ((temp.sop_id = orphan_data.sop_id) OR (temp.sop_id IS NULL AND orphan_data.sop_id IS NULL))
-                       AND temp.qw_user_id = orphan_data.qw_user_id
-                       AND ((temp.start_time = orphan_data.camp_period_time) OR (temp.start_time IS NULL AND orphan_data.camp_period_time IS NULL))
-                 )
-                 GROUP BY orphan_data.company_user_id, orphan_data.sop_id
-             ) orphan_summary
-         LEFT JOIN company_user cu ON cu.user_id = orphan_summary.company_user_id
-        WHERE cu.dept_id IS NOT NULL AND cu.dept_id != 0  -- 过滤掉dept_id为NULL或0的记录
+            SELECT
+                orphan_data.company_user_id,
+                orphan_data.sop_id,
+                SUM(orphan_data.send_count) AS send_num,
+                SUM(orphan_data.period_count) AS train_camp_num,
+                SUM(orphan_data.not_register_count) AS not_registered_num,
+                SUM(orphan_data.completed_count) AS completed_num,
+                SUM(orphan_data.interrupt_count) AS interrupt_num
+            FROM log_stats orphan_data
+            WHERE NOT EXISTS (
+                SELECT 1
+                FROM fs_statis_temp_param temp
+                WHERE temp.company_user_id = orphan_data.company_user_id
+                  AND ((temp.sop_id = orphan_data.sop_id) OR (temp.sop_id IS NULL AND orphan_data.sop_id IS NULL))
+                  AND temp.qw_user_id = orphan_data.qw_user_id
+                  AND ((temp.start_time = orphan_data.camp_period_time) OR (temp.start_time IS NULL AND orphan_data.camp_period_time IS NULL))
+            )
+            GROUP BY orphan_data.company_user_id, orphan_data.sop_id
+        ) orphan_summary
+        LEFT JOIN company_user cu ON cu.user_id = orphan_summary.company_user_id
+        WHERE cu.dept_id IS NOT NULL AND cu.dept_id != 0
     </insert>
 
 </mapper>