|
@@ -1,17 +1,30 @@
|
|
|
package edu.math.diagnosis.service;
|
|
|
|
|
|
+import com.google.common.reflect.TypeToken;
|
|
|
+import edu.math.diagnosis.dao.PaperCommitRepo;
|
|
|
import edu.math.diagnosis.dao.PaperCountRepo;
|
|
|
import edu.math.diagnosis.entity.Paper;
|
|
|
+import edu.math.diagnosis.entity.PaperCommit;
|
|
|
import edu.math.diagnosis.entity.PaperCount;
|
|
|
+import edu.math.diagnosis.model.Answer;
|
|
|
+import edu.math.diagnosis.util.NumberUtil;
|
|
|
+import edu.math.diagnosis.util.ObjectUtil;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
+import java.util.LinkedHashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
|
|
|
@Service
|
|
|
public class PaperCountService {
|
|
|
|
|
|
@Resource
|
|
|
private PaperCountRepo paperCountRepo;
|
|
|
+ //防止循环依赖
|
|
|
+ @Resource
|
|
|
+ private PaperCommitRepo paperCommitRepo;
|
|
|
|
|
|
public PaperCount findByPid(Long pid) {
|
|
|
return paperCountRepo.findByPid(pid);
|
|
@@ -20,4 +33,44 @@ public class PaperCountService {
|
|
|
public PaperCount add(PaperCount paperCount) {
|
|
|
return paperCountRepo.save(paperCount);
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ @Transactional
|
|
|
+ public boolean updateAvgCommitTime(Paper paper) {
|
|
|
+ Map<Integer, Double> sum = new LinkedHashMap<>();
|
|
|
+ Map<Integer, Double> avg = new LinkedHashMap<>();
|
|
|
+ for (int i = 1; i <= paper.getQuestionNum(); i++) {
|
|
|
+ sum.put(i, 0d);
|
|
|
+ avg.put(i, 0d);
|
|
|
+ }
|
|
|
+
|
|
|
+ PaperCount count = findByPid(paper.getId());
|
|
|
+ if(count == null){
|
|
|
+ count = new PaperCount();
|
|
|
+ count.setPid(paper.getId());
|
|
|
+ }
|
|
|
+ List<PaperCommit> commits = paperCommitRepo.findByPid(paper.getId());
|
|
|
+ //把每人的成绩累加起来计算
|
|
|
+ //如果数据量比较大,可能需要改成直接将总时间存储到PaperCount
|
|
|
+ for (PaperCommit commit : commits) {
|
|
|
+ List<Answer> answers = ObjectUtil.getGson().fromJson(commit.getJsonAns(), new TypeToken<List<Answer>>() {
|
|
|
+ }.getType());
|
|
|
+ commit.setAnswers(answers);
|
|
|
+ //累加
|
|
|
+ for (Answer answer : answers) {
|
|
|
+// sum.compute(answer.getNumber(),c-> Double.valueOf(c+1));
|
|
|
+ sum.put(answer.getNumber(), sum.get(answer.getNumber()) + answer.getUseTime());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for (Map.Entry<Integer, Double> entry : sum.entrySet()) {
|
|
|
+ double a = commits.size() == 0 ? 0 : NumberUtil.format(sum.get(entry.getKey()) / commits.size());
|
|
|
+ avg.put(entry.getKey(), a);
|
|
|
+ }
|
|
|
+
|
|
|
+ count.setUseTimeAgvRate(ObjectUtil.object2Json(avg));
|
|
|
+ return add(count) != null;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|