|
|
@@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.etotem.cfc.dto.HealthAlertVO;
|
|
|
import com.etotem.cfc.dto.MilestoneVO;
|
|
|
import com.etotem.cfc.dto.RelationshipScoreVO;
|
|
|
+import com.etotem.cfc.dto.FamilyMemberVO;
|
|
|
import com.etotem.cfc.entity.FamilyMember;
|
|
|
import com.etotem.cfc.entity.FamilyMemberAttributes;
|
|
|
+import com.etotem.cfc.entity.FamilyRelationship;
|
|
|
import com.etotem.cfc.mapper.FamilyMemberAttributesMapper;
|
|
|
import com.etotem.cfc.mapper.FamilyMemberMapper;
|
|
|
import org.slf4j.Logger;
|
|
|
@@ -18,7 +20,9 @@ import java.math.RoundingMode;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Calendar;
|
|
|
import java.util.Date;
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
|
|
|
@Service
|
|
|
public class RelationshipQualityService {
|
|
|
@@ -31,6 +35,9 @@ public class RelationshipQualityService {
|
|
|
@Resource
|
|
|
private FamilyMemberAttributesMapper familyMemberAttributesMapper;
|
|
|
|
|
|
+ @Resource
|
|
|
+ private FamilyRelationshipService familyRelationshipService;
|
|
|
+
|
|
|
private static final String TYPE_BIRTHDAY = "birthday";
|
|
|
|
|
|
/**
|
|
|
@@ -214,4 +221,66 @@ public class RelationshipQualityService {
|
|
|
}
|
|
|
return "parent";
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取以指定成员为中心的所有成员关系(关系类型 + 三项评分)
|
|
|
+ */
|
|
|
+ public List<FamilyMemberVO> getPairwiseRelationships(Long centerMemberId, Long familyId) {
|
|
|
+ List<FamilyMemberVO> result = new ArrayList<>();
|
|
|
+ FamilyMember center = familyMemberMapper.selectById(centerMemberId);
|
|
|
+ if (center == null || (familyId != null && !familyId.equals(center.getFamilyId()))) {
|
|
|
+ throw new RuntimeException("成员不存在或不属于该家庭");
|
|
|
+ }
|
|
|
+ if (familyId == null) {
|
|
|
+ familyId = center.getFamilyId();
|
|
|
+ }
|
|
|
+
|
|
|
+ List<FamilyMember> members = familyMemberMapper.selectList(
|
|
|
+ new LambdaQueryWrapper<FamilyMember>().eq(FamilyMember::getFamilyId, familyId));
|
|
|
+
|
|
|
+ // 中心成员 → 各成员的关系行(评分与关系类型来源)
|
|
|
+ List<FamilyRelationship> rels = familyRelationshipService.getRelationsForMember(centerMemberId);
|
|
|
+ Map<Long, FamilyRelationship> relMap = new HashMap<>();
|
|
|
+ for (FamilyRelationship rel : rels) {
|
|
|
+ relMap.put(rel.getToMemberId(), rel);
|
|
|
+ }
|
|
|
+
|
|
|
+ for (FamilyMember fm : members) {
|
|
|
+ FamilyMemberVO vo = new FamilyMemberVO();
|
|
|
+ vo.setId(fm.getId());
|
|
|
+ vo.setSource("family_member");
|
|
|
+ vo.setUserId(fm.getUserId());
|
|
|
+ vo.setNickname(fm.getNickname());
|
|
|
+ vo.setPhone(fm.getPhone());
|
|
|
+ vo.setAvatar(fm.getAvatar());
|
|
|
+ vo.setGender(fm.getGender());
|
|
|
+ vo.setGeneration(fm.getGeneration());
|
|
|
+ vo.setEffectiveRole(computeEffectiveRole(fm));
|
|
|
+ vo.setRoleLabel(computeEffectiveRole(fm));
|
|
|
+ vo.setIsSelf(centerMemberId.equals(fm.getId()));
|
|
|
+ vo.setAge(fm.getAge());
|
|
|
+
|
|
|
+ FamilyRelationship rel = relMap.get(fm.getId());
|
|
|
+ if (rel != null) {
|
|
|
+ vo.setGenerationValue(rel.getGenerationValue());
|
|
|
+ String label = rel.getRelationshipKey() != null && !rel.getRelationshipKey().isEmpty()
|
|
|
+ ? rel.getRelationshipKey()
|
|
|
+ : familyRelationshipService.computeRelationshipLabel(rel.getGenerationValue(), fm.getGender());
|
|
|
+ vo.setRelativeLabel(label);
|
|
|
+ vo.setRelationship(label);
|
|
|
+ vo.setTrustScore(rel.getTrustScore());
|
|
|
+ vo.setIntimacyScore(rel.getIntimacyScore());
|
|
|
+ vo.setCommunicationScore(rel.getCommunicationScore());
|
|
|
+ } else if (centerMemberId.equals(fm.getId())) {
|
|
|
+ vo.setRelationship("我");
|
|
|
+ vo.setRelativeLabel("我");
|
|
|
+ } else {
|
|
|
+ vo.setTrustScore(BigDecimal.ZERO);
|
|
|
+ vo.setIntimacyScore(BigDecimal.ZERO);
|
|
|
+ vo.setCommunicationScore(BigDecimal.ZERO);
|
|
|
+ }
|
|
|
+ result.add(vo);
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
}
|