From a12abb1d2d96ad93e4db9305966163841c542172 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期二, 10 二月 2026 11:20:34 +0800
Subject: [PATCH] 导出考勤记录

---
 src/main/java/com/ruoyi/staff/service/PersonalAttendanceRecordsService.java          |    4 ++
 src/main/java/com/ruoyi/staff/pojo/PersonalAttendanceRecords.java                    |    8 ++++
 src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java                |    2 
 src/main/java/com/ruoyi/staff/service/impl/PersonalAttendanceRecordsServiceImpl.java |   33 ++++++++++++++++
 src/main/java/com/ruoyi/staff/dto/PersonalAttendanceRecordsDto.java                  |    6 +++
 src/main/java/com/ruoyi/staff/controller/PersonalAttendanceRecordsController.java    |   18 +++++++--
 src/main/resources/mapper/staff/PersonalAttendanceRecordsMapper.xml                  |    5 +-
 7 files changed, 69 insertions(+), 7 deletions(-)

diff --git a/src/main/java/com/ruoyi/staff/controller/PersonalAttendanceRecordsController.java b/src/main/java/com/ruoyi/staff/controller/PersonalAttendanceRecordsController.java
index 1bf6b06..67a0c12 100644
--- a/src/main/java/com/ruoyi/staff/controller/PersonalAttendanceRecordsController.java
+++ b/src/main/java/com/ruoyi/staff/controller/PersonalAttendanceRecordsController.java
@@ -3,12 +3,13 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.staff.dto.PersonalAttendanceRecordsDto;
-import com.ruoyi.staff.pojo.HolidayApplication;
 import com.ruoyi.staff.pojo.PersonalAttendanceRecords;
-import com.ruoyi.staff.service.HolidayApplicationService;
 import com.ruoyi.staff.service.PersonalAttendanceRecordsService;
-import org.springframework.beans.factory.annotation.Autowired;
+import io.swagger.annotations.Api;
 import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
 
 /**
  * <p>
@@ -20,8 +21,9 @@
  */
 @RestController
 @RequestMapping("/personalAttendanceRecords")
+@Api(tags = "鎵撳崱绛惧埌")
 public class PersonalAttendanceRecordsController {
-    @Autowired
+    @Resource
     private PersonalAttendanceRecordsService personalAttendanceRecordsService;
 
     // 鏂板
@@ -36,8 +38,16 @@
         return AjaxResult.success(personalAttendanceRecordsService.listPage(page, personalAttendanceRecordsDto));
     }
 
+    // 浠婃棩鑰冨嫟鏁版嵁
     @GetMapping("/today")
     public AjaxResult todayInfo(PersonalAttendanceRecordsDto personalAttendanceRecordsDto){
         return AjaxResult.success(personalAttendanceRecordsService.todayInfo(personalAttendanceRecordsDto));
     }
+
+    // 瀵煎嚭
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, PersonalAttendanceRecordsDto personalAttendanceRecordsDto) {
+        personalAttendanceRecordsService.export(response, personalAttendanceRecordsDto);
+    }
+
 }
diff --git a/src/main/java/com/ruoyi/staff/dto/PersonalAttendanceRecordsDto.java b/src/main/java/com/ruoyi/staff/dto/PersonalAttendanceRecordsDto.java
index 47f81e1..4232ad5 100644
--- a/src/main/java/com/ruoyi/staff/dto/PersonalAttendanceRecordsDto.java
+++ b/src/main/java/com/ruoyi/staff/dto/PersonalAttendanceRecordsDto.java
@@ -6,8 +6,14 @@
 
 @Data
 public class PersonalAttendanceRecordsDto extends PersonalAttendanceRecords {
+    @Excel(name = "濮撳悕", sort = 3)
     private String staffName;
+
+    @Excel(name = "宸ュ彿", sort = 4)
     private String staffNo;
+
+    @Excel(name = "閮ㄩ棬", sort = 2)
     private String deptName;
+
     private Long deptId;
 }
