Browse Source

工作日设置接口修改

zhaopeiqing 7 months ago
parent
commit
41a70f45fc
21 changed files with 278 additions and 23 deletions
  1. 2 0
      yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/DateUtils.java
  2. 29 2
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/business/AttendanceBusinessController.java
  3. 4 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/business/vo/AttendanceBusinessRespVO.java
  4. 3 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/business/vo/AttendanceBusinessSaveReqVO.java
  5. 3 2
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/info/AttendanceInfoController.java
  6. 5 5
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/info/vo/AttendanceDailyInfoPageReqVO.java
  7. 30 2
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/leave/AttendanceLeaveController.java
  8. 4 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/leave/vo/AttendanceLeaveRespVO.java
  9. 3 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/leave/vo/AttendanceLeaveSaveReqVO.java
  10. 30 2
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/out/AttendanceOutController.java
  11. 4 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/out/vo/AttendanceOutRespVO.java
  12. 3 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/out/vo/AttendanceOutSaveReqVO.java
  13. 2 2
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/workdaysetting/AttendanceWorkdaySettingController.java
  14. 17 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/workdaysetting/vo/AttendanceWorkdaySettingDatesReqVO.java
  15. 41 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/service/business/AttendanceBusinessServiceImpl.java
  16. 5 1
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/service/employeesetting/AttendanceEmployeeSettingServiceImpl.java
  17. 2 2
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/service/info/AttendanceInfoService.java
  18. 8 5
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/service/info/AttendanceInfoServiceImpl.java
  19. 41 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/service/leave/AttendanceLeaveServiceImpl.java
  20. 41 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/service/out/AttendanceOutServiceImpl.java
  21. 1 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/resources/mapper/employeesetting/AttendanceEmployeeSettingMapper.xml

+ 2 - 0
yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/DateUtils.java

