Kaynağa Gözat

调课顶课申请相关接口

dzx 1 yıl önce
ebeveyn
işleme
b6795e063a

+ 3 - 0
src/main/java/com/xjrsoft/module/courseTable/entity/CourseTable.java

@@ -85,4 +85,7 @@ public class CourseTable implements Serializable {
     @ApiModelProperty("源数据")
     private String sourceData;
 
+    @ApiModelProperty("简约课表的id")
+    private String jianyueId;
+
 }

+ 3 - 1
src/main/java/com/xjrsoft/module/courseTable/service/ICourseTableService.java

@@ -29,5 +29,7 @@ public interface ICourseTableService extends IService<CourseTable> {
 
     CourseTableVo getList(CourseTableDto dto);
 
-    List<CourseListVo> getAdjustList(CourseTableAdjustDto dto);
+    List<CourseListVo> getAdjustList(Long teacherId, String adjustDate);
+
+    String getPreCheck(Integer preCheckType, Long courseId, Long swapCourseId, String swapDate, Long subTeacherId);
 }

+ 99 - 7
src/main/java/com/xjrsoft/module/courseTable/service/impl/CourseTableServiceImpl.java

@@ -11,6 +11,9 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
 import com.xjrsoft.common.enums.TimeNumberEnum;
 import com.xjrsoft.common.enums.TimePeriodEnum;
 import com.xjrsoft.common.enums.WeekEnum;
@@ -31,6 +34,7 @@ import com.xjrsoft.module.courseTable.service.ICourseTableService;
 import com.xjrsoft.module.courseTable.vo.ClassListVo;
 import com.xjrsoft.module.schedule.dto.CourseTableAdjustDto;
 import com.xjrsoft.module.schedule.dto.CourseTableDto;
+import com.xjrsoft.module.schedule.util.ScheduleUtil;
 import com.xjrsoft.module.schedule.vo.CourseDetailVo;
 import com.xjrsoft.module.schedule.vo.CourseListVo;
 import com.xjrsoft.module.schedule.vo.CourseTableVo;
@@ -50,9 +54,9 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.time.DayOfWeek;
 import java.time.Duration;
-import java.time.Instant;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -225,20 +229,108 @@ public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, Cours
 
     /**
      * 调课顶课查询
-     * @param dto
-     * @return
      */
     @Override
