Skip to content

员工统计


统计报表介绍

对于这些图形报表的开发,其实呢,都是基于现成的一些图形报表的组件开发的,比如:Echarts、HighCharts 等

而报表的制作,主要是前端人员开发,引入对应的组件(比如:ECharts)即可。

服务端开发人员仅为其提供数据即可。

官网:https://echarts.apache.org/zh/index.html

职位统计

JobOption 实体对象

java
package com.itheima.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

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

ReportController

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

    @Autowired
    private ReportService reportService;

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

ReportService

java
public interface ReportService {
    /**
     * 统计各个职位的员工人数
     * @return
     */
    JobOption getEmpJobData();
}

ReportServiceImpl

java
@Service
public class ReportServiceImpl implements ReportService {

    @Autowired
    private EmpMapper empMapper;

    @Override
    public JobOption getEmpJobData() {
        List<Map<String,Object>> list = empMapper.countEmpJobData();
        List<Object> jobList = list.stream().map(dataMap -> dataMap.get("pos")).toList();
        List<Object> dataList = list.stream().map(dataMap -> dataMap.get("total")).toList();
        return new JobOption(jobList, dataList);
    }
}

EmpMapper

java
/**
 * 统计各个职位的员工人数
 */
@MapKey("pos")
List<Map<String,Object>> countEmpJobData();

@MapKey 注解

如果查询的记录往 Map 中封装,可以通过 @MapKey 注解指定返回的 map 中的唯一标识是那个字段【也可以不指定

EmpMapper.xml

sql
<!-- 统计各个职位的员工人数 -->
<select id="countEmpJobData" 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(*) total
    from emp group by job
    order by total
</select>

性别统计

ReportController

java
/**
 * 统计员工性别信息
 */
@GetMapping("/empGenderData")
public Result getEmpGenderData(){
    log.info("统计员工性别信息");
    List<Map> genderList = reportService.getEmpGenderData();
    return Result.success(genderList);
}

ReportService

java
/**
 * 统计员工性别信息
 */
List<Map> getEmpGenderData();

ReportServiceImpl

java
@Override
public List<Map> getEmpGenderData() {
    return empMapper.countEmpGenderData();
}

EmpMapper

java
/**
 * 统计员工性别信息
 */
@MapKey("name")
List<Map> countEmpGenderData();

EmpMapper.xml

sql
<!-- 统计员工的性别信息 -->
<select id="countEmpGenderData" resultType="java.util.Map">
    select
    if(gender = 1, '男', '女') as name,
    count(*) as value
    from emp group by gender ;
</select>