提交 b5391e85 authored 作者: hzh's avatar hzh

代码优化

上级 a9dd7d90
package org.dromara.system.controller.system;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.system.domain.vo.SysDeptDetailVo;
import org.dromara.system.domain.vo.SysDeptIndexVo;
import org.dromara.system.service.ISysDeptService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @author hzh
* @date 2025-04-28
**/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/index")
public class SysIndexController {
private final ISysDeptService deptService;
/**
* 部门列表
*/
@GetMapping("/deptList")
public R<List<SysDeptIndexVo>> deptList() {
return R.ok(TenantHelper.ignore(deptService::indexDeptList));
}
/**
* 部门详情
*/
@GetMapping("/deptDetail")
public R<SysDeptDetailVo> deptDetail(@RequestParam Long deptId) {
return R.ok(TenantHelper.ignore(() -> deptService.deptDetailIndex(deptId)));
}
}
package org.dromara.system.domain.vo;
import lombok.Data;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
/**
* 部门视图对象 sys_dept
*
* @author Michelle.Chung
*/
@Data
public class SysDeptDetailVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 部门id
*/
private Long deptId;
/**
* 部门名称
*/
private String deptName;
/**
* 部门简介
*/
private String introduction;
/**
* 部门类别编码
*/
private String deptCategory;
/**
* 负责人ID
*/
private Long leader;
/**
* 负责人
*/
private String leaderName;
/**
* 负责人
*/
@Translation(type = TransConstant.OSS_ID_TO_URL)
private Long avatar;
/**
* 微信号
*/
private String wechatId;
/**
* 微信二维码
*/
@Translation(type = TransConstant.OSS_ID_TO_URL)
private Long wechatQrCode;
/**
* 员工集合
*/
private List<User> userList;
@Data
public static class User{
/**
* 用户ID
*/
private Long userId;
/**
* 用户昵称
*/
private String nickName;
/**
* 岗位组
*/
private List<Long> postIds;
private List<String> postNameList;
/**
* 头像地址
*/
@Translation(type = TransConstant.OSS_ID_TO_URL)
private Long avatar;
/**
* 微信号
*/
private String wechatId;
/**
* 微信二维码
*/
@Translation(type = TransConstant.OSS_ID_TO_URL)
private Long wechatQrCode;
}
}
package org.dromara.system.domain.vo;
import lombok.Data;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import java.io.Serial;
import java.io.Serializable;
/**
* 部门视图对象 sys_dept
*
* @author Michelle.Chung
*/
@Data
public class SysDeptIndexVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 部门id
*/
private Long deptId;
/**
* 部门名称
*/
private String deptName;
/**
* 部门类别编码
*/
private String deptCategory;
/**
* 显示顺序
*/
private Integer orderNum;
/**
* 负责人ID
*/
private Long leader;
/**
* 负责人
*/
private String leaderName;
/**
* 负责人
*/
@Translation(type = TransConstant.OSS_ID_TO_URL)
private Long avatar;
}
......@@ -98,7 +98,7 @@ public class SysUserVo implements Serializable {
private String wechatId;
/**
* 卫星二维码
* 微信二维码
*/
private Long wechatQrCode;
......
......@@ -2,6 +2,8 @@ package org.dromara.system.service;
import cn.hutool.core.lang.tree.Tree;
import org.dromara.system.domain.bo.SysDeptBo;
import org.dromara.system.domain.vo.SysDeptDetailVo;
import org.dromara.system.domain.vo.SysDeptIndexVo;
import org.dromara.system.domain.vo.SysDeptVo;
import java.util.List;
......@@ -131,4 +133,18 @@ public interface ISysDeptService {
* @return 结果
*/
int deleteDeptById(Long deptId);
/**
* 首页部门列表
*
* @return 首页部门列表
*/
List<SysDeptIndexVo> indexDeptList();
/**
* 首页部门详情
* @param deptId 部门id
* @return
*/
SysDeptDetailVo deptDetailIndex(Long deptId);
}
package org.dromara.system.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.tree.Tree;
......@@ -8,24 +9,20 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.dromara.common.core.constant.CacheNames;
import org.dromara.common.core.constant.UserConstants;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.TreeBuildUtils;
import org.dromara.common.core.utils.*;
import org.dromara.common.mybatis.helper.DataBaseHelper;
import org.dromara.common.redis.utils.CacheUtils;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.domain.SysDept;
import org.dromara.system.domain.SysRole;
import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.*;
import org.dromara.system.domain.bo.SysDeptBo;
import org.dromara.system.domain.vo.SysDeptDetailVo;
import org.dromara.system.domain.vo.SysDeptIndexVo;
import org.dromara.system.domain.vo.SysDeptVo;
import org.dromara.system.mapper.SysDeptMapper;
import org.dromara.system.mapper.SysRoleMapper;
import org.dromara.system.mapper.SysUserMapper;
import org.dromara.system.mapper.*;
import org.dromara.system.service.ISysDeptService;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
......@@ -34,6 +31,8 @@ import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* 部门管理 服务实现
......@@ -47,6 +46,8 @@ public class SysDeptServiceImpl implements ISysDeptService {
private final SysDeptMapper baseMapper;
private final SysRoleMapper roleMapper;
private final SysUserMapper userMapper;
private final SysUserPostMapper userPostMapper;
private final SysPostMapper postMapper;
/**
* 查询部门管理数据
......@@ -341,4 +342,48 @@ public class SysDeptServiceImpl implements ISysDeptService {
return baseMapper.deleteById(deptId);
}
@Override
public List<SysDeptIndexVo> indexDeptList() {
List<SysDept> deptList = baseMapper.selectList(SysDept::getStatus, UserConstants.DEPT_NORMAL);
//查询用户信息
List<Long> userIds = StreamUtils.toList(deptList, SysDept::getLeader);
userIds = CollectionUtils.isEmpty(userIds) ? List.of(-1L) : userIds;
List<SysUser> userList = userMapper.selectList(SysUser::getUserId, userIds);
List<SysDeptIndexVo> indexList = BeanUtil.copyToList(deptList, SysDeptIndexVo.class);
indexList.forEach(sdi -> {
userList.stream()
.filter(user -> Objects.equals(user.getUserId(), sdi.getLeader()))
.findFirst()
.ifPresent(u -> {
sdi.setLeaderName(u.getNickName());
sdi.setAvatar(u.getAvatar());
});
});
return indexList;
}
@Override
public SysDeptDetailVo deptDetailIndex(Long deptId) {
SysDept dept = baseMapper.selectById(deptId);
if (ObjectUtil.isNull(dept)) {
throw new ServiceException("部门不存在");
}
//查询部门员工
List<SysUser> userList = userMapper.selectList(SysUser::getDeptId, dept.getDeptId());
List<SysUserPost> supList = CollectionUtils.isEmpty(userList) ? List.of() : userPostMapper.selectList(SysUserPost::getUserId, StreamUtils.toList(userList, SysUser::getUserId));
List<SysPost> postList = postMapper.selectByIds(StreamUtils.toSet(supList, SysUserPost::getPostId));
//构建数据
SysDeptDetailVo detail = BeanUtil.copyProperties(dept, SysDeptDetailVo.class);
List<SysDeptDetailVo.User> users = userList.stream().map(user -> {
SysDeptDetailVo.User u = BeanUtil.copyProperties(user, SysDeptDetailVo.User.class);
u.setPostIds(supList.stream().filter(sup -> Objects.equals(sup.getUserId(), user.getUserId())).map(SysUserPost::getPostId).collect(Collectors.toList()));
if (CollectionUtils.isNotEmpty(u.getPostIds())) {
u.setPostNameList(u.getPostIds().stream().map(postId -> postList.stream().filter(p -> Objects.equals(p.getPostId(), postId)).map(SysPost::getPostName).findFirst().orElse(null)).collect(Collectors.toList()));
}
return u;
}).collect(Collectors.toList());
detail.setUserList(users);
return detail;
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论