Browse Source

考勤信息

zhaopeiqing 1 year ago
parent
commit
5d5437e898
43 changed files with 2132 additions and 0 deletions
  1. 3 0
      yudao-module-personnel/yudao-module-attendance-api/src/main/java/cn/iocoder/yudao/module/attendance/enums/ErrorCodeConstants.java
  2. 95 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/business/AttendanceBusinessController.java
  3. 91 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/business/vo/AttendanceBusinessPageReqVO.java
  4. 113 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/business/vo/AttendanceBusinessRespVO.java
  5. 86 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/business/vo/AttendanceBusinessSaveReqVO.java
  6. 3 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/employeesetting/vo/AttendanceEmployeeSettingPageReqVO.java
  7. 4 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/employeesetting/vo/AttendanceEmployeeSettingRespVO.java
  8. 3 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/employeesetting/vo/AttendanceEmployeeSettingSaveReqVO.java
  9. 3 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/info/vo/AttendanceInfoPageReqVO.java
  10. 4 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/info/vo/AttendanceInfoRespVO.java
  11. 4 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/info/vo/AttendanceInfoSaveReqVO.java
  12. 95 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/leave/AttendanceLeaveController.java
  13. 96 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/leave/vo/AttendanceLeavePageReqVO.java
  14. 116 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/leave/vo/AttendanceLeaveRespVO.java
  15. 87 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/leave/vo/AttendanceLeaveSaveReqVO.java
  16. 95 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/out/AttendanceOutController.java
  17. 88 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/out/vo/AttendanceOutPageReqVO.java
  18. 108 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/out/vo/AttendanceOutRespVO.java
  19. 81 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/out/vo/AttendanceOutSaveReqVO.java
  20. 5 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/schedulingmanage/vo/AttendanceSchedulingManagePageReqVO.java
  21. 4 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/schedulingmanage/vo/AttendanceSchedulingManageRespVO.java
  22. 4 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/schedulingmanage/vo/AttendanceSchedulingManageSaveReqVO.java
  23. 122 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/dal/dataobject/business/AttendanceBusinessDO.java
  24. 4 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/dal/dataobject/employeesetting/AttendanceEmployeeSettingDO.java
  25. 4 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/dal/dataobject/info/AttendanceInfoDO.java
  26. 123 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/dal/dataobject/leave/AttendanceLeaveDO.java
  27. 115 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/dal/dataobject/out/AttendanceOutDO.java
  28. 4 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/dal/dataobject/schedulingmanage/AttendanceSchedulingManageDO.java
  29. 48 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/dal/mysql/business/AttendanceBusinessMapper.java
  30. 2 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/dal/mysql/employeesetting/AttendanceEmployeeSettingMapper.java
  31. 2 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/dal/mysql/info/AttendanceInfoMapper.java
  32. 50 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/dal/mysql/leave/AttendanceLeaveMapper.java
  33. 48 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/dal/mysql/out/AttendanceOutMapper.java
  34. 2 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/dal/mysql/schedulingmanage/AttendanceSchedulingManageMapper.java
  35. 56 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/service/business/AttendanceBusinessService.java
  36. 72 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/service/business/AttendanceBusinessServiceImpl.java
  37. 56 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/service/leave/AttendanceLeaveService.java
  38. 72 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/service/leave/AttendanceLeaveServiceImpl.java
  39. 56 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/service/out/AttendanceOutService.java
  40. 72 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/service/out/AttendanceOutServiceImpl.java
  41. 12 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/resources/mapper/business/AttendanceBusinessMapper.xml
  42. 12 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/resources/mapper/leave/AttendanceLeaveMapper.xml
  43. 12 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/resources/mapper/out/AttendanceOutMapper.xml

+ 3 - 0
yudao-module-personnel/yudao-module-attendance-api/src/main/java/cn/iocoder/yudao/module/attendance/enums/ErrorCodeConstants.java

@@ -15,4 +15,7 @@ public interface ErrorCodeConstants {
     ErrorCode ATTENDANCE_INFO_NOT_EXISTS = new ErrorCode(1_013_000_001, "考勤信息不存在");
     ErrorCode ATTENDANCE_EMPLOYEE_SETTING_NOT_EXISTS = new ErrorCode(1_013_000_002, "考勤员工设置不存在");
     ErrorCode ATTENDANCE_INFO_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_013_000_003, "导入考勤信息数据不能为空!");
+    ErrorCode ATTENDANCE_LEAVE_NOT_EXISTS = new ErrorCode(1_013_000_004, "请假信息不存在");
+    ErrorCode ATTENDANCE_BUSINESS_NOT_EXISTS = new ErrorCode(1_013_000_005, "出差信息不存在");
+    ErrorCode ATTENDANCE_OUT_NOT_EXISTS = new ErrorCode(1_013_000_006, "公务外出信息不存在");
 }

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

