部门员工管理-员工职位人数统计

一、需求分析

在部门员工管理模块中,需要统计各职位的员工人数,并提供一个接口供前端调用,返回的数据包括:

  1. 职位名称列表。

  2. 对应职位人数列表。

目标是实现从数据库查询职位人数统计数据,并以结构化数据形式返回,便于前端直接展示。

二、代码解读

JobOption 类:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class JobOption {
    private List jobList;
    private List dataList;
}

功能解读

  1. 类注解

    • @Data:由 Lombok 提供,自动生成 getter/setter 方法、toString 方法、equalshashCode 方法。

    • @NoArgsConstructor:生成无参构造方法。

    • @AllArgsConstructor:生成包含所有字段的有参构造方法。

  2. 字段

    • jobList:存储职位名称的列表。

    • dataList:存储职位对应人数的列表。

用途JobOption 用于封装职位统计数据,包括职位名称和对应人数,作为控制层接口返回的数据对象。

Controller 层

@Slf4j
@RequestMapping("/report")
@RestController
public class ReportController {

    @Autowired
    private ReportService reportService;

    @GetMapping("/empJobData")
    public Result empJobData(){
        log.info("统计员工职位人数");
        JobOption jobOption = reportService.empJobData();
        return Result.success(jobOption);
    }
}

功能解读

  1. 类注解

    • @Slf4j:引入日志功能,便于记录操作信息。

    • @RestController:定义该类为 RESTful 控制器,返回 JSON 格式数据。

    • @RequestMapping("/report"):定义基础访问路径 /report

  2. 字段注解

    • @Autowired:自动注入 ReportService 服务对象。

  3. 方法empJobData

    • 路径映射:通过 @GetMapping("/empJobData") 将方法映射为 /report/empJobData

    • 日志记录:log.info("统计员工职位人数"); 记录方法调用日志。

    • 服务调用:调用 reportService.empJobData() 获取统计数据。

    • 返回数据:将 JobOption 对象包装为统一响应格式 Result.success() 返回。

Service层

import java.util.stream.Collectors;
@Slf4j
@Service
public class ReportServiceImpl implements ReportService {

    @Autowired
    private EmpMapper empMapper;
    @Autowired
    private StudentMapper studentMapper;

    @Override
    public JobOption empJobData() {
        List<Map> mapList = empMapper.getJobData();
        log.info("部门员工信息量统计表: {}", mapList);
        // 职位列表
        List<Object> jobList = mapList.stream().map(map -> {
            return map.get("pos");
        }).collect(Collectors.toList());
        // 职位人数列表
        List<Object> dataList = mapList.stream().map(map -> {
            return map.get("posCount");
        }).collect(Collectors.toList());

        return new JobOption(jobList, dataList);
    }
}

功能解读

  1. 类注解

    • @Slf4j:引入日志功能,便于记录查询结果。

    • @Service:标记为服务层组件,交由 Spring 容器管理。

  2. 字段注解

    • @Autowired:注入 EmpMapperStudentMapper,分别用于操作员工和学生数据。

  3. 方法 empJobData

    • 查询数据:调用 empMapper.getJobData() 获取职位和人数统计的 List<Map> 数据。

    • 数据处理:

    • 使用 Streammap 方法提取职位名称和对应人数,分别生成 jobListdataList

    • 返回数据:构造 JobOption 对象,将职位和人数列表返回。

Mapper层与动态SQL配置

@MapKey("pos")
List<Map> getJobData();
<select id="getJobData" resultType="java.util.Map">
    select
        ( case job when 1 then '班主任'
                   when 2 then '讲师'
                   when 3 then '学工主管'
                   when 4 then  '教研主管'
                   when 5 then '咨询师'
                   else '其他' end ) pos,
        count(*) posCount
    from emp group by job
</select>

功能解读

  • 将职位编号 (job) 转换为具体职位名称 (pos)。

  • 使用 count(*) 统计每个职位的人数 (posCount)。

  • job 分组,生成统计数据。

  • 结果示例:{pos: '讲师', posCount: 10}

总结

通过上述模块的实现,完成了以下功能:

  1. 需求实现:提供职位名称及其对应人数的统计数据。

  2. 模块分层

    • 数据访问层(Mapper):执行 SQL 查询并返回统计结果。

    • 服务层(Service):处理查询结果,封装为结构化数据。

    • 控制层(Controller):返回统一格式的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值