|
|
@@ -6,8 +6,10 @@ import com.etotem.cfc.dto.SelfCheckResultVO;
|
|
|
import com.etotem.cfc.dto.SubmitSelfCheckDTO;
|
|
|
import com.etotem.cfc.dto.WuxingSourcingAdviceVO;
|
|
|
import com.etotem.cfc.entity.FamilyMember;
|
|
|
+import com.etotem.cfc.entity.FiveDimensionScore;
|
|
|
import com.etotem.cfc.entity.FiveDimensionSelfCheck;
|
|
|
import com.etotem.cfc.mapper.FamilyMemberMapper;
|
|
|
+import com.etotem.cfc.mapper.FiveDimensionScoreMapper;
|
|
|
import com.etotem.cfc.mapper.FiveDimensionSelfCheckMapper;
|
|
|
import com.etotem.cfc.entity.SelfCheckIgnore;
|
|
|
import com.etotem.cfc.mapper.SelfCheckIgnoreMapper;
|
|
|
@@ -63,6 +65,9 @@ public class FiveDimensionSelfCheckService {
|
|
|
@Resource
|
|
|
private SelfCheckTrendService selfCheckTrendService;
|
|
|
|
|
|
+ @Resource
|
|
|
+ private FiveDimensionScoreMapper fiveDimensionScoreMapper;
|
|
|
+
|
|
|
private final ObjectMapper objectMapper = new ObjectMapper();
|
|
|
|
|
|
/** 维度中文名与五行 */
|
|
|
@@ -498,6 +503,9 @@ public class FiveDimensionSelfCheckService {
|
|
|
record.setCreatedAt(new Date());
|
|
|
selfCheckMapper.insert(record);
|
|
|
|
|
|
+ // 五维自评 → 五维分数变化桥接(SC-T-32:自评分数写为五维分数变化,source_type=selfcheck)
|
|
|
+ bridgeSelfCheckToDimensionScores(record, scoreMap);
|
|
|
+
|
|
|
// 新手引导联动:完成五维自检任务(老用户无该任务记录时静默跳过)
|
|
|
try {
|
|
|
onboardingService.completeTask(userId, "COMPLETE_SELF_CHECK");
|
|
|
@@ -516,6 +524,49 @@ public class FiveDimensionSelfCheckService {
|
|
|
return vo;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 五维自评 → 五维分数变化桥接(SC-T-32)。
|
|
|
+ *
|
|
|
+ * <p>契约「五维自评 → 变化落 EnergyController」:自评提交后,将各维度得分
|
|
|
+ * (0-9 制)等比例换算为 0-100,写入 {@code five_dimension_scores}
|
|
|
+ * (source_type=selfcheck),使自评分数可参与五维能量变化归因。
|
|
|
+ * 静默兜底:任何异常仅记录,不阻断自检主流程。</p>
|
|
|
+ */
|
|
|
+ private void bridgeSelfCheckToDimensionScores(FiveDimensionSelfCheck record, Map<String, Integer> scoreMap) {
|
|
|
+ if (record == null || record.getFamilyMemberId() == null || scoreMap == null || scoreMap.isEmpty()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ FamilyMember member = familyMemberMapper.selectById(record.getFamilyMemberId());
|
|
|
+ if (member == null || member.getFamilyId() == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Date assessedAt = record.getCreatedAt() != null ? record.getCreatedAt() : new Date();
|
|
|
+ for (Map.Entry<String, Integer> entry : scoreMap.entrySet()) {
|
|
|
+ String dim = entry.getKey();
|
|
|
+ Integer raw = entry.getValue();
|
|
|
+ if (dim == null || raw == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ FiveDimensionScore score = new FiveDimensionScore();
|
|
|
+ score.setMemberId(record.getFamilyMemberId());
|
|
|
+ score.setMemberType("member");
|
|
|
+ score.setFamilyId(member.getFamilyId());
|
|
|
+ score.setDimensionCode(dim);
|
|
|
+ // 自检维度分 0-9 制 → 0-100 制(四舍五入)
|
|
|
+ score.setScore(Math.round(raw * 100.0f / 9.0f));
|
|
|
+ score.setAssessedAt(assessedAt);
|
|
|
+ score.setSourceType("selfcheck");
|
|
|
+ score.setSourceId(record.getId());
|
|
|
+ score.setDetailJson("{}");
|
|
|
+ score.setCreatedAt(assessedAt);
|
|
|
+ fiveDimensionScoreMapper.insert(score);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("五维自评桥接五维分数变化失败(静默容忍): {}", e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/** 获取最新一次自检结果 */
|
|
|
public SelfCheckResultVO getLatest(Long userId) {
|
|
|
LambdaQueryWrapper<FiveDimensionSelfCheck> wrapper = new LambdaQueryWrapper<FiveDimensionSelfCheck>()
|