caozixuan 4 年之前
父節點
當前提交
5422ce3442

+ 10 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/BasicCourseService.java

@@ -22,9 +22,18 @@ public interface BasicCourseService extends IService<BasicCourse> {
 
     List<BasicCourse> list(String param);
 
-    boolean saveCourse(BasicCourse course);
+    boolean saveCourse(BasicCourse course,Long userId);
 
     boolean remove(Long id);
 
     List<BasicCourse> listCoursesByUserId(Long userId);
+
+    /**
+     * 校验课程信息
+     * @param schoolId 学校id
+     * @param courseCode 课程代码
+     * @param courseName 课程名称
+     * @param userId 当前用户id
+     */
+    void verifyCourseInfo(Long schoolId,String courseCode,String courseName,Long userId);
 }

+ 23 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamDetailService.java

@@ -125,12 +125,35 @@ public interface ExamDetailService extends IService<ExamDetail> {
 
     boolean resubmitTask(ExamDetail examDetail);
 
+    /**
+     * 根据考务数据Excel数据处理考务-场次表
+     * @param dataList Excel处理后的数据
+     * @param userId 当前用户id
+     */
     void disposeExamDetailByExaminationExcel(List<Map<String, Object>> dataList, Long userId);
 
+    /**
+     * 根据考务数据Excel数据处理考务-科目表
+     * @param dataList Excel处理后的数据
+     * @param userId 当前用户id
+     */
     void disposeExamDetailCourseByExaminationExcel(List<Map<String, Object>> dataList,Long userId);
 
+    /**
+     * 根据考务数据Excel数据处理考务-学生表
+     * @param dataList Excel处理后的数据
+     * @param userId 当前用户id
+     */
     void disposeExamStudentByExaminationExcel(List<Map<String, Object>> dataList,Long userId);
 
+    /**
+     * 删除考务数据
+     * @param printPlanId 印刷计划id
+     */
+    void deleteExaminationData(Long printPlanId);
+
+
+
     List<ExamDetail> listByCourseCodeAndPaperNumber(Long schoolId, String courseCode, String paperNumber);
 
     List<ExamDetail> listByExamPrintId(Long printPlanId);

+ 23 - 5
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicCourseServiceImpl.java

@@ -16,6 +16,7 @@ import com.qmth.distributed.print.common.enums.ExceptionResultEnum;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 import java.util.Objects;
@@ -54,10 +55,9 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
     }
 
     @Override
-    public boolean saveCourse(BasicCourse course) {
-        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+    public boolean saveCourse(BasicCourse course,Long userId) {
+        Long schoolId = course.getSchoolId();
         course.setSchoolId(schoolId);
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
 
         QueryWrapper<BasicCourse> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(BasicCourse::getSchoolId, course.getSchoolId()).eq(BasicCourse::getCode, course.getCode());
@@ -69,7 +69,7 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
                 throw ExceptionResultEnum.ERROR.exception("课程已存在");
             }
             course.setId(SystemConstant.getDbUuid());
-            course.setCreateId(sysUser.getId());
+            course.setCreateId(userId);
             course.setCreateTime(System.currentTimeMillis());
         }
         // 修改
@@ -84,7 +84,7 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
             if (taskList != null && taskList.size() > 0) {
                 throw ExceptionResultEnum.ERROR.exception("课程绑定命题任务,不能修改");
             }
-            course.setUpdateId(sysUser.getId());
+            course.setUpdateId(userId);
             course.setUpdateTime(System.currentTimeMillis());
         }
         return this.saveOrUpdate(course);
@@ -105,4 +105,22 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
     public List<BasicCourse> listCoursesByUserId(Long userId) {
         return this.baseMapper.listCoursesByUserId(userId);
     }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void verifyCourseInfo(Long schoolId,String courseCode, String courseName,Long userId) {
+        int count = this.count(new QueryWrapper<BasicCourse>().lambda()
+                .eq(BasicCourse::getSchoolId,schoolId)
+                .eq(BasicCourse::getCode,courseCode)
+                .eq(BasicCourse::getName,courseName));
+        if (count > 1){
+            throw ExceptionResultEnum.ERROR.exception("学校id为 : " + schoolId +  " 课程代码为 : " + courseCode + " 课程名称为 : " + courseName + " 的课程信息异常");
+        }else if (count < 1){
+            BasicCourse basicCourse = new BasicCourse();
+            basicCourse.setName(courseName);
+            basicCourse.setCode(courseCode);
+            basicCourse.setSchoolId(schoolId);
+            this.saveCourse(basicCourse,userId);
+        }
+    }
 }

