feat(attendance): 优化考勤记录导出功能支持部门选择
- 修改后端接口参数名称从 deptname 改为 enames - 实现前端多员工选择下拉框组件 - 添加部门联动员工动态加载功能 - 重构导出逻辑支持按员工列表精确过滤 - 修复数组参数序列化导致的逗号编码问题 - 新增获取部门列表和按部门查询员工的API接口 - 实现导出表单验证和异步处理机制
This commit is contained in:
@@ -48,9 +48,9 @@ public class AttendanceRecordsController extends BaseController {
|
||||
@RequestParam String endTime,
|
||||
@RequestParam(required = false) String pin,
|
||||
@RequestParam(required = false) String ename,
|
||||
@RequestParam(required = false) String deptname,
|
||||
@RequestParam(required = false) String enames,
|
||||
HttpServletResponse response) {
|
||||
iAttendanceRecordsService.exportReport(startTime, endTime, pin, ename, deptname, response);
|
||||
iAttendanceRecordsService.exportReport(startTime, endTime, pin, ename, enames, response);
|
||||
}
|
||||
|
||||
@GetMapping("/{id}")
|
||||
|
||||
@@ -96,4 +96,20 @@ public class WmsEmployeeInfoController extends BaseController {
|
||||
@PathVariable Long[] infoIds) {
|
||||
return toAjax(iWmsEmployeeInfoService.deleteWithValidByIds(Arrays.asList(infoIds), true));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有不重复的部门名称
|
||||
*/
|
||||
@GetMapping("/depts")
|
||||
public R<List<String>> getDepts() {
|
||||
return R.ok(iWmsEmployeeInfoService.getDistinctDepts());
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据部门查询在职员工
|
||||
*/
|
||||
@GetMapping("/employeesByDept")
|
||||
public R<List<WmsEmployeeInfoVo>> getEmployeesByDept(@RequestParam String dept) {
|
||||
return R.ok(iWmsEmployeeInfoService.getEmployeesByDept(dept));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,5 +33,5 @@ public interface IAttendanceRecordsService {
|
||||
/**
|
||||
* 导出考勤记录表(复杂格式)
|
||||
*/
|
||||
void exportReport(String startTime, String endTime, String pin, String ename, String deptname, HttpServletResponse response);
|
||||
void exportReport(String startTime, String endTime, String pin, String ename, String enames, HttpServletResponse response);
|
||||
}
|
||||
@@ -46,4 +46,14 @@ public interface IWmsEmployeeInfoService {
|
||||
* 校验并批量删除员工信息信息
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
|
||||
/**
|
||||
* 获取所有不重复的部门名称
|
||||
*/
|
||||
List<String> getDistinctDepts();
|
||||
|
||||
/**
|
||||
* 根据部门查询在职员工信息
|
||||
*/
|
||||
List<WmsEmployeeInfoVo> getEmployeesByDept(String dept);
|
||||
}
|
||||
|
||||
@@ -104,7 +104,7 @@ public class AttendanceRecordsServiceImpl implements IAttendanceRecordsService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exportReport(String startTime, String endTime, String pin, String ename, String deptname, HttpServletResponse response) {
|
||||
public void exportReport(String startTime, String endTime, String pin, String ename, String enames, HttpServletResponse response) {
|
||||
try {
|
||||
// 1. 解析时间范围
|
||||
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||
@@ -119,14 +119,17 @@ public class AttendanceRecordsServiceImpl implements IAttendanceRecordsService {
|
||||
LambdaQueryWrapper<AttendanceRecords> lqw = Wrappers.lambdaQuery();
|
||||
lqw.ge(AttendanceRecords::getChecktime, startDatetime);
|
||||
lqw.le(AttendanceRecords::getChecktime, endDatetime);
|
||||
if (StringUtils.isNotBlank(pin)) {
|
||||
lqw.eq(AttendanceRecords::getPin, pin);
|
||||
}
|
||||
if (StringUtils.isNotBlank(ename)) {
|
||||
lqw.like(AttendanceRecords::getEname, ename);
|
||||
}
|
||||
if (StringUtils.isNotBlank(deptname)) {
|
||||
lqw.eq(AttendanceRecords::getDeptname, deptname);
|
||||
// 如果传入了员工姓名列表,优先按姓名列表过滤
|
||||
if (StringUtils.isNotBlank(enames)) {
|
||||
List<String> enameList = Arrays.asList(enames.split(","));
|
||||
lqw.in(AttendanceRecords::getEname, enameList);
|
||||
} else {
|
||||
if (StringUtils.isNotBlank(pin)) {
|
||||
lqw.eq(AttendanceRecords::getPin, pin);
|
||||
}
|
||||
if (StringUtils.isNotBlank(ename)) {
|
||||
lqw.like(AttendanceRecords::getEname, ename);
|
||||
}
|
||||
}
|
||||
lqw.orderByAsc(AttendanceRecords::getPin).orderByAsc(AttendanceRecords::getChecktime);
|
||||
List<AttendanceRecords> records = baseMapper.selectList(lqw);
|
||||
|
||||
@@ -17,7 +17,9 @@ import com.klp.service.IWmsEmployeeInfoService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Collection;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 员工信息Service业务层处理
|
||||
@@ -145,4 +147,33 @@ public class WmsEmployeeInfoServiceImpl implements IWmsEmployeeInfoService {
|
||||
}
|
||||
return baseMapper.deleteBatchIds(ids) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有不重复的部门名称(仅在职员工)
|
||||
*/
|
||||
@Override
|
||||
public List<String> getDistinctDepts() {
|
||||
LambdaQueryWrapper<WmsEmployeeInfo> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(WmsEmployeeInfo::getIsLeave, 0);
|
||||
List<WmsEmployeeInfoVo> list = baseMapper.selectVoList(lqw);
|
||||
return list.stream()
|
||||
.map(WmsEmployeeInfoVo::getDept)
|
||||
.filter(Objects::nonNull)
|
||||
.filter(org.apache.commons.lang3.StringUtils::isNotBlank)
|
||||
.distinct()
|
||||
.sorted()
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据部门查询在职员工信息
|
||||
*/
|
||||
@Override
|
||||
public List<WmsEmployeeInfoVo> getEmployeesByDept(String dept) {
|
||||
LambdaQueryWrapper<WmsEmployeeInfo> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(WmsEmployeeInfo::getDept, dept)
|
||||
.eq(WmsEmployeeInfo::getIsLeave, 0)
|
||||
.orderByAsc(WmsEmployeeInfo::getName);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user