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

印刷平台提交

weiwenhai 6 éve
szülő
commit
ce7e373b82

+ 2 - 0
examcloud-core-print-common/src/main/java/cn/com/qmth/examcloud/core/print/common/Constants.java

@@ -34,5 +34,7 @@ public interface Constants {
      * 权限错误
      */
     String PRT_CODE_403 = "PRT-000403";
+    
+    
 
 }

+ 3 - 0
examcloud-core-print-dao/src/main/java/cn/com/qmth/examcloud/core/print/repository/ExamStructureRepository.java

@@ -8,11 +8,14 @@
 package cn.com.qmth.examcloud.core.print.repository;
 
 import cn.com.qmth.examcloud.core.print.entity.ExamStructure;
+
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.stereotype.Repository;
 
 @Repository
 public interface ExamStructureRepository extends JpaRepository<ExamStructure, Long>, JpaSpecificationExecutor<ExamStructure> {
+	
+	ExamStructure findByExamIdAndOrgId(Long examId, Long orgId);
 
 }

+ 62 - 0
examcloud-core-print-provider/src/main/java/cn/com/qmth/examcloud/core/print/api/controller/ExamStructureController.java

@@ -0,0 +1,62 @@
+package cn.com.qmth.examcloud.core.print.api.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import cn.com.qmth.examcloud.commons.web.support.ControllerSupport;
+import cn.com.qmth.examcloud.core.print.common.Result;
+import cn.com.qmth.examcloud.core.print.service.ExamStructureService;
+import cn.com.qmth.examcloud.core.print.service.bean.ExamStructureInfo;
+import cn.com.qmth.examcloud.core.print.service.bean.ExamStructureQuery;
+
+/**
+ * 导出结构设置信息相关接口(前端)
+ * 
+ * @author weiwenhai
+ * @since  2018.10.31
+ */
+@RestController
+@Api(tags = "导出结构设置信息相关接口")
+@RequestMapping("${$rmp.ctrl.print}/examStructure")
+public class ExamStructureController extends ControllerSupport{
+
+	@Autowired
+	private ExamStructureService examStructureService;
+	
+	@PostMapping("/list")
+	@ApiOperation(value = "查询导出结构设置信息(分页)")
+	public Page<ExamStructureInfo> getExamStructureList(@RequestBody ExamStructureQuery query){
+		Page<ExamStructureInfo> list = examStructureService.getExamStructureList(query);
+		return list;
+	}
+	
+	@SuppressWarnings("rawtypes")
+	@PostMapping("/save")
+	@ApiOperation(value = "保存导出结构设置信息")
+	public Result saveExamStructure(@RequestBody ExamStructureInfo info){
+		examStructureService.saveExamStructure(info);
+		return Result.success();
+	}
+	
+	@SuppressWarnings("rawtypes")
+	@DeleteMapping("/delete/{ids}")
+	@ApiOperation(value = "删除导出结构设置信息")
+	public Result deleteExamStructure(@PathVariable String ids){
+		List<Long> list = Arrays.asList(ids.split(",")).stream().map(s -> Long.parseLong(s.trim())).collect(Collectors.toList());
+		examStructureService.deleteExamStructure(list);
+		return Result.success();
+	}
+}

+ 21 - 0
examcloud-core-print-provider/src/main/java/cn/com/qmth/examcloud/core/print/api/provider/ExamStructureCloudServiceProvider.java

@@ -0,0 +1,21 @@
+package cn.com.qmth.examcloud.core.print.api.provider;
+
+import io.swagger.annotations.Api;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import cn.com.qmth.examcloud.commons.web.support.ControllerSupport;
+
+/**
+ * 导出结构设置信息相关接口(后端)
+ * 
+ * @author Administrator
+ * @since  2018.10.31
+ */
+@RestController
+@Api(tags = "导出结构设置信息相关接口(后端)")
+@RequestMapping("${$rmp.cloud.print}/examStructure")
+public class ExamStructureCloudServiceProvider extends ControllerSupport {
+
+}

+ 39 - 0
examcloud-core-print-service/src/main/java/cn/com/qmth/examcloud/core/print/service/ExamStructureService.java

