后端接口调整

master
zzy 2026-04-25 22:19:31 +08:00
parent ac00a2f49e
commit 8cc31a621a
8 changed files with 176 additions and 35 deletions

View File

@ -27,11 +27,6 @@
<artifactId>fjrcloud-module-infra</artifactId> <artifactId>fjrcloud-module-infra</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<dependency>
<groupId>com.fjrcloud.boot</groupId>
<artifactId>fjrcloud-module-member</artifactId>
<version>${revision}</version>
</dependency>
<!-- 业务组件 --> <!-- 业务组件 -->
<dependency> <dependency>

View File

@ -39,7 +39,12 @@ public class AppMemberHouseController {
@Operation(summary = "获取我的房屋认证列表") @Operation(summary = "获取我的房屋认证列表")
public CommonResult<List<AppMemberHouseRespVO>> getMyHouseList() { public CommonResult<List<AppMemberHouseRespVO>> getMyHouseList() {
Long memberId = SecurityFrameworkUtils.getLoginUserId(); Long memberId = SecurityFrameworkUtils.getLoginUserId();
return success(memberHouseService.getMemberHouseListByMemberId(memberId)); List<AppMemberHouseRespVO> respVOList = memberHouseService.getMemberHouseListByMemberId(memberId);
for (AppMemberHouseRespVO appMemberHouseRespVO : respVOList) {
appMemberHouseRespVO.setFullAddress(String.format("%s号楼%s单元%s",
appMemberHouseRespVO.getBuildingNo(), appMemberHouseRespVO.getUnitNo(), appMemberHouseRespVO.getRoomNo()));
}
return success(respVOList);
} }
@GetMapping("/relation-list") @GetMapping("/relation-list")
@ -68,6 +73,7 @@ public class AppMemberHouseController {
@PostMapping("/switch-house") @PostMapping("/switch-house")
@Operation(summary = "切换房屋(小区变更时自动重新登录)") @Operation(summary = "切换房屋(小区变更时自动重新登录)")
@TenantIgnore
public CommonResult<AppSwitchHouseRespVO> switchHouse(@Valid @RequestBody AppSwitchHouseReqVO reqVO) { public CommonResult<AppSwitchHouseRespVO> switchHouse(@Valid @RequestBody AppSwitchHouseReqVO reqVO) {
Long memberId = SecurityFrameworkUtils.getLoginUserId(); Long memberId = SecurityFrameworkUtils.getLoginUserId();
return success(memberHouseService.switchHouse( return success(memberHouseService.switchHouse(

View File

@ -37,4 +37,6 @@ public class AppMemberHouseRespVO {
@Schema(description = "关联人员数量", example = "3") @Schema(description = "关联人员数量", example = "3")
private Integer relationCount; private Integer relationCount;
@Schema(description = "房屋完整地址", example = "12号楼1单元701")
private String fullAddress;
} }

View File

@ -117,6 +117,10 @@ public class MemberHouseDO extends TenantBaseDO {
* *
*/ */
private LocalDateTime auditTime; private LocalDateTime auditTime;
/**
* 0-1-
*/
private Boolean isDefault;
} }

View File

@ -50,4 +50,22 @@ public interface MemberHouseMapper extends BaseMapperX<MemberHouseDO> {
.orderByDesc(MemberHouseDO::getId)); .orderByDesc(MemberHouseDO::getId));
} }
default MemberHouseDO selectDefaultHouseByMemberAndCommunity(Long memberId, Long communityId) {
return selectOne(new LambdaQueryWrapperX<MemberHouseDO>()
.eq(MemberHouseDO::getMemberId, memberId)
.eq(MemberHouseDO::getCommunityId, communityId)
.eq(MemberHouseDO::getStatus, 1)
.eq(MemberHouseDO::getIsDefault, true)
.orderByDesc(MemberHouseDO::getId));
}
default MemberHouseDO selectFirstHouseByMemberAndCommunity(Long memberId, Long communityId) {
return selectOne(new LambdaQueryWrapperX<MemberHouseDO>()
.eq(MemberHouseDO::getMemberId, memberId)
.eq(MemberHouseDO::getCommunityId, communityId)
.eq(MemberHouseDO::getStatus, 1)
.orderByDesc(MemberHouseDO::getIsOwner)
.orderByDesc(MemberHouseDO::getId));
}
} }

View File

@ -129,4 +129,23 @@ public interface MemberHouseService {
*/ */
AppSwitchHouseRespVO switchHouse(Long memberId, Long memberHouseId, Long houseId, Long communityId); AppSwitchHouseRespVO switchHouse(Long memberId, Long memberHouseId, Long houseId, Long communityId);
/**
*
*
*
* @param memberId ID
* @param communityId ID
* @return
*/
MemberHouseDO getDefaultHouseByCommunity(Long memberId, Long communityId);
/**
*
*
* @param memberId ID
* @param communityId ID
* @param memberHouseId ID
*/
void setDefaultHouse(Long memberId, Long communityId, Long memberHouseId);
} }

