소스 검색

考试接口

xiatian 2 년 전
부모
커밋
9f87048c0c

+ 7 - 4
src/main/java/cn/com/qmth/mps/controller/ExamController.java

@@ -1,5 +1,7 @@
 package cn.com.qmth.mps.controller;
 
+import java.util.List;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -30,24 +32,25 @@ public class ExamController extends BaseController {
     @ApiOperation(value = "新增/修改")
     @RequestMapping(value = "save", method = RequestMethod.POST)
     public void save(ExamDomain domain) {
+    	examService.saveExam(domain,getAccessUser());
     }
 
     @ApiOperation(value = "获取分页")
     @RequestMapping(value = "page", method = RequestMethod.POST)
     public PageResult<ExamVo> page(ExamQuery query) {
-        return null;
+        return examService.page(query,getAccessUser());
     }
     
     @ApiOperation(value = "获取未关闭列表")
     @RequestMapping(value = "list", method = RequestMethod.POST)
-    public PageResult<ExamVo> list() {
-        return null;
+    public List<ExamVo> unClose() {
+        return examService.unClose(getAccessUser());
     }
     
     @ApiOperation(value = "获取信息")
     @RequestMapping(value = "info", method = RequestMethod.POST)
     public ExamVo info(@RequestParam Long id) {
-        return null;
+        return examService.info(id,getAccessUser());
     }
     
     @ApiOperation(value = "同步")

+ 12 - 0
src/main/java/cn/com/qmth/mps/dao/ExamDao.java

@@ -1,9 +1,21 @@
 package cn.com.qmth.mps.dao;
 
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 
 import cn.com.qmth.mps.entity.ExamEntity;
+import cn.com.qmth.mps.vo.exam.ExamQuery;
+import cn.com.qmth.mps.vo.exam.ExamVo;
 
 public interface ExamDao extends BaseMapper<ExamEntity> {
 
+	IPage<ExamVo> page(Page<ExamVo> page,@Param("req") ExamQuery query);
+
+	List<ExamVo> unClose(@Param("schoolId")Long schoolId);
+
 }

+ 7 - 0
src/main/java/cn/com/qmth/mps/dao/PaperDao.java

@@ -1,9 +1,16 @@
 package cn.com.qmth.mps.dao;
 
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
 import cn.com.qmth.mps.entity.PaperEntity;
+import cn.com.qmth.mps.vo.exam.ExamPaperCountVo;
 
 public interface PaperDao extends BaseMapper<PaperEntity> {
 
+	List<ExamPaperCountVo> findPaperCount(@Param(value = "examIds") List<Long> examIds);
+
 }

+ 14 - 0
src/main/java/cn/com/qmth/mps/service/ExamService.java

@@ -1,12 +1,26 @@
 package cn.com.qmth.mps.service;
 
+import java.util.List;
+
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.boot.core.collection.PageResult;
 
 import cn.com.qmth.mps.bean.User;
 import cn.com.qmth.mps.entity.ExamEntity;
+import cn.com.qmth.mps.vo.exam.ExamDomain;
+import cn.com.qmth.mps.vo.exam.ExamQuery;
+import cn.com.qmth.mps.vo.exam.ExamVo;
 
 public interface ExamService  extends IService<ExamEntity> {
 
 	void syncExam(Long schoolId, User accessUser);
 
+	void saveExam(ExamDomain domain, User accessUser);
+
+	PageResult<ExamVo> page(ExamQuery query, User accessUser);
+
+	List<ExamVo> unClose(User accessUser);
+
+	ExamVo info(Long id, User accessUser);
+
 }

+ 5 - 0
src/main/java/cn/com/qmth/mps/service/PaperService.java

@@ -8,9 +8,14 @@ import com.baomidou.mybatisplus.extension.service.IService;
 
 import cn.com.qmth.mps.bean.User;
 import cn.com.qmth.mps.entity.PaperEntity;
+import cn.com.qmth.mps.vo.exam.ExamPaperCountVo;
 
 public interface PaperService  extends IService<PaperEntity> {
 
 	List<String> importPaper(Long examId, User accessUser, MultipartFile file);
 
+	List<ExamPaperCountVo> findPaperCount(List<Long> examIds);
+
+	Integer findPaperCount(Long examId);
+
 }

+ 120 - 0
src/main/java/cn/com/qmth/mps/service/impl/ExamServiceImpl.java

@@ -1,8 +1,11 @@
 package cn.com.qmth.mps.service.impl;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
+import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -13,7 +16,10 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 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;
+import com.qmth.boot.core.collection.PageResult;
 import com.qmth.boot.core.exception.StatusException;
 import com.qmth.boot.tools.signature.SignatureEntity;
 import com.qmth.boot.tools.signature.SignatureType;
@@ -25,8 +31,15 @@ import cn.com.qmth.mps.entity.SchoolEntity;
 import cn.com.qmth.mps.enums.ExamStatus;
 import cn.com.qmth.mps.enums.Role;
 import cn.com.qmth.mps.service.ExamService;
+import cn.com.qmth.mps.service.PaperService;
 import cn.com.qmth.mps.service.SchoolService;
+import cn.com.qmth.mps.util.BatchSetDataUtil;
 import cn.com.qmth.mps.util.HttpUtil;
+import cn.com.qmth.mps.util.PageUtil;
+import cn.com.qmth.mps.vo.exam.ExamDomain;
+import cn.com.qmth.mps.vo.exam.ExamPaperCountVo;
+import cn.com.qmth.mps.vo.exam.ExamQuery;
+import cn.com.qmth.mps.vo.exam.ExamVo;
 
 @Service
 public class ExamServiceImpl extends ServiceImpl<ExamDao, ExamEntity> implements ExamService {
@@ -34,6 +47,9 @@ public class ExamServiceImpl extends ServiceImpl<ExamDao, ExamEntity> implements
 	private String markingcloudServer;
 	@Autowired
 	private SchoolService schoolService;
+	
+	@Autowired
+	private PaperService paperService;
 
 	@Transactional
 	@Override
@@ -89,4 +105,108 @@ public class ExamServiceImpl extends ServiceImpl<ExamDao, ExamEntity> implements
 		return this.getOne(wrapper);
 	}
 
+	@Transactional
+	@Override
+	public void saveExam(ExamDomain domain, User user) {
+		if (domain.getSchoolId() == null) {
+			throw new StatusException("学校不能为空");
+		}
+		if (!user.getRole().equals(Role.SUPER_ADMIN) && !user.getSchoolId().equals(domain.getSchoolId())) {
+			throw new StatusException("非法操作");
+		}
+		if (StringUtils.isBlank(domain.getName())) {
+			throw new StatusException("考试名称不能为空");
+		}
+		if (domain.getExamStatus()==null) {
+			throw new StatusException("状态不能为空");
+		}
+		ExamEntity ue = null;
+		if (domain.getId() != null) {
+			ue = this.getById(domain.getId());
+			if (ue == null) {
+				throw new StatusException("未找到考试");
+			}
+		} else {
+			ue = new ExamEntity();
+			ue.setSchoolId(user.getSchoolId());
+		}
+		ue.setExamStatus(domain.getExamStatus());
+		ue.setName(domain.getName());
+		this.saveOrUpdate(ue);
+	}
+
+	@Override
+	public PageResult<ExamVo> page(ExamQuery query, User user) {
+		if (query.getSchoolId() == null) {
+			throw new StatusException("学校不能为空");
+		}
+		if (!user.getRole().equals(Role.SUPER_ADMIN) && !user.getSchoolId().equals(query.getSchoolId())) {
+			throw new StatusException("非法操作");
+		}
+		IPage<ExamVo> iPage = this.baseMapper.page(new Page<ExamVo>(query.getPageNumber(), query.getPageSize()), query);
+		if(CollectionUtils.isNotEmpty(iPage.getRecords())) {
+			new BatchSetDataUtil<ExamVo>() {
+
+                @Override
+                protected void setData(List<ExamVo> dataList) {
+                    List<Long> examIds = dataList.stream().map(dto -> dto.getId()).distinct()
+                            .collect(Collectors.toList());
+                    List<ExamPaperCountVo> ret = paperService.findPaperCount(examIds);
+                    if (ret != null && ret.size() > 0) {
+                        Map<Long, Integer> countMap = new HashMap<>();
+                        for (ExamPaperCountVo item : ret) {
+                            countMap.put(item.getExamId(), item.getPaperCount());
+                        }
+                        for (ExamVo vo : dataList) {
+                            vo.setPaperCount(countMap.get(vo.getId()));
+                        }
+                    }
+                }
+            }.setDataForBatch(iPage.getRecords(), 20);
+		}
+		return PageUtil.of(iPage);
+	}
+
+	@Override
+	public List<ExamVo> unClose(User user) {
+		List<ExamVo> ret=this.baseMapper.unClose(user.getSchoolId());
+		if(CollectionUtils.isNotEmpty(ret)) {
+			new BatchSetDataUtil<ExamVo>() {
+
+                @Override
+                protected void setData(List<ExamVo> dataList) {
+                    List<Long> examIds = dataList.stream().map(dto -> dto.getId()).distinct()
+                            .collect(Collectors.toList());
+                    List<ExamPaperCountVo> ret = paperService.findPaperCount(examIds);
+                    if (ret != null && ret.size() > 0) {
+                        Map<Long, Integer> countMap = new HashMap<>();
+                        for (ExamPaperCountVo item : ret) {
+                            countMap.put(item.getExamId(), item.getPaperCount());
+                        }
+                        for (ExamVo vo : dataList) {
+                            vo.setPaperCount(countMap.get(vo.getId()));
+                        }
+                    }
+                }
+            }.setDataForBatch(ret, 20);
+		}
+		return ret;
+	}
+
+	@Override
+	public ExamVo info(Long id, User accessUser) {
+		ExamEntity ue = this.getById(id);
+		if (ue == null) {
+			throw new StatusException("未找到考试信息");
+		}
+		ExamVo vo = new ExamVo();
+		vo.setId(ue.getId());
+		vo.setName(ue.getName());
+		vo.setSchoolId(ue.getSchoolId());
+		vo.setCode(ue.getCode());
+		vo.setExamStatus(ue.getExamStatus());
+		vo.setPaperCount(paperService.findPaperCount(ue.getId()));
+		return vo;
+	}
+
 }

+ 16 - 0
src/main/java/cn/com/qmth/mps/service/impl/PaperServiceImpl.java

@@ -14,6 +14,8 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 import org.springframework.web.multipart.MultipartFile;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.boot.core.exception.StatusException;
 import com.qmth.boot.tools.excel.ExcelReader;
@@ -29,6 +31,7 @@ import cn.com.qmth.mps.enums.Role;
 import cn.com.qmth.mps.service.CourseService;
 import cn.com.qmth.mps.service.ExamService;
 import cn.com.qmth.mps.service.PaperService;
+import cn.com.qmth.mps.vo.exam.ExamPaperCountVo;
 
 @Service
 public class PaperServiceImpl extends ServiceImpl<PaperDao, PaperEntity> implements PaperService {
@@ -140,6 +143,19 @@ public class PaperServiceImpl extends ServiceImpl<PaperDao, PaperEntity> impleme
 		return "第" + lineNum + "行" + msg;
 	}
 
+	@Override
+	public List<ExamPaperCountVo> findPaperCount(List<Long> examIds) {
+		return this.baseMapper.findPaperCount(examIds);
+	}
+
+	@Override
+	public Integer findPaperCount(Long examId) {
+		QueryWrapper<PaperEntity> wrapper = new QueryWrapper<>();
+		LambdaQueryWrapper<PaperEntity> lw = wrapper.lambda();
+		lw.eq(PaperEntity::getExamId, examId);
+		return this.count(wrapper);
+	}
+
 
 
 }

