Browse Source

bug修改

xiaof 4 năm trước cách đây
mục cha
commit
f8e95ae7c4
24 tập tin đã thay đổi với 491 bổ sung82 xóa
  1. 18 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/CardDetailDto.java
  2. 23 4
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/ExamCardParams.java
  3. 12 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/BasicTemplate.java
  4. 28 8
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamCard.java
  5. 43 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/CardStatusEnum.java
  6. 43 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/CardTypeEnum.java
  7. 2 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/EnumType.java
  8. 5 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamCardMapper.java
  9. 4 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamTaskDetailMapper.java
  10. 2 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/BasicTemplateService.java
  11. 8 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamCardService.java
  12. 2 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskDetailService.java
  13. 91 8
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicTemplateServiceImpl.java
  14. 88 42
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamCardServiceImpl.java
  15. 5 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskDetailServiceImpl.java
  16. 9 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java
  17. 6 4
      distributed-print-business/src/main/resources/db/init-table.sql
  18. 50 1
      distributed-print-business/src/main/resources/mapper/ExamCardMapper.xml
  19. 5 2
      distributed-print-business/src/main/resources/mapper/ExamTaskDetailMapper.xml
  20. 3 4
      distributed-print-business/src/main/resources/mapper/ExamTaskMapper.xml
  21. 1 0
      distributed-print-common/src/main/java/com/qmth/distributed/print/common/contant/SystemConstant.java
  22. 13 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/BasicTemplateController.java
  23. 3 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/EnumsController.java
  24. 27 4
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamCardController.java

+ 18 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/CardDetailDto.java