@@ -7,10 +7,49 @@
 
 package cn.com.qmth.examcloud.core.print.service;
 
+import java.util.List;
+
+import org.springframework.data.domain.Page;
+
+import cn.com.qmth.examcloud.core.print.service.bean.ExamStructureInfo;
+import cn.com.qmth.examcloud.core.print.service.bean.ExamStructureQuery;
+
 /**
  * @author: fengdesheng
  * @since: 2018/10/22
+ * @update: weiwenhai
+ * @date:  2018.10.30
  */
 public interface ExamStructureService {
 
+	/**
+	 * 查询导出结构设置信息(分页)
+	 * @param examId
+	 * @param orgId
+	 * @return
+	 */
+	Page<ExamStructureInfo> getExamStructureList(ExamStructureQuery query);
+	
+	/**
+	 * 保存导出结构设置信息
+	 * @param info
+	 */
+	void saveExamStructure(ExamStructureInfo info);
+	
+	/**
+	 * 删除导出结构设置信息
+	 * @param id
+	 */
+	void deleteExamStructure(List<Long> ids);
+	
+	/**
+	 * 复用导出结构设置信息
+	 * @param id
+	 */
+	void copyExamStructure(ExamStructureInfo info);
+	
+	/**
+	 * 同步考试名称
+	 */
+	void syncExamStructureExamName(Long examId, String examName);
 }

+ 49 - 0
examcloud-core-print-service/src/main/java/cn/com/qmth/examcloud/core/print/service/bean/ExamStructureConvert.java

@@ -0,0 +1,49 @@
+package cn.com.qmth.examcloud.core.print.service.bean;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.springframework.beans.BeanUtils;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+
+import com.google.common.collect.Lists;
+
+import cn.com.qmth.examcloud.core.print.common.utils.JsonMapper;
+import cn.com.qmth.examcloud.core.print.entity.ExamQuestionStructure;
+import cn.com.qmth.examcloud.core.print.entity.ExamStructure;
+
+/**
+ * @author weiwenhai
+ * @since  2018.10.30
+ */
+public class ExamStructureConvert {
+	
+	public static ExamStructure of(ExamStructureInfo info){
+		ExamStructure entity = new ExamStructure();
+		BeanUtils.copyProperties(info, entity);
+		String struct = new JsonMapper().toJson(info.getExamQuestionStructures());
+		entity.setStruct(struct);
+		return entity;
+	}
+	
+	public static ExamStructureInfo of(ExamStructure entity){
+		ExamStructureInfo info = new ExamStructureInfo();
+		BeanUtils.copyProperties(entity, info);
+		List<ExamQuestionStructure> list = new JsonMapper().toList(entity.getStruct(), ExamQuestionStructure.class);
+		info.setExamQuestionStructures(list);
+		return info;
+	}
+
+	public static Page<ExamStructureInfo> ofPage(Page<ExamStructure> page){
+		Pageable pageable = new PageRequest(page.getNumber(), page.getSize());
+		List<ExamStructure> entities = page.getContent();
+		if(entities == null || entities.isEmpty()){
+			return new PageImpl<ExamStructureInfo>(Lists.newArrayList(), pageable, page.getTotalElements());
+		}
+		List<ExamStructureInfo> list = entities.stream().map(entity -> of(entity)).collect(Collectors.toList());
+		return new PageImpl<ExamStructureInfo>(list, pageable ,page.getTotalElements());
+	}
+}

+ 156 - 0
examcloud-core-print-service/src/main/java/cn/com/qmth/examcloud/core/print/service/bean/ExamStructureInfo.java