@@ -27,6 +27,8 @@ public class DateUtils {
 
     public static final String FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND = "yyyy-MM-dd HH:mm:ss";
 
+    public static final String FORMAT_HOUR_MINUTE = "HH:mm";
+
     /**
      * 将 LocalDateTime 转换成 Date
      *

+ 29 - 2
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/business/AttendanceBusinessController.java

@@ -1,5 +1,8 @@
 package cn.iocoder.yudao.module.attendance.controller.admin.business;
 
+import cn.iocoder.yudao.module.system.api.dept.DeptApi;
+import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -37,6 +40,8 @@ public class AttendanceBusinessController {
 
     @Resource
     private AttendanceBusinessService businessService;
+    @Resource
+    private DeptApi deptApi;
 
     @PostMapping("/create")
     @Operation(summary = "创建出差信息")
@@ -68,7 +73,16 @@ public class AttendanceBusinessController {
     @PreAuthorize("@ss.hasPermission('attendance:business:query')")
     public CommonResult<AttendanceBusinessRespVO> getBusiness(@RequestParam("id") Long id) {
         AttendanceBusinessDO business = businessService.getBusiness(id);
-        return success(BeanUtils.toBean(business, AttendanceBusinessRespVO.class));
+        AttendanceBusinessRespVO respVO = BeanUtils.toBean(business, AttendanceBusinessRespVO.class);
+        // 部门
+        if (respVO.getDeptId() != null) {
+            DeptRespDTO dept = deptApi.getDept(respVO.getDeptId());
+            respVO.setDeptName(dept.getName());
+            if (dept != null && StringUtils.isNotBlank(dept.getName())) {
+                respVO.setDeptName(dept.getName());
+            }
+        }
+        return success(respVO);
     }
 
     @GetMapping("/page")
@@ -76,7 +90,20 @@ public class AttendanceBusinessController {
     @PreAuthorize("@ss.hasPermission('attendance:business:query')")
     public CommonResult<PageResult<AttendanceBusinessRespVO>> getBusinessPage(@Valid AttendanceBusinessPageReqVO pageReqVO) {
         PageResult<AttendanceBusinessDO> pageResult = businessService.getBusinessPage(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, AttendanceBusinessRespVO.class));
+        PageResult<AttendanceBusinessRespVO> result = BeanUtils.toBean(pageResult, AttendanceBusinessRespVO.class);
+        if (result != null && result.getList() != null && result.getList().size() > 0) {
+            result.getList().forEach(respVO -> {
+                // 部门
+                if (respVO.getDeptId() != null) {
+                    DeptRespDTO dept = deptApi.getDept(respVO.getDeptId());
+                    respVO.setDeptName(dept.getName());
+                    if (dept != null && StringUtils.isNotBlank(dept.getName())) {
+                        respVO.setDeptName(dept.getName());
+                    }
+                }
+            });
+        }
+        return success(result);
     }
 
     @GetMapping("/export-excel")

+ 4 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/business/vo/AttendanceBusinessRespVO.java

@@ -54,6 +54,10 @@ public class AttendanceBusinessRespVO {
     @ExcelProperty("部门uuid")
     private String deptUuid;
 
+    @Schema(description = "部门名称", example = "财务部")
+    @ExcelProperty("部门名称")
+    private String deptName;
+
     @Schema(description = "职位")
     @ExcelProperty("职位")
     private String position;

+ 3 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/business/vo/AttendanceBusinessSaveReqVO.java

@@ -82,4 +82,7 @@ public class AttendanceBusinessSaveReqVO {
     @Schema(description = "租户编号", example = "1")
     private Long tenantId;
 
+    @Schema(description = "附件主键id", example = "[1, 2]")
+    private List<Long> fileIdList;
+
 }

+ 3 - 2
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/info/AttendanceInfoController.java

@@ -108,14 +108,15 @@ public class AttendanceInfoController {
     @GetMapping("/dailyPage")
     @Operation(summary = "获得每日考勤信息分页")
     @PreAuthorize("@ss.hasPermission('attendance:info:query')")
-    public CommonResult<List<AttendanceDailyInfoRespVO>> getDailyInfoPage(@Valid AttendanceDailyInfoPageReqVO pageReqVO) {
+    public CommonResult<PageResult<AttendanceDailyInfoRespVO>> getDailyInfoPage(@Valid AttendanceDailyInfoPageReqVO pageReqVO) {
         return success(infoService.getDailyInfoPage(pageReqVO));
+
     }
 
     @GetMapping("/monthlyPage")
     @Operation(summary = "获得月度考勤信息分页")
     @PreAuthorize("@ss.hasPermission('attendance:info:query')")
-    public CommonResult<List<AttendanceMonthlyInfoRespVO>> getMonthlyInfoPage(@Valid AttendanceMonthlyInfoPageReqVO pageReqVO) {
+    public CommonResult<PageResult<AttendanceMonthlyInfoRespVO>> getMonthlyInfoPage(@Valid AttendanceMonthlyInfoPageReqVO pageReqVO) {
         return success(infoService.getMonthlyInfoPage(pageReqVO));
     }
 

+ 5 - 5
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/info/vo/AttendanceDailyInfoPageReqVO.java

@@ -12,7 +12,7 @@ import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 
-import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*;
 
 @Schema(description = "管理后台 - 每日考勤信息分页 Request VO")
 @Data
@@ -30,19 +30,19 @@ public class AttendanceDailyInfoPageReqVO extends PageParam {
     private String deptName;
 
     @Schema(description = "考勤开始日期")
-    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
     private LocalDate[] attendanceStartDate;
 
     @Schema(description = "考勤结束日期")
-    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
     private LocalDate[] attendanceEndDate;
 
     @Schema(description = "上班时间")
-    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    @DateTimeFormat(pattern = FORMAT_HOUR_MINUTE)
     private LocalTime[] workStartTime;
 
     @Schema(description = "下班时间")
-    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    @DateTimeFormat(pattern = FORMAT_HOUR_MINUTE)
     private LocalTime[] workEndTime;
 
     @Schema(description = "迟到时间(min)", example = "2")

+ 30 - 2
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/leave/AttendanceLeaveController.java

@@ -1,5 +1,9 @@
 package cn.iocoder.yudao.module.attendance.controller.admin.leave;
 
+import cn.iocoder.yudao.module.attendance.controller.admin.business.vo.AttendanceBusinessRespVO;
+import cn.iocoder.yudao.module.system.api.dept.DeptApi;
+import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -37,6 +41,8 @@ public class AttendanceLeaveController {
 
     @Resource
     private AttendanceLeaveService leaveService;
+    @Resource
+    private DeptApi deptApi;
 
     @PostMapping("/create")
     @Operation(summary = "创建请假信息")
@@ -68,7 +74,16 @@ public class AttendanceLeaveController {
     @PreAuthorize("@ss.hasPermission('attendance:leave:query')")
     public CommonResult<AttendanceLeaveRespVO> getLeave(@RequestParam("id") Long id) {
         AttendanceLeaveDO leave = leaveService.getLeave(id);
-        return success(BeanUtils.toBean(leave, AttendanceLeaveRespVO.class));
+        AttendanceLeaveRespVO respVO = BeanUtils.toBean(leave, AttendanceLeaveRespVO.class);
+        // 部门
+        if (respVO.getDeptId() != null) {
+            DeptRespDTO dept = deptApi.getDept(respVO.getDeptId());
+            respVO.setDeptName(dept.getName());
+            if (dept != null && StringUtils.isNotBlank(dept.getName())) {
+                respVO.setDeptName(dept.getName());
+            }
+        }
+        return success(respVO);
     }
 
     @GetMapping("/page")
@@ -76,7 +91,20 @@ public class AttendanceLeaveController {
     @PreAuthorize("@ss.hasPermission('attendance:leave:query')")
     public CommonResult<PageResult<AttendanceLeaveRespVO>> getLeavePage(@Valid AttendanceLeavePageReqVO pageReqVO) {
         PageResult<AttendanceLeaveDO> pageResult = leaveService.getLeavePage(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, AttendanceLeaveRespVO.class));
+        PageResult<AttendanceLeaveRespVO> result = BeanUtils.toBean(pageResult, AttendanceLeaveRespVO.class);
+        if (result != null && result.getList() != null && result.getList().size() > 0) {
+            result.getList().forEach(respVO -> {
+                // 部门
+                if (respVO.getDeptId() != null) {
+                    DeptRespDTO dept = deptApi.getDept(respVO.getDeptId());
+                    respVO.setDeptName(dept.getName());
+                    if (dept != null && StringUtils.isNotBlank(dept.getName())) {
+                        respVO.setDeptName(dept.getName());
+                    }
+                }
+            });
+        }
+        return success(result);
     }
 
     @GetMapping("/export-excel")

+ 4 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/leave/vo/AttendanceLeaveRespVO.java

@@ -54,6 +54,10 @@ public class AttendanceLeaveRespVO {
     @ExcelProperty("部门uuid")
     private String deptUuid;
 
+    @Schema(description = "部门名称", example = "财务部")
+    @ExcelProperty("部门名称")
+    private String deptName;
+
     @Schema(description = "员工职位")
     @ExcelProperty("员工职位")
     private String position;

+ 3 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/leave/vo/AttendanceLeaveSaveReqVO.java

@@ -83,4 +83,7 @@ public class AttendanceLeaveSaveReqVO {
     @Schema(description = "租户编号", example = "1")
     private Long tenantId;
 
+    @Schema(description = "附件主键id", example = "[1, 2]")
+    private List<Long> fileIdList;
+
 }

+ 30 - 2
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/out/AttendanceOutController.java

@@ -1,5 +1,9 @@
 package cn.iocoder.yudao.module.attendance.controller.admin.out;
 
+import cn.iocoder.yudao.module.attendance.controller.admin.leave.vo.AttendanceLeaveRespVO;
+import cn.iocoder.yudao.module.system.api.dept.DeptApi;
+import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -37,6 +41,8 @@ public class AttendanceOutController {
 
     @Resource
     private AttendanceOutService outService;
+    @Resource
+    private DeptApi deptApi;
 
     @PostMapping("/create")
     @Operation(summary = "创建公务外出信息")
@@ -68,7 +74,16 @@ public class AttendanceOutController {
     @PreAuthorize("@ss.hasPermission('attendance:out:query')")
     public CommonResult<AttendanceOutRespVO> getOut(@RequestParam("id") Long id) {
         AttendanceOutDO out = outService.getOut(id);
-        return success(BeanUtils.toBean(out, AttendanceOutRespVO.class));
+        AttendanceOutRespVO respVO = BeanUtils.toBean(out, AttendanceOutRespVO.class);
+        // 部门
+        if (respVO.getDeptId() != null) {
+            DeptRespDTO dept = deptApi.getDept(respVO.getDeptId());
+            respVO.setDeptName(dept.getName());
+            if (dept != null && StringUtils.isNotBlank(dept.getName())) {
+                respVO.setDeptName(dept.getName());
+            }
+        }
+        return success(respVO);
     }
 
     @GetMapping("/page")
@@ -76,7 +91,20 @@ public class AttendanceOutController {
     @PreAuthorize("@ss.hasPermission('attendance:out:query')")
     public CommonResult<PageResult<AttendanceOutRespVO>> getOutPage(@Valid AttendanceOutPageReqVO pageReqVO) {
         PageResult<AttendanceOutDO> pageResult = outService.getOutPage(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, AttendanceOutRespVO.class));
+        PageResult<AttendanceOutRespVO> result = BeanUtils.toBean(pageResult, AttendanceOutRespVO.class);
+        if (result != null && result.getList() != null && result.getList().size() > 0) {
+            result.getList().forEach(respVO -> {
+                // 部门
+                if (respVO.getDeptId() != null) {
+                    DeptRespDTO dept = deptApi.getDept(respVO.getDeptId());
+                    respVO.setDeptName(dept.getName());
+                    if (dept != null && StringUtils.isNotBlank(dept.getName())) {
+                        respVO.setDeptName(dept.getName());
+                    }
+                }
+            });
+        }
+        return success(result);
     }
 
     @GetMapping("/export-excel")

+ 4 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/out/vo/AttendanceOutRespVO.java

@@ -54,6 +54,10 @@ public class AttendanceOutRespVO {
     @ExcelProperty("部门uuid")
     private String deptUuid;
 
+    @Schema(description = "部门名称", example = "财务部")
+    @ExcelProperty("部门名称")
+    private String deptName;
+
     @Schema(description = "员工职位")
     @ExcelProperty("员工职位")
     private String position;

+ 3 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/out/vo/AttendanceOutSaveReqVO.java

@@ -77,4 +77,7 @@ public class AttendanceOutSaveReqVO {
     @Schema(description = "租户编号", example = "1")
     private Long tenantId;
 
+    @Schema(description = "附件主键id", example = "[1, 2]")
+    private List<Long> fileIdList;
+
 }

+ 2 - 2
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/workdaysetting/AttendanceWorkdaySettingController.java

@@ -95,8 +95,8 @@ public class AttendanceWorkdaySettingController {
     @PostMapping("/batch-insert")
     @Operation(summary = "批量设置考勤工作日")
     @PreAuthorize("@ss.hasPermission('attendance:workday-setting:insert')")
-    public CommonResult<Boolean> batchInsert(@RequestParam("dates") String[] dates) {
-        return success(workdaySettingService.batchInsert(dates));
+    public CommonResult<Boolean> batchInsert(@RequestBody AttendanceWorkdaySettingDatesReqVO reqVO) {
+        return success(workdaySettingService.batchInsert(reqVO.getDates()));
     }
 
     @GetMapping("/get-workdays")

+ 17 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/workdaysetting/vo/AttendanceWorkdaySettingDatesReqVO.java

@@ -0,0 +1,17 @@
+package cn.iocoder.yudao.module.attendance.controller.admin.workdaysetting.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 考勤工作日设置日期 Request VO")
+@Data
+public class AttendanceWorkdaySettingDatesReqVO {
+
+    @Schema(description = "日期数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "[\"2024-08-01\", \"2024-08-02\", ...]")
+    @NotEmpty(message = "日期数组不能为空")
+    private String[] dates;
+
+}

+ 41 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/service/business/AttendanceBusinessServiceImpl.java

@@ -1,5 +1,11 @@
 package cn.iocoder.yudao.module.attendance.service.business;
 
+import cn.hutool.core.util.IdUtil;
+import cn.iocoder.yudao.framework.security.core.LoginUser;
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
+import cn.iocoder.yudao.module.employee.api.EmployeeApi;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
+import cn.iocoder.yudao.module.infra.api.file.FileApi;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
@@ -28,12 +34,38 @@ public class AttendanceBusinessServiceImpl implements AttendanceBusinessService
 
     @Resource
     private AttendanceBusinessMapper businessMapper;
+    @Resource
+    private EmployeeApi employeeApi;
+    @Resource
+    private FileApi fileApi;
 
     @Override
     public Long createBusiness(AttendanceBusinessSaveReqVO createReqVO) {
+        // 获取用户信息和租户ID
+        LoginUser user = SecurityFrameworkUtils.getLoginUser();
+        Long tenantId = user != null && user.getTenantId() != null ? user.getTenantId() : 0L;
+        Long userId = user != null && user.getId() != null ? user.getId() : 0L;
+        createReqVO.setTenantId(tenantId);
+        // 出差人信息
+        EmployeeRespDTO employee = employeeApi.getEmployeeById(createReqVO.getEmployeeId());
+        createReqVO.setEmployeeId(employee.getId());
+        createReqVO.setEmployeeName(employee.getName());
+        createReqVO.setEmployeePhone(employee.getPhone());
+        createReqVO.setDeptId(employee.getDeptId());
+        createReqVO.setPosition(employee.getPosition());
+        // 登录员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(userId);// 判空检查
+        if (loginEmployee != null) {
+            createReqVO.setCreatorEmployeeId(loginEmployee.getId());
+            createReqVO.setCreatorEmployeeName(loginEmployee.getName());
+        }
         // 插入
+        String infoId = IdUtil.fastSimpleUUID();
+        createReqVO.setBusinessId(infoId);
         AttendanceBusinessDO business = BeanUtils.toBean(createReqVO, AttendanceBusinessDO.class);
         businessMapper.insert(business);
+        // 保存业务uuid到附件中
+        fileApi.updateFileBiz(createReqVO.getFileIdList(), infoId);
         // 返回
         return business.getId();
     }
@@ -42,6 +74,15 @@ public class AttendanceBusinessServiceImpl implements AttendanceBusinessService
     public void updateBusiness(AttendanceBusinessSaveReqVO updateReqVO) {
         // 校验存在
         validateBusinessExists(updateReqVO.getId());
+        // 保存业务uuid到附件中
+        fileApi.updateFileBiz(updateReqVO.getFileIdList(), updateReqVO.getBusinessId());
+        // 出差人信息
+        EmployeeRespDTO employee = employeeApi.getEmployeeById(updateReqVO.getEmployeeId());
+        updateReqVO.setEmployeeId(employee.getId());
+        updateReqVO.setEmployeeName(employee.getName());
+        updateReqVO.setEmployeePhone(employee.getPhone());
+        updateReqVO.setDeptId(employee.getDeptId());
+        updateReqVO.setPosition(employee.getPosition());
         // 更新
         AttendanceBusinessDO updateObj = BeanUtils.toBean(updateReqVO, AttendanceBusinessDO.class);
         businessMapper.updateById(updateObj);

+ 5 - 1
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/service/employeesetting/AttendanceEmployeeSettingServiceImpl.java

@@ -123,7 +123,11 @@ public class AttendanceEmployeeSettingServiceImpl implements AttendanceEmployeeS
             boolean exists = validateEmployeeSettingExistsByEmployeeId(employeeId);
             if (exists) {
                 // 更新
-                AttendanceEmployeeSettingDO updateObj = new AttendanceEmployeeSettingDO();
+                AttendanceEmployeeSettingRespVO respVO = this.getByEmployeeId(employeeId);
+                if (respVO == null) {
+                    throw exception(ATTENDANCE_EMPLOYEE_SETTING_NOT_EXISTS);
+                }
+                AttendanceEmployeeSettingDO updateObj = BeanUtils.toBean(respVO, AttendanceEmployeeSettingDO.class);
                 updateObj.setSchedulingId(schedulingId);
                 employeeSettingMapper.updateById(updateObj);
             } else {

+ 2 - 2
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/service/info/AttendanceInfoService.java

@@ -69,7 +69,7 @@ public interface AttendanceInfoService {
      * @param pageReqVO 分页查询
      * @return 考勤信息分页
      */
-    List<AttendanceDailyInfoRespVO> getDailyInfoPage(AttendanceDailyInfoPageReqVO pageReqVO);
+    PageResult<AttendanceDailyInfoRespVO> getDailyInfoPage(AttendanceDailyInfoPageReqVO pageReqVO);
 
     /**
      * 获得考勤信息分页
@@ -77,6 +77,6 @@ public interface AttendanceInfoService {
      * @param pageReqVO 分页查询
      * @return 考勤信息分页
      */
-    List<AttendanceMonthlyInfoRespVO> getMonthlyInfoPage(AttendanceMonthlyInfoPageReqVO pageReqVO);
+    PageResult<AttendanceMonthlyInfoRespVO> getMonthlyInfoPage(AttendanceMonthlyInfoPageReqVO pageReqVO);
 
 }

