ソースを参照

会员催课面板

xdd 1 ヶ月 前
コミット
888b96ec0d

+ 26 - 26
fs-admin/src/test/java/com/fs/task/StoreTaskTest.java

@@ -1,26 +1,26 @@
-//package com.fs.task;
-//
-//
-//import com.fs.FSAdminApplication;
-//import com.fs.course.service.IFsCourseWatchLogService;
-//import org.junit.Test;
-//import org.junit.runner.RunWith;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.boot.test.context.SpringBootTest;
-//
-//@RunWith(value = org.springframework.test.context.junit4.SpringRunner.class)
-//@SpringBootTest(classes = FSAdminApplication.class)
-//public class StoreTaskTest {
-//    @Autowired
-//    private IFsCourseWatchLogService fsCourseWatchLogService;
-//    @Autowired
-//    private FsCourseTask fsCourseTask;
-//    @Test
-//    public void addQwWatchLog() {
-//        fsCourseWatchLogService.addCourseWatchLogDayNew();
-//    }
-//    @Test
-//    public void test() throws Exception {
-//        fsCourseTask.qwWorkTask1();
-//    }
-//}
+package com.fs.task;
+
+
+import com.fs.FSAdminApplication;
+import com.fs.course.service.IFsCourseWatchLogService;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@RunWith(value = org.springframework.test.context.junit4.SpringRunner.class)
+@SpringBootTest(classes = FSAdminApplication.class)
+public class StoreTaskTest {
+    @Autowired
+    private IFsCourseWatchLogService fsCourseWatchLogService;
+    @Autowired
+    private FsCourseTask fsCourseTask;
+    @Test
+    public void addQwWatchLog() {
+        fsCourseWatchLogService.addCourseWatchLogDayNew();
+    }
+    @Test
+    public void test() throws Exception {
+        fsCourseTask.hyWorkTask();
+    }
+}

+ 5 - 0
fs-service-system/src/main/java/com/fs/qw/domain/HyWorkTask.java

@@ -53,4 +53,9 @@ public class HyWorkTask extends BaseEntity{
     private Long companyUserId;
 
     private String title;
+
+    /**
+     * 营期id
+     */
+    private String userLogsId;
 }

+ 47 - 7
fs-service-system/src/main/java/com/fs/qw/service/impl/HyWorkTaskServiceImpl.java

@@ -27,8 +27,10 @@ import com.fs.sop.domain.SopUserLogsInfo;
 import com.fs.sop.mapper.QwSopMapper;
 import com.fs.sop.mapper.SopUserLogsInfoMapper;
 import com.hc.openapi.tool.util.StringUtils;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
@@ -44,6 +46,7 @@ import java.util.stream.Collectors;
  * @date 2025-03-18
  */
 @Service
+@Slf4j
 public class HyWorkTaskServiceImpl extends ServiceImpl<HyWorkTaskMapper, HyWorkTask> implements IHyWorkTaskService {
     @Autowired
     private FsCourseWatchLogMapper fsCourseWatchLogMapper;
@@ -457,36 +460,73 @@ public class HyWorkTaskServiceImpl extends ServiceImpl<HyWorkTaskMapper, HyWorkT
         return hyWorkTaskMapper.selectHyWorkTaskListByMap(params);
     }
 
