| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- package com.xjrsoft.module.job;
- import cn.hutool.extra.spring.SpringUtil;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.google.gson.JsonArray;
- import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
- import com.xjrsoft.module.base.entity.BaseClass;
- import com.xjrsoft.module.base.service.IBaseClassService;
- import com.xjrsoft.module.schedule.util.DataUtil;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.scheduling.annotation.Scheduled;
- import org.springframework.stereotype.Component;
- 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 java.util.stream.Collectors;
- /**
- * @author dzx
- * @date 2024/1/25
- */
- @Component
- @Slf4j
- public class JianyuekbScheduleTask {
- @Autowired
- private IBaseClassService classService;
- @Scheduled(cron = "0 */10 * * * ?")
- public void execute() throws Exception {
- RefreshConnectionPool();
- }
- public void RefreshConnectionPool() throws Exception {
- String active = SpringUtil.getActiveProfile();
- if(!"prod".equals(active)){
- log.info("非正式环境,无法执行获取课表数据");
- 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);
- JsonArray allScheduleInfo = new JsonArray();
- DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
- DataUtil dataUtil = new DataUtil();
- //查询出传入排课系统的年级和班级
- List<String> eduYearSerialNo1 = receiveMsgs.stream().map(x -> "'" + x.get("edu_year_serial_no").toString() + "'").collect(Collectors.toList());
- //查询出传入排课系统的年级和班级
- sql = "SELECT * FROM jianyue_data WHERE source_id IS NOT NULL AND jianyue_id != ''" +
- " and table_name = 'base_grade'" +
- " and jianyue_id in (" + eduYearSerialNo1.toString().replace("[","").replace("]","") + ")";
- List<Map<String, Object>> jianyueData = SqlRunnerAdapter.db().selectList(sql);
- Map<String, List<Long>> gradeClassMaps = new HashMap<>();//存入对应年级的所有班级id
- for (Map<String, Object> el : jianyueData) {
- String gradeId = el.get("source_id").toString();
- if(gradeId.contains("_")){
- gradeId = el.get("source_id").toString().split("_")[1];
- }
- List<BaseClass> classList = classService.list(new QueryWrapper<BaseClass>().lambda().eq(BaseClass::getGradeId, gradeId));
- List<Long> classIds = classList.stream().map(BaseClass::getId).collect(Collectors.toList());
- gradeClassMaps.put(el.get("jianyue_id").toString(), classIds);
- }
- 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);
- String eduYearSerialNo = receiveMsg.get("edu_year_serial_no").toString();
- String startDateStr = receiveMsg.get("start_date").toString();
- String endDateStr = receiveMsg.get("end_date").toString();
- //删除课表信息
- String delSql = "delete from course_table where schedule_date between '" + startDateStr + "'" +
- " and '" + endDateStr + "'" +
- " and class_id in (" + gradeClassMaps.get(eduYearSerialNo).toString().replace("[","").replace("]","")+ ")";
- SqlRunnerAdapter.db().delete(delSql);
- LocalDate startDateObj = LocalDate.parse(startDateStr);
- LocalDate endDateObj = LocalDate.parse(endDateStr);
- long between = ChronoUnit.DAYS.between(startDateObj, endDateObj);
- 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)){
- endTime = endDateObj;
- }
- String endDate = endTime.format(formatter);
- //获取课表并存到数据库
- JsonArray scheduleInfo = dataUtil.getScheduleInfoByGrade(eduYearSerialNo, startDate, endDate);
- allScheduleInfo.addAll(scheduleInfo);
- }
- 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 source_id IS NOT NULL AND jianyue_id != ''";
- 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);
- }
- }
|