Forráskód Böngészése

考务接口修改

wangliang 5 éve
szülő
commit
b164be5214

+ 58 - 4
themis-backend/src/main/java/com/qmth/themis/backend/api/TEExamCourseController.java

@@ -1,8 +1,25 @@
 package com.qmth.themis.backend.api;
 
-import io.swagger.annotations.Api;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qmth.themis.business.constant.SystemConstant;
+import com.qmth.themis.business.entity.TEExamCourse;
+import com.qmth.themis.business.enums.FieldUniqueEnum;
+import com.qmth.themis.business.service.TEExamCourseService;
+import com.qmth.themis.business.util.JacksonUtil;
+import com.qmth.themis.common.contanst.Constants;
+import com.qmth.themis.common.exception.BusinessException;
+import com.qmth.themis.common.util.Result;
+import com.qmth.themis.common.util.ResultUtil;
+import io.swagger.annotations.*;
+import org.springframework.dao.DuplicateKeyException;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
 
 /**
  * @Description: 考试科目 前端控制器
@@ -13,7 +30,44 @@ import org.springframework.web.bind.annotation.RestController;
  */
 @Api(tags = "考试科目Controller")
 @RestController
-@RequestMapping("/${prefix.url.admin}/examCourse")
+@RequestMapping("/${prefix.url.admin}/course")
 public class TEExamCourseController {
 
+    @Resource
+    TEExamCourseService teExamCourseService;
+
+    @ApiOperation(value = "考试场次修改/新增接口")
+    @RequestMapping(value = "/save", method = RequestMethod.POST)
+    @Transactional
+    @ApiResponses({@ApiResponse(code = 200, message = "{\"success\":true}", response = Result.class)})
+    public Result save(@ApiParam(value = "考试科目信息", required = true) @RequestBody TEExamCourse teExamCourse) {
+        try {
+            if (Objects.isNull(teExamCourse.getId())) {
+                teExamCourse.setId(Constants.idGen.next());
+            }
+            teExamCourseService.saveOrUpdate(teExamCourse);
+        } catch (Exception e) {
+            e.printStackTrace();
+            if (e instanceof DuplicateKeyException) {
+                String errorColumn = e.getCause().toString();
+                String columnStr = errorColumn.substring(errorColumn.lastIndexOf("key") + 3, errorColumn.length()).replaceAll("'", "");
+                throw new BusinessException("机构id[" + teExamCourse.getExamId() + "]下的" + FieldUniqueEnum.convertToCode(columnStr) + "数据不允许重复插入");
+            } else if (e instanceof BusinessException) {
+                throw new BusinessException(e.getMessage());
+            } else {
+                throw new RuntimeException(e);
+            }
+        }
+        return ResultUtil.ok(JacksonUtil.parseJson(SystemConstant.SUCCESS));
+    }
+
+    @ApiOperation(value = "考试科目查询接口")
+    @RequestMapping(value = "/query", method = RequestMethod.GET)
+    @ApiResponses({@ApiResponse(code = 200, message = "考试科目信息", response = TEExamCourse.class)})
+    public Result query(@ApiParam(value = "考试批次id", required = true) @RequestParam Long examId, @ApiParam(value = "科目编码", required = false) @RequestParam(required = false) String courseCode, @ApiParam(value = "科目名称", required = false) @RequestParam(required = false) String courseName, @ApiParam(value = "是否已绑定试卷", required = false) @RequestParam(required = false) Integer hasPaper, @ApiParam(value = "分页页码", required = true) @RequestParam int pageNumber, @ApiParam(value = "分页数", required = true) @RequestParam int pageSize) {
+        IPage<TEExamCourse> teExamActivityIPage = teExamCourseService.examCourseQuery(new Page<>(pageNumber, pageSize), examId, courseCode, courseName, hasPaper);
+        Map map = new HashMap<>();
+        map.put(SystemConstant.RECORDS, teExamActivityIPage);
+        return ResultUtil.ok(map);
+    }
 }

+ 1 - 0
themis-business/src/main/java/com/qmth/themis/business/constant/SystemConstant.java

