Эх сурвалжийг харах

update 维修以下的文件完成

tjf 2 сар өмнө
parent
commit
b4f8e972da

+ 3 - 0
ruoyi-admin/src/main/resources/i18n/messages.properties

@@ -63,3 +63,6 @@ tenant.expired=\u5BF9\u4E0D\u8D77\uFF0C\u60A8\u7684\u79DF\u6237\u5DF2\u8FC7\u671
 user.sms.error=\u77ED\u4FE1\u9A8C\u8BC1\u7801\u9519\u8BEF
 user.sms.expire=\u77ED\u4FE1\u9A8C\u8BC1\u7801\u5DF2\u5931\u6548
 staff.manage.error=\u5458\u5DE5\u4FE1\u606F\u5DF2\u5B58\u5728
+##\u5C45\u4F4F\u4EBA\u5458
+resident.register.save.error=\u8BA4\u8BC1\u4EBA\u5458 {0} \u5931\u8D25\uFF0C\u5C45\u4F4F\u4EBA\u5458\u5DF2\u5B58\u5728
+plate.number.error=\u8F66\u724C\u53F7{0} \u4E0D\u5408\u89C4

+ 5 - 0
ruoyi-admin/src/main/resources/i18n/messages_en_US.properties

@@ -59,5 +59,10 @@ tenant.number.not.blank=Tenant number cannot be blank
 tenant.not.exists=Sorry, your tenant does not exist. Please contact the administrator
 tenant.blocked=Sorry, your tenant is disabled. Please contact the administrator
 tenant.expired=Sorry, your tenant has expired. Please contact the administrator.
+##\u77ED\u4FE1\u9A8C\u8BC1\u7801
 user.sms.error=SmsCaptcha error
 user.sms.expire=SmsCaptcha invalid
+staff.manage.error=staff info exist
+##\u5C45\u4F4F\u4EBA\u5458
+resident.register.save.error=authentication {0} error\uFF0Cresident info exist
+plate.number.error=plateNumber{0} error

+ 68 - 61
ruoyi-admin/src/main/resources/i18n/messages_zh_CN.properties

