wangwei 6 年 前
コミット
abd914cd60

+ 66 - 31
examcloud-core-examwork-api-provider/src/main/java/cn/com/qmth/examcloud/core/examwork/api/controller/ExamController.java

@@ -43,6 +43,10 @@ import cn.com.qmth.examcloud.commons.base.util.JsonUtil;
 import cn.com.qmth.examcloud.commons.web.redis.RedisClient;
 import cn.com.qmth.examcloud.commons.web.security.bean.User;
 import cn.com.qmth.examcloud.commons.web.support.ControllerSupport;
+import cn.com.qmth.examcloud.core.basic.api.OrgCloudService;
+import cn.com.qmth.examcloud.core.basic.api.bean.OrgBean;
+import cn.com.qmth.examcloud.core.basic.api.request.GetOrgReq;
+import cn.com.qmth.examcloud.core.basic.api.response.GetOrgResp;
 import cn.com.qmth.examcloud.core.examwork.api.controller.bean.CourseGroupDomain;
 import cn.com.qmth.examcloud.core.examwork.api.controller.bean.ExamDomain;
 import cn.com.qmth.examcloud.core.examwork.api.controller.bean.ExamOrgDomain;
@@ -60,6 +64,7 @@ import cn.com.qmth.examcloud.core.examwork.dao.entity.ExamOrgEntity;
 import cn.com.qmth.examcloud.core.examwork.dao.entity.ExamPropertyEntity;
 import cn.com.qmth.examcloud.core.examwork.dao.enums.ExamType;
 import cn.com.qmth.examcloud.core.examwork.service.bean.ExamInfo;
+import cn.com.qmth.examcloud.core.examwork.service.bean.ExamOrgInfo;
 import cn.com.qmth.examcloud.core.examwork.service.impl.ExamServiceImpl;
 import cn.com.qmth.examcloud.core.examwork.service.impl.ExamStudentServiceImpl;
 import io.swagger.annotations.ApiOperation;
