|
|
@@ -1240,7 +1240,7 @@ public class HealthReportService {
|
|
|
|
|
|
// 2. 重算旧成员维度(如果原来有绑定)
|
|
|
if (oldSubjectId != null) {
|
|
|
- dimensionScoreService.refreshFromGutReport(oldSubjectId, reportId);
|
|
|
+ dimensionScoreService.rebuildFromMemberReports(oldSubjectId);
|
|
|
foodRecommendService.recalculateForUser(oldSubjectId);
|
|
|
log.info("已重算旧归属成员 {} 的五维能量与食材推荐", oldSubjectId);
|
|
|
}
|
|
|
@@ -1262,6 +1262,24 @@ public class HealthReportService {
|
|
|
* @param familyId 家庭ID
|
|
|
* @return 未绑定归属的报告列表
|
|
|
*/
|
|
|
+ /**
|
|
|
+ * 获取严格绑定到该成员的有效报告(不含 subject_id 为空的未绑定报告)。
|
|
|
+ * 用于重建 REPORT 来源维度分——与 getMemberReports 语义不同,
|
|
|
+ * 后者会带出 user_id 匹配的未绑定报告,不适合参与维度分派生。
|
|
|
+ */
|
|
|
+ public List<HealthReport> getMemberBoundReports(Long memberId) {
|
|
|
+ if (memberId == null) {
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+ return healthReportMapper.selectList(
|
|
|
+ new LambdaQueryWrapper<HealthReport>()
|
|
|
+ .eq(HealthReport::getSubjectId, memberId)
|
|
|
+ .eq(HealthReport::getStatus, "active")
|
|
|
+ .orderByAsc(HealthReport::getReportDate)
|
|
|
+ .orderByAsc(HealthReport::getId)
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
public List<HealthReport> getUnlinkedReports(Long familyId) {
|
|
|
return healthReportMapper.selectList(
|
|
|
new LambdaQueryWrapper<HealthReport>()
|
|
|
@@ -1808,7 +1826,7 @@ public class HealthReportService {
|
|
|
// 若有旧成员(解绑或切换成员),也需重算旧成员的维度
|
|
|
if (oldSubjectId != null && !oldSubjectId.equals(subjectId)) {
|
|
|
try {
|
|
|
- dimensionScoreService.refreshFromGutReport(oldSubjectId, reportId);
|
|
|
+ dimensionScoreService.rebuildFromMemberReports(oldSubjectId);
|
|
|
log.info("编辑后已重算旧成员{}的7维健康评分(成员已切换)", oldSubjectId);
|
|
|
} catch (Exception e) {
|
|
|
log.warn("刷新旧成员{}健康评分失败: {}", oldSubjectId, e.getMessage());
|
|
|
@@ -1822,7 +1840,7 @@ public class HealthReportService {
|
|
|
} else if (subjectId == null && oldSubjectId != null) {
|
|
|
// 用户主动解绑(subjectId=null),重算旧成员(移除该报告的影响)
|
|
|
try {
|
|
|
- dimensionScoreService.refreshFromGutReport(oldSubjectId, reportId);
|
|
|
+ dimensionScoreService.rebuildFromMemberReports(oldSubjectId);
|
|
|
log.info("解绑成员后已重算旧成员{}的7维健康评分", oldSubjectId);
|
|
|
} catch (Exception e) {
|
|
|
log.warn("刷新旧成员{}健康评分失败: {}", oldSubjectId, e.getMessage());
|