18339543638 4 месяцев назад
Родитель
Сommit
acd7fa95a4

+ 31 - 12
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/controller/SysUserController.java

@@ -1,10 +1,10 @@
 package cn.tr.module.sys.user.controller;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.tr.core.annotation.TenantIgnore;
 import cn.tr.core.pojo.CommonResult;
 import cn.tr.core.pojo.TableDataInfo;
 import cn.tr.core.strategy.LoginUserStrategy;
-import cn.tr.core.validation.Update;
 import cn.tr.module.api.ExcelApi;
 import cn.tr.module.export.bean.ExportResult;
 import cn.tr.module.sys.user.dto.*;
@@ -17,7 +17,6 @@ import io.swagger.annotations.*;
 import lombok.AllArgsConstructor;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
 
 import java.util.*;
 
@@ -57,25 +56,45 @@ public class SysUserController extends BaseController {
     @ApiOperationSupport(author = "lf")
     @ApiOperation(value = "根据id查询用户",notes = "权限: sys:user:query")
     @SaCheckPermission("sys:user:query")
-    public CommonResult<SysUserDTO> findById(@PathVariable("id") String id){
+    public CommonResult<SysUserVO> findById(@PathVariable("id") String id){
         return CommonResult.success(userService.selectSysUserById(id));
     }
 
-    @PostMapping("/edit")
-    @ApiOperationSupport(author = "lf")
-    @SaCheckPermission("sys:user:edit")
-    @ApiOperation(value = "根据id更新用户",notes = "权限: sys:user:edit")
-    public CommonResult<Boolean> edit(@RequestBody@Validated(Update.class) SysUserEditDTO source){
-        return CommonResult.success(userService.updateSysUserById(source));
-    }
 
     @PostMapping("/deleteByIds")
     @ApiOperationSupport(author = "lf")
     @ApiOperation(value = "删除用户",notes = "权限: sys:user:remove")
     @SaCheckPermission("sys:user:remove")
     @OperateLog
+    @TenantIgnore
     public CommonResult<Integer> deleteByIds(@RequestBody Collection<String> ids){
-        return CommonResult.success(userService.deleteSysUserByIds(ids));
+        String tenantId = LoginUserStrategy.tr.getTenantId();
+        return CommonResult.success(userService.deleteSysUserByIds(ids,tenantId));
+    }
+
+    @PostMapping("/freeze")
+    @ApiOperationSupport(author = "lf")
+    @ApiOperation(value = "冻结用户",notes = "权限: sys:user:edit")
+    @SaCheckPermission("sys:user:edit")
+    @OperateLog
+    @TenantIgnore
+    public CommonResult<Boolean> freeze(@RequestBody@Validated SysUserFreezeOrThawDTO source){
+        source.setTenantId(LoginUserStrategy.tr.getTenantId());
+        userService.freeze(source);
+        return CommonResult.success(Boolean.TRUE);
+    }
+
+
+    @PostMapping("/thaw")
+    @ApiOperationSupport(author = "lf")
+    @ApiOperation(value = "解冻用户",notes = "权限: sys:user:edit")
+    @SaCheckPermission("sys:user:edit")
+    @OperateLog
+    @TenantIgnore
+    public CommonResult<Boolean> thaw(@RequestBody@Validated SysUserFreezeOrThawDTO source){
+        source.setTenantId(LoginUserStrategy.tr.getTenantId());
+        userService.thaw(source);
+        return CommonResult.success(Boolean.TRUE);
     }
 
 
@@ -86,4 +105,4 @@ public class SysUserController extends BaseController {
     public CommonResult<ExportResult> exportUser(@RequestBody Collection<String> ids){
         return  CommonResult.success(ExportResult.of("用户管理信息",userService.exportOperationByIds(ids)));
     }
-}
+}

+ 16 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/dto/SysUserFreezeOrThawDTO.java

@@ -0,0 +1,16 @@
+package cn.tr.module.sys.user.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.*;
+@Data
+public class SysUserFreezeOrThawDTO {
+    @ApiModelProperty("批量操作用户id")
+    @NotNull(message = "所选用户不能为空")
+    private List<String> userIds;
+
+    @ApiModelProperty(hidden = true)
+    private String tenantId;
+}

+ 3 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/dto/SysUserListQueryDTO.java

@@ -20,6 +20,9 @@ public class SysUserListQueryDTO implements Serializable {
     @ApiModelProperty("模糊查询 用户名/昵称")
     private String blurry;
 
+    @ApiModelProperty("用户状态")
+    private String status;
+
     @ApiModelProperty(hidden = true)
     private String tenantId;
 }

+ 18 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/repository/SysUserRepository.java

@@ -11,6 +11,7 @@ import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
+import javax.validation.constraints.NotNull;
 import java.util.List;
 
 /**
@@ -33,4 +34,21 @@ public interface SysUserRepository extends RecoverMapper<SysUserPO> {
     List<SysUserVO> stdSelectList(@Param("query") SysUserListQueryDTO query);
 
     List<DoctorUserHospitalVO> stdSelectHospitalList(@Param("currentUserId") String currentUserId);
+
+    SysUserVO stdSelectById(@Param("id") String id);
+
+    /**
+     * 批量冻结用户
+     * @param userIds 用户ID列表
+     * @param tenantId 租户ID
+     */
+    void freezeBatch(@Param("userIds") List<String> userIds, @Param("tenantId") String tenantId);
+
+    /**
+     * 批量解冻用户
+     * @param userIds 用户ID列表
+     * @param tenantId 租户ID
+     */
+    void thawBatch(@Param("userIds") List<String> userIds, @Param("tenantId") String tenantId);
+
 }