+ 55 - 22
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java

@@ -16,6 +16,7 @@ import com.qmth.distributed.print.business.bean.result.ExaminationResult;
 import com.qmth.distributed.print.business.bean.result.SummarizedDataResult;
 import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
+import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
 import com.qmth.distributed.print.business.mapper.ExamDetailMapper;
 import com.qmth.distributed.print.business.service.*;
 import com.qmth.distributed.print.business.util.ServletUtil;
@@ -25,7 +26,6 @@ import org.apache.poi.hssf.usermodel.*;
 import org.apache.poi.ss.usermodel.HorizontalAlignment;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -58,11 +58,11 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
     private CacheService cacheService;
     @Resource
     private ExamStudentService examStudentService;
-
-    @Autowired
+    @Resource
+    private ExamPrintPlanService examPrintPlanService;
+    @Resource
     private BasicAttachmentService basicAttachmentService;
-
-    @Autowired
+    @Resource
     private CommonService commonService;
 
     private final static Logger log = LoggerFactory.getLogger(ExamDetailServiceImpl.class);
@@ -328,8 +328,8 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
             map.put("printPlanName", e.get("printPlanName"));
             map.put("examPlace", e.get("examPlace"));
             map.put("examRoom", e.get("examRoom"));
-            map.put("examDate", e.get("examDate"));
-            map.put("examTime", e.get("examTime"));
+            map.put("examStartTime", e.get("examStartTime"));
+            map.put("examEndTime", e.get("examEndTime"));
             return Stream.of(map);
         }).distinct().collect(Collectors.toList());
 
@@ -339,15 +339,15 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
         for (Map<String, Object> map : examDetailKeyList) {
             String examPlace = String.valueOf(map.get("examPlace"));
             String examRoom = String.valueOf(map.get("examRoom"));
-            String examDate = String.valueOf(map.get("examDate"));
-            String examTime = String.valueOf(map.get("examTime"));
+            String examStartTime = String.valueOf(map.get("examStartTime"));
+            String examEndTime = String.valueOf(map.get("examEndTime"));
             System.out.println("dataList : " + JSON.toJSONString(dataList));
-            System.out.println(examPlace + examRoom + examDate + examTime);
+            System.out.println(examPlace + examRoom + examStartTime + examEndTime);
             long totalSubjects = dataList.stream()
                     .filter(e -> String.valueOf(e.get("examPlace")).equals(examPlace) &&
                             String.valueOf(e.get("examRoom")).equals(examRoom) &&
-                            String.valueOf(e.get("examDate")).equals(examDate) &&
-                            String.valueOf(e.get("examTime")).equals(examTime)).count();
+                            String.valueOf(e.get("examStartTime")).equals(examStartTime) &&
+                            String.valueOf(e.get("examEndTime")).equals(examEndTime)).count();
 
             System.out.println("totalSubjects" + totalSubjects);
             ExamDetail examDetail = new ExamDetail();
@@ -358,10 +358,10 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
             examDetail.setPrintPlanName(String.valueOf(map.get("printPlanName")));
             examDetail.setExamPlace(examPlace);
             examDetail.setExamRoom(examRoom);
+            examDetail.setStatus(ExamDetailStatusEnum.NEW);
             examDetail.setTotalSubjects(Math.toIntExact(totalSubjects));
-            // TODO: 2021/4/9 解析日期和时间
-            examDetail.setExamStartTime(1L);
-            examDetail.setExamEndTime(2L);
+            examDetail.setExamStartTime(SystemConstant.convertIdToLong(examStartTime));
+            examDetail.setExamEndTime(SystemConstant.convertIdToLong(examEndTime));
             examDetail.setCreateId(userId);
             examDetail.setUpdateId(userId);
             examDetailList.add(examDetail);
