JianyuekbScheduleTask.java 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. package com.xjrsoft.module.job;
  2. import cn.hutool.extra.spring.SpringUtil;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.google.gson.JsonArray;
  5. import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
  6. import com.xjrsoft.module.base.entity.BaseClass;
  7. import com.xjrsoft.module.base.service.IBaseClassService;
  8. import com.xjrsoft.module.schedule.util.DataUtil;
  9. import lombok.extern.slf4j.Slf4j;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.scheduling.annotation.Scheduled;
  12. import org.springframework.stereotype.Component;
  13. import java.time.LocalDate;
  14. import java.time.format.DateTimeFormatter;
  15. import java.time.temporal.ChronoUnit;
  16. import java.util.HashMap;
  17. import java.util.HashSet;
  18. import java.util.List;
  19. import java.util.Map;
  20. import java.util.Set;
  21. import java.util.stream.Collectors;
  22. /**
  23. * @author dzx
  24. * @date 2024/1/25
  25. */
  26. @Component
  27. @Slf4j
  28. public class JianyuekbScheduleTask {
  29. @Autowired
  30. private IBaseClassService classService;
  31. @Scheduled(cron = "0 */10 * * * ?")
  32. public void execute() throws Exception {
  33. RefreshConnectionPool();
  34. }
  35. public void RefreshConnectionPool() throws Exception {
  36. String active = SpringUtil.getActiveProfile();
  37. if(!"prod".equals(active)){
  38. log.info("非正式环境,无法执行获取课表数据");
  39. return;
  40. }
  41. String sql = "SELECT * FROM course_receive_msg WHERE delete_mark = 0 AND is_callback IS NULL";
  42. List<Map<String, Object>> receiveMsgs = SqlRunnerAdapter.db().selectList(sql);
  43. JsonArray allScheduleInfo = new JsonArray();
  44. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
  45. DataUtil dataUtil = new DataUtil();
  46. //查询出传入排课系统的年级和班级
  47. List<String> eduYearSerialNo1 = receiveMsgs.stream().map(x -> "'" + x.get("edu_year_serial_no").toString() + "'").collect(Collectors.toList());
  48. //查询出传入排课系统的年级和班级
  49. sql = "SELECT * FROM jianyue_data WHERE source_id IS NOT NULL AND jianyue_id != ''" +
  50. " and table_name = 'base_grade'" +
  51. " and jianyue_id in (" + eduYearSerialNo1.toString().replace("[","").replace("]","") + ")";
  52. List<Map<String, Object>> jianyueData = SqlRunnerAdapter.db().selectList(sql);
  53. Map<String, List<Long>> gradeClassMaps = new HashMap<>();//存入对应年级的所有班级id
  54. for (Map<String, Object> el : jianyueData) {
  55. String gradeId = el.get("source_id").toString();
  56. if(gradeId.contains("_")){
  57. gradeId = el.get("source_id").toString().split("_")[1];
  58. }
  59. List<BaseClass> classList = classService.list(new QueryWrapper<BaseClass>().lambda().eq(BaseClass::getGradeId, gradeId));
  60. List<Long> classIds = classList.stream().map(BaseClass::getId).collect(Collectors.toList());
  61. gradeClassMaps.put(el.get("jianyue_id").toString(), classIds);
  62. }
  63. for (Map<String, Object> receiveMsg : receiveMsgs) {
  64. String updSql = "update course_receive_msg set is_callback = 0 where id = " + receiveMsg.get("id").toString();
  65. SqlRunnerAdapter.db().update(updSql);
  66. String eduYearSerialNo = receiveMsg.get("edu_year_serial_no").toString();
  67. String startDateStr = receiveMsg.get("start_date").toString();
  68. String endDateStr = receiveMsg.get("end_date").toString();
  69. //删除课表信息
  70. String delSql = "delete from course_table where schedule_date between '" + startDateStr + "'" +
  71. " and '" + endDateStr + "'" +
  72. " and class_id in (" + gradeClassMaps.get(eduYearSerialNo).toString().replace("[","").replace("]","")+ ")";
  73. SqlRunnerAdapter.db().delete(delSql);
  74. LocalDate startDateObj = LocalDate.parse(startDateStr);
  75. LocalDate endDateObj = LocalDate.parse(endDateStr);
  76. long between = ChronoUnit.DAYS.between(startDateObj, endDateObj);
  77. int times = Integer.parseInt(((between / 7) + 1) + "");
  78. for (int index = 0; index < times; index ++) {
  79. LocalDate statrTime = startDateObj.plusDays(index * 7L);
  80. String startDate = statrTime.format(formatter);
  81. LocalDate endTime = statrTime.plusDays(6L);
  82. if(endTime.isAfter(endDateObj)){
  83. endTime = endDateObj;
  84. }
  85. String endDate = endTime.format(formatter);
  86. //获取课表并存到数据库
  87. JsonArray scheduleInfo = dataUtil.getScheduleInfoByGrade(eduYearSerialNo, startDate, endDate);
  88. allScheduleInfo.addAll(scheduleInfo);
  89. }
  90. updSql = "update course_receive_msg set is_callback = 1 where id = " + receiveMsg.get("id").toString();
  91. SqlRunnerAdapter.db().update(updSql);
  92. }
  93. doExecute(allScheduleInfo);
  94. }
  95. void doExecute(JsonArray scheduleInfo){
  96. String sql = "SELECT distinct table_name FROM jianyue_data WHERE 1 = 1";
  97. List<Map<String, Object>> query = SqlRunnerAdapter.db().selectList(sql);
  98. Set<String> tables = new HashSet<>();
  99. for (Map<String, Object> jianyueData : query) {
  100. tables.add(jianyueData.get("table_name").toString());
  101. }
  102. sql = "SELECT * FROM jianyue_data WHERE source_id IS NOT NULL AND jianyue_id != ''";
  103. List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
  104. Map<String, Map<String, String>> dataMap = new HashMap<>();
  105. for (String table : tables) {
  106. Map<String, String> tableData = new HashMap<>();
  107. for (Map<String, Object> jianyueData : list) {
  108. if(!table.equals(jianyueData.get("table_name").toString())){
  109. continue;
  110. }
  111. tableData.put(jianyueData.get("jianyue_id").toString(), jianyueData.get("source_id").toString());
  112. }
  113. dataMap.put(table, tableData);
  114. }
  115. DataUtil dataUtil = new DataUtil();
  116. //获取年级
  117. String tableName = "base_grade";
  118. // Map<String, Long> gradeMap = dataMap.get(tableName);
  119. //获取学期
  120. tableName = "base_semester";
  121. Map<String, String> semesterMap = dataMap.get(tableName);
  122. //获取课程
  123. tableName = "base_course_subject";
  124. Map<String, String> courseMap = dataMap.get(tableName);
  125. //获取教职工
  126. tableName = "base_teacher";
  127. Map<String, String> teacherMap = dataMap.get(tableName);
  128. //获取行政班
  129. tableName = "base_class";
  130. Map<String, String> classMap = dataMap.get(tableName);
  131. tableName = "base_classroom";
  132. Map<String, String> classroomMap = dataMap.get(tableName);
  133. dataUtil.insertCourseTableEntiy(scheduleInfo, classroomMap, courseMap, semesterMap, teacherMap, classMap);
  134. dataUtil.insertClassTime(scheduleInfo);
  135. }
  136. }