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<HrmEmployeeWorkHourRespVO> getEmployeeWorkHourSummary(HrmEmployeeWorkHourReqVO reqVO) {
|
List<Map<String, Object>> rows = attendanceRecordMapper.selectWorkHourSummary(reqVO);
|
List<HrmEmployeeWorkHourRespVO> list = new ArrayList<>(rows.size());
|
for (Map<String, Object> 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<MesProWorkHourSummaryRespDTO> getTeamWorkHourSummary(MesProWorkHourSummaryReqDTO reqDTO) {
|
return mesProTaskApi.getTeamWorkHourSummary(reqDTO);
|
}
|
|
private BigDecimal toDecimal(Object value) {
|
if (value instanceof Number) {
|
return new BigDecimal(value.toString());
|
}
|
return BigDecimal.ZERO;
|
}
|
|
}
|