@@ -379,8 +379,8 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
             map.put("printPlanId", e.get("printPlanId"));
             map.put("examPlace", e.get("examPlace"));
             map.put("examRoom", e.get("examRoom"));
-            map.put("examDate", e.get("examDate"));
-            map.put("examTime", e.get("examTime"));
+            map.put("examStartTime", e.get("examStartTime"));
+            map.put("examEndTime", e.get("examEndTime"));
             map.put("courseCode", e.get("courseCode"));
             map.put("courseName", e.get("courseName"));
             map.put("paperNumber", e.get("paperNumber"));
@@ -393,8 +393,8 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
             Long printPlanId = Long.valueOf(String.valueOf(map.get("printPlanId")));
             String examPlace = String.valueOf(map.get("examPlace"));
             String examRoom = String.valueOf(map.get("examRoom"));
-            Long examStartTime = 1L;
-            Long examEndTime = 2L;
+            Long examStartTime = SystemConstant.convertIdToLong(String.valueOf(map.get("examStartTime")));
+            Long examEndTime = SystemConstant.convertIdToLong(String.valueOf(map.get("examEndTime")));
             String courseCode = String.valueOf(map.get("courseCode"));
             String courseName = String.valueOf(map.get("courseName"));
             String paperNumber = String.valueOf(map.get("paperNumber"));
@@ -431,8 +431,8 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
             Long printPlanId = Long.valueOf(String.valueOf(map.get("printPlanId")));
             String examPlace = String.valueOf(map.get("examPlace"));
             String examRoom = String.valueOf(map.get("examRoom"));
-            Long examStartTime = 1L;
-            Long examEndTime = 2L;
+            Long examStartTime = SystemConstant.convertIdToLong(String.valueOf(map.get("examStartTime")));
+            Long examEndTime = SystemConstant.convertIdToLong(String.valueOf(map.get("examEndTime")));
             String courseCode = String.valueOf(map.get("courseCode"));
             String courseName = String.valueOf(map.get("courseName"));
             String paperNumber = String.valueOf(map.get("paperNumber"));
@@ -464,7 +464,7 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
             examStudent.setExamDetailCourseId(examDetailCourseId);
             examStudent.setStudentName(studentName);
             examStudent.setStudentCode(studentCode);
-            examStudent.setTicketNumber("");
+            examStudent.setTicketNumber(studentCode);
             examStudent.setSiteNumber("");
             examStudent.setCreateId(userId);
             examStudent.setUpdateId(userId);
@@ -495,4 +495,37 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
                 .ne(ExamDetail::getStatus, ExamDetailStatusEnum.READY);
         return this.list(queryWrapper);
     }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void deleteExaminationData(Long printPlanId) {
+        ExamPrintPlan examPrintPlan = examPrintPlanService.getById(printPlanId);
+        if (examPrintPlan.getId() == null || examPrintPlan.getId() <= 0){
+            throw ExceptionResultEnum.ERROR.exception("未找主键为 '" + printPlanId + "' 的印刷计划信息");
+        }
+        PrintPlanStatusEnum status = examPrintPlan.getStatus();
+        if (PrintPlanStatusEnum.NEW != status && PrintPlanStatusEnum.READY != status){
+            throw ExceptionResultEnum.ERROR.exception(status + "状态下的印刷计划不能删除考务数据");
+        }
+        // 准备删除的考务-场次表id
+        List<Long> examDetailIds = this.list(new QueryWrapper<ExamDetail>().lambda().eq(ExamDetail::getPrintPlanId,printPlanId))
+                .stream().map(ExamDetail::getId).collect(Collectors.toList());
+
+        // 准备删除的考务-科目表id
+        List<Long> examDetailCourseIds = examDetailCourseService.list(new QueryWrapper<ExamDetailCourse>().lambda().in(ExamDetailCourse::getExamDetailId,examDetailIds))
+                .stream().map(ExamDetailCourse::getId).collect(Collectors.toList());
+
+        // 准备删除的考务-考生表id
+        List<Long> examStudentIds = examStudentService.list(new QueryWrapper<ExamStudent>().lambda().in(ExamStudent::getExamDetailCourseId,examDetailCourseIds))
+                .stream().map(ExamStudent::getId).collect(Collectors.toList());
+
+        // 删除exam_detail 表数据
+        this.remove(new QueryWrapper<ExamDetail>().lambda().in(ExamDetail::getId,examDetailIds));
+
+        // 删除exam_detail_course 表数据
+        examDetailCourseService.remove(new QueryWrapper<ExamDetailCourse>().lambda().in(ExamDetailCourse::getId,examDetailCourseIds));
+
+        // 删除exam_student 表数据
+        examStudentService.remove(new QueryWrapper<ExamStudent>().lambda().in(ExamStudent::getId,examStudentIds));
+    }
 }

