JianyuekbScheduleTaskTest.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. package com.xjrsoft.module.job;
  2. import cn.hutool.db.Entity;
  3. import cn.hutool.extra.spring.SpringUtil;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.google.gson.JsonArray;
  6. import com.google.gson.JsonElement;
  7. import com.google.gson.JsonObject;
  8. import com.google.gson.JsonParser;
  9. import com.xjrsoft.XjrSoftApplication;
  10. import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
  11. import com.xjrsoft.module.base.entity.BaseClass;
  12. import com.xjrsoft.module.base.service.IBaseClassService;
  13. import com.xjrsoft.module.schedule.entity.CourseReceiveMsg;
  14. import com.xjrsoft.module.schedule.util.DataUtil;
  15. import com.xjrsoft.module.schedule.util.ScheduleUtil;
  16. import org.junit.jupiter.api.Test;
  17. import org.junit.runner.RunWith;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.boot.test.context.SpringBootTest;
  20. import org.springframework.test.context.junit4.SpringRunner;
  21. import java.text.SimpleDateFormat;
  22. import java.time.LocalDate;
  23. import java.time.format.DateTimeFormatter;
  24. import java.time.temporal.ChronoUnit;
  25. import java.util.ArrayList;
  26. import java.util.Arrays;
  27. import java.util.Date;
  28. import java.util.HashMap;
  29. import java.util.HashSet;
  30. import java.util.List;
  31. import java.util.Map;
  32. import java.util.Set;
  33. import java.util.stream.Collectors;
  34. /**
  35. * @author dzx
  36. * @date 2024/8/7
  37. */
  38. @RunWith(SpringRunner.class)
  39. @SpringBootTest(classes = XjrSoftApplication.class)
  40. class JianyuekbScheduleTaskTest {
  41. @Autowired
  42. private IBaseClassService classService;
  43. @Test
  44. public void RefreshConnectionPool() throws Exception {
  45. String active = SpringUtil.getActiveProfile();
  46. String sql = "SELECT * FROM course_receive_msg WHERE delete_mark = 0 AND is_callback = -1";
  47. List<Map<String, Object>> receiveMsgs = SqlRunnerAdapter.db().selectList(sql, CourseReceiveMsg.class);
  48. if(receiveMsgs.isEmpty()){
  49. return;
  50. }
  51. JsonArray allScheduleInfo = new JsonArray();
  52. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
  53. DataUtil dataUtil = new DataUtil();
  54. List<String> eduYearSerialNo1 = receiveMsgs.stream().map(x -> "'" + x.get("edu_year_serial_no").toString() + "'").collect(Collectors.toList());
  55. //查询出传入排课系统的年级和班级
  56. sql = "SELECT * FROM jianyue_data WHERE source_id IS NOT NULL AND jianyue_id != ''" +
  57. " and table_name = 'base_grade'" +
  58. " and jianyue_id in (" + eduYearSerialNo1.toString().replace("[","").replace("]","") + ")";
  59. List<Map<String, Object>> jianyueData = SqlRunnerAdapter.db().selectList(sql);
  60. Map<String, List<Long>> gradeClassMaps = new HashMap<>();//存入对应年级的所有班级id
  61. for (Map<String, Object> el : jianyueData) {
  62. String gradeId = el.get("source_id").toString().split("_")[1];
  63. List<BaseClass> classList = classService.list(new QueryWrapper<BaseClass>().lambda().eq(BaseClass::getGradeId, gradeId));
  64. List<Long> classIds = classList.stream().map(BaseClass::getId).collect(Collectors.toList());
  65. gradeClassMaps.put(el.get("jianyue_id").toString(), classIds);
  66. }
  67. for (Map<String, Object> receiveMsg : receiveMsgs) {
  68. String updSql = "update course_receive_msg set is_callback = 0 where id = " + receiveMsg.get("id").toString();
  69. SqlRunnerAdapter.db().update(updSql);
  70. String eduYearSerialNo = receiveMsg.get("edu_year_serial_no").toString();
  71. String startDateStr = receiveMsg.get("start_date").toString();
  72. String endDateStr = receiveMsg.get("end_date").toString();
  73. //删除课表信息
  74. String delSql = "delete from course_table where schedule_date between '" + startDateStr + "'" +
  75. " and '" + endDateStr + "'" +
  76. " and class_id in (" + gradeClassMaps.get(eduYearSerialNo).toString().replace("[","").replace("]","")+ ")";
  77. SqlRunnerAdapter.db().delete(delSql);
  78. LocalDate startDateObj = LocalDate.parse(startDateStr);
  79. LocalDate endDateObj = LocalDate.parse(endDateStr);
  80. long between = ChronoUnit.DAYS.between(startDateObj, endDateObj);
  81. int times = Integer.parseInt(((between / 7) + 1) + "");
  82. for (int index = 0; index < times; index ++) {
  83. LocalDate statrTime = startDateObj.plusDays(index * 7L);
  84. String startDate = statrTime.format(formatter);
  85. LocalDate endTime = statrTime.plusDays(6L);
  86. if(endTime.isAfter(endDateObj)){
  87. endTime = endDateObj;
  88. }
  89. String endDate = endTime.format(formatter);
  90. //获取课表并存到数据库
  91. JsonArray scheduleInfo = dataUtil.getScheduleInfoByGrade(eduYearSerialNo, startDate, endDate);
  92. allScheduleInfo.addAll(scheduleInfo);
  93. }
  94. updSql = "update course_receive_msg set is_callback = 1 where id = " + receiveMsg.get("id").toString();
  95. SqlRunnerAdapter.db().update(updSql);
  96. }
  97. doExecute(allScheduleInfo);
  98. }
  99. void doExecute(JsonArray scheduleInfo){
  100. String sql = "SELECT distinct table_name FROM jianyue_data WHERE 1 = 1";
  101. List<Map<String, Object>> query = SqlRunnerAdapter.db().selectList(sql);
  102. Set<String> tables = new HashSet<>();
  103. for (Map<String, Object> jianyueData : query) {
  104. tables.add(jianyueData.get("table_name").toString());
  105. }
  106. sql = "SELECT * FROM jianyue_data WHERE 0 = 0";
  107. List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
  108. Map<String, Map<String, String>> dataMap = new HashMap<>();
  109. for (String table : tables) {
  110. Map<String, String> tableData = new HashMap<>();
  111. for (Map<String, Object> jianyueData : list) {
  112. if(!table.equals(jianyueData.get("table_name").toString())){
  113. continue;
  114. }
  115. tableData.put(jianyueData.get("jianyue_id").toString(), jianyueData.get("source_id").toString());
  116. }
  117. dataMap.put(table, tableData);
  118. }
  119. DataUtil dataUtil = new DataUtil();
  120. //获取年级
  121. String tableName = "base_grade";
  122. // Map<String, Long> gradeMap = dataMap.get(tableName);
  123. //获取学期
  124. tableName = "base_semester";
  125. Map<String, String> semesterMap = dataMap.get(tableName);
  126. //获取课程
  127. tableName = "base_course_subject";
  128. Map<String, String> courseMap = dataMap.get(tableName);
  129. //获取教职工
  130. tableName = "base_teacher";
  131. Map<String, String> teacherMap = dataMap.get(tableName);
  132. //获取行政班
  133. tableName = "base_class";
  134. Map<String, String> classMap = dataMap.get(tableName);
  135. tableName = "base_classroom";
  136. Map<String, String> classroomMap = dataMap.get(tableName);
  137. dataUtil.insertCourseTableEntiy(scheduleInfo, classroomMap, courseMap, semesterMap, teacherMap, classMap);
  138. dataUtil.insertClassTime(scheduleInfo);
  139. }
  140. @Test
  141. void updateClass() throws Exception {
  142. String url = ScheduleUtil.apiUrl + "Class/page";
  143. JsonObject pageJson = new JsonObject();
  144. pageJson.addProperty("pageSize", 200);
  145. pageJson.addProperty("pageIndex", 1);
  146. JsonParser parser = new JsonParser();
  147. long timestamp = System.currentTimeMillis();
  148. String sign = ScheduleUtil.createSign(timestamp);
  149. String doPost = ScheduleUtil.doPost(url, pageJson.toString(), sign, timestamp);
  150. System.out.println(doPost);
  151. JsonArray dataList = parser.parse(doPost).getAsJsonObject().get("data").getAsJsonObject().get("dataList").getAsJsonArray();
  152. String sql = "select * from base_class where delete_mark = 0";
  153. List<Map<String, Object>> classList = SqlRunnerAdapter.db().selectList(sql);
  154. Map<String, Long> classMap = new HashMap<>();
  155. for (Map<String, Object> objectMap : classList) {
  156. classMap.put(objectMap.get("name").toString(), (Long)objectMap.get("id"));
  157. }
  158. sql = "select * from jianyue_data where table_name = 'base_class'";
  159. List<Map<String, Object>> classList2 = SqlRunnerAdapter.db().selectList(sql);
  160. Set<String> sourceIds = new HashSet<>();
  161. for (Map<String, Object> objectMap : classList2) {
  162. sourceIds.add(objectMap.get("jianyue_id").toString());
  163. }
  164. String tableName = "jianyue_data";
  165. List<Entity> insertList = new ArrayList<>();
  166. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  167. for (JsonElement jsonElement : dataList) {
  168. JsonObject object = jsonElement.getAsJsonObject();
  169. String serialNo = object.get("serialNo").getAsString();
  170. if(sourceIds.contains(serialNo)){
  171. continue;
  172. }
  173. if(classMap.get(object.get("name").getAsString()) == null){
  174. continue;
  175. }
  176. Entity entity = Entity.create(tableName);
  177. entity.set("create_date", sdf.format(new Date()));
  178. entity.set("table_name", "base_class");
  179. entity.set("source_id", classMap.get(object.get("name").getAsString()));
  180. entity.set("jianyue_id", serialNo);
  181. insertList.add(entity);
  182. }
  183. SqlRunnerAdapter.db().dynamicInsertBatch(tableName, insertList);
  184. }
  185. @Test
  186. void updateClass2() throws Exception {
  187. String url = ScheduleUtil.apiUrl + "Class/page";
  188. JsonObject pageJson = new JsonObject();
  189. pageJson.addProperty("pageSize", 200);
  190. pageJson.addProperty("pageIndex", 1);
  191. JsonParser parser = new JsonParser();
  192. long timestamp = System.currentTimeMillis();
  193. String sign = ScheduleUtil.createSign(timestamp);
  194. String doPost = ScheduleUtil.doPost(url, pageJson.toString(), sign, timestamp);
  195. System.out.println(doPost);
  196. JsonArray dataList = parser.parse(doPost).getAsJsonObject().get("data").getAsJsonObject().get("dataList").getAsJsonArray();
  197. String sql = "select * from base_class where delete_mark = 0";
  198. List<Map<String, Object>> classList = SqlRunnerAdapter.db().selectList(sql);
  199. Map<String, Long> classMap = new HashMap<>();
  200. for (Map<String, Object> objectMap : classList) {
  201. classMap.put(objectMap.get("name").toString(), (Long)objectMap.get("id"));
  202. }
  203. sql = "select * from jianyue_data where table_name = 'base_class'";
  204. List<Map<String, Object>> classList2 = SqlRunnerAdapter.db().selectList(sql);
  205. Set<String> sourceIds = new HashSet<>();
  206. for (Map<String, Object> objectMap : classList2) {
  207. sourceIds.add(objectMap.get("jianyue_id").toString());
  208. }
  209. String tableName = "jianyue_data";
  210. List<Entity> insertList = new ArrayList<>();
  211. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  212. for (JsonElement jsonElement : dataList) {
  213. JsonObject object = jsonElement.getAsJsonObject();
  214. String serialNo = object.get("serialNo").getAsString();
  215. if(sourceIds.contains(serialNo)){
  216. continue;
  217. }
  218. if(classMap.get(object.get("name").getAsString()) == null){
  219. continue;
  220. }
  221. Entity entity = Entity.create(tableName);
  222. entity.set("create_date", sdf.format(new Date()));
  223. entity.set("table_name", "base_class");
  224. entity.set("source_id", classMap.get(object.get("name").getAsString()));
  225. entity.set("jianyue_id", serialNo);
  226. insertList.add(entity);
  227. }
  228. SqlRunnerAdapter.db().dynamicInsertBatch(tableName, insertList);
  229. }
  230. @Test
  231. void test2(){
  232. String sql = "SELECT schedule_date,weeks,time_period,time_number,teacher_id,class_id,COUNT(*) FROM course_table WHERE 1 = 1" +
  233. " GROUP BY schedule_date,weeks,time_period,time_number,teacher_id,class_id HAVING COUNT(*) > 1";
  234. List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
  235. for (Map<String, Object> objectMap : list) {
  236. sql = "SELECT * FROM course_table WHERE schedule_date = '" + objectMap.get("schedule_date").toString() +"'" +
  237. " AND weeks = " + objectMap.get("weeks").toString() +
  238. " AND time_period = " + objectMap.get("time_period").toString() +
  239. " AND time_number = " + objectMap.get("time_number").toString() +
  240. " AND teacher_id = " + objectMap.get("teacher_id").toString() +
  241. " AND class_id = " + objectMap.get("class_id").toString();
  242. List<Map<String, Object>> list2 = SqlRunnerAdapter.db().selectList(sql);
  243. String delSql = "delete from course_table where id = " + list2.get(0).get("id").toString();
  244. SqlRunnerAdapter.db().delete(delSql);
  245. }
  246. }
  247. @Test
  248. void test3(){
  249. String sql = "SELECT * FROM wf_course_adjust t1" +
  250. " INNER JOIN xjr_workflow_form_relation t2 ON t1.id = t2.form_key_value" +
  251. " WHERE adjust_type = 'course_substitute' AND t1.delete_mark = 0 AND t2.current_state = 'COMPLETED'";
  252. List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
  253. for (Map<String, Object> objectMap : list) {
  254. List<String> split = Arrays.asList(objectMap.get("course_id").toString().split(","));
  255. sql = "update course_table set teacher_id = '" + objectMap.get("exchange_teacher_id").toString() + "' WHERE id in (" + split.toString().replace("[", "").replace("]", "") + ")";
  256. SqlRunnerAdapter.db().update(sql);
  257. }
  258. }
  259. @Test
  260. void test4(){
  261. String sql = "SELECT t1.* FROM wf_course_adjust t1" +
  262. " INNER JOIN xjr_workflow_form_relation t2 ON t1.id = t2.form_key_value" +
  263. " LEFT JOIN course_table_bak t3 ON t1.id = t3.wf_course_adjust_id" +
  264. " WHERE t1.adjust_type = 'course_substitute' " +
  265. " AND t2.current_state = 'COMPLETED'" +
  266. " AND t1.delete_mark = 0 " +
  267. " AND t3.wf_course_adjust_id IS NULL";
  268. List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
  269. String tableName = "course_table_bak";
  270. for (Map<String, Object> objectMap : list) {
  271. List<String> split = Arrays.asList(objectMap.get("course_id").toString().split(","));
  272. String insertSql = "INSERT INTO course_table_bak(id,base_semester_id,teacher_id,teacher_name,course_id,course_name,class_id,class_name,WEEK,weeks," +
  273. " weeks_cn,time_period,time_number,site_id,site_name,STATUS,err_msg,create_date,modify_date,jianyue_id,source_data,schedule_date,teacher_serial_no," +
  274. " wf_course_adjust_id,adjust_type)" +
  275. " SELECT id,base_semester_id,teacher_id,teacher_name,course_id,course_name,class_id,class_name,WEEK,weeks," +
  276. " weeks_cn,time_period,time_number,site_id,site_name,STATUS,err_msg,create_date,modify_date,jianyue_id,source_data,schedule_date,teacher_serial_no," +
  277. " " + objectMap.get("id").toString() + ",'course_substitute' FROM course_table " +
  278. " WHERE id IN (" + split.toString().replace("[", "").replace("]", "") + ")";
  279. SqlRunnerAdapter.db().insert(insertSql);
  280. }
  281. }
  282. }