Browse Source

3.0.0-题卡管理

xiaof 3 years ago
parent
commit
68a73ee041
18 changed files with 561 additions and 46 deletions
  1. 9 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/CardDetailDto.java
  2. 109 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/GenericExamCardParams.java
  3. 68 6
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamCard.java
  4. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/MakeMethodEnum.java
  5. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamCardMapper.java
  6. 2 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/BasicExamService.java
  7. 2 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamCardDetailService.java
  8. 6 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamCardService.java
  9. 4 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicExamServiceImpl.java
  10. 2 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicTemplateServiceImpl.java
  11. 4 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicVerifyCodeServiceImpl.java
  12. 8 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamCardDetailServiceImpl.java
  13. 156 7
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamCardServiceImpl.java
  14. 18 9
      distributed-print-business/src/main/resources/mapper/ExamCardMapper.xml
  15. 3 2
      distributed-print/src/main/java/com/qmth/distributed/print/api/BasicExamController.java
  16. 49 8
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamCardController.java
  17. 78 4
      distributed-print/src/main/java/com/qmth/distributed/print/api/SysController.java
  18. 41 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/CardCreateMethodEnum.java

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

@@ -7,6 +7,7 @@ public class CardDetailDto {
 
 
     private String cardId;
     private String cardId;
     private String title;
     private String title;
+    private String createMethod;
     private String makeMethod;
     private String makeMethod;
     private String content;
     private String content;
     private String htmlContent;
     private String htmlContent;
@@ -29,6 +30,14 @@ public class CardDetailDto {
         this.title = title;
         this.title = title;
     }
     }
 
 
+    public String getCreateMethod() {
+        return createMethod;
+    }
+
+    public void setCreateMethod(String createMethod) {
+        this.createMethod = createMethod;
+    }
+
     public String getMakeMethod() {
     public String getMakeMethod() {
         return makeMethod;
         return makeMethod;
     }
     }

+ 109 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/GenericExamCardParams.java

