dzx 1 rok pred
rodič
commit
801ae489b4

+ 5 - 2
src/main/java/com/xjrsoft/module/job/AttenDanceWarnNoticeTask.java

@@ -62,6 +62,9 @@ public class AttenDanceWarnNoticeTask {
     private IHolidayDateService holidayDateService;
 
     @Scheduled(cron = "0 */1 * * * ?")
+    public void execute(){
+        //RefreshConnectionPool();
+    }
     public void RefreshConnectionPool() {
         String active = SpringUtil.getActiveProfile();
         if("dev".equals(active)){
@@ -128,7 +131,7 @@ public class AttenDanceWarnNoticeTask {
             return;
         }
         long minute = Math.abs(ChronoUnit.MINUTES.between(now, recentlyTime));
-        if(now.isBefore(recentlyTime) && minute >= 1){
+        if(now.isAfter(recentlyTime) || minute >= 1){
             log.info("未到时间,不进行推送");
             return;
         }
@@ -198,7 +201,7 @@ public class AttenDanceWarnNoticeTask {
             weChatService.sendTemplateMessage(weChatSendMessageDto);
 
         }
-        SimpleDateFormat sdf = new SimpleDateFormat();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
         String table = "wechat_message_log";
         long id = IdUtil.getSnowflakeNextId();
         Entity entity = Entity.create(table);

+ 1 - 1
src/main/java/com/xjrsoft/module/job/AttendanceMessageTask.java

@@ -303,7 +303,7 @@ public class AttendanceMessageTask {
             }
 
             if(isInsert){
-                SimpleDateFormat sdf = new SimpleDateFormat();
+                SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
                 Entity entity = Entity.create(table);
                 entity.set("id", IdUtil.getSnowflakeNextId());
                 entity.set("content", "消息推送人数:" + userCount);

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

@@ -10,12 +10,17 @@ 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;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import static cn.hutool.core.convert.NumberWordFormatter.format;
+
 /**
  * @author dzx
  * @date 2024/1/25
@@ -46,7 +51,7 @@ public class JianyuekbScheduleTask {
         }
     }
 
-    void doExecute(String eduYearSerialNo, String startDate, String endDate){
+    void doExecute(String eduYearSerialNo, String startDateStr, String endDateStr){
         log.info("开始获取课表数据");
         try {
             String sql = "SELECT distinct table_name FROM jianyue_data WHERE 1 = 1";
@@ -87,11 +92,26 @@ public class JianyuekbScheduleTask {
 
             tableName = "base_classroom";
             Map<String, String> classroomMap = dataMap.get(tableName);
+            LocalDate startDateObj = LocalDate.parse(startDateStr);
+            LocalDate endDateObj = LocalDate.parse(endDateStr);
+            long between = ChronoUnit.DAYS.between(startDateObj, endDateObj);
+            long times = (between / 7) + 1;
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+            for (int i = 0; i < times; i ++) {
+                LocalDate statrTime = startDateObj.plusDays(i * 7L);
+                String startDate = statrTime.format(formatter);
+                LocalDate endTime = statrTime.plusDays(6L);
+                if(endTime.isAfter(endDateObj)){
+                    endTime = endDateObj;
+                }
+
+                String endDate = endTime.format(formatter);
+                //获取课表并存到数据库
+                JsonArray scheduleInfo = dataUtil.getScheduleInfoByGrade(eduYearSerialNo, startDate, endDate);
+                dataUtil.insertCourseTable(scheduleInfo, classroomMap, courseMap, semesterMap, teacherMap, classMap);
+                dataUtil.insertClassTime(scheduleInfo);
+            }
 
-            //获取课表并存到数据库
-            JsonArray scheduleInfo = dataUtil.getScheduleInfoByGrade(eduYearSerialNo, startDate, endDate);
-            dataUtil.insertCourseTable(scheduleInfo, classroomMap, courseMap, semesterMap, teacherMap, classMap);
-            dataUtil.insertClassTime(scheduleInfo);
             log.info("课表数据获取完成");
         } catch (Exception e) {
             log.error(e.getMessage(), e);

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

@@ -1,6 +1,8 @@
 package com.xjrsoft.module.schedule.util;
 
+import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.db.Entity;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
@@ -19,6 +21,7 @@ import com.xjrsoft.module.teacher.entity.XjrUser;
 import lombok.extern.slf4j.Slf4j;
 
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -611,6 +614,63 @@ 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();
+        int count = 1;
+        String tableName = "course_table";
+        List<Entity> entityList = new ArrayList();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
+        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));
+            }
+
+            Entity entity = Entity.create(tableName);
+            entity.set("id", IdUtil.getSnowflakeNextId());
+            entity.set("base_semester_id", semesterMap.get(asJsonObject.get("semesterSerialNo").getAsString()));
+
+            if(teachers.size() > 0){
+                JsonObject teacherJson = teachers.get(0).getAsJsonObject();
+                entity.set("teacher_id", (teacherMap.get(teacherJson.get("teacherSerialNo").getAsString())==null?0:teacherMap.get(teacherJson.get("teacherSerialNo").getAsString())));
+                entity.set("teacher_name", teacherJson.get("name").getAsString());
+                entity.set("teacher_serial_no", teacherJson.get("teacherSerialNo").getAsString());
+            }else{
+                entity.set("teacher_id", 0);
+//                entity.set("teacher_name", "");
+//                entity.set("teacher_serial_no", "");
+            }
+            entity.set("course_id", coureseMap.get(asJsonObject.get("courseClassId").getAsString()));
+            entity.set("course_name", asJsonObject.get("courseClassName").getAsString());
+            entity.set("class_id", classMap.get(asJsonObject.get("classSerialNo").getAsString()));
+            entity.set("class_name", asJsonObject.get("className").getAsString());
+            entity.set("weeks", asJsonObject.get("dayOfWeek").getAsInt());
+            entity.set("weeks_cn", asJsonObject.get("dayOfWeekName").getAsString());
+            entity.set("time_period", tmePeriod.get(asJsonObject.get("timeOption").getAsInt()));
+            entity.set("time_number", timeNumber);
+            entity.set("site_id", (classroomMap.get(asJsonObject.get("classRoomSerialNo").getAsString()) == null ? 0 : classroomMap.get(asJsonObject.get("classRoomSerialNo").getAsString())));
+            entity.set("site_name", asJsonObject.get("classRoomName").getAsString());
+            entity.set("status", 1);
+            entity.set("create_date", sdf.format(new Date()));
+            entity.set("schedule_date", asJsonObject.get("scheduleDate").getAsString());
+            entity.set("jianyue_id", asJsonObject.get("id").getAsString());
+            entityList.add(entity);
+            count ++;
+        }
+        if(!entityList.isEmpty()){
+            SqlRunnerAdapter.db().dynamicInsertBatch(tableName, entityList);
+        }
+    }
+
     /**
      * 提取课时相关信息
      * @param data 数据

+ 116 - 0
src/test/java/com/xjrsoft/module/job/JianyuekbScheduleTaskTest.java

@@ -0,0 +1,116 @@
+package com.xjrsoft.module.job;
+
+import cn.hutool.extra.spring.SpringUtil;
+import com.google.gson.JsonArray;
+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 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.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
+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
+ */
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = XjrSoftApplication.class)
+class JianyuekbScheduleTaskTest {
+
+    @Test
+    public void RefreshConnectionPool() throws SQLException, InterruptedException {
+        String active = SpringUtil.getActiveProfile();
+        if(!"prod".equals(active)){
+            return;
+        }
+        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);
+        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());
+
+            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);
+            long between = ChronoUnit.DAYS.between(startDateObj, endDateObj);
+            long times = (between / 7) + 1;
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+            for (int i = 0; i < times; i ++) {
+                LocalDate statrTime = startDateObj.plusDays(i * 7L);
+                String startDate = statrTime.format(formatter);
+                LocalDate endTime = statrTime.plusDays(6L);
+                if(endTime.isAfter(endDateObj)){
+                    endTime = endDateObj;
+                }
+
+                String endDate = endTime.format(formatter);
+                //获取课表并存到数据库
+                JsonArray scheduleInfo = dataUtil.getScheduleInfoByGrade(eduYearSerialNo, startDate, endDate);
+                dataUtil.insertCourseTableEntiy(scheduleInfo, classroomMap, courseMap, semesterMap, teacherMap, classMap);
+                dataUtil.insertClassTime(scheduleInfo);
+            }
+        } catch (Exception e) {
+        }
+    }
+}