Ver Fonte

classtime

fanxp há 1 ano atrás
pai
commit
d98c4bc8eb

+ 31 - 0
src/main/java/com/xjrsoft/config/TimetableConfig.java

@@ -0,0 +1,31 @@
+package com.xjrsoft.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * 课表时段
+ */
+@Data
+@Component
+@ConfigurationProperties("timetable")
+public class TimetableConfig {
+
+    /**
+     * 夏季开始时间
+     */
+    private String summerStart;
+    /**
+     * 夏季结束时间
+     */
+    private String summerEnd;
+    /**
+     * 冬季开始时间
+     */
+    private String winterStart;
+    /**
+     * 冬季结束时间
+     */
+    private String winterEnd;
+}

+ 3 - 4
src/main/java/com/xjrsoft/module/courseTable/controller/CourseTableController.java

@@ -42,7 +42,7 @@ import java.util.List;
  * @since 2023-09-02 02:19:56
  */
 @RequestMapping("/coursetable")
-@Api(value = "/coursetable",tags = "课表")
+@Api(value = "/coursetable", tags = "课表")
 @AllArgsConstructor
 @RestController
 public class CourseTableController {
@@ -52,15 +52,14 @@ public class CourseTableController {
     @GetMapping("/class")
     @ApiOperation(value = "获取班级课表")
     public R classList(ClassListDto dto) {
-        List<CourseTable> courseTables = courseTableService.list(Wrappers.<CourseTable>query().lambda().eq(CourseTable::getClassId,dto.getClassId()));
-        return R.ok(courseTables);
+        return R.ok(courseTableService.classList(dto));
     }
 
     @PostMapping("/wordimport")
     @ApiOperation(value = "word课表导入")
     @SaCheckPermission("coursetable:wordimport")
     public R wordImport(@RequestParam("file") MultipartFile file) throws IOException {
-       InputStream inputStream =  file.getInputStream();
+        InputStream inputStream = file.getInputStream();
 
         return R.ok(courseTableService.wordImport(inputStream));
     }

+ 4 - 4
src/main/java/com/xjrsoft/module/courseTable/entity/ClassTime.java

@@ -43,16 +43,16 @@ public class ClassTime implements Serializable {
     private String shortName;
 
     @ApiModelProperty("夏天开始时间")
-    private Time summerStartTime;
+    private String summerStartTime;
 
     @ApiModelProperty("夏天结束时间")
-    private Time summerEndTime;
+    private String summerEndTime;
 
     @ApiModelProperty("冬天开始时间")
-    private Time winterStartTime;
+    private String winterStartTime;
 
     @ApiModelProperty("冬天结束时间")
-    private Time winterEndTime;
+    private String winterEndTime;
 
     @ApiModelProperty("备注")
     private String remark;

+ 5 - 0
src/main/java/com/xjrsoft/module/courseTable/service/ICourseTableService.java

@@ -1,10 +1,13 @@
 package com.xjrsoft.module.courseTable.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.xjrsoft.module.courseTable.dto.ClassListDto;
 import com.xjrsoft.module.courseTable.entity.CourseTable;
+import com.xjrsoft.module.courseTable.vo.ClassListVo;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.List;
 
 /**
  * <p>
@@ -17,4 +20,6 @@ import java.io.InputStream;
 public interface ICourseTableService extends IService<CourseTable> {
 
     Boolean wordImport(InputStream inputStream) throws IOException;
+
+    List<ClassListVo> classList(ClassListDto dto);
 }

+ 85 - 4
src/main/java/com/xjrsoft/module/courseTable/service/impl/CourseTableServiceImpl.java

@@ -1,6 +1,9 @@
 package com.xjrsoft.module.courseTable.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateField;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -10,14 +13,19 @@ import com.xjrsoft.common.enums.TimeNumberEnum;
 import com.xjrsoft.common.enums.TimePeriodEnum;
 import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.config.TimetableConfig;
 import com.xjrsoft.module.base.entity.BaseClass;
 import com.xjrsoft.module.base.entity.BaseSemester;
 import com.xjrsoft.module.base.service.IBaseClassService;
 import com.xjrsoft.module.base.service.IBaseSemesterService;
+import com.xjrsoft.module.courseTable.dto.ClassListDto;
 import com.xjrsoft.module.courseTable.dto.CourseTableParse;
+import com.xjrsoft.module.courseTable.entity.ClassTime;
 import com.xjrsoft.module.courseTable.entity.CourseTable;
+import com.xjrsoft.module.courseTable.mapper.ClassTimeMapper;
 import com.xjrsoft.module.courseTable.mapper.CourseTableMapper;
 import com.xjrsoft.module.courseTable.service.ICourseTableService;
+import com.xjrsoft.module.courseTable.vo.ClassListVo;
 import com.xjrsoft.module.personnel.entity.CarManagement;
 import com.xjrsoft.module.system.entity.DictionaryDetail;
 import com.xjrsoft.module.teacher.entity.BaseTeacher;
@@ -33,9 +41,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -58,6 +64,10 @@ public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, Cours
 
     private final IBaseSemesterService baseSemesterService;
 
+    private final TimetableConfig timetableConfig;
+
+    private final ClassTimeMapper classTimeMapper;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean wordImport(InputStream inputStream) throws IOException {
@@ -88,7 +98,7 @@ public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, Cours
         Map<String, XjrUser> xjrUsersMap = xjrUserList.stream().collect(Collectors.toMap(XjrUser::getName, a -> a, (k1, k2) -> k1));
 
         // 清空所有数据
-        courseTableMapper.delete(Wrappers.<CourseTable>query().lambda().eq(CourseTable::getBaseSemesterId,baseSemester.getId()));
+        courseTableMapper.delete(Wrappers.<CourseTable>query().lambda().eq(CourseTable::getBaseSemesterId, baseSemester.getId()));
 
         List<CourseTable> params = new ArrayList<>();
         for (CourseTableParse item : parses) {
@@ -107,6 +117,77 @@ public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, Cours
         return this.saveBatch(params);
     }
 
+    @Override
+    public List<ClassListVo> classList(ClassListDto dto) {
+        List<CourseTable> courseTables = courseTableMapper.selectList(Wrappers.<CourseTable>query().lambda().eq(CourseTable::getClassId, dto.getClassId()));
+
+        List<ClassListVo> classListVos = BeanUtil.copyToList(courseTables, ClassListVo.class);
+        Boolean isCurrentSummer = isCurrentSummer();
+
+        Map<String, ClassTime> classTimeMap = getClassTimeMap();
+
+        // 获取节次时间
+        for (int i = 0; i < classListVos.size(); i++) {
+            ClassListVo c = classListVos.get(i);
+            String key = String.format("%d_%d", c.getTimePeriod(), c.getTimeNumber());
+            ClassTime ct = classTimeMap.get(key);
+            if (ct != null) {
+                if (isCurrentSummer) {
+                    c.setStartTime(ct.getSummerStartTime());
+                    c.setEndTime(ct.getSummerEndTime());
+                } else {
+                    c.setStartTime(ct.getWinterStartTime());
+                    c.setEndTime(ct.getWinterEndTime());
+                }
+            }
+        }
+        return classListVos;
+    }
+
+    /**
+     * 获取节次
+     *
+     * @return
+     */
+    private Map<String, ClassTime> getClassTimeMap() {
+        List<ClassTime> classTimes = classTimeMapper.selectList(null);
+
+        Map<String, ClassTime> result = new HashMap<>();
+
+        for (ClassTime item : classTimes) {
+            String key = String.format("%d_%d", item.getTimePeriod(), item.getNumber());
+            result.put(key, item);
+        }
+
+        return result;
+    }
+
+    /**
+     * 当前时间是否在夏季
+     *
+     * @return
+     */
+    private Boolean isCurrentSummer() {
+        DateTime now = DateUtil.date();
+        DateTime summerStart = DateUtil.parse(String.format("%d-%s", now.year(), timetableConfig.getSummerStart()));
+        DateTime summerEnd = DateUtil.parse(String.format("%d-%s", now.year(), timetableConfig.getSummerEnd()));
+        DateTime winterStart = DateUtil.parse(String.format("%d-%s", now.year(), timetableConfig.getWinterStart()));
+        DateTime winterEnd = DateUtil.parse(String.format("%d-%s", now.year(), timetableConfig.getWinterEnd()));
+
+        // 如果开始时间大于结束时间,开始时间增加1年
+        if (DateUtil.compare(summerStart, summerEnd) > 0) {
+            summerEnd = DateUtil.offset(summerEnd, DateField.DAY_OF_YEAR, 1);
+        }
+        if (DateUtil.compare(winterStart, winterEnd) > 0) {
+            winterEnd = DateUtil.offset(winterEnd, DateField.DAY_OF_YEAR, 1);
+        }
+
+        if (DateUtil.compare(summerStart, now) > 0 && DateUtil.compare(summerEnd, now) < 0) {
+            return true;
+        }
+        return false;
+    }
+
     /**
      * 解析word课表
      *

+ 10 - 0
src/main/java/com/xjrsoft/module/courseTable/vo/ClassListVo.java

@@ -1,6 +1,16 @@
 package com.xjrsoft.module.courseTable.vo;
 
 import com.xjrsoft.module.courseTable.entity.CourseTable;
+import lombok.Data;
 
+@Data
 public class ClassListVo extends CourseTable {
+    /**
+     * 开始时间
+     */
+    private String startTime;
+    /**
+     * 结束时间
+     */
+    private String endTime;
 }

+ 7 - 0
src/main/resources/application-dev.yml

@@ -31,6 +31,13 @@ logging:
   level:
     org.camunda: debug #打印camunda 日志  一般用于 查看camunda  执行sql
 
+# 课表时段
+timetable:
+  summer-start: 05-01
+  summer-end: 09-30
+  winter-start: 10-01
+  winter-end: 04-30
+
 mqtt:
   username: root
   password: qwe123QWE