Переглянути джерело

解决数据同步数据缺失的问题

dzx 1 рік тому
батько
коміт
c2bccbc60d

+ 5 - 4
src/main/java/com/xjrsoft/module/job/JianyuekbBaseDataTask.java

@@ -8,6 +8,7 @@ import com.xjrsoft.common.utils.DatasourceUtil;
 import com.xjrsoft.module.schedule.entity.JianyueData;
 import com.xjrsoft.module.schedule.util.DataUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.ApplicationContext;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
@@ -30,10 +31,10 @@ public class JianyuekbBaseDataTask {
     @Scheduled(cron = "0 */15 * * * ?")
     public void RefreshConnectionPool() {
         String active = SpringUtil.getActiveProfile();
-        if(!"prod".equals(active)){
-            log.info("非正式环境,无法执行数据推送");
-            return;
-        }
+//        if(!"prod".equals(active)){
+//            log.info("非正式环境,无法执行数据推送");
+//            return;
+//        }
         log.info("开始推送课表基础数据");
         DataSource datasource = DatasourceUtil.getDataSource(GlobalConstant.DEFAULT_DATASOURCE_KEY);
         try {

+ 23 - 25
src/main/java/com/xjrsoft/module/job/JianyuekbScheduleTask.java

@@ -1,12 +1,11 @@
 package com.xjrsoft.module.job;
 
-import cn.hutool.core.util.StrUtil;
 import cn.hutool.db.Db;
 import cn.hutool.extra.spring.SpringUtil;
 import com.google.gson.JsonArray;
 import com.xjrsoft.common.constant.GlobalConstant;
 import com.xjrsoft.common.utils.DatasourceUtil;
-import com.xjrsoft.module.base.entity.BaseSemester;
+import com.xjrsoft.module.schedule.entity.CourseReceiveMsg;
 import com.xjrsoft.module.schedule.entity.JianyueData;
 import com.xjrsoft.module.schedule.util.DataUtil;
 import lombok.extern.slf4j.Slf4j;
@@ -14,6 +13,7 @@ import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
 import javax.sql.DataSource;
+import java.sql.SQLException;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -27,22 +27,31 @@ import java.util.Set;
 @Component
 @Slf4j
 public class JianyuekbScheduleTask {
-
-    @Scheduled(cron = "0 */15 * * * ?")
-    public void RefreshConnectionPool() {
+    @Scheduled(cron = "0 */10 * * * ?")
+    public void RefreshConnectionPool() throws SQLException, InterruptedException {
         String active = SpringUtil.getActiveProfile();
-        if(!"prod".equals(active)){
-            log.info("非正式环境,无法执行获取课表数据");
-            return;
+//        if(!"prod".equals(active)){
+//            log.info("非正式环境,无法执行获取课表数据");
+//            return;
+//        }
+        DataSource datasource = DatasourceUtil.getDataSource(GlobalConstant.DEFAULT_DATASOURCE_KEY);
+        Db use = Db.use(datasource);
+        String sql = "SELECT * FROM course_receive_msg WHERE delete_mark = 0 AND is_callback IS NULL";
+        List<CourseReceiveMsg> receiveMsgs = use.query(sql, CourseReceiveMsg.class);
+        for (CourseReceiveMsg receiveMsg : receiveMsgs) {
+            String updSql = "update course_receive_msg set is_callback = 0 where id = " + receiveMsg.getId();
+            use.execute(updSql, new HashMap<>());
+
+            doExecute(use, receiveMsg.getEduYearSerialNo(), receiveMsg.getStartDate(), receiveMsg.getEndDate());
+
+            updSql = "update course_receive_msg set is_callback = 1 where id = " + receiveMsg.getId();
+            use.execute(updSql, new HashMap<>());
         }
-        //doExecute();
     }
 
-    void doExecute(){
+    void doExecute(Db use, String eduYearSerialNo, String startDate, String endDate){
         log.info("开始获取课表数据");
-        DataSource datasource = DatasourceUtil.getDataSource(GlobalConstant.DEFAULT_DATASOURCE_KEY);
         try {
-            Db use = Db.use(datasource);
             String sql = "SELECT distinct table_name FROM jianyue_data WHERE 1 = 1";
             List<JianyueData> query = use.query(sql, JianyueData.class);
             Set<String> tables = new HashSet<>();
@@ -65,7 +74,7 @@ public class JianyuekbScheduleTask {
             DataUtil dataUtil = new DataUtil();
             //获取年级
             String tableName = "base_grade";
-            Map<String, Long> gradeMap = dataMap.get(tableName);
+//            Map<String, Long> gradeMap = dataMap.get(tableName);
             //获取学期
             tableName = "base_semester";
             Map<String, Long> semesterMap = dataMap.get(tableName);
@@ -82,19 +91,8 @@ public class JianyuekbScheduleTask {
             tableName = "base_classroom";
             Map<String, Long> classroomMap = dataMap.get(tableName);
 
-            //查询当前学期id
-            String currenSemeter = dataUtil.getCurrenSemeter();
-            if(StrUtil.isEmpty(currenSemeter)){
-                return;
-            }
-            sql = "SELECT * FROM base_semester WHERE id = (select source_id from jianyue_data where jianyue_id = '" + currenSemeter + "')";
-            List<BaseSemester> semesters = use.query(sql, BaseSemester.class);
-            if(semesters.isEmpty()){
-                return;
-            }
-            BaseSemester baseSemester = semesters.get(0);
             //获取课表并存到数据库
-            JsonArray scheduleInfo = dataUtil.getScheduleInfoByClass(classMap, baseSemester.getStartDate(), baseSemester.getEndDate());
+            JsonArray scheduleInfo = dataUtil.getScheduleInfoByGrade(eduYearSerialNo, startDate, endDate);
             dataUtil.insertCourseTable(use, scheduleInfo, classroomMap, courseMap, semesterMap, teacherMap, classMap);
             dataUtil.insertClassTime(use, scheduleInfo);
             log.info("课表数据获取完成");

+ 1 - 49
src/main/java/com/xjrsoft/module/schedule/controller/ScheduleController.java

@@ -34,6 +34,7 @@ import com.xjrsoft.module.teacher.service.IBaseTeacherService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
+import org.apache.commons.lang3.concurrent.BasicThreadFactory;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -84,55 +85,6 @@ public class ScheduleController {
         courseReceiveMsg.setDeleteMark(DeleteMark.NODELETE.getCode());
         courseReceiveMsg.setEnabledMark(EnabledMark.ENABLED.getCode());
         courseReceiveMsgService.save(courseReceiveMsg);
-        CompletableFuture.runAsync(() -> {
-            try {
-                DataSource datasource = DatasourceUtil.getDataSource(GlobalConstant.DEFAULT_DATASOURCE_KEY);
-                Db use = Db.use(datasource);
-                DataUtil dataUtil = new DataUtil();
-                JsonArray scheduleInfo = dataUtil.getScheduleInfoByGrade(eduYearSerialNo, startDate, endDate);
-                String sql = "SELECT distinct table_name FROM jianyue_data WHERE 1 = 1";
-                List<JianyueData> query = use.query(sql, JianyueData.class);
-                Set<String> tables = new HashSet<>();
-                for (JianyueData jianyueData : query) {
-                    tables.add(jianyueData.getTableName());
-                }
-                sql = "SELECT * FROM jianyue_data WHERE 0 = 0";
-                List<JianyueData> list = use.query(sql, JianyueData.class);
-                Map<String, Map<String, Long>> dataMap = new HashMap<>();
-                for (String table : tables) {
-                    Map<String, Long> tableData = new HashMap<>();
-                    for (JianyueData jianyueData : list) {
-                        if(!table.equals(jianyueData.getTableName())){
-                            continue;
-                        }
-                        tableData.put(jianyueData.getJianyueId(), jianyueData.getSourceId());
-                    }
-                    dataMap.put(table, tableData);
-                }
-
-                //获取学期
-                String tableName = "base_semester";
-                Map<String, Long> semesterMap = dataMap.get(tableName);
-                //获取课程
-                tableName = "base_course_subject";
-                Map<String, Long> courseMap = dataMap.get(tableName);
-                //获取教职工
-                tableName = "base_teacher";
-                Map<String, Long> teacherMap = dataMap.get(tableName);
-                //获取行政班
-                tableName = "base_class";
-                Map<String, Long> classMap = dataMap.get(tableName);
-
-                tableName = "base_classroom";
-                Map<String, Long> classroomMap = dataMap.get(tableName);
-                dataUtil.insertCourseTable(use, scheduleInfo, classroomMap, courseMap, semesterMap, teacherMap, classMap);
-                dataUtil.insertClassTime(use, scheduleInfo);
-            } catch (SQLException e) {
-                throw new RuntimeException(e);
-            } catch (Exception e) {
-                throw new RuntimeException(e);
-            }
-        });
 
         return RT.ok(courseReceiveMsg);
     }

+ 1 - 1
src/main/java/com/xjrsoft/module/schedule/util/DataUtil.java

@@ -543,7 +543,7 @@ public class DataUtil {
             String sql = "INSERT INTO class_time(id,time_period,number,full_name,short_name,create_date,summer_start_time"
                     + ",summer_end_time,winter_start_time,winter_end_time) select " + id + String.format("%04d", count) + ","
                     + jsonObject.get("tmePeriod").getAsInt() + ","
-                    + jsonObject.get("numberOfDay").getAsInt() + ","
+                    + substring1 + ","
                     + "'" + fullName + "',"
                     + "'" + fullName + "',now(),"
                     + "'" + jsonObject.get("startTime").getAsString() + "',"

+ 2 - 2
src/main/resources/mapper/courseTable/CourseTable.xml

@@ -38,8 +38,8 @@
         <if test="dto.startDate != null and dto.endDate != null">
             and t1.schedule_date between #{dto.startDate} and #{dto.endDate}
         </if>
-        <if test="dto.today != null">
-            and t1.schedule_date = #{dto.today}
+        <if test="dto.toDay != null">
+            and t1.schedule_date = #{dto.toDay}
         </if>
     </select>
     <select id="getAdjustList" parameterType="com.xjrsoft.module.schedule.dto.CourseTableAdjustDto" resultType="com.xjrsoft.module.schedule.vo.CourseListVo">

+ 2 - 2
src/main/resources/sqlScript/20240125_sql.sql

@@ -339,5 +339,5 @@ CREATE TABLE base_label
     PRIMARY KEY (`id`)
 ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT '基础标签表';
 
-# ALTER TABLE `tl`.`base_course_subject`
-#   CHANGE `org_id` `base_label_id` BIGINT NULL   COMMENT '标签id(base_label)';
+ALTER TABLE `base_course_subject`
+   CHANGE `org_id` `base_label_id` BIGINT NULL   COMMENT '标签id(base_label)';