@@ -0,0 +1,95 @@
+package cn.iocoder.yudao.module.attendance.controller.admin.business;
+
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import java.util.*;
+import java.io.IOException;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import cn.iocoder.yudao.module.attendance.controller.admin.business.vo.*;
+import cn.iocoder.yudao.module.attendance.dal.dataobject.business.AttendanceBusinessDO;
+import cn.iocoder.yudao.module.attendance.service.business.AttendanceBusinessService;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+
+@Tag(name = "管理后台 - 出差信息")
+@RestController
+@RequestMapping("/attendance/business")
+@Validated
+public class AttendanceBusinessController {
+
+    @Resource
+    private AttendanceBusinessService businessService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建出差信息")
+    @PreAuthorize("@ss.hasPermission('attendance:business:create')")
+    public CommonResult<Long> createBusiness(@Valid @RequestBody AttendanceBusinessSaveReqVO createReqVO) {
+        return success(businessService.createBusiness(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新出差信息")
+    @PreAuthorize("@ss.hasPermission('attendance:business:update')")
+    public CommonResult<Boolean> updateBusiness(@Valid @RequestBody AttendanceBusinessSaveReqVO updateReqVO) {
+        businessService.updateBusiness(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除出差信息")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('attendance:business:delete')")
+    public CommonResult<Boolean> deleteBusiness(@RequestParam("id") Long id) {
+        businessService.deleteBusiness(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得出差信息")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @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));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得出差信息分页")
+    @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));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出出差信息 Excel")
+    @PreAuthorize("@ss.hasPermission('attendance:business:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportBusinessExcel(@Valid AttendanceBusinessPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<AttendanceBusinessDO> list = businessService.getBusinessPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "出差信息.xls", "数据", AttendanceBusinessRespVO.class,
+                        BeanUtils.toBean(list, AttendanceBusinessRespVO.class));
+    }
+
+}

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

@@ -0,0 +1,91 @@
+package cn.iocoder.yudao.module.attendance.controller.admin.business.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import java.math.BigDecimal;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 出差信息分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class AttendanceBusinessPageReqVO extends PageParam {
+
+    @Schema(description = "uuid", example = "20857")
+    private String businessId;
+
+    @Schema(description = "出差人id", example = "797")
+    private Long employeeId;
+
+    @Schema(description = "出差人uuid", example = "5176")
+    private String employeeUuid;
+
+    @Schema(description = "出差员工姓名", example = "芋艿")
+    private String employeeName;
+
+    @Schema(description = "出差员工手机号")
+    private String employeePhone;
+
+    @Schema(description = "用户账号id", example = "25207")
+    private Long userId;
+
+    @Schema(description = "用户账号uuid", example = "28825")
+    private String userUuid;
+
+    @Schema(description = "部门id", example = "17524")
+    private Long deptId;
+
+    @Schema(description = "部门uuid", example = "30513")
+    private String deptUuid;
+
+    @Schema(description = "职位")
+    private String position;
+
+    @Schema(description = "出差事由", example = "不好")
+    private String reason;
+
+    @Schema(description = "出差目的地")
+    private String destination;
+
+    @Schema(description = "出差开始日期")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private String[] startDate;
+
+    @Schema(description = "出差结束日期")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private String[] endDate;
+
+    @Schema(description = "出差天数(d)")
+    private String day;
+
+    @Schema(description = "出差预算费用,单位(元)")
+    private BigDecimal estimatedCost;
+
+    @Schema(description = "备注")
+    private String remarks;
+
+    @Schema(description = "状态", example = "1")
+    private Integer status;
+
+    @Schema(description = "数据来源,0流程添加、1手动添加")
+    private String infoSource;
+
+    @Schema(description = "创建人员工id", example = "13908")
+    private Long creatorEmployeeId;
+
+    @Schema(description = "创建人员工姓名", example = "张三")
+    private String creatorEmployeeName;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+    @Schema(description = "租户编号", example = "1")
+    private Long tenantId;
+
+}

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

@@ -0,0 +1,113 @@
+package cn.iocoder.yudao.module.attendance.controller.admin.business.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import java.util.*;
+import java.math.BigDecimal;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 出差信息 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class AttendanceBusinessRespVO {
+
+    @Schema(description = "出差表单主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "21097")
+    @ExcelProperty("出差表单主键")
+    private Long id;
+
+    @Schema(description = "uuid", example = "20857")
+    @ExcelProperty("uuid")
+    private String businessId;
+
+    @Schema(description = "出差人id", example = "797")
+    @ExcelProperty("出差人id")
+    private Long employeeId;
+
+    @Schema(description = "出差人uuid", example = "5176")
+    @ExcelProperty("出差人uuid")
+    private String employeeUuid;
+
+    @Schema(description = "出差员工姓名", example = "芋艿")
+    @ExcelProperty("出差员工姓名")
+    private String employeeName;
+
+    @Schema(description = "出差员工手机号")
+    @ExcelProperty("出差员工手机号")
+    private String employeePhone;
+
+    @Schema(description = "用户账号id", example = "25207")
+    @ExcelProperty("用户账号id")
+    private Long userId;
+
+    @Schema(description = "用户账号uuid", example = "28825")
+    @ExcelProperty("用户账号uuid")
+    private String userUuid;
+
+    @Schema(description = "部门id", example = "17524")
+    @ExcelProperty("部门id")
+    private Long deptId;
+
+    @Schema(description = "部门uuid", example = "30513")
+    @ExcelProperty("部门uuid")
+    private String deptUuid;
+
+    @Schema(description = "职位")
+    @ExcelProperty("职位")
+    private String position;
+
+    @Schema(description = "出差事由", example = "不好")
+    @ExcelProperty("出差事由")
+    private String reason;
+
+    @Schema(description = "出差目的地")
+    @ExcelProperty("出差目的地")
+    private String destination;
+
+    @Schema(description = "出差开始日期")
+    @ExcelProperty("出差开始日期")
+    private String startDate;
+
+    @Schema(description = "出差结束日期")
+    @ExcelProperty("出差结束日期")
+    private String endDate;
+
+    @Schema(description = "出差天数(d)")
+    @ExcelProperty("出差天数(d)")
+    private String day;
+
+    @Schema(description = "出差预算费用,单位(元)", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("出差预算费用,单位(元)")
+    private BigDecimal estimatedCost;
+
+    @Schema(description = "备注")
+    @ExcelProperty("备注")
+    private String remarks;
+
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @ExcelProperty("状态")
+    private Integer status;
+
+    @Schema(description = "数据来源,0流程添加、1手动添加")
+    @ExcelProperty("数据来源,0流程添加、1手动添加")
+    private String infoSource;
+
+    @Schema(description = "创建人员工id", example = "13908")
+    @ExcelProperty("创建人员工id")
+    private Long creatorEmployeeId;
+
+    @Schema(description = "创建人员工姓名", example = "张三")
+    @ExcelProperty("创建人员工姓名")
+    private String creatorEmployeeName;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "租户编号", example = "1")
+    @ExcelProperty("租户编号")
+    private Long tenantId;
+
+}

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

@@ -0,0 +1,86 @@
+package cn.iocoder.yudao.module.attendance.controller.admin.business.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+import javax.validation.constraints.NotNull;
+import java.util.*;
+import java.math.BigDecimal;
+
+@Schema(description = "管理后台 - 出差信息新增/修改 Request VO")
+@Data
+public class AttendanceBusinessSaveReqVO {
+
+    @Schema(description = "出差表单主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "21097")
+    private Long id;
+
+    @Schema(description = "uuid", example = "20857")
+    private String businessId;
+
+    @Schema(description = "出差人id", example = "797")
+    private Long employeeId;
+
+    @Schema(description = "出差人uuid", example = "5176")
+    private String employeeUuid;
+
+    @Schema(description = "出差员工姓名", example = "芋艿")
+    private String employeeName;
+
+    @Schema(description = "出差员工手机号")
+    private String employeePhone;
+
+    @Schema(description = "用户账号id", example = "25207")
+    private Long userId;
+
+    @Schema(description = "用户账号uuid", example = "28825")
+    private String userUuid;
+
+    @Schema(description = "部门id", example = "17524")
+    private Long deptId;
+
+    @Schema(description = "部门uuid", example = "30513")
+    private String deptUuid;
+
+    @Schema(description = "职位")
+    private String position;
+
+    @Schema(description = "出差事由", example = "不好")
+    private String reason;
+
+    @Schema(description = "出差目的地")
+    private String destination;
+
+    @Schema(description = "出差开始日期")
+    private String startDate;
+
+    @Schema(description = "出差结束日期")
+    private String endDate;
+
+    @Schema(description = "出差天数(d)")
+    private String day;
+
+    @Schema(description = "出差预算费用,单位(元)", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "出差预算费用,单位(元)不能为空")
+    private BigDecimal estimatedCost;
+
+    @Schema(description = "备注")
+    private String remarks;
+
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "状态不能为空")
+    private Integer status;
+
+    @Schema(description = "数据来源,0流程添加、1手动添加")
+    private String infoSource;
+
+    @Schema(description = "创建人员工id", example = "13908")
+    private Long creatorEmployeeId;
+
+    @Schema(description = "创建人员工姓名", example = "张三")
+    private String creatorEmployeeName;
+
+    @Schema(description = "租户编号", example = "1")
+    private Long tenantId;
+
+}

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

@@ -43,4 +43,7 @@ public class AttendanceEmployeeSettingPageReqVO extends PageParam {
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] createTime;
 
+    @Schema(description = "租户编号", example = "1")
+    private Long tenantId;
+
 }

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

@@ -53,4 +53,8 @@ public class AttendanceEmployeeSettingRespVO {
     @ExcelProperty("创建时间")
     private LocalDateTime createTime;
 
+    @Schema(description = "租户编号", example = "1")
+    @ExcelProperty("租户编号")
+    private Long tenantId;
+
 }

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

@@ -42,4 +42,7 @@ public class AttendanceEmployeeSettingSaveReqVO {
     @NotNull(message = "状态不能为空")
     private Integer status;
 
+    @Schema(description = "租户编号", example = "1")
+    private Long tenantId;
+
 }

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

@@ -79,4 +79,7 @@ public class AttendanceInfoPageReqVO extends PageParam {
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] createTime;
 
+    @Schema(description = "租户编号", example = "1")
+    private Long tenantId;
+
 }

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

@@ -89,4 +89,8 @@ public class AttendanceInfoRespVO {
     @ExcelProperty("创建时间")
     private LocalDateTime createTime;
 
+    @Schema(description = "租户编号", example = "1")
+    @ExcelProperty("租户编号")
+    private Long tenantId;
+
 }

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

@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.attendance.controller.admin.info.vo;
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 
@@ -71,4 +72,7 @@ public class AttendanceInfoSaveReqVO {
     @NotNull(message = "状态不能为空")
     private Integer status;
 
+    @Schema(description = "租户编号", example = "1")
+    private Long tenantId;
+
 }

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

@@ -0,0 +1,95 @@
+package cn.iocoder.yudao.module.attendance.controller.admin.leave;
+
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import java.util.*;
+import java.io.IOException;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import cn.iocoder.yudao.module.attendance.controller.admin.leave.vo.*;
+import cn.iocoder.yudao.module.attendance.dal.dataobject.leave.AttendanceLeaveDO;
+import cn.iocoder.yudao.module.attendance.service.leave.AttendanceLeaveService;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+
+@Tag(name = "管理后台 - 请假信息")
+@RestController
+@RequestMapping("/attendance/leave")
+@Validated
+public class AttendanceLeaveController {
+
+    @Resource
+    private AttendanceLeaveService leaveService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建请假信息")
+    @PreAuthorize("@ss.hasPermission('attendance:leave:create')")
+    public CommonResult<Long> createLeave(@Valid @RequestBody AttendanceLeaveSaveReqVO createReqVO) {
+        return success(leaveService.createLeave(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新请假信息")
+    @PreAuthorize("@ss.hasPermission('attendance:leave:update')")
+    public CommonResult<Boolean> updateLeave(@Valid @RequestBody AttendanceLeaveSaveReqVO updateReqVO) {
+        leaveService.updateLeave(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除请假信息")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('attendance:leave:delete')")
+    public CommonResult<Boolean> deleteLeave(@RequestParam("id") Long id) {
+        leaveService.deleteLeave(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得请假信息")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @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));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得请假信息分页")
+    @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));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出请假信息 Excel")
+    @PreAuthorize("@ss.hasPermission('attendance:leave:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportLeaveExcel(@Valid AttendanceLeavePageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<AttendanceLeaveDO> list = leaveService.getLeavePage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "请假信息.xls", "数据", AttendanceLeaveRespVO.class,
+                        BeanUtils.toBean(list, AttendanceLeaveRespVO.class));
+    }
+
+}

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

@@ -0,0 +1,96 @@
+package cn.iocoder.yudao.module.attendance.controller.admin.leave.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 请假信息分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class AttendanceLeavePageReqVO extends PageParam {
+
+    @Schema(description = "uuid", example = "9396")
+    private String leaveId;
+
+    @Schema(description = "请假人id", example = "25553")
+    private Long employeeId;
+
+    @Schema(description = "请假人uuid", example = "9213")
+    private String employeeUuid;
+
+    @Schema(description = "请假员工姓名", example = "王五")
+    private String employeeName;
+
+    @Schema(description = "请假员工手机号")
+    private String employeePhone;
+
+    @Schema(description = "用户账号id", example = "20160")
+    private Long userId;
+
+    @Schema(description = "用户账号uuid", example = "27340")
+    private String userUuid;
+
+    @Schema(description = "部门id", example = "5849")
+    private Long deptId;
+
+    @Schema(description = "部门uuid", example = "864")
+    private String deptUuid;
+
+    @Schema(description = "员工职位")
+    private String position;
+
+    @Schema(description = "请假类型", example = "1")
+    private String leaveType;
+
+    @Schema(description = "开始日期")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private String[] startDate;
+
+    @Schema(description = "具体时间,精确到上下午,am上午 pm下午")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private String[] startTime;
+
+    @Schema(description = "结束日期")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private String[] endDate;
+
+    @Schema(description = "具体时间,精确到上下午,am上午 pm下午")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private String[] endTime;
+
+    @Schema(description = "请假天数")
+    private String day;
+
+    @Schema(description = "请假原因", example = "不香")
+    private String reason;
+
+    @Schema(description = "备注")
+    private String remarks;
+
+    @Schema(description = "状态", example = "1")
+    private Integer status;
+
+    @Schema(description = "数据来源,0流程添加、1手动添加")
+    private String infoSource;
+
+    @Schema(description = "创建人员工id", example = "22995")
+    private Long creatorEmployeeId;
+
+    @Schema(description = "创建人员工姓名", example = "张三")
+    private String creatorEmployeeName;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+    @Schema(description = "租户编号", example = "1")
+    private Long tenantId;
+
+}

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

@@ -0,0 +1,116 @@
+package cn.iocoder.yudao.module.attendance.controller.admin.leave.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 请假信息 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class AttendanceLeaveRespVO {
+
+    @Schema(description = "请假表单主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "11893")
+    @ExcelProperty("请假表单主键")
+    private Long id;
+
+    @Schema(description = "uuid", example = "9396")
+    @ExcelProperty("uuid")
+    private String leaveId;
+
+    @Schema(description = "请假人id", example = "25553")
+    @ExcelProperty("请假人id")
+    private Long employeeId;
+
+    @Schema(description = "请假人uuid", example = "9213")
+    @ExcelProperty("请假人uuid")
+    private String employeeUuid;
+
+    @Schema(description = "请假员工姓名", example = "王五")
+    @ExcelProperty("请假员工姓名")
+    private String employeeName;
+
+    @Schema(description = "请假员工手机号")
+    @ExcelProperty("请假员工手机号")
+    private String employeePhone;
+
+    @Schema(description = "用户账号id", example = "20160")
+    @ExcelProperty("用户账号id")
+    private Long userId;
+
+    @Schema(description = "用户账号uuid", example = "27340")
+    @ExcelProperty("用户账号uuid")
+    private String userUuid;
+
+    @Schema(description = "部门id", example = "5849")
+    @ExcelProperty("部门id")
+    private Long deptId;
+
+    @Schema(description = "部门uuid", example = "864")
+    @ExcelProperty("部门uuid")
+    private String deptUuid;
+
+    @Schema(description = "员工职位")
+    @ExcelProperty("员工职位")
+    private String position;
+
+    @Schema(description = "请假类型", example = "1")
+    @ExcelProperty("请假类型")
+    private String leaveType;
+
+    @Schema(description = "开始日期")
+    @ExcelProperty("开始日期")
+    private String startDate;
+
+    @Schema(description = "具体时间,精确到上下午,am上午 pm下午")
+    @ExcelProperty("具体时间,精确到上下午,am上午 pm下午")
+    private String startTime;
+
+    @Schema(description = "结束日期")
+    @ExcelProperty("结束日期")
+    private String endDate;
+
+    @Schema(description = "具体时间,精确到上下午,am上午 pm下午")
+    @ExcelProperty("具体时间,精确到上下午,am上午 pm下午")
+    private String endTime;
+
+    @Schema(description = "请假天数")
+    @ExcelProperty("请假天数")
+    private String day;
+
+    @Schema(description = "请假原因", example = "不香")
+    @ExcelProperty("请假原因")
+    private String reason;
+
+    @Schema(description = "备注")
+    @ExcelProperty("备注")
+    private String remarks;
+
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @ExcelProperty("状态")
+    private Integer status;
+
+    @Schema(description = "数据来源,0流程添加、1手动添加")
+    @ExcelProperty("数据来源,0流程添加、1手动添加")
+    private String infoSource;
+
+    @Schema(description = "创建人员工id", example = "22995")
+    @ExcelProperty("创建人员工id")
+    private Long creatorEmployeeId;
+
+    @Schema(description = "创建人员工姓名", example = "张三")
+    @ExcelProperty("创建人员工姓名")
+    private String creatorEmployeeName;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "租户编号", example = "1")
+    @ExcelProperty("租户编号")
+    private Long tenantId;
+
+}

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

@@ -0,0 +1,87 @@
+package cn.iocoder.yudao.module.attendance.controller.admin.leave.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+import javax.validation.constraints.NotNull;
+import java.util.*;
+
+@Schema(description = "管理后台 - 请假信息新增/修改 Request VO")
+@Data
+public class AttendanceLeaveSaveReqVO {
+
+    @Schema(description = "请假表单主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "11893")
+    private Long id;
+
+    @Schema(description = "uuid", example = "9396")
+    private String leaveId;
+
+    @Schema(description = "请假人id", example = "25553")
+    private Long employeeId;
+
+    @Schema(description = "请假人uuid", example = "9213")
+    private String employeeUuid;
+
+    @Schema(description = "请假员工姓名", example = "王五")
+    private String employeeName;
+
+    @Schema(description = "请假员工手机号")
+    private String employeePhone;
+
+    @Schema(description = "用户账号id", example = "20160")
+    private Long userId;
+
+    @Schema(description = "用户账号uuid", example = "27340")
+    private String userUuid;
+
+    @Schema(description = "部门id", example = "5849")
+    private Long deptId;
+
+    @Schema(description = "部门uuid", example = "864")
+    private String deptUuid;
+
+    @Schema(description = "员工职位")
+    private String position;
+
+    @Schema(description = "请假类型", example = "1")
+    private String leaveType;
+
+    @Schema(description = "开始日期")
+    private String startDate;
+
+    @Schema(description = "具体时间,精确到上下午,am上午 pm下午")
+    private String startTime;
+
+    @Schema(description = "结束日期")
+    private String endDate;
+
+    @Schema(description = "具体时间,精确到上下午,am上午 pm下午")
+    private String endTime;
+
+    @Schema(description = "请假天数")
+    private String day;
+
+    @Schema(description = "请假原因", example = "不香")
+    private String reason;
+
+    @Schema(description = "备注")
+    private String remarks;
+
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "状态不能为空")
+    private Integer status;
+
+    @Schema(description = "数据来源,0流程添加、1手动添加")
+    private String infoSource;
+
+    @Schema(description = "创建人员工id", example = "22995")
+    private Long creatorEmployeeId;
+
+    @Schema(description = "创建人员工姓名", example = "张三")
+    private String creatorEmployeeName;
+
+    @Schema(description = "租户编号", example = "1")
+    private Long tenantId;
+
+}

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

@@ -0,0 +1,95 @@
+package cn.iocoder.yudao.module.attendance.controller.admin.out;
+
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import java.util.*;
+import java.io.IOException;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import cn.iocoder.yudao.module.attendance.controller.admin.out.vo.*;
+import cn.iocoder.yudao.module.attendance.dal.dataobject.out.AttendanceOutDO;
+import cn.iocoder.yudao.module.attendance.service.out.AttendanceOutService;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+
+@Tag(name = "管理后台 - 公务外出信息")
+@RestController
+@RequestMapping("/attendance/out")
+@Validated
+public class AttendanceOutController {
+
+    @Resource
+    private AttendanceOutService outService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建公务外出信息")
+    @PreAuthorize("@ss.hasPermission('attendance:out:create')")
+    public CommonResult<Long> createOut(@Valid @RequestBody AttendanceOutSaveReqVO createReqVO) {
+        return success(outService.createOut(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新公务外出信息")
+    @PreAuthorize("@ss.hasPermission('attendance:out:update')")
+    public CommonResult<Boolean> updateOut(@Valid @RequestBody AttendanceOutSaveReqVO updateReqVO) {
+        outService.updateOut(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除公务外出信息")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('attendance:out:delete')")
+    public CommonResult<Boolean> deleteOut(@RequestParam("id") Long id) {
+        outService.deleteOut(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得公务外出信息")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @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));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得公务外出信息分页")
+    @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));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出公务外出信息 Excel")
+    @PreAuthorize("@ss.hasPermission('attendance:out:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportOutExcel(@Valid AttendanceOutPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<AttendanceOutDO> list = outService.getOutPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "公务外出信息.xls", "数据", AttendanceOutRespVO.class,
+                        BeanUtils.toBean(list, AttendanceOutRespVO.class));
+    }
+
+}

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

@@ -0,0 +1,88 @@
+package cn.iocoder.yudao.module.attendance.controller.admin.out.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 公务外出信息分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class AttendanceOutPageReqVO extends PageParam {
+
+    @Schema(description = "uuid", example = "16029")
+    private String outId;
+
+    @Schema(description = "外出人id", example = "27799")
+    private Long employeeId;
+
+    @Schema(description = "外出人uuid", example = "22887")
+    private String employeeUuid;
+
+    @Schema(description = "外出员工姓名", example = "芋艿")
+    private String employeeName;
+
+    @Schema(description = "外出员工手机号")
+    private String employeePhone;
+
+    @Schema(description = "用户账号id", example = "13471")
+    private Long userId;
+
+    @Schema(description = "用户账号uuid", example = "10860")
+    private String userUuid;
+
+    @Schema(description = "部门id", example = "7228")
+    private Long deptId;
+
+    @Schema(description = "部门uuid", example = "29774")
+    private String deptUuid;
+
+    @Schema(description = "员工职位")
+    private String position;
+
+    @Schema(description = "外出事由", example = "不好")
+    private String reason;
+
+    @Schema(description = "外出地点")
+    private String destination;
+
+    @Schema(description = "外出开始时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private String[] startDate;
+
+    @Schema(description = "外出结束时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private String[] endDate;
+
+    @Schema(description = "外出时长,单位(小时)")
+    private String hour;
+
+    @Schema(description = "备注")
+    private String remarks;
+
+    @Schema(description = "状态", example = "2")
+    private Integer status;
+
+    @Schema(description = "数据来源,0流程添加、1手动添加")
+    private String infoSource;
+
+    @Schema(description = "创建人员工id", example = "6769")
+    private Long creatorEmployeeId;
+
+    @Schema(description = "创建人员工姓名", example = "芋艿")
+    private String creatorEmployeeName;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+    @Schema(description = "租户编号", example = "1")
+    private Long tenantId;
+
+}

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

@@ -0,0 +1,108 @@
+package cn.iocoder.yudao.module.attendance.controller.admin.out.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 公务外出信息 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class AttendanceOutRespVO {
+
+    @Schema(description = "出差表单主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "28683")
+    @ExcelProperty("出差表单主键")
+    private Long id;
+
+    @Schema(description = "uuid", example = "16029")
+    @ExcelProperty("uuid")
+    private String outId;
+
+    @Schema(description = "外出人id", example = "27799")
+    @ExcelProperty("外出人id")
+    private Long employeeId;
+
+    @Schema(description = "外出人uuid", example = "22887")
+    @ExcelProperty("外出人uuid")
+    private String employeeUuid;
+
+    @Schema(description = "外出员工姓名", example = "芋艿")
+    @ExcelProperty("外出员工姓名")
+    private String employeeName;
+
+    @Schema(description = "外出员工手机号")
+    @ExcelProperty("外出员工手机号")
+    private String employeePhone;
+
+    @Schema(description = "用户账号id", example = "13471")
+    @ExcelProperty("用户账号id")
+    private Long userId;
+
+    @Schema(description = "用户账号uuid", example = "10860")
+    @ExcelProperty("用户账号uuid")
+    private String userUuid;
+
+    @Schema(description = "部门id", example = "7228")
+    @ExcelProperty("部门id")
+    private Long deptId;
+
+    @Schema(description = "部门uuid", example = "29774")
+    @ExcelProperty("部门uuid")
+    private String deptUuid;
+
+    @Schema(description = "员工职位")
+    @ExcelProperty("员工职位")
+    private String position;
+
+    @Schema(description = "外出事由", example = "不好")
+    @ExcelProperty("外出事由")
+    private String reason;
+
+    @Schema(description = "外出地点")
+    @ExcelProperty("外出地点")
+    private String destination;
+
+    @Schema(description = "外出开始时间")
+    @ExcelProperty("外出开始时间")
+    private String startDate;
+
+    @Schema(description = "外出结束时间")
+    @ExcelProperty("外出结束时间")
+    private String endDate;
+
+    @Schema(description = "外出时长,单位(小时)")
+    @ExcelProperty("外出时长,单位(小时)")
+    private String hour;
+
+    @Schema(description = "备注")
+    @ExcelProperty("备注")
+    private String remarks;
+
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @ExcelProperty("状态")
+    private Integer status;
+
+    @Schema(description = "数据来源,0流程添加、1手动添加")
+    @ExcelProperty("数据来源,0流程添加、1手动添加")
+    private String infoSource;
+
+    @Schema(description = "创建人员工id", example = "6769")
+    @ExcelProperty("创建人员工id")
+    private Long creatorEmployeeId;
+
+    @Schema(description = "创建人员工姓名", example = "芋艿")
+    @ExcelProperty("创建人员工姓名")
+    private String creatorEmployeeName;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "租户编号", example = "1")
+    @ExcelProperty("租户编号")
+    private Long tenantId;
+
+}

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

@@ -0,0 +1,81 @@
+package cn.iocoder.yudao.module.attendance.controller.admin.out.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+import javax.validation.constraints.NotNull;
+import java.util.*;
+
+@Schema(description = "管理后台 - 公务外出信息新增/修改 Request VO")
+@Data
+public class AttendanceOutSaveReqVO {
+
+    @Schema(description = "出差表单主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "28683")
+    private Long id;
+
+    @Schema(description = "uuid", example = "16029")
+    private String outId;
+
+    @Schema(description = "外出人id", example = "27799")
+    private Long employeeId;
+
+    @Schema(description = "外出人uuid", example = "22887")
+    private String employeeUuid;
+
+    @Schema(description = "外出员工姓名", example = "芋艿")
+    private String employeeName;
+
+    @Schema(description = "外出员工手机号")
+    private String employeePhone;
+
+    @Schema(description = "用户账号id", example = "13471")
+    private Long userId;
+
+    @Schema(description = "用户账号uuid", example = "10860")
+    private String userUuid;
+
+    @Schema(description = "部门id", example = "7228")
+    private Long deptId;
+
+    @Schema(description = "部门uuid", example = "29774")
+    private String deptUuid;
+
+    @Schema(description = "员工职位")
+    private String position;
+
+    @Schema(description = "外出事由", example = "不好")
+    private String reason;
+
+    @Schema(description = "外出地点")
+    private String destination;
+
+    @Schema(description = "外出开始时间")
+    private String startDate;
+
+    @Schema(description = "外出结束时间")
+    private String endDate;
+
+    @Schema(description = "外出时长,单位(小时)")
+    private String hour;
+
+    @Schema(description = "备注")
+    private String remarks;
+
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @NotNull(message = "状态不能为空")
+    private Integer status;
+
+    @Schema(description = "数据来源,0流程添加、1手动添加")
+    private String infoSource;
+
+    @Schema(description = "创建人员工id", example = "6769")
+    private Long creatorEmployeeId;
+
+    @Schema(description = "创建人员工姓名", example = "芋艿")
+    private String creatorEmployeeName;
+
+    @Schema(description = "租户编号", example = "1")
+    private Long tenantId;
+
+}

+ 5 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/schedulingmanage/vo/AttendanceSchedulingManagePageReqVO.java

@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.attendance.controller.admin.schedulingmanage.vo;
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import lombok.*;
 
 import java.time.LocalTime;
@@ -38,4 +39,8 @@ public class AttendanceSchedulingManagePageReqVO extends PageParam {
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] createTime;
 
+    @Schema(description = "租户编号", example = "1")
+    @ExcelProperty("租户编号")
+    private Long tenantId;
+
 }

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

@@ -43,4 +43,8 @@ public class AttendanceSchedulingManageRespVO {
     @ExcelProperty("创建时间")
     private LocalDateTime createTime;
 
+    @Schema(description = "租户编号", example = "1")
+    @ExcelProperty("租户编号")
+    private Long tenantId;
+
 }

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

@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.attendance.controller.admin.schedulingmanage.vo;
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 
@@ -35,4 +36,7 @@ public class AttendanceSchedulingManageSaveReqVO {
     @NotNull(message = "状态不能为空")
     private Integer status;
 
+    @Schema(description = "租户编号", example = "1")
+    private Long tenantId;
+
 }

+ 122 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/dal/dataobject/business/AttendanceBusinessDO.java

@@ -0,0 +1,122 @@
+package cn.iocoder.yudao.module.attendance.dal.dataobject.business;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 出差信息 DO
+ *
+ * @author zhaopq
+ */
+@TableName("attendance_business")
+@KeySequence("attendance_business_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class AttendanceBusinessDO extends BaseDO {
+
+    /**
+     * 出差表单主键
+     */
+    @TableId
+    private Long id;
+    /**
+     * uuid
+     */
+    private String businessId;
+    /**
+     * 出差人id
+     */
+    private Long employeeId;
+    /**
+     * 出差人uuid
+     */
+    private String employeeUuid;
+    /**
+     * 出差员工姓名
+     */
+    private String employeeName;
+    /**
+     * 出差员工手机号
+     */
+    private String employeePhone;
+    /**
+     * 用户账号id
+     */
+    private Long userId;
+    /**
+     * 用户账号uuid
+     */
+    private String userUuid;
+    /**
+     * 部门id
+     */
+    private Long deptId;
+    /**
+     * 部门uuid
+     */
+    private String deptUuid;
+    /**
+     * 职位
+     */
+    private String position;
+    /**
+     * 出差事由
+     */
+    private String reason;
+    /**
+     * 出差目的地
+     */
+    private String destination;
+    /**
+     * 出差开始日期
+     */
+    private String startDate;
+    /**
+     * 出差结束日期
+     */
+    private String endDate;
+    /**
+     * 出差天数(d)
+     */
+    private String day;
+    /**
+     * 出差预算费用,单位(元)
+     */
+    private BigDecimal estimatedCost;
+    /**
+     * 备注
+     */
+    private String remarks;
+    /**
+     * 状态
+     */
+    private Integer status;
+    /**
+     * 数据来源,0流程添加、1手动添加
+     */
+    private String infoSource;
+    /**
+     * 创建人员工id
+     */
+    private Long creatorEmployeeId;
+    /**
+     * 创建人员工姓名
+     */
+    private String creatorEmployeeName;
+    /**
+     * 租户编号
+     */
+    private Long tenantId;
+
+}

+ 4 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/dal/dataobject/employeesetting/AttendanceEmployeeSettingDO.java

@@ -59,5 +59,9 @@ public class AttendanceEmployeeSettingDO extends BaseDO {
      * 状态
      */
     private Integer status;
+    /**
+     * 租户编号
+     */
+    private Long tenantId;
 
 }

+ 4 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/dal/dataobject/info/AttendanceInfoDO.java

@@ -97,5 +97,9 @@ public class AttendanceInfoDO extends BaseDO {
      * 状态
      */
     private Integer status;
+    /**
+     * 租户编号
+     */
+    private Long tenantId;
 
 }

+ 123 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/dal/dataobject/leave/AttendanceLeaveDO.java

@@ -0,0 +1,123 @@
+package cn.iocoder.yudao.module.attendance.dal.dataobject.leave;
+
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 请假信息 DO
+ *
+ * @author zhaopq
+ */
+@TableName("attendance_leave")
+@KeySequence("attendance_leave_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class AttendanceLeaveDO extends BaseDO {
+
+    /**
+     * 请假表单主键
+     */
+    @TableId
+    private Long id;
+    /**
+     * uuid
+     */
+    private String leaveId;
+    /**
+     * 请假人id
+     */
+    private Long employeeId;
+    /**
+     * 请假人uuid
+     */
+    private String employeeUuid;
+    /**
+     * 请假员工姓名
+     */
+    private String employeeName;
+    /**
+     * 请假员工手机号
+     */
+    private String employeePhone;
+    /**
+     * 用户账号id
+     */
+    private Long userId;
+    /**
+     * 用户账号uuid
+     */
+    private String userUuid;
+    /**
+     * 部门id
+     */
+    private Long deptId;
+    /**
+     * 部门uuid
+     */
+    private String deptUuid;
+    /**
+     * 员工职位
+     */
+    private String position;
+    /**
+     * 请假类型
+     */
+    private String leaveType;
+    /**
+     * 开始日期
+     */
+    private String startDate;
+    /**
+     * 具体时间,精确到上下午,am上午 pm下午
+     */
+    private String startTime;
+    /**
+     * 结束日期
+     */
+    private String endDate;
+    /**
+     * 具体时间,精确到上下午,am上午 pm下午
+     */
+    private String endTime;
+    /**
+     * 请假天数
+     */
+    private String day;
+    /**
+     * 请假原因
+     */
+    private String reason;
+    /**
+     * 备注
+     */
+    private String remarks;
+    /**
+     * 状态
+     */
+    private Integer status;
+    /**
+     * 数据来源,0流程添加、1手动添加
+     */
+    private String infoSource;
+    /**
+     * 创建人员工id
+     */
+    private Long creatorEmployeeId;
+    /**
+     * 创建人员工姓名
+     */
+    private String creatorEmployeeName;
+    /**
+     * 租户编号
+     */
+    private Long tenantId;
+
+}

+ 115 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/dal/dataobject/out/AttendanceOutDO.java

@@ -0,0 +1,115 @@
+package cn.iocoder.yudao.module.attendance.dal.dataobject.out;
+
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 公务外出信息 DO
+ *
+ * @author zhaopq
+ */
+@TableName("attendance_out")
+@KeySequence("attendance_out_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class AttendanceOutDO extends BaseDO {
+
+    /**
+     * 出差表单主键
+     */
+    @TableId
+    private Long id;
+    /**
+     * uuid
+     */
+    private String outId;
+    /**
+     * 外出人id
+     */
+    private Long employeeId;
+    /**
+     * 外出人uuid
+     */
+    private String employeeUuid;
+    /**
+     * 外出员工姓名
+     */
+    private String employeeName;
+    /**
+     * 外出员工手机号
+     */
+    private String employeePhone;
+    /**
+     * 用户账号id
+     */
+    private Long userId;
+    /**
+     * 用户账号uuid
+     */
+    private String userUuid;
+    /**
+     * 部门id
+     */
+    private Long deptId;
+    /**
+     * 部门uuid
+     */
+    private String deptUuid;
+    /**
+     * 员工职位
+     */
+    private String position;
+    /**
+     * 外出事由
+     */
+    private String reason;
+    /**
+     * 外出地点
+     */
+    private String destination;
+    /**
+     * 外出开始时间
+     */
+    private String startDate;
+    /**
+     * 外出结束时间
+     */
+    private String endDate;
+    /**
+     * 外出时长,单位(小时)
+     */
+    private String hour;
+    /**
+     * 备注
+     */
+    private String remarks;
+    /**
+     * 状态
+     */
+    private Integer status;
+    /**
+     * 数据来源,0流程添加、1手动添加
+     */
+    private String infoSource;
+    /**
+     * 创建人员工id
+     */
+    private Long creatorEmployeeId;
+    /**
+     * 创建人员工姓名
+     */
+    private String creatorEmployeeName;
+    /**
+     * 租户编号
+     */
+    private Long tenantId;
+
+}

+ 4 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/dal/dataobject/schedulingmanage/AttendanceSchedulingManageDO.java

@@ -46,5 +46,9 @@ public class AttendanceSchedulingManageDO extends BaseDO {
      * 状态
      */
     private Integer status;
+    /**
+     * 租户编号
+     */
+    private Long tenantId;
 
 }

+ 48 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/dal/mysql/business/AttendanceBusinessMapper.java

@@ -0,0 +1,48 @@
+package cn.iocoder.yudao.module.attendance.dal.mysql.business;
+
+import java.util.*;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.module.attendance.dal.dataobject.business.AttendanceBusinessDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.iocoder.yudao.module.attendance.controller.admin.business.vo.*;
+
+/**
+ * 出差信息 Mapper
+ *
+ * @author zhaopq
+ */
+@Mapper
+public interface AttendanceBusinessMapper extends BaseMapperX<AttendanceBusinessDO> {
+
+    default PageResult<AttendanceBusinessDO> selectPage(AttendanceBusinessPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<AttendanceBusinessDO>()
+                .eqIfPresent(AttendanceBusinessDO::getBusinessId, reqVO.getBusinessId())
+                .eqIfPresent(AttendanceBusinessDO::getEmployeeId, reqVO.getEmployeeId())
+                .eqIfPresent(AttendanceBusinessDO::getEmployeeUuid, reqVO.getEmployeeUuid())
+                .likeIfPresent(AttendanceBusinessDO::getEmployeeName, reqVO.getEmployeeName())
+                .eqIfPresent(AttendanceBusinessDO::getEmployeePhone, reqVO.getEmployeePhone())
+                .eqIfPresent(AttendanceBusinessDO::getUserId, reqVO.getUserId())
+                .eqIfPresent(AttendanceBusinessDO::getUserUuid, reqVO.getUserUuid())
+                .eqIfPresent(AttendanceBusinessDO::getDeptId, reqVO.getDeptId())
+                .eqIfPresent(AttendanceBusinessDO::getDeptUuid, reqVO.getDeptUuid())
+                .eqIfPresent(AttendanceBusinessDO::getPosition, reqVO.getPosition())
+                .eqIfPresent(AttendanceBusinessDO::getReason, reqVO.getReason())
+                .eqIfPresent(AttendanceBusinessDO::getDestination, reqVO.getDestination())
+                .betweenIfPresent(AttendanceBusinessDO::getStartDate, reqVO.getStartDate())
+                .betweenIfPresent(AttendanceBusinessDO::getEndDate, reqVO.getEndDate())
+                .eqIfPresent(AttendanceBusinessDO::getDay, reqVO.getDay())
+                .eqIfPresent(AttendanceBusinessDO::getEstimatedCost, reqVO.getEstimatedCost())
+                .eqIfPresent(AttendanceBusinessDO::getRemarks, reqVO.getRemarks())
+                .eqIfPresent(AttendanceBusinessDO::getStatus, reqVO.getStatus())
+                .eqIfPresent(AttendanceBusinessDO::getInfoSource, reqVO.getInfoSource())
+                .eqIfPresent(AttendanceBusinessDO::getCreatorEmployeeId, reqVO.getCreatorEmployeeId())
+                .likeIfPresent(AttendanceBusinessDO::getCreatorEmployeeName, reqVO.getCreatorEmployeeName())
+                .betweenIfPresent(AttendanceBusinessDO::getCreateTime, reqVO.getCreateTime())
+                .eqIfPresent(AttendanceBusinessDO::getTenantId, reqVO.getTenantId())
+                .orderByDesc(AttendanceBusinessDO::getId));
+    }
+
+}

+ 2 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/dal/mysql/employeesetting/AttendanceEmployeeSettingMapper.java

@@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.module.attendance.controller.admin.employeesetting.vo.AttendanceEmployeeSettingPageReqVO;
+import cn.iocoder.yudao.module.attendance.dal.dataobject.business.AttendanceBusinessDO;
 import cn.iocoder.yudao.module.attendance.dal.dataobject.employeesetting.AttendanceEmployeeSettingDO;
 import org.apache.ibatis.annotations.Mapper;
 
@@ -28,6 +29,7 @@ public interface AttendanceEmployeeSettingMapper extends BaseMapperX<AttendanceE
                 .eqIfPresent(AttendanceEmployeeSettingDO::getEmail, reqVO.getEmail())
                 .eqIfPresent(AttendanceEmployeeSettingDO::getStatus, reqVO.getStatus())
                 .betweenIfPresent(AttendanceEmployeeSettingDO::getCreateTime, reqVO.getCreateTime())
+                .eqIfPresent(AttendanceEmployeeSettingDO::getTenantId, reqVO.getTenantId())
                 .orderByDesc(AttendanceEmployeeSettingDO::getId));
     }
 

+ 2 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/dal/mysql/info/AttendanceInfoMapper.java

@@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.module.attendance.controller.admin.info.vo.AttendanceInfoPageReqVO;
+import cn.iocoder.yudao.module.attendance.dal.dataobject.employeesetting.AttendanceEmployeeSettingDO;
 import cn.iocoder.yudao.module.attendance.dal.dataobject.info.AttendanceInfoDO;
 import org.apache.ibatis.annotations.Mapper;
 
@@ -36,6 +37,7 @@ public interface AttendanceInfoMapper extends BaseMapperX<AttendanceInfoDO> {
                 .eqIfPresent(AttendanceInfoDO::getRemarks, reqVO.getRemarks())
                 .eqIfPresent(AttendanceInfoDO::getStatus, reqVO.getStatus())
                 .betweenIfPresent(AttendanceInfoDO::getCreateTime, reqVO.getCreateTime())
+                .eqIfPresent(AttendanceInfoDO::getTenantId, reqVO.getTenantId())
                 .orderByDesc(AttendanceInfoDO::getId));
     }
 

+ 50 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/dal/mysql/leave/AttendanceLeaveMapper.java

@@ -0,0 +1,50 @@
+package cn.iocoder.yudao.module.attendance.dal.mysql.leave;
+
+import java.util.*;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.module.attendance.dal.dataobject.info.AttendanceInfoDO;
+import cn.iocoder.yudao.module.attendance.dal.dataobject.leave.AttendanceLeaveDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.iocoder.yudao.module.attendance.controller.admin.leave.vo.*;
+
+/**
+ * 请假信息 Mapper
+ *
+ * @author zhaopq
+ */
+@Mapper
+public interface AttendanceLeaveMapper extends BaseMapperX<AttendanceLeaveDO> {
+
+    default PageResult<AttendanceLeaveDO> selectPage(AttendanceLeavePageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<AttendanceLeaveDO>()
+                .eqIfPresent(AttendanceLeaveDO::getLeaveId, reqVO.getLeaveId())
+                .eqIfPresent(AttendanceLeaveDO::getEmployeeId, reqVO.getEmployeeId())
+                .eqIfPresent(AttendanceLeaveDO::getEmployeeUuid, reqVO.getEmployeeUuid())
+                .likeIfPresent(AttendanceLeaveDO::getEmployeeName, reqVO.getEmployeeName())
+                .eqIfPresent(AttendanceLeaveDO::getEmployeePhone, reqVO.getEmployeePhone())
+                .eqIfPresent(AttendanceLeaveDO::getUserId, reqVO.getUserId())
+                .eqIfPresent(AttendanceLeaveDO::getUserUuid, reqVO.getUserUuid())
+                .eqIfPresent(AttendanceLeaveDO::getDeptId, reqVO.getDeptId())
+                .eqIfPresent(AttendanceLeaveDO::getDeptUuid, reqVO.getDeptUuid())
+                .eqIfPresent(AttendanceLeaveDO::getPosition, reqVO.getPosition())
+                .eqIfPresent(AttendanceLeaveDO::getLeaveType, reqVO.getLeaveType())
+                .betweenIfPresent(AttendanceLeaveDO::getStartDate, reqVO.getStartDate())
+                .betweenIfPresent(AttendanceLeaveDO::getStartTime, reqVO.getStartTime())
+                .betweenIfPresent(AttendanceLeaveDO::getEndDate, reqVO.getEndDate())
+                .betweenIfPresent(AttendanceLeaveDO::getEndTime, reqVO.getEndTime())
+                .eqIfPresent(AttendanceLeaveDO::getDay, reqVO.getDay())
+                .eqIfPresent(AttendanceLeaveDO::getReason, reqVO.getReason())
+                .eqIfPresent(AttendanceLeaveDO::getRemarks, reqVO.getRemarks())
+                .eqIfPresent(AttendanceLeaveDO::getStatus, reqVO.getStatus())
+                .eqIfPresent(AttendanceLeaveDO::getInfoSource, reqVO.getInfoSource())
+                .eqIfPresent(AttendanceLeaveDO::getCreatorEmployeeId, reqVO.getCreatorEmployeeId())
+                .likeIfPresent(AttendanceLeaveDO::getCreatorEmployeeName, reqVO.getCreatorEmployeeName())
+                .betweenIfPresent(AttendanceLeaveDO::getCreateTime, reqVO.getCreateTime())
+                .eqIfPresent(AttendanceLeaveDO::getTenantId, reqVO.getTenantId())
+                .orderByDesc(AttendanceLeaveDO::getId));
+    }
+
+}

+ 48 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/dal/mysql/out/AttendanceOutMapper.java

@@ -0,0 +1,48 @@
+package cn.iocoder.yudao.module.attendance.dal.mysql.out;
+
+import java.util.*;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.module.attendance.dal.dataobject.leave.AttendanceLeaveDO;
+import cn.iocoder.yudao.module.attendance.dal.dataobject.out.AttendanceOutDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.iocoder.yudao.module.attendance.controller.admin.out.vo.*;
+
+/**
+ * 公务外出信息 Mapper
+ *
+ * @author zhaopq
+ */
+@Mapper
+public interface AttendanceOutMapper extends BaseMapperX<AttendanceOutDO> {
+
+    default PageResult<AttendanceOutDO> selectPage(AttendanceOutPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<AttendanceOutDO>()
+                .eqIfPresent(AttendanceOutDO::getOutId, reqVO.getOutId())
+                .eqIfPresent(AttendanceOutDO::getEmployeeId, reqVO.getEmployeeId())
+                .eqIfPresent(AttendanceOutDO::getEmployeeUuid, reqVO.getEmployeeUuid())
+                .likeIfPresent(AttendanceOutDO::getEmployeeName, reqVO.getEmployeeName())
+                .eqIfPresent(AttendanceOutDO::getEmployeePhone, reqVO.getEmployeePhone())
+                .eqIfPresent(AttendanceOutDO::getUserId, reqVO.getUserId())
+                .eqIfPresent(AttendanceOutDO::getUserUuid, reqVO.getUserUuid())
+                .eqIfPresent(AttendanceOutDO::getDeptId, reqVO.getDeptId())
+                .eqIfPresent(AttendanceOutDO::getDeptUuid, reqVO.getDeptUuid())
+                .eqIfPresent(AttendanceOutDO::getPosition, reqVO.getPosition())
+                .eqIfPresent(AttendanceOutDO::getReason, reqVO.getReason())
+                .eqIfPresent(AttendanceOutDO::getDestination, reqVO.getDestination())
+                .betweenIfPresent(AttendanceOutDO::getStartDate, reqVO.getStartDate())
+                .betweenIfPresent(AttendanceOutDO::getEndDate, reqVO.getEndDate())
+                .eqIfPresent(AttendanceOutDO::getHour, reqVO.getHour())
+                .eqIfPresent(AttendanceOutDO::getRemarks, reqVO.getRemarks())
+                .eqIfPresent(AttendanceOutDO::getStatus, reqVO.getStatus())
+                .eqIfPresent(AttendanceOutDO::getInfoSource, reqVO.getInfoSource())
+                .eqIfPresent(AttendanceOutDO::getCreatorEmployeeId, reqVO.getCreatorEmployeeId())
+                .likeIfPresent(AttendanceOutDO::getCreatorEmployeeName, reqVO.getCreatorEmployeeName())
+                .betweenIfPresent(AttendanceOutDO::getCreateTime, reqVO.getCreateTime())
+                .eqIfPresent(AttendanceOutDO::getTenantId, reqVO.getTenantId())
+                .orderByDesc(AttendanceOutDO::getId));
+    }
+
+}

+ 2 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/dal/mysql/schedulingmanage/AttendanceSchedulingManageMapper.java

@@ -5,6 +5,7 @@ import java.util.*;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.module.attendance.dal.dataobject.out.AttendanceOutDO;
 import cn.iocoder.yudao.module.attendance.dal.dataobject.schedulingmanage.AttendanceSchedulingManageDO;
 import org.apache.ibatis.annotations.Mapper;
 import cn.iocoder.yudao.module.attendance.controller.admin.schedulingmanage.vo.*;
@@ -25,6 +26,7 @@ public interface AttendanceSchedulingManageMapper extends BaseMapperX<Attendance
                 .eqIfPresent(AttendanceSchedulingManageDO::getRemarks, reqVO.getRemarks())
                 .eqIfPresent(AttendanceSchedulingManageDO::getStatus, reqVO.getStatus())
                 .betweenIfPresent(AttendanceSchedulingManageDO::getCreateTime, reqVO.getCreateTime())
+                .eqIfPresent(AttendanceSchedulingManageDO::getTenantId, reqVO.getTenantId())
                 .orderByDesc(AttendanceSchedulingManageDO::getId));
     }
 

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

