tjf преди 2 месеца
родител
ревизия
0e5fe0050d
променени са 20 файла, в които са добавени 563 реда и са изтрити 45 реда
  1. 6 1
      ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java
  2. 8 2
      ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/Constants.java
  3. 4 0
      ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/model/LoginUser.java
  4. 9 0
      ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java
  5. 1 1
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java
  6. 4 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java
  7. 17 3
      ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/controller/houseInfo/HouseInfoController.java
  8. 68 2
      ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/controller/residentInfo/ResidentInfoController.java
  9. 1 0
      ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/controller/staffManage/StaffManageController.java
  10. 1 1
      ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/domain/blackManage/vo/BlackManageVo.java
  11. 4 0
      ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/domain/houseInfo/bo/HouseInfoBo.java
  12. 2 0
      ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/domain/residentInfo/ResidentInfo.java
  13. 9 1
      ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/domain/residentInfo/bo/ResidentInfoBo.java
  14. 5 0
      ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/domain/residentInfo/vo/ResidentInfoVo.java
  15. 39 2
      ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/service/IResidentInfoService.java
  16. 1 0
      ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/service/impl/HouseInfoServiceImpl.java
  17. 59 8
      ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/service/impl/IllegalParkingServiceImpl.java
  18. 296 9
      ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/service/impl/ResidentInfoServiceImpl.java
  19. 28 14
      ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/service/impl/StaffManageServiceImpl.java
  20. 1 1
      ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/service/impl/StaffTrainTimeServiceImpl.java

+ 6 - 1
ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java

@@ -36,9 +36,11 @@ import org.dromara.domain.residentInfo.vo.ResidentInfoVo;
 import org.dromara.domain.staffManage.vo.StaffManageVo;
 import org.dromara.service.IResidentInfoService;
 import org.dromara.service.IStaffManageService;
+import org.dromara.system.domain.SysTenant;
 import org.dromara.system.domain.SysUser;
 import org.dromara.system.domain.bo.SysSocialBo;
 import org.dromara.system.domain.vo.*;
+import org.dromara.system.mapper.SysTenantMapper;
 import org.dromara.system.mapper.SysUserMapper;
 import org.dromara.system.service.*;
 import org.springframework.beans.factory.annotation.Value;
@@ -75,7 +77,7 @@ public class SysLoginService {
     private final ISysClientService clientService;
     private final IStaffManageService staffManageService;
     private final IResidentInfoService residentInfoService;
-
+    private final SysTenantMapper sysTenantMapper;
 
     /**
      * 绑定第三方用户
@@ -165,6 +167,9 @@ public class SysLoginService {
         Long userId = user.getUserId();
         String tenantId = user.getTenantId();
         loginUser.setTenantId(tenantId);
+        SysTenant sysTenant = sysTenantMapper.selectOne(new LambdaQueryWrapper<SysTenant>().eq(SysTenant::getTenantId, tenantId));
+        String companyName = sysTenant.getCompanyName();
+        loginUser.setCompanyName(companyName);
         loginUser.setUserId(userId);
         loginUser.setDeptId(user.getDeptId());
         loginUser.setUsername(user.getUserName());

+ 8 - 2
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/Constants.java

@@ -94,6 +94,8 @@ public interface Constants {
     String DOWN = "down";
     //持平
     String FLAT = "flat";
+    //住户
+    String TENEMENT = "tenement";
     //-----------------------web首页统计的key--------------
 //web首页统计上月外来车辆数量
     String LAST_MONTH_VISITOR_CAR = "last_month_visitor_car:";
@@ -160,14 +162,18 @@ public interface Constants {
     /**
      * 员工培训手册阅读人员名单 redis key=read_train:manualId value = [userId+":"+员工姓名]
      */
-    public static final String READ_TRAIN = "read_train:";
+     String READ_TRAIN = "read_train:";
     /**
      * 员工培训手册阅读人员的阅读时间 redis key
      */
-    public static final String READ_TRAIN_TIME = "read_train_time:";
+     String READ_TRAIN_TIME = "read_train_time:";
 
     //-------------------员工需要认证的数量的key-----------------
     //key=staff_manage_authentication:{userId}
     String STAFF_MANAGE_AUTHENTICATION = "staff_manage_authentication:";
+    //-------------------车牌违停次数黑名单的key-----------------
+    //key=black_plate_number:{租户id} value = 设置的次数
+    String BLACK_PLATE_NUMBER="black_plate_number:";
+
 }
 

