Browse Source

fix(backend): 评分明细完整闭环(FINAL写入+异常回滚+测试覆盖)

wangkangyjy 1 tuần trước cách đây
mục cha
commit
f3079b3115

+ 2 - 1
backend/src/main/java/com/yimeng/okr/service/PerformanceService.java

@@ -141,6 +141,7 @@ public class PerformanceService {
         finalScore.setStatus(STATUS_PENDING_PUBLISH);
         finalScore.setCommentsJson(commentsJson);
         scoreMapper.insert(finalScore);
+        writeScoreItems(finalScore.getId(), commentsJson);
 
         return score;
     }
@@ -387,7 +388,7 @@ public class PerformanceService {
                 }
             }
         } catch (Exception e) {
-            log.warn("Failed to write structured score items for score_id={}: {}", scoreId, e.getMessage());
+            throw new RuntimeException("结构化评分明细写入失败(scoreId=" + scoreId + "): " + e.getMessage(), e);
         }
     }
 

+ 15 - 0
backend/src/test/java/com/yimeng/okr/service/PerformanceServiceTest.java

@@ -9,6 +9,7 @@ import com.yimeng.okr.enums.ScoreType;
 import com.yimeng.okr.exception.BusinessException;
 import com.yimeng.okr.event.NotificationEvent;
 import com.yimeng.okr.mapper.*;
+import com.yimeng.okr.entity.PerformanceScoreItem;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.ArgumentCaptor;
@@ -29,6 +30,7 @@ class PerformanceServiceTest {
     @Mock AssessmentPeriodMapper periodMapper;
     @Mock SysUserMapper userMapper;
     @Mock AuditCorrectionMapper auditCorrectionMapper;
+    @Mock PerformanceScoreItemMapper scoreItemMapper;
     @Mock OkrService okrService;
     @Mock AuthorizationService authorizationService;
     @Mock ApplicationEventPublisher publisher;
@@ -270,4 +272,17 @@ class PerformanceServiceTest {
         score.setTotal(80.0);
         return score;
     }
+
+    @Test
+    void submitSelfScoreWritesStructuredItems() {
+        when(periodMapper.selectById(1L)).thenReturn(period());
+        when(userMapper.selectById(2L)).thenReturn(user(2L, null));
+        when(scoreMapper.insert(any())).thenReturn(1);
+
+        String json = "{\"krScores\":[{\"krId\":1,\"title\":\"KR1\",\"score\":0.8}],"
+                + "\"dimensions\":[{\"id\":1,\"name\":\"质量\",\"maxScore\":10,\"score\":8}]}";
+        performanceService.submitSelfScore(1L, 2L, 50.0, 30.0, 0.0, 0.0, json);
+
+        verify(scoreItemMapper, times(2)).insert(any(PerformanceScoreItem.class));
+    }
 }