Эх сурвалжийг харах

项目计算、分数段修改接口

xiatian 6 жил өмнө
parent
commit
891a2ec1ca

+ 19 - 0
examcloud-core-reports-api-provider/src/main/java/cn/com/qmth/examcloud/core/reports/api/controller/ExamCourseDataReportController.java

@@ -0,0 +1,19 @@
+package cn.com.qmth.examcloud.core.reports.api.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import cn.com.qmth.examcloud.core.reports.service.ExamCourseDataReportService;
+import cn.com.qmth.examcloud.web.support.ControllerSupport;
+import io.swagger.annotations.Api;
+
+@RestController
+@Api(tags = "考试课程报表")
+@RequestMapping("${$rmp.ctr.reports}/" + "examCourseDataReport")
+public class ExamCourseDataReportController extends ControllerSupport {
+	@Autowired
+	private ExamCourseDataReportService examCourseDataReportService;
+	
+
+}

+ 18 - 0
examcloud-core-reports-api-provider/src/main/java/cn/com/qmth/examcloud/core/reports/api/controller/ExamOrgReportController.java

@@ -0,0 +1,18 @@
+package cn.com.qmth.examcloud.core.reports.api.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import cn.com.qmth.examcloud.core.reports.service.ExamOrgReportService;
+import cn.com.qmth.examcloud.web.support.ControllerSupport;
+import io.swagger.annotations.Api;
+
+@RestController
+@Api(tags = "考试-学习中心报表")
+@RequestMapping("${$rmp.ctr.reports}/" + "examOrgReport")
+public class ExamOrgReportController extends ControllerSupport {
+	@Autowired
+	private ExamOrgReportService examOrgReportService;
+	
+}

+ 14 - 1
examcloud-core-reports-api-provider/src/main/java/cn/com/qmth/examcloud/core/reports/api/controller/ProjectController.java

@@ -18,6 +18,7 @@ import cn.com.qmth.examcloud.core.reports.base.bean.AddProjectReq;
 import cn.com.qmth.examcloud.core.reports.base.bean.ProjectBean;
 import cn.com.qmth.examcloud.core.reports.base.bean.QueryProjectPageReq;
 import cn.com.qmth.examcloud.core.reports.base.bean.UpdateProjectReq;
+import cn.com.qmth.examcloud.core.reports.base.bean.UpdateProjectScoreReq;
 import cn.com.qmth.examcloud.core.reports.base.enums.DataOrigin;
 import cn.com.qmth.examcloud.core.reports.service.ProjectService;
 import cn.com.qmth.examcloud.web.support.ControllerSupport;
@@ -64,5 +65,17 @@ public class ProjectController extends ControllerSupport {
     	User user=getAccessUser();
     	return projectService.queryPage(req, pageNo, pageSize,user.getRootOrgId());
     }
-
+    @PostMapping("/compute/{id}")
+    @ApiOperation(value = "开始计算")
+    public void addReportsCompute(@PathVariable Long id) {
+    	User user=getAccessUser();
+        projectService.addReportsCompute(id, user.getRootOrgId());
+    }
+    @PostMapping("/updateScore")
+    @ApiOperation(value = "修改项目分数")
+    public void updateScore(@RequestBody @Valid UpdateProjectScoreReq req) {
+    	User user=getAccessUser();
+        projectService.updateScore(req,user.getRootOrgId());
+    }
+    
 }

+ 56 - 0
examcloud-core-reports-base/src/main/java/cn/com/qmth/examcloud/core/reports/base/bean/UpdateProjectScoreReq.java

@@ -0,0 +1,56 @@
+package cn.com.qmth.examcloud.core.reports.base.bean;
+
+import java.util.List;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+import cn.com.qmth.examcloud.api.commons.exchange.JsonSerializable;
+import io.swagger.annotations.ApiModelProperty;
+
+public class UpdateProjectScoreReq implements JsonSerializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 5900413305905814904L;
+	@NotNull(message = "项目id不能为空")
+	@ApiModelProperty(value = "项目id")
+	private Long id;
+	@NotNull(message = "项目满分分数不能为空")
+	@ApiModelProperty(value = "项目满分分数")
+	private Double totalScore;
+	@NotNull(message = "项目及格分数不能为空")
+	@ApiModelProperty(value = "项目及格分数")
+	private Double passScore;
+	@NotEmpty(message = "项目分段分数不能为空")
+	@ApiModelProperty(value = "项目分段分数")
+	private List<Double> scores;
+	public Long getId() {
+		return id;
+	}
+	public void setId(Long id) {
+		this.id = id;
+	}
+	public Double getTotalScore() {
+		return totalScore;
+	}
+	public void setTotalScore(Double totalScore) {
+		this.totalScore = totalScore;
+	}
+	public List<Double> getScores() {
+		return scores;
+	}
+	public void setScores(List<Double> scores) {
+		this.scores = scores;
+	}
+	public Double getPassScore() {
+		return passScore;
+	}
+	public void setPassScore(Double passScore) {
+		this.passScore = passScore;
+	}
+	
+	
+
+}