@@ -1,61 +1,68 @@
-#错误消息
-not.null=* 必须填写
-user.jcaptcha.error=验证码错误
-user.jcaptcha.expire=验证码已失效
-user.not.exists=对不起, 您的账号:{0} 不存在.
-user.password.not.match=用户不存在/密码错误
-user.password.retry.limit.count=密码输入错误{0}次
-user.password.retry.limit.exceed=密码输入错误{0}次,帐户锁定{1}分钟
-user.password.delete=对不起,您的账号:{0} 已被删除
-user.blocked=对不起,您的账号:{0} 已禁用,请联系管理员
-role.blocked=角色已封禁,请联系管理员
-user.logout.success=退出成功
-length.not.valid=长度必须在{min}到{max}个字符之间
-user.username.not.blank=用户名不能为空
-user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成,且必须以非数字开头
-user.username.length.valid=账户长度必须在{min}到{max}个字符之间
-user.password.not.blank=用户密码不能为空
-user.password.length.valid=用户密码长度必须在{min}到{max}个字符之间
-user.password.not.valid=* 5-50个字符
-user.email.not.valid=邮箱格式错误
-user.email.not.blank=邮箱不能为空
-user.phonenumber.not.blank=用户手机号不能为空
-user.mobile.phone.number.not.valid=手机号格式错误
-user.login.success=登录成功
-user.register.success=注册成功
-user.register.save.error=保存用户 {0} 失败,注册账号已存在
-user.register.error=注册失败,请联系系统管理人员
-user.notfound=请重新登录
-user.forcelogout=管理员强制退出,请重新登录
-user.unknown.error=未知错误,请重新登录
-auth.grant.type.error=认证权限类型错误
-auth.grant.type.blocked=认证权限类型已禁用
-auth.grant.type.not.blank=认证权限类型不能为空
-auth.clientid.not.blank=认证客户端id不能为空
-##文件上传消息
-upload.exceed.maxSize=上传的文件大小超出限制的文件大小!<br/>允许的文件最大大小是:{0}MB!
-upload.filename.exceed.length=上传的文件名最长{0}个字符
-##权限
-no.permission=您没有数据的权限,请联系管理员添加权限 [{0}]
-no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}]
-no.update.permission=您没有修改数据的权限,请联系管理员添加权限 [{0}]
-no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}]
-no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}]
-no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}]
-repeat.submit.message=不允许重复提交,请稍候再试
-rate.limiter.message=访问过于频繁,请稍候再试
-sms.code.not.blank=短信验证码不能为空
-sms.code.retry.limit.count=短信验证码输入错误{0}次
-sms.code.retry.limit.exceed=短信验证码输入错误{0}次,帐户锁定{1}分钟
-email.code.not.blank=邮箱验证码不能为空
-email.code.retry.limit.count=邮箱验证码输入错误{0}次
-email.code.retry.limit.exceed=邮箱验证码输入错误{0}次,帐户锁定{1}分钟
-xcx.code.not.blank=小程序[code]不能为空
-social.source.not.blank=第三方登录平台[source]不能为空
-social.code.not.blank=第三方登录平台[code]不能为空
-social.state.not.blank=第三方登录平台[state]不能为空
-##租户
-tenant.number.not.blank=租户编号不能为空
-tenant.not.exists=对不起, 您的租户不存在,请联系管理员
-tenant.blocked=对不起,您的租户已禁用,请联系管理员
-tenant.expired=对不起,您的租户已过期,请联系管理员
+#\u9519\u8BEF\u6D88\u606F
+not.null=* \u5FC5\u987B\u586B\u5199
+user.jcaptcha.error=\u9A8C\u8BC1\u7801\u9519\u8BEF
+user.jcaptcha.expire=\u9A8C\u8BC1\u7801\u5DF2\u5931\u6548
+user.not.exists=\u5BF9\u4E0D\u8D77, \u60A8\u7684\u8D26\u53F7\uFF1A{0} \u4E0D\u5B58\u5728.
+user.password.not.match=\u7528\u6237\u4E0D\u5B58\u5728/\u5BC6\u7801\u9519\u8BEF
+user.password.retry.limit.count=\u5BC6\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21
+user.password.retry.limit.exceed=\u5BC6\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21\uFF0C\u5E10\u6237\u9501\u5B9A{1}\u5206\u949F
+user.password.delete=\u5BF9\u4E0D\u8D77\uFF0C\u60A8\u7684\u8D26\u53F7\uFF1A{0} \u5DF2\u88AB\u5220\u9664
+user.blocked=\u5BF9\u4E0D\u8D77\uFF0C\u60A8\u7684\u8D26\u53F7\uFF1A{0} \u5DF2\u7981\u7528\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458
+role.blocked=\u89D2\u8272\u5DF2\u5C01\u7981\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458
+user.logout.success=\u9000\u51FA\u6210\u529F
+length.not.valid=\u957F\u5EA6\u5FC5\u987B\u5728{min}\u5230{max}\u4E2A\u5B57\u7B26\u4E4B\u95F4
+user.username.not.blank=\u7528\u6237\u540D\u4E0D\u80FD\u4E3A\u7A7A
+user.username.not.valid=* 2\u523020\u4E2A\u6C49\u5B57\u3001\u5B57\u6BCD\u3001\u6570\u5B57\u6216\u4E0B\u5212\u7EBF\u7EC4\u6210\uFF0C\u4E14\u5FC5\u987B\u4EE5\u975E\u6570\u5B57\u5F00\u5934
+user.username.length.valid=\u8D26\u6237\u957F\u5EA6\u5FC5\u987B\u5728{min}\u5230{max}\u4E2A\u5B57\u7B26\u4E4B\u95F4
+user.password.not.blank=\u7528\u6237\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A
+user.password.length.valid=\u7528\u6237\u5BC6\u7801\u957F\u5EA6\u5FC5\u987B\u5728{min}\u5230{max}\u4E2A\u5B57\u7B26\u4E4B\u95F4
+user.password.not.valid=* 5-50\u4E2A\u5B57\u7B26
+user.email.not.valid=\u90AE\u7BB1\u683C\u5F0F\u9519\u8BEF
+user.email.not.blank=\u90AE\u7BB1\u4E0D\u80FD\u4E3A\u7A7A
+user.phonenumber.not.blank=\u7528\u6237\u624B\u673A\u53F7\u4E0D\u80FD\u4E3A\u7A7A
+user.mobile.phone.number.not.valid=\u624B\u673A\u53F7\u683C\u5F0F\u9519\u8BEF
+user.login.success=\u767B\u5F55\u6210\u529F
+user.register.success=\u6CE8\u518C\u6210\u529F
+user.register.save.error=\u4FDD\u5B58\u7528\u6237 {0} \u5931\u8D25\uFF0C\u6CE8\u518C\u8D26\u53F7\u5DF2\u5B58\u5728
+user.register.error=\u6CE8\u518C\u5931\u8D25\uFF0C\u8BF7\u8054\u7CFB\u7CFB\u7EDF\u7BA1\u7406\u4EBA\u5458
+user.notfound=\u8BF7\u91CD\u65B0\u767B\u5F55
+user.forcelogout=\u7BA1\u7406\u5458\u5F3A\u5236\u9000\u51FA\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55
+user.unknown.error=\u672A\u77E5\u9519\u8BEF\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55
+auth.grant.type.error=\u8BA4\u8BC1\u6743\u9650\u7C7B\u578B\u9519\u8BEF
+auth.grant.type.blocked=\u8BA4\u8BC1\u6743\u9650\u7C7B\u578B\u5DF2\u7981\u7528
+auth.grant.type.not.blank=\u8BA4\u8BC1\u6743\u9650\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A
+auth.clientid.not.blank=\u8BA4\u8BC1\u5BA2\u6237\u7AEFid\u4E0D\u80FD\u4E3A\u7A7A
+##\u6587\u4EF6\u4E0A\u4F20\u6D88\u606F
+upload.exceed.maxSize=\u4E0A\u4F20\u7684\u6587\u4EF6\u5927\u5C0F\u8D85\u51FA\u9650\u5236\u7684\u6587\u4EF6\u5927\u5C0F\uFF01<br/>\u5141\u8BB8\u7684\u6587\u4EF6\u6700\u5927\u5927\u5C0F\u662F\uFF1A{0}MB\uFF01
+upload.filename.exceed.length=\u4E0A\u4F20\u7684\u6587\u4EF6\u540D\u6700\u957F{0}\u4E2A\u5B57\u7B26
+##\u6743\u9650
+no.permission=\u60A8\u6CA1\u6709\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
+no.create.permission=\u60A8\u6CA1\u6709\u521B\u5EFA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
+no.update.permission=\u60A8\u6CA1\u6709\u4FEE\u6539\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
+no.delete.permission=\u60A8\u6CA1\u6709\u5220\u9664\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
+no.export.permission=\u60A8\u6CA1\u6709\u5BFC\u51FA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
+no.view.permission=\u60A8\u6CA1\u6709\u67E5\u770B\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
+repeat.submit.message=\u4E0D\u5141\u8BB8\u91CD\u590D\u63D0\u4EA4\uFF0C\u8BF7\u7A0D\u5019\u518D\u8BD5
+rate.limiter.message=\u8BBF\u95EE\u8FC7\u4E8E\u9891\u7E41\uFF0C\u8BF7\u7A0D\u5019\u518D\u8BD5
+sms.code.not.blank=\u77ED\u4FE1\u9A8C\u8BC1\u7801\u4E0D\u80FD\u4E3A\u7A7A
+sms.code.retry.limit.count=\u77ED\u4FE1\u9A8C\u8BC1\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21
+sms.code.retry.limit.exceed=\u77ED\u4FE1\u9A8C\u8BC1\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21\uFF0C\u5E10\u6237\u9501\u5B9A{1}\u5206\u949F
+email.code.not.blank=\u90AE\u7BB1\u9A8C\u8BC1\u7801\u4E0D\u80FD\u4E3A\u7A7A
+email.code.retry.limit.count=\u90AE\u7BB1\u9A8C\u8BC1\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21
+email.code.retry.limit.exceed=\u90AE\u7BB1\u9A8C\u8BC1\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21\uFF0C\u5E10\u6237\u9501\u5B9A{1}\u5206\u949F
+xcx.code.not.blank=\u5C0F\u7A0B\u5E8F[code]\u4E0D\u80FD\u4E3A\u7A7A
+social.source.not.blank=\u7B2C\u4E09\u65B9\u767B\u5F55\u5E73\u53F0[source]\u4E0D\u80FD\u4E3A\u7A7A
+social.code.not.blank=\u7B2C\u4E09\u65B9\u767B\u5F55\u5E73\u53F0[code]\u4E0D\u80FD\u4E3A\u7A7A
+social.state.not.blank=\u7B2C\u4E09\u65B9\u767B\u5F55\u5E73\u53F0[state]\u4E0D\u80FD\u4E3A\u7A7A
+##\u79DF\u6237
+tenant.number.not.blank=\u79DF\u6237\u7F16\u53F7\u4E0D\u80FD\u4E3A\u7A7A
+tenant.not.exists=\u5BF9\u4E0D\u8D77, \u60A8\u7684\u79DF\u6237\u4E0D\u5B58\u5728\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458
+tenant.blocked=\u5BF9\u4E0D\u8D77\uFF0C\u60A8\u7684\u79DF\u6237\u5DF2\u7981\u7528\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458
+tenant.expired=\u5BF9\u4E0D\u8D77\uFF0C\u60A8\u7684\u79DF\u6237\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458
+##\u77ED\u4FE1\u9A8C\u8BC1\u7801
+user.sms.error=\u77ED\u4FE1\u9A8C\u8BC1\u7801\u9519\u8BEF
+user.sms.expire=\u77ED\u4FE1\u9A8C\u8BC1\u7801\u5DF2\u5931\u6548
+staff.manage.error=\u5458\u5DE5\u4FE1\u606F\u5DF2\u5B58\u5728
+##\u5C45\u4F4F\u4EBA\u5458
+resident.register.save.error=\u8BA4\u8BC1\u4EBA\u5458 {0} \u5931\u8D25\uFF0C\u5C45\u4F4F\u4EBA\u5458\u5DF2\u5B58\u5728
+plate.number.error=\u8F66\u724C\u53F7{0} \u4E0D\u5408\u89C4