+ 24 - 9
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java

@@ -17,6 +17,7 @@ import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.enums.DrawRuleEnum;
 import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
 import com.qmth.distributed.print.business.enums.ExamStatusEnum;
+import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
 import com.qmth.distributed.print.business.enums.UploadFileEnum;
 import com.qmth.distributed.print.business.service.*;
 import com.qmth.distributed.print.business.templete.service.TaskLogicService;
@@ -105,6 +106,9 @@ public class TaskLogicServiceImpl implements TaskLogicService {
     @Resource
     FreemarkerUtil freemarkerUtil;
 
+    @Resource
+    BasicCourseService basicCourseService;
+
     /**
      * 执行导入用户逻辑
      *
@@ -380,7 +384,6 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
         ExcelUtil.excelMake(ExaminationResult.class, examinationResultList, outputStream);
         InputStream in = new ByteArrayInputStream(outputStream.toByteArray());
-        IoUtil.copy(in, outputStream);
 
 //        UploadFileEnum.FILE/
         LocalDateTime nowTime = LocalDateTime.now();
@@ -395,8 +398,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         stringJoiner.add(File.separator).add(SystemConstant.getUuid()).add(".").add(SystemConstant.XLSX);
 
         String dirName = stringJoiner.toString().replaceAll("\\\\", "/");
-//        File file = new File(dirName);
-//        ConvertUtil.inputStream2File(in,file);
+
         ossUtil.ossUpload(dirName, in, null);
         jsonObject.put(SystemConstant.TYPE, SystemConstant.OSS);
         jsonObject.put(SystemConstant.PATH, dirName);
@@ -417,6 +419,12 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         if (examPrintPlan == null) {
             throw ExceptionResultEnum.ERROR.exception("印刷计划不存在printPlanId : " + printPlanId);
         }
+
+        PrintPlanStatusEnum printPlanStatus = examPrintPlan.getStatus();
+        if (PrintPlanStatusEnum.NEW != printPlanStatus && PrintPlanStatusEnum.READY != printPlanStatus){
+            throw ExceptionResultEnum.ERROR.exception(printPlanStatus + "状态下的印刷计划不允许导入");
+        }
+
         String printPlanName = examPrintPlan.getName();
         Long schoolId = tbTask.getSchoolId();
         // 该学校有效考务数据
@@ -428,7 +436,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         Map importFilePathMap = JSONObject.parseObject(importFilePath);
         String path = String.valueOf(importFilePathMap.get("path"));
         System.out.println("path = " + path);
-        Workbook workbook = null;
+        Workbook workbook;
         if (path.endsWith(SystemConstant.XLSX)) {
             workbook = new XSSFWorkbook(inputStream);
         } else if (path.endsWith("xls")) {
@@ -526,17 +534,23 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                     }
                 }
             }
+            // 校验课程信息
+            basicCourseService.verifyCourseInfo(schoolId,courseCode,courseName,userId);
+
+            // 解析时间
+            Map<String,Object> timeMap = ConvertUtil.analyzeStartAndEndTime(examDate,examTime);
+            String examStartTime = String.valueOf(timeMap.get("startTime"));
+            String examEndTime = String.valueOf(timeMap.get("endTime"));
+
             Map<String, Object> dataMap = new HashMap<>();
             dataMap.put("studentCode", studentCode);
             dataMap.put("studentName", studentName);
-            // TODO: 2021/4/9 校验课程
             dataMap.put("courseCode", courseCode);
             dataMap.put("courseName", courseName);
             dataMap.put("examPlace", examPlace);
             dataMap.put("examRoom", examRoom);
-            // TODO: 2021/4/9 解析时间
-            dataMap.put("examDate", examDate);
-            dataMap.put("examTime", examTime);
+            dataMap.put("examStartTime", examStartTime);
+            dataMap.put("examEndTime", examEndTime);
             dataMap.put("paperNumber", paperNumber);
             dataMap.put("secondaryFieldList", secondaryFieldList);
             dataMap.put("schoolId", schoolId);
@@ -546,7 +560,8 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         }
         System.out.println("dataList = " + JSON.toJSONString(dataList));
 
-
+        // 删除印刷计划下的考务数据
+        examDetailService.deleteExaminationData(printPlanId);
         // 组装exam_detail数据
         examDetailService.disposeExamDetailByExaminationExcel(dataList, userId);
         // 组装exam_detail_course数据

+ 33 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/ConvertUtil.java

@@ -1,6 +1,8 @@
 package com.qmth.distributed.print.business.util;
 
 import java.io.*;
+import java.util.Date;
+import java.util.HashMap;
 import java.util.Map;
 
 /**
@@ -41,4 +43,35 @@ public class ConvertUtil {
             is.close();
         }
     }
+
+    /**
+     * 转换,解析时间
+     * @param date 日期(考试日期,必须是同一天     example: 2021-04-13)
+     * @param time 时间(考试时间,必须使用‘-’隔开  example: 18:00-20:00)
+     * @return 开始时间和结束时间键值对("startTime":1618308000000 ,"endTime":1618315200000)
+     */
+    public static Map<String,Object> analyzeStartAndEndTime(String date,String time){
+        time = time.replaceAll(" ",""); // 去掉所有空格
+        String[] arr = time.split("-");
+        if (arr.length != 2){
+            // 不能使用'-'拆分成两个时间的报错
+            System.out.println("提供的时间格式异常 时间 : " + time);
+        }
+        String startTimeStr = date + " " + arr[0];
+        String endTimeStr = date + " " + arr[1];
+        long startTime = DateDisposeUtils.parseDate(startTimeStr).getTime();
+        long endTime = DateDisposeUtils.parseDate(endTimeStr).getTime();
+        if (startTime >= endTime){
+            System.out.println("开始时间要小于结束时间 时间: " + time);
+        }
+
+        System.out.println("开始时间 : " + startTimeStr + " 结束时间 : " + endTimeStr);
+        System.out.println("开始时间 : " + startTime + " 结束时间 : " + endTime);
+        System.out.println(new Date().getTime());
+
+        Map<String,Object> timeMap = new HashMap<>();
+        timeMap.put("startTime",startTime);
+        timeMap.put("endTime",endTime);
+        return timeMap;
+    }
 }

