From b6a7af9e51ea9729d1c891073f46b84b6197ebc2 Mon Sep 17 00:00:00 2001 From: let5sne Date: Mon, 20 Jul 2026 13:16:18 +0800 Subject: [PATCH] fix(backend): return canonical extPartyId in practice review detail The reviewDetail query referenced a.trainee_name without declaring the table alias, which 500s whenever org-sync display fields are enabled, and the mobile payload never exposed extPartyId, so the supervisor review pages could not resolve organization member names. --- .../aihr/controller/AihrMobileController.java | 1 + .../org/dromara/aihr/domain/AihrPracticeDto.java | 3 ++- .../aihr/service/AihrPracticeSeedService.java | 15 +++++++++++---- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/controller/AihrMobileController.java b/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/controller/AihrMobileController.java index b4bb2fb5..71616860 100644 --- a/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/controller/AihrMobileController.java +++ b/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/controller/AihrMobileController.java @@ -433,6 +433,7 @@ public class AihrMobileController { data.put("aiComment", maskSensitiveText(detail.aiComment())); data.put("reviewAdvice", maskSensitiveText(detail.reviewAdvice())); data.put("incentivePoint", detail.incentivePoint()); + data.put("extPartyId", detail.extPartyId()); data.put("scoreItems", detail.scoreItems().stream().map(item -> Map.of( "label", item.label(), "value", item.value(), diff --git a/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/domain/AihrPracticeDto.java b/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/domain/AihrPracticeDto.java index 397535cd..d5274789 100644 --- a/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/domain/AihrPracticeDto.java +++ b/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/domain/AihrPracticeDto.java @@ -229,7 +229,8 @@ public final class AihrPracticeDto { Integer incentivePoint, List scoreItems, List dialogue, - List annotations + List annotations, + String extPartyId ) { } diff --git a/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrPracticeSeedService.java b/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrPracticeSeedService.java index f116b5b0..2bb3ed18 100644 --- a/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrPracticeSeedService.java +++ b/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrPracticeSeedService.java @@ -1504,14 +1504,20 @@ public class AihrPracticeSeedService { return null; } String nameExpression = !storeDisplayFields ? "'员工'" : "a.trainee_name"; + boolean hasOrgSnapshot = orgSnapshotTableExists(); + boolean hasPhone = hasOrgSnapshot && orgSnapshotColumnExists("person_phone"); + String identityExpression = hasOrgSnapshot + ? teamCanonicalIdentityExpression("a", hasPhone) + : "a.ext_party_id"; List rows = jdbcTemplate.query(""" SELECT id, session_id, finished_time, %s AS trainee_name, scenario_id, scenario_name, total_score, status, summary, mentor_rewrite, ai_comment, review_advice, incentive_point, dim_task_completion, dim_response_timeliness, response_latency_ms, - dim_compliance, dim_emotion, dim_communication, dim_marketing, dialogue_json, annotations_json - FROM aihr_practice_session + dim_compliance, dim_emotion, dim_communication, dim_marketing, dialogue_json, annotations_json, + %s AS ext_party_id + FROM aihr_practice_session a WHERE tenant_id = ? AND mode = 'mobile' AND id = ? - """.formatted(nameExpression), this::mapReviewDetail, tenantId(), id); + """.formatted(nameExpression, identityExpression), this::mapReviewDetail, tenantId(), id); return rows.isEmpty() ? null : rows.get(0); } @@ -3770,7 +3776,8 @@ public class AihrPracticeSeedService { rs.getObject("incentive_point") == null ? null : rs.getInt("incentive_point"), scoreItems(rs), dialogue, - readAnnotations(rs.getString("annotations_json"), dialogue, scenario) + readAnnotations(rs.getString("annotations_json"), dialogue, scenario), + rs.getString("ext_party_id") ); }