|
@@ -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);
|
|
|
+ }
|
|
|
}
|