ソースを参照

解决评卷员权重定档落档问题

ting.yin 6 年 前
コミット
84dbc4d0b5

+ 1 - 1
stmms-ms-accesscontrol/src/main/java/cn/com/qmth/stmms/ms/accesscontrol/api/AuthApi.java

@@ -36,7 +36,7 @@ public class AuthApi {
         MarkUser domain = null;
         if (loginConfig.getLoginName().equals(user.getLoginName()) &&
                 loginConfig.getPassword().equals(user.getPassword())) {
-            domain = new MarkUser(loginConfig.getLoginName(), loginConfig.getPassword(), null, null, "系统管理员", Role.ADMIN,0);
+            domain = new MarkUser(loginConfig.getLoginName(), loginConfig.getPassword(), null, null, "系统管理员", Role.ADMIN,null);
         } else {
 //            Work activeWork = workRepo.findByActiveTrue();
 //            String loginName = activeWork.getId() + "-" + user.getLoginName();

+ 2 - 2
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/UserApi.java

@@ -54,8 +54,8 @@ public class UserApi {
         if (user.getWeight()-domain.getWeight()!=0 && !markSubject.getStage().equals(MarkStage.INIT)) {
             throw new RuntimeException("请在分档阶段前修改权重");
         }
-        if(!(user.getWeight()>0)){
-        	throw new RuntimeException("评卷员权重必须大于0");
+        if(domain.getRole().equals(Role.MARKER)&&!(user.getWeight()>=1)){
+        	throw new RuntimeException("评卷员权重必须大于1");
         }
         domain.setName(user.getName());
         domain.setMarkRight(user.getMarkRight());

+ 4 - 4
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/user/MarkUser.java

@@ -36,7 +36,7 @@ public class MarkUser extends AbstractUser {
     @Column(name = "inspect_sx")
     private Boolean inspectSX;
     
-    private double weight;
+    private Double weight;
 
     public MarkUser(String loginName,
                     String password,
@@ -44,7 +44,7 @@ public class MarkUser extends AbstractUser {
                     Subject subject,
                     String name,
                     Role role,
-                    double weight) {
+                    Double weight) {
         super(loginName, password);
         this.workId = workId;
         this.subject = subject;
@@ -128,11 +128,11 @@ public class MarkUser extends AbstractUser {
         this.inspectSX = inspectSX;
     }
 
-	public double getWeight() {
+	public Double getWeight() {
 		return weight;
 	}
 
-	public void setWeight(double weight) {
+	public void setWeight(Double weight) {
 		this.weight = weight;
 	}
     

+ 14 - 2
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/DetermineLevelService.java

@@ -1,6 +1,7 @@
 package cn.com.qmth.stmms.ms.marking.service;
 
 import java.util.Comparator;
+import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.stream.Collectors;
@@ -69,8 +70,19 @@ public class DetermineLevelService {
             values[i] = level.getWeight()*markerWeight;
         }
         int avg = (int)Math.round(DoubleStream.of(values).average().orElse(0));
-        Optional<Level> levelOptional = levelRepo.findByWorkId(workId).stream().filter(o -> o.getMaxScore() >= avg && o.getMinScore() <= avg).findFirst();
-        Level level = levelOptional.orElseThrow(null);
+        List<Level> levels = levelRepo.findByWorkId(workId);
+        Optional<Level> levelOptional = levels.stream().filter(o -> o.getMaxScore() >= avg && o.getMinScore() <= avg).findFirst();
+        Level level = levelOptional.orElse(null);
+        if(level == null){
+        	levels = levels.stream().sorted(Comparator.comparing(Level::getMaxScore).reversed()).collect(Collectors.toList());
+        	if(avg>levels.get(0).getMaxScore()){
+        		level = levels.get(0);
+        	}
+        	levels = levels.stream().sorted(Comparator.comparing(Level::getMinScore)).collect(Collectors.toList());
+        	if(avg<levels.get(0).getMinScore()){
+        		level = levels.get(0);
+        	}
+        }
         return new DeterResult(level.getCode(),DeterType.WEIGHT);
     }
 }