1. 去除强制的业务字段 insert 非空校验
2. 修复同步用户错误 3. 同步日志支持接口重跑 4. 新增部门树加载效果优化接口 5. 修复部分 post API 参数注解错误的问题
This commit is contained in:
@@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.system.api.dept;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.CompanyDeptInfo;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.module.system.api.dept.dto.*;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO;
|
||||
@@ -14,6 +15,7 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
import jakarta.annotation.Resource;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
|
||||
@@ -88,4 +90,10 @@ public class DeptApiImpl implements DeptApi {
|
||||
return success(BeanUtils.toBean(depts, DeptRespDTO.class));
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResult<Set<CompanyDeptInfoRespDTO>> getCompanyDeptInfoListByUserId(Long userId) {
|
||||
Set<CompanyDeptInfo> companyDeptInfos = deptService.getCompanyDeptInfoListByUserId(userId);
|
||||
return success(BeanUtils.toBean(companyDeptInfos, CompanyDeptInfoRespDTO.class));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -84,6 +84,23 @@ public class DeptController {
|
||||
return success(BeanUtils.toBean(list, DeptSimpleRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/top-level-list")
|
||||
@Operation(summary = "获取顶级部门列表", description = "用于懒加载,只返回没有父部门的顶级部门")
|
||||
@PreAuthorize("@ss.hasPermission('system:dept:query')")
|
||||
public CommonResult<List<DeptSimpleRespVO>> getTopLevelDeptList() {
|
||||
List<DeptDO> list = deptService.getTopLevelDeptList();
|
||||
return success(BeanUtils.toBean(list, DeptSimpleRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/children")
|
||||
@Operation(summary = "根据父部门ID获取子部门列表", description = "用于懒加载,根据父部门ID返回直接子部门")
|
||||
@Parameter(name = "parentId", description = "父部门ID", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('system:dept:query')")
|
||||
public CommonResult<List<DeptSimpleRespVO>> getChildrenDeptList(@RequestParam("parentId") Long parentId) {
|
||||
List<DeptDO> list = deptService.getDirectChildDeptList(parentId);
|
||||
return success(BeanUtils.toBean(list, DeptSimpleRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得部门信息")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
|
||||
@@ -49,4 +49,13 @@ public class SyncLogController {
|
||||
return success(BeanUtils.toBean(pageResult, SyncLogRespVO.class));
|
||||
}
|
||||
|
||||
@PostMapping("/rerun")
|
||||
@Operation(summary = "重新执行异常的同步接口")
|
||||
@Parameter(name = "id", description = "日志编号", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('system:sync-log:rerun')")
|
||||
public CommonResult<Boolean> rerunSyncLog(@RequestParam("id") Long id) {
|
||||
boolean success = syncLogService.rerunSyncLog(id);
|
||||
return success(success);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -58,6 +58,34 @@ public interface DeptMapper extends BaseMapperX<DeptDO> {
|
||||
UpdateWrapper<DeptDO> wrapper = new UpdateWrapper<>();
|
||||
wrapper.in("id", ids).set("tenant_id", tenantId);
|
||||
update(null, wrapper);
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据父部门ID和状态查询部门列表
|
||||
*
|
||||
* @param parentId 父部门ID
|
||||
* @param status 状态
|
||||
* @return 部门列表
|
||||
*/
|
||||
default List<DeptDO> selectList(Long parentId, Integer status) {
|
||||
return selectList(new LambdaQueryWrapperX<DeptDO>()
|
||||
.eqIfPresent(DeptDO::getParentId, parentId)
|
||||
.eqIfPresent(DeptDO::getStatus, status)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据父部门ID和状态查询子部门列表
|
||||
*
|
||||
* @param parentId 父部门ID
|
||||
* @param status 状态
|
||||
* @return 子部门列表
|
||||
*/
|
||||
default List<DeptDO> selectListByParentId(Long parentId, Integer status) {
|
||||
return selectList(new LambdaQueryWrapperX<DeptDO>()
|
||||
.eq(DeptDO::getParentId, parentId)
|
||||
.eqIfPresent(DeptDO::getStatus, status)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -118,4 +118,21 @@ public interface DeptService {
|
||||
List<DeptDO> getUserCompanyList();
|
||||
|
||||
Set<CompanyDeptInfo> getCompanyDeptInfoListByUserId(Long userId);
|
||||
|
||||
/**
|
||||
* 获取顶级部门列表
|
||||
* 用于懒加载,只返回没有父部门的顶级部门
|
||||
*
|
||||
* @return 顶级部门列表
|
||||
*/
|
||||
List<DeptDO> getTopLevelDeptList();
|
||||
|
||||
/**
|
||||
* 根据父部门ID获取直接子部门列表
|
||||
* 用于懒加载,只返回指定父部门的直接子部门
|
||||
*
|
||||
* @param parentId 父部门ID
|
||||
* @return 直接子部门列表
|
||||
*/
|
||||
List<DeptDO> getDirectChildDeptList(Long parentId);
|
||||
}
|
||||
|
||||
@@ -311,4 +311,19 @@ public class DeptServiceImpl implements DeptService {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DeptDO> getTopLevelDeptList() {
|
||||
// 获取顶级部门:没有父部门的部门(parentId为null或0)
|
||||
return deptMapper.selectList(DeptDO.PARENT_ID_ROOT, CommonStatusEnum.ENABLE.getStatus());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DeptDO> getDirectChildDeptList(Long parentId) {
|
||||
if (parentId == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
// 根据父部门ID获取直接子部门,只返回启用状态的部门
|
||||
return deptMapper.selectListByParentId(parentId, CommonStatusEnum.ENABLE.getStatus());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -99,4 +99,12 @@ public interface SyncLogService {
|
||||
String exceptionStack, String responseData, String encryptedResponse,
|
||||
String businessResult);
|
||||
|
||||
/**
|
||||
* 重新执行异常的同步接口
|
||||
*
|
||||
* @param logId 日志ID
|
||||
* @return 重跑是否成功
|
||||
*/
|
||||
boolean rerunSyncLog(Long logId);
|
||||
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -24,6 +24,15 @@ import java.util.*;
|
||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
|
||||
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUser;
|
||||
|
||||
/**
|
||||
* 用户同步服务实现类
|
||||
*
|
||||
* 注意:系统现已调整为允许用户名重复,相关调整:
|
||||
* 1. deleteUser 方法改为通过用户ID直接查找和删除用户,而非通过用户名
|
||||
* 2. 用户创建时不再校验用户名唯一性
|
||||
*
|
||||
* @author ZT
|
||||
*/
|
||||
@Service
|
||||
public class UserSyncServiceImpl implements UserSyncService {
|
||||
@Resource
|
||||
@@ -60,7 +69,8 @@ public class UserSyncServiceImpl implements UserSyncService {
|
||||
|
||||
@Override
|
||||
public UserDeleteResponseVO deleteUser(UserDeleteRequestVO requestVO) {
|
||||
AdminUserDO user = adminUserService.getUserByUsername(requestVO.getBimRemoteUser());
|
||||
// 由于用户名可能重复,直接通过 ID 查找和删除用户
|
||||
AdminUserDO user = adminUserService.getUser(requestVO.getBimUid());
|
||||
UserDeleteResponseVO resp = new UserDeleteResponseVO();
|
||||
resp.setBimRequestId(requestVO.getBimRequestId());
|
||||
if (user != null) {
|
||||
|
||||
@@ -52,6 +52,12 @@ import static cn.iocoder.yudao.module.system.enums.LogRecordConstants.*;
|
||||
|
||||
/**
|
||||
* 后台用户 Service 实现类
|
||||
*
|
||||
* 注意:系统现已调整为允许用户名重复,已移除用户名唯一性校验。
|
||||
* 这意味着:
|
||||
* 1. 用户创建和更新时不再检查用户名是否重复
|
||||
* 2. 通过用户名查询可能返回多个用户中的第一个
|
||||
* 3. 建议在需要精确查找时使用用户ID或其他唯一标识
|
||||
*
|
||||
* @author ZT
|
||||
*/
|
||||
@@ -416,8 +422,8 @@ public class AdminUserServiceImpl implements AdminUserService {
|
||||
return DataPermissionUtils.executeIgnore(() -> {
|
||||
// 校验用户存在
|
||||
AdminUserDO user = validateUserExists(id);
|
||||
// 校验用户名唯一
|
||||
validateUsernameUnique(id, username);
|
||||
// 校验用户名唯一 - 注释掉,允许用户名重复
|
||||
// validateUsernameUnique(id, username);
|
||||
// 校验手机号唯一
|
||||
validateMobileUnique(id, mobile);
|
||||
// 校验邮箱唯一
|
||||
|
||||
Reference in New Issue
Block a user