diff --git a/src/main/java/com/ruoyi/staff/pojo/PersonalAttendanceRecords.java b/src/main/java/com/ruoyi/staff/pojo/PersonalAttendanceRecords.java
index 7026364..b0dfb5b 100644
--- a/src/main/java/com/ruoyi/staff/pojo/PersonalAttendanceRecords.java
+++ b/src/main/java/com/ruoyi/staff/pojo/PersonalAttendanceRecords.java
@@ -11,6 +11,7 @@
 import java.time.LocalDateTime;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
@@ -41,25 +42,32 @@
 
     @ApiModelProperty("鏃ユ湡")
     @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "鏃ユ湡", sort = 1, dateFormat = "yyyy-MM-dd")
     private LocalDate date;
 
     @ApiModelProperty("宸ヤ綔寮�濮嬫椂闂�")
     @JsonFormat(pattern = "HH:mm")
     @DateTimeFormat(pattern = "HH:mm")
+    @Excel(name = "涓婄彮鏃堕棿", sort = 5, dateFormat = "HH:mm")
     private LocalDateTime workStartAt;
 
     @ApiModelProperty("宸ヤ綔缁撴潫鏃堕棿")
     @JsonFormat(pattern = "HH:mm")
     @DateTimeFormat(pattern = "HH:mm")
+    @Excel(name = "涓嬬彮鏃堕棿", sort = 6, dateFormat = "HH:mm")
     private LocalDateTime workEndAt;
 
     @ApiModelProperty("宸ヤ綔鏃堕暱")
+    @Excel(name = "宸ユ椂(灏忔椂)", sort = 7)
     private BigDecimal workHours;
 
     @ApiModelProperty("鐘舵�� 0姝e父 1杩熷埌 2鏃╅��")
+    @Excel(name = "鐘舵��", sort = 8,readConverterExp = "0=姝e父,1=杩熷埌,2=鏃╅��")
     private Byte status;
 
     @ApiModelProperty("澶囨敞")
+    @Excel(name = "澶囨敞", sort = 9)
     private String remark;
 
     @ApiModelProperty("绉熸埛id")
diff --git a/src/main/java/com/ruoyi/staff/service/PersonalAttendanceRecordsService.java b/src/main/java/com/ruoyi/staff/service/PersonalAttendanceRecordsService.java
index 4260e9e..3a68b6e 100644
--- a/src/main/java/com/ruoyi/staff/service/PersonalAttendanceRecordsService.java
+++ b/src/main/java/com/ruoyi/staff/service/PersonalAttendanceRecordsService.java
@@ -8,6 +8,8 @@
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.staff.pojo.StaffOnJob;
 
