From fb6bc5f53c6686b473f2efb555d238e2859fcc77 Mon Sep 17 00:00:00 2001
From: Joshi <3040996759@qq.com>
Date: Mon, 5 Jan 2026 15:36:22 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0hrm=E6=A8=A1=E5=9D=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
fad-hrm/pom.xml | 54 +++
.../com/ruoyi/hrm/config/StampProperties.java | 40 ++
.../controller/HrmAttendCalcController.java | 64 +++
.../controller/HrmCertificateController.java | 62 +++
.../hrm/controller/HrmContractController.java | 61 +++
.../HrmEmpOrgPositionController.java | 61 +++
.../hrm/controller/HrmEmployeeController.java | 75 ++++
.../controller/HrmFlowActionController.java | 36 ++
.../hrm/controller/HrmFlowCcController.java | 71 ++++
.../controller/HrmFlowFormDataController.java | 36 ++
.../controller/HrmFlowInstanceController.java | 76 ++++
.../hrm/controller/HrmFlowNodeController.java | 61 +++
.../hrm/controller/HrmFlowTaskController.java | 115 ++++++
.../controller/HrmFlowTemplateController.java | 61 +++
.../HrmHeadcountPlanController.java | 61 +++
.../controller/HrmLeaveBalanceController.java | 61 +++
.../hrm/controller/HrmLeaveReqController.java | 61 +++
.../hrm/controller/HrmPayPlanController.java | 64 +++
.../hrm/controller/HrmPayRunController.java | 64 +++
.../hrm/controller/HrmPayslipController.java | 64 +++
.../hrm/controller/HrmPunchController.java | 61 +++
.../controller/HrmReimburseReqController.java | 65 +++
.../hrm/controller/HrmScheduleController.java | 61 +++
.../hrm/controller/HrmSealReqController.java | 97 +++++
.../hrm/controller/HrmShiftController.java | 61 +++
.../controller/HrmStatSnapshotController.java | 64 +++
.../controller/HrmTravelReqController.java | 64 +++
.../com/ruoyi/hrm/domain/HrmAttendCalc.java | 33 ++
.../com/ruoyi/hrm/domain/HrmCertificate.java | 34 ++
.../com/ruoyi/hrm/domain/HrmContract.java | 34 ++
.../ruoyi/hrm/domain/HrmEmpOrgPosition.java | 35 ++
.../com/ruoyi/hrm/domain/HrmEmployee.java | 44 ++
.../com/ruoyi/hrm/domain/HrmFlowAction.java | 29 ++
.../java/com/ruoyi/hrm/domain/HrmFlowCc.java | 46 +++
.../com/ruoyi/hrm/domain/HrmFlowInstance.java | 29 ++
.../com/ruoyi/hrm/domain/HrmFlowNode.java | 29 ++
.../com/ruoyi/hrm/domain/HrmFlowTask.java | 39 ++
.../com/ruoyi/hrm/domain/HrmFlowTemplate.java | 28 ++
.../com/ruoyi/hrm/domain/HrmFormData.java | 26 ++
.../ruoyi/hrm/domain/HrmHeadcountPlan.java | 33 ++
.../com/ruoyi/hrm/domain/HrmLeaveBalance.java | 28 ++
.../com/ruoyi/hrm/domain/HrmLeaveReq.java | 33 ++
.../java/com/ruoyi/hrm/domain/HrmPayPlan.java | 28 ++
.../java/com/ruoyi/hrm/domain/HrmPayRun.java | 26 ++
.../java/com/ruoyi/hrm/domain/HrmPayslip.java | 30 ++
.../java/com/ruoyi/hrm/domain/HrmPunch.java | 29 ++
.../com/ruoyi/hrm/domain/HrmReimburseReq.java | 39 ++
.../com/ruoyi/hrm/domain/HrmSchedule.java | 27 ++
.../java/com/ruoyi/hrm/domain/HrmSealReq.java | 56 +++
.../java/com/ruoyi/hrm/domain/HrmShift.java | 30 ++
.../com/ruoyi/hrm/domain/HrmStatSnapshot.java | 29 ++
.../com/ruoyi/hrm/domain/HrmTravelReq.java | 36 ++
.../ruoyi/hrm/domain/bo/HrmAttendCalcBo.java | 30 ++
.../ruoyi/hrm/domain/bo/HrmCertificateBo.java | 38 ++
.../ruoyi/hrm/domain/bo/HrmContractBo.java | 38 ++
.../hrm/domain/bo/HrmEmpOrgPositionBo.java | 34 ++
.../ruoyi/hrm/domain/bo/HrmEmployeeBo.java | 49 +++
.../ruoyi/hrm/domain/bo/HrmFlowActionBo.java | 27 ++
.../com/ruoyi/hrm/domain/bo/HrmFlowCcBo.java | 33 ++
.../hrm/domain/bo/HrmFlowInstanceBo.java | 40 ++
.../ruoyi/hrm/domain/bo/HrmFlowNodeBo.java | 33 ++
.../ruoyi/hrm/domain/bo/HrmFlowStartBo.java | 25 ++
.../hrm/domain/bo/HrmFlowTaskApproveBo.java | 17 +
.../ruoyi/hrm/domain/bo/HrmFlowTaskBo.java | 30 ++
.../hrm/domain/bo/HrmFlowTemplateBo.java | 29 ++
.../ruoyi/hrm/domain/bo/HrmFormDataBo.java | 26 ++
.../hrm/domain/bo/HrmHeadcountPlanBo.java | 33 ++
.../hrm/domain/bo/HrmLeaveBalanceBo.java | 28 ++
.../ruoyi/hrm/domain/bo/HrmLeaveReqBo.java | 52 +++
.../com/ruoyi/hrm/domain/bo/HrmPayPlanBo.java | 23 ++
.../com/ruoyi/hrm/domain/bo/HrmPayRunBo.java | 22 +
.../com/ruoyi/hrm/domain/bo/HrmPayslipBo.java | 27 ++
.../com/ruoyi/hrm/domain/bo/HrmPunchBo.java | 26 ++
.../hrm/domain/bo/HrmReimburseReqBo.java | 39 ++
.../ruoyi/hrm/domain/bo/HrmScheduleBo.java | 26 ++
.../com/ruoyi/hrm/domain/bo/HrmSealReqBo.java | 62 +++
.../ruoyi/hrm/domain/bo/HrmSealStampBo.java | 98 +++++
.../com/ruoyi/hrm/domain/bo/HrmShiftBo.java | 27 ++
.../hrm/domain/bo/HrmStatSnapshotBo.java | 29 ++
.../ruoyi/hrm/domain/bo/HrmTravelReqBo.java | 43 ++
.../ruoyi/hrm/domain/vo/HrmAttendCalcVo.java | 39 ++
.../ruoyi/hrm/domain/vo/HrmCertificateVo.java | 40 ++
.../ruoyi/hrm/domain/vo/HrmContractVo.java | 40 ++
.../hrm/domain/vo/HrmEmpOrgPositionVo.java | 47 +++
.../ruoyi/hrm/domain/vo/HrmEmployeeVo.java | 65 +++
.../ruoyi/hrm/domain/vo/HrmFlowActionVo.java | 29 ++
.../com/ruoyi/hrm/domain/vo/HrmFlowCcVo.java | 27 ++
.../hrm/domain/vo/HrmFlowInstanceVo.java | 42 ++
.../ruoyi/hrm/domain/vo/HrmFlowNodeVo.java | 33 ++
.../ruoyi/hrm/domain/vo/HrmFlowTaskVo.java | 44 ++
.../hrm/domain/vo/HrmFlowTemplateVo.java | 30 ++
.../ruoyi/hrm/domain/vo/HrmFormDataVo.java | 27 ++
.../hrm/domain/vo/HrmHeadcountPlanVo.java | 38 ++
.../hrm/domain/vo/HrmLeaveBalanceVo.java | 30 ++
.../ruoyi/hrm/domain/vo/HrmLeaveReqVo.java | 40 ++
.../com/ruoyi/hrm/domain/vo/HrmPayPlanVo.java | 30 ++
.../com/ruoyi/hrm/domain/vo/HrmPayRunVo.java | 27 ++
.../com/ruoyi/hrm/domain/vo/HrmPayslipVo.java | 34 ++
.../com/ruoyi/hrm/domain/vo/HrmPunchVo.java | 31 ++
.../hrm/domain/vo/HrmReimburseReqVo.java | 46 +++
.../ruoyi/hrm/domain/vo/HrmScheduleVo.java | 27 ++
.../com/ruoyi/hrm/domain/vo/HrmSealReqVo.java | 50 +++
.../com/ruoyi/hrm/domain/vo/HrmShiftVo.java | 34 ++
.../hrm/domain/vo/HrmStatSnapshotVo.java | 30 ++
.../ruoyi/hrm/domain/vo/HrmTravelReqVo.java | 47 +++
.../ruoyi/hrm/mapper/HrmAttendCalcMapper.java | 8 +
.../hrm/mapper/HrmCertificateMapper.java | 8 +
.../ruoyi/hrm/mapper/HrmContractMapper.java | 8 +
.../hrm/mapper/HrmEmpOrgPositionMapper.java | 8 +
.../ruoyi/hrm/mapper/HrmEmployeeMapper.java | 8 +
.../ruoyi/hrm/mapper/HrmFlowActionMapper.java | 8 +
.../com/ruoyi/hrm/mapper/HrmFlowCcMapper.java | 9 +
.../hrm/mapper/HrmFlowInstanceMapper.java | 18 +
.../ruoyi/hrm/mapper/HrmFlowNodeMapper.java | 8 +
.../ruoyi/hrm/mapper/HrmFlowTaskMapper.java | 8 +
.../hrm/mapper/HrmFlowTemplateMapper.java | 8 +
.../ruoyi/hrm/mapper/HrmFormDataMapper.java | 8 +
.../hrm/mapper/HrmHeadcountPlanMapper.java | 8 +
.../hrm/mapper/HrmLeaveBalanceMapper.java | 8 +
.../ruoyi/hrm/mapper/HrmLeaveReqMapper.java | 8 +
.../ruoyi/hrm/mapper/HrmPayPlanMapper.java | 8 +
.../com/ruoyi/hrm/mapper/HrmPayRunMapper.java | 8 +
.../ruoyi/hrm/mapper/HrmPayslipMapper.java | 8 +
.../com/ruoyi/hrm/mapper/HrmPunchMapper.java | 8 +
.../hrm/mapper/HrmReimburseReqMapper.java | 9 +
.../ruoyi/hrm/mapper/HrmScheduleMapper.java | 8 +
.../ruoyi/hrm/mapper/HrmSealReqMapper.java | 11 +
.../com/ruoyi/hrm/mapper/HrmShiftMapper.java | 8 +
.../hrm/mapper/HrmStatSnapshotMapper.java | 8 +
.../ruoyi/hrm/mapper/HrmTravelReqMapper.java | 8 +
.../hrm/service/IHrmAttendCalcService.java | 24 ++
.../hrm/service/IHrmCertificateService.java | 24 ++
.../hrm/service/IHrmContractService.java | 24 ++
.../service/IHrmEmpOrgPositionService.java | 23 ++
.../hrm/service/IHrmEmployeeService.java | 23 ++
.../hrm/service/IHrmFlowActionService.java | 24 ++
.../ruoyi/hrm/service/IHrmFlowCcService.java | 31 ++
.../hrm/service/IHrmFlowInstanceService.java | 34 ++
.../hrm/service/IHrmFlowNodeService.java | 24 ++
.../hrm/service/IHrmFlowTaskService.java | 49 +++
.../hrm/service/IHrmFlowTemplateService.java | 24 ++
.../hrm/service/IHrmFormDataService.java | 23 ++
.../hrm/service/IHrmHeadcountPlanService.java | 23 ++
.../hrm/service/IHrmLeaveBalanceService.java | 24 ++
.../hrm/service/IHrmLeaveReqService.java | 24 ++
.../ruoyi/hrm/service/IHrmPayPlanService.java | 24 ++
.../ruoyi/hrm/service/IHrmPayRunService.java | 24 ++
.../ruoyi/hrm/service/IHrmPayslipService.java | 24 ++
.../ruoyi/hrm/service/IHrmPunchService.java | 24 ++
.../hrm/service/IHrmReimburseReqService.java | 25 ++
.../hrm/service/IHrmScheduleService.java | 24 ++
.../ruoyi/hrm/service/IHrmSealReqService.java | 40 ++
.../ruoyi/hrm/service/IHrmShiftService.java | 24 ++
.../hrm/service/IHrmStatSnapshotService.java | 24 ++
.../hrm/service/IHrmTravelReqService.java | 24 ++
.../hrm/service/impl/BizStatusSyncHelper.java | 102 +++++
.../hrm/service/impl/FlowAssigneeHelper.java | 132 ++++++
.../impl/HrmAttendCalcServiceImpl.java | 73 ++++
.../impl/HrmCertificateServiceImpl.java | 73 ++++
.../service/impl/HrmContractServiceImpl.java | 73 ++++
.../impl/HrmEmpOrgPositionServiceImpl.java | 110 +++++
.../service/impl/HrmEmployeeServiceImpl.java | 76 ++++
.../impl/HrmFlowActionServiceImpl.java | 73 ++++
.../service/impl/HrmFlowCcServiceImpl.java | 163 ++++++++
.../impl/HrmFlowInstanceServiceImpl.java | 183 +++++++++
.../service/impl/HrmFlowNodeServiceImpl.java | 73 ++++
.../service/impl/HrmFlowTaskServiceImpl.java | 382 ++++++++++++++++++
.../impl/HrmFlowTemplateServiceImpl.java | 74 ++++
.../service/impl/HrmFormDataServiceImpl.java | 71 ++++
.../impl/HrmHeadcountPlanServiceImpl.java | 74 ++++
.../impl/HrmLeaveBalanceServiceImpl.java | 72 ++++
.../service/impl/HrmLeaveReqServiceImpl.java | 126 ++++++
.../service/impl/HrmPayPlanServiceImpl.java | 70 ++++
.../service/impl/HrmPayRunServiceImpl.java | 72 ++++
.../service/impl/HrmPayslipServiceImpl.java | 77 ++++
.../hrm/service/impl/HrmPunchServiceImpl.java | 72 ++++
.../impl/HrmReimburseReqServiceImpl.java | 107 +++++
.../service/impl/HrmScheduleServiceImpl.java | 72 ++++
.../service/impl/HrmSealReqServiceImpl.java | 268 ++++++++++++
.../hrm/service/impl/HrmShiftServiceImpl.java | 72 ++++
.../impl/HrmStatSnapshotServiceImpl.java | 71 ++++
.../service/impl/HrmTravelReqServiceImpl.java | 110 +++++
.../resources/mapper/HrmAttendCalcMapper.xml | 22 +
.../resources/mapper/HrmCertificateMapper.xml | 19 +
.../resources/mapper/HrmContractMapper.xml | 19 +
.../mapper/HrmEmpOrgPositionMapper.xml | 49 +++
.../resources/mapper/HrmEmployeeMapper.xml | 77 ++++
.../resources/mapper/HrmFlowActionMapper.xml | 17 +
.../mapper/HrmFlowInstanceMapper.xml | 19 +
.../resources/mapper/HrmFlowNodeMapper.xml | 19 +
.../resources/mapper/HrmFlowTaskMapper.xml | 18 +
.../mapper/HrmFlowTemplateMapper.xml | 18 +
.../resources/mapper/HrmFormDataMapper.xml | 16 +
.../mapper/HrmHeadcountPlanMapper.xml | 18 +
.../mapper/HrmLeaveBalanceMapper.xml | 17 +
.../resources/mapper/HrmLeaveReqMapper.xml | 22 +
.../resources/mapper/HrmPayPlanMapper.xml | 17 +
.../main/resources/mapper/HrmPayRunMapper.xml | 16 +
.../resources/mapper/HrmPayslipMapper.xml | 19 +
.../main/resources/mapper/HrmPunchMapper.xml | 18 +
.../resources/mapper/HrmScheduleMapper.xml | 16 +
.../resources/mapper/HrmSealReqMapper.xml | 21 +
.../main/resources/mapper/HrmShiftMapper.xml | 19 +
.../mapper/HrmStatSnapshotMapper.xml | 17 +
.../resources/mapper/HrmTravelReqMapper.xml | 26 ++
pom.xml | 7 +
ruoyi-admin/pom.xml | 5 +
.../com/ruoyi/common/annotation/Excel.java | 177 ++++++++
.../common/utils/poi/ExcelHandlerAdapter.java | 19 +
209 files changed, 8980 insertions(+)
create mode 100644 fad-hrm/pom.xml
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/config/StampProperties.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmAttendCalcController.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmCertificateController.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmContractController.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmEmpOrgPositionController.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmEmployeeController.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowActionController.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowCcController.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowFormDataController.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowInstanceController.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowNodeController.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowTaskController.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowTemplateController.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmHeadcountPlanController.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmLeaveBalanceController.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmLeaveReqController.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmPayPlanController.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmPayRunController.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmPayslipController.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmPunchController.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmReimburseReqController.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmScheduleController.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmSealReqController.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmShiftController.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmStatSnapshotController.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmTravelReqController.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmAttendCalc.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmCertificate.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmContract.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmEmpOrgPosition.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmEmployee.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmFlowAction.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmFlowCc.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmFlowInstance.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmFlowNode.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmFlowTask.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmFlowTemplate.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmFormData.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmHeadcountPlan.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmLeaveBalance.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmLeaveReq.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmPayPlan.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmPayRun.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmPayslip.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmPunch.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmReimburseReq.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmSchedule.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmSealReq.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmShift.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmStatSnapshot.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmTravelReq.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmAttendCalcBo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmCertificateBo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmContractBo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmEmpOrgPositionBo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmEmployeeBo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowActionBo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowCcBo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowInstanceBo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowNodeBo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowStartBo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowTaskApproveBo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowTaskBo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowTemplateBo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFormDataBo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmHeadcountPlanBo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmLeaveBalanceBo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmLeaveReqBo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmPayPlanBo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmPayRunBo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmPayslipBo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmPunchBo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmReimburseReqBo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmScheduleBo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmSealReqBo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmSealStampBo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmShiftBo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmStatSnapshotBo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmTravelReqBo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmAttendCalcVo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmCertificateVo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmContractVo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmEmpOrgPositionVo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmEmployeeVo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFlowActionVo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFlowCcVo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFlowInstanceVo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFlowNodeVo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFlowTaskVo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFlowTemplateVo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFormDataVo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmHeadcountPlanVo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmLeaveBalanceVo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmLeaveReqVo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmPayPlanVo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmPayRunVo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmPayslipVo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmPunchVo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmReimburseReqVo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmScheduleVo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmSealReqVo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmShiftVo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmStatSnapshotVo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmTravelReqVo.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmAttendCalcMapper.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmCertificateMapper.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmContractMapper.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmEmpOrgPositionMapper.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmEmployeeMapper.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmFlowActionMapper.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmFlowCcMapper.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmFlowInstanceMapper.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmFlowNodeMapper.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmFlowTaskMapper.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmFlowTemplateMapper.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmFormDataMapper.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmHeadcountPlanMapper.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmLeaveBalanceMapper.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmLeaveReqMapper.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmPayPlanMapper.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmPayRunMapper.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmPayslipMapper.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmPunchMapper.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmReimburseReqMapper.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmScheduleMapper.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmSealReqMapper.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmShiftMapper.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmStatSnapshotMapper.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmTravelReqMapper.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmAttendCalcService.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmCertificateService.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmContractService.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmEmpOrgPositionService.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmEmployeeService.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowActionService.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowCcService.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowInstanceService.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowNodeService.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowTaskService.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowTemplateService.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFormDataService.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmHeadcountPlanService.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmLeaveBalanceService.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmLeaveReqService.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmPayPlanService.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmPayRunService.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmPayslipService.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmPunchService.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmReimburseReqService.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmScheduleService.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmSealReqService.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmShiftService.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmStatSnapshotService.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmTravelReqService.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/BizStatusSyncHelper.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/FlowAssigneeHelper.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmAttendCalcServiceImpl.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmCertificateServiceImpl.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmContractServiceImpl.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmEmpOrgPositionServiceImpl.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmEmployeeServiceImpl.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowActionServiceImpl.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowCcServiceImpl.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowInstanceServiceImpl.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowNodeServiceImpl.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowTaskServiceImpl.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowTemplateServiceImpl.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFormDataServiceImpl.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmHeadcountPlanServiceImpl.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmLeaveBalanceServiceImpl.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmLeaveReqServiceImpl.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmPayPlanServiceImpl.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmPayRunServiceImpl.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmPayslipServiceImpl.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmPunchServiceImpl.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmReimburseReqServiceImpl.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmScheduleServiceImpl.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmSealReqServiceImpl.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmShiftServiceImpl.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmStatSnapshotServiceImpl.java
create mode 100644 fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmTravelReqServiceImpl.java
create mode 100644 fad-hrm/src/main/resources/mapper/HrmAttendCalcMapper.xml
create mode 100644 fad-hrm/src/main/resources/mapper/HrmCertificateMapper.xml
create mode 100644 fad-hrm/src/main/resources/mapper/HrmContractMapper.xml
create mode 100644 fad-hrm/src/main/resources/mapper/HrmEmpOrgPositionMapper.xml
create mode 100644 fad-hrm/src/main/resources/mapper/HrmEmployeeMapper.xml
create mode 100644 fad-hrm/src/main/resources/mapper/HrmFlowActionMapper.xml
create mode 100644 fad-hrm/src/main/resources/mapper/HrmFlowInstanceMapper.xml
create mode 100644 fad-hrm/src/main/resources/mapper/HrmFlowNodeMapper.xml
create mode 100644 fad-hrm/src/main/resources/mapper/HrmFlowTaskMapper.xml
create mode 100644 fad-hrm/src/main/resources/mapper/HrmFlowTemplateMapper.xml
create mode 100644 fad-hrm/src/main/resources/mapper/HrmFormDataMapper.xml
create mode 100644 fad-hrm/src/main/resources/mapper/HrmHeadcountPlanMapper.xml
create mode 100644 fad-hrm/src/main/resources/mapper/HrmLeaveBalanceMapper.xml
create mode 100644 fad-hrm/src/main/resources/mapper/HrmLeaveReqMapper.xml
create mode 100644 fad-hrm/src/main/resources/mapper/HrmPayPlanMapper.xml
create mode 100644 fad-hrm/src/main/resources/mapper/HrmPayRunMapper.xml
create mode 100644 fad-hrm/src/main/resources/mapper/HrmPayslipMapper.xml
create mode 100644 fad-hrm/src/main/resources/mapper/HrmPunchMapper.xml
create mode 100644 fad-hrm/src/main/resources/mapper/HrmScheduleMapper.xml
create mode 100644 fad-hrm/src/main/resources/mapper/HrmSealReqMapper.xml
create mode 100644 fad-hrm/src/main/resources/mapper/HrmShiftMapper.xml
create mode 100644 fad-hrm/src/main/resources/mapper/HrmStatSnapshotMapper.xml
create mode 100644 fad-hrm/src/main/resources/mapper/HrmTravelReqMapper.xml
create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java
create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelHandlerAdapter.java
diff --git a/fad-hrm/pom.xml b/fad-hrm/pom.xml
new file mode 100644
index 0000000..8ac94b0
--- /dev/null
+++ b/fad-hrm/pom.xml
@@ -0,0 +1,54 @@
+
+ 4.0.0
+
+ com.ruoyi
+ ruoyi-flowable-plus
+ 0.8.3
+
+ fad-hrm
+ Archetype - ruoyi-hrm
+ http://maven.apache.org
+
+
+ com.ruoyi
+ ruoyi-common
+
+
+ org.projectlombok
+ lombok
+ provided
+
+
+ com.baomidou
+ mybatis-plus-annotation
+ 3.5.9
+ compile
+
+
+ com.alibaba
+ fastjson
+ 1.2.83
+
+
+
+ com.alibaba.fastjson2
+ fastjson2
+ 2.0.35
+
+
+ com.ruoyi
+ ruoyi-system
+
+
+ com.ruoyi
+ ruoyi-oss
+
+
+
+ org.apache.pdfbox
+ pdfbox
+ 2.0.29
+
+
+
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/config/StampProperties.java b/fad-hrm/src/main/java/com/ruoyi/hrm/config/StampProperties.java
new file mode 100644
index 0000000..01d0f15
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/config/StampProperties.java
@@ -0,0 +1,40 @@
+package com.ruoyi.hrm.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * Stamp service configuration.
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "stamp")
+public class StampProperties {
+
+ private PythonService pythonService = new PythonService();
+ private JavaService javaService = new JavaService();
+
+ @Data
+ public static class PythonService {
+ /**
+ * Whether to call external python stamp service.
+ */
+ private boolean enabled = false;
+ private String baseUrl;
+ private String apiKey;
+ private Integer timeoutMs = 5000;
+ }
+
+ @Data
+ public static class JavaService {
+ /**
+ * Enable in-Java stamping.
+ */
+ private boolean enabled = true;
+ /**
+ * Default DPI for px → user-space conversion if needed.
+ */
+ private Integer dpi = 72;
+ }
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmAttendCalcController.java b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmAttendCalcController.java
new file mode 100644
index 0000000..7ced595
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmAttendCalcController.java
@@ -0,0 +1,64 @@
+package com.ruoyi.hrm.controller;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.hrm.domain.bo.HrmAttendCalcBo;
+import com.ruoyi.hrm.domain.vo.HrmAttendCalcVo;
+import com.ruoyi.hrm.service.IHrmAttendCalcService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 考勤结果(按用户要求本接口不做鉴权)
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/hrm/attend")
+public class HrmAttendCalcController extends BaseController {
+
+ private final IHrmAttendCalcService service;
+
+ @GetMapping("/list")
+ public TableDataInfo list(HrmAttendCalcBo bo, PageQuery pageQuery) {
+ return service.queryPageList(bo, pageQuery);
+ }
+
+ @GetMapping("/{calcId}")
+ public R getInfo(@PathVariable @NotNull Long calcId) {
+ return R.ok(service.queryById(calcId));
+ }
+
+ @Log(title = "考勤结果", businessType = BusinessType.INSERT)
+ @PostMapping
+ public R add(@Validated @RequestBody HrmAttendCalcBo bo) {
+ return toAjax(service.insertByBo(bo));
+ }
+
+ @Log(title = "考勤结果", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R edit(@Validated @RequestBody HrmAttendCalcBo bo) {
+ return toAjax(service.updateByBo(bo));
+ }
+
+ @Log(title = "考勤结果", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{calcIds}")
+ public R remove(@PathVariable @NotEmpty Long[] calcIds) {
+ return toAjax(service.deleteWithValidByIds(Arrays.asList(calcIds), true));
+ }
+
+ @GetMapping("/all")
+ public R> all(HrmAttendCalcBo bo) {
+ return R.ok(service.queryList(bo));
+ }
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmCertificateController.java b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmCertificateController.java
new file mode 100644
index 0000000..31e58fc
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmCertificateController.java
@@ -0,0 +1,62 @@
+package com.ruoyi.hrm.controller;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.hrm.domain.bo.HrmCertificateBo;
+import com.ruoyi.hrm.domain.vo.HrmCertificateVo;
+import com.ruoyi.hrm.service.IHrmCertificateService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Arrays;
+import java.util.List;
+
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/hrm/certificate")
+public class HrmCertificateController extends BaseController {
+
+ private final IHrmCertificateService service;
+
+
+ @GetMapping("/list")
+ public TableDataInfo list(HrmCertificateBo bo, PageQuery pageQuery) {
+ return service.queryPageList(bo, pageQuery);
+ }
+
+ @GetMapping("/{certId}")
+ public R getInfo(@PathVariable @NotNull Long certId) {
+ return R.ok(service.queryById(certId));
+ }
+
+ @Log(title = "证书", businessType = BusinessType.INSERT)
+ @PostMapping
+ public R add(@Validated @RequestBody HrmCertificateBo bo) {
+ return toAjax(service.insertByBo(bo));
+ }
+
+ @Log(title = "证书", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R edit(@Validated @RequestBody HrmCertificateBo bo) {
+ return toAjax(service.updateByBo(bo));
+ }
+
+ @Log(title = "证书", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{certIds}")
+ public R remove(@PathVariable @NotEmpty Long[] certIds) {
+ return toAjax(service.deleteWithValidByIds(Arrays.asList(certIds), true));
+ }
+
+ @GetMapping("/all")
+ public R> all(HrmCertificateBo bo) {
+ return R.ok(service.queryList(bo));
+ }
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmContractController.java b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmContractController.java
new file mode 100644
index 0000000..dcec17f
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmContractController.java
@@ -0,0 +1,61 @@
+package com.ruoyi.hrm.controller;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.hrm.domain.bo.HrmContractBo;
+import com.ruoyi.hrm.domain.vo.HrmContractVo;
+import com.ruoyi.hrm.service.IHrmContractService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Arrays;
+import java.util.List;
+
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/hrm/contract")
+public class HrmContractController extends BaseController {
+
+ private final IHrmContractService service;
+
+ @GetMapping("/list")
+ public TableDataInfo list(HrmContractBo bo, PageQuery pageQuery) {
+ return service.queryPageList(bo, pageQuery);
+ }
+
+ @GetMapping("/{contractId}")
+ public R getInfo(@PathVariable @NotNull Long contractId) {
+ return R.ok(service.queryById(contractId));
+ }
+
+ @Log(title = "劳动合同", businessType = BusinessType.INSERT)
+ @PostMapping
+ public R add(@Validated @RequestBody HrmContractBo bo) {
+ return toAjax(service.insertByBo(bo));
+ }
+
+ @Log(title = "劳动合同", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R edit(@Validated @RequestBody HrmContractBo bo) {
+ return toAjax(service.updateByBo(bo));
+ }
+
+ @Log(title = "劳动合同", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{contractIds}")
+ public R remove(@PathVariable @NotEmpty Long[] contractIds) {
+ return toAjax(service.deleteWithValidByIds(Arrays.asList(contractIds), true));
+ }
+
+ @GetMapping("/all")
+ public R> all(HrmContractBo bo) {
+ return R.ok(service.queryList(bo));
+ }
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmEmpOrgPositionController.java b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmEmpOrgPositionController.java
new file mode 100644
index 0000000..3d45984
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmEmpOrgPositionController.java
@@ -0,0 +1,61 @@
+package com.ruoyi.hrm.controller;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.hrm.domain.bo.HrmEmpOrgPositionBo;
+import com.ruoyi.hrm.domain.vo.HrmEmpOrgPositionVo;
+import com.ruoyi.hrm.service.IHrmEmpOrgPositionService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Arrays;
+import java.util.List;
+
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/hrm/empOrg")
+public class HrmEmpOrgPositionController extends BaseController {
+
+ private final IHrmEmpOrgPositionService service;
+
+ @GetMapping("/list")
+ public TableDataInfo list(HrmEmpOrgPositionBo bo, PageQuery pageQuery) {
+ return service.queryPageList(bo, pageQuery);
+ }
+
+ @GetMapping("/{relId}")
+ public R getInfo(@PathVariable @NotNull Long relId) {
+ return R.ok(service.queryById(relId));
+ }
+
+ @Log(title = "员工组织岗位关系", businessType = BusinessType.INSERT)
+ @PostMapping
+ public R add(@Validated @RequestBody HrmEmpOrgPositionBo bo) {
+ return toAjax(service.insertByBo(bo));
+ }
+
+ @Log(title = "员工组织岗位关系", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R edit(@Validated @RequestBody HrmEmpOrgPositionBo bo) {
+ return toAjax(service.updateByBo(bo));
+ }
+
+ @Log(title = "员工组织岗位关系", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{relIds}")
+ public R remove(@PathVariable @NotEmpty Long[] relIds) {
+ return toAjax(service.deleteWithValidByIds(Arrays.asList(relIds), true));
+ }
+
+ @GetMapping("/all")
+ public R> all(HrmEmpOrgPositionBo bo) {
+ return R.ok(service.queryList(bo));
+ }
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmEmployeeController.java b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmEmployeeController.java
new file mode 100644
index 0000000..d603df7
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmEmployeeController.java
@@ -0,0 +1,75 @@
+package com.ruoyi.hrm.controller;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.hrm.domain.bo.HrmEmployeeBo;
+import com.ruoyi.hrm.domain.vo.HrmEmployeeVo;
+import com.ruoyi.hrm.service.IHrmEmployeeService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Arrays;
+import java.util.List;
+
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/hrm/employee")
+public class HrmEmployeeController extends BaseController {
+
+ private final IHrmEmployeeService service;
+
+ @GetMapping("/list")
+ public TableDataInfo list(HrmEmployeeBo bo, PageQuery pageQuery) {
+ return service.queryPageList(bo, pageQuery);
+ }
+
+ @GetMapping("/{empId}")
+ public R getInfo(@PathVariable @NotNull Long empId) {
+ return R.ok(service.queryById(empId));
+ }
+
+ @Log(title = "员工管理", businessType = BusinessType.INSERT)
+ @PostMapping
+ public R add(@Validated @RequestBody HrmEmployeeBo bo) {
+ return toAjax(service.insertByBo(bo));
+ }
+
+ @Log(title = "员工管理", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R edit(@Validated @RequestBody HrmEmployeeBo bo) {
+ return toAjax(service.updateByBo(bo));
+ }
+
+ @Log(title = "员工管理", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{empIds}")
+ public R remove(@PathVariable @NotEmpty Long[] empIds) {
+ return toAjax(service.deleteWithValidByIds(Arrays.asList(empIds), true));
+ }
+
+ @GetMapping("/all")
+ public R> all(HrmEmployeeBo bo) {
+ return R.ok(service.queryList(bo));
+ }
+
+ /**
+ * 根据用户ID获取员工信息
+ */
+ @GetMapping("/byUserId/{userId}")
+ public R getByUserId(@PathVariable @NotNull Long userId) {
+ HrmEmployeeBo bo = new HrmEmployeeBo();
+ bo.setUserId(userId);
+ List list = service.queryList(bo);
+ if (list != null && !list.isEmpty()) {
+ return R.ok(list.get(0));
+ }
+ return R.fail("未找到该用户对应的员工信息");
+ }
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowActionController.java b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowActionController.java
new file mode 100644
index 0000000..adced27
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowActionController.java
@@ -0,0 +1,36 @@
+package com.ruoyi.hrm.controller;
+
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.hrm.domain.bo.HrmFlowActionBo;
+import com.ruoyi.hrm.domain.vo.HrmFlowActionVo;
+import com.ruoyi.hrm.service.IHrmFlowActionService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.constraints.NotNull;
+
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/hrm/flow/action")
+public class HrmFlowActionController extends BaseController {
+
+ private final IHrmFlowActionService service;
+
+ @GetMapping("/list")
+ public TableDataInfo list(HrmFlowActionBo bo, PageQuery pageQuery) {
+ return service.queryPageList(bo, pageQuery);
+ }
+
+ @GetMapping("/{actionId}")
+ public R getInfo(@PathVariable @NotNull Long actionId) {
+ return R.ok(service.queryById(actionId));
+ }
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowCcController.java b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowCcController.java
new file mode 100644
index 0000000..2d5b782
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowCcController.java
@@ -0,0 +1,71 @@
+package com.ruoyi.hrm.controller;
+
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.helper.LoginHelper;
+import com.ruoyi.hrm.domain.bo.HrmFlowCcBo;
+import com.ruoyi.hrm.domain.vo.HrmFlowCcVo;
+import com.ruoyi.hrm.service.IHrmFlowCcService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotNull;
+
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/hrm/flow/cc")
+public class HrmFlowCcController extends BaseController {
+
+ private final IHrmFlowCcService service;
+
+ /**
+ * 抄送我的
+ */
+ @GetMapping("/my")
+ public TableDataInfo my(@RequestParam(required = false) Long ccUserId,@RequestParam(required = false) Integer readFlag, PageQuery pageQuery) {
+ Long uid = ccUserId;
+ if (uid == null) {
+ try {
+ uid = LoginHelper.getUserId();
+ } catch (Exception e) {
+ uid = null;
+ }
+ }
+ HrmFlowCcBo bo = new HrmFlowCcBo();
+ bo.setCcUserId(uid);
+ bo.setReadFlag(readFlag);
+ return service.queryPageList(bo, pageQuery);
+ }
+
+ @GetMapping("/list")
+ public TableDataInfo list(HrmFlowCcBo bo, PageQuery pageQuery) {
+ return service.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 手动抄送(支持批量)
+ */
+ @PostMapping
+ public R add(@RequestBody HrmFlowCcBo bo) {
+ return toAjax(service.insertBatch(bo));
+ }
+
+ /**
+ * 标记抄送已读
+ */
+ @PostMapping("/{ccId}/read")
+ public R read(@PathVariable Long ccId) {
+ Long userId = LoginHelper.getUserId();
+ return toAjax(service.markRead(ccId, userId));
+ }
+
+ @GetMapping("/ping")
+ public R ping(@RequestParam @NotNull String x) {
+ return R.ok(x);
+ }
+}
+
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowFormDataController.java b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowFormDataController.java
new file mode 100644
index 0000000..e29b89e
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowFormDataController.java
@@ -0,0 +1,36 @@
+package com.ruoyi.hrm.controller;
+
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.hrm.domain.bo.HrmFormDataBo;
+import com.ruoyi.hrm.domain.vo.HrmFormDataVo;
+import com.ruoyi.hrm.service.IHrmFormDataService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.constraints.NotNull;
+
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/hrm/flow/form")
+public class HrmFlowFormDataController extends BaseController {
+
+ private final IHrmFormDataService service;
+
+ @GetMapping("/list")
+ public TableDataInfo list(HrmFormDataBo bo, PageQuery pageQuery) {
+ return service.queryPageList(bo, pageQuery);
+ }
+
+ @GetMapping("/{formId}")
+ public R getInfo(@PathVariable @NotNull Long formId) {
+ return R.ok(service.queryById(formId));
+ }
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowInstanceController.java b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowInstanceController.java
new file mode 100644
index 0000000..11b2e70
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowInstanceController.java
@@ -0,0 +1,76 @@
+package com.ruoyi.hrm.controller;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.hrm.domain.bo.HrmFlowInstanceBo;
+import com.ruoyi.hrm.domain.bo.HrmFlowStartBo;
+import com.ruoyi.hrm.domain.vo.HrmFlowInstanceVo;
+import com.ruoyi.hrm.service.IHrmFlowInstanceService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Arrays;
+import java.util.List;
+
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/hrm/flow/instance")
+public class HrmFlowInstanceController extends BaseController {
+
+ private final IHrmFlowInstanceService service;
+
+ @GetMapping("/list")
+ public TableDataInfo list(HrmFlowInstanceBo bo, PageQuery pageQuery) {
+ return service.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 查询我的申请列表
+ */
+ @GetMapping("/myList")
+ public TableDataInfo myList(HrmFlowInstanceBo bo, PageQuery pageQuery) {
+ return service.queryMyInstancePageList(bo, pageQuery);
+ }
+
+ @GetMapping("/{instId}")
+ public R getInfo(@PathVariable @NotNull Long instId) {
+ return R.ok(service.queryById(instId));
+ }
+
+ @Log(title = "流程实例", businessType = BusinessType.INSERT)
+ @PostMapping
+ public R add(@Validated @RequestBody HrmFlowInstanceBo bo) {
+ return toAjax(service.insertByBo(bo));
+ }
+
+ @Log(title = "流程实例", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R edit(@Validated @RequestBody HrmFlowInstanceBo bo) {
+ return toAjax(service.updateByBo(bo));
+ }
+
+ @Log(title = "流程实例", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{instIds}")
+ public R remove(@PathVariable @NotEmpty Long[] instIds) {
+ return toAjax(service.deleteWithValidByIds(Arrays.asList(instIds), true));
+ }
+
+ @Log(title = "流程实例启动", businessType = BusinessType.INSERT)
+ @PostMapping("/start")
+ public R start(@Validated @RequestBody HrmFlowStartBo bo) {
+ return R.ok(service.startInstance(bo));
+ }
+
+ @GetMapping("/all")
+ public R> all(HrmFlowInstanceBo bo) {
+ return R.ok(service.queryList(bo));
+ }
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowNodeController.java b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowNodeController.java
new file mode 100644
index 0000000..aa3add9
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowNodeController.java
@@ -0,0 +1,61 @@
+package com.ruoyi.hrm.controller;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.hrm.domain.bo.HrmFlowNodeBo;
+import com.ruoyi.hrm.domain.vo.HrmFlowNodeVo;
+import com.ruoyi.hrm.service.IHrmFlowNodeService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Arrays;
+import java.util.List;
+
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/hrm/flow/node")
+public class HrmFlowNodeController extends BaseController {
+
+ private final IHrmFlowNodeService service;
+
+ @GetMapping("/list")
+ public TableDataInfo list(HrmFlowNodeBo bo, PageQuery pageQuery) {
+ return service.queryPageList(bo, pageQuery);
+ }
+
+ @GetMapping("/{nodeId}")
+ public R getInfo(@PathVariable @NotNull Long nodeId) {
+ return R.ok(service.queryById(nodeId));
+ }
+
+ @Log(title = "流程节点", businessType = BusinessType.INSERT)
+ @PostMapping
+ public R add(@Validated @RequestBody HrmFlowNodeBo bo) {
+ return toAjax(service.insertByBo(bo));
+ }
+
+ @Log(title = "流程节点", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R edit(@Validated @RequestBody HrmFlowNodeBo bo) {
+ return toAjax(service.updateByBo(bo));
+ }
+
+ @Log(title = "流程节点", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{nodeIds}")
+ public R remove(@PathVariable @NotEmpty Long[] nodeIds) {
+ return toAjax(service.deleteWithValidByIds(Arrays.asList(nodeIds), true));
+ }
+
+ @GetMapping("/all")
+ public R> all(HrmFlowNodeBo bo) {
+ return R.ok(service.queryList(bo));
+ }
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowTaskController.java b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowTaskController.java
new file mode 100644
index 0000000..b7aaf50
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowTaskController.java
@@ -0,0 +1,115 @@
+package com.ruoyi.hrm.controller;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.hrm.domain.bo.HrmFlowTaskBo;
+import com.ruoyi.hrm.domain.bo.HrmFlowTaskApproveBo;
+import com.ruoyi.hrm.domain.bo.HrmSealStampBo;
+import com.ruoyi.hrm.domain.vo.HrmFlowTaskVo;
+import com.ruoyi.hrm.service.IHrmFlowTaskService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Arrays;
+import java.util.List;
+
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/hrm/flow/task")
+public class HrmFlowTaskController extends BaseController {
+
+ private final IHrmFlowTaskService service;
+
+ @GetMapping("/list")
+ public TableDataInfo list(HrmFlowTaskBo bo, PageQuery pageQuery) {
+ return service.queryPageList(bo, pageQuery);
+ }
+
+ @GetMapping("/todo")
+ public R> todo(@RequestParam(required = false) Long assigneeUserId) {
+
+ HrmFlowTaskBo bo = new HrmFlowTaskBo();
+ bo.setAssigneeUserId(assigneeUserId);
+ bo.setStatus("pending");
+ return R.ok(service.queryList(bo));
+
+ }
+
+ /**
+ * 详情页使用:按 bizType + bizId 查询当前用户的待办任务(pending)
+ */
+ @GetMapping("/todoByBiz")
+ public R todoByBiz(@RequestParam @NotNull String bizType,
+ @RequestParam @NotNull Long bizId,
+ @RequestParam(required = false) Long assigneeUserId) {
+
+ return R.ok(service.queryTodoByBiz(bizType, bizId, assigneeUserId));
+
+ }
+
+ @GetMapping("/{taskId}")
+ public R getInfo(@PathVariable @NotNull Long taskId) {
+ return R.ok(service.queryById(taskId));
+ }
+
+ @Log(title = "流程任务", businessType = BusinessType.INSERT)
+ @PostMapping
+ public R add(@Validated @RequestBody HrmFlowTaskBo bo) {
+ return toAjax(service.insertByBo(bo));
+ }
+
+ @Log(title = "流程任务", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R edit(@Validated @RequestBody HrmFlowTaskBo bo) {
+ return toAjax(service.updateByBo(bo));
+ }
+
+ @Log(title = "流程任务", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{taskIds}")
+ public R remove(@PathVariable @NotEmpty Long[] taskIds) {
+ return toAjax(service.deleteWithValidByIds(Arrays.asList(taskIds), true));
+ }
+
+ @Log(title = "流程任务审批通过", businessType = BusinessType.UPDATE)
+ @PostMapping("/{taskId}/approve")
+ public R approve(@PathVariable @NotNull Long taskId,
+ @RequestParam(required = false) Long actionUserId,
+ @RequestBody(required = false) HrmFlowTaskApproveBo approveBo) {
+ String remark = approveBo != null ? approveBo.getRemark() : null;
+ HrmSealStampBo stampBo = approveBo != null ? approveBo.getStampBo() : null;
+ return toAjax(service.approve(taskId, actionUserId, remark, stampBo));
+ }
+
+ @Log(title = "流程任务审批驳回", businessType = BusinessType.UPDATE)
+ @PostMapping("/{taskId}/reject")
+ public R reject(@PathVariable @NotNull Long taskId,
+ @RequestParam(required = false) Long actionUserId,
+ @RequestParam(required = false) String remark) {
+ return toAjax(service.reject(taskId, actionUserId, remark));
+ }
+
+ @Log(title = "流程任务撤回", businessType = BusinessType.UPDATE)
+ @PostMapping("/{taskId}/withdraw")
+ public R withdraw(@PathVariable @NotNull Long taskId,
+ @RequestParam(required = false) Long actionUserId,
+ @RequestParam(required = false) String remark) {
+ return toAjax(service.withdraw(taskId, actionUserId, remark));
+ }
+
+ @Log(title = "流程任务转发", businessType = BusinessType.UPDATE)
+ @PostMapping("/{taskId}/transfer")
+ public R transfer(@PathVariable @NotNull Long taskId,
+ @RequestParam @NotNull Long newAssigneeUserId,
+ @RequestParam(required = false) Long actionUserId,
+ @RequestParam(required = false) String remark) {
+ return toAjax(service.transfer(taskId, newAssigneeUserId, actionUserId, remark));
+ }
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowTemplateController.java b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowTemplateController.java
new file mode 100644
index 0000000..0ae5110
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowTemplateController.java
@@ -0,0 +1,61 @@
+package com.ruoyi.hrm.controller;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.hrm.domain.bo.HrmFlowTemplateBo;
+import com.ruoyi.hrm.domain.vo.HrmFlowTemplateVo;
+import com.ruoyi.hrm.service.IHrmFlowTemplateService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Arrays;
+import java.util.List;
+
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/hrm/flow/template")
+public class HrmFlowTemplateController extends BaseController {
+
+ private final IHrmFlowTemplateService service;
+
+ @GetMapping("/list")
+ public TableDataInfo list(HrmFlowTemplateBo bo, PageQuery pageQuery) {
+ return service.queryPageList(bo, pageQuery);
+ }
+
+ @GetMapping("/{tplId}")
+ public R getInfo(@PathVariable @NotNull Long tplId) {
+ return R.ok(service.queryById(tplId));
+ }
+
+ @Log(title = "流程模板", businessType = BusinessType.INSERT)
+ @PostMapping
+ public R add(@Validated @RequestBody HrmFlowTemplateBo bo) {
+ return toAjax(service.insertByBo(bo));
+ }
+
+ @Log(title = "流程模板", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R edit(@Validated @RequestBody HrmFlowTemplateBo bo) {
+ return toAjax(service.updateByBo(bo));
+ }
+
+ @Log(title = "流程模板", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{tplIds}")
+ public R remove(@PathVariable @NotEmpty Long[] tplIds) {
+ return toAjax(service.deleteWithValidByIds(Arrays.asList(tplIds), true));
+ }
+
+ @GetMapping("/all")
+ public R> all(HrmFlowTemplateBo bo) {
+ return R.ok(service.queryList(bo));
+ }
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmHeadcountPlanController.java b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmHeadcountPlanController.java
new file mode 100644
index 0000000..f4009af
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmHeadcountPlanController.java
@@ -0,0 +1,61 @@
+package com.ruoyi.hrm.controller;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.hrm.domain.bo.HrmHeadcountPlanBo;
+import com.ruoyi.hrm.domain.vo.HrmHeadcountPlanVo;
+import com.ruoyi.hrm.service.IHrmHeadcountPlanService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Arrays;
+import java.util.List;
+
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/hrm/headcount")
+public class HrmHeadcountPlanController extends BaseController {
+
+ private final IHrmHeadcountPlanService service;
+
+ @GetMapping("/list")
+ public TableDataInfo list(HrmHeadcountPlanBo bo, PageQuery pageQuery) {
+ return service.queryPageList(bo, pageQuery);
+ }
+
+ @GetMapping("/{planId}")
+ public R getInfo(@PathVariable @NotNull Long planId) {
+ return R.ok(service.queryById(planId));
+ }
+
+ @Log(title = "编制管理", businessType = BusinessType.INSERT)
+ @PostMapping
+ public R add(@Validated @RequestBody HrmHeadcountPlanBo bo) {
+ return toAjax(service.insertByBo(bo));
+ }
+
+ @Log(title = "编制管理", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R edit(@Validated @RequestBody HrmHeadcountPlanBo bo) {
+ return toAjax(service.updateByBo(bo));
+ }
+
+ @Log(title = "编制管理", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{planIds}")
+ public R remove(@PathVariable @NotEmpty Long[] planIds) {
+ return toAjax(service.deleteWithValidByIds(Arrays.asList(planIds), true));
+ }
+
+ @GetMapping("/all")
+ public R> all(HrmHeadcountPlanBo bo) {
+ return R.ok(service.queryList(bo));
+ }
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmLeaveBalanceController.java b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmLeaveBalanceController.java
new file mode 100644
index 0000000..b5ce381
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmLeaveBalanceController.java
@@ -0,0 +1,61 @@
+package com.ruoyi.hrm.controller;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.hrm.domain.bo.HrmLeaveBalanceBo;
+import com.ruoyi.hrm.domain.vo.HrmLeaveBalanceVo;
+import com.ruoyi.hrm.service.IHrmLeaveBalanceService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Arrays;
+import java.util.List;
+
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/hrm/leave/balance")
+public class HrmLeaveBalanceController extends BaseController {
+
+ private final IHrmLeaveBalanceService service;
+
+ @GetMapping("/list")
+ public TableDataInfo list(HrmLeaveBalanceBo bo, PageQuery pageQuery) {
+ return service.queryPageList(bo, pageQuery);
+ }
+
+ @GetMapping("/{balId}")
+ public R getInfo(@PathVariable @NotNull Long balId) {
+ return R.ok(service.queryById(balId));
+ }
+
+ @Log(title = "假期余额", businessType = BusinessType.INSERT)
+ @PostMapping
+ public R add(@Validated @RequestBody HrmLeaveBalanceBo bo) {
+ return toAjax(service.insertByBo(bo));
+ }
+
+ @Log(title = "假期余额", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R edit(@Validated @RequestBody HrmLeaveBalanceBo bo) {
+ return toAjax(service.updateByBo(bo));
+ }
+
+ @Log(title = "假期余额", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{balIds}")
+ public R remove(@PathVariable @NotEmpty Long[] balIds) {
+ return toAjax(service.deleteWithValidByIds(Arrays.asList(balIds), true));
+ }
+
+ @GetMapping("/all")
+ public R> all(HrmLeaveBalanceBo bo) {
+ return R.ok(service.queryList(bo));
+ }
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmLeaveReqController.java b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmLeaveReqController.java
new file mode 100644
index 0000000..2de2597
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmLeaveReqController.java
@@ -0,0 +1,61 @@
+package com.ruoyi.hrm.controller;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.hrm.domain.bo.HrmLeaveReqBo;
+import com.ruoyi.hrm.domain.vo.HrmLeaveReqVo;
+import com.ruoyi.hrm.service.IHrmLeaveReqService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Arrays;
+import java.util.List;
+
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/hrm/leave/req")
+public class HrmLeaveReqController extends BaseController {
+
+ private final IHrmLeaveReqService service;
+
+ @GetMapping("/list")
+ public TableDataInfo list(HrmLeaveReqBo bo, PageQuery pageQuery) {
+ return service.queryPageList(bo, pageQuery);
+ }
+
+ @GetMapping("/{bizId}")
+ public R getInfo(@PathVariable @NotNull Long bizId) {
+ return R.ok(service.queryById(bizId));
+ }
+
+ @Log(title = "请假单", businessType = BusinessType.INSERT)
+ @PostMapping
+ public R add(@Validated @RequestBody HrmLeaveReqBo bo) {
+ return toAjax(service.insertByBo(bo));
+ }
+
+ @Log(title = "请假单", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R edit(@Validated @RequestBody HrmLeaveReqBo bo) {
+ return toAjax(service.updateByBo(bo));
+ }
+
+ @Log(title = "请假单", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{bizIds}")
+ public R remove(@PathVariable @NotEmpty Long[] bizIds) {
+ return toAjax(service.deleteWithValidByIds(Arrays.asList(bizIds), true));
+ }
+
+ @GetMapping("/all")
+ public R> all(HrmLeaveReqBo bo) {
+ return R.ok(service.queryList(bo));
+ }
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmPayPlanController.java b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmPayPlanController.java
new file mode 100644
index 0000000..e15a9cd
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmPayPlanController.java
@@ -0,0 +1,64 @@
+package com.ruoyi.hrm.controller;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.hrm.domain.bo.HrmPayPlanBo;
+import com.ruoyi.hrm.domain.vo.HrmPayPlanVo;
+import com.ruoyi.hrm.service.IHrmPayPlanService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 薪酬方案(按用户要求:不做鉴权)
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/hrm/pay/plan")
+public class HrmPayPlanController extends BaseController {
+
+ private final IHrmPayPlanService service;
+
+ @GetMapping("/list")
+ public TableDataInfo list(HrmPayPlanBo bo, PageQuery pageQuery) {
+ return service.queryPageList(bo, pageQuery);
+ }
+
+ @GetMapping("/{planId}")
+ public R getInfo(@PathVariable @NotNull Long planId) {
+ return R.ok(service.queryById(planId));
+ }
+
+ @Log(title = "薪酬方案", businessType = BusinessType.INSERT)
+ @PostMapping
+ public R add(@Validated @RequestBody HrmPayPlanBo bo) {
+ return toAjax(service.insertByBo(bo));
+ }
+
+ @Log(title = "薪酬方案", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R edit(@Validated @RequestBody HrmPayPlanBo bo) {
+ return toAjax(service.updateByBo(bo));
+ }
+
+ @Log(title = "薪酬方案", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{planIds}")
+ public R remove(@PathVariable @NotEmpty Long[] planIds) {
+ return toAjax(service.deleteWithValidByIds(Arrays.asList(planIds), true));
+ }
+
+ @GetMapping("/all")
+ public R> all(HrmPayPlanBo bo) {
+ return R.ok(service.queryList(bo));
+ }
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmPayRunController.java b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmPayRunController.java
new file mode 100644
index 0000000..15d95f7
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmPayRunController.java
@@ -0,0 +1,64 @@
+package com.ruoyi.hrm.controller;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.hrm.domain.bo.HrmPayRunBo;
+import com.ruoyi.hrm.domain.vo.HrmPayRunVo;
+import com.ruoyi.hrm.service.IHrmPayRunService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 薪酬批次(无鉴权)
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/hrm/pay/run")
+public class HrmPayRunController extends BaseController {
+
+ private final IHrmPayRunService service;
+
+ @GetMapping("/list")
+ public TableDataInfo list(HrmPayRunBo bo, PageQuery pageQuery) {
+ return service.queryPageList(bo, pageQuery);
+ }
+
+ @GetMapping("/{runId}")
+ public R getInfo(@PathVariable @NotNull Long runId) {
+ return R.ok(service.queryById(runId));
+ }
+
+ @Log(title = "薪酬批次", businessType = BusinessType.INSERT)
+ @PostMapping
+ public R add(@Validated @RequestBody HrmPayRunBo bo) {
+ return toAjax(service.insertByBo(bo));
+ }
+
+ @Log(title = "薪酬批次", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R edit(@Validated @RequestBody HrmPayRunBo bo) {
+ return toAjax(service.updateByBo(bo));
+ }
+
+ @Log(title = "薪酬批次", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{runIds}")
+ public R remove(@PathVariable @NotEmpty Long[] runIds) {
+ return toAjax(service.deleteWithValidByIds(Arrays.asList(runIds), true));
+ }
+
+ @GetMapping("/all")
+ public R> all(HrmPayRunBo bo) {
+ return R.ok(service.queryList(bo));
+ }
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmPayslipController.java b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmPayslipController.java
new file mode 100644
index 0000000..a4c682a
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmPayslipController.java
@@ -0,0 +1,64 @@
+package com.ruoyi.hrm.controller;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.hrm.domain.bo.HrmPayslipBo;
+import com.ruoyi.hrm.domain.vo.HrmPayslipVo;
+import com.ruoyi.hrm.service.IHrmPayslipService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 工资条(无鉴权)
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/hrm/payslip")
+public class HrmPayslipController extends BaseController {
+
+ private final IHrmPayslipService service;
+
+ @GetMapping("/list")
+ public TableDataInfo list(HrmPayslipBo bo, PageQuery pageQuery) {
+ return service.queryPageList(bo, pageQuery);
+ }
+
+ @GetMapping("/{slipId}")
+ public R getInfo(@PathVariable @NotNull Long slipId) {
+ return R.ok(service.queryById(slipId));
+ }
+
+ @Log(title = "工资条", businessType = BusinessType.INSERT)
+ @PostMapping
+ public R add(@Validated @RequestBody HrmPayslipBo bo) {
+ return toAjax(service.insertByBo(bo));
+ }
+
+ @Log(title = "工资条", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R edit(@Validated @RequestBody HrmPayslipBo bo) {
+ return toAjax(service.updateByBo(bo));
+ }
+
+ @Log(title = "工资条", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{slipIds}")
+ public R remove(@PathVariable @NotEmpty Long[] slipIds) {
+ return toAjax(service.deleteWithValidByIds(Arrays.asList(slipIds), true));
+ }
+
+ @GetMapping("/all")
+ public R> all(HrmPayslipBo bo) {
+ return R.ok(service.queryList(bo));
+ }
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmPunchController.java b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmPunchController.java
new file mode 100644
index 0000000..2381dd2
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmPunchController.java
@@ -0,0 +1,61 @@
+package com.ruoyi.hrm.controller;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.hrm.domain.bo.HrmPunchBo;
+import com.ruoyi.hrm.domain.vo.HrmPunchVo;
+import com.ruoyi.hrm.service.IHrmPunchService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Arrays;
+import java.util.List;
+
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/hrm/punch")
+public class HrmPunchController extends BaseController {
+
+ private final IHrmPunchService service;
+
+ @GetMapping("/list")
+ public TableDataInfo list(HrmPunchBo bo, PageQuery pageQuery) {
+ return service.queryPageList(bo, pageQuery);
+ }
+
+ @GetMapping("/{punchId}")
+ public R getInfo(@PathVariable @NotNull Long punchId) {
+ return R.ok(service.queryById(punchId));
+ }
+
+ @Log(title = "打卡记录", businessType = BusinessType.INSERT)
+ @PostMapping
+ public R add(@Validated @RequestBody HrmPunchBo bo) {
+ return toAjax(service.insertByBo(bo));
+ }
+
+ @Log(title = "打卡记录", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R edit(@Validated @RequestBody HrmPunchBo bo) {
+ return toAjax(service.updateByBo(bo));
+ }
+
+ @Log(title = "打卡记录", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{punchIds}")
+ public R remove(@PathVariable @NotEmpty Long[] punchIds) {
+ return toAjax(service.deleteWithValidByIds(Arrays.asList(punchIds), true));
+ }
+
+ @GetMapping("/all")
+ public R> all(HrmPunchBo bo) {
+ return R.ok(service.queryList(bo));
+ }
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmReimburseReqController.java b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmReimburseReqController.java
new file mode 100644
index 0000000..e80b3a0
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmReimburseReqController.java
@@ -0,0 +1,65 @@
+package com.ruoyi.hrm.controller;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.hrm.domain.bo.HrmReimburseReqBo;
+import com.ruoyi.hrm.domain.vo.HrmReimburseReqVo;
+import com.ruoyi.hrm.service.IHrmReimburseReqService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 日常报销申请
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/hrm/reimburse")
+public class HrmReimburseReqController extends BaseController {
+
+ private final IHrmReimburseReqService service;
+
+ @GetMapping("/list")
+ public TableDataInfo list(HrmReimburseReqBo bo, PageQuery pageQuery) {
+ return service.queryPageList(bo, pageQuery);
+ }
+
+ @GetMapping("/{bizId}")
+ public R getInfo(@PathVariable @NotNull Long bizId) {
+ return R.ok(service.queryById(bizId));
+ }
+
+ @Log(title = "日常报销单", businessType = BusinessType.INSERT)
+ @PostMapping
+ public R add(@Validated @RequestBody HrmReimburseReqBo bo) {
+ return toAjax(service.insertByBo(bo));
+ }
+
+ @Log(title = "日常报销单", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R edit(@Validated @RequestBody HrmReimburseReqBo bo) {
+ return toAjax(service.updateByBo(bo));
+ }
+
+ @Log(title = "日常报销单", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{bizIds}")
+ public R remove(@PathVariable @NotEmpty Long[] bizIds) {
+ return toAjax(service.deleteWithValidByIds(Arrays.asList(bizIds), true));
+ }
+
+ @GetMapping("/all")
+ public R> all(HrmReimburseReqBo bo) {
+ return R.ok(service.queryList(bo));
+ }
+}
+
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmScheduleController.java b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmScheduleController.java
new file mode 100644
index 0000000..69e8f95
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmScheduleController.java
@@ -0,0 +1,61 @@
+package com.ruoyi.hrm.controller;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.hrm.domain.bo.HrmScheduleBo;
+import com.ruoyi.hrm.domain.vo.HrmScheduleVo;
+import com.ruoyi.hrm.service.IHrmScheduleService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Arrays;
+import java.util.List;
+
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/hrm/schedule")
+public class HrmScheduleController extends BaseController {
+
+ private final IHrmScheduleService service;
+
+ @GetMapping("/list")
+ public TableDataInfo list(HrmScheduleBo bo, PageQuery pageQuery) {
+ return service.queryPageList(bo, pageQuery);
+ }
+
+ @GetMapping("/{schedId}")
+ public R getInfo(@PathVariable @NotNull Long schedId) {
+ return R.ok(service.queryById(schedId));
+ }
+
+ @Log(title = "排班", businessType = BusinessType.INSERT)
+ @PostMapping
+ public R add(@Validated @RequestBody HrmScheduleBo bo) {
+ return toAjax(service.insertByBo(bo));
+ }
+
+ @Log(title = "排班", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R edit(@Validated @RequestBody HrmScheduleBo bo) {
+ return toAjax(service.updateByBo(bo));
+ }
+
+ @Log(title = "排班", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{schedIds}")
+ public R remove(@PathVariable @NotEmpty Long[] schedIds) {
+ return toAjax(service.deleteWithValidByIds(Arrays.asList(schedIds), true));
+ }
+
+ @GetMapping("/all")
+ public R> all(HrmScheduleBo bo) {
+ return R.ok(service.queryList(bo));
+ }
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmSealReqController.java b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmSealReqController.java
new file mode 100644
index 0000000..f0e1602
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmSealReqController.java
@@ -0,0 +1,97 @@
+package com.ruoyi.hrm.controller;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.hrm.domain.bo.HrmSealReqBo;
+import com.ruoyi.hrm.domain.bo.HrmSealStampBo;
+import com.ruoyi.hrm.domain.vo.HrmSealReqVo;
+import com.ruoyi.hrm.service.IHrmSealReqService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 用印申请
+ */
+@Slf4j
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/hrm/seal")
+public class HrmSealReqController extends BaseController {
+
+ private final IHrmSealReqService service;
+
+ @GetMapping("/list")
+ public TableDataInfo list(HrmSealReqBo bo, PageQuery pageQuery) {
+ return service.queryPageList(bo, pageQuery);
+ }
+
+ @GetMapping("/{bizId}")
+ public R getInfo(@PathVariable @NotNull Long bizId) {
+ return R.ok(service.queryById(bizId));
+ }
+
+ @Log(title = "用印申请", businessType = BusinessType.INSERT)
+ @PostMapping
+ public R add(@Validated @RequestBody HrmSealReqBo bo) {
+ return toAjax(service.insertByBo(bo));
+ }
+
+ @Log(title = "用印申请", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R edit(@Validated @RequestBody HrmSealReqBo bo) {
+ return toAjax(service.updateByBo(bo));
+ }
+
+ @Log(title = "用印申请", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{bizIds}")
+ public R remove(@PathVariable @NotEmpty Long[] bizIds) {
+ return toAjax(service.deleteWithValidByIds(java.util.Arrays.asList(bizIds), true));
+ }
+
+ @Log(title = "用印申请", businessType = BusinessType.UPDATE)
+ @PostMapping("/{bizId}/approve")
+ public R approve(@PathVariable @NotNull Long bizId) {
+ return toAjax(service.updateStatus(bizId, "approved"));
+ }
+
+ @Log(title = "用印申请", businessType = BusinessType.UPDATE)
+ @PostMapping("/{bizId}/reject")
+ public R reject(@PathVariable @NotNull Long bizId) {
+ return toAjax(service.updateStatus(bizId, "rejected"));
+ }
+
+ @Log(title = "用印申请", businessType = BusinessType.UPDATE)
+ @PostMapping("/{bizId}/cancel")
+ public R cancel(@PathVariable @NotNull Long bizId) {
+ return toAjax(service.updateStatus(bizId, "canceled"));
+ }
+
+ @Log(title = "用印盖章(Java)", businessType = BusinessType.UPDATE)
+ @PostMapping("/{bizId}/stamp/java")
+ public R stampJava(@PathVariable @NotNull Long bizId, @Validated @RequestBody HrmSealStampBo bo) {
+ // 添加日志,检查接收到的数据
+ log.info("收到盖章请求 - bizId: {}, yPx: {}, xPx: {}, pageNo: {}, yPx类型: {}",
+ bizId, bo.getYPx(), bo.getXPx(), bo.getPageNo(),
+ bo.getYPx() != null ? bo.getYPx().getClass().getName() : "null");
+ if (bo.getYPx() == null) {
+ log.error("yPx 为 null!接收到的 bo 对象: {}", bo);
+ }
+ return R.ok(service.stampWithJava(bizId, bo));
+ }
+
+ @Log(title = "用印盖章(Python)", businessType = BusinessType.UPDATE)
+ @PostMapping("/{bizId}/stamp/python")
+ public R stampPython(@PathVariable @NotNull Long bizId, @Validated @RequestBody HrmSealStampBo bo) {
+ return R.ok(service.stampWithPython(bizId, bo));
+ }
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmShiftController.java b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmShiftController.java
new file mode 100644
index 0000000..401c890
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmShiftController.java
@@ -0,0 +1,61 @@
+package com.ruoyi.hrm.controller;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.hrm.domain.bo.HrmShiftBo;
+import com.ruoyi.hrm.domain.vo.HrmShiftVo;
+import com.ruoyi.hrm.service.IHrmShiftService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Arrays;
+import java.util.List;
+
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/hrm/shift")
+public class HrmShiftController extends BaseController {
+
+ private final IHrmShiftService service;
+
+ @GetMapping("/list")
+ public TableDataInfo list(HrmShiftBo bo, PageQuery pageQuery) {
+ return service.queryPageList(bo, pageQuery);
+ }
+
+ @GetMapping("/{shiftId}")
+ public R getInfo(@PathVariable @NotNull Long shiftId) {
+ return R.ok(service.queryById(shiftId));
+ }
+
+ @Log(title = "班次", businessType = BusinessType.INSERT)
+ @PostMapping
+ public R add(@Validated @RequestBody HrmShiftBo bo) {
+ return toAjax(service.insertByBo(bo));
+ }
+
+ @Log(title = "班次", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R edit(@Validated @RequestBody HrmShiftBo bo) {
+ return toAjax(service.updateByBo(bo));
+ }
+
+ @Log(title = "班次", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{shiftIds}")
+ public R remove(@PathVariable @NotEmpty Long[] shiftIds) {
+ return toAjax(service.deleteWithValidByIds(Arrays.asList(shiftIds), true));
+ }
+
+ @GetMapping("/all")
+ public R> all(HrmShiftBo bo) {
+ return R.ok(service.queryList(bo));
+ }
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmStatSnapshotController.java b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmStatSnapshotController.java
new file mode 100644
index 0000000..bc46749
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmStatSnapshotController.java
@@ -0,0 +1,64 @@
+package com.ruoyi.hrm.controller;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.hrm.domain.bo.HrmStatSnapshotBo;
+import com.ruoyi.hrm.domain.vo.HrmStatSnapshotVo;
+import com.ruoyi.hrm.service.IHrmStatSnapshotService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 指标快照(无鉴权)
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/hrm/pay/stat")
+public class HrmStatSnapshotController extends BaseController {
+
+ private final IHrmStatSnapshotService service;
+
+ @GetMapping("/list")
+ public TableDataInfo list(HrmStatSnapshotBo bo, PageQuery pageQuery) {
+ return service.queryPageList(bo, pageQuery);
+ }
+
+ @GetMapping("/{snapId}")
+ public R getInfo(@PathVariable @NotNull Long snapId) {
+ return R.ok(service.queryById(snapId));
+ }
+
+ @Log(title = "指标快照", businessType = BusinessType.INSERT)
+ @PostMapping
+ public R add(@Validated @RequestBody HrmStatSnapshotBo bo) {
+ return toAjax(service.insertByBo(bo));
+ }
+
+ @Log(title = "指标快照", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R edit(@Validated @RequestBody HrmStatSnapshotBo bo) {
+ return toAjax(service.updateByBo(bo));
+ }
+
+ @Log(title = "指标快照", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{snapIds}")
+ public R remove(@PathVariable @NotEmpty Long[] snapIds) {
+ return toAjax(service.deleteWithValidByIds(Arrays.asList(snapIds), true));
+ }
+
+ @GetMapping("/all")
+ public R> all(HrmStatSnapshotBo bo) {
+ return R.ok(service.queryList(bo));
+ }
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmTravelReqController.java b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmTravelReqController.java
new file mode 100644
index 0000000..1ab130b
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmTravelReqController.java
@@ -0,0 +1,64 @@
+package com.ruoyi.hrm.controller;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.hrm.domain.bo.HrmTravelReqBo;
+import com.ruoyi.hrm.domain.vo.HrmTravelReqVo;
+import com.ruoyi.hrm.service.IHrmTravelReqService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 出差单(按用户要求:不做鉴权)
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/hrm/travel")
+public class HrmTravelReqController extends BaseController {
+
+ private final IHrmTravelReqService service;
+
+ @GetMapping("/list")
+ public TableDataInfo list(HrmTravelReqBo bo, PageQuery pageQuery) {
+ return service.queryPageList(bo, pageQuery);
+ }
+
+ @GetMapping("/{bizId}")
+ public R getInfo(@PathVariable @NotNull Long bizId) {
+ return R.ok(service.queryById(bizId));
+ }
+
+ @Log(title = "出差单", businessType = BusinessType.INSERT)
+ @PostMapping
+ public R add(@Validated @RequestBody HrmTravelReqBo bo) {
+ return toAjax(service.insertByBo(bo));
+ }
+
+ @Log(title = "出差单", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R edit(@Validated @RequestBody HrmTravelReqBo bo) {
+ return toAjax(service.updateByBo(bo));
+ }
+
+ @Log(title = "出差单", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{bizIds}")
+ public R remove(@PathVariable @NotEmpty Long[] bizIds) {
+ return toAjax(service.deleteWithValidByIds(Arrays.asList(bizIds), true));
+ }
+
+ @GetMapping("/all")
+ public R> all(HrmTravelReqBo bo) {
+ return R.ok(service.queryList(bo));
+ }
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmAttendCalc.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmAttendCalc.java
new file mode 100644
index 0000000..46c3112
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmAttendCalc.java
@@ -0,0 +1,33 @@
+package com.ruoyi.hrm.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("hrm_attend_calc")
+public class HrmAttendCalc extends BaseEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @TableId
+ private Long calcId;
+ private Long empId;
+ private Date workDate;
+ private Long shiftId;
+ private String status;
+ private Integer workMinutes;
+ private Integer lateMinutes;
+ private Integer earlyMinutes;
+ private Integer otMinutes;
+ private String leaveMinutesJson;
+ private String remark;
+ @TableLogic
+ private Integer delFlag;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmCertificate.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmCertificate.java
new file mode 100644
index 0000000..d4c38b0
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmCertificate.java
@@ -0,0 +1,34 @@
+package com.ruoyi.hrm.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("hrm_certificate")
+public class HrmCertificate extends BaseEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @TableId
+ private Long certId;
+ private Long empId;
+ private String certName;
+ private String certNo;
+ private String issuedBy;
+ private Date validFrom;
+ private Date validTo;
+ private String remark;
+ /**
+ * 证书附件 fileIds(逗号分隔的 OSS ID)
+ */
+ private String fileIds;
+ @TableLogic
+ private Integer delFlag;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmContract.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmContract.java
new file mode 100644
index 0000000..2d37755
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmContract.java
@@ -0,0 +1,34 @@
+package com.ruoyi.hrm.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("hrm_contract")
+public class HrmContract extends BaseEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @TableId
+ private Long contractId;
+ private Long empId;
+ private String contractNo;
+ private String contractType;
+ private Date startDate;
+ private Date endDate;
+ private String status;
+ private String remark;
+ /**
+ * 合同附件 fileIds(逗号分隔的 OSS ID)
+ */
+ private String fileIds;
+ @TableLogic
+ private Integer delFlag;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmEmpOrgPosition.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmEmpOrgPosition.java
new file mode 100644
index 0000000..2620f00
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmEmpOrgPosition.java
@@ -0,0 +1,35 @@
+package com.ruoyi.hrm.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 员工-组织-岗位关系
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("hrm_emp_org_position")
+public class HrmEmpOrgPosition extends BaseEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @TableId
+ private Long relId;
+ private Long empId;
+ /** 部门ID(引用 sys_dept.dept_id) */
+ private Long deptId;
+ /** 岗位ID(引用 sys_post.post_id) */
+ private Long postId;
+ private Integer isPrimary;
+ private Date startDate;
+ private Date endDate;
+ private String remark;
+ @TableLogic
+ private Integer delFlag;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmEmployee.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmEmployee.java
new file mode 100644
index 0000000..d8a8fc6
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmEmployee.java
@@ -0,0 +1,44 @@
+package com.ruoyi.hrm.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 员工主数据
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("hrm_employee")
+public class HrmEmployee extends BaseEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @TableId
+ private Long empId;
+ private Long userId;
+ private String empNo;
+ private String empName;
+ private String gender;
+ private String mobile;
+ private String email;
+ private String idNo;
+ private Date hireDate;
+ private String employmentType;
+ private String status;
+ /** 主部门ID(引用 sys_dept.dept_id) */
+ private Long deptId;
+ /** 主岗位ID(引用 sys_post.post_id) */
+ private Long postId;
+ private BigDecimal seniorityYears;
+ private Date contractEndDate;
+ private String remark;
+ @TableLogic
+ private Integer delFlag;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmFlowAction.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmFlowAction.java
new file mode 100644
index 0000000..c7cef2e
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmFlowAction.java
@@ -0,0 +1,29 @@
+package com.ruoyi.hrm.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("hrm_flow_action")
+public class HrmFlowAction extends BaseEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @TableId
+ private Long actionId;
+ private Long taskId;
+ private Long instId;
+ private String action;
+ private String remark;
+ private Long actionUserId;
+ private String bizType;
+ private Long bizId;
+ @TableLogic
+ private Integer delFlag;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmFlowCc.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmFlowCc.java
new file mode 100644
index 0000000..85ba6ba
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmFlowCc.java
@@ -0,0 +1,46 @@
+package com.ruoyi.hrm.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 抄送记录
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("hrm_flow_cc")
+public class HrmFlowCc extends BaseEntity {
+
+ @TableId
+ private Long ccId;
+
+ private Long instId;
+
+ private String bizType;
+
+ private Long bizId;
+
+ private Long nodeId;
+
+ /** 触发抄送的节点名称(可读名) */
+ private String nodeName;
+
+ /** 是否已读 0未读 1已读 */
+ private Integer readFlag;
+
+ /** 被抄送的用户ID */
+ private Long ccUserId;
+
+ /** 触发抄送的操作人(一般为当前审批人) */
+ private Long fromUserId;
+
+ private String remark;
+
+ @TableLogic
+ private Integer delFlag;
+}
+
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmFlowInstance.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmFlowInstance.java
new file mode 100644
index 0000000..38d7fc1
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmFlowInstance.java
@@ -0,0 +1,29 @@
+package com.ruoyi.hrm.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("hrm_flow_instance")
+public class HrmFlowInstance extends BaseEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @TableId
+ private Long instId;
+ private Long tplId;
+ private String bizType;
+ private Long bizId;
+ private String status;
+ private Long currentNodeId;
+ private Long startUserId;
+ private String remark;
+ @TableLogic
+ private Integer delFlag;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmFlowNode.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmFlowNode.java
new file mode 100644
index 0000000..e93ae7c
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmFlowNode.java
@@ -0,0 +1,29 @@
+package com.ruoyi.hrm.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("hrm_flow_node")
+public class HrmFlowNode extends BaseEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @TableId
+ private Long nodeId;
+ private Long tplId;
+ private Integer orderNo;
+ private String nodeType;
+ private String approverRule;
+ private String approverValue; // JSON
+ private String fieldPerm; // JSON
+ private String remark;
+ @TableLogic
+ private Integer delFlag;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmFlowTask.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmFlowTask.java
new file mode 100644
index 0000000..37614c5
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmFlowTask.java
@@ -0,0 +1,39 @@
+package com.ruoyi.hrm.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("hrm_flow_task")
+public class HrmFlowTask extends BaseEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @TableId
+ private Long taskId;
+ private Long instId;
+ private Long nodeId;
+ private Long assigneeUserId;
+ private String status;
+ private Date expireTime;
+ private String remark;
+
+ /** 业务类型:leave/travel/seal */
+ @TableField("biz_type")
+ private String bizType;
+
+ /** 业务ID:对应请假/出差/用印的 bizId */
+ @TableField("biz_id")
+ private Long bizId;
+
+ @TableLogic
+ private Integer delFlag;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmFlowTemplate.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmFlowTemplate.java
new file mode 100644
index 0000000..a790cf9
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmFlowTemplate.java
@@ -0,0 +1,28 @@
+package com.ruoyi.hrm.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("hrm_flow_template")
+public class HrmFlowTemplate extends BaseEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @TableId
+ private Long tplId;
+ private String tplCode;
+ private String tplName;
+ private String bizType;
+ private Integer version;
+ private Integer enabled;
+ private String remark;
+ @TableLogic
+ private Integer delFlag;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmFormData.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmFormData.java
new file mode 100644
index 0000000..6b51c30
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmFormData.java
@@ -0,0 +1,26 @@
+package com.ruoyi.hrm.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("hrm_form_data")
+public class HrmFormData extends BaseEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @TableId
+ private Long formId;
+ private String bizType;
+ private Long bizId;
+ private String contentJson;
+ private String remark;
+ @TableLogic
+ private Integer delFlag;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmHeadcountPlan.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmHeadcountPlan.java
new file mode 100644
index 0000000..0e3ded2
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmHeadcountPlan.java
@@ -0,0 +1,33 @@
+package com.ruoyi.hrm.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * 编制/预算
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("hrm_headcount_plan")
+public class HrmHeadcountPlan extends BaseEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @TableId
+ private Long planId;
+ /** 部门ID(引用 sys_dept.dept_id) */
+ private Long deptId;
+ /** 岗位ID(引用 sys_post.post_id) */
+ private Long postId;
+ private Integer year;
+ private Integer month;
+ private Integer budgetCount;
+ private String remark;
+ @TableLogic
+ private Integer delFlag;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmLeaveBalance.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmLeaveBalance.java
new file mode 100644
index 0000000..ff8b764
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmLeaveBalance.java
@@ -0,0 +1,28 @@
+package com.ruoyi.hrm.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("hrm_leave_balance")
+public class HrmLeaveBalance extends BaseEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @TableId
+ private Long balId;
+ private Long empId;
+ private String leaveType;
+ private java.math.BigDecimal balanceHours;
+ private Date expireDate;
+ private String remark;
+ @TableLogic
+ private Integer delFlag;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmLeaveReq.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmLeaveReq.java
new file mode 100644
index 0000000..074d5e0
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmLeaveReq.java
@@ -0,0 +1,33 @@
+package com.ruoyi.hrm.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("hrm_leave_req")
+public class HrmLeaveReq extends BaseEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @TableId
+ private Long bizId;
+ private Long empId;
+ private String leaveType;
+ private Date startTime;
+ private Date endTime;
+ private java.math.BigDecimal hours;
+ private String reason;
+ private String status;
+ private String accessoryApplyIds;
+ private String accessoryReceiptIds;
+ private String remark;
+ @TableLogic
+ private Integer delFlag;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmPayPlan.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmPayPlan.java
new file mode 100644
index 0000000..86b0c62
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmPayPlan.java
@@ -0,0 +1,28 @@
+package com.ruoyi.hrm.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("hrm_pay_plan")
+public class HrmPayPlan extends BaseEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @TableId
+ private Long planId;
+ private String planName;
+ private BigDecimal baseSalary;
+ private String allowanceJson;
+ private String formulaJson;
+ private String remark;
+ @TableLogic
+ private Integer delFlag;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmPayRun.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmPayRun.java
new file mode 100644
index 0000000..f459c7b
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmPayRun.java
@@ -0,0 +1,26 @@
+package com.ruoyi.hrm.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("hrm_pay_run")
+public class HrmPayRun extends BaseEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @TableId
+ private Long runId;
+ private String period;
+ private String status;
+ private Long planId;
+ private String remark;
+ @TableLogic
+ private Integer delFlag;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmPayslip.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmPayslip.java
new file mode 100644
index 0000000..76c9f9c
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmPayslip.java
@@ -0,0 +1,30 @@
+package com.ruoyi.hrm.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("hrm_payslip")
+public class HrmPayslip extends BaseEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @TableId
+ private Long slipId;
+ private Long runId;
+ private Long empId;
+ private BigDecimal amountGross;
+ private BigDecimal amountNet;
+ private String itemsJson;
+ private String status;
+ private String remark;
+ @TableLogic
+ private Integer delFlag;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmPunch.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmPunch.java
new file mode 100644
index 0000000..b90be0a
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmPunch.java
@@ -0,0 +1,29 @@
+package com.ruoyi.hrm.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("hrm_punch")
+public class HrmPunch extends BaseEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @TableId
+ private Long punchId;
+ private Long empId;
+ private Date punchTime;
+ private String source;
+ private String location;
+ private String deviceId;
+ private String remark;
+ @TableLogic
+ private Integer delFlag;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmReimburseReq.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmReimburseReq.java
new file mode 100644
index 0000000..99403e7
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmReimburseReq.java
@@ -0,0 +1,39 @@
+package com.ruoyi.hrm.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("hrm_reimburse_req")
+public class HrmReimburseReq extends BaseEntity {
+
+ @TableId
+ private Long bizId;
+
+ private Long empId;
+
+ private String reimburseType;
+
+ private BigDecimal totalAmount;
+
+ private String reason;
+
+ private String status;
+
+ private String accessoryApplyIds;
+
+ private String accessoryReceiptIds;
+
+ private String remark;
+
+ @TableLogic
+ private Integer delFlag;
+}
+
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmSchedule.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmSchedule.java
new file mode 100644
index 0000000..54e962c
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmSchedule.java
@@ -0,0 +1,27 @@
+package com.ruoyi.hrm.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("hrm_schedule")
+public class HrmSchedule extends BaseEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @TableId
+ private Long schedId;
+ private Long empId;
+ private Date workDate;
+ private Long shiftId;
+ private String remark;
+ @TableLogic
+ private Integer delFlag;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmSealReq.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmSealReq.java
new file mode 100644
index 0000000..41c7504
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmSealReq.java
@@ -0,0 +1,56 @@
+package com.ruoyi.hrm.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * 用印申请
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("hrm_seal_req")
+public class HrmSealReq extends BaseEntity implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /** 业务ID */
+ @TableId
+ private Long bizId;
+
+ /** 申请人ID */
+ private Long empId;
+
+ /** 用印类型(公章/合同章/财务章等) */
+ private String sealType;
+
+ /** 用途说明 */
+ private String purpose;
+
+ /** 申请材料附件ID列表(CSV,对应sys_oss) */
+ private String applyFileIds;
+
+ /** 是否需要回执 1是0否 */
+ private Integer receiptRequired;
+
+ /** 回执状态 none/pending/done */
+ private String receiptStatus;
+
+ /** 回执附件ID列表(CSV,对应sys_oss或直接URL) */
+ private String receiptFileIds;
+
+ /** 状态 draft/running/approved/rejected/canceled */
+ private String status;
+
+ /** 备注 */
+ private String remark;
+
+ /** 删除标识 0正常 2删除 */
+ @TableLogic
+ private Integer delFlag;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmShift.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmShift.java
new file mode 100644
index 0000000..b0ce5e5
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmShift.java
@@ -0,0 +1,30 @@
+package com.ruoyi.hrm.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.time.LocalTime;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("hrm_shift")
+public class HrmShift extends BaseEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @TableId
+ private Long shiftId;
+ private String shiftCode;
+ private String shiftName;
+ private LocalTime startTime;
+ private LocalTime endTime;
+ private Integer breakMinutes;
+ private Integer isNight;
+ private String remark;
+ @TableLogic
+ private Integer delFlag;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmStatSnapshot.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmStatSnapshot.java
new file mode 100644
index 0000000..3aca8c4
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmStatSnapshot.java
@@ -0,0 +1,29 @@
+package com.ruoyi.hrm.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("hrm_stat_snapshot")
+public class HrmStatSnapshot extends BaseEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @TableId
+ private Long snapId;
+ private Date statDate;
+ private String statType;
+ private String dimJson;
+ private BigDecimal valueNum;
+ private String remark;
+ @TableLogic
+ private Integer delFlag;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmTravelReq.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmTravelReq.java
new file mode 100644
index 0000000..fbbd37a
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmTravelReq.java
@@ -0,0 +1,36 @@
+package com.ruoyi.hrm.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("hrm_travel_req")
+public class HrmTravelReq extends BaseEntity {
+ private static final long serialVersionUID = 1L;
+
+ @TableId
+ private Long bizId;
+ private Long empId;
+ private Date startTime;
+ private Date endTime;
+ private String travelType;
+ private String destination;
+ private String reason;
+ private String status;
+ private String accessoryApplyIds;
+ private String accessoryReceiptIds;
+ private String payeeName;
+ private Double estimatedCost;
+ private String bankName;
+ private String bankAccount;
+ private String remark;
+ @TableLogic
+ private Integer delFlag;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmAttendCalcBo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmAttendCalcBo.java
new file mode 100644
index 0000000..c952cb6
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmAttendCalcBo.java
@@ -0,0 +1,30 @@
+package com.ruoyi.hrm.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class HrmAttendCalcBo extends BaseEntity {
+
+ private Long calcId;
+
+ @NotNull(message = "员工ID不能为空")
+ private Long empId;
+
+ @NotNull(message = "工作日期不能为空")
+ private Date workDate;
+
+ private Long shiftId;
+ private String status;
+ private Integer workMinutes;
+ private Integer lateMinutes;
+ private Integer earlyMinutes;
+ private Integer otMinutes;
+ private String leaveMinutesJson;
+ private String remark;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmCertificateBo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmCertificateBo.java
new file mode 100644
index 0000000..e437785
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmCertificateBo.java
@@ -0,0 +1,38 @@
+package com.ruoyi.hrm.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class HrmCertificateBo extends BaseEntity {
+
+ private Long certId;
+
+ @NotNull(message = "员工ID不能为空")
+ private Long empId;
+
+ @NotBlank(message = "证书名称不能为空")
+ private String certName;
+
+ private String certNo;
+ private String issuedBy;
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date validFrom;
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date validTo;
+ private String remark;
+ /**
+ * 证书附件 fileIds(逗号分隔的 OSS ID)
+ */
+ private String fileIds;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmContractBo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmContractBo.java
new file mode 100644
index 0000000..0eb1932
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmContractBo.java
@@ -0,0 +1,38 @@
+package com.ruoyi.hrm.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class HrmContractBo extends BaseEntity {
+
+ private Long contractId;
+
+ @NotNull(message = "员工ID不能为空")
+ private Long empId;
+
+ @NotBlank(message = "合同编号不能为空")
+ private String contractNo;
+
+ private String contractType;
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date startDate;
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date endDate;
+ private String status;
+ private String remark;
+ /**
+ * 合同附件 fileIds(逗号分隔的 OSS ID)
+ */
+ private String fileIds;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmEmpOrgPositionBo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmEmpOrgPositionBo.java
new file mode 100644
index 0000000..963de5e
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmEmpOrgPositionBo.java
@@ -0,0 +1,34 @@
+package com.ruoyi.hrm.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class HrmEmpOrgPositionBo extends BaseEntity {
+
+ private Long relId;
+
+ @NotNull(message = "员工不能为空")
+ private Long empId;
+
+ @NotNull(message = "部门不能为空")
+ /** 部门ID(引用 sys_dept.dept_id) */
+ private Long deptId;
+
+ @NotNull(message = "岗位不能为空")
+ /** 岗位ID(引用 sys_post.post_id) */
+ private Long postId;
+
+ private Integer isPrimary;
+
+ private Date startDate;
+
+ private Date endDate;
+
+ private String remark;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmEmployeeBo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmEmployeeBo.java
new file mode 100644
index 0000000..603f297
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmEmployeeBo.java
@@ -0,0 +1,49 @@
+package com.ruoyi.hrm.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+/**
+ * 员工 Bo
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class HrmEmployeeBo extends BaseEntity {
+
+ private Long empId;
+
+ private Long userId;
+
+ @NotBlank(message = "工号不能为空")
+ private String empNo;
+
+ @NotBlank(message = "姓名不能为空")
+ private String empName;
+
+ private String gender;
+
+ private String mobile;
+
+ private String email;
+
+ private String idNo;
+
+ private Date hireDate;
+
+ private String employmentType;
+
+ private String status;
+
+ /** 主部门ID(引用 sys_dept.dept_id) */
+ private Long deptId;
+
+ /** 主岗位ID(引用 sys_post.post_id) */
+ private Long postId;
+
+ private String remark;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowActionBo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowActionBo.java
new file mode 100644
index 0000000..0142ade
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowActionBo.java
@@ -0,0 +1,27 @@
+package com.ruoyi.hrm.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class HrmFlowActionBo extends BaseEntity {
+
+ private Long actionId;
+
+ private Long taskId;
+
+ @NotNull(message = "实例ID不能为空")
+ private Long instId;
+
+ @NotBlank(message = "动作不能为空")
+ private String action;
+
+ private String remark;
+
+ private Long actionUserId;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowCcBo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowCcBo.java
new file mode 100644
index 0000000..5f45433
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowCcBo.java
@@ -0,0 +1,33 @@
+package com.ruoyi.hrm.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class HrmFlowCcBo extends BaseEntity {
+ private Long ccId;
+ private Long instId;
+ private String bizType;
+ private Long bizId;
+
+ /** 业务类型名称(列表展示用,可选条件) */
+ private String bizTypeName;
+
+ /** 业务标题/摘要(列表展示用,可选条件) */
+ private String bizTitle;
+ private Long nodeId;
+ private String nodeName;
+ private Integer readFlag;
+ private Long ccUserId;
+
+ /** 手动抄送:支持批量被抄送用户 */
+ private List ccUserIds;
+
+ private Long fromUserId;
+ private String remark;
+}
+
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowInstanceBo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowInstanceBo.java
new file mode 100644
index 0000000..21676e1
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowInstanceBo.java
@@ -0,0 +1,40 @@
+package com.ruoyi.hrm.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class HrmFlowInstanceBo extends BaseEntity {
+
+ private Long instId;
+
+ @NotNull(message = "模板ID不能为空")
+ private Long tplId;
+
+ @NotBlank(message = "业务类型不能为空")
+ private String bizType;
+
+ @NotNull(message = "业务ID不能为空")
+ private Long bizId;
+
+ private String status;
+
+ private Long currentNodeId;
+
+ private Long startUserId;
+
+ private String remark;
+
+ private String startTime;
+
+ private String endTime;
+
+ private String hours;
+
+ private String bizTitle;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowNodeBo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowNodeBo.java
new file mode 100644
index 0000000..b452685
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowNodeBo.java
@@ -0,0 +1,33 @@
+package com.ruoyi.hrm.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.NotBlank;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class HrmFlowNodeBo extends BaseEntity {
+
+ private Long nodeId;
+
+ @NotNull(message = "模板ID不能为空")
+ private Long tplId;
+
+ @NotNull(message = "顺序不能为空")
+ private Integer orderNo;
+
+ @NotBlank(message = "节点类型不能为空")
+ private String nodeType;
+
+ @NotBlank(message = "审批人规则不能为空")
+ private String approverRule;
+
+ private String approverValue;
+
+ private String fieldPerm;
+
+ private String remark;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowStartBo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowStartBo.java
new file mode 100644
index 0000000..8a829f8
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowStartBo.java
@@ -0,0 +1,25 @@
+package com.ruoyi.hrm.domain.bo;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Data
+public class HrmFlowStartBo {
+ // 模板ID:存在则按模板启动;为空则走“自选审批人一次性审批”
+ private Long tplId;
+
+ // 无模板时:自选审批人 userId(一次性审批,审批完成即结束流程)
+ private Long manualAssigneeUserId;
+
+ @NotBlank(message = "业务类型不能为空")
+ private String bizType;
+
+ @NotNull(message = "业务ID不能为空")
+ private Long bizId;
+
+ private Long startUserId;
+
+ private String contentJson;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowTaskApproveBo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowTaskApproveBo.java
new file mode 100644
index 0000000..c126dc3
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowTaskApproveBo.java
@@ -0,0 +1,17 @@
+package com.ruoyi.hrm.domain.bo;
+
+import lombok.Data;
+
+/**
+ * 流程任务审批请求体
+ */
+@Data
+public class HrmFlowTaskApproveBo {
+
+ /** 审批意见 */
+ private String remark;
+
+ /** 盖章参数(仅用于用印业务) */
+ private HrmSealStampBo stampBo;
+}
+
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowTaskBo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowTaskBo.java
new file mode 100644
index 0000000..384e095
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowTaskBo.java
@@ -0,0 +1,30 @@
+package com.ruoyi.hrm.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class HrmFlowTaskBo extends BaseEntity {
+
+ private Long taskId;
+ private Long instId;
+ private Long nodeId;
+ private Long assigneeUserId;
+ private String status;
+ private Date expireTime;
+ private String remark;
+
+ /** 业务类型:leave/travel/seal */
+ private String bizType;
+
+ /** 业务ID:对应请假/出差/用印的 bizId */
+ private Long bizId;
+
+ //新增createBy
+ private String createBy;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowTemplateBo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowTemplateBo.java
new file mode 100644
index 0000000..37c67aa
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFlowTemplateBo.java
@@ -0,0 +1,29 @@
+package com.ruoyi.hrm.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class HrmFlowTemplateBo extends BaseEntity {
+
+ private Long tplId;
+
+ @NotBlank(message = "模板编码不能为空")
+ private String tplCode;
+
+ @NotBlank(message = "模板名称不能为空")
+ private String tplName;
+
+ @NotBlank(message = "业务类型不能为空")
+ private String bizType;
+
+ private Integer version;
+
+ private Integer enabled;
+
+ private String remark;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFormDataBo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFormDataBo.java
new file mode 100644
index 0000000..390d5b9
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmFormDataBo.java
@@ -0,0 +1,26 @@
+package com.ruoyi.hrm.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class HrmFormDataBo extends BaseEntity {
+
+ private Long formId;
+
+ @NotBlank(message = "业务类型不能为空")
+ private String bizType;
+
+ @NotNull(message = "业务ID不能为空")
+ private Long bizId;
+
+ @NotBlank(message = "表单内容不能为空")
+ private String contentJson;
+
+ private String remark;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmHeadcountPlanBo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmHeadcountPlanBo.java
new file mode 100644
index 0000000..dc03ad2
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmHeadcountPlanBo.java
@@ -0,0 +1,33 @@
+package com.ruoyi.hrm.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class HrmHeadcountPlanBo extends BaseEntity {
+
+ private Long planId;
+
+ @NotNull(message = "部门不能为空")
+ /** 部门ID(引用 sys_dept.dept_id) */
+ private Long deptId;
+
+ @NotNull(message = "岗位不能为空")
+ /** 岗位ID(引用 sys_post.post_id) */
+ private Long postId;
+
+ @NotNull(message = "年份不能为空")
+ private Integer year;
+
+ @NotNull(message = "月份不能为空")
+ private Integer month;
+
+ @NotNull(message = "编制人数不能为空")
+ private Integer budgetCount;
+
+ private String remark;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmLeaveBalanceBo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmLeaveBalanceBo.java
new file mode 100644
index 0000000..07f20eb
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmLeaveBalanceBo.java
@@ -0,0 +1,28 @@
+package com.ruoyi.hrm.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class HrmLeaveBalanceBo extends BaseEntity {
+
+ private Long balId;
+
+ @NotNull(message = "员工ID不能为空")
+ private Long empId;
+
+ @NotNull(message = "假期类型不能为空")
+ private String leaveType;
+
+ @NotNull(message = "余额小时不能为空")
+ private java.math.BigDecimal balanceHours;
+
+ private Date expireDate;
+
+ private String remark;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmLeaveReqBo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmLeaveReqBo.java
new file mode 100644
index 0000000..81556d2
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmLeaveReqBo.java
@@ -0,0 +1,52 @@
+package com.ruoyi.hrm.domain.bo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class HrmLeaveReqBo extends BaseEntity {
+
+ private Long bizId;
+
+ @NotNull(message = "员工ID不能为空")
+ private Long empId;
+
+ @NotBlank(message = "请假类型不能为空")
+ private String leaveType;
+
+ @NotNull(message = "开始时间不能为空")
+ @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSX", timezone = "GMT+8")
+ private Date startTime;
+
+ @NotNull(message = "结束时间不能为空")
+ @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSX", timezone = "GMT+8")
+ private Date endTime;
+
+ @NotNull(message = "时长不能为空")
+ private java.math.BigDecimal hours;
+
+ private String reason;
+ private String status;
+
+ /**
+ * 流程模板ID(前端选择模板流程时传入)。
+ *
+ * 不传则后端按 bizType 自动选择启用的最新版本模板;
+ * 若也未配置模板,则可通过 manualAssigneeUserId 走一次性审批。
+ */
+ private Long tplId;
+
+ // 无模板时,自选审批人 userId
+ private Long manualAssigneeUserId;
+
+ private String accessoryApplyIds;
+ private String accessoryReceiptIds;
+ private String remark;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmPayPlanBo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmPayPlanBo.java
new file mode 100644
index 0000000..1d4f5c0
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmPayPlanBo.java
@@ -0,0 +1,23 @@
+package com.ruoyi.hrm.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import java.math.BigDecimal;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class HrmPayPlanBo extends BaseEntity {
+
+ private Long planId;
+
+ @NotBlank(message = "方案名称不能为空")
+ private String planName;
+
+ private BigDecimal baseSalary;
+ private String allowanceJson;
+ private String formulaJson;
+ private String remark;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmPayRunBo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmPayRunBo.java
new file mode 100644
index 0000000..7fd1237
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmPayRunBo.java
@@ -0,0 +1,22 @@
+package com.ruoyi.hrm.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class HrmPayRunBo extends BaseEntity {
+
+ private Long runId;
+
+ @NotBlank(message = "核算周期不能为空")
+ private String period;
+
+ private String status;
+ private Long planId;
+ private String remark;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmPayslipBo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmPayslipBo.java
new file mode 100644
index 0000000..36c0dce
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmPayslipBo.java
@@ -0,0 +1,27 @@
+package com.ruoyi.hrm.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class HrmPayslipBo extends BaseEntity {
+
+ private Long slipId;
+
+ @NotNull(message = "批次ID不能为空")
+ private Long runId;
+
+ @NotNull(message = "员工ID不能为空")
+ private Long empId;
+
+ private BigDecimal amountGross;
+ private BigDecimal amountNet;
+ private String itemsJson;
+ private String status;
+ private String remark;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmPunchBo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmPunchBo.java
new file mode 100644
index 0000000..381dfc3
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmPunchBo.java
@@ -0,0 +1,26 @@
+package com.ruoyi.hrm.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class HrmPunchBo extends BaseEntity {
+
+ private Long punchId;
+
+ @NotNull(message = "员工ID不能为空")
+ private Long empId;
+
+ @NotNull(message = "打卡时间不能为空")
+ private Date punchTime;
+
+ private String source;
+ private String location;
+ private String deviceId;
+ private String remark;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmReimburseReqBo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmReimburseReqBo.java
new file mode 100644
index 0000000..7e47f33
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmReimburseReqBo.java
@@ -0,0 +1,39 @@
+package com.ruoyi.hrm.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class HrmReimburseReqBo extends BaseEntity {
+
+ private Long bizId;
+
+ @NotNull(message = "员工ID不能为空")
+ private Long empId;
+
+ private String reimburseType;
+
+ @NotNull(message = "报销总金额不能为空")
+ private BigDecimal totalAmount;
+
+ private String reason;
+
+ private String status;
+
+ // 无模板时,自选审批人 userId
+ private Long manualAssigneeUserId;
+
+ /** 报销单据附件oss_id列表(CSV) */
+ private String accessoryApplyIds;
+
+ /** 回执附件oss_id列表(CSV) */
+ private String accessoryReceiptIds;
+
+ private String remark;
+}
+
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmScheduleBo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmScheduleBo.java
new file mode 100644
index 0000000..2e0419b
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmScheduleBo.java
@@ -0,0 +1,26 @@
+package com.ruoyi.hrm.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class HrmScheduleBo extends BaseEntity {
+
+ private Long schedId;
+
+ @NotNull(message = "员工ID不能为空")
+ private Long empId;
+
+ @NotNull(message = "工作日期不能为空")
+ private Date workDate;
+
+ @NotNull(message = "班次ID不能为空")
+ private Long shiftId;
+
+ private String remark;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmSealReqBo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmSealReqBo.java
new file mode 100644
index 0000000..57e580a
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmSealReqBo.java
@@ -0,0 +1,62 @@
+package com.ruoyi.hrm.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 用印申请 Bo
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class HrmSealReqBo extends BaseEntity {
+
+ /** 业务ID(编辑/审批时必填) */
+ private Long bizId;
+
+ /** 申请人ID */
+ @NotNull(message = "申请人不能为空")
+ private Long empId;
+
+ /** 用印类型 */
+ @NotBlank(message = "用印类型不能为空")
+ private String sealType;
+
+ /** 用途说明 */
+ private String purpose;
+
+ /** 申请材料附件ID列表(CSV,对应sys_oss) */
+ private String applyFileIds;
+
+ /** 是否需要回执 1是0否 */
+ private Integer receiptRequired;
+
+ /** 备注 */
+ private String remark;
+
+ /** 状态 draft/running/approved/rejected/canceled */
+ private String status;
+
+ /** 关联流程模板ID(旧字段,兼容历史前端/代码) */
+ private Long flowTplId;
+
+ /**
+ * 流程模板ID(新字段,前端选择模板流程时传入)。
+ * 优先级高于 flowTplId。
+ */
+ private Long tplId;
+
+ /**
+ * 手动选择的审批人ID(前端选择手动审批时传入)。
+ */
+ private Long manualAssigneeUserId;
+
+ /** 流程发起人ID(可选,不填可由服务侧取当前登录人) */
+ private Long startUserId;
+
+ /** 提交流程时的表单内容JSON(可选) */
+ private String contentJson;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmSealStampBo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmSealStampBo.java
new file mode 100644
index 0000000..14115a7
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmSealStampBo.java
@@ -0,0 +1,98 @@
+package com.ruoyi.hrm.domain.bo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonSetter;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 盖章命令(Java/Python 坐标统一使用 px)
+ */
+@Getter
+@Setter
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@JsonInclude(JsonInclude.Include.ALWAYS)
+public class HrmSealStampBo {
+
+ /** 待盖章 PDF 的 OSS 完整 URL */
+ @NotBlank(message = "待盖章文件地址不能为空")
+ @JsonProperty("targetFileUrl")
+ private String targetFileUrl;
+
+ /** 章图片 OSS 完整 URL(透明 PNG/JPG) */
+ @NotBlank(message = "章图片地址不能为空")
+ @JsonProperty("stampImageUrl")
+ private String stampImageUrl;
+
+ /** 页码(从1开始) */
+ @NotNull
+ @Min(1)
+ @JsonProperty("pageNo")
+ private Integer pageNo;
+
+ /** 左下角 X 坐标(px) */
+ @NotNull
+ @Min(0)
+ @JsonProperty("xPx")
+ @JsonInclude(JsonInclude.Include.ALWAYS)
+ @Setter(lombok.AccessLevel.NONE) // 禁用 Lombok 生成 setter,使用手动 setter
+ private Integer xPx;
+
+ /** 左下角 Y 坐标(px) */
+ @NotNull
+ @Min(0)
+ @JsonProperty("yPx")
+ @JsonInclude(JsonInclude.Include.ALWAYS)
+ @Setter(lombok.AccessLevel.NONE) // 禁用 Lombok 生成 setter,使用手动 setter
+ private Integer yPx;
+
+ /** 盖章宽度(px,可选) */
+ @Min(1)
+ @JsonProperty("widthPx")
+ private Integer widthPx;
+
+ /** 盖章高度(px,可选) */
+ @Min(1)
+ @JsonProperty("heightPx")
+ private Integer heightPx;
+
+ /**
+ * 前端渲染的 viewport 宽度(像素):用于把前端点击坐标换算成 PDFBox 坐标(pt)。
+ * 注意:这不是 PDF 页面原始宽度,而是 pdf.js 按 scale 渲染到 canvas 的宽度。
+ */
+ @Min(1)
+ @JsonProperty("viewportWidth")
+ private Integer viewportWidth;
+
+ /** 前端渲染的 viewport 高度(像素):用于坐标换算 */
+ @Min(1)
+ @JsonProperty("viewportHeight")
+ private Integer viewportHeight;
+
+ /**
+ * 手动添加 setter 方法,确保 Jackson 能够正确映射 yPx 字段
+ * Lombok 生成的 setYPx() 可能与 Jackson 的字段名映射不匹配
+ */
+ @JsonSetter("yPx")
+ public void setYPx(Integer yPx) {
+ this.yPx = yPx;
+ }
+
+ /**
+ * 手动添加 setter 方法,确保 Jackson 能够正确映射 xPx 字段
+ */
+ @JsonSetter("xPx")
+ public void setXPx(Integer xPx) {
+ this.xPx = xPx;
+ }
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmShiftBo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmShiftBo.java
new file mode 100644
index 0000000..8377134
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmShiftBo.java
@@ -0,0 +1,27 @@
+package com.ruoyi.hrm.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import java.time.LocalTime;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class HrmShiftBo extends BaseEntity {
+
+ private Long shiftId;
+
+ @NotBlank(message = "班次编码不能为空")
+ private String shiftCode;
+
+ @NotBlank(message = "班次名称不能为空")
+ private String shiftName;
+
+ private LocalTime startTime;
+ private LocalTime endTime;
+ private Integer breakMinutes;
+ private Integer isNight;
+ private String remark;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmStatSnapshotBo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmStatSnapshotBo.java
new file mode 100644
index 0000000..fdbc8f4
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmStatSnapshotBo.java
@@ -0,0 +1,29 @@
+package com.ruoyi.hrm.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class HrmStatSnapshotBo extends BaseEntity {
+
+ private Long snapId;
+
+ @NotNull(message = "统计日期不能为空")
+ private Date statDate;
+
+ @NotBlank(message = "指标类型不能为空")
+ private String statType;
+
+ private String dimJson;
+
+ private BigDecimal valueNum;
+
+ private String remark;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmTravelReqBo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmTravelReqBo.java
new file mode 100644
index 0000000..9a74110
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmTravelReqBo.java
@@ -0,0 +1,43 @@
+package com.ruoyi.hrm.domain.bo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class HrmTravelReqBo extends BaseEntity {
+
+ private Long bizId;
+
+ @NotNull(message = "员工ID不能为空")
+ private Long empId;
+
+ @NotNull(message = "开始时间不能为空")
+ @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSX", timezone = "GMT+8")
+ private Date startTime;
+
+ @NotNull(message = "结束时间不能为空")
+ @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSX", timezone = "GMT+8")
+ private Date endTime;
+
+ private String travelType;
+ private String destination;
+ private String reason;
+ private String status;
+
+ // 无模板时,自选审批人 userId
+ private Long manualAssigneeUserId;
+
+ private String accessoryApplyIds;
+ private String accessoryReceiptIds;
+ private String payeeName;
+ private Double estimatedCost;
+ private String bankName;
+ private String bankAccount;
+ private String remark;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmAttendCalcVo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmAttendCalcVo.java
new file mode 100644
index 0000000..3cca6ad
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmAttendCalcVo.java
@@ -0,0 +1,39 @@
+package com.ruoyi.hrm.domain.vo;
+
+import com.ruoyi.common.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class HrmAttendCalcVo implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Excel(name = "考勤结果ID")
+ private Long calcId;
+ @Excel(name = "员工ID")
+ private Long empId;
+ @Excel(name = "工作日期", width = 20, dateFormat = "yyyy-MM-dd")
+ private Date workDate;
+ @Excel(name = "班次ID")
+ private Long shiftId;
+ @Excel(name = "状态")
+ private String status;
+ @Excel(name = "出勤分钟")
+ private Integer workMinutes;
+ @Excel(name = "迟到分钟")
+ private Integer lateMinutes;
+ @Excel(name = "早退分钟")
+ private Integer earlyMinutes;
+ @Excel(name = "加班分钟")
+ private Integer otMinutes;
+ @Excel(name = "请假分钟JSON")
+ private String leaveMinutesJson;
+ @Excel(name = "备注")
+ private String remark;
+ private String createBy;
+ private Date createTime;
+ private String updateBy;
+ private Date updateTime;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmCertificateVo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmCertificateVo.java
new file mode 100644
index 0000000..b64a702
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmCertificateVo.java
@@ -0,0 +1,40 @@
+package com.ruoyi.hrm.domain.vo;
+
+import com.ruoyi.common.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+@Data
+public class HrmCertificateVo implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Excel(name = "证书ID")
+ private Long certId;
+ @Excel(name = "员工ID")
+ private Long empId;
+ @Excel(name = "证书名称")
+ private String certName;
+ @Excel(name = "证书编号")
+ private String certNo;
+ @Excel(name = "颁发机构")
+ private String issuedBy;
+ @Excel(name = "有效期开始", width = 20, dateFormat = "yyyy-MM-dd")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date validFrom;
+ @Excel(name = "有效期结束", width = 20, dateFormat = "yyyy-MM-dd")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date validTo;
+ @Excel(name = "备注")
+ private String remark;
+ /**
+ * 证书附件 fileIds(逗号分隔的 OSS ID)
+ */
+ private String fileIds;
+ private String createBy;
+ private Date createTime;
+ private String updateBy;
+ private Date updateTime;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmContractVo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmContractVo.java
new file mode 100644
index 0000000..7d89502
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmContractVo.java
@@ -0,0 +1,40 @@
+package com.ruoyi.hrm.domain.vo;
+
+import com.ruoyi.common.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+@Data
+public class HrmContractVo implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Excel(name = "合同ID")
+ private Long contractId;
+ @Excel(name = "员工ID")
+ private Long empId;
+ @Excel(name = "合同编号")
+ private String contractNo;
+ @Excel(name = "合同类型")
+ private String contractType;
+ @Excel(name = "开始日期", width = 20, dateFormat = "yyyy-MM-dd")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date startDate;
+ @Excel(name = "结束日期", width = 20, dateFormat = "yyyy-MM-dd")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date endDate;
+ @Excel(name = "状态")
+ private String status;
+ @Excel(name = "备注")
+ private String remark;
+ /**
+ * 合同附件 fileIds(逗号分隔的 OSS ID)
+ */
+ private String fileIds;
+ private String createBy;
+ private Date createTime;
+ private String updateBy;
+ private Date updateTime;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmEmpOrgPositionVo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmEmpOrgPositionVo.java
new file mode 100644
index 0000000..b2a25af
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmEmpOrgPositionVo.java
@@ -0,0 +1,47 @@
+package com.ruoyi.hrm.domain.vo;
+
+import com.ruoyi.common.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class HrmEmpOrgPositionVo implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Excel(name = "关系ID")
+ private Long relId;
+
+ @Excel(name = "员工ID")
+ private Long empId;
+
+ @Excel(name = "部门ID")
+ private Long deptId;
+
+ /** 部门名称 */
+ private String deptName;
+
+ @Excel(name = "岗位ID")
+ private Long postId;
+
+ /** 岗位名称 */
+ private String postName;
+
+ @Excel(name = "是否主岗")
+ private Integer isPrimary;
+
+ @Excel(name = "开始日期")
+ private Date startDate;
+
+ @Excel(name = "结束日期")
+ private Date endDate;
+
+ @Excel(name = "备注")
+ private String remark;
+
+ private String createBy;
+ private Date createTime;
+ private String updateBy;
+ private Date updateTime;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmEmployeeVo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmEmployeeVo.java
new file mode 100644
index 0000000..9ab7b9c
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmEmployeeVo.java
@@ -0,0 +1,65 @@
+package com.ruoyi.hrm.domain.vo;
+
+import com.ruoyi.common.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class HrmEmployeeVo implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Excel(name = "员工ID")
+ private Long empId;
+
+ @Excel(name = "用户ID")
+ private Long userId;
+
+ @Excel(name = "工号")
+ private String empNo;
+
+ @Excel(name = "姓名")
+ private String empName;
+
+ @Excel(name = "性别")
+ private String gender;
+
+ @Excel(name = "手机号")
+ private String mobile;
+
+ @Excel(name = "邮箱")
+ private String email;
+
+ @Excel(name = "证件号码")
+ private String idNo;
+
+ @Excel(name = "入职日期")
+ private Date hireDate;
+
+ @Excel(name = "雇佣类型")
+ private String employmentType;
+
+ @Excel(name = "在职状态")
+ private String status;
+
+ @Excel(name = "主部门ID")
+ private Long deptId;
+
+ /** 主部门名称 */
+ private String deptName;
+
+ @Excel(name = "主岗位ID")
+ private Long postId;
+
+ /** 主岗位名称 */
+ private String postName;
+
+ @Excel(name = "备注")
+ private String remark;
+
+ private String createBy;
+ private Date createTime;
+ private String updateBy;
+ private Date updateTime;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFlowActionVo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFlowActionVo.java
new file mode 100644
index 0000000..6b49bdc
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFlowActionVo.java
@@ -0,0 +1,29 @@
+package com.ruoyi.hrm.domain.vo;
+
+import com.ruoyi.common.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class HrmFlowActionVo implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Excel(name = "操作ID")
+ private Long actionId;
+ @Excel(name = "任务ID")
+ private Long taskId;
+ @Excel(name = "实例ID")
+ private Long instId;
+ @Excel(name = "动作")
+ private String action;
+ @Excel(name = "说明")
+ private String remark;
+ @Excel(name = "操作人")
+ private Long actionUserId;
+ private String createBy;
+ private Date createTime;
+ private String updateBy;
+ private Date updateTime;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFlowCcVo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFlowCcVo.java
new file mode 100644
index 0000000..5a2cdc1
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFlowCcVo.java
@@ -0,0 +1,27 @@
+package com.ruoyi.hrm.domain.vo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class HrmFlowCcVo extends BaseEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ private Long ccId;
+ private Long instId;
+ private String bizType;
+ private Long bizId;
+ private String bizTypeName;
+ private String bizTitle;
+ private Long nodeId;
+ private String nodeName;
+ private Integer readFlag;
+ private Long ccUserId;
+ private Long fromUserId;
+ private String remark;
+ private Date createTime;
+}
+
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFlowInstanceVo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFlowInstanceVo.java
new file mode 100644
index 0000000..c270bbc
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFlowInstanceVo.java
@@ -0,0 +1,42 @@
+package com.ruoyi.hrm.domain.vo;
+
+import com.ruoyi.common.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class HrmFlowInstanceVo implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Excel(name = "实例ID")
+ private Long instId;
+ @Excel(name = "模板ID")
+ private Long tplId;
+ @Excel(name = "业务类型")
+ private String bizType;
+ @Excel(name = "业务ID")
+ private Long bizId;
+ @Excel(name = "状态")
+ private String status;
+ @Excel(name = "当前节点ID")
+ private Long currentNodeId;
+ @Excel(name = "发起人ID")
+ private Long startUserId;
+ @Excel(name = "备注")
+ private String remark;
+
+ /** 列表展示字段(联查业务表) */
+ private String bizTitle;
+ private Date startTime;
+ private Date endTime;
+ private BigDecimal hours;
+ private String procStatus;
+
+ private String createBy;
+ private Date createTime;
+ private String updateBy;
+ private Date updateTime;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFlowNodeVo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFlowNodeVo.java
new file mode 100644
index 0000000..1074b70
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFlowNodeVo.java
@@ -0,0 +1,33 @@
+package com.ruoyi.hrm.domain.vo;
+
+import com.ruoyi.common.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class HrmFlowNodeVo implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Excel(name = "节点ID")
+ private Long nodeId;
+ @Excel(name = "模板ID")
+ private Long tplId;
+ @Excel(name = "顺序")
+ private Integer orderNo;
+ @Excel(name = "节点类型")
+ private String nodeType;
+ @Excel(name = "审批人规则")
+ private String approverRule;
+ @Excel(name = "审批人取值")
+ private String approverValue;
+ @Excel(name = "字段权限")
+ private String fieldPerm;
+ @Excel(name = "备注")
+ private String remark;
+ private String createBy;
+ private Date createTime;
+ private String updateBy;
+ private Date updateTime;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFlowTaskVo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFlowTaskVo.java
new file mode 100644
index 0000000..826d454
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFlowTaskVo.java
@@ -0,0 +1,44 @@
+package com.ruoyi.hrm.domain.vo;
+
+import com.ruoyi.common.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.Map;
+
+@Data
+public class HrmFlowTaskVo implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Excel(name = "任务ID")
+ private Long taskId;
+ @Excel(name = "实例ID")
+ private Long instId;
+ @Excel(name = "节点ID")
+ private Long nodeId;
+ @Excel(name = "处理人")
+ private Long assigneeUserId;
+ @Excel(name = "状态")
+ private String status;
+ @Excel(name = "到期时间")
+ private Date expireTime;
+ @Excel(name = "备注")
+ private String remark;
+
+ /** 业务类型:leave/travel/seal/reimburse */
+ private String bizType;
+ /** 业务ID */
+ private Long bizId;
+
+ /**
+ * 业务摘要数据(审批中心展示用),由后端联查后回填。
+ * key/字段根据不同 bizType 不同。
+ */
+ private Map bizData;
+
+ private String createBy;
+ private Date createTime;
+ private String updateBy;
+ private Date updateTime;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFlowTemplateVo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFlowTemplateVo.java
new file mode 100644
index 0000000..824392a
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFlowTemplateVo.java
@@ -0,0 +1,30 @@
+package com.ruoyi.hrm.domain.vo;
+
+import com.ruoyi.common.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class HrmFlowTemplateVo implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Excel(name = "模板ID")
+ private Long tplId;
+ @Excel(name = "模板编码")
+ private String tplCode;
+ @Excel(name = "模板名称")
+ private String tplName;
+ @Excel(name = "业务类型")
+ private String bizType;
+ @Excel(name = "版本")
+ private Integer version;
+ @Excel(name = "是否启用")
+ private Integer enabled;
+ private String remark;
+ private String createBy;
+ private Date createTime;
+ private String updateBy;
+ private Date updateTime;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFormDataVo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFormDataVo.java
new file mode 100644
index 0000000..0d31312
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFormDataVo.java
@@ -0,0 +1,27 @@
+package com.ruoyi.hrm.domain.vo;
+
+import com.ruoyi.common.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class HrmFormDataVo implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Excel(name = "表单ID")
+ private Long formId;
+ @Excel(name = "业务类型")
+ private String bizType;
+ @Excel(name = "业务ID")
+ private Long bizId;
+ @Excel(name = "表单内容")
+ private String contentJson;
+ @Excel(name = "备注")
+ private String remark;
+ private String createBy;
+ private Date createTime;
+ private String updateBy;
+ private Date updateTime;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmHeadcountPlanVo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmHeadcountPlanVo.java
new file mode 100644
index 0000000..1f0c9ce
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmHeadcountPlanVo.java
@@ -0,0 +1,38 @@
+package com.ruoyi.hrm.domain.vo;
+
+import com.ruoyi.common.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class HrmHeadcountPlanVo implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Excel(name = "编制ID")
+ private Long planId;
+
+ @Excel(name = "部门ID")
+ private Long deptId;
+
+ @Excel(name = "岗位ID")
+ private Long postId;
+
+ @Excel(name = "年份")
+ private Integer year;
+
+ @Excel(name = "月份")
+ private Integer month;
+
+ @Excel(name = "编制人数")
+ private Integer budgetCount;
+
+ @Excel(name = "备注")
+ private String remark;
+
+ private String createBy;
+ private Date createTime;
+ private String updateBy;
+ private Date updateTime;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmLeaveBalanceVo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmLeaveBalanceVo.java
new file mode 100644
index 0000000..2466db0
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmLeaveBalanceVo.java
@@ -0,0 +1,30 @@
+package com.ruoyi.hrm.domain.vo;
+
+import com.ruoyi.common.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class HrmLeaveBalanceVo implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Excel(name = "余额ID")
+ private Long balId;
+ @Excel(name = "员工ID")
+ private Long empId;
+ @Excel(name = "假期类型")
+ private String leaveType;
+ @Excel(name = "余额小时")
+ private BigDecimal balanceHours;
+ @Excel(name = "到期日", width = 20, dateFormat = "yyyy-MM-dd")
+ private Date expireDate;
+ @Excel(name = "备注")
+ private String remark;
+ private String createBy;
+ private Date createTime;
+ private String updateBy;
+ private Date updateTime;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmLeaveReqVo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmLeaveReqVo.java
new file mode 100644
index 0000000..edbf70f
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmLeaveReqVo.java
@@ -0,0 +1,40 @@
+package com.ruoyi.hrm.domain.vo;
+
+import com.ruoyi.common.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class HrmLeaveReqVo implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Excel(name = "业务ID")
+ private Long bizId;
+ @Excel(name = "员工ID")
+ private Long empId;
+ @Excel(name = "请假类型")
+ private String leaveType;
+ @Excel(name = "开始时间", width = 25, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ private Date startTime;
+ @Excel(name = "结束时间", width = 25, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ private Date endTime;
+ @Excel(name = "时长(小时)")
+ private BigDecimal hours;
+ @Excel(name = "原因")
+ private String reason;
+ @Excel(name = "状态")
+ private String status;
+ @Excel(name = "申请附件")
+ private String accessoryApplyIds;
+ @Excel(name = "回执附件")
+ private String accessoryReceiptIds;
+ @Excel(name = "备注")
+ private String remark;
+ private String createBy;
+ private Date createTime;
+ private String updateBy;
+ private Date updateTime;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmPayPlanVo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmPayPlanVo.java
new file mode 100644
index 0000000..5ad0aca
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmPayPlanVo.java
@@ -0,0 +1,30 @@
+package com.ruoyi.hrm.domain.vo;
+
+import com.ruoyi.common.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class HrmPayPlanVo implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Excel(name = "方案ID")
+ private Long planId;
+ @Excel(name = "方案名称")
+ private String planName;
+ @Excel(name = "基础工资")
+ private BigDecimal baseSalary;
+ @Excel(name = "津贴配置JSON")
+ private String allowanceJson;
+ @Excel(name = "公式配置JSON")
+ private String formulaJson;
+ @Excel(name = "备注")
+ private String remark;
+ private String createBy;
+ private Date createTime;
+ private String updateBy;
+ private Date updateTime;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmPayRunVo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmPayRunVo.java
new file mode 100644
index 0000000..a170202
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmPayRunVo.java
@@ -0,0 +1,27 @@
+package com.ruoyi.hrm.domain.vo;
+
+import com.ruoyi.common.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class HrmPayRunVo implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Excel(name = "批次ID")
+ private Long runId;
+ @Excel(name = "核算周期")
+ private String period;
+ @Excel(name = "状态")
+ private String status;
+ @Excel(name = "方案ID")
+ private Long planId;
+ @Excel(name = "备注")
+ private String remark;
+ private String createBy;
+ private Date createTime;
+ private String updateBy;
+ private Date updateTime;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmPayslipVo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmPayslipVo.java
new file mode 100644
index 0000000..fd54c91
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmPayslipVo.java
@@ -0,0 +1,34 @@
+package com.ruoyi.hrm.domain.vo;
+
+import com.ruoyi.common.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class HrmPayslipVo implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Excel(name = "工资条ID")
+ private Long slipId;
+ @Excel(name = "批次ID")
+ private Long runId;
+ @Excel(name = "员工ID")
+ private Long empId;
+ @Excel(name = "应发金额")
+ private BigDecimal amountGross;
+ @Excel(name = "实发金额")
+ private BigDecimal amountNet;
+ @Excel(name = "工资项JSON")
+ private String itemsJson;
+ @Excel(name = "状态")
+ private String status;
+ @Excel(name = "备注")
+ private String remark;
+ private String createBy;
+ private Date createTime;
+ private String updateBy;
+ private Date updateTime;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmPunchVo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmPunchVo.java
new file mode 100644
index 0000000..f56d04e
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmPunchVo.java
@@ -0,0 +1,31 @@
+package com.ruoyi.hrm.domain.vo;
+
+import com.ruoyi.common.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class HrmPunchVo implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Excel(name = "打卡ID")
+ private Long punchId;
+ @Excel(name = "员工ID")
+ private Long empId;
+ @Excel(name = "打卡时间", width = 25, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ private Date punchTime;
+ @Excel(name = "来源")
+ private String source;
+ @Excel(name = "位置")
+ private String location;
+ @Excel(name = "设备ID")
+ private String deviceId;
+ @Excel(name = "备注")
+ private String remark;
+ private String createBy;
+ private Date createTime;
+ private String updateBy;
+ private Date updateTime;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmReimburseReqVo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmReimburseReqVo.java
new file mode 100644
index 0000000..c943411
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmReimburseReqVo.java
@@ -0,0 +1,46 @@
+package com.ruoyi.hrm.domain.vo;
+
+import com.ruoyi.common.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class HrmReimburseReqVo implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Excel(name = "业务ID")
+ private Long bizId;
+
+ @Excel(name = "员工ID")
+ private Long empId;
+
+ @Excel(name = "报销类型")
+ private String reimburseType;
+
+ @Excel(name = "报销总金额")
+ private BigDecimal totalAmount;
+
+ @Excel(name = "报销事由")
+ private String reason;
+
+ @Excel(name = "状态")
+ private String status;
+
+ @Excel(name = "报销单据附件")
+ private String accessoryApplyIds;
+
+ @Excel(name = "回执附件")
+ private String accessoryReceiptIds;
+
+ @Excel(name = "备注")
+ private String remark;
+
+ private String createBy;
+ private Date createTime;
+ private String updateBy;
+ private Date updateTime;
+}
+
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmScheduleVo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmScheduleVo.java
new file mode 100644
index 0000000..d210249
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmScheduleVo.java
@@ -0,0 +1,27 @@
+package com.ruoyi.hrm.domain.vo;
+
+import com.ruoyi.common.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class HrmScheduleVo implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Excel(name = "排班ID")
+ private Long schedId;
+ @Excel(name = "员工ID")
+ private Long empId;
+ @Excel(name = "工作日期", width = 20, dateFormat = "yyyy-MM-dd")
+ private Date workDate;
+ @Excel(name = "班次ID")
+ private Long shiftId;
+ @Excel(name = "备注")
+ private String remark;
+ private String createBy;
+ private Date createTime;
+ private String updateBy;
+ private Date updateTime;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmSealReqVo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmSealReqVo.java
new file mode 100644
index 0000000..d84af79
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmSealReqVo.java
@@ -0,0 +1,50 @@
+package com.ruoyi.hrm.domain.vo;
+
+import com.ruoyi.common.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 用印申请 VO
+ */
+@Data
+public class HrmSealReqVo implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Excel(name = "业务ID")
+ private Long bizId;
+
+ @Excel(name = "申请人ID")
+ private Long empId;
+
+ @Excel(name = "用印类型")
+ private String sealType;
+
+ @Excel(name = "用途说明")
+ private String purpose;
+
+ @Excel(name = "申请材料附件ID列表")
+ private String applyFileIds;
+
+ @Excel(name = "是否需要回执")
+ private Integer receiptRequired;
+
+ @Excel(name = "回执状态")
+ private String receiptStatus;
+
+ @Excel(name = "回执附件ID列表")
+ private String receiptFileIds;
+
+ @Excel(name = "状态")
+ private String status;
+
+ @Excel(name = "备注")
+ private String remark;
+
+ private String createBy;
+ private Date createTime;
+ private String updateBy;
+ private Date updateTime;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmShiftVo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmShiftVo.java
new file mode 100644
index 0000000..d67ff6b
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmShiftVo.java
@@ -0,0 +1,34 @@
+package com.ruoyi.hrm.domain.vo;
+
+import com.ruoyi.common.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalTime;
+import java.util.Date;
+
+@Data
+public class HrmShiftVo implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Excel(name = "班次ID")
+ private Long shiftId;
+ @Excel(name = "班次编码")
+ private String shiftCode;
+ @Excel(name = "班次名称")
+ private String shiftName;
+ @Excel(name = "上班时间")
+ private LocalTime startTime;
+ @Excel(name = "下班时间")
+ private LocalTime endTime;
+ @Excel(name = "休息分钟")
+ private Integer breakMinutes;
+ @Excel(name = "是否夜班")
+ private Integer isNight;
+ @Excel(name = "备注")
+ private String remark;
+ private String createBy;
+ private Date createTime;
+ private String updateBy;
+ private Date updateTime;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmStatSnapshotVo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmStatSnapshotVo.java
new file mode 100644
index 0000000..40f7357
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmStatSnapshotVo.java
@@ -0,0 +1,30 @@
+package com.ruoyi.hrm.domain.vo;
+
+import com.ruoyi.common.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class HrmStatSnapshotVo implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Excel(name = "快照ID")
+ private Long snapId;
+ @Excel(name = "统计日期", width = 20, dateFormat = "yyyy-MM-dd")
+ private Date statDate;
+ @Excel(name = "指标类型")
+ private String statType;
+ @Excel(name = "维度JSON")
+ private String dimJson;
+ @Excel(name = "数值")
+ private BigDecimal valueNum;
+ @Excel(name = "备注")
+ private String remark;
+ private String createBy;
+ private Date createTime;
+ private Date updateTime;
+ private String updateBy;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmTravelReqVo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmTravelReqVo.java
new file mode 100644
index 0000000..542b9a5
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmTravelReqVo.java
@@ -0,0 +1,47 @@
+package com.ruoyi.hrm.domain.vo;
+
+import com.ruoyi.common.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class HrmTravelReqVo implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Excel(name = "业务ID")
+ private Long bizId;
+ @Excel(name = "员工ID")
+ private Long empId;
+ @Excel(name = "开始时间", width = 25, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ private Date startTime;
+ @Excel(name = "结束时间", width = 25, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ private Date endTime;
+ @Excel(name = "出差类型")
+ private String travelType;
+ @Excel(name = "目的地")
+ private String destination;
+ @Excel(name = "原因")
+ private String reason;
+ @Excel(name = "状态")
+ private String status;
+ @Excel(name = "申请附件")
+ private String accessoryApplyIds;
+ @Excel(name = "回执附件")
+ private String accessoryReceiptIds;
+ @Excel(name = "收款人")
+ private String payeeName;
+ @Excel(name = "预估费用")
+ private Double estimatedCost;
+ @Excel(name = "开户行")
+ private String bankName;
+ @Excel(name = "银行账号")
+ private String bankAccount;
+ @Excel(name = "备注")
+ private String remark;
+ private String createBy;
+ private Date createTime;
+ private String updateBy;
+ private Date updateTime;
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmAttendCalcMapper.java b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmAttendCalcMapper.java
new file mode 100644
index 0000000..6a6f232
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmAttendCalcMapper.java
@@ -0,0 +1,8 @@
+package com.ruoyi.hrm.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.hrm.domain.HrmAttendCalc;
+import com.ruoyi.hrm.domain.vo.HrmAttendCalcVo;
+
+public interface HrmAttendCalcMapper extends BaseMapperPlus {
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmCertificateMapper.java b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmCertificateMapper.java
new file mode 100644
index 0000000..cb68a69
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmCertificateMapper.java
@@ -0,0 +1,8 @@
+package com.ruoyi.hrm.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.hrm.domain.HrmCertificate;
+import com.ruoyi.hrm.domain.vo.HrmCertificateVo;
+
+public interface HrmCertificateMapper extends BaseMapperPlus {
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmContractMapper.java b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmContractMapper.java
new file mode 100644
index 0000000..694a69e
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmContractMapper.java
@@ -0,0 +1,8 @@
+package com.ruoyi.hrm.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.hrm.domain.HrmContract;
+import com.ruoyi.hrm.domain.vo.HrmContractVo;
+
+public interface HrmContractMapper extends BaseMapperPlus {
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmEmpOrgPositionMapper.java b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmEmpOrgPositionMapper.java
new file mode 100644
index 0000000..c017b4c
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmEmpOrgPositionMapper.java
@@ -0,0 +1,8 @@
+package com.ruoyi.hrm.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.hrm.domain.HrmEmpOrgPosition;
+import com.ruoyi.hrm.domain.vo.HrmEmpOrgPositionVo;
+
+public interface HrmEmpOrgPositionMapper extends BaseMapperPlus {
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmEmployeeMapper.java b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmEmployeeMapper.java
new file mode 100644
index 0000000..2bf8d4f
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmEmployeeMapper.java
@@ -0,0 +1,8 @@
+package com.ruoyi.hrm.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.hrm.domain.HrmEmployee;
+import com.ruoyi.hrm.domain.vo.HrmEmployeeVo;
+
+public interface HrmEmployeeMapper extends BaseMapperPlus {
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmFlowActionMapper.java b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmFlowActionMapper.java
new file mode 100644
index 0000000..6116496
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmFlowActionMapper.java
@@ -0,0 +1,8 @@
+package com.ruoyi.hrm.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.hrm.domain.HrmFlowAction;
+import com.ruoyi.hrm.domain.vo.HrmFlowActionVo;
+
+public interface HrmFlowActionMapper extends BaseMapperPlus {
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmFlowCcMapper.java b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmFlowCcMapper.java
new file mode 100644
index 0000000..f91a517
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmFlowCcMapper.java
@@ -0,0 +1,9 @@
+package com.ruoyi.hrm.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.hrm.domain.HrmFlowCc;
+import com.ruoyi.hrm.domain.vo.HrmFlowCcVo;
+
+public interface HrmFlowCcMapper extends BaseMapperPlus {
+}
+
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmFlowInstanceMapper.java b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmFlowInstanceMapper.java
new file mode 100644
index 0000000..e997774
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmFlowInstanceMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.hrm.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.hrm.domain.HrmFlowInstance;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.hrm.domain.vo.HrmFlowInstanceVo;
+import org.apache.ibatis.annotations.Param;
+
+public interface HrmFlowInstanceMapper extends BaseMapperPlus {
+
+ IPage selectMyInstancePageWithBiz(
+ Page> page,
+ @Param("startUserId") Long startUserId,
+ @Param("bizType") String bizType,
+ @Param("status") String status);
+}
+
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmFlowNodeMapper.java b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmFlowNodeMapper.java
new file mode 100644
index 0000000..9b3bebc
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmFlowNodeMapper.java
@@ -0,0 +1,8 @@
+package com.ruoyi.hrm.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.hrm.domain.HrmFlowNode;
+import com.ruoyi.hrm.domain.vo.HrmFlowNodeVo;
+
+public interface HrmFlowNodeMapper extends BaseMapperPlus {
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmFlowTaskMapper.java b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmFlowTaskMapper.java
new file mode 100644
index 0000000..527ff7d
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmFlowTaskMapper.java
@@ -0,0 +1,8 @@
+package com.ruoyi.hrm.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.hrm.domain.HrmFlowTask;
+import com.ruoyi.hrm.domain.vo.HrmFlowTaskVo;
+
+public interface HrmFlowTaskMapper extends BaseMapperPlus {
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmFlowTemplateMapper.java b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmFlowTemplateMapper.java
new file mode 100644
index 0000000..1436c4a
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmFlowTemplateMapper.java
@@ -0,0 +1,8 @@
+package com.ruoyi.hrm.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.hrm.domain.HrmFlowTemplate;
+import com.ruoyi.hrm.domain.vo.HrmFlowTemplateVo;
+
+public interface HrmFlowTemplateMapper extends BaseMapperPlus {
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmFormDataMapper.java b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmFormDataMapper.java
new file mode 100644
index 0000000..1e0eab7
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmFormDataMapper.java
@@ -0,0 +1,8 @@
+package com.ruoyi.hrm.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.hrm.domain.HrmFormData;
+import com.ruoyi.hrm.domain.vo.HrmFormDataVo;
+
+public interface HrmFormDataMapper extends BaseMapperPlus {
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmHeadcountPlanMapper.java b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmHeadcountPlanMapper.java
new file mode 100644
index 0000000..0fdd6eb
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmHeadcountPlanMapper.java
@@ -0,0 +1,8 @@
+package com.ruoyi.hrm.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.hrm.domain.HrmHeadcountPlan;
+import com.ruoyi.hrm.domain.vo.HrmHeadcountPlanVo;
+
+public interface HrmHeadcountPlanMapper extends BaseMapperPlus {
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmLeaveBalanceMapper.java b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmLeaveBalanceMapper.java
new file mode 100644
index 0000000..8ece332
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmLeaveBalanceMapper.java
@@ -0,0 +1,8 @@
+package com.ruoyi.hrm.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.hrm.domain.HrmLeaveBalance;
+import com.ruoyi.hrm.domain.vo.HrmLeaveBalanceVo;
+
+public interface HrmLeaveBalanceMapper extends BaseMapperPlus {
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmLeaveReqMapper.java b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmLeaveReqMapper.java
new file mode 100644
index 0000000..6c1aed1
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmLeaveReqMapper.java
@@ -0,0 +1,8 @@
+package com.ruoyi.hrm.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.hrm.domain.HrmLeaveReq;
+import com.ruoyi.hrm.domain.vo.HrmLeaveReqVo;
+
+public interface HrmLeaveReqMapper extends BaseMapperPlus {
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmPayPlanMapper.java b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmPayPlanMapper.java
new file mode 100644
index 0000000..3f56808
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmPayPlanMapper.java
@@ -0,0 +1,8 @@
+package com.ruoyi.hrm.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.hrm.domain.HrmPayPlan;
+import com.ruoyi.hrm.domain.vo.HrmPayPlanVo;
+
+public interface HrmPayPlanMapper extends BaseMapperPlus {
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmPayRunMapper.java b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmPayRunMapper.java
new file mode 100644
index 0000000..23803b0
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmPayRunMapper.java
@@ -0,0 +1,8 @@
+package com.ruoyi.hrm.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.hrm.domain.HrmPayRun;
+import com.ruoyi.hrm.domain.vo.HrmPayRunVo;
+
+public interface HrmPayRunMapper extends BaseMapperPlus {
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmPayslipMapper.java b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmPayslipMapper.java
new file mode 100644
index 0000000..145c4bb
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmPayslipMapper.java
@@ -0,0 +1,8 @@
+package com.ruoyi.hrm.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.hrm.domain.HrmPayslip;
+import com.ruoyi.hrm.domain.vo.HrmPayslipVo;
+
+public interface HrmPayslipMapper extends BaseMapperPlus {
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmPunchMapper.java b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmPunchMapper.java
new file mode 100644
index 0000000..4d46028
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmPunchMapper.java
@@ -0,0 +1,8 @@
+package com.ruoyi.hrm.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.hrm.domain.HrmPunch;
+import com.ruoyi.hrm.domain.vo.HrmPunchVo;
+
+public interface HrmPunchMapper extends BaseMapperPlus {
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmReimburseReqMapper.java b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmReimburseReqMapper.java
new file mode 100644
index 0000000..14a130a
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmReimburseReqMapper.java
@@ -0,0 +1,9 @@
+package com.ruoyi.hrm.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.hrm.domain.HrmReimburseReq;
+import com.ruoyi.hrm.domain.vo.HrmReimburseReqVo;
+
+public interface HrmReimburseReqMapper extends BaseMapperPlus {
+}
+
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmScheduleMapper.java b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmScheduleMapper.java
new file mode 100644
index 0000000..b0ab3bf
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmScheduleMapper.java
@@ -0,0 +1,8 @@
+package com.ruoyi.hrm.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.hrm.domain.HrmSchedule;
+import com.ruoyi.hrm.domain.vo.HrmScheduleVo;
+
+public interface HrmScheduleMapper extends BaseMapperPlus {
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmSealReqMapper.java b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmSealReqMapper.java
new file mode 100644
index 0000000..86d8a2e
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmSealReqMapper.java
@@ -0,0 +1,11 @@
+package com.ruoyi.hrm.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.hrm.domain.HrmSealReq;
+import com.ruoyi.hrm.domain.vo.HrmSealReqVo;
+
+/**
+ * 用印申请 Mapper
+ */
+public interface HrmSealReqMapper extends BaseMapperPlus {
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmShiftMapper.java b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmShiftMapper.java
new file mode 100644
index 0000000..6a16afe
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmShiftMapper.java
@@ -0,0 +1,8 @@
+package com.ruoyi.hrm.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.hrm.domain.HrmShift;
+import com.ruoyi.hrm.domain.vo.HrmShiftVo;
+
+public interface HrmShiftMapper extends BaseMapperPlus {
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmStatSnapshotMapper.java b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmStatSnapshotMapper.java
new file mode 100644
index 0000000..2e68efb
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmStatSnapshotMapper.java
@@ -0,0 +1,8 @@
+package com.ruoyi.hrm.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.hrm.domain.HrmStatSnapshot;
+import com.ruoyi.hrm.domain.vo.HrmStatSnapshotVo;
+
+public interface HrmStatSnapshotMapper extends BaseMapperPlus {
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmTravelReqMapper.java b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmTravelReqMapper.java
new file mode 100644
index 0000000..da13b57
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/mapper/HrmTravelReqMapper.java
@@ -0,0 +1,8 @@
+package com.ruoyi.hrm.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.hrm.domain.HrmTravelReq;
+import com.ruoyi.hrm.domain.vo.HrmTravelReqVo;
+
+public interface HrmTravelReqMapper extends BaseMapperPlus {
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmAttendCalcService.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmAttendCalcService.java
new file mode 100644
index 0000000..6ac2187
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmAttendCalcService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.hrm.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.hrm.domain.bo.HrmAttendCalcBo;
+import com.ruoyi.hrm.domain.vo.HrmAttendCalcVo;
+
+import java.util.Collection;
+import java.util.List;
+
+public interface IHrmAttendCalcService {
+
+ HrmAttendCalcVo queryById(Long calcId);
+
+ TableDataInfo queryPageList(HrmAttendCalcBo bo, PageQuery pageQuery);
+
+ List queryList(HrmAttendCalcBo bo);
+
+ Boolean insertByBo(HrmAttendCalcBo bo);
+
+ Boolean updateByBo(HrmAttendCalcBo bo);
+
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmCertificateService.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmCertificateService.java
new file mode 100644
index 0000000..0a7da94
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmCertificateService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.hrm.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.hrm.domain.bo.HrmCertificateBo;
+import com.ruoyi.hrm.domain.vo.HrmCertificateVo;
+
+import java.util.Collection;
+import java.util.List;
+
+public interface IHrmCertificateService {
+
+ HrmCertificateVo queryById(Long certId);
+
+ TableDataInfo queryPageList(HrmCertificateBo bo, PageQuery pageQuery);
+
+ List queryList(HrmCertificateBo bo);
+
+ Boolean insertByBo(HrmCertificateBo bo);
+
+ Boolean updateByBo(HrmCertificateBo bo);
+
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmContractService.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmContractService.java
new file mode 100644
index 0000000..3167dcb
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmContractService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.hrm.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.hrm.domain.bo.HrmContractBo;
+import com.ruoyi.hrm.domain.vo.HrmContractVo;
+
+import java.util.Collection;
+import java.util.List;
+
+public interface IHrmContractService {
+
+ HrmContractVo queryById(Long contractId);
+
+ TableDataInfo queryPageList(HrmContractBo bo, PageQuery pageQuery);
+
+ List queryList(HrmContractBo bo);
+
+ Boolean insertByBo(HrmContractBo bo);
+
+ Boolean updateByBo(HrmContractBo bo);
+
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmEmpOrgPositionService.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmEmpOrgPositionService.java
new file mode 100644
index 0000000..a638728
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmEmpOrgPositionService.java
@@ -0,0 +1,23 @@
+package com.ruoyi.hrm.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.hrm.domain.bo.HrmEmpOrgPositionBo;
+import com.ruoyi.hrm.domain.vo.HrmEmpOrgPositionVo;
+
+import java.util.Collection;
+import java.util.List;
+
+public interface IHrmEmpOrgPositionService {
+ HrmEmpOrgPositionVo queryById(Long relId);
+
+ TableDataInfo queryPageList(HrmEmpOrgPositionBo bo, PageQuery pageQuery);
+
+ List queryList(HrmEmpOrgPositionBo bo);
+
+ Boolean insertByBo(HrmEmpOrgPositionBo bo);
+
+ Boolean updateByBo(HrmEmpOrgPositionBo bo);
+
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmEmployeeService.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmEmployeeService.java
new file mode 100644
index 0000000..9b375a4
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmEmployeeService.java
@@ -0,0 +1,23 @@
+package com.ruoyi.hrm.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.hrm.domain.bo.HrmEmployeeBo;
+import com.ruoyi.hrm.domain.vo.HrmEmployeeVo;
+
+import java.util.Collection;
+import java.util.List;
+
+public interface IHrmEmployeeService {
+ HrmEmployeeVo queryById(Long empId);
+
+ TableDataInfo queryPageList(HrmEmployeeBo bo, PageQuery pageQuery);
+
+ List queryList(HrmEmployeeBo bo);
+
+ Boolean insertByBo(HrmEmployeeBo bo);
+
+ Boolean updateByBo(HrmEmployeeBo bo);
+
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowActionService.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowActionService.java
new file mode 100644
index 0000000..6e2ea50
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowActionService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.hrm.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.hrm.domain.bo.HrmFlowActionBo;
+import com.ruoyi.hrm.domain.vo.HrmFlowActionVo;
+
+import java.util.Collection;
+import java.util.List;
+
+public interface IHrmFlowActionService {
+
+ HrmFlowActionVo queryById(Long actionId);
+
+ TableDataInfo queryPageList(HrmFlowActionBo bo, PageQuery pageQuery);
+
+ List queryList(HrmFlowActionBo bo);
+
+ Boolean insertByBo(HrmFlowActionBo bo);
+
+ Boolean updateByBo(HrmFlowActionBo bo);
+
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowCcService.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowCcService.java
new file mode 100644
index 0000000..9dab1ca
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowCcService.java
@@ -0,0 +1,31 @@
+package com.ruoyi.hrm.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.hrm.domain.bo.HrmFlowCcBo;
+import com.ruoyi.hrm.domain.vo.HrmFlowCcVo;
+
+import java.util.Collection;
+import java.util.List;
+
+public interface IHrmFlowCcService {
+
+ TableDataInfo queryPageList(HrmFlowCcBo bo, PageQuery pageQuery);
+
+ List queryList(HrmFlowCcBo bo);
+
+ Boolean insert(HrmFlowCcBo bo);
+
+ /**
+ * 批量新增抄送
+ */
+ Boolean insertBatch(HrmFlowCcBo bo);
+
+ Boolean deleteByIds(Collection ids);
+
+ /**
+ * 标记已读
+ */
+ Boolean markRead(Long ccId, Long userId);
+}
+
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowInstanceService.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowInstanceService.java
new file mode 100644
index 0000000..8f3458d
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowInstanceService.java
@@ -0,0 +1,34 @@
+package com.ruoyi.hrm.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.hrm.domain.bo.HrmFlowInstanceBo;
+import com.ruoyi.hrm.domain.vo.HrmFlowInstanceVo;
+
+import java.util.Collection;
+import java.util.List;
+
+public interface IHrmFlowInstanceService {
+
+ HrmFlowInstanceVo queryById(Long instId);
+
+ /**
+ * 启动实例并生成首个待办
+ */
+ Long startInstance(com.ruoyi.hrm.domain.bo.HrmFlowStartBo bo);
+
+ TableDataInfo queryPageList(HrmFlowInstanceBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询当前登录用户“我的申请”(我发起的流程实例)分页列表
+ */
+ TableDataInfo queryMyInstancePageList(HrmFlowInstanceBo bo, PageQuery pageQuery);
+
+ List queryList(HrmFlowInstanceBo bo);
+
+ Boolean insertByBo(HrmFlowInstanceBo bo);
+
+ Boolean updateByBo(HrmFlowInstanceBo bo);
+
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowNodeService.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowNodeService.java
new file mode 100644
index 0000000..42b21d4
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowNodeService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.hrm.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.hrm.domain.bo.HrmFlowNodeBo;
+import com.ruoyi.hrm.domain.vo.HrmFlowNodeVo;
+
+import java.util.Collection;
+import java.util.List;
+
+public interface IHrmFlowNodeService {
+
+ HrmFlowNodeVo queryById(Long nodeId);
+
+ TableDataInfo queryPageList(HrmFlowNodeBo bo, PageQuery pageQuery);
+
+ List queryList(HrmFlowNodeBo bo);
+
+ Boolean insertByBo(HrmFlowNodeBo bo);
+
+ Boolean updateByBo(HrmFlowNodeBo bo);
+
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowTaskService.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowTaskService.java
new file mode 100644
index 0000000..514d360
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowTaskService.java
@@ -0,0 +1,49 @@
+package com.ruoyi.hrm.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.hrm.domain.bo.HrmFlowTaskBo;
+import com.ruoyi.hrm.domain.vo.HrmFlowTaskVo;
+
+import java.util.Collection;
+import java.util.List;
+
+public interface IHrmFlowTaskService {
+
+ HrmFlowTaskVo queryById(Long taskId);
+
+ TableDataInfo queryPageList(HrmFlowTaskBo bo, PageQuery pageQuery);
+
+ List queryList(HrmFlowTaskBo bo);
+
+ Boolean insertByBo(HrmFlowTaskBo bo);
+
+ Boolean updateByBo(HrmFlowTaskBo bo);
+
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+
+ /**
+ * 审批通过,可附带盖章指令(仅用印业务)
+ */
+ Boolean approve(Long taskId, Long actionUserId, String remark, com.ruoyi.hrm.domain.bo.HrmSealStampBo stampBo);
+
+ /**
+ * 审批驳回
+ */
+ Boolean reject(Long taskId, Long actionUserId, String remark);
+
+ /**
+ * 撤回/取消
+ */
+ Boolean withdraw(Long taskId, Long actionUserId, String remark);
+
+ /**
+ * 转发/转办当前待办给其他审批人
+ */
+ Boolean transfer(Long taskId, Long newAssigneeUserId, Long actionUserId, String remark);
+
+ /**
+ * 根据业务类型 + 业务ID 查询当前待办任务(pending),用于详情页自动带出 currentTaskId
+ */
+ HrmFlowTaskVo queryTodoByBiz(String bizType, Long bizId, Long assigneeUserId);
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowTemplateService.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowTemplateService.java
new file mode 100644
index 0000000..078cc0c
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowTemplateService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.hrm.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.hrm.domain.bo.HrmFlowTemplateBo;
+import com.ruoyi.hrm.domain.vo.HrmFlowTemplateVo;
+
+import java.util.Collection;
+import java.util.List;
+
+public interface IHrmFlowTemplateService {
+
+ HrmFlowTemplateVo queryById(Long tplId);
+
+ TableDataInfo queryPageList(HrmFlowTemplateBo bo, PageQuery pageQuery);
+
+ List queryList(HrmFlowTemplateBo bo);
+
+ Boolean insertByBo(HrmFlowTemplateBo bo);
+
+ Boolean updateByBo(HrmFlowTemplateBo bo);
+
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFormDataService.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFormDataService.java
new file mode 100644
index 0000000..6c6df14
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFormDataService.java
@@ -0,0 +1,23 @@
+package com.ruoyi.hrm.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.hrm.domain.bo.HrmFormDataBo;
+import com.ruoyi.hrm.domain.vo.HrmFormDataVo;
+
+import java.util.Collection;
+import java.util.List;
+
+public interface IHrmFormDataService {
+ HrmFormDataVo queryById(Long formId);
+
+ TableDataInfo queryPageList(HrmFormDataBo bo, PageQuery pageQuery);
+
+ List queryList(HrmFormDataBo bo);
+
+ Boolean insertByBo(HrmFormDataBo bo);
+
+ Boolean updateByBo(HrmFormDataBo bo);
+
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmHeadcountPlanService.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmHeadcountPlanService.java
new file mode 100644
index 0000000..9c46922
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmHeadcountPlanService.java
@@ -0,0 +1,23 @@
+package com.ruoyi.hrm.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.hrm.domain.bo.HrmHeadcountPlanBo;
+import com.ruoyi.hrm.domain.vo.HrmHeadcountPlanVo;
+
+import java.util.Collection;
+import java.util.List;
+
+public interface IHrmHeadcountPlanService {
+ HrmHeadcountPlanVo queryById(Long planId);
+
+ TableDataInfo queryPageList(HrmHeadcountPlanBo bo, PageQuery pageQuery);
+
+ List queryList(HrmHeadcountPlanBo bo);
+
+ Boolean insertByBo(HrmHeadcountPlanBo bo);
+
+ Boolean updateByBo(HrmHeadcountPlanBo bo);
+
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmLeaveBalanceService.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmLeaveBalanceService.java
new file mode 100644
index 0000000..36559e4
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmLeaveBalanceService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.hrm.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.hrm.domain.bo.HrmLeaveBalanceBo;
+import com.ruoyi.hrm.domain.vo.HrmLeaveBalanceVo;
+
+import java.util.Collection;
+import java.util.List;
+
+public interface IHrmLeaveBalanceService {
+
+ HrmLeaveBalanceVo queryById(Long balId);
+
+ TableDataInfo queryPageList(HrmLeaveBalanceBo bo, PageQuery pageQuery);
+
+ List queryList(HrmLeaveBalanceBo bo);
+
+ Boolean insertByBo(HrmLeaveBalanceBo bo);
+
+ Boolean updateByBo(HrmLeaveBalanceBo bo);
+
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmLeaveReqService.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmLeaveReqService.java
new file mode 100644
index 0000000..4665db3
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmLeaveReqService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.hrm.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.hrm.domain.bo.HrmLeaveReqBo;
+import com.ruoyi.hrm.domain.vo.HrmLeaveReqVo;
+
+import java.util.Collection;
+import java.util.List;
+
+public interface IHrmLeaveReqService {
+
+ HrmLeaveReqVo queryById(Long bizId);
+
+ TableDataInfo queryPageList(HrmLeaveReqBo bo, PageQuery pageQuery);
+
+ List queryList(HrmLeaveReqBo bo);
+
+ Boolean insertByBo(HrmLeaveReqBo bo);
+
+ Boolean updateByBo(HrmLeaveReqBo bo);
+
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmPayPlanService.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmPayPlanService.java
new file mode 100644
index 0000000..72f84c3
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmPayPlanService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.hrm.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.hrm.domain.bo.HrmPayPlanBo;
+import com.ruoyi.hrm.domain.vo.HrmPayPlanVo;
+
+import java.util.Collection;
+import java.util.List;
+
+public interface IHrmPayPlanService {
+
+ HrmPayPlanVo queryById(Long planId);
+
+ TableDataInfo queryPageList(HrmPayPlanBo bo, PageQuery pageQuery);
+
+ List queryList(HrmPayPlanBo bo);
+
+ Boolean insertByBo(HrmPayPlanBo bo);
+
+ Boolean updateByBo(HrmPayPlanBo bo);
+
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmPayRunService.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmPayRunService.java
new file mode 100644
index 0000000..e97a4b6
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmPayRunService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.hrm.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.hrm.domain.bo.HrmPayRunBo;
+import com.ruoyi.hrm.domain.vo.HrmPayRunVo;
+
+import java.util.Collection;
+import java.util.List;
+
+public interface IHrmPayRunService {
+
+ HrmPayRunVo queryById(Long runId);
+
+ TableDataInfo queryPageList(HrmPayRunBo bo, PageQuery pageQuery);
+
+ List queryList(HrmPayRunBo bo);
+
+ Boolean insertByBo(HrmPayRunBo bo);
+
+ Boolean updateByBo(HrmPayRunBo bo);
+
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmPayslipService.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmPayslipService.java
new file mode 100644
index 0000000..ae57d47
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmPayslipService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.hrm.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.hrm.domain.bo.HrmPayslipBo;
+import com.ruoyi.hrm.domain.vo.HrmPayslipVo;
+
+import java.util.Collection;
+import java.util.List;
+
+public interface IHrmPayslipService {
+
+ HrmPayslipVo queryById(Long slipId);
+
+ TableDataInfo queryPageList(HrmPayslipBo bo, PageQuery pageQuery);
+
+ List queryList(HrmPayslipBo bo);
+
+ Boolean insertByBo(HrmPayslipBo bo);
+
+ Boolean updateByBo(HrmPayslipBo bo);
+
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmPunchService.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmPunchService.java
new file mode 100644
index 0000000..f5ac990
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmPunchService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.hrm.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.hrm.domain.bo.HrmPunchBo;
+import com.ruoyi.hrm.domain.vo.HrmPunchVo;
+
+import java.util.Collection;
+import java.util.List;
+
+public interface IHrmPunchService {
+
+ HrmPunchVo queryById(Long punchId);
+
+ TableDataInfo queryPageList(HrmPunchBo bo, PageQuery pageQuery);
+
+ List queryList(HrmPunchBo bo);
+
+ Boolean insertByBo(HrmPunchBo bo);
+
+ Boolean updateByBo(HrmPunchBo bo);
+
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmReimburseReqService.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmReimburseReqService.java
new file mode 100644
index 0000000..7df764a
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmReimburseReqService.java
@@ -0,0 +1,25 @@
+package com.ruoyi.hrm.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.hrm.domain.bo.HrmReimburseReqBo;
+import com.ruoyi.hrm.domain.vo.HrmReimburseReqVo;
+
+import java.util.Collection;
+import java.util.List;
+
+public interface IHrmReimburseReqService {
+
+ HrmReimburseReqVo queryById(Long bizId);
+
+ TableDataInfo queryPageList(HrmReimburseReqBo bo, PageQuery pageQuery);
+
+ List queryList(HrmReimburseReqBo bo);
+
+ Boolean insertByBo(HrmReimburseReqBo bo);
+
+ Boolean updateByBo(HrmReimburseReqBo bo);
+
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
+
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmScheduleService.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmScheduleService.java
new file mode 100644
index 0000000..c2b7e50
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmScheduleService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.hrm.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.hrm.domain.bo.HrmScheduleBo;
+import com.ruoyi.hrm.domain.vo.HrmScheduleVo;
+
+import java.util.Collection;
+import java.util.List;
+
+public interface IHrmScheduleService {
+
+ HrmScheduleVo queryById(Long schedId);
+
+ TableDataInfo queryPageList(HrmScheduleBo bo, PageQuery pageQuery);
+
+ List queryList(HrmScheduleBo bo);
+
+ Boolean insertByBo(HrmScheduleBo bo);
+
+ Boolean updateByBo(HrmScheduleBo bo);
+
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmSealReqService.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmSealReqService.java
new file mode 100644
index 0000000..156d926
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmSealReqService.java
@@ -0,0 +1,40 @@
+package com.ruoyi.hrm.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.hrm.domain.bo.HrmSealReqBo;
+import com.ruoyi.hrm.domain.bo.HrmSealStampBo;
+import com.ruoyi.hrm.domain.vo.HrmSealReqVo;
+
+import java.util.Collection;
+import java.util.List;
+
+public interface IHrmSealReqService {
+
+ HrmSealReqVo queryById(Long bizId);
+
+ TableDataInfo queryPageList(HrmSealReqBo bo, PageQuery pageQuery);
+
+ List queryList(HrmSealReqBo bo);
+
+ Boolean insertByBo(HrmSealReqBo bo);
+
+ Boolean updateByBo(HrmSealReqBo bo);
+
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+
+ /**
+ * 简单状态更新(draft/running/approved/rejected/canceled)
+ */
+ Boolean updateStatus(Long bizId, String status);
+
+ /**
+ * Java 盖章,返回盖章后文件 URL
+ */
+ String stampWithJava(Long bizId, HrmSealStampBo cmd);
+
+ /**
+ * Python 盖章占位(调用外部服务)
+ */
+ String stampWithPython(Long bizId, HrmSealStampBo cmd);
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmShiftService.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmShiftService.java
new file mode 100644
index 0000000..3a6b7ef
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmShiftService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.hrm.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.hrm.domain.bo.HrmShiftBo;
+import com.ruoyi.hrm.domain.vo.HrmShiftVo;
+
+import java.util.Collection;
+import java.util.List;
+
+public interface IHrmShiftService {
+
+ HrmShiftVo queryById(Long shiftId);
+
+ TableDataInfo queryPageList(HrmShiftBo bo, PageQuery pageQuery);
+
+ List queryList(HrmShiftBo bo);
+
+ Boolean insertByBo(HrmShiftBo bo);
+
+ Boolean updateByBo(HrmShiftBo bo);
+
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmStatSnapshotService.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmStatSnapshotService.java
new file mode 100644
index 0000000..1341aac
--- /dev/null
+++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmStatSnapshotService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.hrm.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.hrm.domain.bo.HrmStatSnapshotBo;
+import com.ruoyi.hrm.domain.vo.HrmStatSnapshotVo;
+
+import java.util.Collection;
+import java.util.List;
+
+public interface IHrmStatSnapshotService {
+
+ HrmStatSnapshotVo queryById(Long snapId);
+
+ TableDataInfo queryPageList(HrmStatSnapshotBo bo, PageQuery pageQuery);
+
+ List queryList(HrmStatSnapshotBo bo);
+
+ Boolean insertByBo(HrmStatSnapshotBo bo);
+
+ Boolean updateByBo(HrmStatSnapshotBo bo);
+
+ Boolean deleteWithValidByIds(Collection