@@ -0,0 +1,56 @@
+package cn.iocoder.yudao.module.attendance.service.business;
+
+import java.util.*;
+import cn.iocoder.yudao.module.attendance.controller.admin.business.vo.*;
+import cn.iocoder.yudao.module.attendance.dal.dataobject.business.AttendanceBusinessDO;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+
+import javax.validation.Valid;
+
+/**
+ * 出差信息 Service 接口
+ *
+ * @author zhaopq
+ */
+public interface AttendanceBusinessService {
+
+    /**
+     * 创建出差信息
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createBusiness(@Valid AttendanceBusinessSaveReqVO createReqVO);
+
+    /**
+     * 更新出差信息
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateBusiness(@Valid AttendanceBusinessSaveReqVO updateReqVO);
+
+    /**
+     * 删除出差信息
+     *
+     * @param id 编号
+     */
+    void deleteBusiness(Long id);
+
+    /**
+     * 获得出差信息
+     *
+     * @param id 编号
+     * @return 出差信息
+     */
+    AttendanceBusinessDO getBusiness(Long id);
+
+    /**
+     * 获得出差信息分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 出差信息分页
+     */
+    PageResult<AttendanceBusinessDO> getBusinessPage(AttendanceBusinessPageReqVO pageReqVO);
+
+}

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