+    // 定义批处理大小常量
+    private static final int BATCH_SIZE = 1000;
+
     @Override
     public void hyWorkTask() {
+
         // 获取看课中断和待看的先导课
         List<FsCourseWatchLog> fsCourseWatchLogs = hyWorkTaskMapper.hyWorkTaskGetInterruptedAndFirst();
-        List<HyWorkTask> list = new ArrayList<>();
+        if(CollectionUtils.isEmpty(fsCourseWatchLogs)){
+            log.info("[获取看课中断和待看的先导课] 没有找到数据,已经跳过!");
+            return;
+        }
+        List<HyWorkTask> batchList = new ArrayList<>(BATCH_SIZE);
+        int totalProcessed = 0;
+        int batchCount = 0;
         for (FsCourseWatchLog fsCourseWatchLog : fsCourseWatchLogs) {
             HyWorkTask hyWorkTask = new HyWorkTask();
             hyWorkTask.setCreateTime(DateUtils.getNowDate());
             hyWorkTask.setExtId(fsCourseWatchLog.getQwExternalContactId());
             hyWorkTask.setCompanyId(fsCourseWatchLog.getCompanyId());
             hyWorkTask.setCompanyUserId(fsCourseWatchLog.getCompanyUserId());
+            hyWorkTask.setUserId(fsCourseWatchLog.getUserId());
+            if(fsCourseWatchLog.getPeriodId() != null) {
+                hyWorkTask.setUserLogsId(String.valueOf(fsCourseWatchLog.getPeriodId()));
+            }
+            hyWorkTask.setStatus(0);
+            hyWorkTask.setUserId(fsCourseWatchLog.getUserId());
 
             // 看课中断
             if(fsCourseWatchLog.getLogType()==4){
-                hyWorkTask.setUserId(fsCourseWatchLog.getUserId());
-                hyWorkTask.setStatus(0);
                 hyWorkTask.setType(2);
                 Date createTime = fsCourseWatchLog.getCreateTime();
                 long day = DateUtils.getDaysDifferenceFromNow(createTime);
-                hyWorkTask.setScore(0);
                 hyWorkTask.setTitle("第"+day+"天"+"看课中断");
             } else {
+                hyWorkTask.setType(1);
                 hyWorkTask.setTitle(fsCourseWatchLog.getLogType()==3?"先导课待看课":"先导课完课");
             }
             hyWorkTask.setScore(fsCourseWatchLog.getLogType()==3?4:3);
 
-            list.add(hyWorkTask);
+            batchList.add(hyWorkTask);
+            totalProcessed++;
+
+            if (batchList.size() >= BATCH_SIZE) {
+                batchCount++;
+                log.info("处理到第 {} 条数据,开始插入第 {} 批 ({} 条)...", totalProcessed, batchCount, batchList.size());
+                try {
+                    hyWorkTaskMapper.insertQwWorkTaskBatch(batchList);
+                    log.info("第 {} 批插入成功.", batchCount);
+                } catch (Exception e) {
+                    log.error("第 {} 批插入时发生错误: {}", batchCount, e.getMessage(), e);
+                }
+                batchList.clear();
+            }
         }
-
-        hyWorkTaskMapper.insertQwWorkTaskBatch(list);
+        if (!batchList.isEmpty()) {
+            batchCount++;
+            log.info("处理完成,开始插入最后一批 ({} 条)...", batchList.size());
+            try {
+                hyWorkTaskMapper.insertQwWorkTaskBatch(batchList);
+                log.info("最后一批插入成功.");
+            } catch (Exception e) {
+                log.error("最后一批插入时发生错误: {}", e.getMessage(), e);
+            }
+            batchList.clear();
+        }
+        log.info("hyWorkTask 任务执行完毕,共处理 {} 条数据,分 {} 批插入.", totalProcessed, batchCount > 0 ? batchCount : (totalProcessed > 0 ? 1 : 0));
 
     }
 

+ 8 - 5
fs-service-system/src/main/resources/mapper/qw/HyWorkTaskMapper.xml

@@ -98,11 +98,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             fcl.*
         FROM
             fs_course_watch_log fcl
-                JOIN
+                INNER JOIN
             fs_user_course_video fucv ON fcl.video_id = fucv.video_id
         WHERE
-            DATE(fcl.create_time) = CURDATE()
-          AND (
+             (
             fcl.log_type = 4 -- 看课中断
            OR
             (fcl.log_type = 3 AND fucv.is_first = 1) -- 待看的先导课 (根据 is_first 标志判断)
@@ -172,7 +171,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         company_id,
         company_user_id,
         create_time,
-        update_time
+        update_time,
+        user_logs_id,
+        user_id
         )
         VALUES
         <foreach collection="qwWorkTasks" item="log" separator=",">
@@ -188,7 +189,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{log.companyId},
             #{log.companyUserId},
             #{log.createTime},
-            #{log.updateTime}
+            #{log.updateTime},
+            #{log.userLogsId},
+            #{log.userId}
             )
         </foreach>
     </insert>