+ 177 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/DateDisposeUtils.java

@@ -0,0 +1,177 @@
+package com.qmth.distributed.print.business.util;
+
+/**
+ * @Description: 时间处理工具类
+ * @Author: CaoZixuan
+ * @Date:
+ */
+
+import org.apache.commons.lang3.time.DateFormatUtils;
+import org.apache.commons.lang3.time.DateUtils;
+
+import java.lang.management.ManagementFactory;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * 时间工具类
+ *
+ * @author ruoyi
+ */
+public class DateDisposeUtils extends DateUtils {
+    public static String YYYY = "yyyy";
+
+    public static String YYYY_MM = "yyyy-MM";
+
+    public static String YYYY_MM_DD = "yyyy-MM-dd";
+
+    public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
+
+    public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
+
+    private static String[] parsePatterns = {
+            "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
+            "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
+            "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
+
+    /**
+     * 获取当前Date型日期
+     *
+     * @return Date() 当前日期
+     */
+    public static Date getNowDate()
+    {
+        return new Date();
+    }
+
+    /**
+     * 获取当前日期, 默认格式为yyyy-MM-dd
+     *
+     * @return String
+     */
+    public static String getDate()
+    {
+        return dateTimeNow(YYYY_MM_DD);
+    }
+
+    public static final String getTime()
+    {
+        return dateTimeNow(YYYY_MM_DD_HH_MM_SS);
+    }
+
+    public static final String dateTimeNow()
+    {
+        return dateTimeNow(YYYYMMDDHHMMSS);
+    }
+
+    public static final String dateTimeNow(final String format)
+    {
+        return parseDateToStr(format, new Date());
+    }
+
+    public static final String dateTime(final Date date)
+    {
+        return parseDateToStr(YYYY_MM_DD, date);
+    }
+
+    public static final String parseDateToStr(final String format, final Date date)
+    {
+        return new SimpleDateFormat(format).format(date);
+    }
+
+    public static final Date dateTime(final String format, final String ts)
+    {
+        try
+        {
+            return new SimpleDateFormat(format).parse(ts);
+        }
+        catch (ParseException e)
+        {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * 日期路径 即年/月/日 如2018/08/08
+     */
+    public static final String datePath()
+    {
+        Date now = new Date();
+        return DateFormatUtils.format(now, "yyyy/MM/dd");
+    }
+
+    /**
+     * 日期路径 即年/月/日 如20180808
+     */
+    public static final String dateTime()
+    {
+        Date now = new Date();
+        return DateFormatUtils.format(now, "yyyyMMdd");
+    }
+
+    /**
+     * 日期型字符串转化为日期 格式
+     */
+    public static Date parseDate(Object str)
+    {
+        if (str == null)
+        {
+            return null;
+        }
+        try
+        {
+            return parseDate(str.toString(), parsePatterns);
+        }
+        catch (ParseException e)
+        {
+            return null;
+        }
+    }
+
+    public static void main(String[] args) {
+        String d1 = "2020-01-01";
+        String d2 = "2020/01/01";
+        String d3 = "2020-01-01 12:00";
+        String d4 = "2020/01/01 12:00";
+        String d5 = "2020/01/01 12:00:00";
+        String d6 = "2020/01/01 12:00:00";
+        System.out.println(parseDate(d1).getTime());
+        System.out.println(parseDate(d2).getTime());
+        System.out.println(parseDate(d3).getTime());
+        System.out.println(parseDate(d4).getTime());
+        System.out.println(parseDate(d5).getTime());
+        System.out.println(parseDate(d6).getTime());
+    }
+
+    /**
+     * 获取服务器启动时间
+     */
+    public static Date getServerStartDate()
+    {
+        long time = ManagementFactory.getRuntimeMXBean().getStartTime();
+        return new Date(time);
+    }
+
+    /**
+     * 计算两个时间差
+     */
+    public static String getDatePoor(Date endDate, Date nowDate)
+    {
+        long nd = 1000 * 24 * 60 * 60;
+        long nh = 1000 * 60 * 60;
+        long nm = 1000 * 60;
+        // long ns = 1000;
+        // 获得两个时间的毫秒时间差异
+        long diff = endDate.getTime() - nowDate.getTime();
+        // 计算差多少天
+        long day = diff / nd;
+        // 计算差多少小时
+        long hour = diff % nd / nh;
+        // 计算差多少分钟
+        long min = diff % nd % nh / nm;
+        // 计算差多少秒//输出结果
+        // long sec = diff % nd % nh % nm / ns;
+        return day + "天" + hour + "小时" + min + "分钟";
+    }
+}

+ 6 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/BasicCourseController.java

@@ -6,7 +6,9 @@ import com.qmth.boot.api.annotation.Aac;
 import com.qmth.boot.api.annotation.BOOL;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.distributed.print.business.entity.BasicCourse;
+import com.qmth.distributed.print.business.entity.SysUser;
 import com.qmth.distributed.print.business.service.BasicCourseService;
+import com.qmth.distributed.print.business.util.ServletUtil;
 import com.qmth.distributed.print.common.util.Result;
 import com.qmth.distributed.print.common.util.ResultUtil;
 import io.swagger.annotations.Api;
@@ -71,7 +73,10 @@ public class BasicCourseController {
     @ApiOperation(value = "新增/修改")
     @RequestMapping(value = "/save", method = RequestMethod.POST)
     public Result save(@RequestBody BasicCourse course){
-        boolean isSuccess = basicCourseService.saveCourse(course);
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        course.setSchoolId(schoolId);
+        boolean isSuccess = basicCourseService.saveCourse(course,sysUser.getId());
         return ResultUtil.ok(isSuccess);
     }