@@ -0,0 +1,72 @@
+package cn.iocoder.yudao.module.attendance.service.business;
+
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import cn.iocoder.yudao.module.attendance.controller.admin.business.vo.*;
+import cn.iocoder.yudao.module.attendance.dal.dataobject.business.AttendanceBusinessDO;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+
+import cn.iocoder.yudao.module.attendance.dal.mysql.business.AttendanceBusinessMapper;
+
+import javax.annotation.Resource;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.attendance.enums.ErrorCodeConstants.*;
+
+/**
+ * 出差信息 Service 实现类
+ *
+ * @author zhaopq
+ */
+@Service
+@Validated
+public class AttendanceBusinessServiceImpl implements AttendanceBusinessService {
+
+    @Resource
+    private AttendanceBusinessMapper businessMapper;
+
+    @Override
+    public Long createBusiness(AttendanceBusinessSaveReqVO createReqVO) {
+        // 插入
+        AttendanceBusinessDO business = BeanUtils.toBean(createReqVO, AttendanceBusinessDO.class);
+        businessMapper.insert(business);
+        // 返回
+        return business.getId();
+    }
+
+    @Override
+    public void updateBusiness(AttendanceBusinessSaveReqVO updateReqVO) {
+        // 校验存在
+        validateBusinessExists(updateReqVO.getId());
+        // 更新
+        AttendanceBusinessDO updateObj = BeanUtils.toBean(updateReqVO, AttendanceBusinessDO.class);
+        businessMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteBusiness(Long id) {
+        // 校验存在
+        validateBusinessExists(id);
+        // 删除
+        businessMapper.deleteById(id);
+    }
+
+    private void validateBusinessExists(Long id) {
+        if (businessMapper.selectById(id) == null) {
+            throw exception(ATTENDANCE_BUSINESS_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public AttendanceBusinessDO getBusiness(Long id) {
+        return businessMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<AttendanceBusinessDO> getBusinessPage(AttendanceBusinessPageReqVO pageReqVO) {
+        return businessMapper.selectPage(pageReqVO);
+    }
+
+}

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

@@ -0,0 +1,56 @@
+package cn.iocoder.yudao.module.attendance.service.leave;
+
+import java.util.*;
+import cn.iocoder.yudao.module.attendance.controller.admin.leave.vo.*;
+import cn.iocoder.yudao.module.attendance.dal.dataobject.leave.AttendanceLeaveDO;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+
+import javax.validation.Valid;
+
+/**
+ * 请假信息 Service 接口
+ *
+ * @author zhaopq
+ */
+public interface AttendanceLeaveService {
+
+    /**
+     * 创建请假信息
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createLeave(@Valid AttendanceLeaveSaveReqVO createReqVO);
+
+    /**
+     * 更新请假信息
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateLeave(@Valid AttendanceLeaveSaveReqVO updateReqVO);
+
+    /**
+     * 删除请假信息
+     *
+     * @param id 编号
+     */
+    void deleteLeave(Long id);
+
+    /**
+     * 获得请假信息
+     *
+     * @param id 编号
+     * @return 请假信息
+     */
+    AttendanceLeaveDO getLeave(Long id);
+
+    /**
+     * 获得请假信息分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 请假信息分页
+     */
+    PageResult<AttendanceLeaveDO> getLeavePage(AttendanceLeavePageReqVO pageReqVO);
+
+}

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

@@ -0,0 +1,72 @@
+package cn.iocoder.yudao.module.attendance.service.leave;
+
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import cn.iocoder.yudao.module.attendance.controller.admin.leave.vo.*;
+import cn.iocoder.yudao.module.attendance.dal.dataobject.leave.AttendanceLeaveDO;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+
+import cn.iocoder.yudao.module.attendance.dal.mysql.leave.AttendanceLeaveMapper;
+
+import javax.annotation.Resource;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.attendance.enums.ErrorCodeConstants.*;
+
+/**
+ * 请假信息 Service 实现类
+ *
+ * @author zhaopq
+ */
+@Service
+@Validated
+public class AttendanceLeaveServiceImpl implements AttendanceLeaveService {
+
+    @Resource
+    private AttendanceLeaveMapper leaveMapper;
+
+    @Override
+    public Long createLeave(AttendanceLeaveSaveReqVO createReqVO) {
+        // 插入
+        AttendanceLeaveDO leave = BeanUtils.toBean(createReqVO, AttendanceLeaveDO.class);
+        leaveMapper.insert(leave);
+        // 返回
+        return leave.getId();
+    }
+
+    @Override
+    public void updateLeave(AttendanceLeaveSaveReqVO updateReqVO) {
+        // 校验存在
+        validateLeaveExists(updateReqVO.getId());
+        // 更新
+        AttendanceLeaveDO updateObj = BeanUtils.toBean(updateReqVO, AttendanceLeaveDO.class);
+        leaveMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteLeave(Long id) {
+        // 校验存在
+        validateLeaveExists(id);
+        // 删除
+        leaveMapper.deleteById(id);
+    }
+
+    private void validateLeaveExists(Long id) {
+        if (leaveMapper.selectById(id) == null) {
+            throw exception(ATTENDANCE_LEAVE_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public AttendanceLeaveDO getLeave(Long id) {
+        return leaveMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<AttendanceLeaveDO> getLeavePage(AttendanceLeavePageReqVO pageReqVO) {
+        return leaveMapper.selectPage(pageReqVO);
+    }
+
+}

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

@@ -0,0 +1,56 @@
+package cn.iocoder.yudao.module.attendance.service.out;
+
+import java.util.*;
+import cn.iocoder.yudao.module.attendance.controller.admin.out.vo.*;
+import cn.iocoder.yudao.module.attendance.dal.dataobject.out.AttendanceOutDO;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+
+import javax.validation.Valid;
+
+/**
+ * 公务外出信息 Service 接口
+ *
+ * @author zhaopq
+ */
+public interface AttendanceOutService {
+
+    /**
+     * 创建公务外出信息
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createOut(@Valid AttendanceOutSaveReqVO createReqVO);
+
+    /**
+     * 更新公务外出信息
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateOut(@Valid AttendanceOutSaveReqVO updateReqVO);
+
+    /**
+     * 删除公务外出信息
+     *
+     * @param id 编号
+     */
+    void deleteOut(Long id);
+
+    /**
+     * 获得公务外出信息
+     *
+     * @param id 编号
+     * @return 公务外出信息
+     */
+    AttendanceOutDO getOut(Long id);
+
+    /**
+     * 获得公务外出信息分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 公务外出信息分页
+     */
+    PageResult<AttendanceOutDO> getOutPage(AttendanceOutPageReqVO pageReqVO);
+
+}

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

@@ -0,0 +1,72 @@
+package cn.iocoder.yudao.module.attendance.service.out;
+
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import cn.iocoder.yudao.module.attendance.controller.admin.out.vo.*;
+import cn.iocoder.yudao.module.attendance.dal.dataobject.out.AttendanceOutDO;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+
+import cn.iocoder.yudao.module.attendance.dal.mysql.out.AttendanceOutMapper;
+
+import javax.annotation.Resource;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.attendance.enums.ErrorCodeConstants.*;
+
+/**
+ * 公务外出信息 Service 实现类
+ *
+ * @author zhaopq
+ */
+@Service
+@Validated
+public class AttendanceOutServiceImpl implements AttendanceOutService {
+
+    @Resource
+    private AttendanceOutMapper outMapper;
+
+    @Override
+    public Long createOut(AttendanceOutSaveReqVO createReqVO) {
+        // 插入
+        AttendanceOutDO out = BeanUtils.toBean(createReqVO, AttendanceOutDO.class);
+        outMapper.insert(out);
+        // 返回
+        return out.getId();
+    }
+
+    @Override
+    public void updateOut(AttendanceOutSaveReqVO updateReqVO) {
+        // 校验存在
+        validateOutExists(updateReqVO.getId());
+        // 更新
+        AttendanceOutDO updateObj = BeanUtils.toBean(updateReqVO, AttendanceOutDO.class);
+        outMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteOut(Long id) {
+        // 校验存在
+        validateOutExists(id);
+        // 删除
+        outMapper.deleteById(id);
+    }
+
+    private void validateOutExists(Long id) {
+        if (outMapper.selectById(id) == null) {
+            throw exception(ATTENDANCE_OUT_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public AttendanceOutDO getOut(Long id) {
+        return outMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<AttendanceOutDO> getOutPage(AttendanceOutPageReqVO pageReqVO) {
+        return outMapper.selectPage(pageReqVO);
+    }
+
+}

+ 12 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/resources/mapper/business/AttendanceBusinessMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.iocoder.yudao.module.attendance.dal.mysql.business.AttendanceBusinessMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 12 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/resources/mapper/leave/AttendanceLeaveMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.iocoder.yudao.module.attendance.dal.mysql.leave.AttendanceLeaveMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 12 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/resources/mapper/out/AttendanceOutMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.iocoder.yudao.module.attendance.dal.mysql.out.AttendanceOutMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>