新增会员房屋管理
parent
7e06b0f6fd
commit
27ee416c67
|
|
@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
||||
}
|
||||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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, "驳回时必须填写驳回原因");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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>
|
||||
Loading…
Reference in New Issue