+ 5 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/runner/SystemApplicationRunner.java

@@ -1,3 +1,4 @@
+/*
 package org.dromara.system.runner;
 
 import org.dromara.system.service.ISysOssConfigService;
@@ -7,11 +8,13 @@ import org.springframework.boot.ApplicationArguments;
 import org.springframework.boot.ApplicationRunner;
 import org.springframework.stereotype.Component;
 
+*/
 /**
  * 初始化 system 模块对应业务数据
  *
  * @author Lion Li
- */
+ *//*
+
 @Slf4j
 @RequiredArgsConstructor
 @Component
@@ -26,3 +29,4 @@ public class SystemApplicationRunner implements ApplicationRunner {
     }
 
 }
+*/

+ 10 - 0
ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/controller/residentInfo/ResidentInfoController.java

@@ -46,6 +46,16 @@ public class ResidentInfoController extends BaseController {
         return residentInfoService.queryPageList(bo, pageQuery);
     }
 
+    /**
+     * 查询居住人员党员数量
+     */
+    @SaCheckPermission("wuYe:residentInfo:count")
+    @GetMapping("/count")
+    public R<Long> count(ResidentInfoBo residentInfo) {
+        return residentInfoService.selectCount(residentInfo);
+
+    }
+
     /**
      * 导出居住人员信息,存储居住人员的详细信息列表
      */