+ 2 - 1
examcloud-core-reports-base/src/main/java/cn/com/qmth/examcloud/core/reports/base/enums/ReportStatus.java

@@ -1,7 +1,8 @@
 package cn.com.qmth.examcloud.core.reports.base.enums;
 
 public enum ReportStatus {
-	NONE(" 未计算"),
+	NONE("未计算"),
+	WAITCOMPUTE("待计算"), 
 	COMPUTING("计算中"), 
 	SUCCESS("计算成功"),
 	FAIL("计算失败"),

+ 5 - 0
examcloud-core-reports-service/pom.xml

@@ -22,6 +22,11 @@
             <artifactId>examcloud-core-reports-api-client</artifactId>
             <version>${examcloud.version}</version>
         </dependency>
+        <dependency>
+            <groupId>cn.com.qmth.examcloud.rpc</groupId>
+            <artifactId>examcloud-task-api-client</artifactId>
+            <version>${examcloud.version}</version>
+        </dependency>
         <dependency>
             <groupId>cn.com.qmth.examcloud.rpc</groupId>
             <artifactId>examcloud-global-api</artifactId>

+ 3 - 1
examcloud-core-reports-service/src/main/java/cn/com/qmth/examcloud/core/reports/service/ProjectService.java

@@ -8,6 +8,7 @@ import cn.com.qmth.examcloud.core.reports.base.bean.AddProjectReq;
 import cn.com.qmth.examcloud.core.reports.base.bean.ProjectBean;
 import cn.com.qmth.examcloud.core.reports.base.bean.QueryProjectPageReq;
 import cn.com.qmth.examcloud.core.reports.base.bean.UpdateProjectReq;
+import cn.com.qmth.examcloud.core.reports.base.bean.UpdateProjectScoreReq;
 
 public interface ProjectService {
 
@@ -16,6 +17,7 @@ public interface ProjectService {
 	public void updateEnable(String ids,Boolean enable,Long rootOrgId);
 	public PageInfo<ProjectBean> queryPage(QueryProjectPageReq req,Integer pageNo,Integer pageSize,Long rootOrgId);
 	public void updateProjectStatus(UpdateProjectStatusReq req) ;
-	
+	public void addReportsCompute(Long id,Long rootOrgId) ;
 	public ProjectInfoBean getProjectInfoBean(GetProjectInfoBeanReq req);
+	public void updateScore(UpdateProjectScoreReq req,Long rootOrgId);
 }

+ 92 - 1
examcloud-core-reports-service/src/main/java/cn/com/qmth/examcloud/core/reports/service/impl/ProjectServiceImpl.java

@@ -2,7 +2,10 @@ package cn.com.qmth.examcloud.core.reports.service.impl;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 import javax.persistence.criteria.Predicate;
@@ -29,19 +32,23 @@ import cn.com.qmth.examcloud.core.reports.base.bean.AddProjectReq;
 import cn.com.qmth.examcloud.core.reports.base.bean.ProjectBean;
 import cn.com.qmth.examcloud.core.reports.base.bean.QueryProjectPageReq;
 import cn.com.qmth.examcloud.core.reports.base.bean.UpdateProjectReq;
+import cn.com.qmth.examcloud.core.reports.base.bean.UpdateProjectScoreReq;
 import cn.com.qmth.examcloud.core.reports.base.enums.AnalyseType;
 import cn.com.qmth.examcloud.core.reports.base.enums.DataOrigin;
 import cn.com.qmth.examcloud.core.reports.base.enums.ReportStatus;
 import cn.com.qmth.examcloud.core.reports.dao.ProjectRepo;
 import cn.com.qmth.examcloud.core.reports.dao.entity.ProjectEntity;
 import cn.com.qmth.examcloud.core.reports.service.ProjectService;
+import cn.com.qmth.examcloud.task.api.ReportsComputeCloudService;
+import cn.com.qmth.examcloud.task.api.request.AddReportsComputeReq;
 import cn.com.qmth.examcloud.web.helpers.GlobalHelper;
 
 @Service
 public class ProjectServiceImpl implements ProjectService {
 	@Autowired
 	private ProjectRepo projectRepo;
-
+	@Autowired
+	private ReportsComputeCloudService reportsComputeCloudService;
 	@Transactional
 	@Override
 	public Long addProject(AddProjectReq req, Long rootOrgId) {
@@ -182,4 +189,88 @@ public class ProjectServiceImpl implements ProjectService {
 		bean.setPartitionDetails(partitionDetails);
 		return bean;
 	}
+
+	@Transactional
+	@Override
+	public void addReportsCompute(Long id, Long rootOrgId) {
+		ProjectEntity pe = GlobalHelper.getEntity(projectRepo,id, ProjectEntity.class);
+		if (pe == null) {
+			throw new StatusException("1000021", "项目不存在");
+		}
+		if (!rootOrgId.equals(pe.getRootOrgId())) {
+			throw new StatusException("1000022", "非法操作");
+		}
+		if(!pe.getEnable()) {
+			throw new StatusException("1000023", "项目已禁用");
+		}
+		if(pe.getReportStatus().equals(ReportStatus.WAITCOMPUTE)) {
+			throw new StatusException("1000024", "项目已处于待计算状态");
+		}
+		if(pe.getReportStatus().equals(ReportStatus.COMPUTING)) {
+			throw new StatusException("1000025", "项目已处于计算状态");
+		}
+		pe.setReportStatus(ReportStatus.WAITCOMPUTE);
+		projectRepo.saveAndFlush(pe);
+		AddReportsComputeReq req=new AddReportsComputeReq();
+		req.setProjectId(id);
+		req.setRootOrgId(rootOrgId);
+		reportsComputeCloudService.addReportsCompute(req);
+	}
+	@Transactional
+	@Override
+	public void updateScore(UpdateProjectScoreReq req,Long rootOrgId) {
+		Long id=req.getId();
+		ProjectEntity pe = GlobalHelper.getEntity(projectRepo,id, ProjectEntity.class);
+		if (pe == null) {
+			throw new StatusException("1000031", "项目不存在");
+		}
+		if (!rootOrgId.equals(pe.getRootOrgId())) {
+			throw new StatusException("1000032", "非法操作");
+		}
+		if(!pe.getEnable()) {
+			throw new StatusException("1000033", "项目已禁用");
+		}
+		if(pe.getReportStatus().equals(ReportStatus.WAITCOMPUTE)) {
+			throw new StatusException("1000034", "项目已处于待计算状态");
+		}
+		if(pe.getReportStatus().equals(ReportStatus.COMPUTING)) {
+			throw new StatusException("1000035", "项目已处于计算状态");
+		}
+		Double passScore=req.getPassScore();
+		Double totalScore=req.getTotalScore();
+		if(passScore<=0) {
+			throw new StatusException("1000036", "及格分数必须大于0");
+		}
+		if(totalScore<=0) {
+			throw new StatusException("1000037", "满分分数必须大于0");
+		}
+		if(passScore>totalScore) {
+			throw new StatusException("1000038", "及格分数不能大于满分分数");
+		}
+		List<Double> scores=req.getScores();
+		Set<Double> set=new HashSet<Double>();
+		for(Double d:scores) {
+			set.add(d);
+		}
+		if(set.size()!=scores.size()) {
+			throw new StatusException("1000039", "分段分数不能相同");
+		}
+		Collections.sort(scores);
+		if(scores.get(0)<=0) {
+			throw new StatusException("1000040", "第一个分段分数必须大于0");
+		}
+		if(scores.get(scores.size()-1)>=totalScore) {
+			throw new StatusException("1000041", "最后一个分段分数必须小于满分分数");
+		}
+		pe.setPassScore(passScore);
+		pe.setTotalScore(totalScore);
+		pe.setPartitionCount(scores.size());
+		pe.setPartitionDetails(StringUtils.join(scores.toArray(), ","));
+		pe.setReportStatus(ReportStatus.WAITCOMPUTE);
+		projectRepo.saveAndFlush(pe);
+		AddReportsComputeReq areq=new AddReportsComputeReq();
+		areq.setProjectId(id);
+		areq.setRootOrgId(rootOrgId);
+		reportsComputeCloudService.addReportsCompute(areq);
+	}
 }