Browse Source

bug修复

dzx 7 months ago
parent
commit
16621664b0

+ 60 - 62
src/main/java/com/xjrsoft/module/job/JianyuekbScheduleTask.java

@@ -9,7 +9,6 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
-import java.sql.SQLException;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
@@ -28,10 +27,10 @@ import java.util.Set;
 @Slf4j
 public class JianyuekbScheduleTask {
     @Scheduled(cron = "0 */10 * * * ?")
-    public void execute() throws SQLException, InterruptedException {
+    public void execute() throws Exception {
         RefreshConnectionPool();
     }
-    public void RefreshConnectionPool() throws SQLException, InterruptedException {
+    public void RefreshConnectionPool() throws Exception {
         String active = SpringUtil.getActiveProfile();
         if(!"prod".equals(active)){
             log.info("非正式环境,无法执行获取课表数据");
@@ -39,66 +38,22 @@ public class JianyuekbScheduleTask {
         }
         String sql = "SELECT * FROM course_receive_msg WHERE delete_mark = 0 AND is_callback IS NULL";
         List<Map<String, Object>> receiveMsgs = SqlRunnerAdapter.db().selectList(sql, CourseReceiveMsg.class);
+        JsonArray allScheduleInfo = new JsonArray();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        DataUtil dataUtil = new DataUtil();
         for (Map<String, Object> receiveMsg : receiveMsgs) {
             String updSql = "update course_receive_msg set is_callback = 0 where id = " + receiveMsg.get("id").toString();
             SqlRunnerAdapter.db().update(updSql);
 
-            doExecute(receiveMsg.get("edu_year_serial_no").toString(), receiveMsg.get("start_date").toString(), receiveMsg.get("end_date").toString());
+            String eduYearSerialNo = receiveMsg.get("edu_year_serial_no").toString();
 
-            updSql = "update course_receive_msg set is_callback = 1 where id = " + receiveMsg.get("id").toString();
-            SqlRunnerAdapter.db().update(updSql);
-        }
-    }
-
-    void doExecute(String eduYearSerialNo, String startDateStr, String endDateStr){
-        log.info("开始获取课表数据");
-        try {
-            String sql = "SELECT distinct table_name FROM jianyue_data WHERE 1 = 1";
-            List<Map<String, Object>> query = SqlRunnerAdapter.db().selectList(sql);
-            Set<String> tables = new HashSet<>();
-            for (Map<String, Object> jianyueData : query) {
-                tables.add(jianyueData.get("table_name").toString());
-            }
-            sql = "SELECT * FROM jianyue_data WHERE 0 = 0";
-            List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
-            Map<String, Map<String, String>> dataMap = new HashMap<>();
-            for (String table : tables) {
-                Map<String, String> tableData = new HashMap<>();
-                for (Map<String, Object> jianyueData : list) {
-                    if(!table.equals(jianyueData.get("table_name").toString())){
-                        continue;
-                    }
-                    tableData.put(jianyueData.get("jianyue_id").toString(), jianyueData.get("source_id").toString());
-                }
-                dataMap.put(table, tableData);
-            }
-            DataUtil dataUtil = new DataUtil();
-            //获取年级
-            String tableName = "base_grade";
-//            Map<String, Long> gradeMap = dataMap.get(tableName);
-            //获取学期
-            tableName = "base_semester";
-            Map<String, String> semesterMap = dataMap.get(tableName);
-            //获取课程
-            tableName = "base_course_subject";
-            Map<String, String> courseMap = dataMap.get(tableName);
-            //获取教职工
-            tableName = "base_teacher";
-            Map<String, String> teacherMap = dataMap.get(tableName);
-            //获取行政班
-            tableName = "base_class";
-            Map<String, String> classMap = dataMap.get(tableName);
-
-            tableName = "base_classroom";
-            Map<String, String> classroomMap = dataMap.get(tableName);
-            LocalDate startDateObj = LocalDate.parse(startDateStr);
-            LocalDate endDateObj = LocalDate.parse(endDateStr);
+            LocalDate startDateObj = LocalDate.parse(receiveMsg.get("start_date").toString());
+            LocalDate endDateObj = LocalDate.parse(receiveMsg.get("end_date").toString());
             long between = ChronoUnit.DAYS.between(startDateObj, endDateObj);
-            long times = (between / 7) + 1;
-            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-            JsonArray allScheduleInfo = new JsonArray();
-            for (int i = 0; i < times; i ++) {
-                LocalDate statrTime = startDateObj.plusDays(i * 7L);
+            int times = Integer.parseInt(((between / 7) + 1) + "");
+
+            for (int index = 0; index < times; index ++) {
+                LocalDate statrTime = startDateObj.plusDays(index * 7L);
                 String startDate = statrTime.format(formatter);
                 LocalDate endTime = statrTime.plusDays(6L);
                 if(endTime.isAfter(endDateObj)){
@@ -110,12 +65,55 @@ public class JianyuekbScheduleTask {
                 JsonArray scheduleInfo = dataUtil.getScheduleInfoByGrade(eduYearSerialNo, startDate, endDate);
                 allScheduleInfo.addAll(scheduleInfo);
             }
-            dataUtil.insertCourseTableEntiy(allScheduleInfo, classroomMap, courseMap, semesterMap, teacherMap, classMap);
-            dataUtil.insertClassTime(allScheduleInfo);
-            log.info("课表数据获取完成");
-        } catch (Exception e) {
-            log.error(e.getMessage(), e);
+
+            updSql = "update course_receive_msg set is_callback = 1 where id = " + receiveMsg.get("id").toString();
+            SqlRunnerAdapter.db().update(updSql);
+        }
+        doExecute(allScheduleInfo);
+    }
+
+    void doExecute(JsonArray scheduleInfo){
+        String sql = "SELECT distinct table_name FROM jianyue_data WHERE 1 = 1";
+        List<Map<String, Object>> query = SqlRunnerAdapter.db().selectList(sql);
+        Set<String> tables = new HashSet<>();
+        for (Map<String, Object> jianyueData : query) {
+            tables.add(jianyueData.get("table_name").toString());
         }
+        sql = "SELECT * FROM jianyue_data WHERE 0 = 0";
+        List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
+        Map<String, Map<String, String>> dataMap = new HashMap<>();
+        for (String table : tables) {
+            Map<String, String> tableData = new HashMap<>();
+            for (Map<String, Object> jianyueData : list) {
+                if(!table.equals(jianyueData.get("table_name").toString())){
+                    continue;
+                }
+                tableData.put(jianyueData.get("jianyue_id").toString(), jianyueData.get("source_id").toString());
+            }
+            dataMap.put(table, tableData);
+        }
+        DataUtil dataUtil = new DataUtil();
+        //获取年级
+        String tableName = "base_grade";
+//            Map<String, Long> gradeMap = dataMap.get(tableName);
+        //获取学期
+        tableName = "base_semester";
+        Map<String, String> semesterMap = dataMap.get(tableName);
+        //获取课程
+        tableName = "base_course_subject";
+        Map<String, String> courseMap = dataMap.get(tableName);
+        //获取教职工
+        tableName = "base_teacher";
+        Map<String, String> teacherMap = dataMap.get(tableName);
+        //获取行政班
+        tableName = "base_class";
+        Map<String, String> classMap = dataMap.get(tableName);
+
+        tableName = "base_classroom";
+        Map<String, String> classroomMap = dataMap.get(tableName);
+
+        dataUtil.insertCourseTableEntiy(scheduleInfo, classroomMap, courseMap, semesterMap, teacherMap, classMap);
+        dataUtil.insertClassTime(scheduleInfo);
     }
 
 }

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

@@ -24,8 +24,10 @@ import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * @author dzx
@@ -616,23 +618,28 @@ public class DataUtil {
 
     public void insertCourseTableEntiy(JsonArray data, Map<String, String> classroomMap, Map<String, String> coureseMap,
                                   Map<String, String> semesterMap, Map<String, String> teacherMap, Map<String, String> classMap) {
-//        List<String> sqls = new ArrayList<>();
-//        Map<Integer, String> week = ScheduleUtil.getWeek();
         Map<Integer, Integer> tmePeriod = ScheduleUtil.getTmePeriod();
         String tableName = "course_table";
         List<Entity> entityList = new ArrayList();
         SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
+        List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList("select * from course_table");
+        Set<String> serialNos = new HashSet<>();
+        for (Map<String, Object> objectMap : list) {
+            if(objectMap.get("jianyue_id") == null){
+                continue;
+            }
+            serialNos.add(objectMap.get("jianyue_id").toString());
+        }
         for (JsonElement jsonElement : data) {
             JsonObject asJsonObject = jsonElement.getAsJsonObject();
             JsonArray teachers = asJsonObject.get("teachers").getAsJsonArray();
             if(asJsonObject.get("courseClassId").isJsonNull() || coureseMap.get(asJsonObject.get("courseClassId").getAsString()) == null){
                 continue;
             }
-            String numberOfDayName = asJsonObject.get("numberOfDayName").getAsString();
-            Integer timeNumber = 0;//节次
-            if(!StrUtil.isEmpty(numberOfDayName)){
-                timeNumber = Integer.parseInt(numberOfDayName.substring(numberOfDayName.length() - 1));
+            if(serialNos.contains(asJsonObject.get("id").getAsString())){
+                continue;
             }
+            int timeNumber = asJsonObject.get("numberOfDay").getAsInt();//节次
 
             Entity entity = Entity.create(tableName);
             entity.set("id", IdUtil.getSnowflakeNextId());

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

@@ -158,6 +158,7 @@ public class ScheduleUtil {
 
     public static Map<Integer, Integer> getTmePeriod(){
         Map<Integer, Integer> map = new HashMap<>();
+        map.put(1, 0);
         map.put(2, 1);
         map.put(3, 2);
         map.put(4, 3);

+ 112 - 64
src/test/java/com/xjrsoft/module/job/JianyuekbScheduleTaskTest.java

@@ -1,30 +1,33 @@
 package com.xjrsoft.module.job;
 
+import cn.hutool.db.Entity;
 import cn.hutool.extra.spring.SpringUtil;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
 import com.xjrsoft.XjrSoftApplication;
 import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
 import com.xjrsoft.module.schedule.entity.CourseReceiveMsg;
 import com.xjrsoft.module.schedule.util.DataUtil;
+import com.xjrsoft.module.schedule.util.ScheduleUtil;
 import org.junit.jupiter.api.Test;
 import org.junit.runner.RunWith;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
-import java.sql.SQLException;
+import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import static org.junit.jupiter.api.Assertions.*;
-
 /**
  * @author dzx
  * @date 2024/8/7
@@ -35,70 +38,27 @@ import static org.junit.jupiter.api.Assertions.*;
 class JianyuekbScheduleTaskTest {
 
     @Test
-    public void RefreshConnectionPool() throws SQLException, InterruptedException {
+    public void RefreshConnectionPool() throws Exception {
         String active = SpringUtil.getActiveProfile();
         if(!"prod".equals(active)){
             return;
         }
         String sql = "SELECT * FROM course_receive_msg WHERE delete_mark = 0 AND id in (1821034023531098114,1821034021123567617)";
         List<Map<String, Object>> receiveMsgs = SqlRunnerAdapter.db().selectList(sql, CourseReceiveMsg.class);
+        JsonArray allScheduleInfo = new JsonArray();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        DataUtil dataUtil = new DataUtil();
         for (Map<String, Object> receiveMsg : receiveMsgs) {
             String updSql = "update course_receive_msg set is_callback = 0 where id = " + receiveMsg.get("id").toString();
             SqlRunnerAdapter.db().update(updSql);
 
-            doExecute(receiveMsg.get("edu_year_serial_no").toString(), receiveMsg.get("start_date").toString(), receiveMsg.get("end_date").toString());
+            String eduYearSerialNo = receiveMsg.get("edu_year_serial_no").toString();
 
-            updSql = "update course_receive_msg set is_callback = 1 where id = " + receiveMsg.get("id").toString();
-            SqlRunnerAdapter.db().update(updSql);
-        }
-    }
-
-    void doExecute(String eduYearSerialNo, String startDateStr, String endDateStr){
-        try {
-            String sql = "SELECT distinct table_name FROM jianyue_data WHERE 1 = 1";
-            List<Map<String, Object>> query = SqlRunnerAdapter.db().selectList(sql);
-            Set<String> tables = new HashSet<>();
-            for (Map<String, Object> jianyueData : query) {
-                tables.add(jianyueData.get("table_name").toString());
-            }
-            sql = "SELECT * FROM jianyue_data WHERE 0 = 0";
-            List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
-            Map<String, Map<String, String>> dataMap = new HashMap<>();
-            for (String table : tables) {
-                Map<String, String> tableData = new HashMap<>();
-                for (Map<String, Object> jianyueData : list) {
-                    if(!table.equals(jianyueData.get("table_name").toString())){
-                        continue;
-                    }
-                    tableData.put(jianyueData.get("jianyue_id").toString(), jianyueData.get("source_id").toString());
-                }
-                dataMap.put(table, tableData);
-            }
-            DataUtil dataUtil = new DataUtil();
-            //获取年级
-            String tableName = "base_grade";
-//            Map<String, Long> gradeMap = dataMap.get(tableName);
-            //获取学期
-            tableName = "base_semester";
-            Map<String, String> semesterMap = dataMap.get(tableName);
-            //获取课程
-            tableName = "base_course_subject";
-            Map<String, String> courseMap = dataMap.get(tableName);
-            //获取教职工
-            tableName = "base_teacher";
-            Map<String, String> teacherMap = dataMap.get(tableName);
-            //获取行政班
-            tableName = "base_class";
-            Map<String, String> classMap = dataMap.get(tableName);
-
-            tableName = "base_classroom";
-            Map<String, String> classroomMap = dataMap.get(tableName);
-            LocalDate startDateObj = LocalDate.parse(startDateStr);
-            LocalDate endDateObj = LocalDate.parse(endDateStr);
+            LocalDate startDateObj = LocalDate.parse(receiveMsg.get("start_date").toString());
+            LocalDate endDateObj = LocalDate.parse(receiveMsg.get("end_date").toString());
             long between = ChronoUnit.DAYS.between(startDateObj, endDateObj);
             int times = Integer.parseInt(((between / 7) + 1) + "");
-            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-            JsonArray allScheduleInfo = new JsonArray();
+
             for (int index = 0; index < times; index ++) {
                 LocalDate statrTime = startDateObj.plusDays(index * 7L);
                 String startDate = statrTime.format(formatter);
@@ -112,19 +72,107 @@ class JianyuekbScheduleTaskTest {
                 JsonArray scheduleInfo = dataUtil.getScheduleInfoByGrade(eduYearSerialNo, startDate, endDate);
                 allScheduleInfo.addAll(scheduleInfo);
             }
-            Map<String, Integer> courseTable = new HashMap<>();
-            for (JsonElement jsonElement : allScheduleInfo) {
-                JsonObject object = jsonElement.getAsJsonObject();
-                courseTable.put(object.get("courseClassName").getAsString(), object.get("timeOption").getAsInt());
-            }
 
-            for (String key : courseTable.keySet()) {
-                System.out.println(key+" ----> " + courseTable.get(key));
+            updSql = "update course_receive_msg set is_callback = 1 where id = " + receiveMsg.get("id").toString();
+            SqlRunnerAdapter.db().update(updSql);
+        }
+        doExecute(allScheduleInfo);
+
+    }
+
+    void doExecute(JsonArray scheduleInfo){
+        String sql = "SELECT distinct table_name FROM jianyue_data WHERE 1 = 1";
+        List<Map<String, Object>> query = SqlRunnerAdapter.db().selectList(sql);
+        Set<String> tables = new HashSet<>();
+        for (Map<String, Object> jianyueData : query) {
+            tables.add(jianyueData.get("table_name").toString());
+        }
+        sql = "SELECT * FROM jianyue_data WHERE 0 = 0";
+        List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
+        Map<String, Map<String, String>> dataMap = new HashMap<>();
+        for (String table : tables) {
+            Map<String, String> tableData = new HashMap<>();
+            for (Map<String, Object> jianyueData : list) {
+                if(!table.equals(jianyueData.get("table_name").toString())){
+                    continue;
+                }
+                tableData.put(jianyueData.get("jianyue_id").toString(), jianyueData.get("source_id").toString());
             }
+            dataMap.put(table, tableData);
+        }
+        DataUtil dataUtil = new DataUtil();
+        //获取年级
+        String tableName = "base_grade";
+//            Map<String, Long> gradeMap = dataMap.get(tableName);
+        //获取学期
+        tableName = "base_semester";
+        Map<String, String> semesterMap = dataMap.get(tableName);
+        //获取课程
+        tableName = "base_course_subject";
+        Map<String, String> courseMap = dataMap.get(tableName);
+        //获取教职工
+        tableName = "base_teacher";
+        Map<String, String> teacherMap = dataMap.get(tableName);
+        //获取行政班
+        tableName = "base_class";
+        Map<String, String> classMap = dataMap.get(tableName);
+
+        tableName = "base_classroom";
+        Map<String, String> classroomMap = dataMap.get(tableName);
+
+        dataUtil.insertCourseTableEntiy(scheduleInfo, classroomMap, courseMap, semesterMap, teacherMap, classMap);
+        dataUtil.insertClassTime(scheduleInfo);
+    }
+
+
+    @Test
+    void updateClass() throws Exception {
+        String url  = ScheduleUtil.apiUrl + "Class/page";
+        JsonObject pageJson = new JsonObject();
+        pageJson.addProperty("pageSize", 200);
+        pageJson.addProperty("pageIndex", 1);
+        JsonParser parser = new JsonParser();
+
+        long timestamp = System.currentTimeMillis();
+        String sign = ScheduleUtil.createSign(timestamp);
 
-            //dataUtil.insertCourseTableEntiy(allScheduleInfo, classroomMap, courseMap, semesterMap, teacherMap, classMap);
-            //dataUtil.insertClassTime(allScheduleInfo);
-        } catch (Exception e) {
+        String doPost = ScheduleUtil.doPost(url, pageJson.toString(), sign, timestamp);
+        System.out.println(doPost);
+        JsonArray dataList = parser.parse(doPost).getAsJsonObject().get("data").getAsJsonObject().get("dataList").getAsJsonArray();
+        String sql = "select * from base_class where delete_mark = 0";
+        List<Map<String, Object>> classList = SqlRunnerAdapter.db().selectList(sql);
+        Map<String, Long> classMap = new HashMap<>();
+        for (Map<String, Object> objectMap : classList) {
+            classMap.put(objectMap.get("name").toString(), (Long)objectMap.get("id"));
         }
+
+        sql = "select * from jianyue_data where table_name = 'base_class'";
+        List<Map<String, Object>> classList2 = SqlRunnerAdapter.db().selectList(sql);
+        Set<String> sourceIds = new HashSet<>();
+        for (Map<String, Object> objectMap : classList2) {
+            sourceIds.add(objectMap.get("jianyue_id").toString());
+        }
+
+        String tableName = "jianyue_data";
+        List<Entity> insertList = new ArrayList<>();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        for (JsonElement jsonElement : dataList) {
+            JsonObject object = jsonElement.getAsJsonObject();
+            String serialNo = object.get("serialNo").getAsString();
+            if(sourceIds.contains(serialNo)){
+                continue;
+            }
+            if(classMap.get(object.get("name").getAsString()) == null){
+                continue;
+            }
+            Entity entity = Entity.create(tableName);
+            entity.set("create_date", sdf.format(new Date()));
+            entity.set("table_name", "base_class");
+            entity.set("source_id", classMap.get(object.get("name").getAsString()));
+            entity.set("jianyue_id", serialNo);
+            insertList.add(entity);
+        }
+        SqlRunnerAdapter.db().dynamicInsertBatch(tableName, insertList);
+
     }
 }