+ 4 - 1
ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/domain/residentInfo/ResidentInfo.java

@@ -127,5 +127,8 @@ public class ResidentInfo extends TenantEntity {
      */
     private String remark;
 
-
+    /**
+     * 审核状态 1:未审核 2:审核通过 3:审核未通过
+     */
+    private String examine;
 }

+ 5 - 2
ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/domain/residentInfo/bo/ResidentInfoBo.java

@@ -29,7 +29,7 @@ public class ResidentInfoBo extends BaseEntity {
     /**
      * 关联房屋信息表的house_id,标识居住人员所属房屋
      */
-    @NotNull(message = "关联房屋信息表的house_id,标识居住人员所属房屋不能为空", groups = { AddGroup.class, EditGroup.class })
+    @NotNull(message = "关联房屋信息表的house_id", groups = { AddGroup.class, EditGroup.class })
     private Long houseId;
 
     /**
@@ -126,6 +126,9 @@ public class ResidentInfoBo extends BaseEntity {
      * 备注
      */
     private String remark;
-
+    /**
+     * 审核状态 1:未审核 2:审核通过 3:审核未通过
+     */
+    private String examine;
 
 }

+ 4 - 1
ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/domain/residentInfo/vo/ResidentInfoVo.java

@@ -151,5 +151,8 @@ public class ResidentInfoVo implements Serializable {
     @ExcelProperty(value = "备注")
     private String remark;
 
-
+    /**
+     * 审核状态 1:未审核 2:审核通过 3:审核未通过
+     */
+    private String examine;
 }