View File

@ -3,6 +3,8 @@ package com.fjrcloud.community.module.community.service.memberhouse;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.fjrcloud.community.framework.common.enums.UserTypeEnum; import com.fjrcloud.community.framework.common.enums.UserTypeEnum;
import com.fjrcloud.community.framework.common.pojo.PageResult; import com.fjrcloud.community.framework.common.pojo.PageResult;
import com.fjrcloud.community.framework.common.util.object.BeanUtils; import com.fjrcloud.community.framework.common.util.object.BeanUtils;
@ -308,7 +310,10 @@ public class MemberHouseServiceImpl implements MemberHouseService {
@Override @Override
public List<AppMemberCommunityTreeRespVO> getMemberCommunityTree(Long memberId) { public List<AppMemberCommunityTreeRespVO> getMemberCommunityTree(Long memberId) {
// 1. 查询会员的所有房屋认证记录 // 1. 查询会员的所有房屋认证记录
List<MemberHouseDO> memberHouseList = memberHouseMapper.selectListByMemberId(memberId); List<MemberHouseDO> memberHouseList = memberHouseMapper.selectList(new LambdaQueryWrapper<MemberHouseDO>()
.eq(MemberHouseDO::getMemberId, memberId)
.eq(MemberHouseDO::getStatus, 1)
);
if (CollUtil.isEmpty(memberHouseList)) { if (CollUtil.isEmpty(memberHouseList)) {
return Collections.emptyList(); return Collections.emptyList();
@ -389,7 +394,10 @@ public class MemberHouseServiceImpl implements MemberHouseService {
} }
} }
// 7. 更新会员表的当前房屋信息 // 7. 设置该房屋为当前小区的默认房屋
setDefaultHouse(memberId, communityId, memberHouseId);
// 8. 更新会员表的当前房屋信息
memberUserService.updateCurrentHouse(memberId, communityId, communityName, houseId, houseAddress); memberUserService.updateCurrentHouse(memberId, communityId, communityName, houseId, houseAddress);
AppSwitchHouseRespVO.AppSwitchHouseRespVOBuilder respVOBuilder = AppSwitchHouseRespVO.builder() AppSwitchHouseRespVO.AppSwitchHouseRespVOBuilder respVOBuilder = AppSwitchHouseRespVO.builder()
@ -397,29 +405,73 @@ public class MemberHouseServiceImpl implements MemberHouseService {
.communityId(communityId) .communityId(communityId)
.houseId(houseId); .houseId(houseId);
// 8. 如果小区变了需要重新登录生成新token // 9. 如果小区变了需要重新登录生成新token
if (communityChanged) { if (communityChanged) {
log.info("会员[{}]切换小区:从[{}]切换到[{}],房屋地址:{}", log.info("会员[{}]切换小区:从[{}]切换到[{}],房屋地址:{}",
memberId, currentTenantId, communityId, houseAddress); memberId, currentTenantId, communityId, houseAddress);
// 在新小区租户上下文中生成新的token // 在新小区租户上下文中生成新的token
OAuth2AccessTokenDO newAccessToken = TenantUtils.execute(communityId, () -> { OAuth2AccessTokenDO newAccessToken = TenantUtils.execute(communityId, () -> oauth2TokenService.createAccessToken(
return oauth2TokenService.createAccessToken(
memberId, memberId,
UserTypeEnum.MEMBER.getValue(), UserTypeEnum.MEMBER.getValue(),
CLIENT_ID_DEFAULT, CLIENT_ID_DEFAULT,
null null
); ));
});
respVOBuilder.accessToken(newAccessToken.getAccessToken()) respVOBuilder.accessToken(newAccessToken.getAccessToken())
.refreshToken(newAccessToken.getRefreshToken()) .refreshToken(newAccessToken.getRefreshToken())
.expiresTime(newAccessToken.getExpiresTime()); .expiresTime(newAccessToken.getExpiresTime());
} else { } else {
log.info("会员[{}]切换房屋:小区[{}],房屋地址:{}", memberId, communityId, houseAddress); log.info("会员[{}]切换房屋:小区[{}],房屋地址:{},已设为默认房屋", memberId, communityId, houseAddress);
} }
return respVOBuilder.build(); return respVOBuilder.build();
} }
@Override
public MemberHouseDO getDefaultHouseByCommunity(Long memberId, Long communityId) {
// 1. 优先查询标记为默认的房屋
MemberHouseDO defaultHouse = memberHouseMapper.selectDefaultHouseByMemberAndCommunity(memberId, communityId);
if (defaultHouse != null) {
log.debug("会员[{}]在小区[{}]有标记的默认房屋:{}", memberId, communityId, defaultHouse.getId());
return defaultHouse;
}
// 2. 如果没有默认房屋,则返回第一条已认证的房屋
MemberHouseDO firstHouse = memberHouseMapper.selectFirstHouseByMemberAndCommunity(memberId, communityId);
if (firstHouse != null) {
log.debug("会员[{}]在小区[{}]没有标记默认房屋,返回第一条房屋:{}", memberId, communityId, firstHouse.getId());
}
return firstHouse;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void setDefaultHouse(Long memberId, Long communityId, Long memberHouseId) {
// 1. 校验认证记录是否存在
MemberHouseDO memberHouse = validateMemberHouseExists(memberHouseId);
// 2. 校验是否属于当前会员和小区
if (!ObjUtil.equal(memberHouse.getMemberId(), memberId) ||
!ObjUtil.equal(memberHouse.getCommunityId(), communityId)) {
throw exception(MEMBER_HOUSE_NOT_EXISTS);
}
// 3. 将该小区下该用户的所有房屋的非默认标记清除
memberHouseMapper.update(null, new LambdaUpdateWrapper<MemberHouseDO>()
.set(MemberHouseDO::getIsDefault, false)
.eq(MemberHouseDO::getMemberId, memberId)
.eq(MemberHouseDO::getCommunityId, communityId)
);
// 4. 设置当前房屋为默认房屋
MemberHouseDO updateObj = new MemberHouseDO();
updateObj.setId(memberHouseId);
updateObj.setIsDefault(true);
memberHouseMapper.updateById(updateObj);
log.info("会员[{}]在小区[{}]设置默认房屋为:{}", memberId, communityId, memberHouseId);
}
} }

