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.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;
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user