+ 8 - 5
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/service/info/AttendanceInfoServiceImpl.java

@@ -180,7 +180,7 @@ public class AttendanceInfoServiceImpl implements AttendanceInfoService {
 
     @Override
     @TenantIgnore
-    public List<AttendanceDailyInfoRespVO> getDailyInfoPage(AttendanceDailyInfoPageReqVO pageReqVO) {
+    public PageResult<AttendanceDailyInfoRespVO> getDailyInfoPage(AttendanceDailyInfoPageReqVO pageReqVO) {
         int currentPage = pageReqVO.getPageNo();
         if (currentPage > 0) {
             pageReqVO.setPageNo(currentPage - 1);
@@ -220,12 +220,16 @@ public class AttendanceInfoServiceImpl implements AttendanceInfoService {
                 }
             }
         }
-        return list;
+        return new PageResult<>(list, (long) list.size());
     }
 
     @Override
     @TenantIgnore
-    public List<AttendanceMonthlyInfoRespVO> getMonthlyInfoPage(AttendanceMonthlyInfoPageReqVO pageReqVO) {
+    public PageResult<AttendanceMonthlyInfoRespVO> getMonthlyInfoPage(AttendanceMonthlyInfoPageReqVO pageReqVO) {
+        int currentPage = pageReqVO.getPageNo();
+        if (currentPage > 0) {
+            pageReqVO.setPageNo(currentPage - 1);
+        }
         // 获取每日考勤信息
         List<AttendanceInfoDO> dos = infoMapper.selectPage(pageReqVO).getList();
         List<AttendanceDailyInfoRespVO> dailyInfoList = BeanUtils.toBean(dos, AttendanceDailyInfoRespVO.class);
@@ -267,8 +271,7 @@ public class AttendanceInfoServiceImpl implements AttendanceInfoService {
             // 添加到月度考勤信息列表
             monthlyInfoList.add(monthlyInfo);
         }
-
-        return monthlyInfoList;
+        return new PageResult<>(monthlyInfoList, (long) monthlyInfoList.size());
     }
 
     private boolean validateEmployeeExists(String employeeName, String employeeMobile, Long tenantId) {

+ 41 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/service/leave/AttendanceLeaveServiceImpl.java

@@ -1,5 +1,11 @@
 package cn.iocoder.yudao.module.attendance.service.leave;
 
+import cn.hutool.core.util.IdUtil;
+import cn.iocoder.yudao.framework.security.core.LoginUser;
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
+import cn.iocoder.yudao.module.employee.api.EmployeeApi;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
+import cn.iocoder.yudao.module.infra.api.file.FileApi;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
@@ -30,12 +36,38 @@ public class AttendanceLeaveServiceImpl implements AttendanceLeaveService {
 
     @Resource
     private AttendanceLeaveMapper leaveMapper;
+    @Resource
+    private EmployeeApi employeeApi;
+    @Resource
+    private FileApi fileApi;
 
     @Override
     public Long createLeave(AttendanceLeaveSaveReqVO createReqVO) {
+        // 获取用户信息和租户ID
+        LoginUser user = SecurityFrameworkUtils.getLoginUser();
+        Long tenantId = user != null && user.getTenantId() != null ? user.getTenantId() : 0L;
+        Long userId = user != null && user.getId() != null ? user.getId() : 0L;
+        createReqVO.setTenantId(tenantId);
+        // 请假人信息
+        EmployeeRespDTO employee = employeeApi.getEmployeeById(createReqVO.getEmployeeId());
+        createReqVO.setEmployeeId(employee.getId());
+        createReqVO.setEmployeeName(employee.getName());
+        createReqVO.setEmployeePhone(employee.getPhone());
+        createReqVO.setDeptId(employee.getDeptId());
+        createReqVO.setPosition(employee.getPosition());
+        // 登录员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(userId);// 判空检查
+        if (loginEmployee != null) {
+            createReqVO.setCreatorEmployeeId(loginEmployee.getId());
+            createReqVO.setCreatorEmployeeName(loginEmployee.getName());
+        }
         // 插入
+        String infoId = IdUtil.fastSimpleUUID();
+        createReqVO.setLeaveId(infoId);
         AttendanceLeaveDO leave = BeanUtils.toBean(createReqVO, AttendanceLeaveDO.class);
         leaveMapper.insert(leave);
+        // 保存业务uuid到附件中
+        fileApi.updateFileBiz(createReqVO.getFileIdList(), infoId);
         // 返回
         return leave.getId();
     }
@@ -44,6 +76,15 @@ public class AttendanceLeaveServiceImpl implements AttendanceLeaveService {
     public void updateLeave(AttendanceLeaveSaveReqVO updateReqVO) {
         // 校验存在
         validateLeaveExists(updateReqVO.getId());
+        // 保存业务uuid到附件中
+        fileApi.updateFileBiz(updateReqVO.getFileIdList(), updateReqVO.getLeaveId());
+        // 请假人信息
+        EmployeeRespDTO employee = employeeApi.getEmployeeById(updateReqVO.getEmployeeId());
+        updateReqVO.setEmployeeId(employee.getId());
+        updateReqVO.setEmployeeName(employee.getName());
+        updateReqVO.setEmployeePhone(employee.getPhone());
+        updateReqVO.setDeptId(employee.getDeptId());
+        updateReqVO.setPosition(employee.getPosition());
         // 更新
         AttendanceLeaveDO updateObj = BeanUtils.toBean(updateReqVO, AttendanceLeaveDO.class);
         leaveMapper.updateById(updateObj);

+ 41 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/service/out/AttendanceOutServiceImpl.java

@@ -1,5 +1,11 @@
 package cn.iocoder.yudao.module.attendance.service.out;
 
+import cn.hutool.core.util.IdUtil;
+import cn.iocoder.yudao.framework.security.core.LoginUser;
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
+import cn.iocoder.yudao.module.employee.api.EmployeeApi;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
+import cn.iocoder.yudao.module.infra.api.file.FileApi;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
@@ -26,12 +32,38 @@ public class AttendanceOutServiceImpl implements AttendanceOutService {
 
     @Resource
     private AttendanceOutMapper outMapper;
+    @Resource
+    private EmployeeApi employeeApi;
+    @Resource
+    private FileApi fileApi;
 
     @Override
     public Long createOut(AttendanceOutSaveReqVO createReqVO) {
+        // 获取用户信息和租户ID
+        LoginUser user = SecurityFrameworkUtils.getLoginUser();
+        Long tenantId = user != null && user.getTenantId() != null ? user.getTenantId() : 0L;
+        Long userId = user != null && user.getId() != null ? user.getId() : 0L;
+        createReqVO.setTenantId(tenantId);
+        // 公务外出人信息
+        EmployeeRespDTO employee = employeeApi.getEmployeeById(createReqVO.getEmployeeId());
+        createReqVO.setEmployeeId(employee.getId());
+        createReqVO.setEmployeeName(employee.getName());
+        createReqVO.setEmployeePhone(employee.getPhone());
+        createReqVO.setDeptId(employee.getDeptId());
+        createReqVO.setPosition(employee.getPosition());
+        // 登录员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(userId);// 判空检查
+        if (loginEmployee != null) {
+            createReqVO.setCreatorEmployeeId(loginEmployee.getId());
+            createReqVO.setCreatorEmployeeName(loginEmployee.getName());
+        }
         // 插入
+        String infoId = IdUtil.fastSimpleUUID();
+        createReqVO.setOutId(infoId);
         AttendanceOutDO out = BeanUtils.toBean(createReqVO, AttendanceOutDO.class);
         outMapper.insert(out);
+        // 保存业务uuid到附件中
+        fileApi.updateFileBiz(createReqVO.getFileIdList(), infoId);
         // 返回
         return out.getId();
     }
@@ -40,6 +72,15 @@ public class AttendanceOutServiceImpl implements AttendanceOutService {
     public void updateOut(AttendanceOutSaveReqVO updateReqVO) {
         // 校验存在
         validateOutExists(updateReqVO.getId());
+        // 保存业务uuid到附件中
+        fileApi.updateFileBiz(updateReqVO.getFileIdList(), updateReqVO.getOutId());
+        // 公务外出人信息
+        EmployeeRespDTO employee = employeeApi.getEmployeeById(updateReqVO.getEmployeeId());
+        updateReqVO.setEmployeeId(employee.getId());
+        updateReqVO.setEmployeeName(employee.getName());
+        updateReqVO.setEmployeePhone(employee.getPhone());
+        updateReqVO.setDeptId(employee.getDeptId());
+        updateReqVO.setPosition(employee.getPosition());
         // 更新
         AttendanceOutDO updateObj = BeanUtils.toBean(updateReqVO, AttendanceOutDO.class);
         outMapper.updateById(updateObj);

+ 1 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/resources/mapper/employeesetting/AttendanceEmployeeSettingMapper.xml

@@ -11,6 +11,7 @@
     <!-- 通过员工ID获得考勤员工设置 -->
     <select id="getByEmployeeId" resultType="cn.iocoder.yudao.module.attendance.controller.admin.employeesetting.vo.AttendanceEmployeeSettingRespVO">
         SELECT
+            aes.id,
             aes.employee_id,
             aes.name,
             asm.shift_name,