Forráskód Böngészése

Merge remote-tracking branch 'origin/dev' into dev

# Conflicts:
#	src/main/resources/sqlScript/20240125_sql.sql
phoenix 1 éve
szülő
commit
dcc0a3f108
21 módosított fájl, 541 hozzáadás és 58 törlés
  1. 32 0
      src/main/java/com/xjrsoft/common/enums/CourseAdjustTypeEnum.java
  2. 3 0
      src/main/java/com/xjrsoft/module/courseTable/entity/CourseTable.java
  3. 11 2
      src/main/java/com/xjrsoft/module/courseTable/service/ICourseTableService.java
  4. 114 17
      src/main/java/com/xjrsoft/module/courseTable/service/impl/CourseTableServiceImpl.java
  5. 1 1
      src/main/java/com/xjrsoft/module/job/JianyuekbBaseDataTask.java
  6. 5 5
      src/main/java/com/xjrsoft/module/job/JianyuekbScheduleTask.java
  7. 35 0
      src/main/java/com/xjrsoft/module/liteflow/node/WfCourseAdjustNode.java
  8. 6 16
      src/main/java/com/xjrsoft/module/schedule/controller/ScheduleController.java
  9. 10 0
      src/main/java/com/xjrsoft/module/schedule/dto/CourseTableDto.java
  10. 96 0
      src/main/java/com/xjrsoft/module/schedule/entity/CourseTableBak.java
  11. 84 0
      src/main/java/com/xjrsoft/module/schedule/entity/WfCourseAdjust.java
  12. 19 0
      src/main/java/com/xjrsoft/module/schedule/mapper/CourseTableBakMapper.java
  13. 0 1
      src/main/java/com/xjrsoft/module/schedule/mapper/JianyueDataMapper.java
  14. 14 0
      src/main/java/com/xjrsoft/module/schedule/mapper/WfCourseAdjustMapper.java
  15. 17 0
      src/main/java/com/xjrsoft/module/schedule/service/IWfCourseAdjustService.java
  16. 18 0
      src/main/java/com/xjrsoft/module/schedule/service/impl/WfCourseAdjustServiceImpl.java
  17. 18 10
      src/main/java/com/xjrsoft/module/schedule/util/DataUtil.java
  18. 4 4
      src/main/java/com/xjrsoft/module/schedule/vo/ClassroomJianyuekbVo.java
  19. 2 2
      src/main/resources/application-dev.yml
  20. 6 0
      src/main/resources/mapper/courseTable/CourseTable.xml
  21. 46 0
      src/main/resources/sqlScript/20240125_sql.sql

+ 32 - 0
src/main/java/com/xjrsoft/common/enums/CourseAdjustTypeEnum.java

@@ -0,0 +1,32 @@
+package com.xjrsoft.common.enums;
+
+/**
+ * @author dzx
+ * @date 2024/2/3
+ */
+public enum CourseAdjustTypeEnum {
+    /**
+     * 顶课
+     * */
+    courseSubstitute("course_substitute", "顶课"),
+    /**
+     * 调课
+     * */
+    courseExchange("course_exchange", "调课");
+
+    final String code;
+    final String value;
+
+    public String getCode() {
+        return this.code;
+    }
+
+    public String getValue() {
+        return this.value;
+    }
+
+    CourseAdjustTypeEnum(final String code, final String message) {
+        this.code = code;
+        this.value = message;
+    }
+}

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

@@ -88,4 +88,7 @@ public class CourseTable implements Serializable {
     @ApiModelProperty("简约课表的id")
     private String jianyueId;
 
+    @ApiModelProperty("上课日期")
+    private LocalDateTime scheduleDate;
+
 }

+ 11 - 2
src/main/java/com/xjrsoft/module/courseTable/service/ICourseTableService.java

@@ -6,11 +6,13 @@ import com.xjrsoft.module.courseTable.entity.CourseTable;
 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.entity.WfCourseAdjust;
 import com.xjrsoft.module.schedule.vo.CourseListVo;
 import com.xjrsoft.module.schedule.vo.CourseTableVo;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -29,7 +31,14 @@ public interface ICourseTableService extends IService<CourseTable> {
 
     CourseTableVo getList(CourseTableDto dto);
 
-    List<CourseListVo> getAdjustList(Long teacherId, String adjustDate);
+    List<CourseListVo> getAdjustList(Long teacherId, Date adjustDate);
 
-    String getPreCheck(Integer preCheckType, Long courseId, Long swapCourseId, String swapDate, Long subTeacherId);
+    String getPreCheck(String preCheckType, Long courseId, Long swapCourseId, Date swapDate, Long subTeacherId);
+
+    /**
+     * 流程审批通过后,根据日期
+     * @param courseAdjust
+     * @return
+     */
+    Boolean adjustCourse(WfCourseAdjust courseAdjust) throws Exception;
 }

+ 114 - 17
src/main/java/com/xjrsoft/module/courseTable/service/impl/CourseTableServiceImpl.java