@@ -57,6 +57,7 @@ public class SystemConstant {
     public static final String ATTACHMENT_TYPE = "attachmentType";
     public static final String LOCALHOST_PATH = "localhostPath";
     public static final String BASEPHOTO_PATH = "basePhotoPath";
+    public static final String DEFAULT_PASSWORD = "123456";
     /**
      * session过期时间
      */

+ 15 - 0
themis-business/src/main/java/com/qmth/themis/business/dao/TEExamCourseMapper.java

@@ -1,8 +1,12 @@
 package com.qmth.themis.business.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.qmth.themis.business.entity.TEExamCourse;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Map;
 
 /**
  * @Description: 考试科目 Mapper 接口
@@ -14,4 +18,15 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface TEExamCourseMapper extends BaseMapper<TEExamCourse> {
 
+    /**
+     * 查询考试科目
+     *
+     * @param iPage
+     * @param examId
+     * @param courseCode
+     * @param courseName
+     * @param hasPaper
+     * @return
+     */
+    public IPage<TEExamCourse> examCourseQuery(IPage<Map> iPage, @Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("courseName") String courseName, @Param("hasPaper") Integer hasPaper);
 }

+ 194 - 0
themis-business/src/main/java/com/qmth/themis/business/enums/AttachmentEnum.java

@@ -0,0 +1,194 @@
+package com.qmth.themis.business.enums;
+
+import java.util.Objects;
+
+/**
+ * @Description: 附件enum
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2020/4/18
+ */
+public enum AttachmentEnum {
+    /**
+     * 用户名
+     */
+    loginName("用户名"),
+    /**
+     * 姓名
+     */
+    name("姓名"),
+    /**
+     * 角色编码
+     */
+    roleCode("角色编码"),
+    /**
+     * 角色名称
+     */
+    roleName("角色名称"),
+    /**
+     * 科目编码
+     */
+    courseCode("科目编码"),
+
+    /**
+     * 科目名称
+     */
+    courseName("科目名称"),
+
+    /**
+     * 场次开始时间
+     */
+    startTime("场次开始时间"),
+
+    /**
+     * 场次结束时间
+     */
+    endTime("场次结束时间"),
+
+    /**
+     * 场次名称
+     */
+    sceneNumberName("场次名称"),
+
+    /**
+     * 场次id
+     */
+    sceneNumberId("场次ID"),
+
+    /**
+     * 考点名称
+     */
+    examSite("考点名称"),
+
+    /**
+     * 考场名称
+     */
+    examRoom("考场名称"),
+
+    /**
+     * 考场id
+     */
+    examRoomId("考场ID"),
+
+    /**
+     * 学号
+     */
+    studentCode("学号"),
+
+    gender("性别"),
+
+    cardId("身份证号"),
+
+    examNumber("考号"),
+
+    siteNumber("座位号"),
+
+    extendColumn("扩展字段");
+
+    private String code;
+
+    private AttachmentEnum(String code) {
+        this.code = code;
+    }
+
+    /**
+     * 状态转换 toName
+     *
+     * @param value
+     * @return
+     */
+    public static String convertToName(String value) {
+        if (Objects.equals(value.trim(), loginName.code)) {
+            return loginName.name();
+        } else if (Objects.equals(value.trim(), name.code)) {
+            return name.name();
+        } else if (Objects.equals(value.trim(), roleCode.code)) {
+            return roleCode.name();
+        } else if (Objects.equals(value.trim(), roleName.code)) {
+            return roleName.name();
+        } else if (Objects.equals(value.trim(), courseCode.code)) {
+            return courseCode.name();
+        } else if (Objects.equals(value.trim(), startTime.code)) {
+            return startTime.name();
+        } else if (Objects.equals(value.trim(), endTime.code)) {
+            return endTime.name();
+        } else if (Objects.equals(value.trim(), sceneNumberName.code)) {
+            return sceneNumberName.name();
+        } else if (Objects.equals(value.trim(), sceneNumberId.code)) {
+            return sceneNumberId.name();
+        } else if (Objects.equals(value.trim(), examSite.code)) {
+            return examSite.name();
+        } else if (Objects.equals(value.trim(), examRoom.code)) {
+            return examRoom.name();
+        } else if (Objects.equals(value.trim(), examRoomId.code)) {
+            return examRoomId.name();
+        } else if (Objects.equals(value.trim(), studentCode.code)) {
+            return studentCode.name();
+        } else if (Objects.equals(value.trim(), courseName.code)) {
+            return courseName.name();
+        } else if (Objects.equals(value.trim(), gender.code)) {
+            return gender.name();
+        } else if (Objects.equals(value.trim(), cardId.code)) {
+            return cardId.name();
+        } else if (Objects.equals(value.trim(), examNumber.code)) {
+            return examNumber.name();
+        } else if (Objects.equals(value.trim(), siteNumber.code)) {
+            return siteNumber.name();
+        } else {
+            return extendColumn.name();
+        }
+    }
+
+    /**
+     * 状态转换 toCode
+     *
+     * @param value
+     * @return
+     */
+    public static String convertToCode(String value) {
+        if (Objects.equals(value.trim(), loginName.name())) {
+            return loginName.code;
+        } else if (Objects.equals(value.trim(), name.name())) {
+            return name.code;
+        } else if (Objects.equals(value.trim(), roleCode.name())) {
+            return roleCode.code;
+        } else if (Objects.equals(value.trim(), roleName.name())) {
+            return roleName.code;
+        } else if (Objects.equals(value.trim(), courseCode.name())) {
+            return courseCode.code;
+        } else if (Objects.equals(value.trim(), startTime.name())) {
+            return startTime.code;
+        } else if (Objects.equals(value.trim(), endTime.name())) {
+            return endTime.code;
+        } else if (Objects.equals(value.trim(), sceneNumberName.name())) {
+            return sceneNumberName.code;
+        } else if (Objects.equals(value.trim(), sceneNumberId.name())) {
+            return sceneNumberId.code;
+        } else if (Objects.equals(value.trim(), examSite.name())) {
+            return examSite.code;
+        } else if (Objects.equals(value.trim(), examRoom.name())) {
+            return examRoom.code;
+        } else if (Objects.equals(value.trim(), examRoomId.name())) {
+            return examRoomId.code;
+        } else if (Objects.equals(value.trim(), studentCode.name())) {
+            return studentCode.code;
+        } else if (Objects.equals(value.trim(), courseName.name())) {
+            return courseName.code;
+        } else if (Objects.equals(value.trim(), gender.name())) {
+            return gender.code;
+        } else if (Objects.equals(value.trim(), cardId.name())) {
+            return cardId.code;
+        } else if (Objects.equals(value.trim(), examNumber.name())) {
+            return examNumber.code;
+        } else if (Objects.equals(value.trim(), siteNumber.name())) {
+            return siteNumber.code;
+        } else {
+            return extendColumn.code;
+        }
+    }
+
+    public String getCode() {
+        return code;
+    }
+}

