fix(attendance): 修复考勤记录中部门信息不准确的问题

- 引入 WmsEmployeeInfoMapper 和 WmsEmployeeInfo 依赖
- 添加 wmsEmployeeInfoMapper 成员变量用于查询员工信息
- 从 wms_employee_info 表获取准确的部门信息,替代打卡机中的部门数据
- 使用员工姓名作为键构建姓名到部门的映射关系
- 当存在准确部门信息时优先使用数据库中的部门名称
- 保持原有逻辑作为备选方案以确保数据完整性
This commit is contained in:
2026-07-10 17:02:01 +08:00
parent a247560fd6
commit 45f2dfd2a5

View File

@@ -15,6 +15,8 @@ import com.klp.domain.bo.AttendanceRecordsBo;
import com.klp.domain.vo.AttendanceRecordsVo; import com.klp.domain.vo.AttendanceRecordsVo;
import com.klp.domain.AttendanceRecords; import com.klp.domain.AttendanceRecords;
import com.klp.mapper.AttendanceRecordsMapper; import com.klp.mapper.AttendanceRecordsMapper;
import com.klp.mapper.WmsEmployeeInfoMapper;
import com.klp.domain.WmsEmployeeInfo;
import com.klp.service.IAttendanceRecordsService; import com.klp.service.IAttendanceRecordsService;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
@@ -35,6 +37,7 @@ public class AttendanceRecordsServiceImpl implements IAttendanceRecordsService {
private static final Logger log = LoggerFactory.getLogger(AttendanceRecordsServiceImpl.class); private static final Logger log = LoggerFactory.getLogger(AttendanceRecordsServiceImpl.class);
private final AttendanceRecordsMapper baseMapper; private final AttendanceRecordsMapper baseMapper;
private final WmsEmployeeInfoMapper wmsEmployeeInfoMapper;
@Override @Override
public AttendanceRecordsVo queryById(Integer id) { public AttendanceRecordsVo queryById(Integer id) {
@@ -134,6 +137,23 @@ public class AttendanceRecordsServiceImpl implements IAttendanceRecordsService {
lqw.orderByAsc(AttendanceRecords::getPin).orderByAsc(AttendanceRecords::getChecktime); lqw.orderByAsc(AttendanceRecords::getPin).orderByAsc(AttendanceRecords::getChecktime);
List<AttendanceRecords> records = baseMapper.selectList(lqw); List<AttendanceRecords> records = baseMapper.selectList(lqw);
// 从 wms_employee_info 获取正确的部门(打卡机里的部门可能不准)
Set<String> names = records.stream()
.map(AttendanceRecords::getEname)
.filter(StringUtils::isNotBlank)
.collect(Collectors.toSet());
final Map<String, String> nameDeptMap = new HashMap<>();
if (!names.isEmpty()) {
List<WmsEmployeeInfo> empList = wmsEmployeeInfoMapper.selectList(
Wrappers.<WmsEmployeeInfo>lambdaQuery()
.select(WmsEmployeeInfo::getName, WmsEmployeeInfo::getDept)
.in(WmsEmployeeInfo::getName, names)
);
empList.stream()
.filter(e -> StringUtils.isNotBlank(e.getName()) && StringUtils.isNotBlank(e.getDept()))
.forEach(e -> nameDeptMap.put(e.getName(), e.getDept()));
}
// 3. 按员工分组,再按日期分组 // 3. 按员工分组,再按日期分组
// key: pin, value: 员工信息 + 按天分组的打卡记录 // key: pin, value: 员工信息 + 按天分组的打卡记录
LinkedHashMap<String, EmployeeAttendance> employeeMap = new LinkedHashMap<>(); LinkedHashMap<String, EmployeeAttendance> employeeMap = new LinkedHashMap<>();
@@ -145,7 +165,7 @@ public class AttendanceRecordsServiceImpl implements IAttendanceRecordsService {
EmployeeAttendance e = new EmployeeAttendance(); EmployeeAttendance e = new EmployeeAttendance();
e.pin = r.getPin(); e.pin = r.getPin();
e.ename = r.getEname(); e.ename = r.getEname();
e.deptname = r.getDeptname(); e.deptname = nameDeptMap.getOrDefault(r.getEname(), r.getDeptname());
e.dailyRecords = new TreeMap<>(); e.dailyRecords = new TreeMap<>();
return e; return e;
}); });