Files
klp-oa/klp-wms/src/main/java/com/klp/service/impl/WmsLeaveRequestServiceImpl.java
Joshi fefe4a8554 feat(request): 添加审批人字段支持
- 在WmsLeaveRequestBo中新增approverName字段
- 在WmsOutRequestBo中新增approverName字段
- 更新WmsLeaveRequestServiceImpl设置审批人名称
- 更新WmsOutRequestServiceImpl设置审批人名称
- 完善请假和出库申请的审批流程信息
2026-01-20 15:59:50 +08:00

254 lines
10 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.klp.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.klp.common.core.page.TableDataInfo;
import com.klp.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.klp.common.utils.StringUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.klp.domain.bo.WmsLeaveRequestBo;
import com.klp.domain.vo.WmsLeaveRequestVo;
import com.klp.domain.WmsLeaveRequest;
import com.klp.mapper.WmsLeaveRequestMapper;
import com.klp.service.IWmsLeaveRequestService;
import java.util.*;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.klp.mapper.WmsApprovalMapper;
import com.klp.domain.WmsApproval;
/**
* 员工请假申请Service业务层处理
*
* @author klp
* @date 2026-01-17
*/
@RequiredArgsConstructor
@Service
public class WmsLeaveRequestServiceImpl implements IWmsLeaveRequestService {
private final WmsLeaveRequestMapper baseMapper;
private final WmsApprovalMapper approvalMapper;
/**
* 查询员工请假申请
*/
@Override
public WmsLeaveRequestVo queryById(Long leaveId){
return baseMapper.selectVoById(leaveId);
}
/**
* 查询员工请假申请列表
*/
@Override
public TableDataInfo<WmsLeaveRequestVo> queryPageList(WmsLeaveRequestBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<WmsLeaveRequest> lqw = buildQueryWrapper(bo);
Page<WmsLeaveRequestVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询员工请假申请列表
*/
@Override
public List<WmsLeaveRequestVo> queryList(WmsLeaveRequestBo bo) {
LambdaQueryWrapper<WmsLeaveRequest> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<WmsLeaveRequest> buildQueryWrapper(WmsLeaveRequestBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<WmsLeaveRequest> lqw = Wrappers.lambdaQuery();
// 如果传入了ids则按ids筛选否则按其他条件筛选
if (StringUtils.isNotBlank(bo.getLeaveIds())) {
String[] idArray = bo.getLeaveIds().split(",");
List<Long> idList = new ArrayList<>();
for (String id : idArray) {
if (StringUtils.isNotBlank(id)) {
try {
idList.add(Long.parseLong(id.trim()));
} catch (NumberFormatException e) {
// 忽略无效的ID
}
}
}
if (!idList.isEmpty()) {
lqw.in(WmsLeaveRequest::getLeaveId, idList);
}
} else {
// 正常的条件筛选
lqw.eq(StringUtils.isNotBlank(bo.getLeaveTitle()), WmsLeaveRequest::getLeaveTitle, bo.getLeaveTitle());
lqw.eq(StringUtils.isNotBlank(bo.getLeaveType()), WmsLeaveRequest::getLeaveType, bo.getLeaveType());
lqw.like(StringUtils.isNotBlank(bo.getApplicantName()), WmsLeaveRequest::getApplicantName, bo.getApplicantName());
lqw.like(StringUtils.isNotBlank(bo.getApplicantDeptName()), WmsLeaveRequest::getApplicantDeptName, bo.getApplicantDeptName());
// 请假时间范围筛选:筛选出请假时间与查询时间范围有交集的记录
// 条件:(start_time <= endTime AND end_time >= startTime)
if (bo.getStartTime() != null && bo.getEndTime() != null) {
lqw.le(WmsLeaveRequest::getStartTime, bo.getEndTime())
.ge(WmsLeaveRequest::getEndTime, bo.getStartTime());
} else if (bo.getStartTime() != null) {
lqw.ge(WmsLeaveRequest::getEndTime, bo.getStartTime());
} else if (bo.getEndTime() != null) {
lqw.le(WmsLeaveRequest::getStartTime, bo.getEndTime());
}
lqw.eq(bo.getStartTime() != null, WmsLeaveRequest::getStartTime, bo.getStartTime());
lqw.eq(bo.getEndTime() != null, WmsLeaveRequest::getEndTime, bo.getEndTime());
lqw.eq(StringUtils.isNotBlank(bo.getLeaveShift()), WmsLeaveRequest::getLeaveShift, bo.getLeaveShift());
lqw.eq(bo.getLeaveDays() != null, WmsLeaveRequest::getLeaveDays, bo.getLeaveDays());
lqw.eq(StringUtils.isNotBlank(bo.getLeaveReason()), WmsLeaveRequest::getLeaveReason, bo.getLeaveReason());
lqw.eq(StringUtils.isNotBlank(bo.getAttachmentUrls()), WmsLeaveRequest::getAttachmentUrls, bo.getAttachmentUrls());
}
// 按请假开始时间倒序排列
lqw.orderByDesc(WmsLeaveRequest::getStartTime);
return lqw;
}
/**
* 新增员工请假申请
*/
@Override
public Boolean insertByBo(WmsLeaveRequestBo bo) {
WmsLeaveRequest add = BeanUtil.toBean(bo, WmsLeaveRequest.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setLeaveId(add.getLeaveId());
WmsApproval approval = new WmsApproval();
approval.setApplyType("leave");
approval.setApplyId(add.getLeaveId());
approval.setApprovalStatus("待审批");
approval.setApproverName(bo.getApproverName());
approvalMapper.insert(approval);
}
return flag;
}
/**
* 修改员工请假申请
*/
@Override
public Boolean updateByBo(WmsLeaveRequestBo bo) {
WmsLeaveRequest update = BeanUtil.toBean(bo, WmsLeaveRequest.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(WmsLeaveRequest entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 批量删除员工请假申请
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
/**
* 请假统计报表 - 按请假类型统计
*/
@Override
public List<Map<String, Object>> getLeaveTypeReport(WmsLeaveRequestBo bo) {
QueryWrapper<WmsLeaveRequest> qw = new QueryWrapper<>();
qw.select("leave_type as type",
"COUNT(*) as count",
"SUM(leave_days) as total_days")
.eq(bo.getApplicantDeptName() != null, "applicant_dept_name", bo.getApplicantDeptName())
.ge(bo.getStartTime() != null, "start_time", bo.getStartTime())
.le(bo.getEndTime() != null, "end_time", bo.getEndTime())
.eq("del_flag", 0)
.groupBy("leave_type")
.orderByDesc("total_days");
return baseMapper.selectMaps(qw);
}
/**
* 请假统计报表 - 按部门统计
*/
@Override
public List<Map<String, Object>> getLeaveDeptReport(WmsLeaveRequestBo bo) {
QueryWrapper<WmsLeaveRequest> qw = new QueryWrapper<>();
qw.select("applicant_dept_name as dept_name",
"COUNT(*) as count",
"SUM(leave_days) as total_days")
.isNotNull("applicant_dept_name")
.eq(StringUtils.isNotBlank(bo.getLeaveType()), "leave_type", bo.getLeaveType())
.ge(bo.getStartTime() != null, "start_time", bo.getStartTime())
.le(bo.getEndTime() != null, "end_time", bo.getEndTime())
.eq("del_flag", 0)
.groupBy("applicant_dept_name")
.orderByDesc("total_days");
return baseMapper.selectMaps(qw);
}
/**
* 请假统计报表 - 按月份统计
*/
@Override
public List<Map<String, Object>> getLeaveMonthlyReport(WmsLeaveRequestBo bo) {
QueryWrapper<WmsLeaveRequest> qw = new QueryWrapper<>();
qw.select("DATE_FORMAT(start_time, '%Y-%m') as month",
"COUNT(*) as count",
"SUM(leave_days) as total_days")
.ge(bo.getStartTime() != null, "start_time", bo.getStartTime())
.le(bo.getEndTime() != null, "end_time", bo.getEndTime())
.eq(StringUtils.isNotBlank(bo.getLeaveType()), "leave_type", bo.getLeaveType())
.eq(bo.getApplicantDeptName() != null, "applicant_dept_name", bo.getApplicantDeptName())
.eq("del_flag", 0)
.groupBy("month")
.orderByAsc("month");
return baseMapper.selectMaps(qw);
}
/**
* 根据请假人分组获取请假信息
*/
@Override
public List<Map<String, Object>> getLeaveListGroupedByApplicant(WmsLeaveRequestBo bo) {
QueryWrapper<WmsLeaveRequest> qw = new QueryWrapper<>();
qw.select("applicant_name",
"applicant_dept_name",
"GROUP_CONCAT(CONCAT(leave_type, ':', DATE_FORMAT(start_time, '%Y-%m-%d %H:%i'), '~', DATE_FORMAT(end_time, '%Y-%m-%d %H:%i'), '(', leave_days, '天)') ORDER BY start_time SEPARATOR '; ') as leave_details",
"SUM(leave_days) as total_days",
"COUNT(*) as leave_count")
.eq("del_flag", 0);
// 时间范围筛选
if (bo.getStartTime() != null && bo.getEndTime() != null) {
qw.le("start_time", bo.getEndTime())
.ge("end_time", bo.getStartTime());
} else if (bo.getStartTime() != null) {
qw.ge("end_time", bo.getStartTime());
} else if (bo.getEndTime() != null) {
qw.le("start_time", bo.getEndTime());
}
// 其他筛选条件
qw.eq(StringUtils.isNotBlank(bo.getLeaveType()), "leave_type", bo.getLeaveType())
.like(StringUtils.isNotBlank(bo.getApplicantName()), "applicant_name", bo.getApplicantName())
.like(StringUtils.isNotBlank(bo.getApplicantDeptName()), "applicant_dept_name", bo.getApplicantDeptName())
.groupBy("applicant_name", "applicant_dept_name")
.orderByDesc("total_days");
return baseMapper.selectMaps(qw);
}
}