fix(attendance): 修复考勤记录中部门信息不准确的问题
- 引入 WmsEmployeeInfoMapper 和 WmsEmployeeInfo 依赖 - 添加 wmsEmployeeInfoMapper 成员变量用于查询员工信息 - 从 wms_employee_info 表获取准确的部门信息,替代打卡机中的部门数据 - 使用员工姓名作为键构建姓名到部门的映射关系 - 当存在准确部门信息时优先使用数据库中的部门名称 - 保持原有逻辑作为备选方案以确保数据完整性
This commit is contained in:
@@ -15,6 +15,8 @@ import com.klp.domain.bo.AttendanceRecordsBo;
|
||||
import com.klp.domain.vo.AttendanceRecordsVo;
|
||||
import com.klp.domain.AttendanceRecords;
|
||||
import com.klp.mapper.AttendanceRecordsMapper;
|
||||
import com.klp.mapper.WmsEmployeeInfoMapper;
|
||||
import com.klp.domain.WmsEmployeeInfo;
|
||||
import com.klp.service.IAttendanceRecordsService;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
@@ -35,6 +37,7 @@ public class AttendanceRecordsServiceImpl implements IAttendanceRecordsService {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(AttendanceRecordsServiceImpl.class);
|
||||
private final AttendanceRecordsMapper baseMapper;
|
||||
private final WmsEmployeeInfoMapper wmsEmployeeInfoMapper;
|
||||
|
||||
@Override
|
||||
public AttendanceRecordsVo queryById(Integer id) {
|
||||
@@ -134,6 +137,23 @@ public class AttendanceRecordsServiceImpl implements IAttendanceRecordsService {
|
||||
lqw.orderByAsc(AttendanceRecords::getPin).orderByAsc(AttendanceRecords::getChecktime);
|
||||
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. 按员工分组,再按日期分组
|
||||
// key: pin, value: 员工信息 + 按天分组的打卡记录
|
||||
LinkedHashMap<String, EmployeeAttendance> employeeMap = new LinkedHashMap<>();
|
||||
@@ -145,7 +165,7 @@ public class AttendanceRecordsServiceImpl implements IAttendanceRecordsService {
|
||||
EmployeeAttendance e = new EmployeeAttendance();
|
||||
e.pin = r.getPin();
|
||||
e.ename = r.getEname();
|
||||
e.deptname = r.getDeptname();
|
||||
e.deptname = nameDeptMap.getOrDefault(r.getEname(), r.getDeptname());
|
||||
e.dailyRecords = new TreeMap<>();
|
||||
return e;
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user