+ 14 - 2
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/ISysUserService.java

@@ -22,7 +22,7 @@ public interface ISysUserService {
      * @param id 用户id
      * @return 用户
      */
-    SysUserDTO selectSysUserById(String id);
+    SysUserVO selectSysUserById(String id);
 
 
     /**
@@ -80,7 +80,7 @@ public interface ISysUserService {
      * @param ids 用户id
      * @return 删除数量
      */
-    int deleteSysUserByIds(Collection<String> ids);
+    int deleteSysUserByIds(Collection<String> ids,String tenantId);
 
     /**
      * 判断用户名是否重复
@@ -114,4 +114,16 @@ public interface ISysUserService {
     }
 
     String exportOperationByIds(Collection<String> ids);
+
+    /**
+     * 冻结用户
+     * @param sources
+     */
+    void freeze(SysUserFreezeOrThawDTO sources);
+
+    /**
+     * 解冻用户
+     * @param source
+     */
+    void thaw(SysUserFreezeOrThawDTO source);
 }

+ 30 - 20
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysUserServiceImpl.java

@@ -7,6 +7,7 @@ import cn.hutool.core.util.StrUtil;
 import cn.tr.core.annotation.TenantIgnore;
 import cn.tr.core.exception.ServiceException;
 import cn.tr.core.exception.TRExcCode;
+import cn.tr.core.strategy.LoginUserStrategy;
 import cn.tr.core.utils.PswUtils;
 import cn.tr.core.utils.RoleUtil;
 import cn.tr.module.api.ExcelApi;
@@ -16,8 +17,10 @@ import cn.tr.module.sys.log.dto.SysOperationLogExcelDTO;
 import cn.tr.module.sys.user.dto.*;
 import cn.tr.module.sys.user.mapper.SysUserMapper;
 import cn.tr.module.sys.user.po.SysOrgPO;
+import cn.tr.module.sys.user.po.SysUserTenantPO;
 import cn.tr.module.sys.user.repository.SysOrgRepository;
 import cn.tr.module.sys.user.repository.SysUserRepository;
+import cn.tr.module.sys.user.repository.SysUserTenantRepository;
 import cn.tr.module.sys.user.service.*;
 import cn.tr.module.sys.user.po.SysUserPO;
 import cn.tr.module.sys.user.vo.SysUserVO;
@@ -71,26 +74,17 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserRepository, SysUserPO
     @Lazy
     private SysOrgRepository orgRepository;
 
+    @Autowired
+    private SysUserTenantRepository userTenantRepository;
+
     @Override
     public List<SysUserVO> stdSelectSysUserList(SysUserListQueryDTO query) {
         return baseMapper.stdSelectList(query);
     }
 
     @Override