-    public List<CourseListVo> getAdjustList(CourseTableAdjustDto dto) {
-
-        if(dto.getAdjustDate() != null){
-            DayOfWeek dayOfWeek = dto.getAdjustDate().getDayOfWeek();
+    public List<CourseListVo> getAdjustList(Long teacherId, String adjustDate) {
+        CourseTableAdjustDto dto = new CourseTableAdjustDto();
+        if(!StrUtil.isEmpty(adjustDate)){
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
+            LocalDateTime localDateTime = LocalDateTime.parse(adjustDate, formatter);
+            DayOfWeek dayOfWeek = localDateTime.getDayOfWeek();
             dto.setWeek(dayOfWeek.getValue());
         }
+        dto.setTeacherId(teacherId);
 
         return courseTableMapper.getAdjustList(dto);
     }
 
+    @Override
+    public String getPreCheck(Integer preCheckType, Long courseId, Long swapCourseId, String swapDate, Long subTeacherId) {
+        if(preCheckType != null){
+            if(preCheckType == 1){
+                CourseTable courseTable = courseTableMapper.selectById(courseId);
+                CourseTable swapCourseTable = courseTableMapper.selectById(swapCourseId);
+                try {
+                    JsonObject preCheck = getExtendPreCheck(swapDate, courseTable, swapCourseTable);
+                    if(!preCheck.get("data").getAsBoolean()){
+                        return preCheck.get("msg").getAsString();
+                    }
+                } catch (Exception e) {
+                    throw new RuntimeException(e);
+                }
+
+            }else if(preCheckType == 2){
+                CourseTable courseTable = courseTableMapper.selectById(courseId);
+                try {
+                    JsonObject jsonObject = substitutePreTestin(subTeacherId, courseTable);
+                    if(!jsonObject.get("data").getAsBoolean()){
+                        return jsonObject.get("msg").getAsString();
+                    }
+                } catch (Exception e) {
+                    throw new RuntimeException(e);
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
+     *  顶课预检查
+     * @param courseTable
+     * @return 检查结果
+     */
+    JsonObject substitutePreTestin(Long subTeacherId, CourseTable courseTable) throws Exception {
+        JsonParser jsonParser = new JsonParser();
+        String url = ScheduleUtil.apiUrl + "RescheduleApply/Extend/Substitute/PreTesting";
+        JsonObject jsonObject = new JsonObject();
+        jsonObject.addProperty("timetableId", courseTable.getJianyueId());
+        jsonObject.addProperty("isCycles", Boolean.FALSE);
+        JsonArray extendIds = new JsonArray();
+        extendIds.add(subTeacherId);
+        jsonObject.add("extendIds", extendIds);
+        //获取时间戳
+        long timestamp = System.currentTimeMillis();
+        //生成签名
+        String sign = ScheduleUtil.createSign(timestamp);
+        String result = ScheduleUtil.doPost(url, jsonObject.toString(), sign, timestamp);
+        if(StrUtil.isEmpty(result)){
+            return null;
+        }
+
+        return jsonParser.parse(result).getAsJsonObject();
+    }
+
+    /**
+     *  调课预检查
+     * @param courseTable 需要调整的课程
+     * @param swapCourseTable 对调的课程
+     * @return 检查结果
+     */
+    JsonObject getExtendPreCheck(String swapDate, CourseTable courseTable, CourseTable swapCourseTable) throws Exception {
+        JsonParser jsonParser = new JsonParser();
+        String url = ScheduleUtil.apiUrl + "RescheduleApply/Extend/PreTesting";
+        JsonObject jsonObject = new JsonObject();
+        jsonObject.addProperty("timetableId", courseTable.getJianyueId());
+        jsonObject.addProperty("isCycles", Boolean.FALSE);
+//        jsonObject.addProperty("startDate", "2024-01-01");
+//        jsonObject.addProperty("endDate", "2024-01-31");
+//        jsonObject.addProperty("dayOfweek", 5);
+        jsonObject.addProperty("numberOfday", swapCourseTable.getTimeNumber());
+        jsonObject.addProperty("date", swapDate);
+        jsonObject.addProperty("reschduleId", courseTable.getJianyueId());
+
+        //获取时间戳
+        long timestamp = System.currentTimeMillis();
+        //生成签名
+        String sign = ScheduleUtil.createSign(timestamp);
+        String result = ScheduleUtil.doPost(url, jsonObject.toString(), sign, timestamp);
+        if(StrUtil.isEmpty(result)){
+            return null;
+        }
+
+        return jsonParser.parse(result).getAsJsonObject();
+    }
+
     /**
      * 获取节次
      *

+ 6 - 0
src/main/java/com/xjrsoft/module/job/JianyuekbScheduleTask.java

@@ -2,6 +2,7 @@ package com.xjrsoft.module.job;
 
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.db.Db;
+import cn.hutool.extra.spring.SpringUtil;
 import com.google.gson.JsonArray;
 import com.xjrsoft.common.constant.GlobalConstant;
 import com.xjrsoft.common.utils.DatasourceUtil;
@@ -33,6 +34,11 @@ public class JianyuekbScheduleTask {
     }
 
     void doExecute(){
+        String active = SpringUtil.getActiveProfile();
+        if("prod".equals(active)){
+            log.info("非正式环境,无法执行获取课表数据");
+            return;
+        }
         log.info("开始获取课表数据");
         DataSource datasource = DatasourceUtil.getDataSource(GlobalConstant.DEFAULT_DATASOURCE_KEY);
         try {

+ 90 - 15
src/main/java/com/xjrsoft/module/schedule/controller/ScheduleController.java

@@ -7,20 +7,25 @@ import cn.hutool.core.util.StrUtil;
 import cn.hutool.db.Db;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
 import com.xjrsoft.common.constant.GlobalConstant;
 import com.xjrsoft.common.enums.DeleteMark;
 import com.xjrsoft.common.enums.EnabledMark;
 import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.utils.DatasourceUtil;
 import com.xjrsoft.module.base.entity.BaseSemester;
+import com.xjrsoft.module.courseTable.entity.CourseTable;
 import com.xjrsoft.module.courseTable.service.ICourseTableService;
 import com.xjrsoft.module.schedule.dto.CourseTableAdjustDto;
 import com.xjrsoft.module.schedule.dto.CourseTableDto;
+import com.xjrsoft.module.schedule.dto.CourseTablePreCheckDto;
 import com.xjrsoft.module.schedule.entity.CourseReceiveMsg;
 import com.xjrsoft.module.schedule.entity.JianyueData;
 import com.xjrsoft.module.schedule.service.ICourseReceiveMsgService;
 import com.xjrsoft.module.schedule.service.IJianyueDataService;
 import com.xjrsoft.module.schedule.util.DataUtil;
+import com.xjrsoft.module.schedule.util.ScheduleUtil;
 import com.xjrsoft.module.schedule.vo.CourseListVo;
 import com.xjrsoft.module.schedule.vo.CourseTableVo;
 import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
@@ -38,6 +43,7 @@ import org.springframework.web.bind.annotation.RestController;
 import javax.sql.DataSource;
 import java.time.DayOfWeek;
 import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -182,27 +188,96 @@ public class ScheduleController {
     @ApiOperation(value = "可以调课的课程")
     @SaCheckPermission("evaluateobject:detail")
     public RT<List<CourseListVo>> adjustList(CourseTableAdjustDto dto){
-        if(dto.getAdjustDate() == null || dto.getTeacherId() == null){
-            return RT.error("请传入调整日期和教师id");
-        }
-        List<CourseListVo> list = courseTableService.getAdjustList(dto);
-        if(list.isEmpty()){
-            return RT.error("暂无可调课程");
-        }
-        return RT.ok(list);
+//        if(dto.getAdjustDate() == null || dto.getTeacherId() == null){
+//            return RT.error("请传入调整日期和教师id");
+//        }
+//        List<CourseListVo> list = courseTableService.getAdjustList(dto);
+//        if(list.isEmpty()){
+//            return RT.error("暂无可调课程");
+//        }
+        return RT.ok();
     }
 
     @GetMapping(value = "/pre-check")
     @ApiOperation(value = "预检查")
     @SaCheckPermission("evaluateobject:detail")
-    public RT<List<CourseListVo>> preCheck(CourseTableAdjustDto dto){
-        if(dto.getAdjustDate() == null || dto.getTeacherId() == null){
-            return RT.error("请传入调整日期和教师id");
+    public RT<String> preCheck(CourseTablePreCheckDto dto) throws Exception {
+        if(dto.getPreCheckType() != null){
+            if(dto.getPreCheckType() == 1){
+                CourseTable courseTable = courseTableService.getById(dto.getCourseId());
+                CourseTable swapCourseTable = courseTableService.getById(dto.getSwapCourseId());
+                JsonObject preCheck = getExtendPreCheck(dto, courseTable, swapCourseTable);
+                if(!preCheck.get("data").getAsBoolean()){
+                   return RT.error(preCheck.get("msg").getAsString());
+                }
+            }else if(dto.getPreCheckType() == 2){
+                CourseTable courseTable = courseTableService.getById(dto.getCourseId());
+                JsonObject jsonObject = substitutePreTestin(dto, courseTable);
+                if(!jsonObject.get("data").getAsBoolean()){
+                    return RT.error(jsonObject.get("msg").getAsString());
+                }
+            }
+        }
+
+        return RT.ok("ok");
+    }
+
+    /**
+     *  顶课预检查
+     * @param dto
+     * @param courseTable
+     * @return 检查结果
+     */
+    JsonObject substitutePreTestin(CourseTablePreCheckDto dto, CourseTable courseTable) throws Exception {
+        JsonParser jsonParser = new JsonParser();
+        String url = ScheduleUtil.apiUrl + "RescheduleApply/Extend/Substitute/PreTesting";
+        JsonObject jsonObject = new JsonObject();
+        jsonObject.addProperty("timetableId", courseTable.getJianyueId());
+        jsonObject.addProperty("isCycles", Boolean.FALSE);
+        JsonArray extendIds = new JsonArray();
+        extendIds.add(dto.getSubTeacherId());
+        jsonObject.add("extendIds", extendIds);
+        //获取时间戳
+        long timestamp = System.currentTimeMillis();
+        //生成签名
+        String sign = ScheduleUtil.createSign(timestamp);
+        String result = ScheduleUtil.doPost(url, jsonObject.toString(), sign, timestamp);
+        if(StrUtil.isEmpty(result)){
+            return null;
         }
-        List<CourseListVo> list = courseTableService.getAdjustList(dto);
-        if(list.isEmpty()){
-            return RT.error("暂无可调课程");
+
+        return jsonParser.parse(result).getAsJsonObject();
+    }
+
+    /**
+     *  调课预检查
+     * @param courseTable 需要调整的课程
+     * @param swapCourseTable 对调的课程
+     * @return 检查结果
+     */
+    JsonObject getExtendPreCheck(CourseTablePreCheckDto dto, CourseTable courseTable, CourseTable swapCourseTable) throws Exception {
+        JsonParser jsonParser = new JsonParser();
+        String url = ScheduleUtil.apiUrl + "RescheduleApply/Extend/PreTesting";
+        JsonObject jsonObject = new JsonObject();
+        jsonObject.addProperty("timetableId", courseTable.getJianyueId());
+        jsonObject.addProperty("isCycles", Boolean.FALSE);
+//        jsonObject.addProperty("startDate", "2024-01-01");
+//        jsonObject.addProperty("endDate", "2024-01-31");
+//        jsonObject.addProperty("dayOfweek", 5);
+        jsonObject.addProperty("numberOfday", swapCourseTable.getTimeNumber());
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        jsonObject.addProperty("date", dto.getSwapDate().format(formatter));
+        jsonObject.addProperty("reschduleId", courseTable.getJianyueId());
+
+        //获取时间戳
+        long timestamp = System.currentTimeMillis();
+        //生成签名
+        String sign = ScheduleUtil.createSign(timestamp);
+        String result = ScheduleUtil.doPost(url, jsonObject.toString(), sign, timestamp);
+        if(StrUtil.isEmpty(result)){
+            return null;
         }
-        return RT.ok(list);
+
+        return jsonParser.parse(result).getAsJsonObject();
     }
 }

+ 1 - 1
src/main/java/com/xjrsoft/module/schedule/dto/CourseTableAdjustDto.java

@@ -21,7 +21,7 @@ public class CourseTableAdjustDto implements Serializable {
     @ApiModelProperty("教师id")
     private Long teacherId;
     @ApiModelProperty("调整日期")
-    private LocalDateTime adjustDate;
+    private String adjustDate;
     @ApiModelProperty("周几(后台自动计算)")
     private Integer week;
 

+ 16 - 6
src/main/java/com/xjrsoft/module/schedule/dto/CourseTablePreCheckDto.java

@@ -18,11 +18,21 @@ public class CourseTablePreCheckDto implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    @ApiModelProperty("教师id")
-    private Long teacherId;
-    @ApiModelProperty("调整日期")
-    private LocalDateTime adjustDate;
-    @ApiModelProperty("周几(后台自动计算)")
-    private Integer week;
+    @ApiModelProperty("调课类型(1:调课 2:顶课)")
+    private Integer preCheckType;
+
+    @ApiModelProperty("需要调课的课程id")
+    private Long courseId;
+
+    @ApiModelProperty("被对调的课程id(调课时使用)")
+    private Long swapCourseId;
+
+    @ApiModelProperty("被对调的日期(调课时使用)")
+    private LocalDateTime swapDate;
+
+
+    @ApiModelProperty("顶课教师id(顶课时使用)")
+    private Long subTeacherId;
+
 
 }

+ 5 - 4
src/main/java/com/xjrsoft/module/schedule/util/DataUtil.java

@@ -66,7 +66,7 @@ public class DataUtil {
     }
 
     public Map<Long, String> insertClassRoom(Db db, String tableName, String schoolDistrictId, Map<Long, String> ids) throws Exception {
-        String sql = "SELECT t1.name, t1.capacity AS people_count,t2.address AS location, t1.floor_num AS floor, t1.id AS extendId FROM " + tableName + " t1" +
+        String sql = "SELECT t1.name, t1.capacity AS people_count,t2.name AS location, t1.floor_num AS floor, t1.id AS extendId FROM " + tableName + " t1" +
                 " INNER JOIN base_office_build t2 ON t1.office_build_id = t2.id" +
                 " WHERE t1.delete_mark = 0 AND t2.delete_mark = 0";
         List<ClassroomJianyuekbVo> dataList = db.query(sql, ClassroomJianyuekbVo.class);
@@ -82,7 +82,7 @@ public class DataUtil {
             paramJson.addProperty("name", classroom.getName());
 
             paramJson.addProperty("peopleCount", 50);
-            paramJson.addProperty("location", "无");
+            paramJson.addProperty("location", classroom.getLocation());
             paramJson.addProperty("extendId", classroom.getExtendId());
             paramJson.addProperty("floor", classroom.getFloor());
             //获取时间戳
@@ -472,7 +472,6 @@ public class DataUtil {
             String updateSql = "update course_table set status = 3 where class_id = " + classMap.get(asJsonObject.get("classSerialNo").getAsString())
                     + " and time_period = " + tmePeriod.get(asJsonObject.get("timeOption").getAsInt())
                     + " and time_number = " + timeNumber;
-            sqls.add(updateSql);
 
             String sql = "INSERT INTO course_table(id,base_semester_id,teacher_id,teacher_name,course_id,course_name," +
                     "class_id, class_name,weeks,weeks_cn,time_period,time_number,site_id,site_name,status," +
@@ -480,6 +479,7 @@ public class DataUtil {
                     + semesterMap.get(asJsonObject.get("semesterSerialNo").getAsString()) + ",";
             if(teachers.size() > 0){
                 JsonObject teacherJson = teachers.get(0).getAsJsonObject();
+                updateSql += " and teacher_id = " + teacherMap.get(teacherJson.get("teacherSerialNo").getAsString());
                 sql += teacherMap.get(teacherJson.get("teacherSerialNo").getAsString()) + ","
                     + "'" + teacherJson.get("name").getAsString() + "',";
             }else{
@@ -496,7 +496,8 @@ public class DataUtil {
                 + (classroomMap.get(asJsonObject.get("classRoomSerialNo").getAsString()) == null ? 0 : classroomMap.get(asJsonObject.get("classRoomSerialNo").getAsString())) + ","
                 + "'" + asJsonObject.get("classRoomName").getAsString() + "',1,now(),"
                 + "'" + asJsonObject.get("id").getAsString() + "' FROM DUAL"
-                + " WHERE NOT EXISTS(SELECT * FROM course_table WHERE jianyue_id = '" + asJsonObject.get("id").getAsString() +"' )";
+                + " WHERE NOT EXISTS(SELECT * FROM course_table WHERE jianyue_id = '" + asJsonObject.get("id").getAsString() +"' and status = 1)";
+            sqls.add(updateSql);
             sqls.add(sql);
             count ++;
         }