@@ -9,6 +9,8 @@ public class CardDetailDto {
     private String title;
     private String makeMethod;
     private String content;
+    private String type;
+    private String paperType;
 
     public String getCardId() {
         return cardId;
@@ -41,4 +43,20 @@ public class CardDetailDto {
     public void setContent(String content) {
         this.content = content;
     }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getPaperType() {
+        return paperType;
+    }
+
+    public void setPaperType(String paperType) {
+        this.paperType = paperType;
+    }
 }

+ 23 - 4
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/ExamCardParams.java

@@ -1,6 +1,7 @@
 package com.qmth.distributed.print.business.bean.params;
 
-import com.qmth.distributed.print.business.enums.ExamCardStatusEnum;
+import com.qmth.distributed.print.business.enums.CardStatusEnum;
+import com.qmth.distributed.print.business.enums.CardTypeEnum;
 import com.qmth.distributed.print.business.enums.MakeMethodEnum;
 
 /**
@@ -9,7 +10,7 @@ import com.qmth.distributed.print.business.enums.MakeMethodEnum;
 public class ExamCardParams {
 
     private Long id;
-    private ExamCardStatusEnum status;
+    private CardStatusEnum status;
     private String examTaskId;
     private String courseCode;
     private String courseName;
@@ -18,6 +19,8 @@ public class ExamCardParams {
     private String content;
     private String htmlContent;
     private String attachmentId;
+    private CardTypeEnum type;
+    private Long templateId;
 
     public Long getId() {
         return id;
@@ -27,11 +30,11 @@ public class ExamCardParams {
         this.id = id;
     }
 
-    public ExamCardStatusEnum getStatus() {
+    public CardStatusEnum getStatus() {
         return status;
     }
 
-    public void setStatus(ExamCardStatusEnum status) {
+    public void setStatus(CardStatusEnum status) {
         this.status = status;
     }
 
@@ -98,4 +101,20 @@ public class ExamCardParams {
     public void setAttachmentId(String attachmentId) {
         this.attachmentId = attachmentId;
     }
+
+    public CardTypeEnum getType() {
+        return type;
+    }
+
+    public void setType(CardTypeEnum type) {
+        this.type = type;
+    }
+
+    public Long getTemplateId() {
+        return templateId;
+    }
+
+    public void setTemplateId(Long templateId) {
+        this.templateId = templateId;
+    }
 }

+ 12 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/BasicTemplate.java

@@ -58,8 +58,11 @@ public class BasicTemplate extends BaseEntity implements Serializable {
     @TableField(exist = false)
     private Long[] orgIds;
 
+    @TableField(exist = false)
+    private String url;
+
 
-    public Long getSchoolId() {
+   public Long getSchoolId() {
         return schoolId;
     }
 
@@ -122,4 +125,12 @@ public class BasicTemplate extends BaseEntity implements Serializable {
     public void setOrgIds(Long[] orgIds) {
         this.orgIds = orgIds;
     }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
 }

+ 28 - 8
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamCard.java

@@ -5,7 +5,8 @@ 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.base.BaseEntity;
-import com.qmth.distributed.print.business.enums.ExamCardStatusEnum;
+import com.qmth.distributed.print.business.enums.CardStatusEnum;
+import com.qmth.distributed.print.business.enums.CardTypeEnum;
 import com.qmth.distributed.print.business.enums.MakeMethodEnum;
 
 import java.io.Serializable;
@@ -49,7 +50,13 @@ public class ExamCard extends BaseEntity implements Serializable {
     /**
      * STAGE-暂存,SUBMIT-提交
      */
-    private ExamCardStatusEnum status;
+    private CardStatusEnum status;
+
+    private CardTypeEnum type;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @TableField("template_id")
+    private Long templateId;
 
     public Long getSchoolId() {
         return schoolId;
@@ -91,15 +98,28 @@ public class ExamCard extends BaseEntity implements Serializable {
         this.makeMethod = makeMethod;
     }
 
-    public static long getSerialVersionUID() {
-        return serialVersionUID;
-    }
-
-    public ExamCardStatusEnum getStatus() {
+    public CardStatusEnum getStatus() {
         return status;
     }
 
-    public void setStatus(ExamCardStatusEnum status) {
+    public void setStatus(CardStatusEnum status) {
         this.status = status;
     }
+
+    public CardTypeEnum getType() {
+        return type;
+    }
+
+    public void setType(CardTypeEnum type) {
+        this.type = type;
+    }
+
+    public Long getTemplateId() {
+        return templateId;
+    }
+
+    public void setTemplateId(Long templateId) {
+        this.templateId = templateId;
+    }
+
 }

+ 43 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/CardStatusEnum.java

@@ -0,0 +1,43 @@
+package com.qmth.distributed.print.business.enums;
+
+import com.qmth.distributed.print.business.enums.result.EnumResult;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 通用模板类型
+ * @Date: 2021/3/23.
+ */
+public enum CardStatusEnum {
+
+    STAGE("暂存"),
+    SUBMIT("提交");
+
+    CardStatusEnum(String desc) {
+        this.desc = desc;
+    }
+
+    private String desc;
+
+    public String getDesc() {
+        return desc;
+    }
+
+    /**
+     * @return
+     */
+    public static List<EnumResult> listTypes() {
+        List<EnumResult> list = new ArrayList<EnumResult>();
+        for (CardStatusEnum value : CardStatusEnum.values()) {
+            EnumResult result = new EnumResult();
+            result.setName(value.name());
+            result.setOrdinal(value.ordinal());
+            result.setCode(null);
+            result.setDesc(value.getDesc());
+            list.add(result);
+        }
+        return list;
+    }
+
+}

+ 43 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/CardTypeEnum.java

@@ -0,0 +1,43 @@
+package com.qmth.distributed.print.business.enums;
+
+import com.qmth.distributed.print.business.enums.result.EnumResult;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 通用模板类型
+ * @Date: 2021/3/23.
+ */
+public enum CardTypeEnum {
+
+    GENERIC("通卡"),
+    CUSTOM("自定义");
+
+    CardTypeEnum(String desc) {
+        this.desc = desc;
+    }
+
+    private String desc;
+
+    public String getDesc() {
+        return desc;
+    }
+
+    /**
+     * @return
+     */
+    public static List<EnumResult> listTypes() {
+        List<EnumResult> list = new ArrayList<EnumResult>();
+        for (CardTypeEnum value : CardTypeEnum.values()) {
+            EnumResult result = new EnumResult();
+            result.setName(value.name());
+            result.setOrdinal(value.ordinal());
+            result.setCode(null);
+            result.setDesc(value.getDesc());
+            list.add(result);
+        }
+        return list;
+    }
+
+}

+ 2 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/EnumType.java

@@ -22,7 +22,8 @@ public enum EnumType {
     CARD_REQUIRED_FIELDS("题卡规则必选字段"),
     ORG_CENTER_TYPE_ENUM("机构用户中心类型"),
     MAKE_METHOD("题卡制作方式"),
-    PRINT_PLAN_STATUS_ENUM("印刷计划状态类型");
+    PRINT_PLAN_STATUS_ENUM("印刷计划状态类型"),
+    CARD_TYPE("题卡类型");
 
     EnumType(String desc) {
         this.desc = desc;

+ 5 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamCardMapper.java

@@ -5,11 +5,10 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.distributed.print.business.bean.dto.CardCustDto;
 import com.qmth.distributed.print.business.bean.dto.CardDetailDto;
-import com.qmth.distributed.print.business.bean.result.WorkResult;
 import com.qmth.distributed.print.business.entity.ExamCard;
 import org.apache.ibatis.annotations.Param;
 
-import java.util.Map;
+import java.util.List;
 
 /**
  * <p>
@@ -24,4 +23,8 @@ public interface ExamCardMapper extends BaseMapper<ExamCard> {
     IPage<CardCustDto> listCardCust(Page<CardCustDto> page, @Param("status") String status, @Param("paperNumber") String paperNumber, @Param("userId") String userId, @Param("applyStartTime") Long applyStartTime, @Param("applyEndTime") Long applyEndTime, @Param("finishStartTime") Long finishStartTime, @Param("finishEndTime") Long finishEndTime);
 
     CardDetailDto getCardDetail(Long cardId);
+
+    List<ExamCard> listGenericCard(@Param("schoolId") Long schoolId, @Param("orgId") Long orgId, @Param("type") String type);
+
+    List<ExamCard> listCustom(@Param("schoolId") Long schoolId, @Param("orgId") Long orgId, @Param("courseCode") String courseCode, @Param("type") String type);
 }

+ 4 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamTaskDetailMapper.java

@@ -7,6 +7,8 @@ import com.qmth.distributed.print.business.bean.dto.ExamTaskDetailDto;
 import com.qmth.distributed.print.business.entity.ExamTaskDetail;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * <p>
  * 命题任务明细表(入库申请) Mapper 接口
@@ -17,4 +19,6 @@ import org.apache.ibatis.annotations.Param;
  */
 public interface ExamTaskDetailMapper extends BaseMapper<ExamTaskDetail> {
     IPage<ExamTaskDetailDto> listPage(Page<ExamTaskDetailDto> page, @Param("schoolId") Long schoolId, @Param("relateType") String relateType, @Param("printPlanId") Long printPlanId, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber);
+
+    List<ExamTaskDetail> listByTemplateId(Long templateId);
 }

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

@@ -21,4 +21,6 @@ public interface BasicTemplateService extends IService<BasicTemplate> {
     boolean saveTemplate(BasicTemplate template);
 
     boolean enable(BasicTemplate template);
+
+    BasicTemplate getOne(Long id);
 }

+ 8 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamCardService.java

@@ -7,6 +7,8 @@ import com.qmth.distributed.print.business.bean.dto.CardDetailDto;
 import com.qmth.distributed.print.business.bean.params.ExamCardParams;
 import com.qmth.distributed.print.business.entity.ExamCard;
 
+import java.util.List;
+
 /**
  * <p>
  * 题卡 服务类
@@ -24,4 +26,10 @@ public interface ExamCardService extends IService<ExamCard> {
     String saveExamCardCust(ExamCardParams examCardParams);
 
     CardDetailDto getCardDetail(Long cardId);
+
+    ExamCard getOneByTemplateId(Long id);
+
+    boolean usedCardByTemplateId(Long id);
+
+    List<ExamCard> listSelectCard(String courseCode, Long cardRuleId, String paperType);
 }

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

@@ -30,4 +30,6 @@ public interface ExamTaskDetailService extends IService<ExamTaskDetail> {
     void bindCardId(String examTaskId, Long cardId);
 
     void resetCardId(Long id);
+
+    List<ExamTaskDetail> listByTemplateId(Long templateId);
 }

+ 91 - 8
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicTemplateServiceImpl.java

@@ -1,29 +1,31 @@
 package com.qmth.distributed.print.business.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.distributed.print.business.bean.dto.TemplateDto;
-import com.qmth.distributed.print.business.bean.params.TemplateParam;
-import com.qmth.distributed.print.business.entity.BasicTemplate;
-import com.qmth.distributed.print.business.entity.SysOrg;
-import com.qmth.distributed.print.business.entity.SysUser;
+import com.qmth.distributed.print.business.bean.params.ExamCardParams;
+import com.qmth.distributed.print.business.entity.*;
+import com.qmth.distributed.print.business.enums.CardStatusEnum;
+import com.qmth.distributed.print.business.enums.CardTypeEnum;
+import com.qmth.distributed.print.business.enums.MakeMethodEnum;
 import com.qmth.distributed.print.business.mapper.BasicTemplateMapper;
-import com.qmth.distributed.print.business.service.BasicTemplateOrgService;
-import com.qmth.distributed.print.business.service.BasicTemplateService;
+import com.qmth.distributed.print.business.service.*;
+import com.qmth.distributed.print.business.util.OssUtil;
 import com.qmth.distributed.print.business.util.ServletUtil;
 import com.qmth.distributed.print.common.contant.SystemConstant;
 import com.qmth.distributed.print.common.enums.ExceptionResultEnum;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import java.io.*;
 import java.util.List;
 import java.util.Objects;
 
-import static com.qmth.distributed.print.business.util.ServletUtil.getRequestUser;
-
 /**
  * <p>
  * 通用模板 服务实现类
@@ -38,6 +40,19 @@ public class BasicTemplateServiceImpl extends ServiceImpl<BasicTemplateMapper, B
     @Autowired
     private BasicTemplateOrgService basicTemplateOrgService;
 
+    @Autowired
+    private CommonService commonService;
+
+    @Autowired
+    private BasicAttachmentService basicAttachmentService;
+
+    @Autowired
+    private ExamCardService examCardService;
+
+    @Autowired
+    private OssUtil ossUtil;
+
+
     @Override
     public IPage<TemplateDto> list(Boolean enable, String type, String name, Long startTime, Long endTime, Integer pageNumber, Integer pageSize) {
         Page<TemplateDto> page = new Page<>(pageNumber, pageSize);
@@ -53,6 +68,7 @@ public class BasicTemplateServiceImpl extends ServiceImpl<BasicTemplateMapper, B
         return templateDtoIPage;
     }
 
+    @Transactional
     @Override
     public boolean saveTemplate(BasicTemplate template) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
@@ -79,6 +95,12 @@ public class BasicTemplateServiceImpl extends ServiceImpl<BasicTemplateMapper, B
                 throw ExceptionResultEnum.ERROR.exception("模板名称已存在");
             }
 
+            // 校验模板是否已有绑定命题任务
+            boolean used = examCardService.usedCardByTemplateId(template.getId());
+            if (used) {
+                throw ExceptionResultEnum.ERROR.exception("通用题卡模板已绑定任务,不能修改");
+            }
+
             template.setUpdateId(sysUser.getId());
             template.setUpdateTime(System.currentTimeMillis());
 
@@ -91,13 +113,74 @@ public class BasicTemplateServiceImpl extends ServiceImpl<BasicTemplateMapper, B
         // 新增权限
         basicTemplateOrgService.saveBatch(template.getType(), template.getId(), template.getOrgIds(), template.getCreateId());
 
+        // 通用题卡,同步更新exam_card
+        BasicAttachment attachment = basicAttachmentService.getById(template.getAttachmentId());
+
+        ExamCard examCard = examCardService.getOneByTemplateId(template.getId());
+        ExamCardParams examCardParams = new ExamCardParams();
+        examCardParams.setId(examCard == null ? null : examCard.getId());
+        examCardParams.setTitle(attachment.getName());
+        examCardParams.setMakeMethod(MakeMethodEnum.SELECT);// 默认SELECT
+        examCardParams.setType(CardTypeEnum.GENERIC); // 默认GENERIC
+        examCardParams.setTemplateId(template.getId());
+        examCardParams.setStatus(CardStatusEnum.SUBMIT); // 默认SUBMIT
+        examCardParams.setHtmlContent(readFileByAttachmentId(attachment.getPath()));
+        examCardService.saveExamCard(examCardParams);
         return isSuccess;
     }
 
     @Override
     public boolean enable(BasicTemplate template) {
+        // 校验模板是否已有绑定命题任务
+        boolean used = examCardService.usedCardByTemplateId(template.getId());
+        if (used && !template.getEnable()) {
+            throw ExceptionResultEnum.ERROR.exception("通用题卡模板已绑定任务,不能禁用");
+        }
         UpdateWrapper<BasicTemplate> updateWrapper = new UpdateWrapper<>();
         updateWrapper.lambda().set(BasicTemplate::getEnable, template.getEnable()).eq(BasicTemplate::getId, template.getId());
         return this.update(updateWrapper);
     }
+
+    @Override
+    public BasicTemplate getOne(Long id) {
+        BasicTemplate basicTemplate = this.getById(id);
+        if (basicTemplate.getAttachmentId() != null) {
+            BasicAttachment basicAttachment = basicAttachmentService.getById(basicTemplate.getAttachmentId());
+            if (basicAttachment == null) {
+                throw ExceptionResultEnum.ERROR.exception("附件数据异常");
+            }
+            String url = commonService.filePreview(basicAttachment.getPath());
+            basicTemplate.setUrl(url);
+        }
+        return basicTemplate;
+    }
+
+    /**
+     * 读取附件内容
+     *
+     * @return
+     */
+    private String readFileByAttachmentId(String path) {
+        // 解析path
+        JSONObject object = JSONObject.parseObject(path);
+        String filePath = object.getString(SystemConstant.PATH);
+        String type = object.getString(SystemConstant.TYPE);
+        StringBuffer sb = new StringBuffer();
+        try {
+            byte[] bytes = null;
+            if (type.equals(SystemConstant.OSS)) {
+                bytes = ossUtil.ossDownload(filePath);
+            }
+            InputStream fis = new ByteArrayInputStream(bytes);
+            BufferedReader br = new BufferedReader(new InputStreamReader(fis));
+            String s;
+            while ((s = br.readLine()) != null) {
+                sb.append(s).append("\n");
+            }
+        } catch (IOException e) {
+            throw ExceptionResultEnum.ERROR.exception("文件读取异常");
+        }
+        return sb.toString();
+    }
+
 }

+ 88 - 42
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamCardServiceImpl.java

@@ -1,5 +1,6 @@
 package com.qmth.distributed.print.business.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -7,6 +8,8 @@ import com.qmth.distributed.print.business.bean.dto.CardCustDto;
 import com.qmth.distributed.print.business.bean.dto.CardDetailDto;
 import com.qmth.distributed.print.business.bean.params.ExamCardParams;
 import com.qmth.distributed.print.business.entity.*;
+import com.qmth.distributed.print.business.enums.CardStatusEnum;
+import com.qmth.distributed.print.business.enums.CardTypeEnum;
 import com.qmth.distributed.print.business.enums.MakeMethodEnum;
 import com.qmth.distributed.print.business.mapper.ExamCardMapper;
 import com.qmth.distributed.print.business.service.BasicExamRuleService;
@@ -21,8 +24,11 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
-import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -50,11 +56,11 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         SysUser user = (SysUser) ServletUtil.getRequestUser();
 
-        validateCardData(examCardParams, schoolId);
+        validateCardData(examCardParams);
 
         // 新增
-        ExamCard examCard = null;
-        ExamCardDetail examCardDetail = null;
+        ExamCard examCard;
+        ExamCardDetail examCardDetail;
         if (examCardParams.getId() == null) {
             examCard = new ExamCard();
             examCard.setId(SystemConstant.getDbUuid());
@@ -64,6 +70,8 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
             examCard.setTitle(examCardParams.getTitle());
             examCard.setMakeMethod(examCardParams.getMakeMethod());
             examCard.setStatus(examCardParams.getStatus());
+            examCard.setType(examCardParams.getType());
+            examCard.setTemplateId(examCardParams.getTemplateId());
             examCard.setCreateId(user.getId());
             examCard.setCreateTime(System.currentTimeMillis());
             this.save(examCard);
@@ -88,6 +96,7 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
             if (!examCardParams.getMakeMethod().name().equals(examCard.getMakeMethod().name())) {
                 throw ExceptionResultEnum.ERROR.exception("题卡制作方式不能更改");
             }
+            examCard.setStatus(examCardParams.getStatus());
             examCard.setUpdateId(user.getId());
             examCard.setUpdateTime(System.currentTimeMillis());
             this.updateById(examCard);
@@ -123,7 +132,7 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         SysUser user = (SysUser) ServletUtil.getRequestUser();
 
-        if(!MakeMethodEnum.CUST.name().equals(examCardParams.getMakeMethod().name())){
+        if (!MakeMethodEnum.CUST.name().equals(examCardParams.getMakeMethod().name())) {
             throw ExceptionResultEnum.ERROR.exception("题卡制作类型错误");
         }
         if (StringUtils.isBlank(examCardParams.getAttachmentId())) {
@@ -138,6 +147,7 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
         examCard.setMakeMethod(examCardParams.getMakeMethod());
         examCard.setTitle(examCardParams.getTitle());
         examCard.setStatus(examCardParams.getStatus());
+        examCard.setType(CardTypeEnum.CUSTOM);
         examCard.setCreateId(user.getId());
         examCard.setCreateTime(System.currentTimeMillis());
         this.save(examCard);
@@ -161,13 +171,48 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
         return this.baseMapper.getCardDetail(cardId);
     }
 
+    @Override
+    public ExamCard getOneByTemplateId(Long templateId) {
+        QueryWrapper<ExamCard> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(ExamCard::getTemplateId, templateId);
+        return this.getOne(queryWrapper);
+    }
+
+    @Override
+    public boolean usedCardByTemplateId(Long templateId) {
+        List<ExamTaskDetail> list = examTaskDetailService.listByTemplateId(templateId);
+        return !list.isEmpty();
+    }
+
+    @Override
+    public List<ExamCard> listSelectCard(String courseCode, Long cardRuleId, String paperType) {
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+
+        // 通用题卡
+        List<ExamCard> list = new ArrayList<>();
+        List<ExamCard> genericCards = this.baseMapper.listGenericCard(schoolId, sysUser.getOrgId(), CardTypeEnum.GENERIC.name());
+        if (!genericCards.isEmpty()) {
+            list.addAll(genericCards);
+        }
+        // 专卡
+        if (SystemConstant.ALL_CARD != cardRuleId) {
+            List<ExamCard> customCards = this.baseMapper.listCustom(schoolId, sysUser.getOrgId(), courseCode, CardTypeEnum.CUSTOM.name());
+            if(!customCards.isEmpty()){
+                list.addAll(customCards);
+            }
+        }
+        Collections.sort(list, Comparator.comparing(ExamCard::getType));
+        return list;
+    }
+
 
     /**
      * 数据验证
      *
      * @param examCardParams
      */
-    private void validateCardData(ExamCardParams examCardParams, Long schoolId) {
+    private void validateCardData(ExamCardParams examCardParams) {
         BasicExamRule basicExamRule = basicExamRuleService.getBySchoolId();
         if (basicExamRule == null) {
             throw ExceptionResultEnum.ERROR.exception("通用规则未设置");
@@ -179,48 +224,49 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
         if (!basicExamRule.getCustomCard() && MakeMethodEnum.CUST.name().equals(examCardParams.getMakeMethod().name())) {
             throw ExceptionResultEnum.ERROR.exception("未启用客服制卡,不能选择该方式制作题卡");
         }
-        if (Objects.isNull(examCardParams.getStatus())) {
+        if (examCardParams.getStatus() == null) {
             throw ExceptionResultEnum.ERROR.exception("提交方式不能为空");
         }
-        if (examCardParams.getExamTaskId() == null) {
-            throw ExceptionResultEnum.ERROR.exception("命题任务ID不能为空");
-        }
-        if (StringUtils.isBlank(examCardParams.getCourseCode())) {
-            throw ExceptionResultEnum.ERROR.exception("课程代码不能为空");
-        }
-        if (StringUtils.isBlank(examCardParams.getCourseName())) {
-            throw ExceptionResultEnum.ERROR.exception("课程名称不能为空");
-        }
-
-        if (MakeMethodEnum.SELECT.name().equals(examCardParams.getMakeMethod().name())) {
-            if (examCardParams.getId() == null) {
-                throw ExceptionResultEnum.ERROR.exception("选择已有题卡时,题卡ID不能为空");
+        if (CardTypeEnum.CUSTOM.name().equals(examCardParams.getType())) {
+            if (examCardParams.getExamTaskId() == null) {
+                throw ExceptionResultEnum.ERROR.exception("命题任务ID不能为空");
             }
-            // 当前选择题卡是否已绑定
-            List<ExamTaskDetail> list = examTaskDetailService.listByCardId(examCardParams.getId());
-            if (list != null && list.size() > 0) {
-                throw ExceptionResultEnum.ERROR.exception("选择的题卡已被其它命题任务绑定");
+            if (StringUtils.isBlank(examCardParams.getCourseCode())) {
+                throw ExceptionResultEnum.ERROR.exception("课程代码不能为空");
             }
-
-        } else if (MakeMethodEnum.SELF.name().equals(examCardParams.getMakeMethod().name())) {
-            if (StringUtils.isBlank(examCardParams.getTitle())) {
-                throw ExceptionResultEnum.ERROR.exception("题卡标题不能为空");
-            }
-            if (StringUtils.isBlank(examCardParams.getContent())) {
-                throw ExceptionResultEnum.ERROR.exception("题卡内容不能为空");
+            if (StringUtils.isBlank(examCardParams.getCourseName())) {
+                throw ExceptionResultEnum.ERROR.exception("课程名称不能为空");
             }
-            if ("SUBMIT".equals(examCardParams.getStatus())) {
-                if (StringUtils.isBlank(examCardParams.getHtmlContent())) {
-                    throw ExceptionResultEnum.ERROR.exception("提交题卡时,html内容不能为空");
+            if (MakeMethodEnum.SELECT.name().equals(examCardParams.getMakeMethod().name())) {
+                if (examCardParams.getId() == null) {
+                    throw ExceptionResultEnum.ERROR.exception("选择已有题卡时,题卡ID不能为空");
                 }
-            }
-        } else if (MakeMethodEnum.CUST.name().equals(examCardParams.getMakeMethod().name())) {
-            if (StringUtils.isBlank(examCardParams.getContent())) {
-                throw ExceptionResultEnum.ERROR.exception("题卡内容不能为空");
-            }
-            if ("SUBMIT".equals(examCardParams.getStatus())) {
-                if (StringUtils.isBlank(examCardParams.getHtmlContent())) {
-                    throw ExceptionResultEnum.ERROR.exception("提交题卡时,html内容不能为空");
+                // 当前选择题卡是否已绑定
+                List<ExamTaskDetail> list = examTaskDetailService.listByCardId(examCardParams.getId());
+                if (list != null && list.size() > 0) {
+                    throw ExceptionResultEnum.ERROR.exception("选择的题卡已被其它命题任务绑定");
+                }
+
+            } else if (MakeMethodEnum.SELF.name().equals(examCardParams.getMakeMethod().name())) {
+                if (StringUtils.isBlank(examCardParams.getTitle())) {
+                    throw ExceptionResultEnum.ERROR.exception("题卡标题不能为空");
+                }
+                if (StringUtils.isBlank(examCardParams.getContent())) {
+                    throw ExceptionResultEnum.ERROR.exception("题卡内容不能为空");
+                }
+                if (CardStatusEnum.SUBMIT.name().equals(examCardParams.getStatus().name())) {
+                    if (StringUtils.isBlank(examCardParams.getHtmlContent())) {
+                        throw ExceptionResultEnum.ERROR.exception("提交题卡时,html内容不能为空");
+                    }
+                }
+            } else if (MakeMethodEnum.CUST.name().equals(examCardParams.getMakeMethod().name())) {
+                if (StringUtils.isBlank(examCardParams.getContent())) {
+                    throw ExceptionResultEnum.ERROR.exception("题卡内容不能为空");
+                }
+                if (CardStatusEnum.SUBMIT.name().equals(examCardParams.getStatus().name())) {
+                    if (StringUtils.isBlank(examCardParams.getHtmlContent())) {
+                        throw ExceptionResultEnum.ERROR.exception("提交题卡时,html内容不能为空");
+                    }
                 }
             }
         }

+ 5 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskDetailServiceImpl.java

@@ -87,4 +87,9 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
         this.update(updateWrapper);
     }
 
+    @Override
+    public List<ExamTaskDetail> listByTemplateId(Long templateId) {
+        return this.baseMapper.listByTemplateId(templateId);
+    }
+
 }

+ 9 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java

@@ -126,7 +126,15 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             throw ExceptionResultEnum.ERROR.exception("命题任务状态为已完成,不能启用/禁用操作");
         }
         UpdateWrapper<ExamTask> updateWrapper = new UpdateWrapper<>();
-        updateWrapper.lambda().set(ExamTask::getEnable, examTask.getEnable()).eq(ExamTask::getId, examTask.getId());
+        // 启用时,后续状态清空
+        if(examTask.getEnable()){
+            updateWrapper.lambda().set(ExamTask::getEnable, examTask.getEnable()) // 修改启用状态
+                    .set(ExamTask::getReviewStatus, null) // 清空审核状态
+                    .set(ExamTask::getStatus, ExamStatusEnum.STAGE) // 更新为命题中
+                    .eq(ExamTask::getId, examTask.getId());
+        } else {
+            updateWrapper.lambda().set(ExamTask::getEnable, examTask.getEnable()).eq(ExamTask::getId, examTask.getId());
+        }
 
         // 解除题卡绑定
         if (task.getEnable()) {

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 6 - 4
distributed-print-business/src/main/resources/db/init-table.sql


+ 50 - 1
distributed-print-business/src/main/resources/mapper/ExamCardMapper.xml

@@ -78,6 +78,55 @@
         </where>
     </select>
     <select id="getCardDetail" resultType="com.qmth.distributed.print.business.bean.dto.CardDetailDto">
-        select a.id cardId, a.title, a.make_method makeMethod, b.content from exam_card a left join exam_card_detail b on a.id = b.card_id
+        SELECT
+            a.id cardId,
+            a.title,
+            a.make_method makeMethod,
+            a.type,
+            b.content,
+            c.paper_type paperType
+        FROM
+            exam_card a
+                LEFT JOIN
+            exam_card_detail b ON a.id = b.card_id
+                LEFT JOIN
+            exam_task_detail c ON a.id = c.card_id
+        where a.id = #{cardId}
+    </select>
+    <select id="listGenericCard" resultType="com.qmth.distributed.print.business.entity.ExamCard">
+        SELECT
+            a.id, a.title, a.type
+        FROM
+            exam_card a
+                JOIN
+            basic_template b ON a.template_id = b.id
+                JOIN
+            (SELECT
+                *
+            FROM
+                basic_template_org
+            WHERE
+                type = 'GENERIC') c ON b.id = c.rule_id
+        WHERE
+            a.school_id = #{schoolId}
+            AND a.type = #{type}
+            AND b.enable = TRUE
+            AND c.org_id = #{orgId}
+    </select>
+    <select id="listCustom" resultType="com.qmth.distributed.print.business.entity.ExamCard">
+        SELECT
+            a.id, a.title, a.type
+        FROM
+            exam_card a
+        WHERE
+            a.school_id = #{schoolId}
+            AND a.type = #{type}
+            AND a.course_code = #{courseCode}
+            AND NOT EXISTS( SELECT
+                1
+            FROM
+                exam_task_detail b
+            WHERE
+                a.id = b.card_id)
     </select>
 </mapper>

+ 5 - 2
distributed-print-business/src/main/resources/mapper/ExamTaskDetailMapper.xml

@@ -18,8 +18,7 @@
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id,
-        exam_task_id, paper_type, paper_attachment_ids, card_id, paper_confirm_attachment_ids, remark, exposed_paper_type, relate_paper_type, unexposed_paper_type
+       select id,exam_task_id, paper_type, paper_attachment_ids, card_id, paper_confirm_attachment_ids, remark, exposed_paper_type, relate_paper_type, unexposed_paper_type from exam_task_detail
     </sql>
     <select id="listPage" resultType="com.qmth.distributed.print.business.bean.dto.ExamTaskDetailDto">
         SELECT
@@ -74,4 +73,8 @@
             </if>
         </where>
     </select>
+    <select id="listByTemplateId" resultMap="BaseResultMap">
+        select * from exam_task_detail a
+        where exists (select 1 from exam_card b on a.card_id = b.id where b.template_id = #{templateId})
+    </select>
 </mapper>

+ 3 - 4
distributed-print-business/src/main/resources/mapper/ExamTaskMapper.xml

@@ -130,11 +130,10 @@
                 LEFT JOIN
             sys_user c ON a.user_id = c.id) a
         <where>
-            and a.status not in
+            a.enable = true and a.status not in
             <foreach item="item" collection="status" separator="," open="(" close=")" index="">
                #{item}
             </foreach>
-             and a.enable = true
             <if test="schoolId != null and schoolId != ''">
                 and a.schoolId = #{schoolId}
             </if>
@@ -195,7 +194,7 @@
         LEFT JOIN
             sys_user c ON a.user_id = c.id
         <where>
-            a.review = true and a.status = 'SUBMIT' and a.review_status is null
+            a.enable = true and a.review = true and a.status = 'SUBMIT' and a.review_status is null
             <if test="schoolId != null and schoolId != ''">
                 and a.school_id = #{schoolId}
             </if>
@@ -254,7 +253,7 @@
         LEFT JOIN
             sys_user c ON a.user_id = c.id
         <where>
-            a.review = true and a.status in ('STAGE','FINISH') and a.review_status is not null
+            a.enable = true and a.review = true and a.status in ('STAGE','FINISH') and a.review_status is not null
             <if test="schoolId != null and schoolId != ''">
                 and a.school_id = #{schoolId}
             </if>

+ 1 - 0
distributed-print-common/src/main/java/com/qmth/distributed/print/common/contant/SystemConstant.java

@@ -52,6 +52,7 @@ public class SystemConstant {
     public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd HH:mm:ss";
     public static final int PAGE_NUMBER = 0;
     public static final int PAGE_SIZE = 10000000;
+    public static final int ALL_CARD = -1;
 
     /**
      * oss url过期时间

+ 13 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/BasicTemplateController.java

@@ -57,6 +57,19 @@ public class BasicTemplateController {
         return ResultUtil.ok(templateDtoIPage);
     }
 
+
+    /**
+     * 根据ID查询单个信息
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "根据ID查询单个信息")
+    @RequestMapping(value = "/get_one", method = RequestMethod.POST)
+    public Result getOne(@RequestParam("id") Long id){
+        BasicTemplate basicTemplate = basicTemplateService.getOne(id);
+        return ResultUtil.ok(basicTemplate);
+    }
+
     /**
      * 新增/修改
      *

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

@@ -95,6 +95,9 @@ public class EnumsController {
         } else if (type.equals(EnumType.MAKE_METHOD.name())){
             // 题卡制作方式
             list = MakeMethodEnum.listTypes();
+        } else if (type.equals(EnumType.CARD_TYPE.name())){
+            // 题卡类型
+            list = CardTypeEnum.listTypes();
         }
         return ResultUtil.ok(list);
     }

+ 27 - 4
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamCardController.java

@@ -8,6 +8,7 @@ import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.distributed.print.business.bean.dto.CardCustDto;
 import com.qmth.distributed.print.business.bean.dto.CardDetailDto;
 import com.qmth.distributed.print.business.bean.params.ExamCardParams;
+import com.qmth.distributed.print.business.entity.ExamCard;
 import com.qmth.distributed.print.business.service.ExamCardService;
 import com.qmth.distributed.print.common.util.Result;
 import com.qmth.distributed.print.common.util.ResultUtil;
@@ -16,6 +17,8 @@ import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
 /**
  * <p>
  * 题卡 前端控制器
@@ -48,6 +51,7 @@ public class ExamCardController {
 
     /**
      * 客服制卡申请
+     *
      * @param examCardParams
      * @return
      */
@@ -60,6 +64,7 @@ public class ExamCardController {
 
     /**
      * 客服制卡审核查询
+     *
      * @param status
      * @param paperNumber
      * @param userId
@@ -88,14 +93,32 @@ public class ExamCardController {
 
     /**
      * 根据ID获取题卡详情
+     *
      * @param cardId
      * @return
      */
     @ApiOperation(value = "根据ID获取题卡详情")
     @RequestMapping(value = "/get_one", method = RequestMethod.POST)
-     public Result getOne(@RequestParam("cardId") Long cardId){
-         CardDetailDto cardDetailDto = examCardService.getCardDetail(cardId);
-         return ResultUtil.ok(cardDetailDto);
-     }
+    public Result getOne(@RequestParam("cardId") Long cardId) {
+        CardDetailDto cardDetailDto = examCardService.getCardDetail(cardId);
+        return ResultUtil.ok(cardDetailDto);
+    }
+
+    /**
+     * 选择已有题卡列表
+     *
+     * @param courseCode
+     * @param cardRuleId
+     * @param paperType
+     * @return
+     */
+    @ApiOperation(value = "选择已有题卡列表")
+    @RequestMapping(value = "/select_card_list", method = RequestMethod.POST)
+    public Result selectCardList(@RequestParam String courseCode,
+                                 @RequestParam Long cardRuleId,
+                                 @RequestParam String paperType) {
+        List<ExamCard> list = examCardService.listSelectCard(courseCode, cardRuleId, paperType);
+        return ResultUtil.ok(list);
+    }
 
 }

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác