|
|
@@ -623,6 +623,86 @@ private WechatService wechatService;
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取对家庭成员可见的成员列表(家长+孩子)
|
|
|
+ */
|
|
|
+ public List<FamilyMemberVO> getVisibleMembers(Long userId) {
|
|
|
+ User user = userMapper.selectById(userId);
|
|
|
+ if (user == null || user.getFamilyId() == null) {
|
|
|
+ return new ArrayList<>();
|
|
|
+ }
|
|
|
+ Long familyId = user.getFamilyId();
|
|
|
+ List<FamilyMemberVO> result = new ArrayList<>();
|
|
|
+
|
|
|
+ // 家长:show_to_family=1 的同家庭家长
|
|
|
+ List<User> parents = userMapper.selectList(new LambdaQueryWrapper<User>()
|
|
|
+ .eq(User::getFamilyId, familyId)
|
|
|
+ .eq(User::getRole, "parent"));
|
|
|
+ for (User p : parents) {
|
|
|
+ if (p.getId().equals(userId) || (p.getShowToFamily() != null && p.getShowToFamily() == 1)) {
|
|
|
+ FamilyMemberVO vo = new FamilyMemberVO();
|
|
|
+ vo.setId(p.getId());
|
|
|
+ vo.setNickname(p.getNickname());
|
|
|
+ vo.setAvatar(p.getAvatar());
|
|
|
+ vo.setMemberType("parent");
|
|
|
+ vo.setRoleLabel(p.getFamilyRole() != null ? p.getFamilyRole() : "家长");
|
|
|
+ vo.setTotalPoints(p.getTotalPoints());
|
|
|
+ vo.setShowToFamily(p.getShowToFamily() != null ? p.getShowToFamily() : 1);
|
|
|
+ result.add(vo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 孩子:show_to_family=1 的同家庭孩子
|
|
|
+ List<Child> children = childMapper.selectList(new LambdaQueryWrapper<Child>()
|
|
|
+ .eq(Child::getFamilyId, familyId));
|
|
|
+ for (Child c : children) {
|
|
|
+ if (c.getShowToFamily() == null || c.getShowToFamily() == 1) {
|
|
|
+ FamilyMemberVO vo = new FamilyMemberVO();
|
|
|
+ vo.setId(c.getId());
|
|
|
+ vo.setNickname(c.getNickname());
|
|
|
+ vo.setAvatar("");
|
|
|
+ vo.setMemberType("child");
|
|
|
+ vo.setRoleLabel("孩子");
|
|
|
+ vo.setDanLevel(c.getDanLevel());
|
|
|
+ vo.setTotalPoints(c.getTotalPoints());
|
|
|
+ vo.setShowToFamily(c.getShowToFamily() != null ? c.getShowToFamily() : 1);
|
|
|
+ result.add(vo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 更新成员可见性
|
|
|
+ */
|
|
|
+ public boolean updateVisibility(Long userId, Long memberId, String memberType, Integer showToFamily) {
|
|
|
+ User user = userMapper.selectById(userId);
|
|
|
+ if (user == null) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if ("child".equals(memberType)) {
|
|
|
+ Child child = childMapper.selectById(memberId);
|
|
|
+ if (child == null || !child.getFamilyId().equals(user.getFamilyId())) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ child.setShowToFamily(showToFamily);
|
|
|
+ child.setUpdatedAt(new Date());
|
|
|
+ childMapper.updateById(child);
|
|
|
+ return true;
|
|
|
+ } else if ("parent".equals(memberType)) {
|
|
|
+ // 家长只能改自己的可见性
|
|
|
+ if (!memberId.equals(userId)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ user.setShowToFamily(showToFamily);
|
|
|
+ user.setUpdatedAt(new Date());
|
|
|
+ userMapper.updateById(user);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
public LoginResultDTO registerWithIdCard(RegisterWithIdCardDTO dto) {
|
|
|
// 验证验证码
|
|
|
boolean valid = verificationCodeService.verifyCode(dto.getPhone(), dto.getCode(), "login");
|
|
|
@@ -786,6 +866,9 @@ private WechatService wechatService;
|
|
|
if (dto.getTheme() != null) {
|
|
|
child.setTheme(dto.getTheme());
|
|
|
}
|
|
|
+ if (dto.getShowToFamily() != null) {
|
|
|
+ child.setShowToFamily(dto.getShowToFamily());
|
|
|
+ }
|
|
|
child.setUpdatedAt(new Date());
|
|
|
childMapper.updateById(child);
|
|
|
return true;
|
|
|
@@ -815,6 +898,7 @@ private WechatService wechatService;
|
|
|
dto.setSystemPoints(child.getSystemPoints());
|
|
|
dto.setStreakDays(child.getStreakDays());
|
|
|
dto.setFocusRemaining(child.getFocusRemaining());
|
|
|
+ dto.setShowToFamily(child.getShowToFamily());
|
|
|
return dto;
|
|
|
}
|
|
|
|