@@ -0,0 +1,156 @@
+package cn.com.qmth.examcloud.core.print.service.bean;
+
+import java.util.List;
+
+import cn.com.qmth.examcloud.commons.web.cloud.api.JsonSerializable;
+import cn.com.qmth.examcloud.core.print.entity.ExamQuestionStructure;
+
+/**
+ * @author weiwenhai
+ * @since  2018.10.30
+ */
+public class ExamStructureInfo implements JsonSerializable {
+
+	private static final long serialVersionUID = 2678304552525917716L;
+	
+	private Long id;
+	
+	/**
+     * 考试ID
+     */
+    private Long examId;
+    
+    /**
+     * 学校机构ID
+     */
+    private Long orgId;
+	
+	/**
+     * 学校机构名称
+     */
+    private String orgName;
+    
+    /**
+     * 考试名称
+     */
+    private String examName;
+    
+    /**
+     * 考试类型
+     */
+    private String examType;
+    
+    /**
+     * 试题结构信息
+     */
+    private List<ExamQuestionStructure> examQuestionStructures;
+    
+    /**
+     * 复用后的机构id
+     */
+    private Long newOrgId;
+    
+    /**
+     * 复用后的考试id
+     */
+    private Long newExamId;
+    
+    /**
+     * 复用后的学校机构名称
+     */
+    private String newOrgName;
+    
+    /**
+     * 复用后的考试名称
+     */
+    private String newExamName;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getOrgName() {
+		return orgName;
+	}
+
+	public void setOrgName(String orgName) {
+		this.orgName = orgName;
+	}
+
+	public String getExamName() {
+		return examName;
+	}
+
+	public void setExamName(String examName) {
+		this.examName = examName;
+	}
+
+	public List<ExamQuestionStructure> getExamQuestionStructures() {
+		return examQuestionStructures;
+	}
+
+	public void setExamQuestionStructures(List<ExamQuestionStructure> examQuestionStructures) {
+		this.examQuestionStructures = examQuestionStructures;
+	}
+
+	public Long getExamId() {
+		return examId;
+	}
+
+	public void setExamId(Long examId) {
+		this.examId = examId;
+	}
+
+	public Long getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(Long orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getExamType() {
+		return examType;
+	}
+
+	public void setExamType(String examType) {
+		this.examType = examType;
+	}
+
+	public Long getNewOrgId() {
+		return newOrgId;
+	}
+
+	public void setNewOrgId(Long newOrgId) {
+		this.newOrgId = newOrgId;
+	}
+
+	public Long getNewExamId() {
+		return newExamId;
+	}
+
+	public void setNewExamId(Long newExamId) {
+		this.newExamId = newExamId;
+	}
+
+	public String getNewOrgName() {
+		return newOrgName;
+	}
+
+	public void setNewOrgName(String newOrgName) {
+		this.newOrgName = newOrgName;
+	}
+
+	public String getNewExamName() {
+		return newExamName;
+	}
+
+	public void setNewExamName(String newExamName) {
+		this.newExamName = newExamName;
+	}
+    
+}

+ 40 - 0
examcloud-core-print-service/src/main/java/cn/com/qmth/examcloud/core/print/service/bean/ExamStructureQuery.java

@@ -0,0 +1,40 @@
+package cn.com.qmth.examcloud.core.print.service.bean;
+
+import cn.com.qmth.examcloud.commons.web.cloud.api.JsonSerializable;
+import cn.com.qmth.examcloud.core.print.common.PageQuery;
+
+/**
+ * @author weiwenhai
+ * @since  2018.10.30
+ */
+public class ExamStructureQuery extends PageQuery implements JsonSerializable{
+
+	private static final long serialVersionUID = -7247154384582077535L;
+	
+	/**
+	 * 机构ID
+	 */
+	private Long orgId;
+	
+	/**
+	 * 考试ID
+	 */
+	private Long examId;
+
+	public Long getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(Long orgId) {
+		this.orgId = orgId;
+	}
+
+	public Long getExamId() {
+		return examId;
+	}
+
+	public void setExamId(Long examId) {
+		this.examId = examId;
+	}
+	
+}

+ 87 - 0
examcloud-core-print-service/src/main/java/cn/com/qmth/examcloud/core/print/service/impl/ExamStructureServiceImpl.java

@@ -7,18 +7,105 @@
 
 package cn.com.qmth.examcloud.core.print.service.impl;
 
+import java.util.List;
+
+import cn.com.qmth.examcloud.commons.base.exception.StatusException;
+import cn.com.qmth.examcloud.core.print.common.Constants;
+import cn.com.qmth.examcloud.core.print.common.jpa.OrderBuilder;
+import cn.com.qmth.examcloud.core.print.common.jpa.SearchBuilder;
+import cn.com.qmth.examcloud.core.print.common.jpa.SpecUtils;
+import cn.com.qmth.examcloud.core.print.common.utils.Check;
+import cn.com.qmth.examcloud.core.print.entity.ExamStructure;
 import cn.com.qmth.examcloud.core.print.repository.ExamStructureRepository;
 import cn.com.qmth.examcloud.core.print.service.ExamStructureService;
+import cn.com.qmth.examcloud.core.print.service.bean.ExamStructureConvert;
+import cn.com.qmth.examcloud.core.print.service.bean.ExamStructureInfo;
+import cn.com.qmth.examcloud.core.print.service.bean.ExamStructureQuery;
+
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 
 /**
  * @author: fengdesheng
  * @since: 2018/10/17
+ * @update: weiwenhai
+ * @date:  2018.10.30
  */
 @Service
 public class ExamStructureServiceImpl implements ExamStructureService {
+	
     @Autowired
     private ExamStructureRepository examStructureRepository;
+    
+    @Autowired
+    private JdbcTemplate jdbcTemplate;
+
+	@Override
+	public Page<ExamStructureInfo> getExamStructureList(ExamStructureQuery query) {
+		Check.isNull(query, "查询参数不能为空!");
+		Check.isEmpty(query.getOrgId(), "学校机构不能为空");
+		//查询条件
+		SearchBuilder searches = new SearchBuilder();
+		searches.eq("orgId", query.getOrgId());
+		if(query.getExamId() != null){
+			searches.eq("examId", query.getExamId());
+		}
+		Specification<ExamStructure> spec = SpecUtils.buildSearchers(ExamStructure.class, searches.build());
+		//排序条件
+		OrderBuilder orders = new OrderBuilder().desc("id");
+		//分页条件
+        Pageable pageable = SpecUtils.buildPageable(query.getPageNo(), query.getPageSize(), orders.build());
+        Page<ExamStructure> page = examStructureRepository.findAll(spec, pageable);
+		return ExamStructureConvert.ofPage(page);
+	}
+
+	@Override
+	public void saveExamStructure(ExamStructureInfo info) {
+		ExamStructure entity = ExamStructureConvert.of(info);
+		examStructureRepository.save(entity);
+	}
+
+	@Override
+	public void deleteExamStructure(List<Long> ids) {
+		if(ids != null && ids.size()>0){
+			for(Long id:ids){
+				examStructureRepository.delete(id);
+			}
+		}
+	}
+
+	@Override
+	public void copyExamStructure(ExamStructureInfo info) {
+		//数据校验
+		Check.isNull(info.getOrgId(), "被复用的机构id不能为空");
+		Check.isNull(info.getExamId(), "被复用的考试id不能为空");
+		Check.isNull(info.getNewOrgId(), "复用后的机构id不能为空");
+		Check.isNull(info.getExamId(), "复用后的考试id不能为空");
+		//首先查询要复用  导出结构设置信息
+		ExamStructure examStructure = examStructureRepository.findByExamIdAndOrgId(info.getExamId(), info.getOrgId());
+		if(examStructure == null){
+			throw new StatusException(Constants.PRT_CODE_500, "复用导出结构不存在");
+		}
+		ExamStructure newExamStructure = examStructureRepository.findByExamIdAndOrgId(info.getNewExamId(), info.getNewOrgId());
+		if(newExamStructure != null){
+			throw new StatusException(Constants.PRT_CODE_500, "该场考试的导出结构已经存在,不能复用");
+		}
+		examStructure.setId(null);
+		examStructure.setExamId(info.getNewExamId());
+		examStructure.setExamName(info.getNewExamName());
+		examStructure.setId(info.getNewOrgId());
+		examStructure.setOrgName(info.getNewOrgName());
+		examStructureRepository.save(examStructure);
+	}
+
+	@Override
+	public void syncExamStructureExamName(Long examId, String examName) {
+		String updateSql = String.format("UPDATE ec_prt_exam_structure SET exam_name = '%s' WHERE exam_id = %s", examName,examId);
+		jdbcTemplate.update(updateSql);
+	}
 
 }