新增会员房屋管理

master
zzy 2026-04-21 17:09:14 +08:00
parent 7e06b0f6fd
commit 27ee416c67
14 changed files with 838 additions and 2 deletions

View File

@ -0,0 +1,102 @@
package com.fjrcloud.community.module.community.controller.admin.memberhouse;
import com.fjrcloud.community.framework.apilog.core.annotation.ApiAccessLog;
import com.fjrcloud.community.framework.common.pojo.CommonResult;
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.MemberHousePageReqVO;
import com.fjrcloud.community.module.community.controller.admin.memberhouse.vo.MemberHouseRespVO;
import com.fjrcloud.community.module.community.controller.admin.memberhouse.vo.MemberHouseSaveReqVO;
import com.fjrcloud.community.module.community.dal.dataobject.memberhouse.MemberHouseDO;
import com.fjrcloud.community.module.community.service.memberhouse.MemberHouseService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.util.List;
import static com.fjrcloud.community.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
import static com.fjrcloud.community.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - 业主认证信息")
@RestController
@RequestMapping("/community/member-house")
@Validated
public class MemberHouseController {
@Resource
private MemberHouseService memberHouseService;
@PostMapping("/create")
@Operation(summary = "创建业主认证信息")
@PreAuthorize("@ss.hasPermission('community:member-house:create')")
public CommonResult<Long> createMemberHouse(@Valid @RequestBody MemberHouseSaveReqVO createReqVO) {
return success(memberHouseService.createMemberHouse(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新业主认证信息")
@PreAuthorize("@ss.hasPermission('community:member-house:update')")
public CommonResult<Boolean> updateMemberHouse(@Valid @RequestBody MemberHouseSaveReqVO updateReqVO) {
memberHouseService.updateMemberHouse(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除业主认证信息")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('community:member-house:delete')")
public CommonResult<Boolean> deleteMemberHouse(@RequestParam("id") Long id) {
memberHouseService.deleteMemberHouse(id);
return success(true);
}
@DeleteMapping("/delete-list")
@Parameter(name = "ids", description = "编号", required = true)
@Operation(summary = "批量删除业主认证信息")
@PreAuthorize("@ss.hasPermission('community:member-house:delete')")
public CommonResult<Boolean> deleteMemberHouseList(@RequestParam("ids") List<Long> ids) {
memberHouseService.deleteMemberHouseListByIds(ids);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得业主认证信息")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('community:member-house:query')")
public CommonResult<MemberHouseRespVO> getMemberHouse(@RequestParam("id") Long id) {
MemberHouseDO memberHouse = memberHouseService.getMemberHouse(id);
return success(BeanUtils.toBean(memberHouse, MemberHouseRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得业主认证信息分页")
@PreAuthorize("@ss.hasPermission('community:member-house:query')")
public CommonResult<PageResult<MemberHouseRespVO>> getMemberHousePage(@Valid MemberHousePageReqVO pageReqVO) {
PageResult<MemberHouseDO> pageResult = memberHouseService.getMemberHousePage(pageReqVO);
return success(BeanUtils.toBean(pageResult, MemberHouseRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出业主认证信息 Excel")
@PreAuthorize("@ss.hasPermission('community:member-house:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportMemberHouseExcel(@Valid MemberHousePageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<MemberHouseDO> list = memberHouseService.getMemberHousePage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "业主认证信息.xls", "数据", MemberHouseRespVO.class,
BeanUtils.toBean(list, MemberHouseRespVO.class));
}
}

View File

@ -0,0 +1,41 @@
package com.fjrcloud.community.module.community.controller.admin.memberhouse.vo;
import com.fjrcloud.community.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* - VO
*
*/
@Schema(description = "管理后台 - 业主认证信息分页 Request VO")
@Data
public class MemberHousePageReqVO extends PageParam {
/**
* ID
*/
private Long communityId;
/**
*
*/
private String keyword;
/**
*
*/
private Boolean isOwner;
/**
*
*/
private String relationType;
/**
*
*/
private Integer status;
}

View File

@ -0,0 +1,96 @@
package com.fjrcloud.community.module.community.controller.admin.memberhouse.vo;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDate;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 业主认证信息 Response VO")
@Data
@ExcelIgnoreUnannotated
public class MemberHouseRespVO {
@Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "20067")
@ExcelProperty("主键ID")
private Long id;
@Schema(description = "会员ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "24858")
@ExcelProperty("会员ID")
private Long memberId;
@Schema(description = "小区ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "15661")
@ExcelProperty("小区ID")
private Long communityId;
@Schema(description = "小区名称", example = "张三")
@ExcelProperty("小区名称")
private String communityName;
@Schema(description = "房屋id", requiredMode = Schema.RequiredMode.REQUIRED, example = "15336")
@ExcelProperty("房屋id")
private Long houseId;
@Schema(description = "楼号")
@ExcelProperty("楼号")
private String buildingNo;
@Schema(description = "单元号")
@ExcelProperty("单元号")
private String unitNo;
@Schema(description = "门牌号")
@ExcelProperty("门牌号")
private String roomNo;
@Schema(description = "是否产权人0-否1-是)", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("是否产权人0-否1-是)")
private Boolean isOwner;
@Schema(description = "与产权人关系", example = "2")
@ExcelProperty("与产权人关系")
private String relationType;
@Schema(description = "姓名", example = "张三")
@ExcelProperty("姓名")
private String name;
@Schema(description = "手机号")
@ExcelProperty("手机号")
private String mobile;
@Schema(description = "证件类型", example = "2")
@ExcelProperty("证件类型")
private String idType;
@Schema(description = "证件号")
@ExcelProperty("证件号")
private String idNumber;
@Schema(description = "性别0-未知1-男2-女)")
@ExcelProperty("性别0-未知1-男2-女)")
private Integer sex;
@Schema(description = "出生日期")
@ExcelProperty("出生日期")
private LocalDate birthday;
@Schema(description = "附件URL", example = "https://www.fjrcloud.cn")
@ExcelProperty("附件URL")
private String attachmentUrl;
@Schema(description = "认证状态0-待审核1-已认证2-驳回)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@ExcelProperty("认证状态0-待审核1-已认证2-驳回)")
private Integer status;
@Schema(description = "驳回原因", example = "不好")
@ExcelProperty("驳回原因")
private String rejectReason;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

View File

@ -0,0 +1,75 @@
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;
import java.time.LocalDate;
@Schema(description = "管理后台 - 业主认证信息新增/修改 Request VO")
@Data
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不能为空")
private Long memberId;
@Schema(description = "小区ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "15661")
@NotNull(message = "小区ID不能为空")
private Long communityId;
@Schema(description = "小区名称", example = "张三")
private String communityName;
@Schema(description = "房屋id", requiredMode = Schema.RequiredMode.REQUIRED, example = "15336")
@NotNull(message = "房屋id不能为空")
private Long houseId;
@Schema(description = "楼号")
private String buildingNo;
@Schema(description = "单元号")
private String unitNo;
@Schema(description = "门牌号")
private String roomNo;
@Schema(description = "是否产权人0-否1-是)", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "是否产权人0-否1-是)不能为空")
private Boolean isOwner;
@Schema(description = "与产权人关系", example = "2")
private String relationType;
@Schema(description = "姓名", example = "张三")
private String name;
@Schema(description = "手机号")
private String mobile;
@Schema(description = "证件类型", example = "2")
private String idType;
@Schema(description = "证件号")
private String idNumber;
@Schema(description = "性别0-未知1-男2-女)")
private Integer sex;
@Schema(description = "出生日期")
private LocalDate birthday;
@Schema(description = "附件URL", example = "https://www.fjrcloud.cn")
private String attachmentUrl;
@Schema(description = "认证状态0-待审核1-已认证2-驳回)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "认证状态0-待审核1-已认证2-驳回)不能为空")
private Integer status;
@Schema(description = "驳回原因", example = "不好")
private String rejectReason;
}

View File

@ -0,0 +1,37 @@
package com.fjrcloud.community.module.community.controller.app.house;
import com.fjrcloud.community.framework.common.pojo.CommonResult;
import com.fjrcloud.community.module.community.controller.app.house.vo.HouseTreeNodeVO;
import com.fjrcloud.community.module.community.service.house.HouseService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
import static com.fjrcloud.community.framework.common.pojo.CommonResult.success;
@Tag(name = "用户 APP - 房屋信息")
@RestController
@RequestMapping("/community/house")
@Validated
@Slf4j
public class AppHouseController {
@Resource
private HouseService houseService;
@GetMapping("/tree")
@Operation(summary = "获取小区房屋级联树(楼号-单元-房号)")
@Parameter(name = "communityId", description = "小区ID", required = true, example = "1")
public CommonResult<List<HouseTreeNodeVO>> getHouseTree(@RequestParam("communityId") Long communityId) {
return success(houseService.getHouseTreeByCommunityId(communityId));
}
}

View File

@ -0,0 +1,20 @@
package com.fjrcloud.community.module.community.controller.app.house.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
@Schema(description = "APP - 房屋层级树节点 VO")
@Data
public class HouseTreeNodeVO {
@Schema(description = "节点值(用于提交表单)", example = "1")
private String value;
@Schema(description = "节点显示名称(用于下拉展示)", example = "1号楼")
private String label;
@Schema(description = "子节点列表(楼号下是单元,单元下是房号)")
private List<HouseTreeNodeVO> children;
}

View File

@ -0,0 +1,105 @@
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 lombok.*;
import java.time.LocalDate;
/**
* DO
*
* @author
*/
@TableName("comm_member_house")
@KeySequence("comm_member_house_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class MemberHouseDO extends BaseDO {
/**
* ID
*/
@TableId
private Long id;
/**
* ID
*/
private Long memberId;
/**
* ID
*/
private Long communityId;
/**
*
*/
private String communityName;
/**
* id
*/
private Long houseId;
/**
*
*/
private String buildingNo;
/**
*
*/
private String unitNo;
/**
*
*/
private String roomNo;
/**
* 0-1-
*/
private Boolean isOwner;
/**
*
*/
private String relationType;
/**
*
*/
private String name;
/**
*
*/
private String mobile;
/**
*
*/
private String idType;
/**
*
*/
private String idNumber;
/**
* 0-1-2-
*/
private Integer sex;
/**
*
*/
private LocalDate birthday;
/**
* URL
*/
private String attachmentUrl;
/**
* 0-1-2-
*/
private Integer status;
/**
*
*/
private String rejectReason;
}

View File

@ -0,0 +1,38 @@
package com.fjrcloud.community.module.community.dal.mysql.memberhouse;
import com.fjrcloud.community.framework.common.pojo.PageResult;
import com.fjrcloud.community.framework.mybatis.core.mapper.BaseMapperX;
import com.fjrcloud.community.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.fjrcloud.community.module.community.controller.admin.memberhouse.vo.MemberHousePageReqVO;
import com.fjrcloud.community.module.community.dal.dataobject.memberhouse.MemberHouseDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* Mapper
*
* @author
*/
@Mapper
public interface MemberHouseMapper extends BaseMapperX<MemberHouseDO> {
default PageResult<MemberHouseDO> selectPage(MemberHousePageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<MemberHouseDO>()
.eqIfPresent(MemberHouseDO::getCommunityId, reqVO.getCommunityId())
.eqIfPresent(MemberHouseDO::getIsOwner, reqVO.getIsOwner())
.eqIfPresent(MemberHouseDO::getRelationType, reqVO.getRelationType())
.eqIfPresent(MemberHouseDO::getStatus, reqVO.getStatus())
.orderByDesc(MemberHouseDO::getId));
}
default List<MemberHouseDO> selectListByCommunityAndRoom(Long communityId, String buildingNo, String unitNo, String roomNo, String mobile) {
return selectList(new LambdaQueryWrapperX<MemberHouseDO>()
.eq(MemberHouseDO::getCommunityId, communityId)
.eq(MemberHouseDO::getBuildingNo, buildingNo)
.eq(MemberHouseDO::getUnitNo, unitNo)
.eq(MemberHouseDO::getRoomNo, roomNo)
.eq(MemberHouseDO::getMobile, mobile));
}
}

View File

@ -18,4 +18,14 @@ public interface ErrorCodeConstants {
ErrorCode HOUSE_NOT_EXISTS = new ErrorCode(2_001_001_001, "房屋信息主不存在");
ErrorCode HOUSE_IMPORT_LIST_IS_EMPTY = new ErrorCode(2_001_001_002, "导入房屋数据不能为空!");
ErrorCode MEMBER_HOUSE_NOT_EXISTS = new ErrorCode(2_002_001_002, "业主认证信息不存在");
ErrorCode MEMBER_HOUSE_EXISTS = new ErrorCode(2_002_001_003, "该房屋已存在认证记录,请勿重复提交");
ErrorCode MEMBER_HOUSE_AUDITED_NOT_UPDATE = new ErrorCode(2_002_001_004, "已审核通过的认证记录不允许修改");
ErrorCode MEMBER_HOUSE_AUDIT_STATUS_ERROR = new ErrorCode(2_002_001_005, "该记录状态不允许进行审核操作");
ErrorCode MEMBER_HOUSE_REJECT_REASON_REQUIRED = new ErrorCode(2_002_001_006, "驳回时必须填写驳回原因");
}

View File

@ -5,6 +5,7 @@ import com.fjrcloud.community.framework.common.pojo.PageResult;
import com.fjrcloud.community.module.community.controller.admin.house.vo.HouseImportExcelVO;
import com.fjrcloud.community.module.community.controller.admin.house.vo.HousePageReqVO;
import com.fjrcloud.community.module.community.controller.admin.house.vo.HouseSaveReqVO;
import com.fjrcloud.community.module.community.controller.app.house.vo.HouseTreeNodeVO;
import com.fjrcloud.community.module.community.dal.dataobject.house.HouseDO;
import javax.validation.Valid;
@ -71,4 +72,12 @@ public interface HouseService {
*/
ImportResultRespVO importHouseList(List<HouseImportExcelVO> importHouses, boolean isUpdateSupport);
/**
* - -
*
* @param communityId ID
* @return
*/
List<HouseTreeNodeVO> getHouseTreeByCommunityId(Long communityId);
}

View File

@ -5,11 +5,13 @@ import cn.hutool.core.util.StrUtil;
import com.fjrcloud.community.framework.common.pojo.ImportResultRespVO;
import com.fjrcloud.community.framework.common.pojo.PageResult;
import com.fjrcloud.community.framework.common.util.object.BeanUtils;
import com.fjrcloud.community.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.fjrcloud.community.framework.tenant.core.context.TenantContextHolder;
import com.fjrcloud.community.framework.tenant.core.util.TenantUtils;
import com.fjrcloud.community.module.community.controller.admin.house.vo.HouseImportExcelVO;
import com.fjrcloud.community.module.community.controller.admin.house.vo.HousePageReqVO;
import com.fjrcloud.community.module.community.controller.admin.house.vo.HouseSaveReqVO;
import com.fjrcloud.community.module.community.controller.app.house.vo.HouseTreeNodeVO;
import com.fjrcloud.community.module.community.dal.dataobject.community.CommunityDO;
import com.fjrcloud.community.module.community.dal.dataobject.house.HouseDO;
import com.fjrcloud.community.module.community.dal.mysql.community.CommunityMapper;
@ -273,4 +275,60 @@ public class HouseServiceImpl implements HouseService {
return CollUtil.isNotEmpty(houses) ? houses.get(0) : null;
}
@Override
public List<HouseTreeNodeVO> getHouseTreeByCommunityId(Long communityId) {
// 1. 仅查询必要的三个层级字段,提升查询效率
List<HouseDO> houses = houseMapper.selectList(new LambdaQueryWrapperX<HouseDO>()
.eq(HouseDO::getCommunityId, communityId)
.select(HouseDO::getBuildingNo, HouseDO::getUnitNo, HouseDO::getRoomNo)
.isNotNull(HouseDO::getBuildingNo)
.isNotNull(HouseDO::getRoomNo));
if (CollUtil.isEmpty(houses)) {
return Collections.emptyList();
}
// 2. 内存聚合:构建 楼号 -> 单元号 -> 房号 的嵌套 Map
Map<String, Map<String, List<String>>> buildingUnitMap = new HashMap<>();
for (HouseDO house : houses) {
String buildingNo = StrUtil.blankToDefault(house.getBuildingNo(), "其他");
String unitNo = StrUtil.blankToDefault(house.getUnitNo(), "默认单元");
String roomNo = house.getRoomNo();
buildingUnitMap.computeIfAbsent(buildingNo, k -> new HashMap<>())
.computeIfAbsent(unitNo, k -> new ArrayList<>())
.add(roomNo);
}
// 3. 转换为树形 VO 结构
List<HouseTreeNodeVO> tree = new ArrayList<>();
buildingUnitMap.keySet().stream().sorted().forEach(buildingNo -> {
HouseTreeNodeVO buildingNode = new HouseTreeNodeVO();
buildingNode.setValue(buildingNo);
buildingNode.setLabel(buildingNo + "号楼");
buildingNode.setChildren(new ArrayList<>());
Map<String, List<String>> unitMap = buildingUnitMap.get(buildingNo);
unitMap.keySet().stream().sorted().forEach(unitNo -> {
HouseTreeNodeVO unitNode = new HouseTreeNodeVO();
unitNode.setValue(unitNo);
unitNode.setLabel(unitNo + "单元");
unitNode.setChildren(new ArrayList<>());
// 房号去重并排序
unitMap.get(unitNo).stream().distinct().sorted().forEach(roomNo -> {
HouseTreeNodeVO roomNode = new HouseTreeNodeVO();
roomNode.setValue(roomNo);
roomNode.setLabel(roomNo);
unitNode.getChildren().add(roomNode);
});
buildingNode.getChildren().add(unitNode);
});
tree.add(buildingNode);
});
return tree;
}
}

View File

@ -0,0 +1,84 @@
package com.fjrcloud.community.module.community.service.memberhouse;
import com.fjrcloud.community.framework.common.pojo.PageResult;
import com.fjrcloud.community.module.community.controller.admin.memberhouse.vo.MemberHousePageReqVO;
import com.fjrcloud.community.module.community.controller.admin.memberhouse.vo.MemberHouseSaveReqVO;
import com.fjrcloud.community.module.community.dal.dataobject.memberhouse.MemberHouseDO;
import javax.validation.Valid;
import java.util.List;
/**
* Service
*
* @author
*/
public interface MemberHouseService {
/**
*
*
* @param createReqVO
* @return
*/
Long createMemberHouse(@Valid MemberHouseSaveReqVO createReqVO);
/**
*
*
* @param updateReqVO
*/
void updateMemberHouse(@Valid MemberHouseSaveReqVO updateReqVO);
/**
*
*
* @param id
*/
void deleteMemberHouse(Long id);
/**
*
*
* @param ids
*/
void deleteMemberHouseListByIds(List<Long> ids);
/**
*
*
* @param id
* @return
*/
MemberHouseDO getMemberHouse(Long id);
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<MemberHouseDO> getMemberHousePage(MemberHousePageReqVO pageReqVO);
/**
*
*
* @param id ID
* @param status 1-2-
* @param rejectReason
*/
void auditMemberHouse(Long id, Integer status, String rejectReason);
/**
*
*
* @param id ID
*/
void unbindMemberHouse(Long id);
/**
*
*/
MemberHouseDO validateMemberHouseExists(Long id);
}

View File

@ -0,0 +1,149 @@
package com.fjrcloud.community.module.community.service.memberhouse;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.fjrcloud.community.framework.common.pojo.PageResult;
import com.fjrcloud.community.framework.common.util.object.BeanUtils;
import com.fjrcloud.community.module.community.controller.admin.memberhouse.vo.MemberHousePageReqVO;
import com.fjrcloud.community.module.community.controller.admin.memberhouse.vo.MemberHouseSaveReqVO;
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 lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.util.List;
import static com.fjrcloud.community.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.fjrcloud.community.module.community.enums.ErrorCodeConstants.*;
/**
* Service
*
* @author
*/
@Service
@Validated
@Slf4j
public class MemberHouseServiceImpl implements MemberHouseService {
@Resource
private MemberHouseMapper memberHouseMapper;
@Resource
private CommunityService communityService;
@Override
@Transactional(rollbackFor = Exception.class)
public Long createMemberHouse(MemberHouseSaveReqVO createReqVO) {
// 1. 校验小区是否存在
if (communityService.getCommunity(createReqVO.getCommunityId()) == null) {
throw exception(COMMUNITY_NOT_EXISTS);
}
// 2. 校验重复认证:同一小区、同一房屋、同一手机号不能重复认证
List<MemberHouseDO> existList = memberHouseMapper.selectListByCommunityAndRoom(
createReqVO.getCommunityId(),
createReqVO.getBuildingNo(),
createReqVO.getUnitNo(),
createReqVO.getRoomNo(),
createReqVO.getMobile());
if (CollUtil.isNotEmpty(existList)) {
throw exception(MEMBER_HOUSE_EXISTS);
}
// 3. 插入数据,默认状态为待审核 (0)
MemberHouseDO memberHouse = BeanUtils.toBean(createReqVO, MemberHouseDO.class);
memberHouse.setStatus(0);
memberHouseMapper.insert(memberHouse);
return memberHouse.getId();
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateMemberHouse(MemberHouseSaveReqVO updateReqVO) {
// 校验存在
MemberHouseDO existHouse = validateMemberHouseExists(updateReqVO.getId());
// 如果状态不是待审核或驳回,不允许修改基础信息(视业务规则而定)
if (existHouse.getStatus().equals(1)) {
throw exception(MEMBER_HOUSE_AUDITED_NOT_UPDATE);
}
// 更新
MemberHouseDO updateObj = BeanUtils.toBean(updateReqVO, MemberHouseDO.class);
memberHouseMapper.updateById(updateObj);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteMemberHouse(Long id) {
// 校验存在
validateMemberHouseExists(id);
// 删除
memberHouseMapper.deleteById(id);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteMemberHouseListByIds(List<Long> ids) {
memberHouseMapper.deleteByIds(ids);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void auditMemberHouse(Long id, Integer status, String rejectReason) {
// 1. 校验记录存在
MemberHouseDO house = validateMemberHouseExists(id);
// 2. 校验状态:只有待审核 (0) 才能进行审核
if (house.getStatus() != 0) {
throw exception(MEMBER_HOUSE_AUDIT_STATUS_ERROR);
}
// 3. 如果是驳回,必须填写驳回原因
if (status == 2 && StrUtil.isBlank(rejectReason)) {
throw exception(MEMBER_HOUSE_REJECT_REASON_REQUIRED);
}
// 4. 更新审核状态、审核人、审核时间
MemberHouseDO updateObj = new MemberHouseDO();
updateObj.setId(id);
updateObj.setStatus(status);
updateObj.setRejectReason(rejectReason);
memberHouseMapper.updateById(updateObj);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void unbindMemberHouse(Long id) {
// 解除绑定即删除该认证记录
validateMemberHouseExists(id);
memberHouseMapper.deleteById(id);
}
@Override
public MemberHouseDO validateMemberHouseExists(Long id) {
MemberHouseDO memberHouse = memberHouseMapper.selectById(id);
if (memberHouse == null) {
throw exception(MEMBER_HOUSE_NOT_EXISTS);
}
return memberHouse;
}
@Override
public MemberHouseDO getMemberHouse(Long id) {
return memberHouseMapper.selectById(id);
}
@Override
public PageResult<MemberHouseDO> getMemberHousePage(MemberHousePageReqVO pageReqVO) {
return memberHouseMapper.selectPage(pageReqVO);
}
}

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.fjrcloud.community.module.community.dal.mysql.memberhouse.MemberHouseMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.fjrcloud.cn/MyBatis/x-plugins/
-->
</mapper>