新增会员房屋管理

master
zzy 2026-04-21 23:10:46 +08:00
parent ed76761769
commit 325d782450
7 changed files with 87 additions and 17 deletions

View File

@ -6,6 +6,7 @@ import com.fjrcloud.community.framework.common.pojo.PageParam;
import com.fjrcloud.community.framework.common.pojo.PageResult;
import com.fjrcloud.community.framework.common.util.object.BeanUtils;
import com.fjrcloud.community.framework.excel.core.util.ExcelUtils;
import com.fjrcloud.community.module.community.controller.admin.memberhouse.vo.MemberHouseAuditReqVO;
import com.fjrcloud.community.module.community.controller.admin.memberhouse.vo.MemberHousePageReqVO;
import com.fjrcloud.community.module.community.controller.admin.memberhouse.vo.MemberHouseRespVO;
import com.fjrcloud.community.module.community.controller.admin.memberhouse.vo.MemberHouseSaveReqVO;
@ -99,4 +100,12 @@ public class MemberHouseController {
BeanUtils.toBean(list, MemberHouseRespVO.class));
}
@PutMapping("/audit")
@Operation(summary = "审核业主认证")
@PreAuthorize("@ss.hasPermission('community:member-house:audit')")
public CommonResult<Boolean> auditMemberHouse(@Valid @RequestBody MemberHouseAuditReqVO auditReqVO) {
memberHouseService.auditMemberHouse(auditReqVO.getId(), auditReqVO.getStatus(), auditReqVO.getRejectReason());
return success(true);
}
}

View File

@ -0,0 +1,23 @@
package com.fjrcloud.community.module.community.controller.admin.memberhouse.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotNull;
@Schema(description = "管理后台 - 业主认证审核 Request VO")
@Data
public class MemberHouseAuditReqVO {
@Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "20067")
@NotNull(message = "主键ID不能为空")
private Long id;
@Schema(description = "审核状态1-通过2-驳回)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "审核状态不能为空")
private Integer status;
@Schema(description = "驳回原因", example = "证件信息不清晰")
private String rejectReason;
}

View File