@@ -14,6 +14,7 @@ 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.CourseAdjustTypeEnum;
 import com.xjrsoft.common.enums.TimeNumberEnum;
 import com.xjrsoft.common.enums.TimePeriodEnum;
 import com.xjrsoft.common.enums.WeekEnum;
@@ -34,6 +35,8 @@ 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.entity.WfCourseAdjust;
+import com.xjrsoft.module.schedule.mapper.CourseTableBakMapper;
 import com.xjrsoft.module.schedule.util.ScheduleUtil;
 import com.xjrsoft.module.schedule.vo.CourseDetailVo;
 import com.xjrsoft.module.schedule.vo.CourseListVo;
@@ -58,6 +61,7 @@ import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -88,6 +92,8 @@ public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, Cours
     private final ClassTimeMapper classTimeMapper;
     private final BaseSemesterMapper baseSemesterMapper;
 
+    private final CourseTableBakMapper courseTableBakMapper;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean wordImport(InputStream inputStream) throws IOException {
@@ -186,12 +192,13 @@ public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, Cours
             tableVo.setSemesterName(baseSemester.getName());
             LocalDateTime now = LocalDateTime.now();
             //计算本周是第几周
+            LocalDateTime startDateTime = LocalDateTime.ofInstant(baseSemester.getStartDate().toInstant(), ZoneId.systemDefault());
+            LocalDateTime endDateTime = LocalDateTime.ofInstant(baseSemester.getEndDate().toInstant(), ZoneId.systemDefault());
+            Duration between = Duration.between(startDateTime, endDateTime);
+            long days = between.toDays();
+            int weeks = (int) Math.ceil((double) days / 7);
             if(dto.getWeek() == null){
-                LocalDateTime startDateTime = LocalDateTime.ofInstant(baseSemester.getStartDate().toInstant(), ZoneId.systemDefault());
-                LocalDateTime endDateTime = LocalDateTime.ofInstant(baseSemester.getEndDate().toInstant(), ZoneId.systemDefault());
-                Duration between = Duration.between(startDateTime, endDateTime);
-                long days = between.toDays();
-                int weeks = (int) Math.ceil((double) days / 7);
+
                 for (int i = 0; i < weeks; i ++){
                     LocalDateTime startDate = startDateTime.plusDays(i * 7).withHour(0).withMinute(0).withSecond(0).withNano(0);
                     LocalDateTime endDate = startDateTime.plusDays((i + 1) * 7).withHour(23).withMinute(59).withSecond(59).withNano(9999);
@@ -200,6 +207,10 @@ public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, Cours
                     }
                 }
             }else{
+                LocalDateTime startDate = startDateTime.plusDays((dto.getWeek() - 1) * 7).withHour(0).withMinute(0).withSecond(0).withNano(0);
+                LocalDateTime endDate = startDateTime.plusDays(dto.getWeek() * 7).withHour(23).withMinute(59).withSecond(59).withNano(9999);
+                dto.setStartDate(startDate);
+                dto.setEndDate(endDate);
                 tableVo.setWeek("第" + dto.getWeek() + "周");
             }
 
@@ -231,11 +242,10 @@ public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, Cours
      * 调课顶课查询
      */
     @Override
-    public List<CourseListVo> getAdjustList(Long teacherId, String adjustDate) {
+    public List<CourseListVo> getAdjustList(Long teacherId, Date 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);
+        if(!ObjectUtil.isEmpty(adjustDate)){
+            LocalDateTime localDateTime = adjustDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
             DayOfWeek dayOfWeek = localDateTime.getDayOfWeek();
             dto.setWeek(dayOfWeek.getValue());
         }
@@ -245,25 +255,25 @@ public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, Cours
     }
 
     @Override
