diff --git a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/vo/total/UserStaffingTotalVo.java b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/vo/total/UserStaffingTotalVo.java new file mode 100644 index 000000000..e9fa29b1c --- /dev/null +++ b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/vo/total/UserStaffingTotalVo.java @@ -0,0 +1,40 @@ +package com.bsd.pjcloud.admin.api.vo.total; + +import lombok.Data; + +import java.util.List; + +@Data +public class UserStaffingTotalVo { + + /** + * 部门id + */ + private Long deptId; + + /** + * 部门名 + */ + private String deptName; + + /** + * 部门总人数 + */ + private Long deptTotalPerson = 0L; + + /** + * 在编人数 + */ + private Long staffingPerson = 0L; + + /** + * 非在编人数 + */ + private Long noneStaffingPerson = 0L; + + /** + * 统计人数 + */ + private Long totalPerson = 0L; + +} diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserController.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserController.java index 8c37f4894..c69cafa62 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserController.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserController.java @@ -133,16 +133,16 @@ public class SysUserController { @GetMapping("/get-name-or-mobile") public R> getUserByNameOrMobile(@RequestParam("keyword") String keyword) { List users = userService.list( - Wrappers.query().lambda() - .eq(SysUser::getName, keyword) - .or() - .eq(SysUser::getPhone, keyword) + Wrappers.query().lambda() + .eq(SysUser::getName, keyword) + .or() + .eq(SysUser::getPhone, keyword) ); if (CollectionUtils.isEmpty(users)) { return R.failed(MsgUtils.getMessage(ErrorCodes.SYS_USER_USERINFO_EMPTY, keyword)); } Map deptListByDeptIds = sysDeptService.getDeptListByDeptIds( - users.stream().map(SysUser::getDeptId).collect(Collectors.toList()) + users.stream().map(SysUser::getDeptId).collect(Collectors.toList()) ); List userDeptSimpleInfos = users.stream().map(user -> { UserDeptSimpleInfo userDeptSimpleInfo = new UserDeptSimpleInfo(); @@ -419,14 +419,15 @@ public class SysUserController { /** * 根据部门id查询用户列表 + * * @param deptId * @return */ // @Inner @GetMapping("/getUserIdListByDeptId") - public R> getUserIdListByDeptId(@RequestParam("deptId")Long deptId, - @RequestParam(value = "name",required = false) String name) { - return R.ok(userService.listUserIdByDeptId(deptId,name)); + public R> getUserIdListByDeptId(@RequestParam("deptId") Long deptId, + @RequestParam(value = "name", required = false) String name) { + return R.ok(userService.listUserIdByDeptId(deptId, name)); } /** @@ -497,7 +498,7 @@ public class SysUserController { @Schema(description = "根据ids获取用户map") public R> getUserMap(@RequestParam(value = "userIds") Set userIds) { LambdaQueryWrapper sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>(); - sysUserLambdaQueryWrapper.in(SysUser::getUserId, userIds); + sysUserLambdaQueryWrapper.in(ObjectUtil.isNotEmpty(userIds), SysUser::getUserId, userIds); List list = userService.list(sysUserLambdaQueryWrapper); Map userMap = list.stream().collect(Collectors.toMap(SysUser::getUserId, user -> user)); return R.ok(userMap); @@ -544,7 +545,7 @@ public class SysUserController { } List list = sysUserRoleService.list(Wrappers.lambdaQuery().eq(SysUserRole::getRoleId, sysRole.getRoleId())); List userIds = list.stream().map(sysUserRole -> sysUserRole.getUserId()).collect(Collectors.toList()); - List listData = userService.list(Wrappers.lambdaQuery().in(SysUser::getUserId, userIds)); + List listData = userService.list(Wrappers.lambdaQuery().in(SysUser::getUserId, userIds)); //转换成vo,只返回id+手机号+姓名,安全考虑 List userVOList = listData.stream().map(sysUser -> { UserSimpleVo userVO = new UserSimpleVo(); diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/total/SysUserTotalController.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/total/SysUserTotalController.java new file mode 100644 index 000000000..3607b84f9 --- /dev/null +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/total/SysUserTotalController.java @@ -0,0 +1,41 @@ +package com.bsd.pjcloud.admin.controller.total; + +import com.bsd.pjcloud.admin.api.dto.UserDTO; +import com.bsd.pjcloud.admin.api.vo.total.UserStaffingTotalVo; +import com.bsd.pjcloud.admin.service.SysUserTotalService; +import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.common.data.datascope.DataScope; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpHeaders; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + + +/** + * 用户相关统计 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/user/total") +@Tag(description = "connect", name = "用户相关统计") +@SecurityRequirement(name = HttpHeaders.AUTHORIZATION) +public class SysUserTotalController { + + private final SysUserTotalService sysUserTotalService; + + @Operation(summary = "用户在/非编人员统计", description = "用户在/非编人员统计") + @PostMapping("/staffing-total") + public R> staffingTotal(@RequestBody UserDTO dto) { + DataScope dataScope = null; + return R.ok(sysUserTotalService.staffingTotal(dto, dataScope)); + } + + +} diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/mapper/SysUserMapper.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/mapper/SysUserMapper.java index 707e00eae..23c7e8505 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/mapper/SysUserMapper.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/mapper/SysUserMapper.java @@ -24,6 +24,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.admin.api.dto.UserDTO; import com.bsd.pjcloud.admin.api.entity.SysUser; import com.bsd.pjcloud.admin.api.vo.UserVO; +import com.bsd.pjcloud.admin.api.vo.total.UserStaffingTotalVo; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper; import org.apache.ibatis.annotations.Mapper; @@ -42,35 +43,43 @@ import java.util.List; @Mapper public interface SysUserMapper extends PjcloudBaseMapper { - /** - * 通过用户名查询用户信息(含有角色信息) - * @param username 用户名 - * @return userVo - */ - UserVO getUserVoByUsername(String username); + /** + * 通过用户名查询用户信息(含有角色信息) + * + * @param username 用户名 + * @return userVo + */ + UserVO getUserVoByUsername(String username); - /** - * 分页查询用户信息(含角色) - * @param page 分页 - * @param userDTO 查询参数 - * @param dataScope - * @return list - */ - IPage getUserVosPage(Page page, @Param("query") UserDTO userDTO, DataScope dataScope); + /** + * 分页查询用户信息(含角色) + * + * @param page 分页 + * @param userDTO 查询参数 + * @param dataScope + * @return list + */ + IPage getUserVosPage(Page page, @Param("query") UserDTO userDTO, DataScope dataScope); - /** - * 通过ID查询用户信息 - * @param id 用户ID - * @return userVo - */ - UserVO getUserVoById(Long id); + /** + * 通过ID查询用户信息 + * + * @param id 用户ID + * @return userVo + */ + UserVO getUserVoById(Long id); - /** - * 查询用户列表 - * @param userDTO 查询条件 - * @param dataScope 数据权限声明 - * @return - */ - List selectVoListByScope(@Param("query") UserDTO userDTO, @Param("ids") Long[] ids, DataScope dataScope); + /** + * 查询用户列表 + * + * @param userDTO 查询条件 + * @param dataScope 数据权限声明 + * @return + */ + List selectVoListByScope(@Param("query") UserDTO userDTO, @Param("ids") Long[] ids, DataScope dataScope); + /** + * 用户在/非编人员统计 + */ + List staffingListByDept(@Param("dto") UserDTO dto, DataScope dataScope); } diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserTotalService.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserTotalService.java new file mode 100644 index 000000000..1b94ef47d --- /dev/null +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserTotalService.java @@ -0,0 +1,16 @@ +package com.bsd.pjcloud.admin.service; + +import com.bsd.pjcloud.admin.api.dto.UserDTO; +import com.bsd.pjcloud.admin.api.vo.total.UserStaffingTotalVo; +import com.bsd.pjcloud.common.data.datascope.DataScope; + +import java.util.List; + +public interface SysUserTotalService { + + /** + * 用户在/非编人员统计 + */ + List staffingTotal(UserDTO dto, DataScope dataScope); + +} diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/total/SysUserTotalServiceImpl.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/total/SysUserTotalServiceImpl.java new file mode 100644 index 000000000..1f29dfada --- /dev/null +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/total/SysUserTotalServiceImpl.java @@ -0,0 +1,93 @@ +package com.bsd.pjcloud.admin.service.impl.total; + + +import cn.hutool.core.collection.IterUtil; +import cn.hutool.core.collection.IterableIter; +import cn.hutool.core.util.ObjectUtil; +import com.bsd.pjcloud.admin.api.dto.DeptAllListDto; +import com.bsd.pjcloud.admin.api.dto.UserDTO; +import com.bsd.pjcloud.admin.api.entity.SysDept; +import com.bsd.pjcloud.admin.api.vo.total.UserStaffingTotalVo; +import com.bsd.pjcloud.admin.mapper.SysDeptMapper; +import com.bsd.pjcloud.admin.mapper.SysUserMapper; +import com.bsd.pjcloud.admin.service.SysDeptService; +import com.bsd.pjcloud.admin.service.SysUserTotalService; +import com.bsd.pjcloud.common.data.datascope.DataScope; +import com.bsd.pjcloud.flow.task.constant.TaskCheckStatusEnum; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.core.parameters.P; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + + +@Slf4j +@Service +@RequiredArgsConstructor +public class SysUserTotalServiceImpl implements SysUserTotalService { + + private final SysUserMapper sysUserMapper; + private final SysDeptMapper sysDeptMapper; + + private final SysDeptService sysDeptService; + + /** + * 用户在/非编人员统计 + */ + @Override + public List staffingTotal(UserDTO dto, DataScope dataScope) { + // 查询部门 + DeptAllListDto deptDto = new DeptAllListDto(); + deptDto.setIsInclude(dto.getIsInclude()); + if (ObjectUtil.isNotEmpty(dto.getDeptId())) { + deptDto.setDeptId(dto.getDeptId()); + } + if (ObjectUtil.isNotEmpty(dto.getDeptIds())) { + deptDto.setDeptId(null); + deptDto.setDeptIds(dto.getDeptIds()); + } + List deptList = sysDeptMapper.allList(deptDto); + if (ObjectUtil.isEmpty(deptList)) return null; + List disposeDeptList = deptList.stream().map(item -> { + UserStaffingTotalVo entity = new UserStaffingTotalVo(); + entity.setDeptId(item.getDeptId()); + entity.setDeptName(item.getName()); + return entity; + }).toList(); + + dto.setProcessStatus(TaskCheckStatusEnum.RESULT.getCode()); + List list = sysUserMapper.staffingListByDept(dto, dataScope); + // 查询部门名字 + disposeStaffingTotal(list); + Map sqlMap = IterUtil.toMap(list, UserStaffingTotalVo::getDeptId); + + for (UserStaffingTotalVo vo : disposeDeptList) { + UserStaffingTotalVo targetMap = sqlMap.get(vo.getDeptId()); + if (ObjectUtil.isEmpty(targetMap)) continue; + vo.setDeptTotalPerson(targetMap.getDeptTotalPerson()); + vo.setStaffingPerson(targetMap.getStaffingPerson()); + vo.setNoneStaffingPerson(targetMap.getNoneStaffingPerson()); + vo.setTotalPerson(targetMap.getTotalPerson()); + } + + return disposeDeptList; + } + + private void disposeStaffingTotal(List list) { + if (ObjectUtil.isEmpty(list)) return; + List dpetIdList = list.stream().map(UserStaffingTotalVo::getDeptId).distinct().filter(ObjectUtil::isNotEmpty).toList(); + if (ObjectUtil.isNotEmpty(dpetIdList)) { + Map deptMaps = sysDeptService.getDeptListByDeptIds(dpetIdList); + if (ObjectUtil.isNotEmpty(deptMaps)) { + for (UserStaffingTotalVo v : list) { + SysDept sysDept = deptMaps.get(v.getDeptId()); + if (ObjectUtil.isEmpty(sysDept)) continue; + v.setDeptName(sysDept.getName()); + } + } + } + } + +} diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserMapper.xml b/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserMapper.xml index eaebeb9e8..cb1463caf 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserMapper.xml +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserMapper.xml @@ -318,4 +318,36 @@ ORDER BY u.create_time DESC + + +