JianyuekbScheduleTaskTest.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336
  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 sql = "SELECT * FROM course_receive_msg WHERE delete_mark = 0 AND is_callback = -1";
  46. List<Map<String, Object>> receiveMsgs = SqlRunnerAdapter.db().selectList(sql);
  47. if(receiveMsgs.isEmpty()){
  48. return;
  49. }
  50. JsonArray allScheduleInfo = new JsonArray();
  51. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
  52. DataUtil dataUtil = new DataUtil();
  53. //查询出传入排课系统的年级和班级
  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();
  63. String orgId = null;
  64. if(gradeId.contains("_")){
  65. String[] split = el.get("source_id").toString().split("_");
  66. gradeId = split[1];
  67. orgId = split[0];
  68. }
  69. List<BaseClass> classList = classService.list(
  70. new QueryWrapper<BaseClass>().lambda()
  71. .eq(BaseClass::getGradeId, gradeId)
  72. .eq(BaseClass::getOrgId, orgId)
  73. );
  74. List<Long> classIds = classList.stream().map(BaseClass::getId).collect(Collectors.toList());
  75. gradeClassMaps.put(el.get("jianyue_id").toString(), classIds);
  76. }
  77. LocalDate today = LocalDate.now();
  78. for (Map<String, Object> receiveMsg : receiveMsgs) {
  79. String updSql = "update course_receive_msg set is_callback = 0 where id = " + receiveMsg.get("id").toString();
  80. SqlRunnerAdapter.db().update(updSql);
  81. String eduYearSerialNo = receiveMsg.get("edu_year_serial_no").toString();
  82. String startDateStr = receiveMsg.get("start_date").toString();
  83. LocalDate startDateObj = LocalDate.parse(startDateStr);
  84. String endDateStr = receiveMsg.get("end_date").toString();
  85. LocalDate endDateObj = LocalDate.parse(endDateStr);
  86. if(today.isAfter(startDateObj)){
  87. startDateStr = today.format(formatter);
  88. }
  89. //删除课表信息;
  90. String classIds = gradeClassMaps.get(eduYearSerialNo).toString().replace("[", "").replace("]", "");
  91. String delSql = "delete from course_table where schedule_date between '" + startDateStr + "'" +
  92. " and '" + endDateStr +
  93. "' and class_id in (" + classIds + ")";
  94. SqlRunnerAdapter.db().delete(delSql);
  95. long between = ChronoUnit.DAYS.between(startDateObj, endDateObj);
  96. int times = Integer.parseInt(((between / 7) + 1) + "");
  97. for (int index = 0; index < times; index ++) {
  98. LocalDate statrTime = startDateObj.plusDays(index * 7L);
  99. String startDate = statrTime.format(formatter);
  100. LocalDate endTime = statrTime.plusDays(6L);
  101. if(endTime.isAfter(endDateObj)){
  102. endTime = endDateObj;
  103. }
  104. String endDate = endTime.format(formatter);
  105. //获取课表并存到数据库
  106. JsonArray scheduleInfo = dataUtil.getScheduleInfoByGrade(eduYearSerialNo, startDate, endDate);
  107. allScheduleInfo.addAll(scheduleInfo);
  108. }
  109. updSql = "update course_receive_msg set is_callback = 1 where id = " + receiveMsg.get("id").toString();
  110. SqlRunnerAdapter.db().update(updSql);
  111. //作废调课和顶课
  112. updSql = "UPDATE wf_course_adjust SET enabled_mark = 0 WHERE adjust_type BETWEEN '" + startDateStr + "'" +
  113. " and '" + endDateStr + "' and class_id in (" + classIds + ")";
  114. SqlRunnerAdapter.db().update(updSql);
  115. }
  116. doExecute(allScheduleInfo);
  117. }
  118. void doExecute(JsonArray scheduleInfo){
  119. String sql = "SELECT distinct table_name FROM jianyue_data WHERE 1 = 1";
  120. List<Map<String, Object>> query = SqlRunnerAdapter.db().selectList(sql);
  121. Set<String> tables = new HashSet<>();
  122. for (Map<String, Object> jianyueData : query) {
  123. tables.add(jianyueData.get("table_name").toString());
  124. }
  125. sql = "SELECT * FROM jianyue_data WHERE 0 = 0";
  126. List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
  127. Map<String, Map<String, String>> dataMap = new HashMap<>();
  128. for (String table : tables) {
  129. Map<String, String> tableData = new HashMap<>();
  130. for (Map<String, Object> jianyueData : list) {
  131. if(!table.equals(jianyueData.get("table_name").toString())){
  132. continue;
  133. }
  134. tableData.put(jianyueData.get("jianyue_id").toString(), jianyueData.get("source_id").toString());
  135. }
  136. dataMap.put(table, tableData);
  137. }
  138. DataUtil dataUtil = new DataUtil();
  139. //获取年级
  140. String tableName = "base_grade";
  141. // Map<String, Long> gradeMap = dataMap.get(tableName);
  142. //获取学期
  143. tableName = "base_semester";
  144. Map<String, String> semesterMap = dataMap.get(tableName);
  145. //获取课程
  146. tableName = "base_course_subject";
  147. Map<String, String> courseMap = dataMap.get(tableName);
  148. //获取教职工
  149. tableName = "base_teacher";
  150. Map<String, String> teacherMap = dataMap.get(tableName);
  151. //获取行政班
  152. tableName = "base_class";
  153. Map<String, String> classMap = dataMap.get(tableName);
  154. tableName = "base_classroom";
  155. Map<String, String> classroomMap = dataMap.get(tableName);
  156. dataUtil.insertCourseTableEntiy(scheduleInfo, classroomMap, courseMap, semesterMap, teacherMap, classMap);
  157. dataUtil.insertClassTime(scheduleInfo);
  158. }
  159. @Test
  160. void updateClass() throws Exception {
  161. String url = ScheduleUtil.apiUrl + "Class/page";
  162. JsonObject pageJson = new JsonObject();
  163. pageJson.addProperty("pageSize", 200);
  164. pageJson.addProperty("pageIndex", 1);
  165. JsonParser parser = new JsonParser();
  166. long timestamp = System.currentTimeMillis();
  167. String sign = ScheduleUtil.createSign(timestamp);
  168. String doPost = ScheduleUtil.doPost(url, pageJson.toString(), sign, timestamp);
  169. System.out.println(doPost);
  170. JsonArray dataList = parser.parse(doPost).getAsJsonObject().get("data").getAsJsonObject().get("dataList").getAsJsonArray();
  171. String sql = "select * from base_class where delete_mark = 0";
  172. List<Map<String, Object>> classList = SqlRunnerAdapter.db().selectList(sql);
  173. Map<String, Long> classMap = new HashMap<>();
  174. for (Map<String, Object> objectMap : classList) {
  175. classMap.put(objectMap.get("name").toString(), (Long)objectMap.get("id"));
  176. }
  177. sql = "select * from jianyue_data where table_name = 'base_class'";
  178. List<Map<String, Object>> classList2 = SqlRunnerAdapter.db().selectList(sql);
  179. Set<String> sourceIds = new HashSet<>();
  180. for (Map<String, Object> objectMap : classList2) {
  181. sourceIds.add(objectMap.get("jianyue_id").toString());
  182. }
  183. String tableName = "jianyue_data";
  184. List<Entity> insertList = new ArrayList<>();
  185. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  186. for (JsonElement jsonElement : dataList) {
  187. JsonObject object = jsonElement.getAsJsonObject();
  188. String serialNo = object.get("serialNo").getAsString();
  189. if(sourceIds.contains(serialNo)){
  190. continue;
  191. }
  192. if(classMap.get(object.get("name").getAsString()) == null){
  193. continue;
  194. }
  195. Entity entity = Entity.create(tableName);
  196. entity.set("create_date", sdf.format(new Date()));
  197. entity.set("table_name", "base_class");
  198. entity.set("source_id", classMap.get(object.get("name").getAsString()));
  199. entity.set("jianyue_id", serialNo);
  200. insertList.add(entity);
  201. }
  202. SqlRunnerAdapter.db().dynamicInsertBatch(tableName, insertList);
  203. }
  204. @Test
  205. void updateClass2() throws Exception {
  206. String url = ScheduleUtil.apiUrl + "Class/page";
  207. JsonObject pageJson = new JsonObject();
  208. pageJson.addProperty("pageSize", 200);
  209. pageJson.addProperty("pageIndex", 1);
  210. JsonParser parser = new JsonParser();
  211. long timestamp = System.currentTimeMillis();
  212. String sign = ScheduleUtil.createSign(timestamp);
  213. String doPost = ScheduleUtil.doPost(url, pageJson.toString(), sign, timestamp);
  214. System.out.println(doPost);
  215. JsonArray dataList = parser.parse(doPost).getAsJsonObject().get("data").getAsJsonObject().get("dataList").getAsJsonArray();
  216. String sql = "select * from base_class where delete_mark = 0";
  217. List<Map<String, Object>> classList = SqlRunnerAdapter.db().selectList(sql);
  218. Map<String, Long> classMap = new HashMap<>();
  219. for (Map<String, Object> objectMap : classList) {
  220. classMap.put(objectMap.get("name").toString(), (Long)objectMap.get("id"));
  221. }
  222. sql = "select * from jianyue_data where table_name = 'base_class'";
  223. List<Map<String, Object>> classList2 = SqlRunnerAdapter.db().selectList(sql);
  224. Set<String> sourceIds = new HashSet<>();
  225. for (Map<String, Object> objectMap : classList2) {
  226. sourceIds.add(objectMap.get("jianyue_id").toString());
  227. }
  228. String tableName = "jianyue_data";
  229. List<Entity> insertList = new ArrayList<>();
  230. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  231. for (JsonElement jsonElement : dataList) {
  232. JsonObject object = jsonElement.getAsJsonObject();
  233. String serialNo = object.get("serialNo").getAsString();
  234. if(sourceIds.contains(serialNo)){
  235. continue;
  236. }
  237. if(classMap.get(object.get("name").getAsString()) == null){
  238. continue;
  239. }
  240. Entity entity = Entity.create(tableName);
  241. entity.set("create_date", sdf.format(new Date()));
  242. entity.set("table_name", "base_class");
  243. entity.set("source_id", classMap.get(object.get("name").getAsString()));
  244. entity.set("jianyue_id", serialNo);
  245. insertList.add(entity);
  246. }
  247. SqlRunnerAdapter.db().dynamicInsertBatch(tableName, insertList);
  248. }
  249. @Test
  250. void test2(){
  251. String sql = "SELECT schedule_date,weeks,time_period,time_number,teacher_id,class_id,COUNT(*) FROM course_table WHERE 1 = 1" +
  252. " GROUP BY schedule_date,weeks,time_period,time_number,teacher_id,class_id HAVING COUNT(*) > 1";
  253. List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
  254. for (Map<String, Object> objectMap : list) {
  255. sql = "SELECT * FROM course_table WHERE schedule_date = '" + objectMap.get("schedule_date").toString() +"'" +
  256. " AND weeks = " + objectMap.get("weeks").toString() +
  257. " AND time_period = " + objectMap.get("time_period").toString() +
  258. " AND time_number = " + objectMap.get("time_number").toString() +
  259. " AND teacher_id = " + objectMap.get("teacher_id").toString() +
  260. " AND class_id = " + objectMap.get("class_id").toString();
  261. List<Map<String, Object>> list2 = SqlRunnerAdapter.db().selectList(sql);
  262. String delSql = "delete from course_table where id = " + list2.get(0).get("id").toString();
  263. SqlRunnerAdapter.db().delete(delSql);
  264. }
  265. }
  266. @Test
  267. void test3(){
  268. String sql = "SELECT * FROM wf_course_adjust t1" +
  269. " INNER JOIN xjr_workflow_form_relation t2 ON t1.id = t2.form_key_value" +
  270. " WHERE adjust_type = 'course_substitute' AND t1.delete_mark = 0 AND t2.current_state = 'COMPLETED'";
  271. List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
  272. for (Map<String, Object> objectMap : list) {
  273. List<String> split = Arrays.asList(objectMap.get("course_id").toString().split(","));
  274. sql = "update course_table set teacher_id = '" + objectMap.get("exchange_teacher_id").toString() + "' WHERE id in (" + split.toString().replace("[", "").replace("]", "") + ")";
  275. SqlRunnerAdapter.db().update(sql);
  276. }
  277. }
  278. @Test
  279. void test4(){
  280. String sql = "SELECT t1.* FROM wf_course_adjust t1" +
  281. " INNER JOIN xjr_workflow_form_relation t2 ON t1.id = t2.form_key_value" +
  282. " LEFT JOIN course_table_bak t3 ON t1.id = t3.wf_course_adjust_id" +
  283. " WHERE t1.adjust_type = 'course_substitute' " +
  284. " AND t2.current_state = 'COMPLETED'" +
  285. " AND t1.delete_mark = 0 " +
  286. " AND t3.wf_course_adjust_id IS NULL";
  287. List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
  288. String tableName = "course_table_bak";
  289. for (Map<String, Object> objectMap : list) {
  290. List<String> split = Arrays.asList(objectMap.get("course_id").toString().split(","));
  291. 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," +
  292. " 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," +
  293. " wf_course_adjust_id,adjust_type)" +
  294. " SELECT id,base_semester_id,teacher_id,teacher_name,course_id,course_name,class_id,class_name,WEEK,weeks," +
  295. " 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," +
  296. " " + objectMap.get("id").toString() + ",'course_substitute' FROM course_table " +
  297. " WHERE id IN (" + split.toString().replace("[", "").replace("]", "") + ")";
  298. SqlRunnerAdapter.db().insert(insertSql);
  299. }
  300. }
  301. }