+ 4 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/model/LoginUser.java

@@ -28,6 +28,10 @@ public class LoginUser implements Serializable {
      * 租户ID
      */
     private String tenantId;
+    /**
+     * 租户名称
+     */
+    private String companyName;
 
     /**
      * 用户ID

+ 9 - 0
ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java

@@ -33,6 +33,7 @@ public class LoginHelper {
 
     public static final String LOGIN_USER_KEY = "loginUser";
     public static final String TENANT_KEY = "tenantId";
+    public static final String COMPANY_NAME = "companyName";
     public static final String USER_KEY = "userId";
     public static final String USER_NAME_KEY = "userName";
     public static final String DEPT_KEY = "deptId";
@@ -51,6 +52,7 @@ public class LoginHelper {
         model = ObjectUtil.defaultIfNull(model, new SaLoginModel());
         StpUtil.login(loginUser.getLoginId(),
             model.setExtra(TENANT_KEY, loginUser.getTenantId())
+                .setExtra(COMPANY_NAME, loginUser.getCompanyName())
                 .setExtra(USER_KEY, loginUser.getUserId())
                 .setExtra(USER_NAME_KEY, loginUser.getUsername())
                 .setExtra(DEPT_KEY, loginUser.getDeptId())
@@ -112,6 +114,13 @@ public class LoginHelper {
         return Convert.toStr(getExtra(TENANT_KEY));
     }
 
+    /**
+     * 获取租户名称
+     */
+    public static String getCompanyName() {
+        return Convert.toStr(getExtra(COMPANY_NAME));
+    }
+
     /**
      * 获取部门ID
      */

+ 1 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java

@@ -110,7 +110,6 @@ public class SysUserController extends BaseController {
         UserInfoVo userInfoVo = new UserInfoVo();
         LoginUser loginUser = LoginHelper.getLoginUser();
         String tenantId = LoginHelper.getTenantId();
-
         if (TenantHelper.isEnable() && LoginHelper.isSuperAdmin()) {
             // 超级管理员 如果重新加载用户信息需清除动态租户
             TenantHelper.clearDynamic();
@@ -120,6 +119,7 @@ public class SysUserController extends BaseController {
         if (ObjectUtil.isNull(user)) {
             return R.fail("没有权限访问用户数据!");
         }
+        user.setCompanyName(LoginHelper.getCompanyName());
         userInfoVo.setUser(user);
         userInfoVo.setPermissions(loginUser.getMenuPermission());
         userInfoVo.setRoles(loginUser.getRolePermission());

+ 4 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java

@@ -35,6 +35,10 @@ public class SysUserVo implements Serializable {
      * 租户ID
      */
     private String tenantId;
+    /**
+     * 租户名称
+     */
+    private String companyName;
 
     /**
      * 部门ID

+ 17 - 3
ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/controller/houseInfo/HouseInfoController.java

@@ -15,6 +15,7 @@ import org.dromara.common.log.annotation.Log;
 import org.dromara.common.log.enums.BusinessType;
 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.common.web.core.BaseController;
 import org.dromara.domain.houseInfo.bo.HouseInfoBo;
 import org.dromara.domain.houseInfo.vo.HouseInfoVo;
@@ -59,6 +60,19 @@ public class HouseInfoController extends BaseController {
         return R.ok(list);
     }
 
+
+    /**
+     * 查询房屋信息列表不分页查询条件带租户
+     */
+    @SaCheckPermission("wuYe:houseInfo:listNoPageTenant")
+    @GetMapping("/listNoPageTenant")
+    public R<List<HouseInfoVo>> listNoPageTenant(HouseInfoBo bo) {
+        List<HouseInfoVo> list = TenantHelper.ignore(() -> {
+            return houseInfoService.queryList(bo);
+        });
+        return R.ok(list);
+    }
+
     /**
      * 导出房屋信息列表
      */
@@ -72,13 +86,13 @@ public class HouseInfoController extends BaseController {
 
     /**
      * 导入房屋信息列表
+     *
      * @param file
      * @return
      * @throws Exception
      */
     @PostMapping("/importData")
-    public R<Void> importData(@RequestPart("file") MultipartFile file, boolean updateSupport) throws Exception
-    {
+    public R<Void> importData(@RequestPart("file") MultipartFile file, boolean updateSupport) throws Exception {
         ExcelResult<HouseInfoVo> result = ExcelUtil.importExcel(file.getInputStream(), HouseInfoVo.class, new HouseInfoImportListener());
         return R.ok(result.getAnalysis());
     }
@@ -91,7 +105,7 @@ public class HouseInfoController extends BaseController {
     @SaCheckPermission("wuYe:houseInfo:query")
     @GetMapping("/{houseId}")
     public R<HouseInfoVo> getInfo(@NotNull(message = "主键不能为空")
-                                     @PathVariable Long houseId) {
+                                  @PathVariable Long houseId) {
         return R.ok(houseInfoService.queryById(houseId));
     }
 

+ 68 - 2
ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/controller/residentInfo/ResidentInfoController.java

@@ -46,6 +46,15 @@ public class ResidentInfoController extends BaseController {
         return residentInfoService.queryPageList(bo, pageQuery);
     }
 
+    /**
+     * 查询居住人员需要认证的列表 给居住人员在未认证通过的情况下调用
+     */
+    //@SaCheckPermission("wuYe:staffManage:listAuthentication")
+    @GetMapping("/listAuthentication")
+    public TableDataInfo<ResidentInfoVo> listAuthentication(ResidentInfoBo bo, PageQuery pageQuery) {
+        return residentInfoService.listAuthentication(bo, pageQuery);
+    }
+
     /**
      * 查询居住人员党员数量
      */
@@ -79,14 +88,37 @@ public class ResidentInfoController extends BaseController {
         return R.ok(residentInfoService.queryById(residentId));
     }
 
+    /**
+     *  获取居住人员信息 过滤租户
+     *
+     * @param residentId 主键
+     */
+    //@SaCheckPermission("wuYe:staffManage:query")
+    @GetMapping("/authentication/{residentId}")
+    public R<ResidentInfoVo> getAuthenticationInfo(@NotNull(message = "主键不能为空")
+                                                  @PathVariable Long residentId) {
+        return R.ok(residentInfoService.getAuthenticationInfo(residentId));
+    }
+
     /**
      * 管理员新增居住人员信息,默认就审核过
      */
-    @SaCheckPermission("wuYe:residentInfo:add")
+    @SaCheckPermission("wuYe:residentInfo:addResidentInfo")
     @Log(title = "居住人员信息,存储居住人员的详细信息", businessType = BusinessType.INSERT)
     @RepeatSubmit()
-    @PostMapping()
+    @PostMapping("/addResidentInfo")
     public R<Void> add(@Validated(AddGroup.class) @RequestBody ResidentInfoBo bo) {
+        return toAjax(residentInfoService.addResidentInfo(bo));
+    }
+
+    /**
+     * 新增居住人员提交认证信息
+     */
+    @SaCheckPermission("wuYe:residentInfo:add")
+    @Log(title = "新增居住人员提交认证信息", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> addResidentInfo(@Validated(AddGroup.class) @RequestBody ResidentInfoBo bo) {
         return toAjax(residentInfoService.insertByBo(bo));
     }
 
@@ -101,6 +133,18 @@ public class ResidentInfoController extends BaseController {
         return toAjax(residentInfoService.updateByBo(bo));
     }
 
+
+    /**
+     * 管理员修改住户管理
+     */
+    @SaCheckPermission("wuYe:residentInfo:editAuthentication")
+    @Log(title = "员工管理", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PostMapping("/put/authentication")
+    public R<Void> editAuthentication(@Validated(EditGroup.class) @RequestBody ResidentInfoBo bo) {
+        return toAjax(residentInfoService.editAuthentication(bo));
+    }
+
     /**
      * 删除居住人员信息,存储居住人员的详细信息
      *
@@ -113,4 +157,26 @@ public class ResidentInfoController extends BaseController {
                           @PathVariable Long[] residentIds) {
         return toAjax(residentInfoService.deleteWithValidByIds(List.of(residentIds), true));
     }
+
+    /**
+     * 删除居住人员的认证信息
+     *
+     * @param bo 主键串
+     */
+    @SaCheckPermission("wuYe:residentInfo:deleteResident")
+    @Log(title = "居住人员信息", businessType = BusinessType.DELETE)
+    @PostMapping("/deleteResident")
+    public R<Void> deleteStaffManage(@RequestBody ResidentInfoBo bo) {
+        return toAjax(residentInfoService.deleteResident(bo));
+    }
+    /**
+     * 居住用户认证审核
+     *
+     * @param bo 员工信息
+     */
+    @PostMapping("/examineResident")
+    @SaCheckPermission("wuYe:residentInfo:examineStaff")
+    public R<Void> examineResident(@RequestBody ResidentInfoBo bo) {
+        return toAjax(residentInfoService.examineResident(bo));
+    }
 }

+ 1 - 0
ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/controller/staffManage/StaffManageController.java

@@ -193,6 +193,7 @@ public class StaffManageController extends BaseController {
      * @param bo 员工信息
      */
     @PostMapping("/examineStaff")
+    @SaCheckPermission("wuYe:staffManage:examineStaff")
     public R<Void> examineStaff(@RequestBody StaffManageBo bo) {
         return toAjax(staffManageService.examineStaff(bo));
     }

+ 1 - 1
ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/domain/blackManage/vo/BlackManageVo.java

@@ -47,7 +47,7 @@ public class BlackManageVo implements Serializable {
      * 黑名单的阈值
      */
     @ExcelProperty(value = "黑名单的阈值")
-    private String blackNum;
+    private Long blackNum;
 
     /**
      * 黑名单是否启用

+ 4 - 0
ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/domain/houseInfo/bo/HouseInfoBo.java

@@ -27,6 +27,10 @@ public class HouseInfoBo extends BaseEntity {
      */
     @NotNull(message = "房屋信息主键,唯一标识每条房屋信息不能为空", groups = { EditGroup.class })
     private Long houseId;
+    /**
+     * 租户id
+     */
+    private String tenantId;
 
     /**
      * 权利人姓名

+ 2 - 0
ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/domain/residentInfo/ResidentInfo.java

@@ -21,6 +21,8 @@ public class ResidentInfo extends TenantEntity {
     @Serial
     private static final long serialVersionUID = 1L;
 
+    @TableField(exist = false)
+    private String userType;
     /**
      * 居住人员主键,唯一标识每条居住人员信息
      */

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

@@ -25,6 +25,11 @@ public class ResidentInfoBo extends BaseEntity {
      */
     @NotNull(message = "居住人员主键,唯一标识每条居住人员信息不能为空", groups = { EditGroup.class })
     private Long residentId;
+    private String userType;
+    /**
+     * 租户ID
+     */
+    private String tenantId;
 
     /**
      * 关联房屋信息表的house_id,标识居住人员所属房屋
@@ -130,5 +135,8 @@ public class ResidentInfoBo extends BaseEntity {
      * 审核状态 1:未审核 2:审核通过 3:审核未通过
      */
     private String examine;
-
+    /**
+     * 是否需要过滤租户
+     */
+    private Boolean isFilter;
 }

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

@@ -31,6 +31,11 @@ public class ResidentInfoVo implements Serializable {
     @ExcelProperty(value = "居住人员主键,唯一标识每条居住人员信息")
     private Long residentId;
 
+    /**
+     * 租户ID
+     */
+    private String tenantId;
+
     /**
      * 关联房屋信息表的house_id,标识居住人员所属房屋
      */

+ 39 - 2
ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/service/IResidentInfoService.java

@@ -25,6 +25,13 @@ public interface IResidentInfoService {
      */
     ResidentInfoVo queryById(Long residentId);
 
+    /**
+     *  获取居住人员信息 过滤租户
+     *
+     * @param residentId 主键
+     */
+    ResidentInfoVo getAuthenticationInfo(Long residentId);
+
     /**
      * 根据userId获取居住人员信息
      *
@@ -42,6 +49,11 @@ public interface IResidentInfoService {
      */
     TableDataInfo<ResidentInfoVo> queryPageList(ResidentInfoBo bo, PageQuery pageQuery);
 
+    /**
+     * 查询员工管理需要认证的列表
+     */
+    TableDataInfo<ResidentInfoVo> listAuthentication(ResidentInfoBo bo, PageQuery pageQuery);
+
     /**
      * 查询符合条件的居住人员信息,存储居住人员的详细信息列表
      *
@@ -51,12 +63,17 @@ public interface IResidentInfoService {
     List<ResidentInfoVo> queryList(ResidentInfoBo bo);
 
     /**
-     * 新增居住人员信息,存储居住人员的详细信息
+     * 新增居住人员提交认证信息
+     */
+    Boolean insertByBo(ResidentInfoBo bo);
+
+    /**
+     * 管理员新增居住人员信息,默认就审核过
      *
      * @param bo 居住人员信息,存储居住人员的详细信息
      * @return 是否新增成功
      */
-    Boolean insertByBo(ResidentInfoBo bo);
+    Boolean addResidentInfo(ResidentInfoBo bo);
 
     /**
      * 修改居住人员信息,存储居住人员的详细信息
@@ -79,4 +96,24 @@ public interface IResidentInfoService {
      * 查询居住人员党员数量
      */
     R<Long> selectCount(ResidentInfoBo residentInfo);
+
+    /**
+     * 居住用户认证审核
+     *
+     * @param bo 员工信息
+     */
+   Boolean examineResident(ResidentInfoBo bo);
+
+    /**
+     *删除居住人员的认证信息
+     *
+     * @param bo 主键串
+     */
+   Boolean deleteResident(ResidentInfoBo bo);
+
+
+    /**
+     * 管理员修改住户管理
+     */
+    Boolean editAuthentication(ResidentInfoBo bo);
 }

+ 1 - 0
ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/service/impl/HouseInfoServiceImpl.java

@@ -74,6 +74,7 @@ public class HouseInfoServiceImpl implements IHouseInfoService {
         lqw.orderByAsc(HouseInfo::getHouseId);
         lqw.like(StringUtils.isNotBlank(bo.getOwnerName()), HouseInfo::getOwnerName, bo.getOwnerName());
         lqw.eq(StringUtils.isNotBlank(bo.getLocation()), HouseInfo::getLocation, bo.getLocation());
+        lqw.eq(StringUtils.isNotBlank(bo.getTenantId()), HouseInfo::getTenantId, bo.getTenantId());
         lqw.eq(StringUtils.isNotBlank(bo.getRightType()), HouseInfo::getRightType, bo.getRightType());
         lqw.eq(bo.getArea() != null, HouseInfo::getArea, bo.getArea());
         lqw.eq(StringUtils.isNotBlank(bo.getDocumentNumber()), HouseInfo::getDocumentNumber, bo.getDocumentNumber());

+ 59 - 8
ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/service/impl/IllegalParkingServiceImpl.java

@@ -9,9 +9,14 @@ 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.redis.utils.RedisUtils;
+import org.dromara.common.satoken.utils.LoginHelper;
+import org.dromara.domain.blackManage.BlackManage;
+import org.dromara.domain.blackManage.vo.BlackManageVo;
 import org.dromara.domain.illegalParking.IllegalParking;
 import org.dromara.domain.illegalParking.bo.IllegalParkingBo;
 import org.dromara.domain.illegalParking.vo.IllegalParkingVo;
+import org.dromara.mapper.BlackManageMapper;
 import org.dromara.mapper.IllegalParkingMapper;
 import org.dromara.service.IIllegalParkingService;
 import org.springframework.stereotype.Service;
@@ -20,6 +25,8 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 
+import static org.dromara.common.core.constant.Constants.*;
+
 /**
  * 违章停车登记Service业务层处理
  *
@@ -31,6 +38,8 @@ import java.util.Map;
 public class IllegalParkingServiceImpl implements IIllegalParkingService {
 
     private final IllegalParkingMapper baseMapper;
+    private final BlackManageMapper blackManageMapper;
+
 
     /**
      * 查询违章停车登记
@@ -39,13 +48,13 @@ public class IllegalParkingServiceImpl implements IIllegalParkingService {
      * @return 违章停车登记
      */
     @Override
-    public IllegalParkingVo queryById(Long illegalParkingId){
+    public IllegalParkingVo queryById(Long illegalParkingId) {
         IllegalParkingVo illegalParkingVo = baseMapper.selectVoById(illegalParkingId);
         String plateNumber = illegalParkingVo.getPlateNumber();
         IllegalParkingBo bo = new IllegalParkingBo();
         bo.setPlateNumber(plateNumber);
         List<IllegalParkingVo> illegalParkingVos = queryList(bo);
-        if (illegalParkingVos != null && !illegalParkingVos.isEmpty()){
+        if (illegalParkingVos != null && !illegalParkingVos.isEmpty()) {
             illegalParkingVo.setChildren(illegalParkingVos);
         }
         return illegalParkingVo;
@@ -62,13 +71,13 @@ public class IllegalParkingServiceImpl implements IIllegalParkingService {
     public TableDataInfo<IllegalParkingVo> queryPageList(IllegalParkingBo bo, PageQuery pageQuery) {
         LambdaQueryWrapper<IllegalParking> lqw = buildQueryWrapper(bo);
         Page<IllegalParkingVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
-        if (result.getRecords() != null && !result.getRecords().isEmpty()){
+        if (result.getRecords() != null && !result.getRecords().isEmpty()) {
             for (IllegalParkingVo parking : result.getRecords()) {
                 String plateNumber = parking.getPlateNumber();
                 IllegalParkingBo ibo = new IllegalParkingBo();
                 ibo.setPlateNumber(plateNumber);
                 List<IllegalParkingVo> illegalParkingVos = queryList(ibo);
-                if (illegalParkingVos != null && !illegalParkingVos.isEmpty()){
+                if (illegalParkingVos != null && !illegalParkingVos.isEmpty()) {
                     parking.setChildren(illegalParkingVos);
                 }
             }
@@ -113,6 +122,25 @@ public class IllegalParkingServiceImpl implements IIllegalParkingService {
     public Boolean insertByBo(IllegalParkingBo bo) {
         IllegalParking add = MapstructUtils.convert(bo, IllegalParking.class);
         validEntityBeforeSave(add);
+        //从redis中查询车牌黑名单次数
+        String key = BLACK_PLATE_NUMBER + LoginHelper.getTenantId();
+        long blackNum = 0;
+        if (!RedisUtils.hasKey(key)) {
+            //没有就从数据库查询
+            BlackManageVo blackManageVo = blackManageMapper.selectVoOne(new LambdaQueryWrapper<BlackManage>().eq(BlackManage::getBlackType, ONE));
+            blackNum = blackManageVo.getBlackNum();
+            RedisUtils.setAtomicValue(key, blackNum);
+        } else {
+            blackNum = RedisUtils.getAtomicValue(key);
+        }
+        //查询该车牌号的违停次数
+        List<IllegalParkingVo> illegalParkingVos = baseMapper.selectVoList(new LambdaQueryWrapper<IllegalParking>().eq(IllegalParking::getPlateNumber, add.getPlateNumber()));
+        long count = illegalParkingVos == null ? 0 : illegalParkingVos.size();
+        if (count + 1 > blackNum) {
+            add.setIsBlack(Y);
+            //todo 给道闸下发黑名单
+        }
+        //判断该车牌号
         boolean flag = baseMapper.insert(add) > 0;
         if (flag) {
             bo.setIllegalParkingId(add.getIllegalParkingId());
@@ -130,13 +158,31 @@ public class IllegalParkingServiceImpl implements IIllegalParkingService {
     public Boolean updateByBo(IllegalParkingBo bo) {
         IllegalParking update = MapstructUtils.convert(bo, IllegalParking.class);
         validEntityBeforeSave(update);
+        //从redis中查询车牌黑名单次数
+        String key = BLACK_PLATE_NUMBER + LoginHelper.getTenantId();
+        long blackNum = 0;
+        if (!RedisUtils.hasKey(key)) {
+            //没有就从数据库查询
+            BlackManageVo blackManageVo = blackManageMapper.selectVoOne(new LambdaQueryWrapper<BlackManage>().eq(BlackManage::getBlackType, ONE));
+            blackNum = blackManageVo.getBlackNum();
+            RedisUtils.setAtomicValue(key, blackNum);
+        } else {
+            blackNum = RedisUtils.getAtomicValue(key);
+        }
+        //查询该车牌号的违停次数
+        List<IllegalParkingVo> illegalParkingVos = baseMapper.selectVoList(new LambdaQueryWrapper<IllegalParking>().eq(IllegalParking::getPlateNumber, update.getPlateNumber()));
+        long count = illegalParkingVos == null ? 0 : illegalParkingVos.size();
+        if (count + 1 > blackNum) {
+            update.setIsBlack(Y);
+            //todo 给道闸下发黑名单
+        }
         return baseMapper.updateById(update) > 0;
     }
 
     /**
      * 保存前的数据校验
      */
-    private void validEntityBeforeSave(IllegalParking entity){
+    private void validEntityBeforeSave(IllegalParking entity) {
         //TODO 做一些数据校验,如唯一约束
     }
 
@@ -149,18 +195,23 @@ public class IllegalParkingServiceImpl implements IIllegalParkingService {
      */
     @Override
     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
-        if(isValid){
+        if (isValid) {
             //TODO 做一些业务上的校验,判断是否需要校验
         }
         return baseMapper.deleteByIds(ids) > 0;
     }
 
+    /**
+     * 解除黑名单
+     */
     @Override
     public R<Void> cancel(IllegalParkingBo bo) {
-        bo.setIsBlack("N");
+        //todo 单次解除
+        bo.setIsBlack(N);
         IllegalParking update = MapstructUtils.convert(bo, IllegalParking.class);
         validEntityBeforeSave(update);
-        boolean bl = baseMapper.updateById(update)>0;
+        boolean bl = baseMapper.updateById(update) > 0;
+        //todo 给道闸下发解除黑名单
         if (bl) {
             return R.ok();
         }

+ 296 - 9
ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/service/impl/ResidentInfoServiceImpl.java

@@ -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;
+    }
 }

+ 28 - 14
ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/service/impl/StaffManageServiceImpl.java

@@ -204,11 +204,8 @@ public class StaffManageServiceImpl implements IStaffManageService {
             throw new UserException("staff.manage.error");
         } else if (flag) {
             SysUserBo user = new SysUserBo();
-            String tenantId = "";
+            String tenantId = staffManage.getTenantId();;
             //手机号、手机验证码注册
-            if (TenantHelper.isEnable()) {
-                tenantId = staffManage.getTenantId();
-            }
             String username = staffManage.getPhoneNumber();
             String password = BoManConfig.getPasswordDeft();
             // 校验用户类型是否存在
@@ -227,14 +224,23 @@ public class StaffManageServiceImpl implements IStaffManageService {
             });
             SysUser sysUser = MapstructUtils.convert(user, SysUser.class);
             sysUser.setTenantId(tenantId);
+            Long userId;
             if (!exist) {
                 //sysUser新增
                 user.setCreateBy(0L);
                 user.setUpdateBy(0L);
-                userMapper.insert(sysUser);
+                TenantHelper.ignore(() -> {
+                    userMapper.insert(sysUser);
+                });
+                userId = sysUser.getUserId();
+            } else {
+                //从sysUser表中查询
+                SysUserVo sysUserVo = TenantHelper.ignore(() -> {
+                    return userMapper.selectVoOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getPhonenumber, username));
+                });
+                userId = sysUserVo.getUserId();
             }
             staffManage.setExamine(TWO);
-            Long userId = sysUser.getUserId();
             staffManage.setUserId(userId);
             user.setUserId(userId);
             user.setTenantId(tenantId);
@@ -251,7 +257,12 @@ public class StaffManageServiceImpl implements IStaffManageService {
             //给该userId赋予角色
             // 新增用户与角色管理
             //根据权限字符去查询角色id
-            SysRoleVo sysRoleVo = sysRoleMapper.selectVoOne(new LambdaQueryWrapper<SysRole>().eq(SysRole::getRoleKey, staffManage.getStaffCategory()));
+
+            SysRoleVo sysRoleVo = TenantHelper.ignore(() -> {
+                return sysRoleMapper.selectVoOne(new LambdaQueryWrapper<SysRole>()
+                    .eq(SysRole::getRoleKey, staffManage.getStaffCategory())
+                    .eq(SysRole::getTenantId, staffManage.getTenantId()));
+            });
             if (sysRoleVo != null) {
                 Long[] longArray = new Long[1];
                 longArray[0] = sysRoleVo.getRoleId();
@@ -288,6 +299,7 @@ public class StaffManageServiceImpl implements IStaffManageService {
     @Transactional(rollbackFor = Exception.class)
     public Boolean editAuthentication(StaffManageBo bo) {
         StaffManage examineStaffManage = MapstructUtils.convert(bo, StaffManage.class);
+        //判断是否修改了租户
         StaffManageVo staffManageVo = baseMapper.selectVoById(bo.getStaffId());
         //原始的tenantId
         String tenantIdOld = staffManageVo.getTenantId();
@@ -300,9 +312,6 @@ public class StaffManageServiceImpl implements IStaffManageService {
             sysUser.setTenantId(tenantIdNew);
             //如过两个租户id不一致,更新sys_user_tenant表
             if (!tenantIdOld.equals(tenantIdNew)) {
-                SysUserTenant sysUserTenant = new SysUserTenant();
-                sysUserTenant.setUserId(userId);
-                sysUserTenant.setTenantId(examineStaffManage.getTenantId());
                 sysUserTenantMapper.update(new LambdaUpdateWrapper<SysUserTenant>()
                     .set(SysUserTenant::getTenantId, tenantIdNew)
                     .eq(SysUserTenant::getUserId, userId).eq(SysUserTenant::getTenantId, tenantIdOld));
@@ -311,7 +320,11 @@ public class StaffManageServiceImpl implements IStaffManageService {
                 //给该userId赋予角色
                 // 新增用户与角色管理
                 //根据权限字符去查询角色id
-                SysRoleVo sysRoleVo = sysRoleMapper.selectVoOne(new LambdaQueryWrapper<SysRole>().eq(SysRole::getRoleKey, examineStaffManage.getStaffCategory()));
+                SysRoleVo sysRoleVo = TenantHelper.ignore(() -> {
+                    return sysRoleMapper.selectVoOne(new LambdaQueryWrapper<SysRole>()
+                        .eq(SysRole::getRoleKey, examineStaffManage.getStaffCategory())
+                        .eq(SysRole::getTenantId, examineStaffManage.getTenantId()));
+                });
                 if (sysRoleVo != null) {
                     Long[] longArray = new Long[1];
                     longArray[0] = sysRoleVo.getRoleId();
@@ -421,7 +434,7 @@ public class StaffManageServiceImpl implements IStaffManageService {
             //查询该用户是否一个认证信息 通过的 都没有则需要把用户租户重置为000000,认证状态改为未认证
             SysUser sysUser = new SysUser();
             sysUser.setUserId(userId);
-            if (staffManageList == null ) {
+            if (staffManageList == null) {
                 sysUser.setTenantId(TENANT_ID);
                 sysUser.setIsAuthentication(N);
                 TenantHelper.ignore(() -> {
@@ -438,8 +451,9 @@ public class StaffManageServiceImpl implements IStaffManageService {
             });
             if (staffManageList != null && staffManageList.size() > 0) {
                 //判断用户的默认租户是否是被删除的那个租户,是的情况下换一个租户id给sysUser表中
-                SysUserVo sysUserVo =  TenantHelper.ignore(() -> { return
-                    userMapper.selectVoById(userId);
+                SysUserVo sysUserVo = TenantHelper.ignore(() -> {
+                    return
+                        userMapper.selectVoById(userId);
                 });
                 String tenantIdOld = sysUserVo.getTenantId();
                 if (tenantId.equals(tenantIdOld)) {

+ 1 - 1
ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/service/impl/StaffTrainTimeServiceImpl.java

@@ -92,7 +92,7 @@ public class StaffTrainTimeServiceImpl implements IStaffTrainTimeService {
      */
     @Override
     public Boolean insertByBo(StaffTrainTimeBo bo) {
-        boolean flag = false;
+        boolean flag = true;
         StaffTrainTime add = MapstructUtils.convert(bo, StaffTrainTime.class);
         validEntityBeforeSave(add);
         Long userId = LoginHelper.getUserId();