liding
13 小时以前 07d8f0087dffaa79a45b8a7e6afb067278ab9167
fix(attendance): 修复考勤配置查询和排班逻辑问题
已修改4个文件
30 ■■■■■ 文件已修改
src/main/java/com/ruoyi/staff/controller/PersonalAttendanceLocationConfigController.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/staff/controller/PersonalShiftController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/staff/service/impl/PersonalAttendanceRecordsServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/staff/PersonalAttendanceRecordsMapper.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/staff/controller/PersonalAttendanceLocationConfigController.java
@@ -1,5 +1,6 @@
package com.ruoyi.staff.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.framework.web.domain.R;
@@ -44,7 +45,9 @@
    @GetMapping("/listPage")
    public R listPage(Page page){
        page.addOrder(OrderItem.desc("id"));
        return R.ok(personalAttendanceLocationConfigService.page(page));
        return R.ok(personalAttendanceLocationConfigService.page(page,
                new LambdaQueryWrapper<PersonalAttendanceLocationConfig>()
                        .ne(PersonalAttendanceLocationConfig::getId, 999)));
    }
src/main/java/com/ruoyi/staff/controller/PersonalShiftController.java
@@ -60,7 +60,7 @@
    }
    @Operation(summary = "班次状态修改")
    @PostMapping("update")
    @PostMapping("/update")
    public R performanceShiftUpdate(@RequestBody PersonalShift personalShift) {
        personalShiftService.performanceShiftUpdate(personalShift);
        return R.ok();
src/main/java/com/ruoyi/staff/service/impl/PersonalAttendanceRecordsServiceImpl.java
@@ -72,7 +72,8 @@
        List<PersonalShift> personalShifts = personalShiftMapper.selectList(Wrappers.<PersonalShift>lambdaQuery()
                .eq(PersonalShift::getStaffOnJobId, staffOnJob.getId())
                .eq(PersonalShift::getWorkTime, currentDate.atStartOfDay())
                .isNotNull(PersonalShift::getPersonalAttendanceLocationConfigId));
                .isNotNull(PersonalShift::getPersonalAttendanceLocationConfigId)
                .ne(PersonalShift::getPersonalAttendanceLocationConfigId, 999));
        if (CollectionUtil.isEmpty(personalShifts)){
            throw new BaseException("当前用户当天没有排班数据");
        }
@@ -230,12 +231,15 @@
        List<PersonalShift> personalShifts = personalShiftMapper.selectList(Wrappers.<PersonalShift>lambdaQuery()
                .eq(PersonalShift::getStaffOnJobId, staffOnJob.getId())
                .eq(PersonalShift::getWorkTime, currentDate.atStartOfDay())
                .isNotNull(PersonalShift::getPersonalAttendanceLocationConfigId));
                .isNotNull(PersonalShift::getPersonalAttendanceLocationConfigId)
                .ne(PersonalShift::getPersonalAttendanceLocationConfigId, 999));
        if (CollectionUtil.isNotEmpty(personalShifts)){
            PersonalAttendanceLocationConfig personalAttendanceLocationConfig = personalAttendanceLocationConfigMapper.selectById(personalShifts.get(0).getPersonalAttendanceLocationConfigId());
            resultDto.setStartAt(personalAttendanceLocationConfig.getStartAt());
            resultDto.setEndAt(personalAttendanceLocationConfig.getEndAt());
            resultDto.setShift(personalAttendanceLocationConfig.getShift());
            if (personalAttendanceLocationConfig != null) {
                resultDto.setStartAt(personalAttendanceLocationConfig.getStartAt());
                resultDto.setEndAt(personalAttendanceLocationConfig.getEndAt());
                resultDto.setShift(personalAttendanceLocationConfig.getShift());
            }
        }
        return resultDto;
    }
src/main/resources/mapper/staff/PersonalAttendanceRecordsMapper.xml
@@ -42,7 +42,7 @@
        order by personal_attendance_records.id desc
    </select>
    <!-- 查询指定日期没有考勤记录的在职员工(在指定时间之前入职的) -->
    <!-- 查询指定日期有排班(非请假)但没有考勤记录的在职员工,没排班视为休息不标记缺勤 -->
    <select id="selectStaffWithoutAttendanceRecordBeforeTime" resultType="com.ruoyi.staff.pojo.StaffOnJob">
        SELECT soj.*
        FROM staff_on_job soj
@@ -50,8 +50,11 @@
        AND soj.create_time &lt; #{entryDeadline}
        AND EXISTS (
        SELECT 1
        FROM personal_attendance_location_config palc
        WHERE palc.sys_dept_id = soj.sys_dept_id
        FROM personal_shift ps
        WHERE ps.staff_on_job_id = soj.id
        AND DATE(ps.work_time) = #{date}
        AND ps.personal_attendance_location_config_id IS NOT NULL
        AND ps.personal_attendance_location_config_id != 999
        )
        AND NOT EXISTS (
        SELECT 1