From d17272fbe4fc905ced15ee40f1e3b73b4e0bf759 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Mon, 19 Jan 2026 10:16:00 +0800 Subject: [PATCH] =?UTF-8?q?feat(leave):=20=E6=B7=BB=E5=8A=A0=E8=AF=B7?= =?UTF-8?q?=E5=81=87=E7=BB=9F=E8=AE=A1=E5=8A=9F=E8=83=BD=E5=92=8C=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增根据请假人分组获取请假信息的接口方法 - 在WmsLeaveRequestBo中添加beginTime、endTimeParam和leaveIds字段 - 重构buildQueryWrapper方法支持按ID列表查询和时间范围交叉查询 - 添加按请假人分组统计的数据库查询实现 - 移除WmsLeaveRequestVo中leaveId和attachmentUrls的Excel导出注解 - 在WmsMealReportService中添加用户昵称映射功能 - 为WmsMealReportVo添加创建人和更新人姓名字段 --- .../controller/WmsLeaveRequestController.java | 11 +++ .../com/klp/domain/bo/WmsLeaveRequestBo.java | 15 +++ .../com/klp/domain/vo/WmsLeaveRequestVo.java | 3 - .../com/klp/domain/vo/WmsMealReportVo.java | 4 + .../klp/service/IWmsLeaveRequestService.java | 5 + .../impl/WmsLeaveRequestServiceImpl.java | 95 ++++++++++++++++--- .../impl/WmsMealReportServiceImpl.java | 36 ++++++- 7 files changed, 148 insertions(+), 21 deletions(-) diff --git a/klp-wms/src/main/java/com/klp/controller/WmsLeaveRequestController.java b/klp-wms/src/main/java/com/klp/controller/WmsLeaveRequestController.java index 9c4379d1..20929711 100644 --- a/klp-wms/src/main/java/com/klp/controller/WmsLeaveRequestController.java +++ b/klp-wms/src/main/java/com/klp/controller/WmsLeaveRequestController.java @@ -122,4 +122,15 @@ public class WmsLeaveRequestController extends BaseController { public R>> getLeaveMonthlyReport(WmsLeaveRequestBo bo) { return R.ok(iWmsLeaveRequestService.getLeaveMonthlyReport(bo)); } + + /** + * 根据请假人分组获取请假信息 + */ + @GetMapping("/grouped") + public R>> getLeaveListGroupedByApplicant(WmsLeaveRequestBo bo) { + return R.ok(iWmsLeaveRequestService.getLeaveListGroupedByApplicant(bo)); + } + + + } diff --git a/klp-wms/src/main/java/com/klp/domain/bo/WmsLeaveRequestBo.java b/klp-wms/src/main/java/com/klp/domain/bo/WmsLeaveRequestBo.java index a9b4411f..2887fb52 100644 --- a/klp-wms/src/main/java/com/klp/domain/bo/WmsLeaveRequestBo.java +++ b/klp-wms/src/main/java/com/klp/domain/bo/WmsLeaveRequestBo.java @@ -55,6 +55,21 @@ public class WmsLeaveRequestBo extends BaseEntity { */ private Date endTime; + /** + * 查询开始时间(用于筛选请假时间范围) + */ + private Date beginTime; + + /** + * 查询结束时间(用于筛选请假时间范围) + */ + private Date endTimeParam; + + /** + * 导出ID列表(逗号分隔) + */ + private String leaveIds; + /** * 请假班次(早班/中班/晚班/夜班/全天等) */ diff --git a/klp-wms/src/main/java/com/klp/domain/vo/WmsLeaveRequestVo.java b/klp-wms/src/main/java/com/klp/domain/vo/WmsLeaveRequestVo.java index d44e2b7a..c8679eb0 100644 --- a/klp-wms/src/main/java/com/klp/domain/vo/WmsLeaveRequestVo.java +++ b/klp-wms/src/main/java/com/klp/domain/vo/WmsLeaveRequestVo.java @@ -26,7 +26,6 @@ public class WmsLeaveRequestVo extends BaseEntity { /** * 主键ID */ - @ExcelProperty(value = "主键ID") private Long leaveId; /** @@ -88,8 +87,6 @@ public class WmsLeaveRequestVo extends BaseEntity { /** * 附件(病假证明等) */ - @ExcelProperty(value = "附件", converter = ExcelDictConvert.class) - @ExcelDictFormat(readConverterExp = "病=假证明等") private String attachmentUrls; /** diff --git a/klp-wms/src/main/java/com/klp/domain/vo/WmsMealReportVo.java b/klp-wms/src/main/java/com/klp/domain/vo/WmsMealReportVo.java index 5a9faba7..6ec48c9a 100644 --- a/klp-wms/src/main/java/com/klp/domain/vo/WmsMealReportVo.java +++ b/klp-wms/src/main/java/com/klp/domain/vo/WmsMealReportVo.java @@ -7,6 +7,7 @@ import com.alibaba.excel.annotation.ExcelProperty; import com.klp.common.annotation.ExcelDictFormat; import com.klp.common.convert.ExcelDictConvert; import com.klp.common.core.domain.BaseEntity; +import com.klp.common.utils.StringUtils; import lombok.Data; @@ -83,4 +84,7 @@ public class WmsMealReportVo extends BaseEntity { private String remark; + private String createByName; + private String updateByName; + } diff --git a/klp-wms/src/main/java/com/klp/service/IWmsLeaveRequestService.java b/klp-wms/src/main/java/com/klp/service/IWmsLeaveRequestService.java index 2ed7e2f9..d256a1e4 100644 --- a/klp-wms/src/main/java/com/klp/service/IWmsLeaveRequestService.java +++ b/klp-wms/src/main/java/com/klp/service/IWmsLeaveRequestService.java @@ -62,4 +62,9 @@ public interface IWmsLeaveRequestService { * 请假统计报表 - 按月份统计 */ List> getLeaveMonthlyReport(WmsLeaveRequestBo bo); + + /** + * 根据请假人分组获取请假信息 + */ + List> getLeaveListGroupedByApplicant(WmsLeaveRequestBo bo); } diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsLeaveRequestServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsLeaveRequestServiceImpl.java index f079496f..126db7f1 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsLeaveRequestServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsLeaveRequestServiceImpl.java @@ -15,10 +15,8 @@ import com.klp.domain.WmsLeaveRequest; import com.klp.mapper.WmsLeaveRequestMapper; import com.klp.service.IWmsLeaveRequestService; -import java.util.List; -import java.util.Map; -import java.util.Collection; -import java.util.Date; +import java.util.*; + import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; /** @@ -63,16 +61,52 @@ public class WmsLeaveRequestServiceImpl implements IWmsLeaveRequestService { private LambdaQueryWrapper buildQueryWrapper(WmsLeaveRequestBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - 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()); - 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()); + + // 如果传入了ids,则按ids筛选,否则按其他条件筛选 + if (StringUtils.isNotBlank(bo.getLeaveIds())) { + String[] idArray = bo.getLeaveIds().split(","); + List 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 <= endTimeParam AND end_time >= beginTime) + if (bo.getBeginTime() != null && bo.getEndTimeParam() != null) { + lqw.le(WmsLeaveRequest::getStartTime, bo.getEndTimeParam()) + .ge(WmsLeaveRequest::getEndTime, bo.getBeginTime()); + } else if (bo.getBeginTime() != null) { + lqw.ge(WmsLeaveRequest::getEndTime, bo.getBeginTime()); + } else if (bo.getEndTimeParam() != null) { + lqw.le(WmsLeaveRequest::getStartTime, bo.getEndTimeParam()); + } + + 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; } @@ -173,4 +207,37 @@ public class WmsLeaveRequestServiceImpl implements IWmsLeaveRequestService { .orderByAsc("month"); return baseMapper.selectMaps(qw); } + + /** + * 根据请假人分组获取请假信息 + */ + @Override + public List> getLeaveListGroupedByApplicant(WmsLeaveRequestBo bo) { + QueryWrapper 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.getBeginTime() != null && bo.getEndTimeParam() != null) { + qw.le("start_time", bo.getEndTimeParam()) + .ge("end_time", bo.getBeginTime()); + } else if (bo.getBeginTime() != null) { + qw.ge("end_time", bo.getBeginTime()); + } else if (bo.getEndTimeParam() != null) { + qw.le("start_time", bo.getEndTimeParam()); + } + + // 其他筛选条件 + 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); + } } diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsMealReportServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsMealReportServiceImpl.java index 29ca1a15..a31f9b2b 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsMealReportServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsMealReportServiceImpl.java @@ -7,6 +7,8 @@ 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 com.klp.domain.vo.WmsMaterialCoilVo; +import com.klp.system.service.impl.SysUserServiceImpl; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import com.klp.domain.bo.WmsMealReportBo; @@ -18,10 +20,9 @@ import com.klp.service.IWmsMealReportService; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.ZoneId; -import java.util.List; -import java.util.Map; -import java.util.Collection; -import java.util.Date; +import java.util.*; +import java.util.stream.Collectors; + import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; /** @@ -35,6 +36,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; public class WmsMealReportServiceImpl implements IWmsMealReportService { private final WmsMealReportMapper baseMapper; + private final SysUserServiceImpl userService; /** * 查询部门报餐主 @@ -51,6 +53,32 @@ public class WmsMealReportServiceImpl implements IWmsMealReportService { public TableDataInfo queryPageList(WmsMealReportBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + List records = result.getRecords(); + if (records == null || records.isEmpty()) { + return TableDataInfo.build(result); + } + + Set userNames = records.stream() + .flatMap(v -> java.util.stream.Stream.of(v.getCreateBy(), v.getUpdateBy())) + .filter(StringUtils::isNotBlank) + .collect(Collectors.toSet()); + + Map nickMap = Collections.emptyMap(); + if (!userNames.isEmpty()) { + nickMap = userService.selectNickNameMapByUserNames(new ArrayList<>(userNames)); + } + + // 单次遍历:填充创建/更新/发货人昵称,并构建物料/产品对象 + for (WmsMealReportVo vo : records) { + if (!nickMap.isEmpty()) { + if (StringUtils.isNotBlank(vo.getCreateBy())) { + vo.setCreateByName(nickMap.getOrDefault(vo.getCreateBy(), vo.getCreateBy())); + } + if (StringUtils.isNotBlank(vo.getUpdateBy())) { + vo.setUpdateByName(nickMap.getOrDefault(vo.getUpdateBy(), vo.getUpdateBy())); + } + } + } return TableDataInfo.build(result); }