-    public SysUserDTO selectSysUserById(String id) {
-        SysUserDTO result = SysUserMapper.INSTANCE.toUserDTO(baseMapper.selectById(id));
-        if (result == null) {
-            return result;
-        }
-        result.setRoleIds(userRoleService.findRoleIdsByUserId(id));
-        result.setPortalIds(userPortalService.findPortalsByUserId(id).stream()
-                .map(SysUserPortalListDTO::getId).collect(Collectors.toSet()));
-        result.setPostIds(userPositionService.findPositionIdsByUserId(id));
-        SysOrgPO sysOrgPO = orgRepository.selectById(result.getOrgId());
-        if(ObjectUtil.isNotNull(sysOrgPO)){
-            result.setOrgPathName(sysOrgPO.getNodePath());
-        }
-        return result;
+    public SysUserVO selectSysUserById(String id) {
+        return baseMapper.stdSelectById(id);
     }
 
     @Override
@@ -154,13 +148,13 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserRepository, SysUserPO
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public int deleteSysUserByIds(Collection<String> ids) {
-        if (CollectionUtil.isEmpty(ids)) {
-            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001, "请选择要删除的数据");
+    public int deleteSysUserByIds(Collection<String> ids,String tenantId) {
+        if(CollectionUtil.isEmpty(ids)||StrUtil.isEmpty(tenantId)){
+            return 0;
         }
-        int result = baseMapper.deleteBatchIds(ids);
-        sysUserService.delUserIdAndNickNameCache();
-        return result;
+        return userTenantRepository.delete(new LambdaQueryWrapper<SysUserTenantPO>()
+                .in(SysUserTenantPO::getUserId, ids)
+                .eq(SysUserTenantPO::getTenantId, tenantId));
     }
 
     @Override
@@ -221,6 +215,22 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserRepository, SysUserPO
 
     }
 
+    @Override
+    public void freeze(SysUserFreezeOrThawDTO source) {
+        if (CollectionUtil.isEmpty(source.getUserIds())) {
+            return;
+        }
+        baseMapper.freezeBatch(source.getUserIds(),source.getTenantId());
+    }
+
+    @Override
+    public void thaw(SysUserFreezeOrThawDTO source) {
+        if (CollectionUtil.isEmpty(source.getUserIds())) {
+            return;
+        }
+        baseMapper.thawBatch(source.getUserIds(),source.getTenantId());
+    }
+
 
     private void assignUserRole(String userId, Set<String> roleIds) {
         userRoleService.assignUserRole(userId, roleIds);

+ 52 - 0
tr-modules/tr-module-system/src/main/resources/mapper/user/SysUserMapper.xml

@@ -53,6 +53,9 @@
                 or su.nickname  LIKE CONCAT('%', #{query.blurry}, '%')
                 )
             </if>
+            <if test="query.status != null and query.status != ''">
+                AND sut.status = #{query.status}
+            </if>
         </where>
         GROUP BY
         su.id, su.username, su.nickname, su.sort, sut.status, su.last_login_date, su.last_login_ip
@@ -75,4 +78,53 @@
         join sys_tenant as st on st.id=sut.tenant_id
         where su.id=#{currentUserId}
     </select>
+
+    <select id="stdSelectById" resultMap="stdResult">
+        SELECT
+        su.id AS id,
+        su.username AS username,
+        su.nickname AS nickname,
+        COALESCE(
+        (SELECT json_agg(json_build_object(
+        'id', sr2.id,
+        'name', sr2.name
+        ))
+        FROM sys_user_role sur2
+        LEFT JOIN sys_role sr2 ON sur2.role_id = sr2.id
+        WHERE sur2.user_id = su.id
+        AND sr2.id IS NOT NULL
+        ),
+        '[]'
+        ) AS role_list,
+        su.sort AS sort,
+        sut.status AS status,
+        to_char(su.last_login_date, 'yyyy-mm-dd hh24:mi:ss') AS last_login_time,
+        su.last_login_ip AS last_login_ip
+        FROM
+        sys_user su
+        JOIN sys_user_tenant sut ON su.id = sut.user_id
+        where su.id = #{id}
+    </select>
+
+    <!-- 批量冻结用户 -->
+    <update id="freezeBatch">
+        UPDATE sys_user_tenant
+        SET status = 'USER_BAN'
+        WHERE tenant_id = #{tenantId}
+        AND user_id IN
+        <foreach collection="userIds" item="userId" open="(" separator="," close=")">
+            #{userId}
+        </foreach>
+    </update>
+
+    <!-- 批量解冻用户 -->
+    <update id="thawBatch">
+        UPDATE sys_user_tenant
+        SET status = 'USER_NORMAL'
+        WHERE tenant_id = #{tenantId}
+        AND user_id IN
+        <foreach collection="userIds" item="userId" open="(" separator="," close=")">
+            #{userId}
+        </foreach>
+    </update>
 </mapper>