+ 11 - 6
themis-business/src/main/java/com/qmth/themis/business/enums/FieldUniqueEnum.java

@@ -11,10 +11,11 @@ import java.util.Objects;
  */
 public enum FieldUniqueEnum {
 
-    /**
-     * 考试批次编码
-     */
-    t_e_exam_orgId_code_Idx("批次编码");
+    t_e_exam_orgId_code_Idx("考试批次编码"),
+
+    t_e_exam_activity_examId_code_Idx("考场批次编码"),
+
+    t_e_exam_course_examId_courseCode_Idx("考试科目编码");
 
     private String code;
 
@@ -35,8 +36,10 @@ public enum FieldUniqueEnum {
     public static String convertToName(String value) {
         if (Objects.equals(value.trim(), t_e_exam_orgId_code_Idx.code)) {
             return t_e_exam_orgId_code_Idx.name();
+        } else if (Objects.equals(value.trim(), t_e_exam_course_examId_courseCode_Idx.code)) {
+            return t_e_exam_course_examId_courseCode_Idx.name();
         } else {
-            return t_e_exam_orgId_code_Idx.name();
+            return t_e_exam_activity_examId_code_Idx.name();
         }
     }
 
@@ -49,8 +52,10 @@ public enum FieldUniqueEnum {
     public static String convertToCode(String value) {
         if (Objects.equals(value.trim(), t_e_exam_orgId_code_Idx.name())) {
             return t_e_exam_orgId_code_Idx.code;
+        } else if (Objects.equals(value.trim(), t_e_exam_course_examId_courseCode_Idx.name())) {
+            return t_e_exam_course_examId_courseCode_Idx.code;
         } else {
-            return t_e_exam_orgId_code_Idx.code;
+            return t_e_exam_activity_examId_code_Idx.code;
         }
     }
 }

+ 14 - 0
themis-business/src/main/java/com/qmth/themis/business/service/TEExamCourseService.java

@@ -1,8 +1,11 @@
 package com.qmth.themis.business.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.themis.business.entity.TEExamCourse;
 
+import java.util.Map;
+
 /**
  * @Description: 考试科目 服务类
  * @Param:
@@ -12,4 +15,15 @@ import com.qmth.themis.business.entity.TEExamCourse;
  */
 public interface TEExamCourseService extends IService<TEExamCourse> {
 
+    /**
+     * 查询考试科目
+     *
+     * @param iPage
+     * @param examId
+     * @param courseCode
+     * @param courseName
+     * @param hasPaper
+     * @return
+     */
+    public IPage<TEExamCourse> examCourseQuery(IPage<Map> iPage, Long examId, String courseCode, String courseName, Integer hasPaper);
 }

+ 21 - 0
themis-business/src/main/java/com/qmth/themis/business/service/impl/TEExamCourseServiceImpl.java

@@ -1,11 +1,15 @@
 package com.qmth.themis.business.service.impl;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.themis.business.dao.TEExamCourseMapper;
 import com.qmth.themis.business.entity.TEExamCourse;
 import com.qmth.themis.business.service.TEExamCourseService;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import java.util.Map;
+
 /**
  * @Description: 考试科目 服务实现类
  * @Param:
@@ -16,4 +20,21 @@ import org.springframework.stereotype.Service;
 @Service
 public class TEExamCourseServiceImpl extends ServiceImpl<TEExamCourseMapper, TEExamCourse> implements TEExamCourseService {
 
+    @Resource
+    TEExamCourseMapper teExamCourseMapper;
+
+    /**
+     * 查询考试科目
+     *
+     * @param iPage
+     * @param examId
+     * @param courseCode
+     * @param courseName
+     * @param hasPaper
+     * @return
+     */
+    @Override
+    public IPage<TEExamCourse> examCourseQuery(IPage<Map> iPage, Long examId, String courseCode, String courseName, Integer hasPaper) {
+        return teExamCourseMapper.examCourseQuery(iPage, examId, courseCode, courseName, hasPaper);
+    }
 }

+ 24 - 0
themis-business/src/main/java/com/qmth/themis/business/util/ExcelCallback.java

@@ -0,0 +1,24 @@
+package com.qmth.themis.business.util;
+
+import org.springframework.util.LinkedMultiValueMap;
+
+import java.util.List;
+
+/**
+ * @Description: excel回调
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2020/4/19
+ */
+public interface ExcelCallback {
+
+    /**
+     * excel回调方法
+     *
+     * @param finalList
+     * @param finalColumnNameList
+     * @throws IllegalAccessException ß
+     */
+    public List<LinkedMultiValueMap<Integer, Object>> callback(List<LinkedMultiValueMap<Integer, Object>> finalList, List<LinkedMultiValueMap<Integer, String>> finalColumnNameList) throws IllegalAccessException;
+}

+ 46 - 0
themis-business/src/main/java/com/qmth/themis/business/util/ExcelError.java

@@ -0,0 +1,46 @@
+package com.qmth.themis.business.util;
+
+/**
+ * @Description: excel导入错误
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2020/5/20
+ */
+public class ExcelError {
+
+    /**
+     * 错误行数
+     */
+    private int row;
+
+    /**
+     * 错误类型
+     */
+    private String excelErrorType;
+
+    public ExcelError() {
+
+    }
+
+    public ExcelError(int row, String excelErrorType) {
+        this.row = row;
+        this.excelErrorType = excelErrorType;
+    }
+
+    public int getRow() {
+        return row;
+    }
+
+    public void setRow(int row) {
+        this.row = row;
+    }
+
+    public String getExcelErrorType() {
+        return excelErrorType;
+    }
+
+    public void setExcelErrorType(String excelErrorType) {
+        this.excelErrorType = excelErrorType;
+    }
+}

+ 168 - 0
themis-business/src/main/java/com/qmth/themis/business/util/ExcelUtil.java

@@ -0,0 +1,168 @@
+package com.qmth.themis.business.util;
+
+import com.qmth.themis.business.enums.AttachmentEnum;
+import com.qmth.themis.common.enums.ExceptionResultEnum;
+import com.qmth.themis.common.exception.BusinessException;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.util.LinkedMultiValueMap;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.Field;
+import java.util.*;
+
+/**
+ * @Description: excel util
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2020/4/19
+ */
+public class ExcelUtil {
+    private final static Logger log = LoggerFactory.getLogger(ExcelUtil.class);
+
+    /**
+     * excel读取
+     *
+     * @param inputStream
+     * @param clazz
+     * @param callback
+     * @return
+     * @throws IOException
+     */
+    public static List<LinkedMultiValueMap<Integer, Object>> excelReader(InputStream inputStream, List<Class<?>> clazz, ExcelCallback callback) throws IOException {
+        try {
+            //用流的方式先读取到你想要的excel的文件
+            //获取整个excel
+            XSSFWorkbook xb = new XSSFWorkbook(inputStream);
+            int sheets = xb.getNumberOfSheets();
+            List<LinkedMultiValueMap<Integer, Object>> finalOList = new ArrayList<>();
+            List<LinkedMultiValueMap<Integer, String>> finalColumnNameList = new ArrayList<>();
+            for (int y = 0; y < sheets; y++) {
+                //获取第一个表单sheet
+                XSSFSheet sheet = xb.getSheetAt(y);
+                //获取最后一行
+                int lastrow = sheet.getLastRowNum();
+                //循环行数依次获取列数
+                LinkedMultiValueMap<Integer, Object> oList = new LinkedMultiValueMap<>();
+                LinkedMultiValueMap<Integer, String> columnNameList = new LinkedMultiValueMap<>();
+                for (int i = 0; i < lastrow + 1; i++) {
+                    //获取哪一行i
+                    Row row = sheet.getRow(i);
+                    if (Objects.nonNull(row)) {
+                        //获取这一行的第一列
+                        int firstcell = row.getFirstCellNum();//从第二行开始获取
+                        //获取这一行的最后一列
+                        int lastcell = row.getLastCellNum();
+                        Object o = clazz.get(y).newInstance();
+                        for (int j = firstcell; j < lastcell; j++) {
+                            //获取第j列
+                            Cell cell = row.getCell(j);
+                            if (i == 0) {
+                                if (!Objects.equals(AttachmentEnum.convertToName(String.valueOf(cell)), AttachmentEnum.extendColumn.name())) {
+                                    columnNameList.add(y, AttachmentEnum.convertToName(String.valueOf(cell)));
+                                } else {
+                                    columnNameList.add(y, String.valueOf(cell));
+                                }
+                            } else {
+                                if (Objects.nonNull(cell)) {
+                                    Object obj = convert(cell);
+                                    Field field = null;
+                                    String fieldName = AttachmentEnum.convertToCode(columnNameList.get(y).get(j));
+                                    if (Objects.equals(fieldName, AttachmentEnum.extendColumn.getCode())) {
+                                        field = o.getClass().getDeclaredField(AttachmentEnum.extendColumn.name());
+                                        field.setAccessible(true);
+                                        Map map = (Map) field.get(o);
+                                        if (Objects.isNull(map)) {
+                                            map = new LinkedHashMap<>();
+                                        }
+                                        map.put(columnNameList.get(y).get(j), obj);
+                                        field.set(o, map);
+                                    } else {
+                                        field = o.getClass().getDeclaredField(columnNameList.get(y).get(j));
+                                        field.setAccessible(true);
+                                        field.set(o, obj);
+                                    }
+                                }
+                            }
+                        }
+                        if (i > 0) {
+                            oList.add(y, o);
+                        }
+                    }
+                }
+                if (oList.size() == 0 && finalOList.size() == 0) {
+                    throw new BusinessException(ExceptionResultEnum.EXCEL_IS_NULL);
+                }
+                if (oList.size() > 0) {
+                    finalOList.add(oList);
+                    finalColumnNameList.add(columnNameList);
+                }
+            }
+            return callback.callback(finalOList, finalColumnNameList);
+        } catch (Exception e) {
+            e.printStackTrace();
+            if (e instanceof IllegalArgumentException) {
+                String errorColumn = e.getMessage().toString();
+                if (errorColumn.indexOf("Can not set java.lang.String field") != -1 && errorColumn.indexOf("to java.lang.Long") != -1) {
+                    String column = errorColumn.substring(errorColumn.indexOf("Can not set java.lang.String field") + 1, errorColumn.indexOf("to java.lang.Long"));
+                    column = column.substring(column.lastIndexOf(".") + 1, column.length());
+                    throw new BusinessException("excel列[" + AttachmentEnum.convertToCode(column) + "]为非文本格式");
+                } else {
+                    throw new BusinessException(e.getMessage());
+                }
+            } else {
+                throw new BusinessException(e.getMessage());
+            }
+        } finally {
+            if (Objects.nonNull(inputStream)) {
+                inputStream.close();
+            }
+        }
+    }
+
+    /**
+     * 类型转换
+     *
+     * @param cell
+     * @return
+     */
+    private static Object convert(Cell cell) {
+        switch (cell.getCellType()) {
+            case Cell.CELL_TYPE_STRING:
+                return String.valueOf(cell.getStringCellValue());
+            case Cell.CELL_TYPE_BOOLEAN:
+                return String.valueOf(cell.getBooleanCellValue());
+            case Cell.CELL_TYPE_NUMERIC:
+                return Math.round(cell.getNumericCellValue());
+        }
+        return null;
+    }
+
+    /**
+     * 校验属性
+     *
+     * @param obj
+     * @param index
+     * @param sheetIndex
+     * @return
+     * @throws IllegalAccessException
+     */
+    public static List<ExcelError> checkExcelField(Object obj, int index, int sheetIndex) throws IllegalAccessException {
+        List<ExcelError> excelErrorList = new ArrayList<>();
+        Field[] fields = obj.getClass().getDeclaredFields();
+        for (int i = 0; i < fields.length; i++) {
+            Field field = fields[i];
+            field.setAccessible(true);
+            if (Objects.isNull(field.get(obj))) {
+                excelErrorList.add(new ExcelError(index + 1, "excel第" + (sheetIndex + 1) + "个sheet第" + (index + 1) + "行,第" + (i + 1) + "列" + AttachmentEnum.convertToCode(field.getName()) + "为空"));
+            }
+        }
+        return excelErrorList;
+    }
+}

+ 25 - 0
themis-business/src/main/resources/mapper/TEExamCourseMapper.xml

@@ -2,4 +2,29 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.qmth.themis.business.dao.TEExamCourseMapper">
 
+    <select id="examCourseQuery" resultType="com.qmth.themis.business.entity.TEExamCourse">
+        select * from t_e_exam_course teec
+        left join t_e_exam tee on teec.exam_id = tee.id
+        <where>
+            <if test="examId != null and examId != ''">
+                and teec.exam_id = #{examId}
+            </if>
+            <if test="courseCode != null and courseCode != ''">
+                and teec.course_code like concat('%', #{courseCode}, '%')
+            </if>
+            <if test="courseName != null and courseName != ''">
+                and teec.course_name like concat('%', #{courseName}, '%')
+            </if>
+            <if test="hasPaper != null and hasPaper != '' or hasPaper == 0">
+                <choose>
+                    <when test="hasPaper == 0">
+                        and (teec.paper_count = #{hasPaper} or teec.paper_count is null)
+                    </when>
+                    <otherwise>
+                        and teec.paper_count <![CDATA[ > ]]> 0
+                    </otherwise>
+                </choose>
+            </if>
+        </where>
+    </select>
 </mapper>