diff --git a/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/controller/admin/memberhouse/MemberHouseController.java b/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/controller/admin/memberhouse/MemberHouseController.java index 68ae0d7..6b2cb79 100644 --- a/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/controller/admin/memberhouse/MemberHouseController.java +++ b/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/controller/admin/memberhouse/MemberHouseController.java @@ -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 auditMemberHouse(@Valid @RequestBody MemberHouseAuditReqVO auditReqVO) { + memberHouseService.auditMemberHouse(auditReqVO.getId(), auditReqVO.getStatus(), auditReqVO.getRejectReason()); + return success(true); + } + } \ No newline at end of file diff --git a/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/controller/admin/memberhouse/vo/MemberHouseAuditReqVO.java b/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/controller/admin/memberhouse/vo/MemberHouseAuditReqVO.java new file mode 100644 index 0000000..1937e05 --- /dev/null +++ b/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/controller/admin/memberhouse/vo/MemberHouseAuditReqVO.java @@ -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; + +} \ No newline at end of file diff --git a/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/controller/admin/memberhouse/vo/MemberHouseRespVO.java b/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/controller/admin/memberhouse/vo/MemberHouseRespVO.java index 454f02d..d17ddbe 100644 --- a/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/controller/admin/memberhouse/vo/MemberHouseRespVO.java +++ b/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/controller/admin/memberhouse/vo/MemberHouseRespVO.java @@ -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; diff --git a/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/controller/admin/memberhouse/vo/MemberHouseSaveReqVO.java b/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/controller/admin/memberhouse/vo/MemberHouseSaveReqVO.java index cbdd914..8696bc2 100644 --- a/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/controller/admin/memberhouse/vo/MemberHouseSaveReqVO.java +++ b/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/controller/admin/memberhouse/vo/MemberHouseSaveReqVO.java @@ -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; diff --git a/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/dal/dataobject/memberhouse/MemberHouseDO.java b/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/dal/dataobject/memberhouse/MemberHouseDO.java index 27124c1..9a812bc 100644 --- a/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/dal/dataobject/memberhouse/MemberHouseDO.java +++ b/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/dal/dataobject/memberhouse/MemberHouseDO.java @@ -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-驳回) */ diff --git a/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/enums/ErrorCodeConstants.java b/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/enums/ErrorCodeConstants.java index 1039449..18c8435 100644 --- a/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/enums/ErrorCodeConstants.java +++ b/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/enums/ErrorCodeConstants.java @@ -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,"手机号不能为空"); + } diff --git a/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/service/memberhouse/MemberHouseServiceImpl.java b/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/service/memberhouse/MemberHouseServiceImpl.java index 7b65999..9f06126 100644 --- a/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/service/memberhouse/MemberHouseServiceImpl.java +++ b/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/service/memberhouse/MemberHouseServiceImpl.java @@ -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 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);