+ 7 - 0
ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/service/IResidentInfoService.java

@@ -1,5 +1,6 @@
 package org.dromara.service;
 
+import org.dromara.common.core.domain.R;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.domain.residentInfo.bo.ResidentInfoBo;
@@ -26,6 +27,7 @@ public interface IResidentInfoService {
 
     /**
      * 根据userId获取居住人员信息
+     *
      * @param userId
      * @return
      */
@@ -72,4 +74,9 @@ public interface IResidentInfoService {
      * @return 是否删除成功
      */
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+    /**
+     * 查询居住人员党员数量
+     */
+    R<Long> selectCount(ResidentInfoBo residentInfo);
 }

+ 25 - 0
ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/service/impl/ProprietorCarServiceImpl.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.exception.user.UserException;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
@@ -18,6 +19,8 @@ import org.springframework.stereotype.Service;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * 业主车辆管理Service业务层处理
@@ -107,6 +110,24 @@ public class ProprietorCarServiceImpl implements IProprietorCarService {
         return flag;
     }
 
+    /**
+     * 判断车牌号是否合规
+     *
+     * @param plateNumber
+     * @return
+     */
+    public static boolean checkPlateNumber(String plateNumber) {
+        String regEx = "^(([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z](([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))|([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳使领]))$";
+        // 编译正则表达式
+        //Pattern pattern = Pattern.compile(regEx);
+        // 忽略大小写的写法
+        Pattern pat = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE);
+
+        Matcher matcher = pat.matcher(plateNumber);
+        // 字符串是否与正则表达式相匹配
+        return matcher.matches();
+    }
+
     /**
      * 修改业主车辆管理
      *
@@ -125,6 +146,10 @@ public class ProprietorCarServiceImpl implements IProprietorCarService {
      */
     private void validEntityBeforeSave(ProprietorCar entity){
         //TODO 做一些数据校验,如唯一约束
+        String plateNumber = entity.getPlateNumber();
+        if (!checkPlateNumber(plateNumber)){
+           throw new UserException("plate.number.error",plateNumber);
+        }
     }
 
     /**

+ 45 - 4
ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/service/impl/ResidentInfoServiceImpl.java

@@ -4,10 +4,13 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.exception.user.UserException;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.tenant.helper.TenantHelper;
 import org.dromara.domain.residentInfo.ResidentInfo;
 import org.dromara.domain.residentInfo.bo.ResidentInfoBo;
 import org.dromara.domain.residentInfo.vo.ResidentInfoVo;
@@ -38,12 +41,13 @@ public class ResidentInfoServiceImpl implements IResidentInfoService {
      * @return 居住人员信息,存储居住人员的详细信息
      */
     @Override
