|
@@ -1,27 +1,47 @@
|
|
|
package org.dromara.service.impl;
|
|
|
|
|
|
+import cn.dev33.satoken.secure.BCrypt;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
+import org.dromara.common.core.config.BoManConfig;
|
|
|
import org.dromara.common.core.domain.R;
|
|
|
+import org.dromara.common.core.enums.UserType;
|
|
|
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.satoken.utils.LoginHelper;
|
|
|
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;
|
|
|
import org.dromara.mapper.ResidentInfoMapper;
|
|
|
import org.dromara.service.IResidentInfoService;
|
|
|
+import org.dromara.system.domain.SysRole;
|
|
|
+import org.dromara.system.domain.SysUser;
|
|
|
+import org.dromara.system.domain.SysUserRole;
|
|
|
+import org.dromara.system.domain.SysUserTenant;
|
|
|
+import org.dromara.system.domain.bo.SysUserBo;
|
|
|
+import org.dromara.system.domain.vo.SysRoleVo;
|
|
|
+import org.dromara.system.domain.vo.SysUserVo;
|
|
|
+import org.dromara.system.mapper.SysRoleMapper;
|
|
|
+import org.dromara.system.mapper.SysUserMapper;
|
|
|
+import org.dromara.system.mapper.SysUserRoleMapper;
|
|
|
+import org.dromara.system.mapper.SysUserTenantMapper;
|
|
|
+import org.dromara.system.service.ISysUserService;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.util.Collection;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
|
|
|
+import static org.dromara.common.core.constant.Constants.*;
|
|
|
+
|
|
|
/**
|
|
|
* 居住人员信息,存储居住人员的详细信息Service业务层处理
|
|
|
*
|
|
@@ -33,6 +53,11 @@ import java.util.Map;
|
|
|
public class ResidentInfoServiceImpl implements IResidentInfoService {
|
|
|
|
|
|
private final ResidentInfoMapper baseMapper;
|
|
|
+ private final SysUserTenantMapper sysUserTenantMapper;
|
|
|
+ private final SysUserMapper sysUserMapper;
|
|
|
+ private final ISysUserService userService;
|
|
|
+ private final SysRoleMapper sysRoleMapper;
|
|
|
+ private final SysUserRoleMapper userRoleMapper;
|
|
|
|
|
|
/**
|
|
|
* 查询居住人员信息,存储居住人员的详细信息
|
|
@@ -45,6 +70,19 @@ public class ResidentInfoServiceImpl implements IResidentInfoService {
|
|
|
return baseMapper.selectVoById(residentId);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取居住人员信息 过滤租户
|
|
|
+ *
|
|
|
+ * @param residentId 主键
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public ResidentInfoVo getAuthenticationInfo(Long residentId) {
|
|
|
+ return TenantHelper.ignore(() -> {
|
|
|
+ return
|
|
|
+ baseMapper.selectVoById(residentId);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 根据userId获取居住人员信息
|
|
|
*
|
|
@@ -70,6 +108,19 @@ public class ResidentInfoServiceImpl implements IResidentInfoService {
|
|
|
return TableDataInfo.build(result);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 查询居住人员需要认证的列表
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public TableDataInfo<ResidentInfoVo> listAuthentication(ResidentInfoBo bo, PageQuery pageQuery) {
|
|
|
+ LambdaQueryWrapper<ResidentInfo> lqw = buildQueryWrapper(bo);
|
|
|
+ Page<ResidentInfoVo> result = TenantHelper.ignore(() -> {
|
|
|
+ return
|
|
|
+ baseMapper.selectVoPage(pageQuery.build(), lqw);
|
|
|
+ });
|
|
|
+ return TableDataInfo.build(result);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 查询符合条件的居住人员信息,存储居住人员的详细信息列表
|
|
|
*
|
|
@@ -105,25 +156,104 @@ public class ResidentInfoServiceImpl implements IResidentInfoService {
|
|
|
lqw.eq(StringUtils.isNotBlank(bo.getIdCardBack()), ResidentInfo::getIdCardBack, bo.getIdCardBack());
|
|
|
lqw.eq(StringUtils.isNotBlank(bo.getIdCardAddress()), ResidentInfo::getIdCardAddress, bo.getIdCardAddress());
|
|
|
lqw.eq(StringUtils.isNotBlank(bo.getFacePhoto()), ResidentInfo::getFacePhoto, bo.getFacePhoto());
|
|
|
+ lqw.eq(StringUtils.isNotBlank(bo.getExamine()), ResidentInfo::getExamine, bo.getExamine());
|
|
|
return lqw;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 新增居住人员信息,存储居住人员的详细信息
|
|
|
+ * 新增居住人员提交认证信息
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Boolean insertByBo(ResidentInfoBo bo) {
|
|
|
+ ResidentInfo add = MapstructUtils.convert(bo, ResidentInfo.class);
|
|
|
+ //根据租户id houseId 手机号查询该居住人员是否存在
|
|
|
+ if (checkIdCardUnique(add)) {
|
|
|
+ throw new UserException("resident.register.save.error", add.getResidentName());
|
|
|
+ }
|
|
|
+ add.setUserId(LoginHelper.getUserId());
|
|
|
+ boolean flag = baseMapper.insert(add) > 0;
|
|
|
+ if (flag) {
|
|
|
+ bo.setResidentId(add.getResidentId());
|
|
|
+ }
|
|
|
+ return flag;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 管理员新增居住人员信息,默认就审核过
|
|
|
*
|
|
|
* @param bo 居住人员信息,存储居住人员的详细信息
|
|
|
* @return 是否新增成功
|
|
|
*/
|
|
|
@Override
|
|
|
- public Boolean insertByBo(ResidentInfoBo bo) {
|
|
|
+ public Boolean addResidentInfo(ResidentInfoBo bo) {
|
|
|
ResidentInfo add = MapstructUtils.convert(bo, ResidentInfo.class);
|
|
|
- validEntityBeforeSave(add);
|
|
|
- //新增居住人员需要等待管理员审核
|
|
|
+ String tenantId = add.getTenantId();
|
|
|
+ String residentPhone = add.getResidentPhone();
|
|
|
+ //validEntityBeforeSave(add);
|
|
|
+ //校验该租户下居住人员是否存在
|
|
|
//根据租户id houseId 手机号查询该居住人员是否存在
|
|
|
- if (checkIdCardUnique(add)){
|
|
|
- throw new UserException("resident.register.save.error", add.getResidentName());
|
|
|
- }
|
|
|
+ if (checkIdCardUnique(add)) {
|
|
|
+ throw new UserException("resident.register.save.error", add.getResidentName());
|
|
|
+ }
|
|
|
+
|
|
|
+ //校验账号是否存在,如果存在则不新增账号
|
|
|
+ //校验该租户下居住人员是否存在
|
|
|
+ boolean existUser = TenantHelper.ignore(() -> {
|
|
|
+ return sysUserMapper.exists(new LambdaQueryWrapper<SysUser>().eq(SysUser::getTenantId, tenantId)
|
|
|
+ .eq(SysUser::getPhonenumber, add.getResidentPhone()));
|
|
|
+ });
|
|
|
+ //新增账号信息
|
|
|
+ Long userId;
|
|
|
+ SysUserBo user = new SysUserBo();
|
|
|
+ user.setTenantId(tenantId);
|
|
|
+ if (!existUser) {
|
|
|
+ user.setUserName(residentPhone);
|
|
|
+ user.setPhonenumber(residentPhone);
|
|
|
+ user.setUserName(residentPhone);
|
|
|
+ user.setNickName(residentPhone);
|
|
|
+ user.setPassword(BCrypt.hashpw(BoManConfig.getPasswordDeft()));
|
|
|
+ // 校验用户类型是否存在
|
|
|
+ String userType = UserType.getUserType(add.getUserType()).getUserType();
|
|
|
+ user.setUserType(userType);
|
|
|
+ user.setIsAuthentication(Y);
|
|
|
+ user.setCreateBy(0L);
|
|
|
+ user.setUpdateBy(0L);
|
|
|
+ SysUser sysUser = MapstructUtils.convert(user, SysUser.class);
|
|
|
+ TenantHelper.ignore(() -> {
|
|
|
+ sysUserMapper.insert(sysUser);
|
|
|
+ });
|
|
|
+ userId = sysUser.getUserId();
|
|
|
+ } else {
|
|
|
+ //从sysUser表中查询
|
|
|
+ SysUserVo sysUserVo = TenantHelper.ignore(() -> {
|
|
|
+ return sysUserMapper.selectVoOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getPhonenumber, residentPhone));
|
|
|
+ });
|
|
|
+ userId = sysUserVo.getUserId();
|
|
|
+ user.setUserId(userId);
|
|
|
+ }
|
|
|
+ add.setExamine(TWO);
|
|
|
+ add.setUserId(userId);
|
|
|
boolean flag = baseMapper.insert(add) > 0;
|
|
|
+ //sys_user_tenant表中
|
|
|
+ SysUserTenant sysUserTenant = new SysUserTenant();
|
|
|
+ sysUserTenant.setUserId(userId);
|
|
|
+ sysUserTenant.setTenantId(tenantId);
|
|
|
+ sysUserTenantMapper.insert(sysUserTenant);
|
|
|
+ //给该userId赋予角色
|
|
|
+ // 新增用户与角色管理
|
|
|
+ //根据权限字符去查询角色id
|
|
|
+ SysRoleVo sysRoleVo = TenantHelper.ignore(() -> {
|
|
|
+ return sysRoleMapper.selectVoOne(new LambdaQueryWrapper<SysRole>()
|
|
|
+ //TENEMENT住户固定角色名称
|
|
|
+ .eq(SysRole::getRoleKey, TENEMENT)
|
|
|
+ .eq(SysRole::getTenantId, add.getTenantId()));
|
|
|
+ });
|
|
|
+ if (sysRoleVo != null) {
|
|
|
+ Long[] longArray = new Long[1];
|
|
|
+ longArray[0] = sysRoleVo.getRoleId();
|
|
|
+ user.setRoleIds(longArray);
|
|
|
+ }
|
|
|
+ userService.insertUserRole(user, false);
|
|
|
if (flag) {
|
|
|
bo.setResidentId(add.getResidentId());
|
|
|
}
|
|
@@ -141,16 +271,23 @@ public class ResidentInfoServiceImpl implements IResidentInfoService {
|
|
|
ResidentInfo update = MapstructUtils.convert(bo, ResidentInfo.class);
|
|
|
validEntityBeforeSave(update);
|
|
|
//根据租户id houseId 手机号查询该居住人员是否存在
|
|
|
- if (checkIdCardUnique(update)){
|
|
|
+ if (checkIdCardUnique(update)) {
|
|
|
throw new UserException("resident.register.save.error", update.getResidentName());
|
|
|
}
|
|
|
- return baseMapper.updateById(update) > 0;
|
|
|
+ if (bo.getIsFilter()) {
|
|
|
+ return TenantHelper.ignore(() -> {
|
|
|
+ return baseMapper.updateById(update) > 0;
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ return baseMapper.updateById(update) > 0;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 保存前的数据校验
|
|
|
*/
|
|
|
private void validEntityBeforeSave(ResidentInfo entity) {
|
|
|
+
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -195,4 +332,154 @@ public class ResidentInfoServiceImpl implements IResidentInfoService {
|
|
|
ResidentInfo update = MapstructUtils.convert(residentInfo, ResidentInfo.class);
|
|
|
return R.ok(baseMapper.selectCount(new LambdaQueryWrapper<ResidentInfo>().eq(ResidentInfo::getResidentAppearance, update.getResidentAppearance())));
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 居住用户认证审核
|
|
|
+ *
|
|
|
+ * @param bo 员工信息
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Boolean examineResident(ResidentInfoBo bo) {
|
|
|
+ ResidentInfo residentInfo = MapstructUtils.convert(bo, ResidentInfo.class);
|
|
|
+ String tenantId = residentInfo.getTenantId();
|
|
|
+ if (TWO.equals(residentInfo.getExamine())) {
|
|
|
+ SysUserBo sysUser = new SysUserBo();
|
|
|
+ sysUser.setUserId(bo.getUserId());
|
|
|
+ if (TenantHelper.isEnable()) {
|
|
|
+ //把租户id更新到sys_user表/sys_user_tenant表中
|
|
|
+ sysUser.setTenantId(tenantId);
|
|
|
+ sysUser.setIsAuthentication(Y);
|
|
|
+ userService.updateUserByIdNoTenantId(sysUser);
|
|
|
+ SysUserTenant sysUserTenant = new SysUserTenant();
|
|
|
+ sysUserTenant.setUserId(residentInfo.getUserId());
|
|
|
+ sysUserTenant.setTenantId(tenantId);
|
|
|
+ sysUserTenantMapper.insert(sysUserTenant);
|
|
|
+ }
|
|
|
+ //给该userId赋予角色
|
|
|
+ // 新增用户与角色管理
|
|
|
+ //根据权限字符去查询角色id
|
|
|
+ SysRoleVo sysRoleVo = TenantHelper.ignore(() -> {
|
|
|
+ return sysRoleMapper.selectVoOne(new LambdaQueryWrapper<SysRole>()
|
|
|
+ //TENEMENT住户固定角色名称
|
|
|
+ .eq(SysRole::getRoleKey, TENEMENT)
|
|
|
+ .eq(SysRole::getTenantId, tenantId));
|
|
|
+ });
|
|
|
+ if (sysRoleVo != null) {
|
|
|
+ Long[] longArray = new Long[1];
|
|
|
+ longArray[0] = sysRoleVo.getRoleId();
|
|
|
+ sysUser.setRoleIds(longArray);
|
|
|
+ }
|
|
|
+ userService.insertUserRole(sysUser, false);
|
|
|
+ }
|
|
|
+ return baseMapper.updateById(residentInfo) > 0;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ *删除居住人员的认证信息
|
|
|
+ *
|
|
|
+ * @param bo 主键串
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Boolean deleteResident(ResidentInfoBo bo) {
|
|
|
+ Long userId = bo.getUserId();
|
|
|
+ Long residentId = bo.getResidentId();
|
|
|
+ String tenantId = bo.getTenantId();
|
|
|
+ boolean flag = baseMapper.deleteById(residentId) > 0;
|
|
|
+ // userMapper.deleteById(userId);
|
|
|
+ if (TenantHelper.isEnable()) {
|
|
|
+ List<ResidentInfo> residentInfoList = TenantHelper.ignore(() -> {
|
|
|
+ return baseMapper.selectList(new LambdaQueryWrapper<ResidentInfo>().eq(ResidentInfo::getUserId, userId));
|
|
|
+ });
|
|
|
+ //查询该用户是否一个认证信息 通过的 都没有则需要把用户租户重置为000000,认证状态改为未认证
|
|
|
+ SysUser sysUser = new SysUser();
|
|
|
+ sysUser.setUserId(userId);
|
|
|
+ if (residentInfoList == null) {
|
|
|
+ sysUser.setTenantId(TENANT_ID);
|
|
|
+ sysUser.setIsAuthentication(N);
|
|
|
+ TenantHelper.ignore(() -> {
|
|
|
+ sysUserMapper.updateById(sysUser);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ // 删除用户与角色关联
|
|
|
+ TenantHelper.ignore(() -> {
|
|
|
+ userRoleMapper.delete(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, userId).eq(SysUserRole::getTenantId, tenantId));
|
|
|
+ });
|
|
|
+ // 删除用户与租户关联
|
|
|
+ TenantHelper.ignore(() -> {
|
|
|
+ sysUserTenantMapper.delete(new LambdaQueryWrapper<SysUserTenant>().eq(SysUserTenant::getUserId, userId).eq(SysUserTenant::getTenantId, tenantId));
|
|
|
+ });
|
|
|
+ if (residentInfoList != null && !residentInfoList.isEmpty()) {
|
|
|
+ //判断用户的默认租户是否是被删除的那个租户,是的情况下换一个租户id给sysUser表中
|
|
|
+ SysUserVo sysUserVo = TenantHelper.ignore(() -> {
|
|
|
+ return sysUserMapper.selectVoById(userId);
|
|
|
+ });
|
|
|
+ String tenantIdOld = sysUserVo.getTenantId();
|
|
|
+ if (tenantId.equals(tenantIdOld)) {
|
|
|
+ SysUserTenant sysUserTenant = sysUserTenantMapper.selectVoOne(new LambdaQueryWrapper<SysUserTenant>().eq(SysUserTenant::getUserId, userId));
|
|
|
+ sysUser.setTenantId(TENANT_ID);
|
|
|
+ if (sysUserTenant != null) {
|
|
|
+ sysUser.setTenantId(sysUserTenant.getTenantId());
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ long count = residentInfoList.stream().filter(e -> e.getExamine().equals(TWO)).count();
|
|
|
+ if (count == 0) {
|
|
|
+ sysUser.setTenantId(TENANT_ID);
|
|
|
+ sysUser.setIsAuthentication(N);
|
|
|
+ TenantHelper.ignore(() -> {
|
|
|
+ sysUserMapper.updateById(sysUser);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ userRoleMapper.delete(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, userId));
|
|
|
+ }
|
|
|
+ return flag;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 管理员修改住户管理
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Boolean editAuthentication(ResidentInfoBo bo) {
|
|
|
+ ResidentInfo residentInfo = MapstructUtils.convert(bo, ResidentInfo.class);
|
|
|
+ //判断是否修改了租户
|
|
|
+ ResidentInfoVo residentInfoVo = baseMapper.selectVoById(residentInfo.getResidentId());
|
|
|
+ String tenantIdOld = residentInfoVo.getTenantId();
|
|
|
+ String tenantIdNew = residentInfo.getTenantId();
|
|
|
+ Long userId = residentInfoVo.getUserId();
|
|
|
+ SysUserBo sysUser = new SysUserBo();
|
|
|
+ sysUser.setUserId(bo.getUserId());
|
|
|
+ sysUser.setTenantId(tenantIdNew);
|
|
|
+ if (!tenantIdOld.equals(tenantIdNew)) {
|
|
|
+ sysUserTenantMapper.update(new LambdaUpdateWrapper<SysUserTenant>()
|
|
|
+ .set(SysUserTenant::getTenantId, tenantIdNew)
|
|
|
+ .eq(SysUserTenant::getUserId, userId).eq(SysUserTenant::getTenantId, tenantIdOld));
|
|
|
+
|
|
|
+ //组装sysUser
|
|
|
+ //给该userId赋予角色
|
|
|
+ // 新增用户与角色管理
|
|
|
+ //根据权限字符去查询角色id
|
|
|
+ SysRoleVo sysRoleVo = TenantHelper.ignore(() -> {
|
|
|
+ return sysRoleMapper.selectVoOne(new LambdaQueryWrapper<SysRole>()
|
|
|
+ //TENEMENT住户固定角色名称
|
|
|
+ .eq(SysRole::getRoleKey, TENEMENT)
|
|
|
+ .eq(SysRole::getTenantId, tenantIdNew));
|
|
|
+ });
|
|
|
+ if (sysRoleVo != null) {
|
|
|
+ Long[] longArray = new Long[1];
|
|
|
+ longArray[0] = sysRoleVo.getRoleId();
|
|
|
+ sysUser.setRoleIds(longArray);
|
|
|
+ }
|
|
|
+ userService.insertUserRole(sysUser, true);
|
|
|
+ }
|
|
|
+ sysUser.setPhonenumber(residentInfo.getResidentPhone());
|
|
|
+ userService.updateUserByIdNoTenantId(sysUser);
|
|
|
+ return baseMapper.updateById(residentInfo) > 0;
|
|
|
+ }
|
|
|
}
|