+ 6 - 6
src/main/java/cn/com/qmth/mps/vo/exam/ExamDomain.java

@@ -5,8 +5,8 @@ import io.swagger.annotations.ApiModelProperty;
 public class ExamDomain {
 	@ApiModelProperty("id")
 	private Long id;
-	@ApiModelProperty("考试编码")
-	private String code;
+	@ApiModelProperty("学校ID")
+	private Long schoolId;
 	@ApiModelProperty("考试名称")
 	private String name;
 	@ApiModelProperty("考试状态")
@@ -29,11 +29,11 @@ public class ExamDomain {
 	public void setId(Long id) {
 		this.id = id;
 	}
-	public String getCode() {
-		return code;
+	public Long getSchoolId() {
+		return schoolId;
 	}
-	public void setCode(String code) {
-		this.code = code;
+	public void setSchoolId(Long schoolId) {
+		this.schoolId = schoolId;
 	}
 
 	

+ 24 - 0
src/main/java/cn/com/qmth/mps/vo/exam/ExamPaperCountVo.java

@@ -0,0 +1,24 @@
+package cn.com.qmth.mps.vo.exam;
+
+import cn.com.qmth.mps.entity.base.BaseEntity;
+public class ExamPaperCountVo extends BaseEntity{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -2762342766185496673L;
+	private Long examId;
+	private Integer paperCount;
+	public Long getExamId() {
+		return examId;
+	}
+	public void setExamId(Long examId) {
+		this.examId = examId;
+	}
+	public Integer getPaperCount() {
+		return paperCount;
+	}
+	public void setPaperCount(Integer paperCount) {
+		this.paperCount = paperCount;
+	}
+	
+}

+ 1 - 1
src/main/java/cn/com/qmth/mps/vo/exam/ExamVo.java

@@ -10,7 +10,7 @@ public class ExamVo extends BaseEntity{
 	private static final long serialVersionUID = -2762342766185496673L;
 	@ApiModelProperty("考试id")
 	private Long id;
-	@ApiModelProperty("学校名称")
+	@ApiModelProperty("学校ID")
 	private Long schoolId;
 	@ApiModelProperty("考试编码")
 	private String code;

+ 23 - 0
src/main/resources/mapper/ExamMapper.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.com.qmth.mps.dao.ExamDao">
+
+	<select id="page" resultType="cn.com.qmth.mps.vo.exam.ExamVo">
+		select t.* from mps_exam
+		t
+		where
+		t.school_id=#{req.schoolId}
+		<if test="req.name != null and reqname !=''">
+			and t.name like concat('%', #{req.name}, '%')
+		</if>
+		order by t.update_time desc
+	</select>
+	<select id="unClose" resultType="cn.com.qmth.mps.vo.exam.ExamVo">
+		select t.* from mps_exam
+		t
+		where
+		t.school_id=#{schoolId} and t.exam_status!='CLOSE'
+		order by t.update_time desc
+	</select>
+	
+</mapper>

+ 14 - 0
src/main/resources/mapper/PaperMapper.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.com.qmth.mps.dao.PaperDao">
+
+	<select id="findPaperCount" resultType="cn.com.qmth.mps.vo.exam.ExamPaperCountVo">
+		select t.exam_id,count(1) paperCount from mps_paper
+		t
+		where 1=2
+		<foreach collection="examIds" index="index" item="examId">
+			or t.exam_id=#{examId}
+		</foreach>
+		group by t.exam_id
+	</select>
+</mapper>