فهرست منبع

Merge remote-tracking branch 'origin/dev_v3.2.2' into dev_v3.2.2

wangliang 2 سال پیش
والد
کامیت
66c6ebf1c8
16فایلهای تغییر یافته به همراه204 افزوده شده و 98 حذف شده
  1. 19 38
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/BasicExamRule.java
  2. 28 11
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicExamRuleServiceImpl.java
  3. 2 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicExamServiceImpl.java
  4. 0 3
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamPrintPlanServiceImpl.java
  5. 16 14
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java
  6. 11 8
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java
  7. 5 8
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/CreatePdfUtil.java
  8. 3 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/BasicClazzController.java
  9. 49 3
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/aspect/LogAspect.java
  10. 2 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java
  11. 25 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/BasicExam.java
  12. 2 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/ExceptionResultEnum.java
  13. 1 3
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/PrintMethodEnum.java
  14. 17 10
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/log/CustomizedOperationTypeEnum.java
  15. 9 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysPrivilegeService.java
  16. 15 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysPrivilegeServiceImpl.java

+ 19 - 38
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/BasicExamRule.java

@@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import com.qmth.distributed.print.business.enums.PrintMethodEnum;
+import com.qmth.teachcloud.common.enums.PrintMethodEnum;
 import com.qmth.teachcloud.common.base.BaseEntity;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -46,26 +46,15 @@ public class BasicExamRule extends BaseEntity implements Serializable {
     @TableField("extend_fields")
     private String extendFields;
 
-    /**
-     * 0-禁用,1-启用
-     */
-    private Boolean review;
-
-    /**
-     * 0-禁用,1-启用
-     */
-    @TableField("include_paper")
-    private Boolean includePaper;
-
-    /**
-     * AUTO-自动,MANUAL-手动
-     */
-    @TableField("print_method")
-    private PrintMethodEnum printMethod;
-
     @TableField("exam_number_digit")
     private Integer examNumberDigit;
 
+    @TableField("sign_scope")
+    private String signScope;
+
+    @TableField("package_scope")
+    private String packageScope;
+
     public static long getSerialVersionUID() {
         return serialVersionUID;
     }
@@ -102,35 +91,27 @@ public class BasicExamRule extends BaseEntity implements Serializable {
         this.extendFields = extendFields;
     }
 
-    public Boolean getReview() {
-        return review;
-    }
-
-    public void setReview(Boolean review) {
-        this.review = review;
-    }
-
-    public Boolean getIncludePaper() {
-        return includePaper;
+    public Integer getExamNumberDigit() {
+        return examNumberDigit;
     }
 
-    public void setIncludePaper(Boolean includePaper) {
-        this.includePaper = includePaper;
+    public void setExamNumberDigit(Integer examNumberDigit) {
+        this.examNumberDigit = examNumberDigit;
     }
 
-    public PrintMethodEnum getPrintMethod() {
-        return printMethod;
+    public String getSignScope() {
+        return signScope;
     }
 
-    public void setPrintMethod(PrintMethodEnum printMethod) {
-        this.printMethod = printMethod;
+    public void setSignScope(String signScope) {
+        this.signScope = signScope;
     }
 
-    public Integer getExamNumberDigit() {
-        return examNumberDigit;
+    public String getPackageScope() {
+        return packageScope;
     }
 
-    public void setExamNumberDigit(Integer examNumberDigit) {
-        this.examNumberDigit = examNumberDigit;
+    public void setPackageScope(String packageScope) {
+        this.packageScope = packageScope;
     }
 }

+ 28 - 11
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicExamRuleServiceImpl.java

@@ -1,22 +1,27 @@
 package com.qmth.distributed.print.business.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.distributed.print.business.entity.BasicExamRule;
 import com.qmth.distributed.print.business.entity.ExamPrintPlan;
 import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
+import com.qmth.distributed.print.business.enums.RequiredFieldsEnum;
 import com.qmth.distributed.print.business.mapper.BasicExamRuleMapper;
 import com.qmth.distributed.print.business.service.BasicExamRuleService;
 import com.qmth.distributed.print.business.service.ExamPrintPlanService;
 import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.EnumResult;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -34,10 +39,32 @@ public class BasicExamRuleServiceImpl extends ServiceImpl<BasicExamRuleMapper, B
 
     @Override
     public BasicExamRule getBySchoolId() {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         QueryWrapper<BasicExamRule> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(BasicExamRule::getSchoolId, schoolId);
-        return this.getOne(queryWrapper);
+        BasicExamRule basicExamRule = this.getOne(queryWrapper);
+        if(basicExamRule == null){
+            List<EnumResult> enumResultList = RequiredFieldsEnum.listTypes();
+            List<JSONObject> requiredObjects = enumResultList.stream().map(m->{
+                JSONObject jsonObject = new JSONObject();
+                jsonObject.put("code", m.getCode());
+                jsonObject.put("name", m.getDesc());
+                jsonObject.put("enable", true);
+                return jsonObject;
+            }).collect(Collectors.toList());
+
+            basicExamRule = new BasicExamRule();
+            basicExamRule.setSchoolId(schoolId);
+            basicExamRule.setOrgId(sysUser.getOrgId());
+            basicExamRule.setRequiredFields(JSON.toJSONString(requiredObjects));
+            String emptyObject = JSON.toJSONString(new ArrayList<>());
+            basicExamRule.setExtendFields(emptyObject);
+            basicExamRule.setExamNumberDigit(8);
+            basicExamRule.setSignScope(emptyObject);
+            basicExamRule.setPackageScope(emptyObject);
+        }
+        return basicExamRule;
     }
 
     @Override
@@ -55,7 +82,6 @@ public class BasicExamRuleServiceImpl extends ServiceImpl<BasicExamRuleMapper, B
 
         // 新增
         if (examRule.getId() == null) {
-            examRule.setIncludePaper(true);
             examRule.insertInfo(sysUser.getId());
             examRule.setOrgId(sysUser.getOrgId());
             this.save(examRule);
@@ -99,15 +125,6 @@ public class BasicExamRuleServiceImpl extends ServiceImpl<BasicExamRuleMapper, B
                 if (!basicExamRule.getExamNumberDigit().equals(examRule.getExamNumberDigit())) {
                     throw ExceptionResultEnum.ERROR.exception("有未结束的印刷计划,不能修改考号位数");
                 }
-                if (!basicExamRule.getReview().equals(examRule.getReview())) {
-                    throw ExceptionResultEnum.ERROR.exception("有未结束的印刷计划,不能修改入库审核控制");
-                }
-                /*if (!basicExamRule.getIncludePaper().equals(examRule.getIncludePaper())) {
-                    throw ExceptionResultEnum.ERROR.exception("有未结束的印刷计划,不能修改包含试卷控制");
-                }*/
-                if (!basicExamRule.getPrintMethod().equals(examRule.getPrintMethod())) {
-                    throw ExceptionResultEnum.ERROR.exception("有未结束的印刷计划,不能修改印刷方式控制");
-                }
             }
             examRule.updateInfo(sysUser.getId());
             examRule.setOrgId(sysUser.getOrgId());

+ 2 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicExamServiceImpl.java

@@ -62,6 +62,8 @@ public class BasicExamServiceImpl extends ServiceImpl<BasicExamMapper, BasicExam
                     .set(BasicExam::getName, basicExam.getName())
                     .set(BasicExam::getCategory, basicExam.getCategory())
                     .set(BasicExam::getExamModel, basicExam.getExamModel())
+                    .set(BasicExam::getReview, basicExam.getReview())
+                    .set(BasicExam::getPrintMethod, basicExam.getPrintMethod())
                     .set(BasicExam::getCreateId, sysUser.getId())
                     .set(BasicExam::getCreateTime, System.currentTimeMillis()));
         } else {

+ 0 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamPrintPlanServiceImpl.java

@@ -258,9 +258,6 @@ public class ExamPrintPlanServiceImpl extends ServiceImpl<ExamPrintPlanMapper, E
         if (Objects.isNull(basicExamRule)) {
             throw ExceptionResultEnum.ERROR.exception("未找到学校的通用规则");
         }
-        /*if (basicExamRule.getIncludePaper() && !printContentList.contains("PAPER")) {
-            throw ExceptionResultEnum.ERROR.exception("学校通用规则设置了强制包含试卷的必须选择试卷印品!");
-        }*/
         if (printContentList.contains("PAPER") && !printContentList.contains("CARD")) {
             throw ExceptionResultEnum.ERROR.exception("如果试卷题卡印品选择了试卷,题卡必须被选择");
         }

+ 16 - 14
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java

@@ -426,7 +426,9 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             }
             examTask.insertInfo(sysUser.getId());
             examTask.updateInfo(sysUser.getId());
-            examTask.setReview(basicExamRule.getReview());
+
+            BasicExam basicExam = basicExamService.getById(examId);
+            examTask.setReview(basicExam.getReview());
             // 取课程所在机构
             Long teachingRoomId = basicCourseService.getOrgIdBySchoolIdAndCourseCode(schoolId, courseCode);
             examTask.setOrgId(teachingRoomId);
@@ -736,7 +738,9 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             } else {
                 examTask.setStatus(ExamStatusEnum.DRAFT);
             }
-            examTask.setReview(basicExamRule.getReview());
+
+            BasicExam basicExam = basicExamService.getById(examId);
+            examTask.setReview(basicExam.getReview());
             list.add(examTask);
         }
         this.saveBatch(list);
@@ -968,7 +972,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
     @Override
     public ExamTaskDetailCardDto applyGetOne(Long examTaskId, String source) {
         ExamTaskDetailCardDto detailCardDto = this.baseMapper.applyGetOne(examTaskId, source);
-        if(detailCardDto != null) {
+        if (detailCardDto != null) {
             ExamTask examTask = examTaskService.getById(examTaskId);
             BasicPrintConfig basicPrintConfig = basicPrintConfigService.getByExamIdAndCourseCode(examTask.getExamId(), examTask.getCourseCode());
             if (basicPrintConfig != null) {
@@ -1414,13 +1418,14 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             examTask.setSchoolId(schoolId);
             examTask.setOrgId(basicCourseService.getOrgIdBySchoolIdAndCourseCode(schoolId, examTask.getCourseCode()));
             examTask.setCreateId(sysUser.getId());
-            examTask.setReview(basicExamRule.getReview());
+            BasicExam basicExam = basicExamService.getById(examId);
+            examTask.setReview(basicExam.getReview());
             examTask.setUserId(sysUser.getId());
             examTask.updateInfo(sysUser.getId());
 
             examTask.setStatus(ExamStatusEnum.valueOf(examTaskDetail.getOperateType()));
             if (Objects.isNull(examTask.getFlowId())) {
-                if (basicExamRule.getReview()) {
+                if (basicExam.getReview()) {
                     Map<String, Object> map = SystemConstant.buildFlowVar(examTask.getId(),
                             examTask,
                             TFCustomTypeEnum.ELECTRON_FLOW,
@@ -1553,7 +1558,9 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             examTask.setPaperNumberId(SystemConstant.getDbUuid());
             examTask.setSchoolId(schoolId);
             examTask.setOrgId(basicCourseService.getOrgIdBySchoolIdAndCourseCode(schoolId, examTask.getCourseCode()));
-            examTask.setReview(basicExamRule.getReview());
+
+            BasicExam basicExam = basicExamService.getById(examTask.getExamId());
+            examTask.setReview(basicExam.getReview());
             examTask.setUserId(sysUser.getId());
             examTask.setStatus(ExamStatusEnum.SUBMIT);
             examTask.setCreateId(sysUser.getId());
@@ -1566,7 +1573,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             examTask.setCardRuleId(basicPrintConfig.getCardRuleId());
 
             if (Objects.isNull(examTask.getFlowId())) {
-                if (basicExamRule.getReview()) {
+                if (basicExam.getReview()) {
                     Map<String, Object> map = SystemConstant.buildFlowVar(examTask.getId(),
                             examTask,
                             TFCustomTypeEnum.ELECTRON_FLOW,
@@ -1592,11 +1599,6 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
 
             examTaskDetailService.save(examTaskDetail);
 
-            BasicExam basicExam = basicExamService.getById(examTask.getExamId());
-            if (basicExam == null || basicExam.getExamModel() == null) {
-                throw ExceptionResultEnum.ERROR.exception("未查到考试信息");
-            }
-
             BasicCourse basicCourse = basicCourseService.findByCourseCode(examTask.getCourseCode(), schoolId);
 
             if (ExamModelEnum.MODEL1.equals(basicExam.getExamModel()) || ExamModelEnum.MODEL2.equals(basicExam.getExamModel())) {
@@ -1613,10 +1615,10 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                 examPrintPlan.setExamStartTime(examDetailParams.getExamStartTime());
                 examPrintPlan.setExamEndTime(examDetailParams.getExamEndTime());
                 List<String> stringList = JSONObject.parseArray(basicPrintConfig.getPrintContent(), String.class);
-                if(!stringList.contains("PAPER")){
+                if (!stringList.contains("PAPER")) {
                     List<Map> paperAttachmentIds = JSONObject.parseArray(examTaskDetail.getPaperAttachmentIds(), Map.class);
                     long count = paperAttachmentIds.stream().filter(m -> StringUtils.isBlank(m.get("attachmentId").toString())).count();
-                    if (count == 0){
+                    if (count == 0) {
                         stringList.add("PAPER");
                     }
                 }

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

@@ -184,6 +184,9 @@ public class TaskLogicServiceImpl implements TaskLogicService {
     @Resource
     DictionaryConfig dictionaryConfig;
 
+    @Resource
+    BasicExamService basicExamService;
+
     /**
      * 创建pdf前置条件
      *
@@ -555,9 +558,9 @@ public class TaskLogicServiceImpl implements TaskLogicService {
             }
 
             BasicSchool basicSchool = commonCacheService.schoolCache(examPrintPlan.getSchoolId());
-            BasicExamRule basicExamRule = basicExamRuleService.getBySchoolId(schoolId);
-            if (Objects.isNull(basicExamRule)) {
-                throw ExceptionResultEnum.EXAM_RULE_IS_NULL.exception();
+            BasicExam basicExam = basicExamService.getById(examPrintPlan.getExamId());
+            if (Objects.isNull(basicExam)) {
+                throw ExceptionResultEnum.EXAM_IS_NULL.exception();
             }
 
             //查询examDetail
@@ -620,14 +623,14 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                 mergePdfDeleteList.addAll(examStudentPdfList);
                 mergePdfDeleteList.addAll(backupCardPdfList);
 //                BasicAttachment attachment = createPdfUtil.mergePdfSaveDb(dirNameA4, dirNameA3, dirNameCardA3, tbTask, sysUser.getId(), examDetail, basicExamRule, mergePdfDeleteList);
-                BasicAttachment attachment = createPdfUtil.mergePdfSaveDb(dirNameA4, dirNamePaper, dirNameCardA3, tbTask, sysUser.getId(), examDetail, basicExamRule, mergePdfDeleteList);
+                BasicAttachment attachment = createPdfUtil.mergePdfSaveDb(dirNameA4, dirNamePaper, dirNameCardA3, tbTask, sysUser.getId(), examDetail, basicExam, mergePdfDeleteList);
                 if (basicAttachmentList != null) {
                     basicAttachmentList.add(attachment);
                 }
 
                 examDetailService.updateById(examDetail);
             }
-            updateExamPrintPlan(basicExamRule, examPrintPlan);
+            updateExamPrintPlan(basicExam, examPrintPlan);
             map.computeIfAbsent("size", v -> examDetailList.size());
             //最后一步删除附件
 //            createPdfUtil.deleteAttachment(attachmentIds, ftlList);
@@ -648,12 +651,12 @@ public class TaskLogicServiceImpl implements TaskLogicService {
     /**
      * 更新考试计划
      *
-     * @param basicExamRule
+     * @param basicExam
      * @param examPrintPlan
      */
     @Transactional
-    public void updateExamPrintPlan(BasicExamRule basicExamRule, ExamPrintPlan examPrintPlan) {
-        if (PrintMethodEnum.AUTO == basicExamRule.getPrintMethod()) {
+    public void updateExamPrintPlan(BasicExam basicExam, ExamPrintPlan examPrintPlan) {
+        if (PrintMethodEnum.AUTO == basicExam.getPrintMethod()) {
             examPrintPlan.setStatus(PrintPlanStatusEnum.PRINTING);
             examPrintPlanService.updateById(examPrintPlan);
         }

+ 5 - 8
distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/CreatePdfUtil.java

@@ -12,15 +12,12 @@ import com.qmth.distributed.print.business.bean.dto.*;
 import com.qmth.distributed.print.business.cache.CreatePdfCacheUtil;
 import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
-import com.qmth.distributed.print.business.enums.PrintMethodEnum;
+import com.qmth.teachcloud.common.entity.*;
+import com.qmth.teachcloud.common.enums.PrintMethodEnum;
 import com.qmth.distributed.print.business.enums.StudentClazzEnum;
 import com.qmth.distributed.print.business.service.*;
 import com.qmth.teachcloud.common.config.DictionaryConfig;
 import com.qmth.teachcloud.common.contant.SystemConstant;
-import com.qmth.teachcloud.common.entity.BasicAttachment;
-import com.qmth.teachcloud.common.entity.BasicClazz;
-import com.qmth.teachcloud.common.entity.BasicSemester;
-import com.qmth.teachcloud.common.entity.TBTask;
 import com.qmth.teachcloud.common.enums.*;
 import com.qmth.teachcloud.common.service.*;
 import com.qmth.teachcloud.common.util.ConvertUtil;
@@ -1108,7 +1105,7 @@ public class CreatePdfUtil {
      * @param tbTask
      * @param userId
      * @param examDetail
-     * @param basicExamRule
+     * @param basicExam
      * @param mergePdfDeleteList
      * @return
      * @throws IOException
@@ -1120,7 +1117,7 @@ public class CreatePdfUtil {
                                           TBTask tbTask,
                                           Long userId,
                                           ExamDetail examDetail,
-                                          BasicExamRule basicExamRule,
+                                          BasicExam basicExam,
                                           List<PdfDto> mergePdfDeleteList) throws Exception {
         boolean oss = dictionaryConfig.sysDomain().isOss();
         StringJoiner stringJoiner = new StringJoiner("").add(SystemConstant.getUserDir()).add(File.separator);
@@ -1156,7 +1153,7 @@ public class CreatePdfUtil {
         examDetail.setPaperPages(PdfUtil.getPdfPages(localPaperPdfFile));
         examDetail.setCardPages(PdfUtil.getPdfPages(localA3PdfCardFile));
         examDetail.setPagesA4(PdfUtil.getPdfPages(localA4PdfFile));
-        if (PrintMethodEnum.AUTO == basicExamRule.getPrintMethod()) {
+        if (PrintMethodEnum.AUTO == basicExam.getPrintMethod()) {
             examDetail.setStatus(ExamDetailStatusEnum.WAITING);
         } else {
             examDetail.setStatus(ExamDetailStatusEnum.READY);

+ 3 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/BasicClazzController.java

@@ -4,11 +4,13 @@ import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.distributed.print.business.bean.result.EditResult;
 import com.qmth.distributed.print.business.service.PrintCommonService;
 import com.qmth.distributed.print.business.templete.execute.AsyncBasicClazzImportService;
+import com.qmth.teachcloud.common.annotation.OperationLogDetail;
 import com.qmth.teachcloud.common.bean.params.BasicClazzParams;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.entity.TBTask;
 import com.qmth.teachcloud.common.enums.TaskTypeEnum;
+import com.qmth.teachcloud.common.enums.log.CustomizedOperationTypeEnum;
 import com.qmth.teachcloud.common.service.BasicClazzService;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
@@ -49,6 +51,7 @@ public class BasicClazzController {
     @ApiOperation(value = "班级基本信息管理-查询")
     @RequestMapping(value = "/query", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
+    @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.SEARCH)
     public Result findBasicClazzList(@ApiParam(value = "查询参数(班级号或班级名)") @RequestParam(required = false) String queryParams,
                                      @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                                      @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {

+ 49 - 3
teachcloud-common/src/main/java/com/qmth/teachcloud/common/aspect/LogAspect.java

@@ -1,13 +1,19 @@
 package com.qmth.teachcloud.common.aspect;
 
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qmth.boot.api.exception.ApiException;
 import com.qmth.teachcloud.common.annotation.OperationLogDetail;
 import com.qmth.teachcloud.common.bean.dto.LogArgsDto;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.BasicOperationLog;
+import com.qmth.teachcloud.common.entity.SysPrivilege;
 import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.PrivilegeEnum;
+import com.qmth.teachcloud.common.enums.log.CustomizedOperationTypeEnum;
+import com.qmth.teachcloud.common.enums.log.OperationTypeEnum;
 import com.qmth.teachcloud.common.service.BasicOperationLogService;
+import com.qmth.teachcloud.common.service.SysPrivilegeService;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.aspectj.lang.JoinPoint;
@@ -36,6 +42,8 @@ import java.util.*;
 public class LogAspect {
     @Resource
     private BasicOperationLogService basicOperationLogService;
+    @Resource
+    private SysPrivilegeService sysPrivilegeService;
 
     private final static Logger log = LoggerFactory.getLogger(LogAspect.class);
 
@@ -124,10 +132,20 @@ public class LogAspect {
         // 注解中的信息
         OperationLogDetail annotation = signature.getMethod().getAnnotation(OperationLogDetail.class);
         if (annotation != null) {
-            operationLog.setDetail(getDetail(((MethodSignature) joinPoint.getSignature()).getParameterNames(), joinPoint.getArgs(), annotation));
+            String detail = annotation.detail();
+            if (SystemConstant.strNotNull(detail)) {
+                operationLog.setDetail(getDetail(((MethodSignature) joinPoint.getSignature()).getParameterNames(), joinPoint.getArgs(), annotation));
+            } else {
+                operationLog.setDetail(autoCreateOperationLogDetailByUrl(request.getServletPath()));
+            }
             operationLog.setLevel(annotation.level());
-            operationLog.setCustomizedOperationType(annotation.customizedOperationType());
-            operationLog.setOperationType(annotation.operationType());
+            CustomizedOperationTypeEnum customizedOperationType = annotation.customizedOperationType();
+            operationLog.setCustomizedOperationType(customizedOperationType);
+            OperationTypeEnum operationType = annotation.operationType();
+            if (OperationTypeEnum.UN_KNOW.equals(operationType)) {
+                operationType = customizedOperationType.getOperationType();
+            }
+            operationLog.setOperationType(operationType);
             operationLog.setOperationUnit(annotation.operationUnit());
             operationLog.setSystemType(annotation.system());
         }
@@ -182,6 +200,34 @@ public class LogAspect {
         return detail;
     }
 
+    /**
+     * 根据权限url自动创建操作日志详情
+     *
+     * @param url url
+     * @return 操作日志详情
+     */
+    private String autoCreateOperationLogDetailByUrl(String url) {
+        String detail = "";
+        List<SysPrivilege> sysPrivilegeList = sysPrivilegeService.list(new QueryWrapper<SysPrivilege>()
+                .lambda()
+                .eq(SysPrivilege::getUrl, url)
+                .eq(SysPrivilege::getType, PrivilegeEnum.URL)
+                .orderByAsc(SysPrivilege::getId));
+        if (sysPrivilegeList.size() > 0) {
+            SysPrivilege sysPrivilege = sysPrivilegeList.get(0);
+            Long parentId = sysPrivilege.getParentId();
+            String operationName = sysPrivilege.getName();
+            String path = sysPrivilegeService.findPrivilegeUrlCatalog(parentId);
+            if (SystemConstant.strNotNull(path)) {
+                path = path.substring(0, path.length() - SystemConstant.CATALOG_LINK.length());
+                detail = path + SystemConstant.OPERATE_LINK + operationName;
+            } else {
+                detail = operationName;
+            }
+        }
+        return detail;
+    }
+
     @Before(value = "operationLog()")
     public void doBeforeAdvice(JoinPoint joinPoint) {
         System.out.println("进入方法前执行.....");

+ 2 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java

@@ -252,6 +252,8 @@ public class SystemConstant {
     public static final String GET_EQUAL = "=";
     public static final String PATH_MATCH = "*";
     public static final String PATH_SUBSTR = "/#";
+    public static final String CATALOG_LINK = "->";
+    public static final String OPERATE_LINK = "--";
 
     /**
      * oss url过期时间

+ 25 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/BasicExam.java

@@ -6,6 +6,7 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.teachcloud.common.base.BaseEntity;
 import com.qmth.teachcloud.common.enums.ExamCategoryEnum;
 import com.qmth.teachcloud.common.enums.ExamModelEnum;
+import com.qmth.teachcloud.common.enums.PrintMethodEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -44,6 +45,14 @@ public class BasicExam extends BaseEntity implements Serializable {
     @TableField("exam_model")
     private ExamModelEnum examModel;
 
+    @ApiModelProperty(value = "是否启用入库审核")
+    @TableField("review")
+    private Boolean review;
+
+    @ApiModelProperty(value = "提交打印方式")
+    @TableField("print_method")
+    private PrintMethodEnum printMethod;
+
     @ApiModelProperty(value = "启用/禁用")
     @TableField("enable")
     private Boolean enable;
@@ -100,6 +109,22 @@ public class BasicExam extends BaseEntity implements Serializable {
         this.examModel = examModel;
     }
 
+    public Boolean getReview() {
+        return review;
+    }
+
+    public void setReview(Boolean review) {
+        this.review = review;
+    }
+
+    public PrintMethodEnum getPrintMethod() {
+        return printMethod;
+    }
+
+    public void setPrintMethod(PrintMethodEnum printMethod) {
+        this.printMethod = printMethod;
+    }
+
     public Boolean getEnable() {
         return enable;
     }

+ 2 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/ExceptionResultEnum.java

@@ -71,6 +71,8 @@ public enum ExceptionResultEnum {
 
     EXAM_RULE_IS_NULL(HttpStatus.INTERNAL_SERVER_ERROR, 50000026, "考务规则为空"),
 
+    EXAM_IS_NULL(HttpStatus.INTERNAL_SERVER_ERROR, 50000026, "考试不存在"),
+
     EXAM_DETAIL_IS_NULL(HttpStatus.INTERNAL_SERVER_ERROR, 50000027, "考场数据为空"),
 
     EXAM_CARD_IS_NULL(HttpStatus.INTERNAL_SERVER_ERROR, 50000028, "题卡为空"),

+ 1 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/PrintMethodEnum.java → teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/PrintMethodEnum.java

@@ -1,6 +1,4 @@
-package com.qmth.distributed.print.business.enums;
-
-import com.qmth.teachcloud.common.enums.EnumResult;
+package com.qmth.teachcloud.common.enums;
 
 import java.util.ArrayList;
 import java.util.List;

+ 17 - 10
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/log/CustomizedOperationTypeEnum.java

@@ -6,22 +6,29 @@ package com.qmth.teachcloud.common.enums.log;
  * @Date: 2022-11-29
  */
 public enum CustomizedOperationTypeEnum {
-    LOGIN("用户登录"),
-    LOGOUT("用户登出"),
-    ADD("新增"),
-    DELETE("删除"),
-    UPDATE("修改"),
-    SEARCH("查询"),
-    IMPORT("导入"),
-    EXPORT("导出"),
-    UN_KNOW("未知");
+    LOGIN("用户登录", OperationTypeEnum.UN_KNOW),
+    LOGOUT("用户登出", OperationTypeEnum.UN_KNOW),
+    ADD("新增", OperationTypeEnum.EDIT),
+    DELETE("删除", OperationTypeEnum.DELETE),
+    UPDATE("修改", OperationTypeEnum.EDIT),
+    SEARCH("查询", OperationTypeEnum.SELECT),
+    IMPORT("导入", OperationTypeEnum.EDIT),
+    EXPORT("导出", OperationTypeEnum.SELECT),
+    PUSH("推送", OperationTypeEnum.UN_KNOW),
+    UN_KNOW("未知", OperationTypeEnum.UN_KNOW);
     private final String desc;
+    private final OperationTypeEnum operationType;
 
-    CustomizedOperationTypeEnum(String desc) {
+    CustomizedOperationTypeEnum(String desc, OperationTypeEnum operationType) {
         this.desc = desc;
+        this.operationType = operationType;
     }
 
     public String getDesc() {
         return desc;
     }
+
+    public OperationTypeEnum getOperationType() {
+        return operationType;
+    }
 }

+ 9 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysPrivilegeService.java

@@ -72,4 +72,13 @@ public interface SysPrivilegeService extends IService<SysPrivilege> {
      * @return
      */
     void removeCustomList();
+
+    /**
+     * 构建权限url的目录
+     *
+     * @param privilegeParentId 权限父id eg。 101
+     * @param path              当前路径
+     * @return eg。考试中心->印刷管理->印刷计划管理
+     */
+    String findPrivilegeUrlCatalog(Long privilegeParentId);
 }

+ 15 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysPrivilegeServiceImpl.java

@@ -312,6 +312,21 @@ public class SysPrivilegeServiceImpl extends ServiceImpl<SysPrivilegeMapper, Sys
 
     }
 
+    @Override
+    public String findPrivilegeUrlCatalog(Long privilegeParentId) {
+        SysPrivilege sysPrivilege = this.getById(privilegeParentId);
+        if (Objects.nonNull(sysPrivilege)) {
+            String currentName = sysPrivilege.getName();
+            Long parentId = sysPrivilege.getParentId();
+            if (SystemConstant.longNotNull(parentId)) {
+                return this.findPrivilegeUrlCatalog(parentId) + SystemConstant.CATALOG_LINK + currentName;
+            }else {
+                return currentName;
+            }
+        }
+        return SystemConstant.CATALOG_LINK;
+    }
+
     /**
      * 获取自定义菜单
      *