-    public String getPreCheck(Integer preCheckType, Long courseId, Long swapCourseId, String swapDate, Long subTeacherId) {
-        if(preCheckType != null){
-            if(preCheckType == 1){
+    public String getPreCheck(String preCheckType, Long courseId, Long swapCourseId, Date swapDate, Long subTeacherId) {
+        if(preCheckType != null && !"".equals(preCheckType)){
+            if(CourseAdjustTypeEnum.courseExchange.getCode().equals(preCheckType)){
                 CourseTable courseTable = courseTableMapper.selectById(courseId);
                 CourseTable swapCourseTable = courseTableMapper.selectById(swapCourseId);
                 try {
                     JsonObject preCheck = getExtendPreCheck(swapDate, courseTable, swapCourseTable);
-                    if(!preCheck.get("data").getAsBoolean()){
+                    if(!preCheck.get("data").getAsBoolean() && !preCheck.get("msg").isJsonNull()){
                         return preCheck.get("msg").getAsString();
                     }
                 } catch (Exception e) {
                     throw new RuntimeException(e);
                 }
 
-            }else if(preCheckType == 2){
+            }else if(CourseAdjustTypeEnum.courseSubstitute.getCode().equals(preCheckType)){
                 CourseTable courseTable = courseTableMapper.selectById(courseId);
                 try {
                     JsonObject jsonObject = substitutePreTestin(subTeacherId, courseTable);
-                    if(!jsonObject.get("data").getAsBoolean()){
+                    if(!jsonObject.get("data").getAsBoolean() && !jsonObject.get("msg").isJsonNull()){
                         return jsonObject.get("msg").getAsString();
                     }
                 } catch (Exception e) {
@@ -274,6 +284,92 @@ public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, Cours
         return null;
     }
 
+    @Override
+    public Boolean adjustCourse(WfCourseAdjust courseAdjust) throws Exception {
+        if(CourseAdjustTypeEnum.courseExchange.getCode().equals(courseAdjust.getAdjustType())){
+            //调课,将双方课程的日期(schedule_date)、时段(time_period)、节次(time_number)、周(week)、星期几(1-7)(weeks)、星期中文(weeks_cn)对调
+            CourseTable courseTable = courseTableMapper.selectById(courseAdjust.getCourseId());
+            CourseTable swapCourseTable = courseTableMapper.selectById(courseAdjust.getExchangeCourseId());
+
+            CourseTable courseTableBak = BeanUtil.toBean(courseTable, CourseTable.class);
+            CourseTable swapCourseTableBak = BeanUtil.toBean(swapCourseTable, CourseTable.class);
+
+            courseTable.setScheduleDate(swapCourseTableBak.getScheduleDate());
+            courseTable.setTimePeriod(swapCourseTableBak.getTimePeriod());
+            courseTable.setTimeNumber(swapCourseTableBak.getTimeNumber());
+            courseTable.setWeek(swapCourseTableBak.getWeek());
+            courseTable.setWeeks(swapCourseTableBak.getWeeks());
+            courseTable.setWeeksCn(swapCourseTableBak.getWeeksCn());
+            courseTableMapper.updateById(courseTable);
+
+            swapCourseTable.setScheduleDate(courseTableBak.getScheduleDate());
+            swapCourseTable.setTimePeriod(courseTableBak.getTimePeriod());
+            swapCourseTable.setTimeNumber(courseTableBak.getTimeNumber());
+            swapCourseTable.setWeek(courseTableBak.getWeek());
+            swapCourseTable.setWeeks(courseTableBak.getWeeks());
+            swapCourseTable.setWeeksCn(courseTableBak.getWeeksCn());
+            courseTableMapper.updateById(swapCourseTable);
+            //提交调课接口
+            sendExchange(courseTableBak, swapCourseTableBak);
+
+        }else if(CourseAdjustTypeEnum.courseSubstitute.getCode().equals(courseAdjust.getAdjustType())){
+            CourseTable courseTable = courseTableMapper.selectById(courseAdjust.getCourseId());
+
+            courseTable.setTeacherId(courseAdjust.getExchangeTeacherId());
+            courseTableMapper.updateById(courseTable);
+            //提交顶课接口
+            sendSubstitute(courseTable, courseAdjust);
+        }
+        return Boolean.TRUE;
+    }
+
+    /**
+     * 提交顶课接口
+     * @param courseTable
+     * @param courseAdjust
+     * @throws Exception
+     */
+    void sendSubstitute(CourseTable courseTable, WfCourseAdjust courseAdjust) throws Exception {
+        String url = ScheduleUtil.apiUrl + "RescheduleApply/Extend/Substitute/Submit";
+        JsonObject jsonObject = new JsonObject();
+        jsonObject.addProperty("timetableId", courseTable.getJianyueId());
+        jsonObject.addProperty("isCycles", Boolean.FALSE);
+        jsonObject.addProperty("reason", courseAdjust.getReason());
+        JsonArray extendIds = new JsonArray();
+        extendIds.add(courseTable.getTeacherId());
+        jsonObject.add("extendIds", extendIds);
+
+        //获取时间戳
+        long timestamp = System.currentTimeMillis();
+        //生成签名
+        String sign = ScheduleUtil.createSign(timestamp);
+        String result = ScheduleUtil.doPost(url, jsonObject.toString(), sign, timestamp);
+    }
+
+    /**
+     * 提交调课
+     * @param courseTable
+     * @param swapCourseTable
+     * @throws Exception
+     */
+    void sendExchange(CourseTable courseTable, CourseTable swapCourseTable) throws Exception {
+        String url = ScheduleUtil.apiUrl + "RescheduleApply/Extend/Submit";
+        JsonObject jsonObject = new JsonObject();
+        jsonObject.addProperty("timetableId", courseTable.getJianyueId());
+        jsonObject.addProperty("isCycles", Boolean.FALSE);
+
+        JsonArray extendIds = new JsonArray();
+        extendIds.add(courseTable.getTeacherId());
+        jsonObject.add("extendIds", extendIds);
+
+        //获取时间戳
+        long timestamp = System.currentTimeMillis();
+        //生成签名
+        String sign = ScheduleUtil.createSign(timestamp);
+        String result = ScheduleUtil.doPost(url, jsonObject.toString(), sign, timestamp);
+    }
+
+
     /**
      *  顶课预检查
      * @param courseTable
@@ -306,7 +402,7 @@ public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, Cours
      * @param swapCourseTable 对调的课程
      * @return 检查结果
      */
-    JsonObject getExtendPreCheck(String swapDate, CourseTable courseTable, CourseTable swapCourseTable) throws Exception {
+    JsonObject getExtendPreCheck(Date swapDate, CourseTable courseTable, CourseTable swapCourseTable) throws Exception {
         JsonParser jsonParser = new JsonParser();
         String url = ScheduleUtil.apiUrl + "RescheduleApply/Extend/PreTesting";
         JsonObject jsonObject = new JsonObject();
@@ -316,7 +412,8 @@ public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, Cours
 //        jsonObject.addProperty("endDate", "2024-01-31");
 //        jsonObject.addProperty("dayOfweek", 5);
         jsonObject.addProperty("numberOfday", swapCourseTable.getTimeNumber());
-        jsonObject.addProperty("date", swapDate);
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        jsonObject.addProperty("date", swapDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().format(formatter));
         jsonObject.addProperty("reschduleId", courseTable.getJianyueId());
 
         //获取时间戳

+ 1 - 1
src/main/java/com/xjrsoft/module/job/JianyuekbBaseDataTask.java

@@ -101,7 +101,7 @@ public class JianyuekbBaseDataTask {
 
             log.info("数据推送完成");
         } catch (Exception e) {
-            log.error(e.getMessage());
+            log.error(e.getMessage(), e);
         }
     }
 }

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

@@ -30,15 +30,15 @@ public class JianyuekbScheduleTask {
 
     @Scheduled(cron = "0 */15 * * * ?")
     public void RefreshConnectionPool() {
-        doExecute();
-    }
-
-    void doExecute(){
         String active = SpringUtil.getActiveProfile();
         if("prod".equals(active)){
             log.info("非正式环境,无法执行获取课表数据");
             return;
         }
+        //doExecute();
+    }
+
+    void doExecute(){
         log.info("开始获取课表数据");
         DataSource datasource = DatasourceUtil.getDataSource(GlobalConstant.DEFAULT_DATASOURCE_KEY);
         try {
@@ -96,7 +96,7 @@ public class JianyuekbScheduleTask {
             //获取课表并存到数据库
             JsonArray scheduleInfo = dataUtil.getScheduleInfoByClass(classMap, baseSemester.getStartDate(), baseSemester.getEndDate());
             dataUtil.insertCourseTable(use, scheduleInfo, classroomMap, courseMap, semesterMap, teacherMap, classMap);
-            dataUtil.insertClassTime(use, scheduleInfo, baseSemester);
+            dataUtil.insertClassTime(use, scheduleInfo);
             log.info("课表数据获取完成");
         } catch (Exception e) {
             log.error(e.getMessage(), e);

+ 35 - 0
src/main/java/com/xjrsoft/module/liteflow/node/WfCourseAdjustNode.java

@@ -0,0 +1,35 @@
+package com.xjrsoft.module.liteflow.node;
+
+import cn.hutool.core.convert.Convert;
+import com.xjrsoft.module.courseTable.service.ICourseTableService;
+import com.xjrsoft.module.schedule.entity.WfCourseAdjust;
+import com.xjrsoft.module.schedule.service.IWfCourseAdjustService;
+import com.yomahub.liteflow.core.NodeComponent;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * 退书申请
+ */
+@Component("wf_course_adjust_node")
+public class WfCourseAdjustNode extends NodeComponent {
+    @Autowired
+    private ICourseTableService courseTableService;
+
+    @Autowired
+    private IWfCourseAdjustService wfCourseAdjustService;
+
+    @Override
+    public void process() throws Exception {
+        Map<String, Object> params = this.getFirstContextBean();
+        Object value = util.getFormDatKey(params,"id");
+        Long formId = Convert.toLong(value);
+        if (formId != null) {
+            // 数据处理
+            WfCourseAdjust courseAdjust = wfCourseAdjustService.getById(formId);
+            courseTableService.adjustCourse(courseAdjust);
+        }
+    }
+}

+ 6 - 16
src/main/java/com/xjrsoft/module/schedule/controller/ScheduleController.java

@@ -14,7 +14,6 @@ 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;
@@ -52,10 +51,10 @@ import java.util.Map;
 import java.util.Set;
 
 /**
-* @title: 寝室
+* @title: 课表
 * @Author dzx
 * @Date: 2023-12-27
-* @Version 1.0i see you monster歌曲
+* @Version 1.0
 */
 @RestController
 @RequestMapping("/schedule" + "/schedule")
@@ -125,18 +124,7 @@ public class ScheduleController {
         Map<String, Long> classroomMap = dataMap.get(tableName);
         dataUtil.insertCourseTable(use, scheduleInfo, classroomMap, courseMap, semesterMap, teacherMap, classMap);
 
-        //查询当前学期id
-        String currenSemeter = dataUtil.getCurrenSemeter();
-        if(StrUtil.isEmpty(currenSemeter)){
-            return RT.ok(courseReceiveMsg);
-        }
-        sql = "SELECT * FROM base_semester WHERE id = (select source_id from jianyue_data where jianyue_id = '" + currenSemeter + "')";
-        List<BaseSemester> semesters = use.query(sql, BaseSemester.class);
-        if(semesters.isEmpty()){
-            return RT.ok(courseReceiveMsg);
-        }
-        BaseSemester baseSemester = semesters.get(0);
-        dataUtil.insertClassTime(use, scheduleInfo, baseSemester);
+        dataUtil.insertClassTime(use, scheduleInfo);
         return RT.ok(courseReceiveMsg);
     }
 
@@ -152,8 +140,10 @@ public class ScheduleController {
     @ApiOperation(value="今日课表接口(手机端)")
     @SaCheckPermission("room:detail")
     public RT<CourseTableVo> courseInfoDay(CourseTableDto dto){
-        DayOfWeek dayOfWeek = LocalDateTime.now().getDayOfWeek();
+        LocalDateTime now = LocalDateTime.now();
+        DayOfWeek dayOfWeek = now.getDayOfWeek();
         dto.setWeekDay(dayOfWeek.getValue());
+        dto.setToDay(now);
         if(ObjectUtil.isNotNull(dto.getStudentId())){
             List<BaseStudentSchoolRoll> schoolRolls = baseStudentSchoolRollService.list(
                     new QueryWrapper<BaseStudentSchoolRoll>().lambda().eq(BaseStudentSchoolRoll::getUserId, dto.getStudentId())

+ 10 - 0
src/main/java/com/xjrsoft/module/schedule/dto/CourseTableDto.java

@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.time.LocalDateTime;
 
 
 /**
@@ -45,4 +46,13 @@ public class CourseTableDto implements Serializable {
 
     @ApiModelProperty("学生id(家长登录时使用)")
     private Long studentId;
+
+    @ApiModelProperty("开始时间")
+    private LocalDateTime startDate;
+    @ApiModelProperty("结束时间")
+    private LocalDateTime endDate;
+
+    @ApiModelProperty("当前日期")
+    private LocalDateTime toDay;
+
 }

+ 96 - 0
src/main/java/com/xjrsoft/module/schedule/entity/CourseTableBak.java

@@ -0,0 +1,96 @@
+package com.xjrsoft.module.schedule.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 课表备份
+ * </p>
+ *
+ * @author dzx
+ * @date 2024-02-03
+ */
+@Data
+@TableName("course_table_bak")
+@ApiModel(value = "CourseTableBak对象", description = "课表备份")
+public class CourseTableBak implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("主键编号")
+    private Long id;
+
+    @ApiModelProperty("course_table主键编号")
+    private Long courseTableId;
+
+    @ApiModelProperty("学期ID(base_semester)")
+    private Long baseSemesterId;
+
+    @ApiModelProperty("教师编号(用户表)")
+    private Long teacherId;
+
+    @ApiModelProperty("教师名称")
+    private String teacherName;
+
+    @ApiModelProperty("课程编号(course)")
+    private Long courseId;
+
+    @ApiModelProperty("课程名称")
+    private String courseName;
+
+    @ApiModelProperty("班级编号(class)")
+    private Long classId;
+
+    @ApiModelProperty("班级名称")
+    private String className;
+
+    @ApiModelProperty("周")
+    private Integer week;
+
+    @ApiModelProperty("星期几(1-7)")
+    private Integer weeks;
+
+    @ApiModelProperty("星期中文")
+    private String weeksCn;
+
+    @ApiModelProperty("时段(1=上午 2=下午 3=晚上)")
+    private Integer timePeriod;
+
+    @ApiModelProperty("节次")
+    private Integer timeNumber;
+
+    @ApiModelProperty("场地编号(site)")
+    private Long siteId;
+
+    @ApiModelProperty("场地名称")
+    private String siteName;
+
+    @ApiModelProperty("状态 1=正常 2=错误")
+    private Integer status;
+
+    @ApiModelProperty("错误信息描述")
+    private String errMsg;
+
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createDate;
+
+    @TableField(fill = FieldFill.UPDATE)
+    private LocalDateTime modifyDate;
+
+    @ApiModelProperty("源数据")
+    private String sourceData;
+
+    @ApiModelProperty("简约课表的id")
+    private String jianyueId;
+
+    @ApiModelProperty("调顶课申请的id")
+    private Long wfCourseAdjustId;
+}

+ 84 - 0
src/main/java/com/xjrsoft/module/schedule/entity/WfCourseAdjust.java

@@ -0,0 +1,84 @@
+package com.xjrsoft.module.schedule.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 调课顶课申请
+ * </p>
+ *
+ * @author dzx
+ * @date 2024-02-03
+ */
+@Data
+@TableName("wf_course_adjust")
+@ApiModel(value = "WfCourseAdjust对象", description = "调课顶课申请")
+public class WfCourseAdjust implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("主键编号")
+    private Long id;
+
+    @ApiModelProperty("创建人")
+    private Long createUserId;
+
+    @ApiModelProperty("创建时间")
+    private Date createDate;
+
+    @ApiModelProperty("修改人")
+    private Long modifyUserId;
+
+    @ApiModelProperty("修改时间")
+    private Date modifyDate;
+
+    @ApiModelProperty("删除标记")
+    private Integer deleteMark;
+
+    @ApiModelProperty("有效标志")
+    private Integer enabledMark;
+
+    @ApiModelProperty("序号")
+    private Integer sortCode;
+
+    @ApiModelProperty("申请人id")
+    private Long userId;
+
+    @ApiModelProperty("专业部id")
+    private Long deptId;
+
+    @ApiModelProperty("调课类型")
+    private String adjustType;
+
+    @ApiModelProperty("原因")
+    private String reason;
+
+    @ApiModelProperty("调整日期")
+    private Date adjustDate;
+
+    @ApiModelProperty("备注")
+    private String remark;
+
+    @ApiModelProperty("课程id(base_course_subject)")
+    private Long courseId;
+
+    @ApiModelProperty("对调日期")
+    private String exchangeDate;
+
+    @ApiModelProperty("替班教师id(xjr_user)")
+    private Long exchangeTeacherId;
+
+    @ApiModelProperty("对调课程id(base_course_subject)")
+    private Long exchangeCourseId;
+
+    @ApiModelProperty("状态(0:未通过 1:已通过)")
+    private Integer status;
+
+
+}

+ 19 - 0
src/main/java/com/xjrsoft/module/schedule/mapper/CourseTableBakMapper.java

@@ -0,0 +1,19 @@
+package com.xjrsoft.module.schedule.mapper;
+
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.schedule.entity.CourseTableBak;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 课表备份 Mapper 接口
+ * </p>
+ *
+ * @author dzx
+ * @since 2024-02-02
+ */
+@Mapper
+public interface CourseTableBakMapper extends MPJBaseMapper<CourseTableBak> {
+
+
+}

+ 0 - 1
src/main/java/com/xjrsoft/module/schedule/mapper/JianyueDataMapper.java

@@ -5,7 +5,6 @@ import com.xjrsoft.module.schedule.entity.JianyueData;
 import org.apache.ibatis.annotations.Mapper;
 
 /**
-* @title: 寝室
 * @Author dzx
 * @Date: 2023-12-27
 * @Version 1.0

+ 14 - 0
src/main/java/com/xjrsoft/module/schedule/mapper/WfCourseAdjustMapper.java

@@ -0,0 +1,14 @@
+package com.xjrsoft.module.schedule.mapper;
+
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.schedule.entity.JianyueData;
+import com.xjrsoft.module.schedule.entity.WfCourseAdjust;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @Author dzx
+* @Date: 2023-12-27
+*/
+@Mapper
+public interface WfCourseAdjustMapper extends MPJBaseMapper<WfCourseAdjust> {
+}

+ 17 - 0
src/main/java/com/xjrsoft/module/schedule/service/IWfCourseAdjustService.java

@@ -0,0 +1,17 @@
+package com.xjrsoft.module.schedule.service;
+
+import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.schedule.entity.WfCourseAdjust;
+
+/**
+* @title: 班级荣誉
+* @Author szs
+* @Date: 2023-12-06
+* @Version 1.0
+*/
+
+public interface IWfCourseAdjustService extends MPJBaseService<WfCourseAdjust> {
+
+
+
+}

+ 18 - 0
src/main/java/com/xjrsoft/module/schedule/service/impl/WfCourseAdjustServiceImpl.java

@@ -0,0 +1,18 @@
+package com.xjrsoft.module.schedule.service.impl;
+
+import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.module.schedule.entity.WfCourseAdjust;
+import com.xjrsoft.module.schedule.mapper.WfCourseAdjustMapper;
+import com.xjrsoft.module.schedule.service.IWfCourseAdjustService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+* @Author dzx
+* @Date: 2024-02-03
+* @Version 1.0
+*/
+@Service
+@AllArgsConstructor
+public class WfCourseAdjustServiceImpl extends MPJBaseServiceImpl<WfCourseAdjustMapper, WfCourseAdjust> implements IWfCourseAdjustService {
+}

+ 18 - 10
src/main/java/com/xjrsoft/module/schedule/util/DataUtil.java

@@ -14,6 +14,7 @@ import com.xjrsoft.module.organization.entity.Department;
 import com.xjrsoft.module.schedule.vo.ClassroomJianyuekbVo;
 import com.xjrsoft.module.schedule.vo.StudentJianyuekbVo;
 import com.xjrsoft.module.teacher.entity.XjrUser;
+import lombok.extern.slf4j.Slf4j;
 
 import java.sql.SQLException;
 import java.text.SimpleDateFormat;
@@ -27,6 +28,7 @@ import java.util.Map;
  * @author dzx
  * @date 2024/1/23
  */
+@Slf4j
 public class DataUtil {
 
     public Map<Long, String> insertClass(Db db, String tableName, Map<Long, String> gradeMap,
@@ -454,7 +456,7 @@ public class DataUtil {
     public void insertCourseTable(Db db, JsonArray data, Map<String, Long> classroomMap, Map<String, Long> coureseMap,
         Map<String, Long> semesterMap, Map<String, Long> teacherMap, Map<String, Long> classMap) throws SQLException {
         List<String> sqls = new ArrayList<>();
-        Map<Integer, String> week = ScheduleUtil.getWeek();
+//        Map<Integer, String> week = ScheduleUtil.getWeek();
         Map<Integer, Integer> tmePeriod = ScheduleUtil.getTmePeriod();
         int count = 1;
         for (JsonElement jsonElement : data) {
@@ -471,19 +473,24 @@ 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;
+                    + " and time_number = " + timeNumber
+                    + " and weeks = " + asJsonObject.get("dayOfWeek").getAsInt()
+                    + " and course_id = " + coureseMap.get(asJsonObject.get("courseClassId").getAsString())
+                    + " and schedule_date = '" + asJsonObject.get("scheduleDate").getAsString() + "'";
 
-            String sql = "INSERT INTO course_table(id,base_semester_id,teacher_id,teacher_name,course_id,course_name," +
+            String sql = "INSERT INTO course_table(id,base_semester_id,teacher_id,teacher_name,teacher_serial_no,course_id,course_name," +
                     "class_id, class_name,weeks,weeks_cn,time_period,time_number,site_id,site_name,status," +
-                    "create_date,jianyue_id) select " + id + String.format("%04d", count) + ","
+                    "create_date,schedule_date,jianyue_id) select " + id + String.format("%04d", count) + ","
                     + 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() + "',";
+                    + "'" + teacherJson.get("name").getAsString() + "',"
+                    + "'" + teacherJson.get("teacherSerialNo").getAsString() + "',";
+                log.info("teachers.size():" + teachers.size());
             }else{
-                sql += "0,'',";
+                sql += "0,'',null,";
             }
             sql += coureseMap.get(asJsonObject.get("courseClassId").getAsString()) + ","
                 + "'" + asJsonObject.get("courseClassName").getAsString() + "',"
@@ -495,6 +502,7 @@ public class DataUtil {
                 + timeNumber + ","
                 + (classroomMap.get(asJsonObject.get("classRoomSerialNo").getAsString()) == null ? 0 : classroomMap.get(asJsonObject.get("classRoomSerialNo").getAsString())) + ","
                 + "'" + asJsonObject.get("classRoomName").getAsString() + "',1,now(),"
+                + "'" + asJsonObject.get("scheduleDate").getAsString() + "',"
                 + "'" + asJsonObject.get("id").getAsString() + "' FROM DUAL"
                 + " WHERE NOT EXISTS(SELECT * FROM course_table WHERE jianyue_id = '" + asJsonObject.get("id").getAsString() +"' and status = 1)";
             sqls.add(updateSql);
@@ -510,7 +518,7 @@ public class DataUtil {
      * @param data 数据
      *
      */
-    public void insertClassTime(Db db, JsonArray data, BaseSemester baseSemester) throws SQLException {
+    public void insertClassTime(Db db, JsonArray data) throws SQLException {
 
         Map<String, JsonObject> infoMap = new HashMap<>();
         Map<Integer, Integer> tmePeriod = ScheduleUtil.getTmePeriod();
@@ -521,12 +529,12 @@ public class DataUtil {
             json.add("startTime", asJsonObject.get("startTime"));
             json.add("endTime", asJsonObject.get("endTime"));
             json.addProperty("tmePeriod", tmePeriod.get(asJsonObject.get("timeOption").getAsInt()));
+            json.add("numberOfDay", asJsonObject.get("numberOfDay"));
             infoMap.put(numberOfDayName, json);
         }
         List<String> sqls = new ArrayList<>();
         int count = 1;
         for (String number : infoMap.keySet()) {
-            String substring = number.substring(0);
             String substring1 = number.substring(number.length() - 1);
             JsonObject jsonObject = infoMap.get(number);
             long id = System.currentTimeMillis();
@@ -534,7 +542,7 @@ public class DataUtil {
             String sql = "INSERT INTO class_time(id,time_period,number,full_name,short_name,create_date,summer_start_time"
                     + ",summer_end_time,winter_start_time,winter_end_time) select " + id + String.format("%04d", count) + ","
                     + jsonObject.get("tmePeriod").getAsInt() + ","
-                    + substring1 + ","
+                    + jsonObject.get("numberOfDay").getAsInt() + ","
                     + "'" + fullName + "',"
                     + "'" + fullName + "',now(),"
                     + "'" + jsonObject.get("startTime").getAsString() + "',"
@@ -543,7 +551,7 @@ public class DataUtil {
                     + "'" + jsonObject.get("endTime").getAsString() + "' FROM DUAL"
                     + " WHERE NOT EXISTS(SELECT * FROM class_time WHERE time_period = "
                     + jsonObject.get("tmePeriod").getAsInt()
-                    + " and number = " + jsonObject.get("tmePeriod").getAsInt() + ")";
+                    + " and number = " + jsonObject.get("numberOfDay").getAsInt() + ")";
             sqls.add(sql);
             count ++;
         }

+ 4 - 4
src/main/java/com/xjrsoft/module/schedule/vo/ClassroomJianyuekbVo.java

@@ -16,15 +16,15 @@ public class ClassroomJianyuekbVo {
     private String name;
 
 
-    @ApiModelProperty("姓名")
+    @ApiModelProperty("人数")
     private String peopleCount;
 
 
-    @ApiModelProperty("年级id")
-    private Long location;
+    @ApiModelProperty("地址")
+    private String location;
 
 
-    @ApiModelProperty("别名")
+    @ApiModelProperty("楼层")
     private String floor;
 
 

+ 2 - 2
src/main/resources/application-dev.yml

@@ -5,7 +5,7 @@ spring:
   datasource:
     type: com.alibaba.druid.pool.DruidDataSource
     driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://10.150.10.139:3306/tl?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&autoReconnect=true&failOverReadOnly=false
+    url: jdbc:mysql://192.168.144.209:3306/tl?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&autoReconnect=true&failOverReadOnly=false
     username: root
     password: Zwr~-f6H,u6QE^]C-AD_
 #    dynamic:
@@ -19,7 +19,7 @@ spring:
 
   redis:
     database: 11
-    host: 10.150.10.139
+    host: 192.168.144.209
     port: 6379
     password: wa3re~86Hu&ifniyM   # 密码(默认为空)
     timeout: 36000ms  # 连接超时时长(毫秒)

+ 6 - 0
src/main/resources/mapper/courseTable/CourseTable.xml

@@ -35,6 +35,12 @@
                 and t7.major_set_id = #{dto.majorSetId}
             </if>
         </if>
+        <if test="dto.startDate != null and dto.endDate != null">
+            and t1.schedule_date between #{dto.startDate} and #{dto.endDate}
+        </if>
+        <if test="dto.today != null">
+            and t1.schedule_date = #{dto.today}
+        </if>
     </select>
     <select id="getAdjustList" parameterType="com.xjrsoft.module.schedule.dto.CourseTableAdjustDto" resultType="com.xjrsoft.module.schedule.vo.CourseListVo">
         SELECT t1.time_period,t1.time_number,t1.course_name,t2.name AS class_name,t3.name AS classroom_name,t1.id FROM course_table t1

+ 46 - 0
src/main/resources/sqlScript/20240125_sql.sql

@@ -84,6 +84,36 @@ CREATE TABLE course_receive_msg
     `is_callback` INT NULL DEFAULT NULL COMMENT '是否已回调',
     PRIMARY KEY (`id`)
 ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT '课表发布消息接收';
+
+DROP PROCEDURE IF EXISTS createCom;
+DELIMITER $$
+CREATE
+    PROCEDURE createCom()
+BEGIN
+    IF NOT EXISTS(SELECT 1 FROM information_schema.columns  WHERE table_name='course_table' AND COLUMN_NAME = 'schedule_date') THEN
+        ALTER TABLE `course_table`
+            ADD COLUMN `schedule_date` DATE NULL DEFAULT NULL COMMENT '上课日期';
+
+    END IF;
+END$$
+DELIMITER ;
+CALL createCom;
+DROP PROCEDURE createCom;
+DROP PROCEDURE IF EXISTS createCom;
+DELIMITER $$
+CREATE
+    PROCEDURE createCom()
+BEGIN
+    IF NOT EXISTS(SELECT 1 FROM information_schema.columns  WHERE table_name='course_table' AND COLUMN_NAME = 'teacher_serial_no') THEN
+        ALTER TABLE `course_table`
+            ADD COLUMN `teacher_serial_no` VARCHAR(40) NULL DEFAULT NULL COMMENT '教师SerialNo';
+
+    END IF;
+END$$
+DELIMITER ;
+CALL createCom;
+DROP PROCEDURE createCom;
+
 -- ------------------
 -- 课表,字段长度调整
 -- ---------------------
@@ -267,6 +297,22 @@ DELIMITER ;
 CALL createCom;
 DROP PROCEDURE createCom;
 
+DROP PROCEDURE IF EXISTS createCom;
+DELIMITER $$
+CREATE
+    PROCEDURE createCom()
+BEGIN
+    IF NOT EXISTS(SELECT 1 FROM information_schema.columns  WHERE table_name='evaluate_result' AND COLUMN_NAME = 'submit_record_id') THEN
+        ALTER TABLE `evaluate_submit_record`
+            ADD COLUMN `status` INT(0) NULL   COMMENT '状态(1:已评分,0:未评分)';
+    END IF;
+END$$
+DELIMITER ;
+CALL createCom;
+DROP PROCEDURE createCom;
+
+
+
 ALTER TABLE evaluate_submit_record MODIFY id varchar(64);
 -- -------------------------------------------------------------------评价-----------------------------------------------------------------