diff --git a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/utils/DataUtil.java b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/utils/DataUtil.java new file mode 100644 index 000000000..20e57b0e1 --- /dev/null +++ b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/utils/DataUtil.java @@ -0,0 +1,86 @@ +package com.pig4cloud.pigx.admin.api.utils; + +import cn.hutool.core.collection.CollUtil; +import com.pig4cloud.pigx.admin.api.entity.SysDept; +import com.pig4cloud.pigx.admin.api.entity.SysMenu; +import lombok.experimental.UtilityClass; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +@UtilityClass +public class DataUtil { + + /** + * 根据当前部门id,向上查找所有的部门 + * @param deptId 当前部门id + * @param allDeptList 所有部门列表 + * @return 返回包括自己部门在内的所有父级部门 + */ + public List selectParentByDept(long deptId, List allDeptList) { + List list = new ArrayList<>(); + Optional optionalDept = allDeptList.stream().filter(w -> w.getDeptId() == deptId).findFirst(); + + optionalDept.ifPresent(dept -> { + if (dept.getParentId() != null) { + Long parentId = dept.getParentId(); + List depts = selectParentByDept(parentId, allDeptList); + list.add(dept); + list.addAll(depts); + } + }); + + return list; + } + + /** + * 根据当前部门id,向下查找所有的部门 + * @param deptId 当前部门id + * @param allDeptList 所有部门列表 + * @return 返回包括自己部门在内的所有子级部门 + */ + public List selectChildrenByDept(long deptId, List allDeptList) { + List list = new ArrayList<>(); + Optional optionalDept = allDeptList.stream().filter(w -> w.getDeptId() == deptId).findFirst(); + + optionalDept.ifPresent(list::add); + + List collect = allDeptList.stream() + .filter(w -> w.getParentId() == deptId) + .collect(Collectors.toList()); + + if (CollUtil.isEmpty(collect)) { + return list; + } + + collect.forEach(dept -> { + List depts = selectChildrenByDept(dept.getDeptId(), allDeptList); + list.addAll(depts); + }); + + return list; + } + + /** + * 根据当前菜单id,向下查找所有的菜单 + * @param menuId 当前菜单id + * @param allMenuList 所有菜单列表 + * @return 返回包括自己在内的所有子级菜单 + */ + public List selectChildrenByMenu(long menuId, List allMenuList) { + List list = new ArrayList<>(); + list.add(allMenuList.stream().filter(w -> w.getMenuId() == menuId).findFirst().get()); + + List collect = allMenuList.stream() + .filter(w -> w.getParentId() == menuId) + .collect(Collectors.toList()); + if (CollUtil.isEmpty(collect)) { + return list; + } + collect.forEach(dept -> list.addAll(selectChildrenByMenu(dept.getMenuId(), allMenuList))); + return list; + } + +} diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysScheduleController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysScheduleController.java index f10ed93e4..ba28d2c1f 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysScheduleController.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysScheduleController.java @@ -33,6 +33,7 @@ import org.springdoc.core.annotations.ParameterObject; import org.springframework.http.HttpHeaders; import org.springframework.web.bind.annotation.*; +import java.time.LocalDate; import java.util.List; /** @@ -122,8 +123,9 @@ public class SysScheduleController { @Operation(summary = "列表查询", description = "列表查询") @GetMapping("/list") - public R list(String month) { - List list = sysScheduleService.selectListByScope(month); + public R list(@RequestParam(required = false) LocalDate startDate, + @RequestParam(required = false) LocalDate endDate) { + List list = sysScheduleService.selectListByScope(startDate, endDate); return R.ok(list); } diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/SysScheduleService.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/SysScheduleService.java index 860cdb334..7eb4295dc 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/SysScheduleService.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/SysScheduleService.java @@ -22,6 +22,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.pig4cloud.pigx.admin.api.entity.SysScheduleEntity; +import java.time.LocalDate; import java.util.List; /** @@ -32,8 +33,18 @@ import java.util.List; */ public interface SysScheduleService extends IService { + /** + * 根据分页信息和日程实体获取指定范围的日程列表 + * @param page 分页信息 + * @param sysSchedule 日程实体 + * @return 日程列表 + */ IPage getScheduleByScope(Page page, SysScheduleEntity sysSchedule); - List selectListByScope(String month); + /** + * 根据月份查询日程列表 + * @return 日程列表 + */ + List selectListByScope(LocalDate startDate, LocalDate endDate); } diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysDeptServiceImpl.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysDeptServiceImpl.java index a59bf9f0a..20c4fcc53 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysDeptServiceImpl.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysDeptServiceImpl.java @@ -20,21 +20,19 @@ package com.pig4cloud.pigx.admin.service.impl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Dict; import cn.hutool.core.lang.tree.Tree; import cn.hutool.core.lang.tree.TreeNode; import cn.hutool.core.lang.tree.TreeUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.pig4cloud.pigx.admin.api.entity.SysDept; -import com.pig4cloud.pigx.admin.api.entity.SysPost; -import com.pig4cloud.pigx.admin.api.entity.SysUser; -import com.pig4cloud.pigx.admin.api.entity.SysUserPost; +import com.pig4cloud.pigx.admin.api.constant.OrgTypeEnum; +import com.pig4cloud.pigx.admin.api.entity.*; +import com.pig4cloud.pigx.admin.api.utils.DataUtil; import com.pig4cloud.pigx.admin.api.vo.DeptExcelVO; -import com.pig4cloud.pigx.admin.mapper.SysDeptMapper; -import com.pig4cloud.pigx.admin.mapper.SysPostMapper; -import com.pig4cloud.pigx.admin.mapper.SysUserMapper; -import com.pig4cloud.pigx.admin.mapper.SysUserPostMapper; +import com.pig4cloud.pigx.admin.api.vo.OrgTreeVO; +import com.pig4cloud.pigx.admin.mapper.*; import com.pig4cloud.pigx.admin.service.SysDeptService; import com.pig4cloud.pigx.common.core.util.R; import com.pig4cloud.pigx.common.data.datascope.DataScope; @@ -66,6 +64,8 @@ public class SysDeptServiceImpl extends ServiceImpl impl private final SysPostMapper postMapper; + private final SysRoleMapper roleMapper; + private final SysUserPostMapper userPostMapper; /** @@ -243,6 +243,103 @@ public class SysDeptServiceImpl extends ServiceImpl impl .toList(); } + /** + * 根据父部门ID和类型获取组织树 + * @param parentDeptId 父部门ID + * @param type 类型 + * @return 组织树信息 + */ + public Map listOrgTree(Long parentDeptId, String type) { + + List orgs = new LinkedList<>(); + + if (StrUtil.equals(type, OrgTypeEnum.ROLE.getType())) { + // 角色 + List roleList = roleMapper.selectList(Wrappers.emptyWrapper()); + + roleList.forEach(role -> { + OrgTreeVO orgTreeVo = new OrgTreeVO(); + orgTreeVo.setId(role.getRoleId()); + orgTreeVo.setName(role.getRoleName()); + orgTreeVo.setType(OrgTypeEnum.ROLE.getType()); + orgTreeVo.setSelected(false); + orgs.add(orgTreeVo); + }); + + return Dict.create() + .set("roleList", orgs) + .set("childDepartments", orgs) + .set("employees", new ArrayList<>()); + } + + Dict dict = Dict.create() + .set("titleDepartments", new ArrayList<>()) + .set("roleList", new ArrayList<>()) + .set("employees", new ArrayList<>()); + + List deptList = this.list( + Wrappers.lambdaQuery().eq(Objects.nonNull(parentDeptId), SysDept::getParentId, parentDeptId)); + + // 查询所有部门及员工 + List deptVoList = new ArrayList<>(); + deptList.forEach(dept -> { + OrgTreeVO orgTreeVo = new OrgTreeVO(); + orgTreeVo.setId(dept.getDeptId()); + orgTreeVo.setName(dept.getName()); + orgTreeVo.setType(OrgTypeEnum.DEPT.getType()); + orgTreeVo.setSelected(false); + deptVoList.add(orgTreeVo); + }); + dict.set("childDepartments", deptVoList); + + if (!StrUtil.equals(type, OrgTypeEnum.DEPT.getType())) { + + List userVoList = new ArrayList<>(); + + List userList = userMapper + .selectList(Wrappers.lambdaQuery().in(SysUser::getDeptId, CollUtil.toList(parentDeptId))); + + userList.forEach(user -> { + OrgTreeVO orgTreeVo = new OrgTreeVO(); + orgTreeVo.setId(user.getUserId()); + orgTreeVo.setName(user.getUsername()); + orgTreeVo.setType(OrgTypeEnum.USER.getType()); + orgTreeVo.setSelected(false); + orgTreeVo.setAvatar(user.getAvatar()); + userVoList.add(orgTreeVo); + }); + dict.set("employees", userVoList); + } + + if (parentDeptId > 0) { + List allDept = this.list(); + List depts = DataUtil.selectParentByDept(parentDeptId, allDept); + dict.set("titleDepartments", CollUtil.reverse(depts)); + } + + return dict; + } + + /** + * 模糊搜索用户 + * @param username 用户名/拼音/首字母 + * @return 匹配到的用户 + */ + public List getOrgTreeUser(String username) { + return userMapper.selectList(Wrappers.lambdaQuery().like(SysUser::getUsername, username)) + .stream() + .map(user -> { + OrgTreeVO orgTreeVo = new OrgTreeVO(); + orgTreeVo.setId(user.getUserId()); + orgTreeVo.setName(user.getUsername()); + orgTreeVo.setType(OrgTypeEnum.USER.getType()); + orgTreeVo.setSelected(false); + orgTreeVo.setAvatar(user.getAvatar()); + return orgTreeVo; + }) + .collect(Collectors.toList()); + } + /** * 递归查询所有子节点。 * @param allDeptList 所有部门列表 diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysScheduleServiceImpl.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysScheduleServiceImpl.java index 0704a874d..d07c09527 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysScheduleServiceImpl.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysScheduleServiceImpl.java @@ -16,12 +16,15 @@ */ package com.pig4cloud.pigx.admin.service.impl; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.pig4cloud.pigx.admin.api.constant.ScheduleStateEnum; import com.pig4cloud.pigx.admin.api.entity.SysScheduleEntity; import com.pig4cloud.pigx.admin.mapper.SysScheduleMapper; import com.pig4cloud.pigx.admin.service.SysScheduleService; @@ -30,8 +33,6 @@ import com.pig4cloud.pigx.common.security.util.SecurityUtils; import org.springframework.stereotype.Service; import java.time.LocalDate; -import java.time.format.DateTimeFormatter; -import java.time.temporal.TemporalAdjusters; import java.util.List; import java.util.Objects; @@ -45,6 +46,12 @@ import java.util.Objects; public class SysScheduleServiceImpl extends ServiceImpl implements SysScheduleService { + /** + * 根据范围获取计划列表 + * @param page 分页对象 + * @param sysSchedule 计划实体对象 + * @return 分页对象 + */ @Override public IPage getScheduleByScope(Page page, SysScheduleEntity sysSchedule) { LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); @@ -56,13 +63,20 @@ public class SysScheduleServiceImpl extends ServiceImpl selectListByScope(String month) { - LocalDate parse = LocalDate.parse(month, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - LocalDate firstDay = parse.with(TemporalAdjusters.firstDayOfMonth()); // 获取当前月的第一天 - LocalDate lastDay = parse.with(TemporalAdjusters.lastDayOfMonth()); + public List selectListByScope(LocalDate startDate, LocalDate endDate) { + DateTime beginOfWeek = DateUtil.beginOfWeek(DateUtil.date()); + DateTime endOfWeek = DateUtil.endOfWeek(DateUtil.date()); LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); - wrapper.between(SysScheduleEntity::getDate, firstDay, lastDay); + wrapper.between(SysScheduleEntity::getDate, Objects.isNull(startDate) ? beginOfWeek : startDate, + Objects.isNull(endDate) ? endOfWeek : endDate); + wrapper.ne(SysScheduleEntity::getState, ScheduleStateEnum.END.getCode()); DataScope dataScope = new DataScope(); dataScope.setUsername(SecurityUtils.getUser().getUsername()); return baseMapper.selectListByScope(wrapper, dataScope); diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysTenantServiceImpl.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysTenantServiceImpl.java index 60cbfc348..e70725940 100755 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysTenantServiceImpl.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysTenantServiceImpl.java @@ -20,6 +20,7 @@ import cn.hutool.core.util.CharUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.pig4cloud.pigx.admin.api.constant.TenantStateEnum; import com.pig4cloud.pigx.admin.api.entity.*; import com.pig4cloud.pigx.admin.config.ClientDetailsInitRunner; import com.pig4cloud.pigx.admin.mapper.SysRoleMenuMapper; @@ -90,7 +91,7 @@ public class SysTenantServiceImpl extends ServiceImpl getNormalTenant() { return baseMapper - .selectList(Wrappers.lambdaQuery().eq(SysTenant::getStatus, CommonConstants.STATUS_NORMAL)); + .selectList(Wrappers.lambdaQuery().eq(SysTenant::getStatus, TenantStateEnum.NORMAL.getCode())); } /**