@ -81,6 +81,10 @@ public class MemberHouseRespVO {
@ExcelProperty("附件URL")
private String attachmentUrl;
@Schema(description = "人脸照片URL", example = "https://www.fjrcloud.cn/face.jpg")
@ExcelProperty("人脸照片URL")
private String facePhotoUrl;
@Schema(description = "认证状态0-待审核1-已认证2-驳回)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@ExcelProperty("认证状态0-待审核1-已认证2-驳回)")
private Integer status;

View File

@ -13,8 +13,7 @@ public class MemberHouseSaveReqVO {
@Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "20067")
private Long id;
@Schema(description = "会员ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "24858")
@NotNull(message = "会员ID不能为空")
@Schema(description = "会员ID", example = "24858")
private Long memberId;
@Schema(description = "小区ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "15661")
@ -65,6 +64,9 @@ public class MemberHouseSaveReqVO {
@Schema(description = "附件URL", example = "https://www.fjrcloud.cn")
private String attachmentUrl;
@Schema(description = "人脸照片URL", example = "https://www.fjrcloud.cn/face.jpg")
private String facePhotoUrl;
@Schema(description = "认证状态0-待审核1-已认证2-驳回)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "认证状态0-待审核1-已认证2-驳回)不能为空")
private Integer status;

View File

@ -3,7 +3,7 @@ package com.fjrcloud.community.module.community.dal.dataobject.memberhouse;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fjrcloud.community.framework.mybatis.core.dataobject.BaseDO;
import com.fjrcloud.community.framework.tenant.core.db.TenantBaseDO;
import lombok.*;
import java.time.LocalDate;
@ -22,7 +22,7 @@ import java.time.LocalDateTime;
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class MemberHouseDO extends BaseDO {
public class MemberHouseDO extends TenantBaseDO {
/**
* ID
@ -93,6 +93,10 @@ public class MemberHouseDO extends BaseDO {
* URL
*/
private String attachmentUrl;
/**
* URL
*/
private String facePhotoUrl;
/**
* 0-1-2-
*/

View File

@ -14,7 +14,7 @@ public interface ErrorCodeConstants {
ErrorCode COMMUNITY_IMPORT_LIST_IS_EMPTY = new ErrorCode(2_001_000_002, "导入小区数据不能为空!");
ErrorCode COMMUNITY_NAME_DUPLICATE = new ErrorCode(2_001_000_003, "小区名称【{}】已存在");
ErrorCode HOUSE_NOT_EXISTS = new ErrorCode(2_001_001_001, "房屋信息主不存在");
ErrorCode HOUSE_IMPORT_LIST_IS_EMPTY = new ErrorCode(2_001_001_002, "导入房屋数据不能为空!");
@ -28,4 +28,7 @@ public interface ErrorCodeConstants {
ErrorCode MEMBER_HOUSE_AUDIT_STATUS_ERROR = new ErrorCode(2_002_001_005, "该记录状态不允许进行审核操作");
ErrorCode MEMBER_HOUSE_REJECT_REASON_REQUIRED = new ErrorCode(2_002_001_006, "驳回时必须填写驳回原因");
ErrorCode MEMBER_HOUSE_MOBILE_REQUIRED = new ErrorCode(2_002_001_007,"手机号不能为空");
}

View File

@ -10,6 +10,8 @@ import com.fjrcloud.community.module.community.controller.admin.memberhouse.vo.M
import com.fjrcloud.community.module.community.dal.dataobject.memberhouse.MemberHouseDO;
import com.fjrcloud.community.module.community.dal.mysql.memberhouse.MemberHouseMapper;
import com.fjrcloud.community.module.community.service.community.CommunityService;
import com.fjrcloud.community.module.member.dal.dataobject.user.MemberUserDO;
import com.fjrcloud.community.module.member.service.user.MemberUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -21,6 +23,7 @@ import java.util.List;
import static com.fjrcloud.community.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.fjrcloud.community.module.community.enums.ErrorCodeConstants.*;
import static com.fjrcloud.community.module.member.enums.ErrorCodeConstants.USER_MOBILE_NOT_EXISTS;
/**
* Service
@ -38,6 +41,9 @@ public class MemberHouseServiceImpl implements MemberHouseService {
@Resource
private CommunityService communityService;
@Resource
private MemberUserService memberUserService;
@Override
@Transactional(rollbackFor = Exception.class)
public Long createMemberHouse(MemberHouseSaveReqVO createReqVO) {
@ -46,7 +52,19 @@ public class MemberHouseServiceImpl implements MemberHouseService {
throw exception(COMMUNITY_NOT_EXISTS);
}
// 2. 校验重复认证:同一小区、同一房屋、同一手机号不能重复认证
// 2. 如果 memberId 为空,通过手机号检索会员
if (createReqVO.getMemberId() == null) {
if (StrUtil.isBlank(createReqVO.getMobile())) {
throw exception(MEMBER_HOUSE_MOBILE_REQUIRED);
}
MemberUserDO user = memberUserService.getUserByMobile(createReqVO.getMobile());
if (user == null) {
throw exception(USER_MOBILE_NOT_EXISTS);
}
createReqVO.setMemberId(user.getId());
}
// 3. 校验重复认证:同一小区、同一房屋、同一手机号不能重复认证
List<MemberHouseDO> existList = memberHouseMapper.selectListByCommunityAndRoom(
createReqVO.getCommunityId(),
createReqVO.getBuildingNo(),
@ -57,9 +75,9 @@ public class MemberHouseServiceImpl implements MemberHouseService {
throw exception(MEMBER_HOUSE_EXISTS);
}
// 3. 插入数据,默认状态为待审核 (0)
// 4. 插入数据
MemberHouseDO memberHouse = BeanUtils.toBean(createReqVO, MemberHouseDO.class);
memberHouse.setStatus(0);
memberHouse.setTenantId(createReqVO.getCommunityId());
memberHouseMapper.insert(memberHouse);
return memberHouse.getId();
@ -71,11 +89,23 @@ public class MemberHouseServiceImpl implements MemberHouseService {
// 校验存在
MemberHouseDO existHouse = validateMemberHouseExists(updateReqVO.getId());
// 如果状态不是待审核或驳回,不允许修改基础信息(视业务规则而定)
// 如果状态不是待审核或驳回,不允许修改基础信息
if (existHouse.getStatus().equals(1)) {
throw exception(MEMBER_HOUSE_AUDITED_NOT_UPDATE);
}
// 如果 memberId 为空,通过手机号检索会员
if (updateReqVO.getMemberId() == null) {
if (StrUtil.isBlank(updateReqVO.getMobile())) {
throw exception(MEMBER_HOUSE_MOBILE_REQUIRED);
}
MemberUserDO user = memberUserService.getUserByMobile(updateReqVO.getMobile());
if (user == null) {
throw exception(USER_MOBILE_NOT_EXISTS);
}
updateReqVO.setMemberId(user.getId());
}
// 更新
MemberHouseDO updateObj = BeanUtils.toBean(updateReqVO, MemberHouseDO.class);
memberHouseMapper.updateById(updateObj);
@ -102,21 +132,16 @@ public class MemberHouseServiceImpl implements MemberHouseService {
// 1. 校验记录存在
MemberHouseDO house = validateMemberHouseExists(id);
// 2. 校验状态:只有待审核 (0) 才能进行审核
if (house.getStatus() != 0) {
throw exception(MEMBER_HOUSE_AUDIT_STATUS_ERROR);
}
// 3. 如果是驳回,必须填写驳回原因
// 2. 如果是驳回,必须填写驳回原因
if (status == 2 && StrUtil.isBlank(rejectReason)) {
throw exception(MEMBER_HOUSE_REJECT_REASON_REQUIRED);
}
// 4. 获取当前登录的管理员信息
// 3. 获取当前登录的管理员信息
Long currentUserId = SecurityFrameworkUtils.getLoginUserId();
String currentUserName = SecurityFrameworkUtils.getLoginUserNickname();
// 5. 更新审核状态、审核人、审核时间及驳回原因
// 4. 更新审核状态、审核人、审核时间及驳回原因
MemberHouseDO updateObj = new MemberHouseDO();
updateObj.setId(id);
updateObj.setStatus(status);