View File

@ -12,12 +12,17 @@ import com.fjrcloud.community.framework.common.enums.UserTypeEnum;
import com.fjrcloud.community.framework.common.pojo.PageResult; import com.fjrcloud.community.framework.common.pojo.PageResult;
import com.fjrcloud.community.framework.common.util.object.BeanUtils; import com.fjrcloud.community.framework.common.util.object.BeanUtils;
import com.fjrcloud.community.framework.tenant.core.context.TenantContextHolder; import com.fjrcloud.community.framework.tenant.core.context.TenantContextHolder;
import com.fjrcloud.community.framework.tenant.core.util.TenantUtils;
import com.fjrcloud.community.module.community.auth.AuthConvert; import com.fjrcloud.community.module.community.auth.AuthConvert;
import com.fjrcloud.community.module.community.controller.admin.user.vo.MemberUserPageReqVO; import com.fjrcloud.community.module.community.controller.admin.user.vo.MemberUserPageReqVO;
import com.fjrcloud.community.module.community.controller.admin.user.vo.MemberUserUpdateReqVO; import com.fjrcloud.community.module.community.controller.admin.user.vo.MemberUserUpdateReqVO;
import com.fjrcloud.community.module.community.controller.app.user.vo.*; import com.fjrcloud.community.module.community.controller.app.user.vo.*;
import com.fjrcloud.community.module.community.dal.dataobject.community.CommunityDO;
import com.fjrcloud.community.module.community.dal.dataobject.memberhouse.MemberHouseDO;
import com.fjrcloud.community.module.community.dal.dataobject.user.MemberUserDO; import com.fjrcloud.community.module.community.dal.dataobject.user.MemberUserDO;
import com.fjrcloud.community.module.community.dal.mysql.community.CommunityMapper;
import com.fjrcloud.community.module.community.dal.mysql.user.MemberUserMapper; import com.fjrcloud.community.module.community.dal.mysql.user.MemberUserMapper;
import com.fjrcloud.community.module.community.service.memberhouse.MemberHouseService;
import com.fjrcloud.community.module.system.api.sms.SmsCodeApi; import com.fjrcloud.community.module.system.api.sms.SmsCodeApi;
import com.fjrcloud.community.module.system.api.sms.dto.code.SmsCodeUseReqDTO; import com.fjrcloud.community.module.system.api.sms.dto.code.SmsCodeUseReqDTO;
import com.fjrcloud.community.module.system.api.social.SocialClientApi; import com.fjrcloud.community.module.system.api.social.SocialClientApi;
@ -63,7 +68,10 @@ public class MemberUserServiceImpl implements MemberUserService {
private PasswordEncoder passwordEncoder; private PasswordEncoder passwordEncoder;
@Resource @Resource
private MemberUserTenantRelService userTenantRelService; private CommunityMapper communityMapper;
@Resource
private MemberHouseService memberHouseService;
@Override @Override
public MemberUserDO getUserByMobile(String mobile) { public MemberUserDO getUserByMobile(String mobile) {
@ -134,7 +142,44 @@ public class MemberUserServiceImpl implements MemberUserService {
@Override @Override
public MemberUserDO getUser(Long id) { public MemberUserDO getUser(Long id) {
return memberUserMapper.selectById(id); MemberUserDO user = memberUserMapper.selectById(id);
if (user == null) {
return null;
}
Long tenantId = TenantContextHolder.getTenantId();
if(user.getCurrentCommunityId() != null){
tenantId = user.getCurrentCommunityId();
}
// 如果用户有当前小区ID则获取该小区的默认房屋信息
if (tenantId != null) {
MemberHouseDO defaultHouse = memberHouseService.getDefaultHouseByCommunity(
id, tenantId);
if (defaultHouse != null) {
// 更新用户的当前房屋信息为默认房屋
String houseAddress = StrUtil.blankToDefault(defaultHouse.getBuildingNo(), "") + "号楼" +
StrUtil.blankToDefault(defaultHouse.getUnitNo(), "") + "单元" +
StrUtil.blankToDefault(defaultHouse.getRoomNo(), "");
user.setCurrentCommunityId(defaultHouse.getCommunityId());
user.setCurrentCommunityName(defaultHouse.getCommunityName());
user.setCurrentHouseId(defaultHouse.getHouseId());
user.setCurrentHouseAddress(houseAddress);
log.debug("用户[{}]在小区[{}]的默认房屋:{}", id, tenantId, defaultHouse.getId());
}else{
TenantUtils.executeIgnore(() -> {
CommunityDO communityDO = communityMapper.selectById(TenantContextHolder.getTenantId());
user.setCurrentCommunityId(TenantContextHolder.getTenantId());
user.setCurrentCommunityName(communityDO.getCommunityName());
user.setCurrentHouseId(null);
user.setCurrentHouseAddress("");
});
}
}
return user;
} }
@Override @Override