+import javax.servlet.http.HttpServletResponse;
+
 /**
  * <p>
  *  鏈嶅姟绫�
@@ -22,4 +24,6 @@
     int add(PersonalAttendanceRecords personalAttendanceRecords);
 
     PersonalAttendanceRecordsDto todayInfo(PersonalAttendanceRecordsDto personalAttendanceRecordsDto);
+
+    void export(HttpServletResponse response, PersonalAttendanceRecordsDto personalAttendanceRecordsDto);
 }
diff --git a/src/main/java/com/ruoyi/staff/service/impl/PersonalAttendanceRecordsServiceImpl.java b/src/main/java/com/ruoyi/staff/service/impl/PersonalAttendanceRecordsServiceImpl.java
index 241c202..5e0b5df 100644
--- a/src/main/java/com/ruoyi/staff/service/impl/PersonalAttendanceRecordsServiceImpl.java
+++ b/src/main/java/com/ruoyi/staff/service/impl/PersonalAttendanceRecordsServiceImpl.java
@@ -3,12 +3,15 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.exception.base.BaseException;
 import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.project.system.domain.SysDept;
 import com.ruoyi.project.system.mapper.SysDeptMapper;
 import com.ruoyi.project.system.service.ISysDictDataService;
 import com.ruoyi.staff.dto.PersonalAttendanceRecordsDto;
+import com.ruoyi.staff.dto.StaffOnJobDto;
 import com.ruoyi.staff.mapper.StaffOnJobMapper;
 import com.ruoyi.staff.pojo.PersonalAttendanceRecords;
 import com.ruoyi.staff.mapper.PersonalAttendanceRecordsMapper;
@@ -20,11 +23,13 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.List;
 
 /**
  * <p>
@@ -154,6 +159,17 @@
 
     @Override
     public IPage<PersonalAttendanceRecordsDto> listPage(Page page, PersonalAttendanceRecordsDto personalAttendanceRecordsDto) {
+        boolean admin = SecurityUtils.isAdmin(SecurityUtils.getUserId());
+        if (!admin) {
+            QueryWrapper<StaffOnJob> staffQueryWrapper = new QueryWrapper<>();
+            staffQueryWrapper.eq("staff_no", SecurityUtils.getUsername());
+            StaffOnJob staffOnJob = staffOnJobMapper.selectOne(staffQueryWrapper);
+            if (staffOnJob == null) {
+                return new Page<>(page.getCurrent(), page.getSize(), 0);
+            }
+            personalAttendanceRecordsDto.setStaffOnJobId(staffOnJob.getId());
+        }
+
         return personalAttendanceRecordsMapper.listPage(page,personalAttendanceRecordsDto);
     }
 
@@ -194,4 +210,21 @@
 
         return resultDto;
     }
+
+    @Override
+    public void export(HttpServletResponse response, PersonalAttendanceRecordsDto personalAttendanceRecordsDto) {
+        boolean admin = SecurityUtils.isAdmin(SecurityUtils.getUserId());
+        if (!admin) {
+            QueryWrapper<StaffOnJob> staffQueryWrapper = new QueryWrapper<>();
+            staffQueryWrapper.eq("staff_no", SecurityUtils.getUsername());
+            StaffOnJob staffOnJob = staffOnJobMapper.selectOne(staffQueryWrapper);
+            if (staffOnJob == null) {
+                throw new ServiceException("娌℃湁鍛樺伐淇℃伅锛屾棤娉曞鍑鸿�冨嫟璁板綍");
+            }
+            personalAttendanceRecordsDto.setStaffOnJobId(staffOnJob.getId());
+        }
+        List<PersonalAttendanceRecordsDto> personalAttendanceRecords = personalAttendanceRecordsMapper.listPage(new Page<>(1, Integer.MAX_VALUE), personalAttendanceRecordsDto).getRecords();
+        ExcelUtil<PersonalAttendanceRecordsDto> util = new ExcelUtil<PersonalAttendanceRecordsDto>(PersonalAttendanceRecordsDto.class);
+        util.exportExcel(response, personalAttendanceRecords, "鑰冨嫟璁板綍瀵煎嚭");
+    }
 }
diff --git a/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java b/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
index d7abe9b..d421345 100644
--- a/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
+++ b/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
@@ -180,7 +180,7 @@
     public void staffOnJobExport(HttpServletResponse response, StaffOnJob staffOnJob) {
         List<StaffOnJobDto> staffOnJobs = staffOnJobMapper.staffOnJobList(staffOnJob);
         ExcelUtil<StaffOnJobDto> util = new ExcelUtil<StaffOnJobDto>(StaffOnJobDto.class);
-        util.exportExcel(response, staffOnJobs, "鍦ㄨ亴鍛樺伐鍙拌处瀵煎嚭");
+        util.exportExcel(response, staffOnJobs, "鍛樺伐鍙拌处瀵煎嚭");
     }
 
     @Override
diff --git a/src/main/resources/mapper/staff/PersonalAttendanceRecordsMapper.xml b/src/main/resources/mapper/staff/PersonalAttendanceRecordsMapper.xml
index 146830b..355841f 100644
--- a/src/main/resources/mapper/staff/PersonalAttendanceRecordsMapper.xml
+++ b/src/main/resources/mapper/staff/PersonalAttendanceRecordsMapper.xml
@@ -30,10 +30,11 @@
         sys_dept sd ON sd.dept_id = soj.sys_dept_id
         where 1=1
         <if test="params.deptId != null and params.deptId > 0">
-            AND sys_dept.dept_id = #{params.deptId}
+            AND sd.dept_id = #{params.deptId}
         </if>
         <if test="params.date != null">
-            AND personal_attendance_records.date = DATE_FORMAT(#{params.date},'%Y-%m-%d')
+            and personal_attendance_records.date &gt;= #{params.date}
+            and personal_attendance_records.date &lt; DATE_ADD(DATE(#{params.date}), INTERVAL 1 DAY)
         </if>
     </select>
 </mapper>

--
Gitblit v1.9.3