@@ -103,6 +108,9 @@ public class ExamController extends ControllerSupport {
 	@Autowired
 	CourseGroupRelationRepo courseGroupRelationRepo;
 
+	@Autowired
+	OrgCloudService orgCloudService;
+
 	/**
 	 * 方法注释
 	 *
@@ -268,32 +276,7 @@ public class ExamController extends ControllerSupport {
 	@ApiOperation(value = "新增考试批次", notes = "新增")
 	@PostMapping()
 	public ExamEntity addExam(@RequestBody ExamDomain domain) {
-		trim(domain, true);
-
-		User accessUser = getAccessUser();
-
-		ExamInfo examInfo = new ExamInfo();
-
-		examInfo.setBeginTime(domain.getBeginTime());
-		examInfo.setDuration(domain.getDuration());
-		examInfo.setEnable(domain.getEnable());
-		examInfo.setEndTime(domain.getEndTime());
-		examInfo.setExamTimes(domain.getExamTimes());
-		examInfo.setExamType(domain.getExamType());
-		examInfo.setId(domain.getId());
-		examInfo.setName(domain.getName());
-		examInfo.setRemark(domain.getRemark());
-		examInfo.setRootOrgId(accessUser.getRootOrgId());
-
-		Map<String, String> properties = domain.getProperties();
-		if (null == properties) {
-			properties = Maps.newHashMap();
-		}
-		examInfo.setProperties(properties);
-
-		ExamEntity saved = examService.saveExam(examInfo);
-
-		return saved;
+		return saveExam(domain);
 	}
 
 	/**
@@ -306,6 +289,17 @@ public class ExamController extends ControllerSupport {
 	@ApiOperation(value = "更新考试批次", notes = "更新")
 	@PutMapping()
 	public ExamEntity updateExam(@RequestBody ExamDomain domain) {
+		return saveExam(domain);
+	}
+
+	/**
+	 * 方法注释
+	 *
+	 * @author WANGWEI
+	 * @param domain
+	 * @return
+	 */
+	private ExamEntity saveExam(ExamDomain domain) {
 		trim(domain, true);
 
 		User accessUser = getAccessUser();
@@ -608,9 +602,8 @@ public class ExamController extends ControllerSupport {
 	 */
 	@ApiOperation(value = "新增考试相关的学习中心设置", notes = "")
 	@PostMapping("examOrg")
-	public ExamOrgEntity addExamOrg(@RequestBody ExamOrgEntity examOrg) {
-		ExamOrgEntity ret = examOrgRepo.save(examOrg);
-		return ret;
+	public ExamOrgEntity addExamOrg(@RequestBody ExamOrgDomain domain) {
+		return saveExamOrg(domain);
 	}
 
 	/**
@@ -622,8 +615,50 @@ public class ExamController extends ControllerSupport {
 	 */
 	@ApiOperation(value = "更新考试相关的学习中心设置", notes = "")
 	@PutMapping("examOrg")
-	public ExamOrgEntity updateExamOrg(@RequestBody ExamOrgEntity examOrg) {
-		ExamOrgEntity ret = examOrgRepo.save(examOrg);
+	public ExamOrgEntity updateExamOrg(@RequestBody ExamOrgDomain domain) {
+		return saveExamOrg(domain);
+	}
+
+	/**
+	 * 方法注释
+	 *
+	 * @author WANGWEI
+	 * @param domain
+	 * @return
+	 */
+	private ExamOrgEntity saveExamOrg(ExamOrgDomain domain) {
+		Long examId = domain.getExamId();
+
+		ExamEntity examEntity = examRepo.findOne(examId);
+		if (null == examEntity) {
+			throw new StatusException("E-001250", "examId is wrong");
+		}
+		validateRootOrgIsolation(examEntity.getRootOrgId());
+
+		Long orgId = domain.getOrgId();
+
+		GetOrgReq getOrgReq = new GetOrgReq();
+		getOrgReq.setOrgId(orgId);
+		GetOrgResp getOrgResp = orgCloudService.getOrg(getOrgReq);
+		OrgBean org = getOrgResp.getOrg();
+		org.getRootId();
+		validateRootOrgIsolation(org.getRootId());
+
+		User accessUser = getAccessUser();
+		ExamOrgInfo info = new ExamOrgInfo();
+		info.setBeginTime(domain.getBeginTime());
+		info.setEndTime(domain.getEndTime());
+		info.setExamId(domain.getExamId());
+		info.setOrgId(domain.getOrgId());
+		info.setRootOrgId(accessUser.getRootOrgId());
+
+		Map<String, String> properties = domain.getProperties();
+		if (null == properties) {
+			properties = Maps.newHashMap();
+		}
+		info.setProperties(domain.getProperties());
+
+		ExamOrgEntity ret = examService.saveExamOrg(info);
 		return ret;
 	}
 

+ 6 - 8
examcloud-core-examwork-api-provider/src/main/java/cn/com/qmth/examcloud/core/examwork/api/controller/bean/ExamOrgDomain.java

@@ -1,6 +1,7 @@
 package cn.com.qmth.examcloud.core.examwork.api.controller.bean;
 
 import java.util.Date;
+import java.util.Map;
 
 import cn.com.qmth.examcloud.commons.web.cloud.api.JsonSerializable;
 
@@ -42,10 +43,7 @@ public class ExamOrgDomain implements JsonSerializable {
 	 */
 	private Date endTime;
 
-	/**
-	 * 是否允许上传附件(离线考试)
-	 */
-	private Boolean canUploadAttachment;
+	private Map<String, String> properties;
 
 	public Long getId() {
 		return id;
@@ -95,12 +93,12 @@ public class ExamOrgDomain implements JsonSerializable {
 		this.endTime = endTime;
 	}
 
-	public Boolean getCanUploadAttachment() {
-		return canUploadAttachment;
+	public Map<String, String> getProperties() {
+		return properties;
 	}
 
-	public void setCanUploadAttachment(Boolean canUploadAttachment) {
-		this.canUploadAttachment = canUploadAttachment;
+	public void setProperties(Map<String, String> properties) {
+		this.properties = properties;
 	}
 
 }

+ 8 - 2
examcloud-core-examwork-dao/src/main/java/cn/com/qmth/examcloud/core/examwork/dao/ExamOrgPropertyRepo.java

@@ -5,14 +5,20 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.repository.query.QueryByExampleExecutor;
 
 import cn.com.qmth.examcloud.core.examwork.dao.entity.ExamOrgPropertyEntity;
-import cn.com.qmth.examcloud.core.examwork.dao.entity.ExamPropertyEntity;
 
+/**
+ * 类注释
+ *
+ * @author WANGWEI
+ * @date 2018年8月20日
+ * @Copyright (c) 2018-? http://qmth.com.cn All Rights Reserved.
+ */
 public interface ExamOrgPropertyRepo
 		extends
 			JpaRepository<ExamOrgPropertyEntity, Long>,
 			QueryByExampleExecutor<ExamOrgPropertyEntity>,
 			JpaSpecificationExecutor<ExamOrgPropertyEntity> {
 
-	ExamPropertyEntity findByexamIdAndOrgIdAndKeyId(Long examId, Long orgId, Long keyId);
+	ExamOrgPropertyEntity findByexamIdAndOrgIdAndKeyId(Long examId, Long orgId, Long keyId);
 
 }

+ 11 - 0
examcloud-core-examwork-service/src/main/java/cn/com/qmth/examcloud/core/examwork/service/ExamService.java

@@ -1,7 +1,9 @@
 package cn.com.qmth.examcloud.core.examwork.service;
 
 import cn.com.qmth.examcloud.core.examwork.dao.entity.ExamEntity;
+import cn.com.qmth.examcloud.core.examwork.dao.entity.ExamOrgEntity;
 import cn.com.qmth.examcloud.core.examwork.service.bean.ExamInfo;
+import cn.com.qmth.examcloud.core.examwork.service.bean.ExamOrgInfo;
 
 /**
  * 类注释
@@ -21,4 +23,13 @@ public interface ExamService {
 	 */
 	ExamEntity saveExam(ExamInfo examInfo);
 
+	/**
+	 * 保存考试机构设置
+	 *
+	 * @author WANGWEI
+	 * @param examInfo
+	 * @return
+	 */
+	ExamOrgEntity saveExamOrg(ExamOrgInfo examInfo);
+
 }

+ 104 - 0
examcloud-core-examwork-service/src/main/java/cn/com/qmth/examcloud/core/examwork/service/bean/ExamOrgInfo.java

@@ -0,0 +1,104 @@
+package cn.com.qmth.examcloud.core.examwork.service.bean;
+
+import java.util.Date;
+import java.util.Map;
+
+import cn.com.qmth.examcloud.commons.web.cloud.api.JsonSerializable;
+
+/**
+ * 考试机构设置
+ *
+ * @author WANGWEI
+ * @date 2018年5月16日
+ * @Copyright (c) 2018-? http://qmth.com.cn All Rights Reserved.
+ */
+public class ExamOrgInfo implements JsonSerializable {
+
+	private static final long serialVersionUID = -3335725218626631530L;
+
+	private Long id;
+
+	/**
+	 * 考试ID
+	 */
+	private Long examId;
+
+	/**
+	 * 顶级机构ID
+	 */
+	private Long rootOrgId;
+
+	/**
+	 * 机构ID
+	 */
+	private Long orgId;
+
+	/**
+	 * 考试批次开始时间
+	 */
+	private Date beginTime;
+
+	/**
+	 * 考试批次结束时间
+	 */
+	private Date endTime;
+
+	private Map<String, String> properties;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Long getExamId() {
+		return examId;
+	}
+
+	public void setExamId(Long examId) {
+		this.examId = examId;
+	}
+
+	public Long getRootOrgId() {
+		return rootOrgId;
+	}
+
+	public void setRootOrgId(Long rootOrgId) {
+		this.rootOrgId = rootOrgId;
+	}
+
+	public Long getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(Long orgId) {
+		this.orgId = orgId;
+	}
+
+	public Date getBeginTime() {
+		return beginTime;
+	}
+
+	public void setBeginTime(Date beginTime) {
+		this.beginTime = beginTime;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
+	public Map<String, String> getProperties() {
+		return properties;
+	}
+
+	public void setProperties(Map<String, String> properties) {
+		this.properties = properties;
+	}
+
+}

+ 75 - 14
examcloud-core-examwork-service/src/main/java/cn/com/qmth/examcloud/core/examwork/service/impl/ExamServiceImpl.java

@@ -15,13 +15,17 @@ import com.google.common.collect.Maps;
 import cn.com.qmth.examcloud.commons.base.exception.StatusException;
 import cn.com.qmth.examcloud.core.basic.api.OrgCloudService;
 import cn.com.qmth.examcloud.core.examwork.base.enums.ExamProperty;
+import cn.com.qmth.examcloud.core.examwork.dao.ExamOrgPropertyRepo;
 import cn.com.qmth.examcloud.core.examwork.dao.ExamOrgRepo;
 import cn.com.qmth.examcloud.core.examwork.dao.ExamPropertyRepo;
 import cn.com.qmth.examcloud.core.examwork.dao.ExamRepo;
 import cn.com.qmth.examcloud.core.examwork.dao.entity.ExamEntity;
+import cn.com.qmth.examcloud.core.examwork.dao.entity.ExamOrgEntity;
+import cn.com.qmth.examcloud.core.examwork.dao.entity.ExamOrgPropertyEntity;
 import cn.com.qmth.examcloud.core.examwork.dao.entity.ExamPropertyEntity;
 import cn.com.qmth.examcloud.core.examwork.service.ExamService;
 import cn.com.qmth.examcloud.core.examwork.service.bean.ExamInfo;
+import cn.com.qmth.examcloud.core.examwork.service.bean.ExamOrgInfo;
 
 /**
  * 类注释
@@ -47,6 +51,9 @@ public class ExamServiceImpl implements ExamService {
 	@Autowired
 	ExamPropertyRepo examPropertyRepo;
 
+	@Autowired
+	ExamOrgPropertyRepo examOrgPropertyRepo;
+
 	/**
 	 * 删除考试批次
 	 * 
@@ -106,7 +113,46 @@ public class ExamServiceImpl implements ExamService {
 		exam.setRemark(examInfo.getRemark());
 		exam.setRootOrgId(examInfo.getRootOrgId());
 
+		if (null == exam.getExamType()) {
+			throw new StatusException("E-001005", "考试类型为空");
+		}
+
 		Map<String, String> properties = examInfo.getProperties();
+		Map<ExamProperty, String> map = checkAndGetExamProperties(properties);
+
+		ExamEntity findOne = examRepo.findByNameAndRootOrgId(exam.getName(), exam.getRootOrgId());
+		if (null != findOne && !findOne.getId().equals(exam.getId())) {
+			throw new StatusException("E-001001", "考试名称已存在");
+		}
+
+		ExamEntity saved = examRepo.save(exam);
+
+		for (Entry<ExamProperty, String> entry : map.entrySet()) {
+			ExamProperty prop = entry.getKey();
+			String value = entry.getValue();
+			ExamPropertyEntity entity = examPropertyRepo.findByexamIdAndKeyId(saved.getId(),
+					prop.getKeyId());
+			if (null == entity) {
+				entity = new ExamPropertyEntity();
+				entity.setExamId(saved.getId());
+				entity.setKeyId(prop.getKeyId());
+			}
+			entity.setValue(value);
+
+			examPropertyRepo.save(entity);
+		}
+
+		return saved;
+	}
+
+	/**
+	 * 方法注释
+	 *
+	 * @author WANGWEI
+	 * @param properties
+	 * @return
+	 */
+	private Map<ExamProperty, String> checkAndGetExamProperties(Map<String, String> properties) {
 		Map<ExamProperty, String> map = Maps.newHashMap();
 		for (Entry<String, String> entry : properties.entrySet()) {
 			String key = entry.getKey();
@@ -123,10 +169,6 @@ public class ExamServiceImpl implements ExamService {
 			map.put(ep, value.trim());
 		}
 
-		if (null == exam.getExamType()) {
-			throw new StatusException("E-001005", "考试类型为空");
-		}
-
 		String beforeExamRemark = map.get(ExamProperty.BEFORE_EXAM_REMARK);
 		if (null != beforeExamRemark && beforeExamRemark.length() > 250000) {
 			throw new StatusException("E-001002", "考前说明内容过大");
@@ -142,26 +184,45 @@ public class ExamServiceImpl implements ExamService {
 			throw new StatusException("E-001002", "作弊说明内容过大");
 		}
 
-		ExamEntity findOne = examRepo.findByNameAndRootOrgId(exam.getName(), exam.getRootOrgId());
-		if (null != findOne && !findOne.getId().equals(exam.getId())) {
-			throw new StatusException("E-001001", "考试名称已存在");
-		}
+		return map;
+	}
 
-		ExamEntity saved = examRepo.save(exam);
+	/*
+	 * 实现
+	 *
+	 * @author WANGWEI
+	 * 
+	 * @see
+	 * cn.com.qmth.examcloud.core.examwork.service.ExamService#saveExamOrg(cn.
+	 * com.qmth.examcloud.core.examwork.service.bean.ExamOrgInfo)
+	 */
+	@Override
+	public ExamOrgEntity saveExamOrg(ExamOrgInfo examInfo) {
+		ExamOrgEntity examOrgEntity = new ExamOrgEntity();
+		examOrgEntity.setId(examInfo.getId());
+		examOrgEntity.setBeginTime(examInfo.getBeginTime());
+		examOrgEntity.setEndTime(examInfo.getEndTime());
+		examOrgEntity.setId(examInfo.getId());
+		examOrgEntity.setRootOrgId(examInfo.getRootOrgId());
+
+		Map<ExamProperty, String> map = checkAndGetExamProperties(examInfo.getProperties());
+
+		ExamOrgEntity saved = examOrgRepo.save(examOrgEntity);
 
 		for (Entry<ExamProperty, String> entry : map.entrySet()) {
 			ExamProperty prop = entry.getKey();
 			String value = entry.getValue();
-			ExamPropertyEntity entity = examPropertyRepo.findByexamIdAndKeyId(saved.getId(),
-					prop.getKeyId());
+			ExamOrgPropertyEntity entity = examOrgPropertyRepo.findByexamIdAndOrgIdAndKeyId(
+					saved.getExamId(), saved.getOrgId(), prop.getKeyId());
 			if (null == entity) {
-				entity = new ExamPropertyEntity();
-				entity.setExamId(saved.getId());
+				entity = new ExamOrgPropertyEntity();
+				entity.setExamId(saved.getExamId());
+				entity.setOrgId(saved.getOrgId());
 				entity.setKeyId(prop.getKeyId());
 			}
 			entity.setValue(value);
 
-			examPropertyRepo.save(entity);
+			examOrgPropertyRepo.save(entity);
 		}
 
 		return saved;