-    public ResidentInfoVo queryById(Long residentId){
+    public ResidentInfoVo queryById(Long residentId) {
         return baseMapper.selectVoById(residentId);
     }
 
     /**
      * 根据userId获取居住人员信息
+     *
      * @param userId
      * @return
      */
@@ -111,9 +115,15 @@ public class ResidentInfoServiceImpl implements IResidentInfoService {
      * @return 是否新增成功
      */
     @Override
+
     public Boolean insertByBo(ResidentInfoBo bo) {
         ResidentInfo add = MapstructUtils.convert(bo, ResidentInfo.class);
         validEntityBeforeSave(add);
+        //新增居住人员需要等待管理员审核
+        //根据租户id houseId 手机号查询该居住人员是否存在
+       if (checkIdCardUnique(add)){
+           throw new UserException("resident.register.save.error", add.getResidentName());
+       }
         boolean flag = baseMapper.insert(add) > 0;
         if (flag) {
             bo.setResidentId(add.getResidentId());
@@ -131,14 +141,36 @@ public class ResidentInfoServiceImpl implements IResidentInfoService {
     public Boolean updateByBo(ResidentInfoBo bo) {
         ResidentInfo update = MapstructUtils.convert(bo, ResidentInfo.class);
         validEntityBeforeSave(update);
+        //根据租户id houseId 手机号查询该居住人员是否存在
+        if (checkIdCardUnique(update)){
+            throw new UserException("resident.register.save.error", update.getResidentName());
+        }
         return baseMapper.updateById(update) > 0;
     }
 
     /**
      * 保存前的数据校验
      */
-    private void validEntityBeforeSave(ResidentInfo entity){
-        //TODO 做一些数据校验,如唯一约束
+    private void validEntityBeforeSave(ResidentInfo entity) {
+    }
+
+    /**
+     * 校验身份证号码是否唯一
+     *
+     * @param entity 住户信息
+     * @return 结果
+     */
+
+    public boolean checkIdCardUnique(ResidentInfo entity) {
+        boolean exit = TenantHelper.ignore(() -> {
+            return
+                baseMapper.exists(new LambdaQueryWrapper<ResidentInfo>()
+                    .eq(entity.getHouseId() != null, ResidentInfo::getHouseId, entity.getHouseId())
+                    .eq(entity.getTenantId() != null, ResidentInfo::getTenantId, entity.getTenantId())
+                    .eq(StringUtils.isNotBlank(entity.getResidentPhone()), ResidentInfo::getResidentPhone, entity.getResidentPhone())
+                );
+        });
+        return exit;
     }
 
     /**
@@ -150,9 +182,18 @@ public class ResidentInfoServiceImpl implements IResidentInfoService {
      */
     @Override
     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
-        if(isValid){
+        if (isValid) {
             //TODO 做一些业务上的校验,判断是否需要校验
         }
         return baseMapper.deleteByIds(ids) > 0;
     }
+
+    /**
+     * 查询居住人员党员数量
+     */
+    @Override
+    public R<Long> selectCount(ResidentInfoBo residentInfo) {
+        ResidentInfo update = MapstructUtils.convert(residentInfo, ResidentInfo.class);
+        return R.ok(baseMapper.selectCount(new LambdaQueryWrapper<ResidentInfo>().eq(ResidentInfo::getResidentAppearance, update.getResidentAppearance())));
+    }
 }

+ 2 - 2
ruoyi-modules/ruoyi-wuye/src/main/resources/mapper/wuYe/ResidentInfoMapper.xml

@@ -9,8 +9,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <sql id="selectResidentInfoVo">
-        select  s.resident_id,s.tenant_id,s.user_id,s.house_id,s.detailed_address,s.resident_name,s.resident_id_card
-             ,s.resident_birthday,s.resident_phone,s.resident_gender,s.resident_relationship,s.is_householder,s.is_tenant,s.resident_employer,s.special_type
+        select  s.resident_id,s.tenant_id,s.user_id,s.detailed_address,s.resident_name,s.resident_id_card
+             ,s.resident_birthday,s.resident_phone,s.resident_gender,s.resident_relationship,s.is_householder,s.is_tenant,s.resident_employer,s.special_type,
              s.resident_hobby,s.resident_appearance,s.id_card_front,s.id_card_back,s.id_card_address,s.face_photo,s.create_time
         from resident_info s
     </sql>