package cn.iocoder.yudao.module.hrm.service.workhour; import cn.iocoder.yudao.module.hrm.controller.admin.workhour.vo.HrmEmployeeWorkHourReqVO; import cn.iocoder.yudao.module.hrm.controller.admin.workhour.vo.HrmEmployeeWorkHourRespVO; import cn.iocoder.yudao.module.hrm.dal.dataobject.attendance.HrmAttendanceRecordDO; import cn.iocoder.yudao.module.hrm.dal.dataobject.employee.HrmEmployeeDO; import cn.iocoder.yudao.module.hrm.dal.mysql.attendance.HrmAttendanceRecordMapper; import cn.iocoder.yudao.module.hrm.service.employee.HrmEmployeeService; import cn.iocoder.yudao.module.mes.api.task.MesProTaskApi; import cn.iocoder.yudao.module.mes.api.task.dto.MesProWorkHourSummaryReqDTO; import cn.iocoder.yudao.module.mes.api.task.dto.MesProWorkHourSummaryRespDTO; import cn.iocoder.yudao.module.system.api.dept.DeptApi; import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * HRM 工时统计 Service 实现类 * * @author 超级管理员 */ @Service public class HrmWorkHourStatisticsServiceImpl implements HrmWorkHourStatisticsService { @Resource private HrmAttendanceRecordMapper attendanceRecordMapper; @Resource private HrmEmployeeService employeeService; @Resource private DeptApi deptApi; @Resource private MesProTaskApi mesProTaskApi; @Override public List getEmployeeWorkHourSummary(HrmEmployeeWorkHourReqVO reqVO) { List> rows = attendanceRecordMapper.selectWorkHourSummary(reqVO); List list = new ArrayList<>(rows.size()); for (Map row : rows) { HrmEmployeeWorkHourRespVO vo = new HrmEmployeeWorkHourRespVO(); Long userId = row.get("user_id") instanceof Number ? ((Number) row.get("user_id")).longValue() : null; vo.setUserId(userId); vo.setWorkDays(row.get("work_days") instanceof Number ? ((Number) row.get("work_days")).intValue() : 0); vo.setWorkHours(toDecimal(row.get("work_hours"))); vo.setOvertimeHours(toDecimal(row.get("overtime_hours"))); // 填充员工姓名与部门 if (userId != null) { HrmEmployeeDO employee = employeeService.getEmployee(userId); if (employee != null) { vo.setUserName(employee.getName()); vo.setDeptId(employee.getDeptId()); if (employee.getDeptId() != null) { DeptRespDTO dept = deptApi.getDept(employee.getDeptId()); if (dept != null) { vo.setDeptName(dept.getName()); } } } } list.add(vo); } return list; } @Override public List getTeamWorkHourSummary(MesProWorkHourSummaryReqDTO reqDTO) { return mesProTaskApi.getTeamWorkHourSummary(reqDTO); } private BigDecimal toDecimal(Object value) { if (value instanceof Number) { return new BigDecimal(value.toString()); } return BigDecimal.ZERO; } }