@@ -0,0 +1,109 @@
+package com.qmth.distributed.print.business.bean.params;
+
+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.teachcloud.common.enums.CardCreateMethodEnum;
+
+import java.util.List;
+
+/**
+ * 题卡管理(通卡)参数
+ */
+public class GenericExamCardParams {
+
+    /**
+     * exam_card主键ID
+     */
+    private Long id;
+    private String title;
+    private CardCreateMethodEnum createMethod;
+    private String content;
+    private String htmlContent;
+    // 上传附件ID
+    private Long attachmentId;
+    private String remark;
+    private Long cardRuleId;
+    private String status;
+    private Long[] orgIds;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public CardCreateMethodEnum getCreateMethod() {
+        return createMethod;
+    }
+
+    public void setCreateMethod(CardCreateMethodEnum createMethod) {
+        this.createMethod = createMethod;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getHtmlContent() {
+        return htmlContent;
+    }
+
+    public void setHtmlContent(String htmlContent) {
+        this.htmlContent = htmlContent;
+    }
+
+    public Long getAttachmentId() {
+        return attachmentId;
+    }
+
+    public void setAttachmentId(Long attachmentId) {
+        this.attachmentId = attachmentId;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public Long getCardRuleId() {
+        return cardRuleId;
+    }
+
+    public void setCardRuleId(Long cardRuleId) {
+        this.cardRuleId = cardRuleId;
+    }
+
+    public Long[] getOrgIds() {
+        return orgIds;
+    }
+
+    public void setOrgIds(Long[] orgIds) {
+        this.orgIds = orgIds;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+}

+ 68 - 6
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamCard.java

@@ -9,9 +9,12 @@ import com.qmth.distributed.print.business.enums.CardStatusEnum;
 import com.qmth.distributed.print.business.enums.CardTypeEnum;
 import com.qmth.distributed.print.business.enums.CardTypeEnum;
 import com.qmth.distributed.print.business.enums.MakeMethodEnum;
 import com.qmth.distributed.print.business.enums.MakeMethodEnum;
 import com.qmth.teachcloud.common.base.BaseEntity;
 import com.qmth.teachcloud.common.base.BaseEntity;
+import com.qmth.teachcloud.common.entity.SysOrg;
+import com.qmth.teachcloud.common.enums.CardCreateMethodEnum;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 
 
 import java.io.Serializable;
 import java.io.Serializable;
+import java.util.List;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -61,15 +64,34 @@ public class ExamCard extends BaseEntity implements Serializable {
      */
      */
     private CardStatusEnum status;
     private CardStatusEnum status;
 
 
+    /**
+     * 题卡类型:GENERIC-通卡,CUSTOM-自定义
+     */
     private CardTypeEnum type;
     private CardTypeEnum type;
 
 
+    /**
+     * 通卡创建方式(UPLOAD-上传,CUSTOMIZE-自定义)
+     */
+    private CardCreateMethodEnum createMethod;
+
     @JsonSerialize(using = ToStringSerializer.class)
     @JsonSerialize(using = ToStringSerializer.class)
-    @TableField("template_id")
-    private Long templateId;
+    @TableField("attachment_id")
+    private Long attachmentId;
 
 
     @TableField("sync_status")
     @TableField("sync_status")
     private Boolean syncStatus;
     private Boolean syncStatus;
 
 
+    private Boolean enable;
+
+    private String remark;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @TableField("card_rule_id")
+    private Long cardRuleId;
+
+    @TableField(exist = false)
+    private List<SysOrg> orgs;
+
     public static long getSerialVersionUID() {
     public static long getSerialVersionUID() {
         return serialVersionUID;
         return serialVersionUID;
     }
     }
@@ -138,12 +160,12 @@ public class ExamCard extends BaseEntity implements Serializable {
         this.type = type;
         this.type = type;
     }
     }
 
 
-    public Long getTemplateId() {
-        return templateId;
+    public Long getAttachmentId() {
+        return attachmentId;
     }
     }
 
 
-    public void setTemplateId(Long templateId) {
-        this.templateId = templateId;
+    public void setAttachmentId(Long attachmentId) {
+        this.attachmentId = attachmentId;
     }
     }
 
 
     public Boolean getSyncStatus() {
     public Boolean getSyncStatus() {
@@ -153,4 +175,44 @@ public class ExamCard extends BaseEntity implements Serializable {
     public void setSyncStatus(Boolean syncStatus) {
     public void setSyncStatus(Boolean syncStatus) {
         this.syncStatus = syncStatus;
         this.syncStatus = syncStatus;
     }
     }
+
+    public CardCreateMethodEnum getCreateMethod() {
+        return createMethod;
+    }
+
+    public void setCreateMethod(CardCreateMethodEnum createMethod) {
+        this.createMethod = createMethod;
+    }
+
+    public Boolean getEnable() {
+        return enable;
+    }
+
+    public void setEnable(Boolean enable) {
+        this.enable = enable;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public Long getCardRuleId() {
+        return cardRuleId;
+    }
+
+    public void setCardRuleId(Long cardRuleId) {
+        this.cardRuleId = cardRuleId;
+    }
+
+    public List<SysOrg> getOrgs() {
+        return orgs;
+    }
+
+    public void setOrgs(List<SysOrg> orgs) {
+        this.orgs = orgs;
+    }
 }
 }

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

@@ -14,7 +14,7 @@ public enum MakeMethodEnum {
 
 
     SELECT("选择已有题卡"),
     SELECT("选择已有题卡"),
     SELF("自助创建"),
     SELF("自助创建"),
-    CUST("客制卡");
+    CUST("客制卡");
 
 
     MakeMethodEnum(String desc) {
     MakeMethodEnum(String desc) {
         this.desc = desc;
         this.desc = desc;

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

@@ -34,5 +34,5 @@ public interface ExamCardMapper extends BaseMapper<ExamCard> {
 
 
     List<SyncExamCardDto> listSyncCardByCourseCodeAndPaperNumber(@Param("schoolId") Long schoolId, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber);
     List<SyncExamCardDto> listSyncCardByCourseCodeAndPaperNumber(@Param("schoolId") Long schoolId, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber);
 
 
-    IPage<ExamCard> listPage(@Param("page") Page<ExamCard> page, @Param("schoolId") Long schoolId, @Param("enable") Boolean enable, @Param("createStartTime") Long createStartTime, @Param("createEndTime") Long createEndTime, @Param("courseCode") String courseCode, @Param("type") String type);
+    IPage<ExamCard> listPage(@Param("page") Page<ExamCard> page, @Param("schoolId") Long schoolId, @Param("type") String type, @Param("title") String title, @Param("createMethod") String createMethod, @Param("enable") Boolean enable, @Param("createStartTime") Long createStartTime, @Param("createEndTime") Long createEndTime);
 }
 }

+ 2 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/BasicExamService.java

@@ -33,9 +33,10 @@ public interface BasicExamService extends IService<BasicExam> {
     /**
     /**
      * 查询学期
      * 查询学期
      *
      *
+     * @param semesterId
      * @param inUsed 是否当前使用考试
      * @param inUsed 是否当前使用考试
      */
      */
-    List<BasicExam> query(Boolean inUsed);
+    List<BasicExam> query(Long semesterId, Boolean inUsed);
 
 
     /**
     /**
      * 设置当前使用考试
      * 设置当前使用考试

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

@@ -14,4 +14,6 @@ import com.qmth.distributed.print.business.entity.ExamCardDetail;
 public interface ExamCardDetailService extends IService<ExamCardDetail> {
 public interface ExamCardDetailService extends IService<ExamCardDetail> {
 
 
     ExamCardDetail getByCardId(Long cardId);
     ExamCardDetail getByCardId(Long cardId);
+
+    void removeByCardId(Long id);
 }
 }

+ 6 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamCardService.java

@@ -6,6 +6,7 @@ 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.dto.CardDetailDto;
 import com.qmth.distributed.print.business.bean.dto.SyncExamCardDto;
 import com.qmth.distributed.print.business.bean.dto.SyncExamCardDto;
 import com.qmth.distributed.print.business.bean.params.ExamCardParams;
 import com.qmth.distributed.print.business.bean.params.ExamCardParams;
+import com.qmth.distributed.print.business.bean.params.GenericExamCardParams;
 import com.qmth.distributed.print.business.entity.ExamCard;
 import com.qmth.distributed.print.business.entity.ExamCard;
 import com.qmth.distributed.print.business.enums.CardTypeEnum;
 import com.qmth.distributed.print.business.enums.CardTypeEnum;
 import com.qmth.teachcloud.common.bean.params.ArraysParams;
 import com.qmth.teachcloud.common.bean.params.ArraysParams;
@@ -41,5 +42,9 @@ public interface ExamCardService extends IService<ExamCard> {
 
 
     List<SyncExamCardDto> listSyncCardByCourseCodeAndPaperNumber(Long schoolId, String courseCode, String paperNumber);
     List<SyncExamCardDto> listSyncCardByCourseCodeAndPaperNumber(Long schoolId, String courseCode, String paperNumber);
 
 
-    IPage<ExamCard> listPage(Boolean enable, Long createStartTime, Long createEndTime, String courseCode, String type, Integer pageNumber, Integer pageSize);
+    IPage<ExamCard> listPage(String type, String title, String createMethod, Boolean enable, Long createStartTime, Long createEndTime, Integer pageNumber, Integer pageSize);
+
+    Long saveGeneric(GenericExamCardParams params);
+
+    Boolean deleteGeneric(Long id);
 }
 }

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

@@ -84,10 +84,12 @@ public class BasicExamServiceImpl extends ServiceImpl<BasicExamMapper, BasicExam
     }
     }
 
 
     @Override
     @Override
-    public List<BasicExam> query(Boolean inUsed) {
+    public List<BasicExam> query(Long semesterId, Boolean inUsed) {
         Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
         Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
         QueryWrapper<BasicExam> queryWrapper = new QueryWrapper<>();
         QueryWrapper<BasicExam> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(BasicExam::getSchoolId, schoolId).eq(BasicExam::getEnable, true);
+        queryWrapper.lambda().eq(BasicExam::getSchoolId, schoolId)
+                .eq(BasicExam::getSemesterId, semesterId)
+                .eq(BasicExam::getEnable, true);
         if (Objects.nonNull(inUsed)) {
         if (Objects.nonNull(inUsed)) {
             queryWrapper.lambda().eq(BasicExam::getInUsed, inUsed);
             queryWrapper.lambda().eq(BasicExam::getInUsed, inUsed);
         }
         }

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

@@ -69,14 +69,14 @@ public class BasicTemplateServiceImpl extends ServiceImpl<BasicTemplateMapper, B
                 List<SysOrg> sysOrgs = basicTemplateOrgService.listByTypeAndTemplateId(type, Long.valueOf(m.getId()));
                 List<SysOrg> sysOrgs = basicTemplateOrgService.listByTypeAndTemplateId(type, Long.valueOf(m.getId()));
                 m.setOrgs(sysOrgs);
                 m.setOrgs(sysOrgs);
 
 
-                if (type.equals(TemplateTypeEnum.GENERIC.name())) {
+                /*if (type.equals(TemplateTypeEnum.GENERIC.name())) {
                     QueryWrapper<ExamCard> queryWrapper = new QueryWrapper<>();
                     QueryWrapper<ExamCard> queryWrapper = new QueryWrapper<>();
                     queryWrapper.lambda().eq(ExamCard::getTemplateId, m.getId());
                     queryWrapper.lambda().eq(ExamCard::getTemplateId, m.getId());
                     List<ExamCard> examCards = examCardService.list(queryWrapper);
                     List<ExamCard> examCards = examCardService.list(queryWrapper);
                     if (!CollectionUtils.isEmpty(examCards)) {
                     if (!CollectionUtils.isEmpty(examCards)) {
                         m.setCardId(examCards.get(0).getId().toString());
                         m.setCardId(examCards.get(0).getId().toString());
                     }
                     }
-                }
+                }*/
             });
             });
         }
         }
         return templateDtoIPage;
         return templateDtoIPage;

+ 4 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicVerifyCodeServiceImpl.java

@@ -17,6 +17,7 @@ import com.qmth.teachcloud.common.config.DictionaryConfig;
 import com.qmth.teachcloud.common.entity.SysConfig;
 import com.qmth.teachcloud.common.entity.SysConfig;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.service.SysConfigService;
 import com.qmth.teachcloud.common.service.SysConfigService;
+import com.qmth.teachcloud.common.util.ServletUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
@@ -49,9 +50,9 @@ public class BasicVerifyCodeServiceImpl extends ServiceImpl<BasicVerifyCodeMappe
         if (sysConfig.getConfigValue().equals("false")) {
         if (sysConfig.getConfigValue().equals("false")) {
             throw ExceptionResultEnum.ERROR.exception("短信验证码已关闭");
             throw ExceptionResultEnum.ERROR.exception("短信验证码已关闭");
         }
         }
-
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         QueryWrapper<BasicVerifyCode> wrapper = new QueryWrapper<>();
         QueryWrapper<BasicVerifyCode> wrapper = new QueryWrapper<>();
-        wrapper.lambda().eq(BasicVerifyCode::getMobileNumber, mobileNumber).eq(BasicVerifyCode::getUserId, userId);
+        wrapper.lambda().eq(BasicVerifyCode::getSchoolId, schoolId).eq(BasicVerifyCode::getMobileNumber, mobileNumber).eq(BasicVerifyCode::getUserId, userId);
         BasicVerifyCode basicVerifyCode = this.getOne(wrapper);
         BasicVerifyCode basicVerifyCode = this.getOne(wrapper);
         if (basicVerifyCode != null) {
         if (basicVerifyCode != null) {
             Date oldCreateTime = new Date(basicVerifyCode.getCreateTime());
             Date oldCreateTime = new Date(basicVerifyCode.getCreateTime());
@@ -101,6 +102,7 @@ public class BasicVerifyCodeServiceImpl extends ServiceImpl<BasicVerifyCodeMappe
                 if (basicVerifyCode == null) {
                 if (basicVerifyCode == null) {
                     basicVerifyCode = new BasicVerifyCode();
                     basicVerifyCode = new BasicVerifyCode();
                     basicVerifyCode.setUserId(userId);
                     basicVerifyCode.setUserId(userId);
+                    basicVerifyCode.setSchoolId(schoolId);
                     basicVerifyCode.setMobileNumber(mobileNumber);
                     basicVerifyCode.setMobileNumber(mobileNumber);
                     basicVerifyCode.setExpireTime(processMiniute(new Date(), codeExpiredTime));
                     basicVerifyCode.setExpireTime(processMiniute(new Date(), codeExpiredTime));
                     basicVerifyCode.setValidPeriod(codeExpiredTime);
                     basicVerifyCode.setValidPeriod(codeExpiredTime);

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

@@ -1,6 +1,7 @@
 package com.qmth.distributed.print.business.service.impl;
 package com.qmth.distributed.print.business.service.impl;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.distributed.print.business.entity.ExamCardDetail;
 import com.qmth.distributed.print.business.entity.ExamCardDetail;
 import com.qmth.distributed.print.business.mapper.ExamCardDetailMapper;
 import com.qmth.distributed.print.business.mapper.ExamCardDetailMapper;
@@ -26,4 +27,11 @@ public class ExamCardDetailServiceImpl extends ServiceImpl<ExamCardDetailMapper,
         queryWrapper.lambda().eq(ExamCardDetail::getCardId, cardId);
         queryWrapper.lambda().eq(ExamCardDetail::getCardId, cardId);
         return this.getOne(queryWrapper);
         return this.getOne(queryWrapper);
     }
     }
+
+    @Override
+    public void removeByCardId(Long id) {
+        UpdateWrapper<ExamCardDetail> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().eq(ExamCardDetail::getCardId, id);
+        this.remove(updateWrapper);
+    }
 }
 }

+ 156 - 7
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamCardServiceImpl.java

@@ -4,21 +4,24 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.qmth.distributed.print.business.bean.dto.BasicPrintConfigDto;
 import com.qmth.distributed.print.business.bean.dto.CardCustDto;
 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.dto.CardDetailDto;
 import com.qmth.distributed.print.business.bean.dto.SyncExamCardDto;
 import com.qmth.distributed.print.business.bean.dto.SyncExamCardDto;
 import com.qmth.distributed.print.business.bean.params.ExamCardParams;
 import com.qmth.distributed.print.business.bean.params.ExamCardParams;
+import com.qmth.distributed.print.business.bean.params.GenericExamCardParams;
 import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.enums.CardStatusEnum;
 import com.qmth.distributed.print.business.enums.CardStatusEnum;
 import com.qmth.distributed.print.business.enums.CardTypeEnum;
 import com.qmth.distributed.print.business.enums.CardTypeEnum;
 import com.qmth.distributed.print.business.enums.MakeMethodEnum;
 import com.qmth.distributed.print.business.enums.MakeMethodEnum;
+import com.qmth.distributed.print.business.enums.TemplateTypeEnum;
 import com.qmth.distributed.print.business.mapper.ExamCardMapper;
 import com.qmth.distributed.print.business.mapper.ExamCardMapper;
 import com.qmth.distributed.print.business.service.*;
 import com.qmth.distributed.print.business.service.*;
 import com.qmth.teachcloud.common.bean.params.ArraysParams;
 import com.qmth.teachcloud.common.bean.params.ArraysParams;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.BasicAttachment;
 import com.qmth.teachcloud.common.entity.BasicAttachment;
+import com.qmth.teachcloud.common.entity.SysOrg;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.CardCreateMethodEnum;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.service.BasicAttachmentService;
 import com.qmth.teachcloud.common.service.BasicAttachmentService;
 import com.qmth.teachcloud.common.service.BasicCourseService;
 import com.qmth.teachcloud.common.service.BasicCourseService;
@@ -28,6 +31,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
@@ -66,6 +70,9 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
     @Autowired
     @Autowired
     BasicCourseService basicCourseService;
     BasicCourseService basicCourseService;
 
 
+    @Resource
+    BasicTemplateOrgService basicTemplateOrgService;
+
     @Transactional
     @Transactional
     @Override
     @Override
     public String saveExamCard(ExamCardParams examCardParams) {
     public String saveExamCard(ExamCardParams examCardParams) {
@@ -83,7 +90,7 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
         if (examCardParams.getId() == null) {
         if (examCardParams.getId() == null) {
             examCard = new ExamCard();
             examCard = new ExamCard();
             examCard.setSchoolId(schoolId);
             examCard.setSchoolId(schoolId);
-            if(Objects.isNull(examCardParams.getTemplateId())) {
+            if (Objects.isNull(examCardParams.getTemplateId())) {
                 examCard.setOrgId(basicCourseService.getOrgIdBySchoolIdAndCourseCode(schoolId, examCardParams.getCourseCode()));
                 examCard.setOrgId(basicCourseService.getOrgIdBySchoolIdAndCourseCode(schoolId, examCardParams.getCourseCode()));
             } else {
             } else {
                 examCard.setOrgId(user.getOrgId());
                 examCard.setOrgId(user.getOrgId());
@@ -94,7 +101,7 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
             examCard.setMakeMethod(examCardParams.getMakeMethod());
             examCard.setMakeMethod(examCardParams.getMakeMethod());
             examCard.setStatus(examCardParams.getStatus());
             examCard.setStatus(examCardParams.getStatus());
             examCard.setType(examCardParams.getType());
             examCard.setType(examCardParams.getType());
-            examCard.setTemplateId(examCardParams.getTemplateId());
+            examCard.setAttachmentId(Long.valueOf(examCardParams.getAttachmentId()));
             examCard.insertInfo(user.getId());
             examCard.insertInfo(user.getId());
             this.save(examCard);
             this.save(examCard);
 
 
@@ -199,7 +206,7 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
     @Override
     @Override
     public ExamCard getOneByTemplateId(Long templateId) {
     public ExamCard getOneByTemplateId(Long templateId) {
         QueryWrapper<ExamCard> queryWrapper = new QueryWrapper<>();
         QueryWrapper<ExamCard> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(ExamCard::getTemplateId, templateId);
+        queryWrapper.lambda().eq(ExamCard::getAttachmentId, templateId);
         return this.getOne(queryWrapper);
         return this.getOne(queryWrapper);
     }
     }
 
 
@@ -263,12 +270,154 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
         return this.baseMapper.listSyncCardByCourseCodeAndPaperNumber(schoolId, courseCode, paperNumber);
         return this.baseMapper.listSyncCardByCourseCodeAndPaperNumber(schoolId, courseCode, paperNumber);
     }
     }
 
 
+
     @Override
     @Override
-    public IPage<ExamCard> listPage(Boolean enable, Long createStartTime, Long createEndTime, String courseCode, String type, Integer pageNumber, Integer pageSize) {
+    public IPage<ExamCard> listPage(String type, String title, String createMethod, Boolean enable, Long createStartTime, Long createEndTime, Integer pageNumber, Integer pageSize) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         Page<ExamCard> page = new Page<>(pageNumber, pageSize);
         Page<ExamCard> page = new Page<>(pageNumber, pageSize);
-        IPage<ExamCard> examCardIPage = this.baseMapper.listPage(page, schoolId, enable, createStartTime, createEndTime, courseCode, type);
-        return null;
+        IPage<ExamCard> iPage = this.baseMapper.listPage(page, schoolId, type, title, createMethod, enable, createStartTime, createEndTime);
+
+        if (iPage.getRecords().size() > 0) {
+            iPage.getRecords().forEach(m -> {
+                //查询适用学院
+                List<SysOrg> sysOrgs = basicTemplateOrgService.listByTypeAndTemplateId(type, Long.valueOf(m.getId()));
+                m.setOrgs(sysOrgs);
+            });
+        }
+        return iPage;
+    }
+
+    @Transactional
+    @Override
+    public Long saveGeneric(GenericExamCardParams params) {
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+
+        QueryWrapper<ExamCard> checkTitleQueryWrapper = new QueryWrapper<>();
+        checkTitleQueryWrapper.lambda().eq(ExamCard::getSchoolId, schoolId).eq(ExamCard::getType, CardTypeEnum.GENERIC).eq(ExamCard::getTitle, params.getTitle().trim());
+        ExamCard checkTitleExamCardList = this.getOne(checkTitleQueryWrapper);
+
+        ExamCard examCard = new ExamCard();
+        ExamCardDetail examCardDetail = new ExamCardDetail();
+        // 新增
+        if (Objects.isNull(params.getId())) {
+            // 保存题卡
+            examCard.setId(SystemConstant.getDbUuid());
+            examCard.setSchoolId(schoolId);
+            examCard.setOrgId(sysUser.getOrgId());
+
+            if (checkTitleExamCardList != null) {
+                throw ExceptionResultEnum.ERROR.exception("题卡名称重复");
+            }
+            examCard.setTitle(params.getTitle());
+            examCard.setMakeMethod(MakeMethodEnum.SELECT); // 默认值
+//            examCard.setStatus(CardStatusEnum.SUBMIT); // 默认值
+            examCard.setStatus(CardStatusEnum.valueOf(params.getStatus()));
+            examCard.setType(CardTypeEnum.GENERIC); // 默认值
+            examCard.setCreateMethod(params.getCreateMethod());
+            examCard.setAttachmentId(params.getAttachmentId());
+            examCard.setEnable(true); // 默认值
+            examCard.setCardRuleId(params.getCardRuleId());
+            examCard.setRemark(params.getRemark());
+            examCard.setCreateId(sysUser.getId());
+            examCard.setCreateTime(System.currentTimeMillis());
+            this.save(examCard);
+
+            // 保存题卡内容
+            examCardDetail.setId(SystemConstant.getDbUuid());
+            examCardDetail.setCardId(examCard.getId());
+            examCardDetail.setCreateId(sysUser.getId());
+            examCardDetail.setCreateTime(System.currentTimeMillis());
+            // 方式为上传
+            if (CardCreateMethodEnum.UPLOAD.equals(params.getCreateMethod())) {
+                if (params.getAttachmentId() == null) {
+                    throw ExceptionResultEnum.ERROR.exception("请上传模板文件");
+                }
+                BasicAttachment attachment = basicAttachmentService.getById(params.getAttachmentId());
+                if (attachment == null) {
+                    throw ExceptionResultEnum.ERROR.exception("无模板文件记录");
+                }
+                if (!".html".equalsIgnoreCase(attachment.getType())) {
+                    throw ExceptionResultEnum.ERROR.exception("只能上传后缀为.html文件");
+                }
+                examCardDetail.setHtmlContent(teachcloudCommonService.readFileContent(attachment.getPath()));
+            }
+            // 方式为自定义
+            else if (CardCreateMethodEnum.STANDARD.equals(params.getCreateMethod()) || CardCreateMethodEnum.FREE.equals(params.getCreateMethod())) {
+                examCardDetail.setContent(params.getContent());
+                examCardDetail.setHtmlContent(params.getHtmlContent());
+            } else {
+                throw ExceptionResultEnum.ERROR.exception("题卡创建方式异常");
+            }
+            examCardDetailService.save(examCardDetail);
+        }
+        // 修改
+        else {
+            examCard = this.getById(params.getId());
+            if (checkTitleExamCardList != null && !Objects.equals(params.getId(), examCard.getId())) {
+                throw ExceptionResultEnum.ERROR.exception("题卡名称重复");
+            }
+            examCard.setTitle(params.getTitle());
+            examCard.setAttachmentId(params.getAttachmentId());
+            examCard.setCardRuleId(params.getCardRuleId());
+            examCard.setStatus(CardStatusEnum.valueOf(params.getStatus()));
+            examCard.setRemark(params.getRemark());
+            examCard.setUpdateId(sysUser.getId());
+            examCard.setUpdateTime(System.currentTimeMillis());
+            this.updateById(examCard);
+
+            examCardDetail = examCardDetailService.getByCardId(params.getId());
+            examCardDetail.setUpdateId(sysUser.getId());
+            examCardDetail.setUpdateTime(System.currentTimeMillis());
+            // 方式为上传
+            if (CardCreateMethodEnum.UPLOAD.equals(params.getCreateMethod())) {
+                if (params.getAttachmentId() == null) {
+                    throw ExceptionResultEnum.ERROR.exception("请上传模板文件");
+                }
+                BasicAttachment attachment = basicAttachmentService.getById(params.getAttachmentId());
+                if (attachment == null) {
+                    throw ExceptionResultEnum.ERROR.exception("无模板文件记录");
+                }
+                if (!".html".equalsIgnoreCase(attachment.getType())) {
+                    throw ExceptionResultEnum.ERROR.exception("只能上传后缀为.html文件");
+                }
+                examCardDetail.setHtmlContent(teachcloudCommonService.readFileContent(attachment.getPath()));
+            }
+            // 方式为自定义
+            else if (CardCreateMethodEnum.STANDARD.equals(params.getCreateMethod()) || CardCreateMethodEnum.FREE.equals(params.getCreateMethod())) {
+                examCardDetail.setContent(params.getContent());
+                examCardDetail.setHtmlContent(params.getHtmlContent());
+            } else {
+                throw ExceptionResultEnum.ERROR.exception("题卡创建方式异常");
+            }
+            examCardDetailService.updateById(examCardDetail);
+
+            //删除权限
+            basicTemplateOrgService.removeByRuleId(examCard.getId());
+
+        }
+
+        // 保存适用范围
+        if (params.getOrgIds() == null || params.getOrgIds().length == 0) {
+            throw ExceptionResultEnum.ERROR.exception("请选择适用范围");
+        }
+        basicTemplateOrgService.saveBatch(schoolId, TemplateTypeEnum.GENERIC, examCard.getId(), params.getOrgIds(), examCard.getCreateId());
+        return examCard.getId();
+    }
+
+    @Transactional
+    @Override
+    public Boolean deleteGeneric(Long id) {
+        // 校验题卡是否被绑定
+        QueryWrapper<ExamTaskDetail> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(ExamTaskDetail::getCardId, id);
+        ExamTaskDetail examTaskDetail = examTaskDetailService.getOne(queryWrapper);
+        if(examTaskDetail != null){
+            throw ExceptionResultEnum.ERROR.exception("题卡已绑定命题任务,不能删除");
+        }
+
+        examCardDetailService.removeByCardId(id);
+        return this.removeById(id);
     }
     }
 
 
     /**
     /**

+ 18 - 9
distributed-print-business/src/main/resources/mapper/ExamCardMapper.xml

@@ -17,14 +17,18 @@
         <result column="update_id" property="updateId"/>
         <result column="update_id" property="updateId"/>
         <result column="update_time" property="updateTime"/>
         <result column="update_time" property="updateTime"/>
         <result column="type" property="type"/>
         <result column="type" property="type"/>
-        <result column="template_id" property="templateId"/>
+        <result column="create_method" property="createMethod"/>
+        <result column="attachment_id" property="attachmentId"/>
         <result column="sync_status" property="syncStatus"/>
         <result column="sync_status" property="syncStatus"/>
+        <result column="enable" property="enable"/>
+        <result column="remark" property="remark"/>
+        <result column="card_rule_id" property="cardRuleId"/>
     </resultMap>
     </resultMap>
 
 
     <!-- 通用查询结果列 -->
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
     <sql id="Base_Column_List">
         id,
         id,
-        school_id, course_code, course_name, title, make_method, create_id, create_time, update_id, update_time
+        school_id,org_id, course_code, course_name, title, make_method, status, create_id, create_time, update_id, update_time, type, create_method, attachment_id, sync_status, enable, remark, card_rule_id
     </sql>
     </sql>
     <select id="listCardCust" resultType="com.qmth.distributed.print.business.bean.dto.CardCustDto">
     <select id="listCardCust" resultType="com.qmth.distributed.print.business.bean.dto.CardCustDto">
         SELECT
         SELECT
@@ -90,6 +94,7 @@
         SELECT
         SELECT
             a.id cardId,
             a.id cardId,
             a.title,
             a.title,
+            a.create_method createMethod,
             a.make_method makeMethod,
             a.make_method makeMethod,
             a.type,
             a.type,
             b.content,
             b.content,
@@ -150,6 +155,7 @@
         SELECT
         SELECT
             a.id cardId,
             a.id cardId,
             a.title,
             a.title,
+            a.create_method createMethod,
             a.make_method makeMethod,
             a.make_method makeMethod,
             a.type,
             a.type,
             b.content,
             b.content,
@@ -189,7 +195,16 @@
         select * from exam_card
         select * from exam_card
         <where>
         <where>
             school_id = #{schoolId}
             school_id = #{schoolId}
-            <if test="enable != null and enable != ''">
+            <if test="type != null and type != ''">
+                and type = #{type}
+            </if>
+            <if test="title != null and title != ''">
+                and title like concat('%', #{type}, '%')
+            </if>
+            <if test="createMethod != null and createMethod != ''">
+                and create_method = #{createMethod}
+            </if>
+            <if test="enable != null">
                 and enable = #{enable}
                 and enable = #{enable}
             </if>
             </if>
             <if test="createStartTime != null and createStartTime != ''">
             <if test="createStartTime != null and createStartTime != ''">
@@ -198,12 +213,6 @@
             <if test="createEndTime != null and createEndTime != ''">
             <if test="createEndTime != null and createEndTime != ''">
                 and create_time &lt;= #{createEndTime}
                 and create_time &lt;= #{createEndTime}
             </if>
             </if>
-            <if test="type != null and type != ''">
-                and type = #{type}
-            </if>
-            <if test="courseCode != null and courseCode != ''">
-                and course_code = #{courseCode}
-            </if>
         </where>
         </where>
     </select>
     </select>
 </mapper>
 </mapper>

+ 3 - 2
distributed-print/src/main/java/com/qmth/distributed/print/api/BasicExamController.java

@@ -55,8 +55,9 @@ public class BasicExamController {
     @ApiOperation(value = "考试模糊查询")
     @ApiOperation(value = "考试模糊查询")
     @RequestMapping(value = "/query", method = RequestMethod.POST)
     @RequestMapping(value = "/query", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
-    public Result query(@RequestParam(value = "inUsed", required = false) Boolean inUsed) {
-        return ResultUtil.ok(basicExamService.query(inUsed));
+    public Result query(@RequestParam(value = "semesterId", required = false) Long semesterId,
+                        @RequestParam(value = "inUsed", required = false) Boolean inUsed) {
+        return ResultUtil.ok(basicExamService.query(semesterId, inUsed));
     }
     }
 
 
     /**
     /**

+ 49 - 8
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamCardController.java

@@ -3,23 +3,24 @@ package com.qmth.distributed.print.api;
 
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.boot.api.constant.ApiConstant;
-import com.qmth.distributed.print.business.bean.dto.BasicPrintConfigDto;
 import com.qmth.distributed.print.business.bean.dto.CardCustDto;
 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.dto.CardDetailDto;
 import com.qmth.distributed.print.business.bean.params.ExamCardParams;
 import com.qmth.distributed.print.business.bean.params.ExamCardParams;
+import com.qmth.distributed.print.business.bean.params.GenericExamCardParams;
+import com.qmth.distributed.print.business.entity.BasicTemplate;
 import com.qmth.distributed.print.business.entity.ExamCard;
 import com.qmth.distributed.print.business.entity.ExamCard;
-import com.qmth.distributed.print.business.enums.CardTypeEnum;
 import com.qmth.distributed.print.business.service.ExamCardService;
 import com.qmth.distributed.print.business.service.ExamCardService;
 import com.qmth.teachcloud.common.bean.params.ArraysParams;
 import com.qmth.teachcloud.common.bean.params.ArraysParams;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ResultUtil;
+import com.sun.org.apache.xpath.internal.operations.Bool;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import javax.validation.constraints.Min;
@@ -39,23 +40,63 @@ import java.util.List;
 @Validated
 @Validated
 public class ExamCardController {
 public class ExamCardController {
 
 
-    @Autowired
+    @Resource
     private ExamCardService examCardService;
     private ExamCardService examCardService;
 
 
+    //====================================通卡接口(start)===================================
 
 
+    /**
+     * 题卡管理(通卡管理)
+     * @param type 题卡类型(通卡或专卡)
+     * @param title 题卡名称模糊查询
+     * @param createMethod 题卡创建方式(上传、自定义)
+     * @param enable 1正常/0禁用
+     * @param createStartTime 创建时间(开始)
+     * @param createEndTime 创建时间(结束)
+     * @param pageNumber 分页参数
+     * @param pageSize 分页参数
+     * @return Result
+     */
     @ApiOperation(value = "分页查询")
     @ApiOperation(value = "分页查询")
     @RequestMapping(value = "/page", method = RequestMethod.POST)
     @RequestMapping(value = "/page", method = RequestMethod.POST)
-    public Result page(@RequestParam(value = "enable", required = false) Boolean enable,
+    public Result page(@RequestParam(value = "type", defaultValue = "GENERIC") String type,
+                       @RequestParam(value = "title", required = false) String title,
+                       @RequestParam(value = "createMethod", required = false) String createMethod,
+                       @RequestParam(value = "enable", required = false) Boolean enable,
                        @RequestParam(value = "createStartTime", required = false) Long createStartTime,
                        @RequestParam(value = "createStartTime", required = false) Long createStartTime,
                        @RequestParam(value = "createEndTime", required = false) Long createEndTime,
                        @RequestParam(value = "createEndTime", required = false) Long createEndTime,
-                       @RequestParam(value = "courseCode", required = false) String courseCode,
-                       @RequestParam(value = "type", required = false) String type,
                        @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                        @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                        @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
                        @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
-        IPage<ExamCard> examCardIPage = examCardService.listPage(enable, createStartTime, createEndTime, courseCode, type, pageNumber, pageSize);
+        IPage<ExamCard> examCardIPage = examCardService.listPage(type, title, createMethod, enable, createStartTime, createEndTime, pageNumber, pageSize);
         return ResultUtil.ok(examCardIPage);
         return ResultUtil.ok(examCardIPage);
     }
     }
 
 
+    /**
+     * 题卡管理(通卡管理)-新增/修改
+     * @param params 保存传值参数
+     * @return Result
+     */
+    @ApiOperation(value = "新增/修改")
+    @RequestMapping(value = "/save_generic", method = RequestMethod.POST)
+    public Result save(@RequestBody GenericExamCardParams params) {
+        Long id = examCardService.saveGeneric(params);
+        return ResultUtil.ok(String.valueOf(id),"");
+    }
+
+    /**
+     * 题卡管理(通卡管理)-删除
+     * @param id 题卡ID
+     * @return Result
+     */
+    @ApiOperation(value = "新增/修改")
+    @RequestMapping(value = "/delete_generic", method = RequestMethod.POST)
+    public Result save(@RequestParam(value = "id") Long id) {
+        Boolean success = examCardService.deleteGeneric(id);
+        return ResultUtil.ok(success);
+    }
+
+    //====================================通卡接口(end)===================================
+
     /**
     /**
      * 新建
      * 新建
      *
      *

+ 78 - 4
distributed-print/src/main/java/com/qmth/distributed/print/api/SysController.java

@@ -154,12 +154,20 @@ public class SysController {
             if (StringUtils.isBlank(password)) {
             if (StringUtils.isBlank(password)) {
                 throw ExceptionResultEnum.ERROR.exception("密码不能为空");
                 throw ExceptionResultEnum.ERROR.exception("密码不能为空");
             }
             }
-            wrapper.lambda().eq(SysUser::getLoginName, loginName);
-            userList = sysUserService.list(wrapper);
+            QueryWrapper<SysUser> wrapper1 = new QueryWrapper<>();
+            wrapper1 = wrapper;
+            wrapper1.lambda().eq(SysUser::getLoginName, loginName);
+            userList = sysUserService.list(wrapper1);
 
 
             //用户不存在
             //用户不存在
             if (userList == null || userList.isEmpty()) {
             if (userList == null || userList.isEmpty()) {
-                throw ExceptionResultEnum.ERROR.exception("用户不存在");
+                wrapper1.clear();
+                wrapper1 = wrapper;
+                wrapper.lambda().eq(SysUser::getCode, loginName);
+                userList = sysUserService.list(wrapper1);
+                if (userList == null || userList.isEmpty()) {
+                    throw ExceptionResultEnum.ERROR.exception("用户不存在");
+                }
             }
             }
             if (userList.size() > 1) {
             if (userList.size() > 1) {
                 throw ExceptionResultEnum.ERROR.exception("查出多个用户");
                 throw ExceptionResultEnum.ERROR.exception("查出多个用户");
@@ -264,7 +272,7 @@ public class SysController {
             throw ExceptionResultEnum.ERROR.exception("手机号不存在");
             throw ExceptionResultEnum.ERROR.exception("手机号不存在");
         }
         }
         if (userList.size() > 1) {
         if (userList.size() > 1) {
-            throw ExceptionResultEnum.ERROR.exception("查出多个用户");
+            throw ExceptionResultEnum.ERROR.exception("手机号绑定了多个用户");
         }
         }
         SysUser sysUser = userList.get(0);
         SysUser sysUser = userList.get(0);
 
 
@@ -285,6 +293,72 @@ public class SysController {
         return ResultUtil.ok(userLoginCheckResult, "");
         return ResultUtil.ok(userLoginCheckResult, "");
     }
     }
 
 
+
+    /**
+     * 发送验证码(绑定手机号)
+     *
+     * @param loginParam
+     * @return
+     */
+    @ApiOperation(value = "发送验证码(绑定手机号)")
+    @RequestMapping(value = "/get_verify_code_for_bind", method = RequestMethod.POST)
+    @Aac(auth = BOOL.FALSE)
+    public Result getVerifyCodeForBind(@RequestBody LoginParam loginParam) {
+        String loginName = loginParam.getLoginName();
+        String password = loginParam.getPassword();
+        String schoolCode = loginParam.getSchoolCode();
+        String mobileNumber = loginParam.getMobileNumber();
+
+        if (StringUtils.isBlank(schoolCode)) {
+            throw ExceptionResultEnum.ERROR.exception("学校代码不能为空");
+        }
+        QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
+        BasicSchool basicSchool = commonCacheService.schoolCache(loginParam.getSchoolCode());
+        if (Objects.isNull(basicSchool)) {
+            throw ExceptionResultEnum.ERROR.exception("学校不存在");
+        }
+
+        if (StringUtils.isBlank(mobileNumber)) {
+            throw ExceptionResultEnum.ERROR.exception("手机号不能为空");
+        }
+
+        wrapper.lambda().eq(SysUser::getSchoolId, basicSchool.getId())
+                .eq(SysUser::getMobileNumber, mobileNumber);
+        List<SysUser> userList = sysUserService.list(wrapper);
+
+        if (userList != null && userList.size() > 0) {
+            throw ExceptionResultEnum.ERROR.exception("手机号已使用");
+        }
+
+        // 根据账号/密码取用户ID
+        if (StringUtils.isBlank(loginName)) {
+            throw ExceptionResultEnum.ERROR.exception("账号不能为空");
+        }
+        if (StringUtils.isBlank(password)) {
+            throw ExceptionResultEnum.ERROR.exception("密码不能为空");
+        }
+        QueryWrapper<SysUser> sysUserQueryWrapper = new QueryWrapper<>();
+        sysUserQueryWrapper.lambda().eq(SysUser::getSchoolId, basicSchool.getId())
+                .and(w -> w.eq(SysUser::getLoginName, loginName).or().eq(SysUser::getCode, loginName))
+                .eq(SysUser::getPassword, password);
+        SysUser sysUser = sysUserService.getOne(sysUserQueryWrapper);
+        if (sysUser == null) {
+            throw ExceptionResultEnum.ERROR.exception("用户数据异常");
+        }
+
+        // 发送短信验证码
+        basicVerifyCodeService.sendVeirfyCode(mobileNumber, sysUser.getId());
+
+        int pwdCount = sysUser.getPwdCount();
+        List<SysRole> sysRoleList = sysUserRoleService.listRoleByUserId(sysUser.getId());
+        if (sysRoleList.stream().map(SysRole::getType).collect(Collectors.toSet()).contains(RoleTypeEnum.ADMIN)) {
+            mobileNumber = sysUser.getLoginName() + "(特权用户)";
+            pwdCount = 1;
+        }
+        UserLoginCheckResult userLoginCheckResult = new UserLoginCheckResult(sysUser.getId(), mobileNumber, pwdCount);
+        return ResultUtil.ok(userLoginCheckResult, "");
+    }
+
     @ApiOperation(value = "根据机构代码查询机构信息接口")
     @ApiOperation(value = "根据机构代码查询机构信息接口")
     @RequestMapping(value = "/school/query_by_school_code", method = RequestMethod.POST)
     @RequestMapping(value = "/school/query_by_school_code", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "学校信息", response = EditResult.class)})
     @ApiResponses({@ApiResponse(code = 200, message = "学校信息", response = EditResult.class)})

+ 41 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/CardCreateMethodEnum.java

@@ -0,0 +1,41 @@
+package com.qmth.teachcloud.common.enums;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 通卡创建方式
+ */
+public enum CardCreateMethodEnum {
+
+    UPLOAD("上传"),
+    STANDARD("标准模式"),
+    FREE("自由模式");
+
+    CardCreateMethodEnum(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 (CardCreateMethodEnum value : CardCreateMethodEnum.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;
+    }
+
+}