From 0f199aa50d0d838a18d434498d6f063f94ef7c10 Mon Sep 17 00:00:00 2001 From: zlwu <704541015@qq.com> Date: Sat, 6 Sep 2025 23:36:10 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SysUserServiceImpl.java | 2 +- .../controller/XgStudentLeaveController.java | 28 ++ .../xg/service/IXgStudentLeaveService.java | 11 + .../impl/XgStudentLeaveServiceImpl.java | 34 ++ .../DormHygieneCheckEditDialog.vue | 208 +++++++++-- .../DormHygieneCheckSingleDialog.vue | 190 ++++++++++- .../components/LeaveProcessDialog.vue | 322 ++++++++++++++++++ 7 files changed, 763 insertions(+), 32 deletions(-) create mode 100644 web/src/views/xg/xgss/dormHygieneCheck/dormHygieneCheck/components/LeaveProcessDialog.vue diff --git a/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java b/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java index a322e3d0..f03931a6 100644 --- a/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java +++ b/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java @@ -297,7 +297,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService { @Override public List selectUserByIds(List userIds, Long deptId) { return baseMapper.selectUserList(new LambdaQueryWrapper() - .select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName) + .select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName, SysUser::getPhonenumber) .eq(SysUser::getStatus, SystemConstants.NORMAL) .eq(ObjectUtil.isNotNull(deptId), SysUser::getDeptId, deptId) .in(CollUtil.isNotEmpty(userIds), SysUser::getUserId, userIds)); diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgStudentLeaveController.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgStudentLeaveController.java index e2d446f2..e453a992 100644 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgStudentLeaveController.java +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgStudentLeaveController.java @@ -1,6 +1,8 @@ package org.dromara.xg.controller; +import java.time.LocalDateTime; import java.util.List; +import java.util.Map; import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; @@ -101,4 +103,30 @@ public class XgStudentLeaveController extends BaseController { public R remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) { return toAjax(xgStudentLeaveService.deleteWithValidByIds(List.of(ids), true)); } + + /** + * 根据学生ID列表和检查日期查询学生请假信息 + * + * @param studentIds 学生ID列表(逗号分隔) + * @param checkDate 检查日期 + */ + @SaCheckPermission("studentLeave:studentLeave:query") + @GetMapping("/queryByCheckDate") + public R> queryByCheckDate( + @RequestParam String studentIds, + @RequestParam String checkDate) { + try { + List studentIdList = List.of(studentIds.split(",")) + .stream() + .map(String::trim) + .map(Long::valueOf) + .toList(); + LocalDateTime checkDateTime = LocalDateTime.parse(checkDate.replace(" ", "T")); + Map result = xgStudentLeaveService.queryStudentLeavesByCheckDate(studentIdList, + checkDateTime); + return R.ok(result); + } catch (Exception e) { + return R.fail("参数格式错误:" + e.getMessage()); + } + } } diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgStudentLeaveService.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgStudentLeaveService.java index 125b19e2..1c877494 100644 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgStudentLeaveService.java +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgStudentLeaveService.java @@ -5,8 +5,10 @@ import org.dromara.xg.domain.bo.XgStudentLeaveBo; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; +import java.time.LocalDateTime; import java.util.Collection; import java.util.List; +import java.util.Map; /** * 学生请假 - 记录学生的请假申请、审批和销假信息Service接口 @@ -65,4 +67,13 @@ public interface IXgStudentLeaveService { * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 根据学生ID列表和检查日期查询学生请假信息 + * + * @param studentIds 学生ID列表 + * @param checkDate 检查日期 + * @return 学生ID -> 请假信息的映射 + */ + Map queryStudentLeavesByCheckDate(List studentIds, LocalDateTime checkDate); } diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgStudentLeaveServiceImpl.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgStudentLeaveServiceImpl.java index 93f6cb80..b38d24c7 100644 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgStudentLeaveServiceImpl.java +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgStudentLeaveServiceImpl.java @@ -51,6 +51,7 @@ import org.dromara.xg.domain.XgStudentManager; import org.dromara.xg.domain.XgStudentManagerSource; import org.dromara.xg.domain.XgClassMsg; +import java.time.LocalDateTime; import java.util.List; import java.util.Map; import java.util.Collection; @@ -582,4 +583,37 @@ public class XgStudentLeaveServiceImpl implements IXgStudentLeaveService { baseMapper.updateById(xgStudentLeave); } + /** + * 根据学生ID列表和检查日期查询学生请假信息 + * + * @param studentIds 学生ID列表 + * @param checkDate 检查日期 + * @return 学生ID -> 请假信息的映射 + */ + @Override + public Map queryStudentLeavesByCheckDate(List studentIds, LocalDateTime checkDate) { + if (studentIds == null || studentIds.isEmpty() || checkDate == null) { + return Map.of(); + } + + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.in(XgStudentLeave::getStudentId, studentIds); + // 查询审核状态为"waiting"(待审核)或"finish"(已完成)的请假记录 + lqw.in(XgStudentLeave::getApprovalStatus, "waiting", "finish"); + // 检查日期在请假时间段内 + lqw.le(XgStudentLeave::getStartTime, checkDate); + lqw.ge(XgStudentLeave::getEndTime, checkDate); + lqw.orderByDesc(XgStudentLeave::getCreateTime); + + List leaveList = baseMapper.selectList(lqw); + + // 转换为VO并按学生ID分组,每个学生只取最新的一条请假记录 + return leaveList.stream() + .collect(Collectors.toMap( + XgStudentLeave::getStudentId, + leave -> MapstructUtils.convert(leave, XgStudentLeaveVo.class), + (existing, replacement) -> existing // 保留第一条(最新的) + )); + } + } diff --git a/web/src/views/xg/xgss/dormHygieneCheck/dormHygieneCheck/DormHygieneCheckEditDialog.vue b/web/src/views/xg/xgss/dormHygieneCheck/dormHygieneCheck/DormHygieneCheckEditDialog.vue index f5b9d19f..edc8c921 100644 --- a/web/src/views/xg/xgss/dormHygieneCheck/dormHygieneCheck/DormHygieneCheckEditDialog.vue +++ b/web/src/views/xg/xgss/dormHygieneCheck/dormHygieneCheck/DormHygieneCheckEditDialog.vue @@ -204,8 +204,7 @@
-

班级:{{ student.className }}

-

专业:{{ student.majorName }}

+

班级:{{ student.className }} 专业:{{ student.majorName }}

@@ -249,6 +248,36 @@
+ +
+
+ 请假信息 +
+ + 查看流程 + + 请假中 +
+
+
+
+ 发起时间: + {{ formatDateTime(getStudentLeave(student.studentId)?.createTime) }} +
+
+ 请假时间: + {{ formatDateTime(getStudentLeave(student.studentId)?.startTime) }} 至 + {{ formatDateTime(getStudentLeave(student.studentId)?.endTime) }} +
+
+ 请假类型: + {{ getStudentLeave(student.studentId)?.leaveTypeName }} +
+
+
+
@@ -315,17 +344,30 @@ @confirm="handleViolationConfirm" @close="handleViolationClose" /> + + + + +