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 ids, Boolean isValid); +} diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmTravelReqService.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmTravelReqService.java new file mode 100644 index 0000000..eddaf56 --- /dev/null +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmTravelReqService.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.HrmTravelReqBo; +import com.ruoyi.hrm.domain.vo.HrmTravelReqVo; + +import java.util.Collection; +import java.util.List; + +public interface IHrmTravelReqService { + + HrmTravelReqVo queryById(Long bizId); + + TableDataInfo queryPageList(HrmTravelReqBo bo, PageQuery pageQuery); + + List queryList(HrmTravelReqBo bo); + + Boolean insertByBo(HrmTravelReqBo bo); + + Boolean updateByBo(HrmTravelReqBo bo); + + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/BizStatusSyncHelper.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/BizStatusSyncHelper.java new file mode 100644 index 0000000..dac6a8c --- /dev/null +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/BizStatusSyncHelper.java @@ -0,0 +1,102 @@ +package com.ruoyi.hrm.service.impl; + +import com.ruoyi.hrm.domain.HrmLeaveReq; +import com.ruoyi.hrm.domain.HrmReimburseReq; +import com.ruoyi.hrm.domain.HrmTravelReq; +import com.ruoyi.hrm.domain.HrmSealReq; +import com.ruoyi.hrm.mapper.HrmLeaveReqMapper; +import com.ruoyi.hrm.mapper.HrmReimburseReqMapper; +import com.ruoyi.hrm.mapper.HrmTravelReqMapper; +import com.ruoyi.hrm.mapper.HrmSealReqMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +/** + * 将流程结果同步到业务表状态。 + * 业务表状态规范:pending/approved/rejected + */ +@Component +@RequiredArgsConstructor +public class BizStatusSyncHelper { + + private final HrmLeaveReqMapper leaveReqMapper; + private final HrmTravelReqMapper travelReqMapper; + private final HrmSealReqMapper sealReqMapper; + private final HrmReimburseReqMapper reimburseReqMapper; + + public void setBizApproved(String bizType, Long bizId) { + if (bizType == null || bizId == null) return; + if ("leave".equalsIgnoreCase(bizType)) { + HrmLeaveReq u = new HrmLeaveReq(); + u.setBizId(bizId); + u.setStatus("approved"); + leaveReqMapper.updateById(u); + } else if ("travel".equalsIgnoreCase(bizType)) { + HrmTravelReq u = new HrmTravelReq(); + u.setBizId(bizId); + u.setStatus("approved"); + travelReqMapper.updateById(u); + } else if ("seal".equalsIgnoreCase(bizType)) { + HrmSealReq u = new HrmSealReq(); + u.setBizId(bizId); + u.setStatus("approved"); + sealReqMapper.updateById(u); + } else if ("reimburse".equalsIgnoreCase(bizType)) { + HrmReimburseReq u = new HrmReimburseReq(); + u.setBizId(bizId); + u.setStatus("approved"); + reimburseReqMapper.updateById(u); + } + } + + public void setBizPending(String bizType, Long bizId) { + if (bizType == null || bizId == null) return; + if ("leave".equalsIgnoreCase(bizType)) { + HrmLeaveReq u = new HrmLeaveReq(); + u.setBizId(bizId); + u.setStatus("pending"); + leaveReqMapper.updateById(u); + } else if ("travel".equalsIgnoreCase(bizType)) { + HrmTravelReq u = new HrmTravelReq(); + u.setBizId(bizId); + u.setStatus("pending"); + travelReqMapper.updateById(u); + } else if ("seal".equalsIgnoreCase(bizType)) { + HrmSealReq u = new HrmSealReq(); + u.setBizId(bizId); + u.setStatus("pending"); + sealReqMapper.updateById(u); + } else if ("reimburse".equalsIgnoreCase(bizType)) { + HrmReimburseReq u = new HrmReimburseReq(); + u.setBizId(bizId); + u.setStatus("pending"); + reimburseReqMapper.updateById(u); + } + } + + public void setBizRejected(String bizType, Long bizId) { + if (bizType == null || bizId == null) return; + if ("leave".equalsIgnoreCase(bizType)) { + HrmLeaveReq u = new HrmLeaveReq(); + u.setBizId(bizId); + u.setStatus("rejected"); + leaveReqMapper.updateById(u); + } else if ("travel".equalsIgnoreCase(bizType)) { + HrmTravelReq u = new HrmTravelReq(); + u.setBizId(bizId); + u.setStatus("rejected"); + travelReqMapper.updateById(u); + } else if ("seal".equalsIgnoreCase(bizType)) { + HrmSealReq u = new HrmSealReq(); + u.setBizId(bizId); + u.setStatus("rejected"); + sealReqMapper.updateById(u); + } else if ("reimburse".equalsIgnoreCase(bizType)) { + HrmReimburseReq u = new HrmReimburseReq(); + u.setBizId(bizId); + u.setStatus("rejected"); + reimburseReqMapper.updateById(u); + } + } +} + diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/FlowAssigneeHelper.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/FlowAssigneeHelper.java new file mode 100644 index 0000000..ffa4ee7 --- /dev/null +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/FlowAssigneeHelper.java @@ -0,0 +1,132 @@ +package com.ruoyi.hrm.service.impl; + +import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.common.core.domain.entity.SysDept; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.hrm.domain.HrmEmployee; +import com.ruoyi.hrm.domain.HrmFlowNode; +import com.ruoyi.hrm.mapper.HrmEmployeeMapper; +import com.ruoyi.system.mapper.SysDeptMapper; +import com.ruoyi.system.mapper.SysUserMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; + +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * 流程审批人解析器:根据节点 approverRule/approverValue 解析出 assigneeUserId。 + */ +@Component +@RequiredArgsConstructor +public class FlowAssigneeHelper { + + private final HrmEmployeeMapper employeeMapper; + private final SysDeptMapper deptMapper; + private final SysUserMapper userMapper; + + public List resolveAssigneeUserIds(HrmFlowNode node, Long startUserId) { + if (node == null) { + return Collections.emptyList(); + } + String rule = node.getApproverRule(); + + // 默认:如果没配规则,就当发起人 + if (rule == null || rule.trim().isEmpty() || "initiator".equalsIgnoreCase(rule)) { + return startUserId == null ? Collections.emptyList() : Collections.singletonList(startUserId); + } + + switch (rule.toLowerCase()) { + case "fixed_user": + return resolveFixedUser(node); + case "dept_leader": + case "leader": // 兼容 "leader" 写法 + return resolveDeptLeader(startUserId); + default: + throw new ServiceException("审批人规则 '" + rule + "' 正在开发中,暂不支持"); + } + } + + private List resolveFixedUser(HrmFlowNode node) { + String v = node.getApproverValue(); + if (v == null || v.trim().isEmpty()) { + throw new ServiceException("节点未配置指定人员"); + } + List arr; + try { + arr = JSONUtil.toList(JSONUtil.parseArray(v), String.class); + } catch (Exception e) { + // 兼容非 JSON + arr = Collections.singletonList(v); + } + + // 允许 value 既可能是 userId,也可能是 empId + return arr.stream() + .filter(Objects::nonNull) + .map(String::trim) + .filter(s -> !s.trim().isEmpty()) + .map(this::toUserId) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); + } + + private List resolveDeptLeader(Long startUserId) { + if (startUserId == null) { + throw new ServiceException("无法解析部门负责人:发起人ID为空"); + } + + // 1. 根据发起人ID查询员工信息,获取其部门ID + HrmEmployee starter = employeeMapper.selectOne(Wrappers.lambdaQuery().eq(HrmEmployee::getUserId, startUserId).last("limit 1")); + if (starter == null || starter.getDeptId() == null) { + throw new ServiceException("无法解析部门负责人:发起人未关联员工或部门信息"); + } + + // 2. 根据部门ID查询部门信息,获取负责人姓名 + SysDept dept = deptMapper.selectById(starter.getDeptId()); + if (dept == null) { + throw new ServiceException("无法解析部门负责人:部门信息不存在"); + } + if (!StringUtils.hasText(dept.getLeader())) { + throw new ServiceException("无法解析部门负责人:部门 '" + dept.getDeptName() + "' 未配置负责人"); + } + + // 3. sys_dept.leader 存的是 nick_name:优先按 nickName 匹配,兜底按 userName 匹配 + SysUser leaderUser = userMapper.selectOne(Wrappers.lambdaQuery() + .eq(SysUser::getNickName, dept.getLeader()) + .last("limit 1")); + if (leaderUser == null) { + leaderUser = userMapper.selectOne(Wrappers.lambdaQuery() + .eq(SysUser::getUserName, dept.getLeader()) + .last("limit 1")); + } + if (leaderUser == null) { + throw new ServiceException("无法解析部门负责人:部门负责人(nickName/userName)='" + dept.getLeader() + "' 未匹配到系统用户"); + } + + return Collections.singletonList(leaderUser.getUserId()); + } + + private Long toUserId(String s) { + // 纯数字:可能是 userId 或 empId + Long id; + try { + id = Long.parseLong(s); + } catch (Exception e) { + return null; + } + + // 先当 userId 直接用 + // 但为了兼容你们前端可能传 empId,这里做一次 hrm_employee.user_id 映射 + HrmEmployee emp = employeeMapper.selectOne(Wrappers.lambdaQuery().eq(HrmEmployee::getEmpId, id)); + if (emp != null && emp.getUserId() != null) { + return emp.getUserId(); + } + return id; + } +} diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmAttendCalcServiceImpl.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmAttendCalcServiceImpl.java new file mode 100644 index 0000000..2b31e05 --- /dev/null +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmAttendCalcServiceImpl.java @@ -0,0 +1,73 @@ +package com.ruoyi.hrm.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.hrm.domain.HrmAttendCalc; +import com.ruoyi.hrm.domain.bo.HrmAttendCalcBo; +import com.ruoyi.hrm.domain.vo.HrmAttendCalcVo; +import com.ruoyi.hrm.mapper.HrmAttendCalcMapper; +import com.ruoyi.hrm.service.IHrmAttendCalcService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; + +@RequiredArgsConstructor +@Service +public class HrmAttendCalcServiceImpl implements IHrmAttendCalcService { + + private final HrmAttendCalcMapper baseMapper; + + @Override + public HrmAttendCalcVo queryById(Long calcId) { + return baseMapper.selectVoById(calcId); + } + + @Override + public TableDataInfo queryPageList(HrmAttendCalcBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + @Override + public List queryList(HrmAttendCalcBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(HrmAttendCalcBo bo) { + HrmAttendCalc add = BeanUtil.toBean(bo, HrmAttendCalc.class); + return baseMapper.insert(add) > 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(HrmAttendCalcBo bo) { + HrmAttendCalc update = BeanUtil.toBean(bo, HrmAttendCalc.class); + return baseMapper.updateById(update) > 0; + } + + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + return baseMapper.deleteBatchIds(ids) > 0; + } + + private LambdaQueryWrapper buildQueryWrapper(HrmAttendCalcBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getCalcId() != null, HrmAttendCalc::getCalcId, bo.getCalcId()); + lqw.eq(bo.getEmpId() != null, HrmAttendCalc::getEmpId, bo.getEmpId()); + lqw.eq(bo.getWorkDate() != null, HrmAttendCalc::getWorkDate, bo.getWorkDate()); + lqw.eq(bo.getShiftId() != null, HrmAttendCalc::getShiftId, bo.getShiftId()); + lqw.eq(bo.getStatus() != null, HrmAttendCalc::getStatus, bo.getStatus()); + return lqw; + } +} diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmCertificateServiceImpl.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmCertificateServiceImpl.java new file mode 100644 index 0000000..046e61d --- /dev/null +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmCertificateServiceImpl.java @@ -0,0 +1,73 @@ +package com.ruoyi.hrm.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.hrm.domain.HrmCertificate; +import com.ruoyi.hrm.domain.bo.HrmCertificateBo; +import com.ruoyi.hrm.domain.vo.HrmCertificateVo; +import com.ruoyi.hrm.mapper.HrmCertificateMapper; +import com.ruoyi.hrm.service.IHrmCertificateService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; + +@RequiredArgsConstructor +@Service +public class HrmCertificateServiceImpl implements IHrmCertificateService { + + private final HrmCertificateMapper baseMapper; + + @Override + public HrmCertificateVo queryById(Long certId) { + return baseMapper.selectVoById(certId); + } + + @Override + public TableDataInfo queryPageList(HrmCertificateBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + @Override + public List queryList(HrmCertificateBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(HrmCertificateBo bo) { + HrmCertificate add = BeanUtil.toBean(bo, HrmCertificate.class); + return baseMapper.insert(add) > 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(HrmCertificateBo bo) { + HrmCertificate update = BeanUtil.toBean(bo, HrmCertificate.class); + return baseMapper.updateById(update) > 0; + } + + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + return baseMapper.deleteBatchIds(ids) > 0; + } + + private LambdaQueryWrapper buildQueryWrapper(HrmCertificateBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getCertId() != null, HrmCertificate::getCertId, bo.getCertId()); + lqw.eq(bo.getEmpId() != null, HrmCertificate::getEmpId, bo.getEmpId()); + lqw.like(bo.getCertName() != null, HrmCertificate::getCertName, bo.getCertName()); + lqw.like(bo.getCertNo() != null, HrmCertificate::getCertNo, bo.getCertNo()); + lqw.eq(bo.getIssuedBy() != null, HrmCertificate::getIssuedBy, bo.getIssuedBy()); + return lqw; + } +} diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmContractServiceImpl.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmContractServiceImpl.java new file mode 100644 index 0000000..0401c70 --- /dev/null +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmContractServiceImpl.java @@ -0,0 +1,73 @@ +package com.ruoyi.hrm.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.hrm.domain.HrmContract; +import com.ruoyi.hrm.domain.bo.HrmContractBo; +import com.ruoyi.hrm.domain.vo.HrmContractVo; +import com.ruoyi.hrm.mapper.HrmContractMapper; +import com.ruoyi.hrm.service.IHrmContractService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; + +@RequiredArgsConstructor +@Service +public class HrmContractServiceImpl implements IHrmContractService { + + private final HrmContractMapper baseMapper; + + @Override + public HrmContractVo queryById(Long contractId) { + return baseMapper.selectVoById(contractId); + } + + @Override + public TableDataInfo queryPageList(HrmContractBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + @Override + public List queryList(HrmContractBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(HrmContractBo bo) { + HrmContract add = BeanUtil.toBean(bo, HrmContract.class); + return baseMapper.insert(add) > 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(HrmContractBo bo) { + HrmContract update = BeanUtil.toBean(bo, HrmContract.class); + return baseMapper.updateById(update) > 0; + } + + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + return baseMapper.deleteBatchIds(ids) > 0; + } + + private LambdaQueryWrapper buildQueryWrapper(HrmContractBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getContractId() != null, HrmContract::getContractId, bo.getContractId()); + lqw.eq(bo.getEmpId() != null, HrmContract::getEmpId, bo.getEmpId()); + lqw.like(bo.getContractNo() != null, HrmContract::getContractNo, bo.getContractNo()); + lqw.eq(bo.getContractType() != null, HrmContract::getContractType, bo.getContractType()); + lqw.eq(bo.getStatus() != null, HrmContract::getStatus, bo.getStatus()); + return lqw; + } +} diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmEmpOrgPositionServiceImpl.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmEmpOrgPositionServiceImpl.java new file mode 100644 index 0000000..d529484 --- /dev/null +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmEmpOrgPositionServiceImpl.java @@ -0,0 +1,110 @@ +package com.ruoyi.hrm.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.hrm.domain.HrmEmpOrgPosition; +import com.ruoyi.hrm.domain.bo.HrmEmpOrgPositionBo; +import com.ruoyi.hrm.domain.vo.HrmEmpOrgPositionVo; +import com.ruoyi.hrm.mapper.HrmEmpOrgPositionMapper; +import com.ruoyi.hrm.service.IHrmEmpOrgPositionService; +import com.ruoyi.system.service.ISysDeptService; +import com.ruoyi.system.service.ISysPostService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; + +@RequiredArgsConstructor +@Service +public class HrmEmpOrgPositionServiceImpl implements IHrmEmpOrgPositionService { + + private final HrmEmpOrgPositionMapper baseMapper; + private final ISysDeptService deptService; + private final ISysPostService postService; + + @Override + public HrmEmpOrgPositionVo queryById(Long relId) { + HrmEmpOrgPositionVo vo = baseMapper.selectVoById(relId); + fillNames(vo); + return vo; + } + + @Override + public TableDataInfo queryPageList(HrmEmpOrgPositionBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + if (result.getRecords() != null) { + result.getRecords().forEach(this::fillNames); + } + return TableDataInfo.build(result); + } + + @Override + public List queryList(HrmEmpOrgPositionBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + List list = baseMapper.selectVoList(lqw); + if (list != null) { + list.forEach(this::fillNames); + } + return list; + } + + private void fillNames(HrmEmpOrgPositionVo vo) { + if (vo == null) return; + if (vo.getDeptId() != null) { + try { + com.ruoyi.common.core.domain.entity.SysDept dept = deptService.selectDeptById(vo.getDeptId()); + if (dept != null) { + vo.setDeptName(dept.getDeptName()); + } + } catch (Exception e) { + // 忽略查询失败 + } + } + if (vo.getPostId() != null) { + try { + com.ruoyi.system.domain.SysPost post = postService.selectPostById(vo.getPostId()); + if (post != null) { + vo.setPostName(post.getPostName()); + } + } catch (Exception e) { + // 忽略查询失败 + } + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(HrmEmpOrgPositionBo bo) { + HrmEmpOrgPosition add = BeanUtil.toBean(bo, HrmEmpOrgPosition.class); + return baseMapper.insert(add) > 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(HrmEmpOrgPositionBo bo) { + HrmEmpOrgPosition update = BeanUtil.toBean(bo, HrmEmpOrgPosition.class); + return baseMapper.updateById(update) > 0; + } + + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + return baseMapper.deleteBatchIds(ids) > 0; + } + + private LambdaQueryWrapper buildQueryWrapper(HrmEmpOrgPositionBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getRelId() != null, HrmEmpOrgPosition::getRelId, bo.getRelId()); + lqw.eq(bo.getEmpId() != null, HrmEmpOrgPosition::getEmpId, bo.getEmpId()); + lqw.eq(bo.getDeptId() != null, HrmEmpOrgPosition::getDeptId, bo.getDeptId()); + lqw.eq(bo.getPostId() != null, HrmEmpOrgPosition::getPostId, bo.getPostId()); + lqw.eq(bo.getIsPrimary() != null, HrmEmpOrgPosition::getIsPrimary, bo.getIsPrimary()); + return lqw; + } +} diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmEmployeeServiceImpl.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmEmployeeServiceImpl.java new file mode 100644 index 0000000..88bf0af --- /dev/null +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmEmployeeServiceImpl.java @@ -0,0 +1,76 @@ +package com.ruoyi.hrm.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.hrm.domain.HrmEmployee; +import com.ruoyi.hrm.domain.bo.HrmEmployeeBo; +import com.ruoyi.hrm.domain.vo.HrmEmployeeVo; +import com.ruoyi.hrm.mapper.HrmEmployeeMapper; +import com.ruoyi.hrm.service.IHrmEmployeeService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; + +@RequiredArgsConstructor +@Service +public class HrmEmployeeServiceImpl implements IHrmEmployeeService { + + private final HrmEmployeeMapper baseMapper; + + @Override + public HrmEmployeeVo queryById(Long empId) { + return baseMapper.selectVoById(empId); + } + + @Override + public TableDataInfo queryPageList(HrmEmployeeBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + @Override + public List queryList(HrmEmployeeBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(HrmEmployeeBo bo) { + HrmEmployee add = BeanUtil.toBean(bo, HrmEmployee.class); + return baseMapper.insert(add) > 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(HrmEmployeeBo bo) { + HrmEmployee update = BeanUtil.toBean(bo, HrmEmployee.class); + return baseMapper.updateById(update) > 0; + } + + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + return baseMapper.deleteBatchIds(ids) > 0; + } + + private LambdaQueryWrapper buildQueryWrapper(HrmEmployeeBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getEmpId() != null, HrmEmployee::getEmpId, bo.getEmpId()); + lqw.eq(bo.getUserId() != null, HrmEmployee::getUserId, bo.getUserId()); + lqw.like(bo.getEmpNo() != null, HrmEmployee::getEmpNo, bo.getEmpNo()); + lqw.like(bo.getEmpName() != null, HrmEmployee::getEmpName, bo.getEmpName()); + lqw.eq(bo.getStatus() != null, HrmEmployee::getStatus, bo.getStatus()); + lqw.eq(bo.getDeptId() != null, HrmEmployee::getDeptId, bo.getDeptId()); + lqw.eq(bo.getPostId() != null, HrmEmployee::getPostId, bo.getPostId()); + lqw.orderByAsc(HrmEmployee::getEmpNo); + return lqw; + } +} diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowActionServiceImpl.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowActionServiceImpl.java new file mode 100644 index 0000000..dab2ba7 --- /dev/null +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowActionServiceImpl.java @@ -0,0 +1,73 @@ +package com.ruoyi.hrm.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.hrm.domain.HrmFlowAction; +import com.ruoyi.hrm.domain.bo.HrmFlowActionBo; +import com.ruoyi.hrm.domain.vo.HrmFlowActionVo; +import com.ruoyi.hrm.mapper.HrmFlowActionMapper; +import com.ruoyi.hrm.service.IHrmFlowActionService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; + +@RequiredArgsConstructor +@Service +public class HrmFlowActionServiceImpl implements IHrmFlowActionService { + + private final HrmFlowActionMapper baseMapper; + + @Override + public HrmFlowActionVo queryById(Long actionId) { + return baseMapper.selectVoById(actionId); + } + + @Override + public TableDataInfo queryPageList(HrmFlowActionBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + @Override + public List queryList(HrmFlowActionBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(HrmFlowActionBo bo) { + HrmFlowAction add = BeanUtil.toBean(bo, HrmFlowAction.class); + return baseMapper.insert(add) > 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(HrmFlowActionBo bo) { + HrmFlowAction update = BeanUtil.toBean(bo, HrmFlowAction.class); + return baseMapper.updateById(update) > 0; + } + + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + return baseMapper.deleteBatchIds(ids) > 0; + } + + private LambdaQueryWrapper buildQueryWrapper(HrmFlowActionBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getActionId() != null, HrmFlowAction::getActionId, bo.getActionId()); + lqw.eq(bo.getTaskId() != null, HrmFlowAction::getTaskId, bo.getTaskId()); + lqw.eq(bo.getInstId() != null, HrmFlowAction::getInstId, bo.getInstId()); + lqw.eq(bo.getAction() != null, HrmFlowAction::getAction, bo.getAction()); + lqw.eq(bo.getActionUserId() != null, HrmFlowAction::getActionUserId, bo.getActionUserId()); + return lqw; + } +} diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowCcServiceImpl.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowCcServiceImpl.java new file mode 100644 index 0000000..07e1dae --- /dev/null +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowCcServiceImpl.java @@ -0,0 +1,163 @@ +package com.ruoyi.hrm.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.hrm.domain.HrmFlowCc; +import com.ruoyi.hrm.domain.bo.HrmFlowCcBo; +import com.ruoyi.hrm.domain.vo.HrmFlowCcVo; +import com.ruoyi.hrm.mapper.HrmFlowCcMapper; +import com.ruoyi.hrm.service.IHrmFlowCcService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.List; + +@RequiredArgsConstructor +@Service +public class HrmFlowCcServiceImpl implements IHrmFlowCcService { + + private final HrmFlowCcMapper baseMapper; + private final com.ruoyi.hrm.mapper.HrmLeaveReqMapper leaveReqMapper; + private final com.ruoyi.hrm.mapper.HrmTravelReqMapper travelReqMapper; + private final com.ruoyi.hrm.mapper.HrmReimburseReqMapper reimburseReqMapper; + private final com.ruoyi.hrm.mapper.HrmSealReqMapper sealReqMapper; + + @Override + public TableDataInfo queryPageList(HrmFlowCcBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + fillBizDisplay(result.getRecords()); + return TableDataInfo.build(result); + } + + @Override + public List queryList(HrmFlowCcBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + List list = baseMapper.selectVoList(lqw); + fillBizDisplay(list); + return list; + } + + @Override + public Boolean insert(HrmFlowCcBo bo) { + HrmFlowCc add = BeanUtil.toBean(bo, HrmFlowCc.class); + return baseMapper.insert(add) > 0; + } + + @Override + public Boolean insertBatch(HrmFlowCcBo bo) { + if (bo == null) { + return false; + } + List ids = bo.getCcUserIds(); + if (ids == null || ids.isEmpty()) { + // 兼容单人 + if (bo.getCcUserId() == null) { + return false; + } + return insert(bo); + } + + boolean ok = true; + for (Long uid : ids) { + if (uid == null) { + continue; + } + HrmFlowCc one = BeanUtil.toBean(bo, HrmFlowCc.class); + one.setCcId(null); + one.setCcUserId(uid); + one.setReadFlag(0); + ok = baseMapper.insert(one) > 0 && ok; + } + return ok; + } + + @Override + public Boolean deleteByIds(Collection ids) { + return baseMapper.deleteBatchIds(ids) > 0; + } + + @Override + public Boolean markRead(Long ccId, Long userId) { + if (ccId == null || userId == null) { + return false; + } + return baseMapper.update( + null, + Wrappers.lambdaUpdate() + .set(HrmFlowCc::getReadFlag, 1) + .eq(HrmFlowCc::getCcId, ccId) + .eq(HrmFlowCc::getCcUserId, userId) + .eq(HrmFlowCc::getDelFlag, 0) + ) > 0; + } + + private LambdaQueryWrapper buildQueryWrapper(HrmFlowCcBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getCcUserId() != null, HrmFlowCc::getCcUserId, bo.getCcUserId()); + lqw.eq(bo.getInstId() != null, HrmFlowCc::getInstId, bo.getInstId()); + lqw.eq(bo.getBizType() != null, HrmFlowCc::getBizType, bo.getBizType()); + lqw.eq(bo.getReadFlag() != null, HrmFlowCc::getReadFlag, bo.getReadFlag()); + lqw.orderByDesc(HrmFlowCc::getCreateTime); + return lqw; + } + + /** + * 回填业务展示字段:bizTypeName + bizTitle + */ + private void fillBizDisplay(List list) { + if (list == null || list.isEmpty()) { + return; + } + for (HrmFlowCcVo vo : list) { + if (vo == null) { + continue; + } + String bt = vo.getBizType(); + Long bid = vo.getBizId(); + if (bt == null || bid == null) { + continue; + } + + // 默认兜底 + vo.setBizTypeName(bt); + vo.setBizTitle(vo.getRemark()); + + try { + if ("leave".equalsIgnoreCase(bt)) { + vo.setBizTypeName("请假申请"); + com.ruoyi.hrm.domain.HrmLeaveReq req = leaveReqMapper.selectById(bid); + if (req != null) { + vo.setBizTitle(req.getLeaveType() + " | " + req.getReason()); + } + } else if ("travel".equalsIgnoreCase(bt)) { + vo.setBizTypeName("出差申请"); + com.ruoyi.hrm.domain.HrmTravelReq req = travelReqMapper.selectById(bid); + if (req != null) { + vo.setBizTitle(req.getDestination() + " | " + req.getReason()); + } + } else if ("reimburse".equalsIgnoreCase(bt)) { + vo.setBizTypeName("报销申请"); + com.ruoyi.hrm.domain.HrmReimburseReq req = reimburseReqMapper.selectById(bid); + if (req != null) { + vo.setBizTitle(req.getReimburseType() + " | " + req.getTotalAmount()); + } + } else if ("seal".equalsIgnoreCase(bt)) { + vo.setBizTypeName("用印申请"); + com.ruoyi.hrm.domain.HrmSealReq req = sealReqMapper.selectById(bid); + if (req != null) { + vo.setBizTitle(req.getSealType() + " | " + req.getPurpose()); + } + } + } catch (Exception ignore) { + // 不影响列表返回 + } + } + } +} + diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowInstanceServiceImpl.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowInstanceServiceImpl.java new file mode 100644 index 0000000..9e62b6d --- /dev/null +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowInstanceServiceImpl.java @@ -0,0 +1,183 @@ +package com.ruoyi.hrm.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.hrm.domain.HrmFlowInstance; +import com.ruoyi.hrm.domain.HrmFlowNode; +import com.ruoyi.hrm.domain.HrmFlowTask; +import com.ruoyi.hrm.domain.HrmFormData; +import com.ruoyi.hrm.domain.bo.HrmFlowStartBo; +import com.ruoyi.hrm.domain.bo.HrmFlowInstanceBo; +import com.ruoyi.hrm.domain.vo.HrmFlowInstanceVo; +import com.ruoyi.hrm.mapper.HrmFlowInstanceMapper; +import com.ruoyi.hrm.mapper.HrmFlowNodeMapper; +import com.ruoyi.hrm.mapper.HrmFlowTaskMapper; +import com.ruoyi.hrm.mapper.HrmFormDataMapper; +import com.ruoyi.hrm.service.IHrmFlowInstanceService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; + +@RequiredArgsConstructor +@Service +public class HrmFlowInstanceServiceImpl implements IHrmFlowInstanceService { + + private final HrmFlowInstanceMapper baseMapper; + private final HrmFlowNodeMapper nodeMapper; + private final HrmFlowTaskMapper taskMapper; + private final HrmFormDataMapper formDataMapper; + private final FlowAssigneeHelper assigneeHelper; + + @Override + public HrmFlowInstanceVo queryById(Long instId) { + return baseMapper.selectVoById(instId); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Long startInstance(HrmFlowStartBo bo) { + // 无模板:自选审批人(一次性审批) + if (bo.getTplId() == null) { + if (bo.getManualAssigneeUserId() == null) { + throw new RuntimeException("未配置流程模板且未指定审批人,无法启动"); + } + HrmFlowInstance inst = new HrmFlowInstance(); + inst.setTplId(0L); + inst.setBizType(bo.getBizType()); + inst.setBizId(bo.getBizId()); + inst.setStatus("running"); + inst.setCurrentNodeId(0L); + inst.setStartUserId(bo.getStartUserId()); + baseMapper.insert(inst); + + // 保存表单(可选) + if (bo.getContentJson() != null) { + HrmFormData form = new HrmFormData(); + form.setBizType(bo.getBizType()); + form.setBizId(bo.getBizId()); + form.setContentJson(bo.getContentJson()); + formDataMapper.insert(form); + } + + // 创建唯一待办:指派给自选审批人 + HrmFlowTask task = new HrmFlowTask(); + task.setInstId(inst.getInstId()); + task.setNodeId(0L); + task.setAssigneeUserId(bo.getManualAssigneeUserId()); + task.setStatus("pending"); + // 关键:写入业务关联字段,便于审批中心联查业务数据 + task.setBizType(bo.getBizType()); + task.setBizId(bo.getBizId()); + taskMapper.insert(task); + + return inst.getInstId(); + } + + // 有模板:找首节点 + HrmFlowNode firstNode = nodeMapper.selectOne(Wrappers.lambdaQuery() + .eq(HrmFlowNode::getTplId, bo.getTplId()) + .orderByAsc(HrmFlowNode::getOrderNo) + .last("limit 1")); + if (firstNode == null) { + throw new RuntimeException("流程模板无节点,无法启动"); + } + // 创建实例 + HrmFlowInstance inst = new HrmFlowInstance(); + inst.setTplId(bo.getTplId()); + inst.setBizType(bo.getBizType()); + inst.setBizId(bo.getBizId()); + inst.setStatus("running"); + inst.setCurrentNodeId(firstNode.getNodeId()); + inst.setStartUserId(bo.getStartUserId()); + baseMapper.insert(inst); + + // 保存表单 + if (bo.getContentJson() != null) { + HrmFormData form = new HrmFormData(); + form.setBizType(bo.getBizType()); + form.setBizId(bo.getBizId()); + form.setContentJson(bo.getContentJson()); + formDataMapper.insert(form); + } + + // 创建首个待办:按首节点规则分配审批人,而不是写死发起人 + List assignees = assigneeHelper.resolveAssigneeUserIds(firstNode, bo.getStartUserId()); + if (assignees == null || assignees.isEmpty()) { + throw new RuntimeException("未解析到首节点审批人,无法启动流程"); + } + // 简化:目前每个节点只创建一个待办(取第一个审批人) + HrmFlowTask task = new HrmFlowTask(); + task.setInstId(inst.getInstId()); + task.setNodeId(firstNode.getNodeId()); + task.setAssigneeUserId(assignees.get(0)); + task.setStatus("pending"); + // 关键:写入业务关联字段,便于审批中心联查业务数据 + task.setBizType(bo.getBizType()); + task.setBizId(bo.getBizId()); + taskMapper.insert(task); + + return inst.getInstId(); + } + + @Override + public TableDataInfo queryPageList(HrmFlowInstanceBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + @Override + public TableDataInfo queryMyInstancePageList(HrmFlowInstanceBo bo, PageQuery pageQuery) { + // “我的申请”= 当前登录用户发起的流程实例 + // 这里不信任前端传 startUserId,统一以登录态为准 + Long userId = com.ruoyi.common.helper.LoginHelper.getUserId(); + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + lqw.eq(userId != null, HrmFlowInstance::getStartUserId, userId); + // 默认按发起时间倒序(如果表里没createTime字段,这里可改成instId倒序) + lqw.orderByDesc(HrmFlowInstance::getInstId); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + @Override + public List queryList(HrmFlowInstanceBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(HrmFlowInstanceBo bo) { + HrmFlowInstance add = BeanUtil.toBean(bo, HrmFlowInstance.class); + return baseMapper.insert(add) > 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(HrmFlowInstanceBo bo) { + HrmFlowInstance update = BeanUtil.toBean(bo, HrmFlowInstance.class); + return baseMapper.updateById(update) > 0; + } + + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + return baseMapper.deleteBatchIds(ids) > 0; + } + + private LambdaQueryWrapper buildQueryWrapper(HrmFlowInstanceBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getInstId() != null, HrmFlowInstance::getInstId, bo.getInstId()); + lqw.eq(bo.getTplId() != null, HrmFlowInstance::getTplId, bo.getTplId()); + lqw.eq(bo.getBizType() != null, HrmFlowInstance::getBizType, bo.getBizType()); + lqw.eq(bo.getBizId() != null, HrmFlowInstance::getBizId, bo.getBizId()); + lqw.eq(bo.getStatus() != null, HrmFlowInstance::getStatus, bo.getStatus()); + return lqw; + } +} diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowNodeServiceImpl.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowNodeServiceImpl.java new file mode 100644 index 0000000..986dfaa --- /dev/null +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowNodeServiceImpl.java @@ -0,0 +1,73 @@ +package com.ruoyi.hrm.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.hrm.domain.HrmFlowNode; +import com.ruoyi.hrm.domain.bo.HrmFlowNodeBo; +import com.ruoyi.hrm.domain.vo.HrmFlowNodeVo; +import com.ruoyi.hrm.mapper.HrmFlowNodeMapper; +import com.ruoyi.hrm.service.IHrmFlowNodeService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; + +@RequiredArgsConstructor +@Service +public class HrmFlowNodeServiceImpl implements IHrmFlowNodeService { + + private final HrmFlowNodeMapper baseMapper; + + @Override + public HrmFlowNodeVo queryById(Long nodeId) { + return baseMapper.selectVoById(nodeId); + } + + @Override + public TableDataInfo queryPageList(HrmFlowNodeBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + @Override + public List queryList(HrmFlowNodeBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(HrmFlowNodeBo bo) { + HrmFlowNode add = BeanUtil.toBean(bo, HrmFlowNode.class); + return baseMapper.insert(add) > 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(HrmFlowNodeBo bo) { + HrmFlowNode update = BeanUtil.toBean(bo, HrmFlowNode.class); + return baseMapper.updateById(update) > 0; + } + + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + return baseMapper.deleteBatchIds(ids) > 0; + } + + private LambdaQueryWrapper buildQueryWrapper(HrmFlowNodeBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getNodeId() != null, HrmFlowNode::getNodeId, bo.getNodeId()); + lqw.eq(bo.getTplId() != null, HrmFlowNode::getTplId, bo.getTplId()); + lqw.eq(bo.getOrderNo() != null, HrmFlowNode::getOrderNo, bo.getOrderNo()); + lqw.eq(bo.getNodeType() != null, HrmFlowNode::getNodeType, bo.getNodeType()); + lqw.eq(bo.getApproverRule() != null, HrmFlowNode::getApproverRule, bo.getApproverRule()); + return lqw; + } +} diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowTaskServiceImpl.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowTaskServiceImpl.java new file mode 100644 index 0000000..7eee488 --- /dev/null +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowTaskServiceImpl.java @@ -0,0 +1,382 @@ +package com.ruoyi.hrm.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.hrm.domain.*; +import com.ruoyi.hrm.domain.bo.HrmFlowTaskBo; +import com.ruoyi.hrm.domain.bo.HrmSealStampBo; +import com.ruoyi.hrm.domain.vo.HrmFlowTaskVo; +import com.ruoyi.hrm.mapper.*; +import com.ruoyi.hrm.service.IHrmFlowTaskService; +import com.ruoyi.hrm.service.IHrmSealReqService; +import com.ruoyi.hrm.service.IHrmFlowCcService; +import com.ruoyi.hrm.domain.bo.HrmFlowCcBo; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.stream.Collectors; + +@RequiredArgsConstructor +@Service +public class HrmFlowTaskServiceImpl implements IHrmFlowTaskService { + + private final HrmFlowTaskMapper baseMapper; + private final HrmFlowActionMapper actionMapper; + private final HrmFlowInstanceMapper instanceMapper; + private final HrmFlowNodeMapper nodeMapper; + private final IHrmSealReqService sealReqService; + private final IHrmFlowCcService ccService; + private final FlowAssigneeHelper assigneeHelper; + private final BizStatusSyncHelper bizStatusSyncHelper; + + // 注入四个业务Mapper + private final HrmLeaveReqMapper leaveReqMapper; + private final HrmTravelReqMapper travelReqMapper; + private final HrmSealReqMapper sealReqMapper; + private final HrmReimburseReqMapper reimburseReqMapper; + private final ObjectMapper objectMapper; // Spring Boot 默认提供 + + @Override + public HrmFlowTaskVo queryById(Long taskId) { + return baseMapper.selectVoById(taskId); + } + + @Override + public TableDataInfo queryPageList(HrmFlowTaskBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + // 分页查询同样需要填充业务数据 + if (result.getRecords() != null && !result.getRecords().isEmpty()) { + fillBizData(result.getRecords()); + } + return TableDataInfo.build(result); + } + + @Override + public List queryList(HrmFlowTaskBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + List tasks = baseMapper.selectVoList(lqw); + if (tasks != null && !tasks.isEmpty()) { + fillBizData(tasks); + } + return tasks; + } + + private void fillBizData(List tasks) { + // 1. 按 bizType 分组,并收集 bizId + Map> bizIdsByType = tasks.stream() + .filter(t -> t.getBizType() != null && t.getBizId() != null) + .collect(Collectors.groupingBy( + HrmFlowTaskVo::getBizType, + Collectors.mapping(HrmFlowTaskVo::getBizId, Collectors.toList()) + )); + + // 2. 批量查询各个业务表 + Map bizDataMap = new HashMap<>(); + + bizIdsByType.forEach((bizType, bizIds) -> { + if (bizIds.isEmpty()) return; + switch (bizType) { + case "leave": + leaveReqMapper.selectBatchIds(bizIds).forEach(d -> bizDataMap.put("leave_" + d.getBizId(), d)); + break; + case "travel": + travelReqMapper.selectBatchIds(bizIds).forEach(d -> bizDataMap.put("travel_" + d.getBizId(), d)); + break; + case "seal": + sealReqMapper.selectBatchIds(bizIds).forEach(d -> bizDataMap.put("seal_" + d.getBizId(), d)); + break; + case "reimburse": + reimburseReqMapper.selectBatchIds(bizIds).forEach(d -> bizDataMap.put("reimburse_" + d.getBizId(), d)); + break; + } + }); + + // 3. 将业务数据回填到 task 的 bizData 字段 + tasks.forEach(task -> { + String key = task.getBizType() + "_" + task.getBizId(); + Object data = bizDataMap.get(key); + if (data != null) { + // 将实体对象转换为 Map,方便前端使用 + Map dataMap = objectMapper.convertValue(data, Map.class); + task.setBizData(dataMap); + } + }); + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(HrmFlowTaskBo bo) { + HrmFlowTask add = BeanUtil.toBean(bo, HrmFlowTask.class); + return baseMapper.insert(add) > 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(HrmFlowTaskBo bo) { + HrmFlowTask update = BeanUtil.toBean(bo, HrmFlowTask.class); + return baseMapper.updateById(update) > 0; + } + + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + return baseMapper.deleteBatchIds(ids) > 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean approve(Long taskId, Long actionUserId, String remark, HrmSealStampBo stampBo) { + HrmFlowTask task = baseMapper.selectById(taskId); + if (task == null) { + return false; + } + HrmFlowInstance inst = instanceMapper.selectById(task.getInstId()); + if (inst == null) { + return false; + } + // 无模板一次性审批(tplId=0 或 nodeId=0):直接结束流程 + if (inst.getTplId() != null && inst.getTplId() == 0L) { + // 记录动作 + saveAction(taskId, inst.getInstId(), "approve", remark, actionUserId,task.getBizType(), task.getBizId()); + if (stampBo != null) { + saveAction(taskId, inst.getInstId(), "stamp", "盖章", actionUserId,task.getBizType(), task.getBizId()); + } + task.setStatus("approved"); + baseMapper.updateById(task); + inst.setStatus("approved"); + inst.setCurrentNodeId(null); + instanceMapper.updateById(inst); + // 若业务为用印,更新用印状态为已批准,并执行盖章 + if ("seal".equalsIgnoreCase(inst.getBizType())) { + sealReqService.updateStatus(inst.getBizId(), "approved"); + if (stampBo != null) { + // 盖章动作也写入流转历史 + saveAction(taskId, inst.getInstId(), "stamp", "盖章", actionUserId,task.getBizType(), task.getBizId()); + sealReqService.stampWithJava(inst.getBizId(), stampBo); + } + } + bizStatusSyncHelper.setBizApproved(inst.getBizType(), inst.getBizId()); + return true; + } + + HrmFlowNode currentNode = nodeMapper.selectById(task.getNodeId()); + if (currentNode == null) { + return false; + } + // 记录动作 + saveAction(taskId, inst.getInstId(), "approve", remark, actionUserId,task.getBizType(),task.getBizId()); + // 完成当前任务 + task.setStatus("approved"); + baseMapper.updateById(task); + + // 查找下一节点 + HrmFlowNode next = nodeMapper.selectOne(Wrappers.lambdaQuery() + .eq(HrmFlowNode::getTplId, inst.getTplId()) + .gt(HrmFlowNode::getOrderNo, currentNode.getOrderNo()) + .orderByAsc(HrmFlowNode::getOrderNo) + .last("limit 1")); + + // 若后续存在抄送节点,需要:写抄送记录 + 自动继续流转到下一个非抄送节点 + while (next != null && "cc".equalsIgnoreCase(next.getNodeType())) { + // 写抄送记录 + List ccUserIds = assigneeHelper.resolveAssigneeUserIds(next, inst.getStartUserId()); + if (ccUserIds != null && !ccUserIds.isEmpty()) { + HrmFlowCcBo ccBo = new HrmFlowCcBo(); + ccBo.setInstId(inst.getInstId()); + ccBo.setBizType(inst.getBizType()); + ccBo.setBizId(inst.getBizId()); + ccBo.setNodeId(next.getNodeId()); + // hrm_flow_node 没有 nodeName 字段,这里用 remark 作为可读名兜底 + ccBo.setNodeName(next.getRemark()); + ccBo.setFromUserId(actionUserId); + ccBo.setCcUserIds(ccUserIds); + ccBo.setReadFlag(0); + ccBo.setRemark("系统自动抄送"); + ccService.insertBatch(ccBo); + } + + // 继续找下一个节点 + HrmFlowNode tmp = next; + next = nodeMapper.selectOne(Wrappers.lambdaQuery() + .eq(HrmFlowNode::getTplId, inst.getTplId()) + .gt(HrmFlowNode::getOrderNo, tmp.getOrderNo()) + .orderByAsc(HrmFlowNode::getOrderNo) + .last("limit 1")); + } + + if (next != null) { + inst.setCurrentNodeId(next.getNodeId()); + inst.setStatus("running"); + instanceMapper.updateById(inst); + // 创建下一节点待办:按下一节点规则分配审批人 + List assignees = assigneeHelper.resolveAssigneeUserIds(next, inst.getStartUserId()); + if (assignees == null || assignees.isEmpty()) { + throw new RuntimeException("未解析到下一节点审批人,无法流转"); + } + HrmFlowTask nextTask = new HrmFlowTask(); + nextTask.setInstId(inst.getInstId()); + nextTask.setNodeId(next.getNodeId()); + nextTask.setAssigneeUserId(assignees.get(0)); + nextTask.setBizType(inst.getBizType()); + nextTask.setBizId(inst.getBizId()); + nextTask.setStatus("pending"); + baseMapper.insert(nextTask); + } else { + // 末节点通过 + inst.setStatus("approved"); + inst.setCurrentNodeId(null); + instanceMapper.updateById(inst); + // 若业务为用印,更新用印状态为已批准 + if ("seal".equalsIgnoreCase(inst.getBizType())) { + sealReqService.updateStatus(inst.getBizId(), "approved"); + if (stampBo != null) { + sealReqService.stampWithJava(inst.getBizId(), stampBo); + } + } + } + return true; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean reject(Long taskId, Long actionUserId, String remark) { + HrmFlowTask task = baseMapper.selectById(taskId); + if (task == null) { + return false; + } + HrmFlowInstance inst = instanceMapper.selectById(task.getInstId()); + if (inst == null) { + return false; + } + saveAction(taskId, inst.getInstId(), "reject", remark, actionUserId,task.getBizType(),task.getBizId()); + task.setStatus("rejected"); + baseMapper.updateById(task); + inst.setStatus("rejected"); + inst.setCurrentNodeId(null); + instanceMapper.updateById(inst); + if ("seal".equalsIgnoreCase(inst.getBizType())) { + sealReqService.updateStatus(inst.getBizId(), "rejected"); + } + bizStatusSyncHelper.setBizRejected(inst.getBizType(), inst.getBizId()); + return true; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean withdraw(Long taskId, Long actionUserId, String remark) { + HrmFlowTask task = baseMapper.selectById(taskId); + if (task == null) { + return false; + } + HrmFlowInstance inst = instanceMapper.selectById(task.getInstId()); + if (inst == null) { + return false; + } + saveAction(taskId, inst.getInstId(), "withdraw", remark, actionUserId, task.getBizType(), task.getBizId()); + task.setStatus("withdraw"); + baseMapper.updateById(task); + // 无模板一次性审批:撤回后业务回到 pending,并重新生成一个待办(仍然只允许一次审批) + if (inst.getTplId() != null && inst.getTplId() == 0L) { + inst.setStatus("running"); + instanceMapper.updateById(inst); + + HrmFlowTask reTask = new HrmFlowTask(); + reTask.setInstId(inst.getInstId()); + reTask.setNodeId(0L); + reTask.setBizType(inst.getBizType()); + reTask.setBizId(inst.getBizId()); + // 撤回后回到“原审批人”(撤回前的办理人) + reTask.setAssigneeUserId(task.getAssigneeUserId()); + reTask.setStatus("pending"); + baseMapper.insert(reTask); + + bizStatusSyncHelper.setBizPending(inst.getBizType(), inst.getBizId()); + return true; + } + + // 撤回后重新生成当前节点待办,实例回到running + inst.setStatus("running"); + instanceMapper.updateById(inst); + HrmFlowTask reTask = new HrmFlowTask(); + reTask.setInstId(inst.getInstId()); + reTask.setNodeId(task.getNodeId()); + reTask.setAssigneeUserId(actionUserId != null ? actionUserId : task.getAssigneeUserId()); + reTask.setStatus("pending"); + baseMapper.insert(reTask); + if ("seal".equalsIgnoreCase(inst.getBizType())) { + sealReqService.updateStatus(inst.getBizId(), "running"); + } + return true; + } + + private void saveAction(Long taskId, Long instId, String action, String remark, Long userId, String bizType, Long bizId) { + HrmFlowAction log = new HrmFlowAction(); + log.setTaskId(taskId); + log.setInstId(instId); + log.setAction(action); + log.setRemark(remark); + log.setActionUserId(userId); + log.setCreateTime(new Date()); + log.setBizType(bizType); + log.setBizId(bizId); + actionMapper.insert(log); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean transfer(Long taskId, Long newAssigneeUserId, Long actionUserId, String remark) { + HrmFlowTask task = baseMapper.selectById(taskId); + if (task == null) { + return false; + } + if (!"pending".equalsIgnoreCase(task.getStatus())) { + return false; + } + HrmFlowInstance inst = instanceMapper.selectById(task.getInstId()); + if (inst == null) { + return false; + } + // 记录动作 + saveAction(taskId, inst.getInstId(), "transfer", remark, actionUserId, task.getBizType(), task.getBizId()); + + // 更新办理人 + HrmFlowTask u = new HrmFlowTask(); + u.setTaskId(taskId); + u.setAssigneeUserId(newAssigneeUserId); + return baseMapper.updateById(u) > 0; + } + + @Override + public HrmFlowTaskVo queryTodoByBiz(String bizType, Long bizId, Long assigneeUserId) { + // 只取“待办 pending”的一条(理论上同一 biz 同一时刻最多一条待办) + LambdaQueryWrapper lqw = Wrappers.lambdaQuery() + .eq(bizType != null, HrmFlowTask::getBizType, bizType) + .eq(bizId != null, HrmFlowTask::getBizId, bizId) + .eq(assigneeUserId != null, HrmFlowTask::getAssigneeUserId, assigneeUserId) + .eq(HrmFlowTask::getStatus, "pending") + .orderByDesc(HrmFlowTask::getTaskId) + .last("limit 1"); + return baseMapper.selectVoOne(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HrmFlowTaskBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getTaskId() != null, HrmFlowTask::getTaskId, bo.getTaskId()); + lqw.eq(bo.getInstId() != null, HrmFlowTask::getInstId, bo.getInstId()); + lqw.eq(bo.getNodeId() != null, HrmFlowTask::getNodeId, bo.getNodeId()); + lqw.eq(bo.getAssigneeUserId() != null, HrmFlowTask::getAssigneeUserId, bo.getAssigneeUserId()); + lqw.eq(bo.getStatus() != null, HrmFlowTask::getStatus, bo.getStatus()); + lqw.eq(bo.getBizType() != null, HrmFlowTask::getBizType, bo.getBizType()); + lqw.eq(bo.getBizId() != null, HrmFlowTask::getBizId, bo.getBizId()); + lqw.eq(bo.getCreateBy() != null, HrmFlowTask::getCreateBy, bo.getCreateBy()); + return lqw; + } +} diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowTemplateServiceImpl.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowTemplateServiceImpl.java new file mode 100644 index 0000000..316a9d0 --- /dev/null +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowTemplateServiceImpl.java @@ -0,0 +1,74 @@ +package com.ruoyi.hrm.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.hrm.domain.HrmFlowTemplate; +import com.ruoyi.hrm.domain.bo.HrmFlowTemplateBo; +import com.ruoyi.hrm.domain.vo.HrmFlowTemplateVo; +import com.ruoyi.hrm.mapper.HrmFlowTemplateMapper; +import com.ruoyi.hrm.service.IHrmFlowTemplateService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; + +@RequiredArgsConstructor +@Service +public class HrmFlowTemplateServiceImpl implements IHrmFlowTemplateService { + + private final HrmFlowTemplateMapper baseMapper; + + @Override + public HrmFlowTemplateVo queryById(Long tplId) { + return baseMapper.selectVoById(tplId); + } + + @Override + public TableDataInfo queryPageList(HrmFlowTemplateBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + @Override + public List queryList(HrmFlowTemplateBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(HrmFlowTemplateBo bo) { + HrmFlowTemplate add = BeanUtil.toBean(bo, HrmFlowTemplate.class); + return baseMapper.insert(add) > 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(HrmFlowTemplateBo bo) { + HrmFlowTemplate update = BeanUtil.toBean(bo, HrmFlowTemplate.class); + return baseMapper.updateById(update) > 0; + } + + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + return baseMapper.deleteBatchIds(ids) > 0; + } + + private LambdaQueryWrapper buildQueryWrapper(HrmFlowTemplateBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getTplId() != null, HrmFlowTemplate::getTplId, bo.getTplId()); + lqw.like(bo.getTplCode() != null, HrmFlowTemplate::getTplCode, bo.getTplCode()); + lqw.like(bo.getTplName() != null, HrmFlowTemplate::getTplName, bo.getTplName()); + lqw.eq(bo.getBizType() != null, HrmFlowTemplate::getBizType, bo.getBizType()); + lqw.eq(bo.getVersion() != null, HrmFlowTemplate::getVersion, bo.getVersion()); + lqw.eq(bo.getEnabled() != null, HrmFlowTemplate::getEnabled, bo.getEnabled()); + return lqw; + } +} diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFormDataServiceImpl.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFormDataServiceImpl.java new file mode 100644 index 0000000..dcfd769 --- /dev/null +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFormDataServiceImpl.java @@ -0,0 +1,71 @@ +package com.ruoyi.hrm.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.hrm.domain.HrmFormData; +import com.ruoyi.hrm.domain.bo.HrmFormDataBo; +import com.ruoyi.hrm.domain.vo.HrmFormDataVo; +import com.ruoyi.hrm.mapper.HrmFormDataMapper; +import com.ruoyi.hrm.service.IHrmFormDataService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; + +@RequiredArgsConstructor +@Service +public class HrmFormDataServiceImpl implements IHrmFormDataService { + + private final HrmFormDataMapper baseMapper; + + @Override + public HrmFormDataVo queryById(Long formId) { + return baseMapper.selectVoById(formId); + } + + @Override + public TableDataInfo queryPageList(HrmFormDataBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + @Override + public List queryList(HrmFormDataBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(HrmFormDataBo bo) { + HrmFormData add = BeanUtil.toBean(bo, HrmFormData.class); + return baseMapper.insert(add) > 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(HrmFormDataBo bo) { + HrmFormData update = BeanUtil.toBean(bo, HrmFormData.class); + return baseMapper.updateById(update) > 0; + } + + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + return baseMapper.deleteBatchIds(ids) > 0; + } + + private LambdaQueryWrapper buildQueryWrapper(HrmFormDataBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getFormId() != null, HrmFormData::getFormId, bo.getFormId()); + lqw.eq(bo.getBizType() != null, HrmFormData::getBizType, bo.getBizType()); + lqw.eq(bo.getBizId() != null, HrmFormData::getBizId, bo.getBizId()); + return lqw; + } +} diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmHeadcountPlanServiceImpl.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmHeadcountPlanServiceImpl.java new file mode 100644 index 0000000..50c371b --- /dev/null +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmHeadcountPlanServiceImpl.java @@ -0,0 +1,74 @@ +package com.ruoyi.hrm.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.hrm.domain.HrmHeadcountPlan; +import com.ruoyi.hrm.domain.bo.HrmHeadcountPlanBo; +import com.ruoyi.hrm.domain.vo.HrmHeadcountPlanVo; +import com.ruoyi.hrm.mapper.HrmHeadcountPlanMapper; +import com.ruoyi.hrm.service.IHrmHeadcountPlanService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; + +@RequiredArgsConstructor +@Service +public class HrmHeadcountPlanServiceImpl implements IHrmHeadcountPlanService { + + private final HrmHeadcountPlanMapper baseMapper; + + @Override + public HrmHeadcountPlanVo queryById(Long planId) { + return baseMapper.selectVoById(planId); + } + + @Override + public TableDataInfo queryPageList(HrmHeadcountPlanBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + @Override + public List queryList(HrmHeadcountPlanBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(HrmHeadcountPlanBo bo) { + HrmHeadcountPlan add = BeanUtil.toBean(bo, HrmHeadcountPlan.class); + return baseMapper.insert(add) > 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(HrmHeadcountPlanBo bo) { + HrmHeadcountPlan update = BeanUtil.toBean(bo, HrmHeadcountPlan.class); + return baseMapper.updateById(update) > 0; + } + + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + return baseMapper.deleteBatchIds(ids) > 0; + } + + private LambdaQueryWrapper buildQueryWrapper(HrmHeadcountPlanBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getPlanId() != null, HrmHeadcountPlan::getPlanId, bo.getPlanId()); + lqw.eq(bo.getDeptId() != null, HrmHeadcountPlan::getDeptId, bo.getDeptId()); + lqw.eq(bo.getPostId() != null, HrmHeadcountPlan::getPostId, bo.getPostId()); + lqw.eq(bo.getYear() != null, HrmHeadcountPlan::getYear, bo.getYear()); + lqw.eq(bo.getMonth() != null, HrmHeadcountPlan::getMonth, bo.getMonth()); + lqw.orderByDesc(HrmHeadcountPlan::getYear).orderByDesc(HrmHeadcountPlan::getMonth); + return lqw; + } +} diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmLeaveBalanceServiceImpl.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmLeaveBalanceServiceImpl.java new file mode 100644 index 0000000..db52135 --- /dev/null +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmLeaveBalanceServiceImpl.java @@ -0,0 +1,72 @@ +package com.ruoyi.hrm.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.hrm.domain.HrmLeaveBalance; +import com.ruoyi.hrm.domain.bo.HrmLeaveBalanceBo; +import com.ruoyi.hrm.domain.vo.HrmLeaveBalanceVo; +import com.ruoyi.hrm.mapper.HrmLeaveBalanceMapper; +import com.ruoyi.hrm.service.IHrmLeaveBalanceService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; + +@RequiredArgsConstructor +@Service +public class HrmLeaveBalanceServiceImpl implements IHrmLeaveBalanceService { + + private final HrmLeaveBalanceMapper baseMapper; + + @Override + public HrmLeaveBalanceVo queryById(Long balId) { + return baseMapper.selectVoById(balId); + } + + @Override + public TableDataInfo queryPageList(HrmLeaveBalanceBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + @Override + public List queryList(HrmLeaveBalanceBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(HrmLeaveBalanceBo bo) { + HrmLeaveBalance add = BeanUtil.toBean(bo, HrmLeaveBalance.class); + return baseMapper.insert(add) > 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(HrmLeaveBalanceBo bo) { + HrmLeaveBalance update = BeanUtil.toBean(bo, HrmLeaveBalance.class); + return baseMapper.updateById(update) > 0; + } + + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + return baseMapper.deleteBatchIds(ids) > 0; + } + + private LambdaQueryWrapper buildQueryWrapper(HrmLeaveBalanceBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getBalId() != null, HrmLeaveBalance::getBalId, bo.getBalId()); + lqw.eq(bo.getEmpId() != null, HrmLeaveBalance::getEmpId, bo.getEmpId()); + lqw.eq(bo.getLeaveType() != null, HrmLeaveBalance::getLeaveType, bo.getLeaveType()); + lqw.eq(bo.getExpireDate() != null, HrmLeaveBalance::getExpireDate, bo.getExpireDate()); + return lqw; + } +} diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmLeaveReqServiceImpl.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmLeaveReqServiceImpl.java new file mode 100644 index 0000000..1a98bab --- /dev/null +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmLeaveReqServiceImpl.java @@ -0,0 +1,126 @@ +package com.ruoyi.hrm.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.helper.LoginHelper; +import com.ruoyi.hrm.domain.HrmFlowTemplate; +import com.ruoyi.hrm.domain.HrmLeaveReq; +import com.ruoyi.hrm.domain.bo.HrmFlowStartBo; +import com.ruoyi.hrm.domain.bo.HrmLeaveReqBo; +import com.ruoyi.hrm.domain.vo.HrmLeaveReqVo; +import com.ruoyi.hrm.mapper.HrmFlowTemplateMapper; +import com.ruoyi.hrm.mapper.HrmLeaveReqMapper; +import com.ruoyi.hrm.service.IHrmFlowInstanceService; +import com.ruoyi.hrm.service.IHrmLeaveReqService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; + +@RequiredArgsConstructor +@Service +public class HrmLeaveReqServiceImpl implements IHrmLeaveReqService { + + private final HrmLeaveReqMapper baseMapper; + private final HrmFlowTemplateMapper flowTemplateMapper; + private final IHrmFlowInstanceService flowInstanceService; + + @Override + public HrmLeaveReqVo queryById(Long bizId) { + return baseMapper.selectVoById(bizId); + } + + @Override + public TableDataInfo queryPageList(HrmLeaveReqBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + @Override + public List queryList(HrmLeaveReqBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(HrmLeaveReqBo bo) { + HrmLeaveReq add = BeanUtil.toBean(bo, HrmLeaveReq.class); + add.setStatus(defaultStatus(add.getStatus())); + boolean ok = baseMapper.insert(add) > 0; + + // 当提交为 pending 时,自动启动流程实例(hrm_flow_instance/hrm_flow_task) + if (ok && "pending".equalsIgnoreCase(add.getStatus())) { + + Long startUserId = LoginHelper.getUserId(); + + // 1) 优先:前端明确选择了模板(tplId 不为空) + HrmFlowTemplate tpl = null; + if (bo.getTplId() != null) { + tpl = flowTemplateMapper.selectOne(Wrappers.lambdaQuery() + .eq(HrmFlowTemplate::getTplId, bo.getTplId()) + .eq(HrmFlowTemplate::getBizType, "leave") + .eq(HrmFlowTemplate::getEnabled, 1) + .last("limit 1")); + } + + // 2) 手动审批:前端选择了手动审批人时,不允许兜底去找模板,否则会意外走到模板里的规则(例如 dept_leader) + boolean manualMode = bo.getTplId() == null && bo.getManualAssigneeUserId() != null; + + // 3) 兜底:只有在既没有 tplId、也没有手动审批人的情况下,才自动选择最新启用模板 + if (!manualMode && tpl == null) { + tpl = flowTemplateMapper.selectOne(Wrappers.lambdaQuery() + .eq(HrmFlowTemplate::getBizType, "leave") + .eq(HrmFlowTemplate::getEnabled, 1) + .orderByDesc(HrmFlowTemplate::getVersion) + .last("limit 1")); + } + + HrmFlowStartBo start = new HrmFlowStartBo(); + if (tpl != null) { + start.setTplId(tpl.getTplId()); + } + start.setManualAssigneeUserId(bo.getManualAssigneeUserId()); + start.setBizType("leave"); + start.setBizId(add.getBizId()); + start.setStartUserId(startUserId); + + flowInstanceService.startInstance(start); + } + + return ok; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(HrmLeaveReqBo bo) { + HrmLeaveReq update = BeanUtil.toBean(bo, HrmLeaveReq.class); + return baseMapper.updateById(update) > 0; + } + + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + return baseMapper.deleteBatchIds(ids) > 0; + } + + private LambdaQueryWrapper buildQueryWrapper(HrmLeaveReqBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getBizId() != null, HrmLeaveReq::getBizId, bo.getBizId()); + lqw.eq(bo.getEmpId() != null, HrmLeaveReq::getEmpId, bo.getEmpId()); + lqw.eq(bo.getLeaveType() != null, HrmLeaveReq::getLeaveType, bo.getLeaveType()); + lqw.eq(bo.getStatus() != null, HrmLeaveReq::getStatus, bo.getStatus()); + lqw.eq(bo.getStartTime() != null, HrmLeaveReq::getStartTime, bo.getStartTime()); + return lqw; + } + + private String defaultStatus(String status) { + return status == null ? "draft" : status; + } +} diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmPayPlanServiceImpl.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmPayPlanServiceImpl.java new file mode 100644 index 0000000..27fc83c --- /dev/null +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmPayPlanServiceImpl.java @@ -0,0 +1,70 @@ +package com.ruoyi.hrm.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.hrm.domain.HrmPayPlan; +import com.ruoyi.hrm.domain.bo.HrmPayPlanBo; +import com.ruoyi.hrm.domain.vo.HrmPayPlanVo; +import com.ruoyi.hrm.mapper.HrmPayPlanMapper; +import com.ruoyi.hrm.service.IHrmPayPlanService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; + +@RequiredArgsConstructor +@Service +public class HrmPayPlanServiceImpl implements IHrmPayPlanService { + + private final HrmPayPlanMapper baseMapper; + + @Override + public HrmPayPlanVo queryById(Long planId) { + return baseMapper.selectVoById(planId); + } + + @Override + public TableDataInfo queryPageList(HrmPayPlanBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + @Override + public List queryList(HrmPayPlanBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(HrmPayPlanBo bo) { + HrmPayPlan add = BeanUtil.toBean(bo, HrmPayPlan.class); + return baseMapper.insert(add) > 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(HrmPayPlanBo bo) { + HrmPayPlan update = BeanUtil.toBean(bo, HrmPayPlan.class); + return baseMapper.updateById(update) > 0; + } + + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + return baseMapper.deleteBatchIds(ids) > 0; + } + + private LambdaQueryWrapper buildQueryWrapper(HrmPayPlanBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getPlanId() != null, HrmPayPlan::getPlanId, bo.getPlanId()); + lqw.like(bo.getPlanName() != null, HrmPayPlan::getPlanName, bo.getPlanName()); + return lqw; + } +} diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmPayRunServiceImpl.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmPayRunServiceImpl.java new file mode 100644 index 0000000..8069d02 --- /dev/null +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmPayRunServiceImpl.java @@ -0,0 +1,72 @@ +package com.ruoyi.hrm.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.hrm.domain.HrmPayRun; +import com.ruoyi.hrm.domain.bo.HrmPayRunBo; +import com.ruoyi.hrm.domain.vo.HrmPayRunVo; +import com.ruoyi.hrm.mapper.HrmPayRunMapper; +import com.ruoyi.hrm.service.IHrmPayRunService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; + +@RequiredArgsConstructor +@Service +public class HrmPayRunServiceImpl implements IHrmPayRunService { + + private final HrmPayRunMapper baseMapper; + + @Override + public HrmPayRunVo queryById(Long runId) { + return baseMapper.selectVoById(runId); + } + + @Override + public TableDataInfo queryPageList(HrmPayRunBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + @Override + public List queryList(HrmPayRunBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(HrmPayRunBo bo) { + HrmPayRun add = BeanUtil.toBean(bo, HrmPayRun.class); + return baseMapper.insert(add) > 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(HrmPayRunBo bo) { + HrmPayRun update = BeanUtil.toBean(bo, HrmPayRun.class); + return baseMapper.updateById(update) > 0; + } + + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + return baseMapper.deleteBatchIds(ids) > 0; + } + + private LambdaQueryWrapper buildQueryWrapper(HrmPayRunBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getRunId() != null, HrmPayRun::getRunId, bo.getRunId()); + lqw.like(bo.getPeriod() != null, HrmPayRun::getPeriod, bo.getPeriod()); + lqw.eq(bo.getStatus() != null, HrmPayRun::getStatus, bo.getStatus()); + lqw.eq(bo.getPlanId() != null, HrmPayRun::getPlanId, bo.getPlanId()); + return lqw; + } +} diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmPayslipServiceImpl.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmPayslipServiceImpl.java new file mode 100644 index 0000000..dbb7210 --- /dev/null +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmPayslipServiceImpl.java @@ -0,0 +1,77 @@ +package com.ruoyi.hrm.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.hrm.domain.HrmPayslip; +import com.ruoyi.hrm.domain.bo.HrmPayslipBo; +import com.ruoyi.hrm.domain.vo.HrmPayslipVo; +import com.ruoyi.hrm.mapper.HrmPayslipMapper; +import com.ruoyi.hrm.service.IHrmPayslipService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; + +@RequiredArgsConstructor +@Service +public class HrmPayslipServiceImpl implements IHrmPayslipService { + + private final HrmPayslipMapper baseMapper; + + @Override + public HrmPayslipVo queryById(Long slipId) { + return baseMapper.selectVoById(slipId); + } + + @Override + public TableDataInfo queryPageList(HrmPayslipBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + @Override + public List queryList(HrmPayslipBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(HrmPayslipBo bo) { + HrmPayslip add = BeanUtil.toBean(bo, HrmPayslip.class); + add.setStatus(defaultStatus(add.getStatus())); + return baseMapper.insert(add) > 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(HrmPayslipBo bo) { + HrmPayslip update = BeanUtil.toBean(bo, HrmPayslip.class); + return baseMapper.updateById(update) > 0; + } + + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + return baseMapper.deleteBatchIds(ids) > 0; + } + + private LambdaQueryWrapper buildQueryWrapper(HrmPayslipBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getSlipId() != null, HrmPayslip::getSlipId, bo.getSlipId()); + lqw.eq(bo.getRunId() != null, HrmPayslip::getRunId, bo.getRunId()); + lqw.eq(bo.getEmpId() != null, HrmPayslip::getEmpId, bo.getEmpId()); + lqw.eq(bo.getStatus() != null, HrmPayslip::getStatus, bo.getStatus()); + return lqw; + } + + private String defaultStatus(String status) { + return status == null ? "issued" : status; + } +} diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmPunchServiceImpl.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmPunchServiceImpl.java new file mode 100644 index 0000000..83097b7 --- /dev/null +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmPunchServiceImpl.java @@ -0,0 +1,72 @@ +package com.ruoyi.hrm.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.hrm.domain.HrmPunch; +import com.ruoyi.hrm.domain.bo.HrmPunchBo; +import com.ruoyi.hrm.domain.vo.HrmPunchVo; +import com.ruoyi.hrm.mapper.HrmPunchMapper; +import com.ruoyi.hrm.service.IHrmPunchService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; + +@RequiredArgsConstructor +@Service +public class HrmPunchServiceImpl implements IHrmPunchService { + + private final HrmPunchMapper baseMapper; + + @Override + public HrmPunchVo queryById(Long punchId) { + return baseMapper.selectVoById(punchId); + } + + @Override + public TableDataInfo queryPageList(HrmPunchBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + @Override + public List queryList(HrmPunchBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(HrmPunchBo bo) { + HrmPunch add = BeanUtil.toBean(bo, HrmPunch.class); + return baseMapper.insert(add) > 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(HrmPunchBo bo) { + HrmPunch update = BeanUtil.toBean(bo, HrmPunch.class); + return baseMapper.updateById(update) > 0; + } + + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + return baseMapper.deleteBatchIds(ids) > 0; + } + + private LambdaQueryWrapper buildQueryWrapper(HrmPunchBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getPunchId() != null, HrmPunch::getPunchId, bo.getPunchId()); + lqw.eq(bo.getEmpId() != null, HrmPunch::getEmpId, bo.getEmpId()); + lqw.eq(bo.getPunchTime() != null, HrmPunch::getPunchTime, bo.getPunchTime()); + lqw.eq(bo.getSource() != null, HrmPunch::getSource, bo.getSource()); + return lqw; + } +} diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmReimburseReqServiceImpl.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmReimburseReqServiceImpl.java new file mode 100644 index 0000000..d5b02ae --- /dev/null +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmReimburseReqServiceImpl.java @@ -0,0 +1,107 @@ +package com.ruoyi.hrm.service.impl; + +import com.ruoyi.common.helper.LoginHelper; +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.hrm.domain.HrmFlowTemplate; +import com.ruoyi.hrm.domain.HrmReimburseReq; +import com.ruoyi.hrm.domain.bo.HrmFlowStartBo; +import com.ruoyi.hrm.domain.bo.HrmReimburseReqBo; +import com.ruoyi.hrm.domain.vo.HrmReimburseReqVo; +import com.ruoyi.hrm.mapper.HrmFlowTemplateMapper; +import com.ruoyi.hrm.mapper.HrmReimburseReqMapper; +import com.ruoyi.hrm.service.IHrmFlowInstanceService; +import com.ruoyi.hrm.service.IHrmReimburseReqService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; + +@RequiredArgsConstructor +@Service +public class HrmReimburseReqServiceImpl implements IHrmReimburseReqService { + + private final HrmReimburseReqMapper baseMapper; + private final HrmFlowTemplateMapper flowTemplateMapper; + private final IHrmFlowInstanceService flowInstanceService; + + @Override + public HrmReimburseReqVo queryById(Long bizId) { + return baseMapper.selectVoById(bizId); + } + + @Override + public TableDataInfo queryPageList(HrmReimburseReqBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + @Override + public List queryList(HrmReimburseReqBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(HrmReimburseReqBo bo) { + HrmReimburseReq add = BeanUtil.toBean(bo, HrmReimburseReq.class); + add.setStatus(defaultStatus(add.getStatus())); + boolean ok = baseMapper.insert(add) > 0; + + if (ok && "pending".equalsIgnoreCase(add.getStatus())) { + // 选择启用的最高版本模板(允许无模板:走自选审批人一次性审批) + HrmFlowTemplate tpl = flowTemplateMapper.selectOne(Wrappers.lambdaQuery() + .eq(HrmFlowTemplate::getBizType, "reimburse") + .eq(HrmFlowTemplate::getEnabled, 1) + .orderByDesc(HrmFlowTemplate::getVersion) + .last("limit 1")); + + Long startUserId = LoginHelper.getUserId(); + HrmFlowStartBo start = new HrmFlowStartBo(); + if (tpl != null) { + start.setTplId(tpl.getTplId()); + } + start.setManualAssigneeUserId(bo.getManualAssigneeUserId()); + start.setBizType("reimburse"); + start.setBizId(add.getBizId()); + start.setStartUserId(startUserId); + flowInstanceService.startInstance(start); + } + + return ok; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(HrmReimburseReqBo bo) { + HrmReimburseReq update = BeanUtil.toBean(bo, HrmReimburseReq.class); + return baseMapper.updateById(update) > 0; + } + + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + return baseMapper.deleteBatchIds(ids) > 0; + } + + private LambdaQueryWrapper buildQueryWrapper(HrmReimburseReqBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getBizId() != null, HrmReimburseReq::getBizId, bo.getBizId()); + lqw.eq(bo.getEmpId() != null, HrmReimburseReq::getEmpId, bo.getEmpId()); + lqw.eq(bo.getReimburseType() != null, HrmReimburseReq::getReimburseType, bo.getReimburseType()); + lqw.eq(bo.getStatus() != null, HrmReimburseReq::getStatus, bo.getStatus()); + return lqw; + } + + private String defaultStatus(String status) { + return status == null ? "draft" : status; + } +} + diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmScheduleServiceImpl.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmScheduleServiceImpl.java new file mode 100644 index 0000000..488ce2d --- /dev/null +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmScheduleServiceImpl.java @@ -0,0 +1,72 @@ +package com.ruoyi.hrm.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.hrm.domain.HrmSchedule; +import com.ruoyi.hrm.domain.bo.HrmScheduleBo; +import com.ruoyi.hrm.domain.vo.HrmScheduleVo; +import com.ruoyi.hrm.mapper.HrmScheduleMapper; +import com.ruoyi.hrm.service.IHrmScheduleService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; + +@RequiredArgsConstructor +@Service +public class HrmScheduleServiceImpl implements IHrmScheduleService { + + private final HrmScheduleMapper baseMapper; + + @Override + public HrmScheduleVo queryById(Long schedId) { + return baseMapper.selectVoById(schedId); + } + + @Override + public TableDataInfo queryPageList(HrmScheduleBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + @Override + public List queryList(HrmScheduleBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(HrmScheduleBo bo) { + HrmSchedule add = BeanUtil.toBean(bo, HrmSchedule.class); + return baseMapper.insert(add) > 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(HrmScheduleBo bo) { + HrmSchedule update = BeanUtil.toBean(bo, HrmSchedule.class); + return baseMapper.updateById(update) > 0; + } + + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + return baseMapper.deleteBatchIds(ids) > 0; + } + + private LambdaQueryWrapper buildQueryWrapper(HrmScheduleBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getSchedId() != null, HrmSchedule::getSchedId, bo.getSchedId()); + lqw.eq(bo.getEmpId() != null, HrmSchedule::getEmpId, bo.getEmpId()); + lqw.eq(bo.getWorkDate() != null, HrmSchedule::getWorkDate, bo.getWorkDate()); + lqw.eq(bo.getShiftId() != null, HrmSchedule::getShiftId, bo.getShiftId()); + return lqw; + } +} diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmSealReqServiceImpl.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmSealReqServiceImpl.java new file mode 100644 index 0000000..51eef05 --- /dev/null +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmSealReqServiceImpl.java @@ -0,0 +1,268 @@ +package com.ruoyi.hrm.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.io.IoUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.helper.LoginHelper; +import com.ruoyi.hrm.config.StampProperties; +import com.ruoyi.hrm.domain.HrmSealReq; +import com.ruoyi.hrm.domain.bo.HrmSealReqBo; +import com.ruoyi.hrm.domain.bo.HrmSealStampBo; +import com.ruoyi.hrm.domain.bo.HrmFlowStartBo; +import com.ruoyi.hrm.domain.vo.HrmSealReqVo; +import com.ruoyi.hrm.mapper.HrmSealReqMapper; +import com.ruoyi.hrm.service.IHrmFlowInstanceService; +import com.ruoyi.hrm.service.IHrmSealReqService; +import com.ruoyi.oss.core.OssClient; +import com.ruoyi.oss.entity.UploadResult; +import com.ruoyi.oss.factory.OssFactory; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.util.Collection; +import java.util.List; + +/** + * 用印申请 服务实现 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class HrmSealReqServiceImpl implements IHrmSealReqService { + + private final HrmSealReqMapper baseMapper; + private final StampProperties stampProperties; + private final IHrmFlowInstanceService flowInstanceService; + + @Override + public HrmSealReqVo queryById(Long bizId) { + return baseMapper.selectVoById(bizId); + } + + @Override + public TableDataInfo queryPageList(HrmSealReqBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + @Override + public List queryList(HrmSealReqBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(HrmSealReqBo bo) { + HrmSealReq add = BeanUtil.toBean(bo, HrmSealReq.class); + add.setStatus(defaultStatus(add.getStatus())); + validEntityBeforeSave(add); + boolean ok = baseMapper.insert(add) > 0; + + // 只要传入了 tplId 或 manualAssigneeUserId,就代表需要启动流程 + Long tplId = bo.getTplId() != null ? bo.getTplId() : bo.getFlowTplId(); + boolean shouldStartFlow = tplId != null || bo.getManualAssigneeUserId() != null; + + if (ok && shouldStartFlow) { + HrmFlowStartBo start = new HrmFlowStartBo(); + start.setTplId(tplId); + start.setManualAssigneeUserId(bo.getManualAssigneeUserId()); + start.setBizType("seal"); + start.setBizId(add.getBizId()); + start.setStartUserId(LoginHelper.getUserId()); + start.setContentJson(bo.getContentJson()); + + flowInstanceService.startInstance(start); + // 更新状态为流转中 + updateStatus(add.getBizId(), "running"); + } + return ok; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(HrmSealReqBo bo) { + if (bo.getBizId() == null) { + throw new ServiceException("bizId不能为空"); + } + HrmSealReq update = BeanUtil.toBean(bo, HrmSealReq.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + // 可添加业务校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateStatus(Long bizId, String status) { + HrmSealReq req = new HrmSealReq(); + req.setBizId(bizId); + req.setStatus(status); + return baseMapper.updateById(req) > 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public String stampWithJava(Long bizId, HrmSealStampBo cmd) { + if (!Boolean.TRUE.equals(stampProperties.getJavaService().isEnabled())) { + throw new ServiceException("Java盖章未启用"); + } + String resultUrl = doPdfStamp(cmd); + // 更新回执状态/附件占位 + HrmSealReq update = new HrmSealReq(); + update.setBizId(bizId); + update.setReceiptStatus("done"); + update.setReceiptFileIds(resultUrl); + baseMapper.updateById(update); + return resultUrl; + } + + @Override + public String stampWithPython(Long bizId, HrmSealStampBo cmd) { + if (!Boolean.TRUE.equals(stampProperties.getPythonService().isEnabled())) { + throw new ServiceException("Python盖章未启用"); + } + // TODO: 调用外部Python服务(用户未提供接口,保留占位) + throw new ServiceException("Python盖章接口未实现"); + } + + private LambdaQueryWrapper buildQueryWrapper(HrmSealReqBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getBizId() != null, HrmSealReq::getBizId, bo.getBizId()); + lqw.eq(bo.getEmpId() != null, HrmSealReq::getEmpId, bo.getEmpId()); + lqw.eq(bo.getSealType() != null, HrmSealReq::getSealType, bo.getSealType()); + lqw.eq(bo.getStatus() != null, HrmSealReq::getStatus, bo.getStatus()); + lqw.orderByDesc(HrmSealReq::getCreateTime); + return lqw; + } + + private void validEntityBeforeSave(HrmSealReq entity) { + // 预留数据校验,如唯一约束 + } + + private String defaultStatus(String status) { + return status == null ? "draft" : status; + } + + private String doPdfStamp(HrmSealStampBo cmd) { + try (InputStream pdfIn = getObject(cmd.getTargetFileUrl()); + InputStream imgIn = getObject(cmd.getStampImageUrl()); + PDDocument document = PDDocument.load(pdfIn); + ByteArrayOutputStream bos = new ByteArrayOutputStream()) { + + int pageIndex = cmd.getPageNo() - 1; + if (pageIndex < 0 || pageIndex >= document.getNumberOfPages()) { + throw new ServiceException("页码超出范围"); + } + PDPage page = document.getPage(pageIndex); + PDRectangle mediaBox = page.getMediaBox(); + + // 坐标约定说明: + // 1) PdfStamper emitStamp():输出的是“左下角为原点”的 viewport 像素坐标(xPx,yPx)。 + // 2) PDFBox:使用“左下角为原点”的 PDF 用户单位(pt)。 + // 3) 因此:后端只做比例换算(px -> pt),不要再做 y 翻转。 + + byte[] imgBytes = IoUtil.readBytes(imgIn); + PDImageXObject image = PDImageXObject.createFromByteArray(document, imgBytes, "stamp"); + + // 方案B:严格使用印章原图尺寸(不使用前端传来的 widthPx/heightPx) + float stampW = image.getWidth(); + float stampH = image.getHeight(); + + // 坐标换算:前端 xPx/yPx 是基于 pdf.js 渲染后的 viewport 像素;PDFBox 使用的是 PDF 用户单位(pt)。 + // 前端 PdfStamper emitStamp() 输出的 yPx 已经是“左下角为原点”的 viewport 像素坐标。 + float pdfW = mediaBox.getWidth(); + float pdfH = mediaBox.getHeight(); + + float x; + float y; + if (cmd.getViewportWidth() != null && cmd.getViewportHeight() != null + && cmd.getViewportWidth() > 0 && cmd.getViewportHeight() > 0) { + float ratioX = pdfW / cmd.getViewportWidth(); + float ratioY = pdfH / cmd.getViewportHeight(); + x = cmd.getXPx() * ratioX; + + // yPx 的约定: + // - PdfStamper emitStamp() 输出的是“左下角为原点”的 viewport 像素坐标 + // - PDFBox 也以左下角为原点 + // 因此只需要做比例换算,不要再翻转。 + y = cmd.getYPx() * ratioY; + } else { + // 兼容:若老客户端未传 viewport 尺寸,则按“直接当作 PDF 坐标”处理(可能有偏差) + x = cmd.getXPx(); + y = cmd.getYPx(); + } + + // 方案B1:等比例缩放到“外接框不超过 4cm x 4cm”(保持比例) + // PDFBox 的单位是 pt:1 inch = 72pt,1cm = 72/2.54 ≈ 28.346pt + final float maxCm = 4.0f; + final float maxPt = maxCm * 72.0f / 2.54f; + // 缩放因子:让宽高都不超过 maxPt + float scale = Math.min(maxPt / stampW, maxPt / stampH); + // 不放大(避免小图被放大到很糊);如需允许放大,可删除这行限制 + scale = Math.min(scale, 1.0f); + + float width = stampW * scale; + float height = stampH * scale; + + log.info("[stamp] pdfW={},pdfH={}, viewportW={},viewportH={}, ratioX={},ratioY={}, xPx={},yPx={}, x={},y={}, stampW={},stampH={}, drawW={},drawH={}", + pdfW, pdfH, + cmd.getViewportWidth(), cmd.getViewportHeight(), + (cmd.getViewportWidth()!=null&&cmd.getViewportWidth()>0)?(pdfW/cmd.getViewportWidth()):null, + (cmd.getViewportHeight()!=null&&cmd.getViewportHeight()>0)?(pdfH/cmd.getViewportHeight()):null, + cmd.getXPx(), cmd.getYPx(), + x, y, + stampW, stampH, + width, height); + + // 保证不越界:方案B下不裁剪宽高(否则会变形/不是原图大小),而是回退到页面内。 + if (x + width > mediaBox.getWidth()) { + x = Math.max(0, mediaBox.getWidth() - width); + } + if (y + height > mediaBox.getHeight()) { + y = Math.max(0, mediaBox.getHeight() - height); + } + + try (PDPageContentStream contentStream = new PDPageContentStream(document, page, + PDPageContentStream.AppendMode.APPEND, true, true)) { + contentStream.drawImage(image, x, y, width, height); + } + + document.save(bos); + + OssClient storage = OssFactory.instance(); + UploadResult uploadResult = storage.uploadSuffix(bos.toByteArray(), ".pdf", "application/pdf"); + return uploadResult.getUrl(); + } + catch (Exception e) { + log.error("PDF盖章失败", e); + throw new ServiceException("PDF盖章失败: " + e.getMessage()); + } + } + + private InputStream getObject(String url) { + OssClient storage = OssFactory.instance(); + return storage.getObjectContent(url); + } +} diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmShiftServiceImpl.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmShiftServiceImpl.java new file mode 100644 index 0000000..cd9055a --- /dev/null +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmShiftServiceImpl.java @@ -0,0 +1,72 @@ +package com.ruoyi.hrm.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.hrm.domain.HrmShift; +import com.ruoyi.hrm.domain.bo.HrmShiftBo; +import com.ruoyi.hrm.domain.vo.HrmShiftVo; +import com.ruoyi.hrm.mapper.HrmShiftMapper; +import com.ruoyi.hrm.service.IHrmShiftService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; + +@RequiredArgsConstructor +@Service +public class HrmShiftServiceImpl implements IHrmShiftService { + + private final HrmShiftMapper baseMapper; + + @Override + public HrmShiftVo queryById(Long shiftId) { + return baseMapper.selectVoById(shiftId); + } + + @Override + public TableDataInfo queryPageList(HrmShiftBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + @Override + public List queryList(HrmShiftBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(HrmShiftBo bo) { + HrmShift add = BeanUtil.toBean(bo, HrmShift.class); + return baseMapper.insert(add) > 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(HrmShiftBo bo) { + HrmShift update = BeanUtil.toBean(bo, HrmShift.class); + return baseMapper.updateById(update) > 0; + } + + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + return baseMapper.deleteBatchIds(ids) > 0; + } + + private LambdaQueryWrapper buildQueryWrapper(HrmShiftBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getShiftId() != null, HrmShift::getShiftId, bo.getShiftId()); + lqw.like(bo.getShiftCode() != null, HrmShift::getShiftCode, bo.getShiftCode()); + lqw.like(bo.getShiftName() != null, HrmShift::getShiftName, bo.getShiftName()); + lqw.eq(bo.getIsNight() != null, HrmShift::getIsNight, bo.getIsNight()); + return lqw; + } +} diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmStatSnapshotServiceImpl.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmStatSnapshotServiceImpl.java new file mode 100644 index 0000000..fe57e74 --- /dev/null +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmStatSnapshotServiceImpl.java @@ -0,0 +1,71 @@ +package com.ruoyi.hrm.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.hrm.domain.HrmStatSnapshot; +import com.ruoyi.hrm.domain.bo.HrmStatSnapshotBo; +import com.ruoyi.hrm.domain.vo.HrmStatSnapshotVo; +import com.ruoyi.hrm.mapper.HrmStatSnapshotMapper; +import com.ruoyi.hrm.service.IHrmStatSnapshotService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; + +@RequiredArgsConstructor +@Service +public class HrmStatSnapshotServiceImpl implements IHrmStatSnapshotService { + + private final HrmStatSnapshotMapper baseMapper; + + @Override + public HrmStatSnapshotVo queryById(Long snapId) { + return baseMapper.selectVoById(snapId); + } + + @Override + public TableDataInfo queryPageList(HrmStatSnapshotBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + @Override + public List queryList(HrmStatSnapshotBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(HrmStatSnapshotBo bo) { + HrmStatSnapshot add = BeanUtil.toBean(bo, HrmStatSnapshot.class); + return baseMapper.insert(add) > 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(HrmStatSnapshotBo bo) { + HrmStatSnapshot update = BeanUtil.toBean(bo, HrmStatSnapshot.class); + return baseMapper.updateById(update) > 0; + } + + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + return baseMapper.deleteBatchIds(ids) > 0; + } + + private LambdaQueryWrapper buildQueryWrapper(HrmStatSnapshotBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getSnapId() != null, HrmStatSnapshot::getSnapId, bo.getSnapId()); + lqw.eq(bo.getStatDate() != null, HrmStatSnapshot::getStatDate, bo.getStatDate()); + lqw.eq(bo.getStatType() != null, HrmStatSnapshot::getStatType, bo.getStatType()); + return lqw; + } +} diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmTravelReqServiceImpl.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmTravelReqServiceImpl.java new file mode 100644 index 0000000..b9fffa5 --- /dev/null +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmTravelReqServiceImpl.java @@ -0,0 +1,110 @@ +package com.ruoyi.hrm.service.impl; + +import com.ruoyi.common.helper.LoginHelper; +import com.ruoyi.hrm.domain.HrmFlowTemplate; +import com.ruoyi.hrm.domain.HrmTravelReq; +import com.ruoyi.hrm.domain.bo.HrmFlowStartBo; +import com.ruoyi.hrm.domain.bo.HrmTravelReqBo; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.page.TableDataInfo; +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.hrm.domain.vo.HrmTravelReqVo; +import com.ruoyi.hrm.mapper.HrmFlowTemplateMapper; +import com.ruoyi.hrm.mapper.HrmTravelReqMapper; +import com.ruoyi.hrm.service.IHrmFlowInstanceService; +import com.ruoyi.hrm.service.IHrmTravelReqService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; + +@RequiredArgsConstructor +@Service +public class HrmTravelReqServiceImpl implements IHrmTravelReqService { + + private final HrmTravelReqMapper baseMapper; + private final HrmFlowTemplateMapper flowTemplateMapper; + private final IHrmFlowInstanceService flowInstanceService; + + @Override + public HrmTravelReqVo queryById(Long bizId) { + return baseMapper.selectVoById(bizId); + } + + @Override + public TableDataInfo queryPageList(HrmTravelReqBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + @Override + public List queryList(HrmTravelReqBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(HrmTravelReqBo bo) { + HrmTravelReq add = BeanUtil.toBean(bo, HrmTravelReq.class); + add.setStatus(defaultStatus(add.getStatus())); + boolean ok = baseMapper.insert(add) > 0; + + // 业务表状态规范:pending/approved/rejected + // 当提交为 pending 时,自动启动流程实例(hrm_flow_instance/hrm_flow_task) + if (ok && "pending".equalsIgnoreCase(add.getStatus())) { + // 选择启用的最高版本模板(允许无模板:走自选审批人一次性审批) + HrmFlowTemplate tpl = flowTemplateMapper.selectOne(Wrappers.lambdaQuery() + .eq(HrmFlowTemplate::getBizType, "travel") + .eq(HrmFlowTemplate::getEnabled, 1) + .orderByDesc(HrmFlowTemplate::getVersion) + .last("limit 1")); + + Long startUserId = LoginHelper.getUserId(); + + HrmFlowStartBo start = new HrmFlowStartBo(); + if (tpl != null) { + start.setTplId(tpl.getTplId()); + } + start.setManualAssigneeUserId(bo.getManualAssigneeUserId()); + start.setBizType("travel"); + start.setBizId(add.getBizId()); + start.setStartUserId(startUserId); + // 暂不保存 contentJson + flowInstanceService.startInstance(start); + } + + return ok; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(HrmTravelReqBo bo) { + HrmTravelReq update = BeanUtil.toBean(bo, HrmTravelReq.class); + return baseMapper.updateById(update) > 0; + } + + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + return baseMapper.deleteBatchIds(ids) > 0; + } + + private LambdaQueryWrapper buildQueryWrapper(HrmTravelReqBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getBizId() != null, HrmTravelReq::getBizId, bo.getBizId()); + lqw.eq(bo.getEmpId() != null, HrmTravelReq::getEmpId, bo.getEmpId()); + lqw.eq(bo.getStatus() != null, HrmTravelReq::getStatus, bo.getStatus()); + lqw.eq(bo.getStartTime() != null, HrmTravelReq::getStartTime, bo.getStartTime()); + return lqw; + } + + private String defaultStatus(String status) { + return status == null ? "draft" : status; + } +} diff --git a/fad-hrm/src/main/resources/mapper/HrmAttendCalcMapper.xml b/fad-hrm/src/main/resources/mapper/HrmAttendCalcMapper.xml new file mode 100644 index 0000000..a276fee --- /dev/null +++ b/fad-hrm/src/main/resources/mapper/HrmAttendCalcMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/fad-hrm/src/main/resources/mapper/HrmCertificateMapper.xml b/fad-hrm/src/main/resources/mapper/HrmCertificateMapper.xml new file mode 100644 index 0000000..4ab189f --- /dev/null +++ b/fad-hrm/src/main/resources/mapper/HrmCertificateMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/fad-hrm/src/main/resources/mapper/HrmContractMapper.xml b/fad-hrm/src/main/resources/mapper/HrmContractMapper.xml new file mode 100644 index 0000000..08df038 --- /dev/null +++ b/fad-hrm/src/main/resources/mapper/HrmContractMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/fad-hrm/src/main/resources/mapper/HrmEmpOrgPositionMapper.xml b/fad-hrm/src/main/resources/mapper/HrmEmpOrgPositionMapper.xml new file mode 100644 index 0000000..1a84060 --- /dev/null +++ b/fad-hrm/src/main/resources/mapper/HrmEmpOrgPositionMapper.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SELECT + r.rel_id, r.emp_id, r.dept_id, r.post_id, r.is_primary, + r.start_date, r.end_date, r.remark, + r.create_by, r.create_time, r.update_by, r.update_time, + d.dept_name, + p.post_name + FROM hrm_emp_org_position r + LEFT JOIN sys_dept d ON r.dept_id = d.dept_id AND d.del_flag = '0' + LEFT JOIN sys_post p ON r.post_id = p.post_id + WHERE r.del_flag = 0 + + diff --git a/fad-hrm/src/main/resources/mapper/HrmEmployeeMapper.xml b/fad-hrm/src/main/resources/mapper/HrmEmployeeMapper.xml new file mode 100644 index 0000000..04763e6 --- /dev/null +++ b/fad-hrm/src/main/resources/mapper/HrmEmployeeMapper.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SELECT + e.emp_id, e.user_id, e.emp_no, e.emp_name, e.gender, e.mobile, e.email, e.id_no, + e.hire_date, e.employment_type, e.status, e.dept_id, e.post_id, e.remark, + e.create_by, e.create_time, e.update_by, e.update_time, + d.dept_name, + p.post_name + FROM hrm_employee e + LEFT JOIN sys_dept d ON e.dept_id = d.dept_id AND d.del_flag = '0' + LEFT JOIN sys_post p ON e.post_id = p.post_id + WHERE e.del_flag = 0 + + + + + + + + + diff --git a/fad-hrm/src/main/resources/mapper/HrmFlowActionMapper.xml b/fad-hrm/src/main/resources/mapper/HrmFlowActionMapper.xml new file mode 100644 index 0000000..9ec1864 --- /dev/null +++ b/fad-hrm/src/main/resources/mapper/HrmFlowActionMapper.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/fad-hrm/src/main/resources/mapper/HrmFlowInstanceMapper.xml b/fad-hrm/src/main/resources/mapper/HrmFlowInstanceMapper.xml new file mode 100644 index 0000000..4de01ec --- /dev/null +++ b/fad-hrm/src/main/resources/mapper/HrmFlowInstanceMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/fad-hrm/src/main/resources/mapper/HrmFlowNodeMapper.xml b/fad-hrm/src/main/resources/mapper/HrmFlowNodeMapper.xml new file mode 100644 index 0000000..aba1884 --- /dev/null +++ b/fad-hrm/src/main/resources/mapper/HrmFlowNodeMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/fad-hrm/src/main/resources/mapper/HrmFlowTaskMapper.xml b/fad-hrm/src/main/resources/mapper/HrmFlowTaskMapper.xml new file mode 100644 index 0000000..b8a4d27 --- /dev/null +++ b/fad-hrm/src/main/resources/mapper/HrmFlowTaskMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/fad-hrm/src/main/resources/mapper/HrmFlowTemplateMapper.xml b/fad-hrm/src/main/resources/mapper/HrmFlowTemplateMapper.xml new file mode 100644 index 0000000..2be89e6 --- /dev/null +++ b/fad-hrm/src/main/resources/mapper/HrmFlowTemplateMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/fad-hrm/src/main/resources/mapper/HrmFormDataMapper.xml b/fad-hrm/src/main/resources/mapper/HrmFormDataMapper.xml new file mode 100644 index 0000000..ab44572 --- /dev/null +++ b/fad-hrm/src/main/resources/mapper/HrmFormDataMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/fad-hrm/src/main/resources/mapper/HrmHeadcountPlanMapper.xml b/fad-hrm/src/main/resources/mapper/HrmHeadcountPlanMapper.xml new file mode 100644 index 0000000..9fad54d --- /dev/null +++ b/fad-hrm/src/main/resources/mapper/HrmHeadcountPlanMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/fad-hrm/src/main/resources/mapper/HrmLeaveBalanceMapper.xml b/fad-hrm/src/main/resources/mapper/HrmLeaveBalanceMapper.xml new file mode 100644 index 0000000..31074bb --- /dev/null +++ b/fad-hrm/src/main/resources/mapper/HrmLeaveBalanceMapper.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/fad-hrm/src/main/resources/mapper/HrmLeaveReqMapper.xml b/fad-hrm/src/main/resources/mapper/HrmLeaveReqMapper.xml new file mode 100644 index 0000000..b8d2dde --- /dev/null +++ b/fad-hrm/src/main/resources/mapper/HrmLeaveReqMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/fad-hrm/src/main/resources/mapper/HrmPayPlanMapper.xml b/fad-hrm/src/main/resources/mapper/HrmPayPlanMapper.xml new file mode 100644 index 0000000..4bfe272 --- /dev/null +++ b/fad-hrm/src/main/resources/mapper/HrmPayPlanMapper.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/fad-hrm/src/main/resources/mapper/HrmPayRunMapper.xml b/fad-hrm/src/main/resources/mapper/HrmPayRunMapper.xml new file mode 100644 index 0000000..d3acee5 --- /dev/null +++ b/fad-hrm/src/main/resources/mapper/HrmPayRunMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/fad-hrm/src/main/resources/mapper/HrmPayslipMapper.xml b/fad-hrm/src/main/resources/mapper/HrmPayslipMapper.xml new file mode 100644 index 0000000..6e974d9 --- /dev/null +++ b/fad-hrm/src/main/resources/mapper/HrmPayslipMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/fad-hrm/src/main/resources/mapper/HrmPunchMapper.xml b/fad-hrm/src/main/resources/mapper/HrmPunchMapper.xml new file mode 100644 index 0000000..dd98921 --- /dev/null +++ b/fad-hrm/src/main/resources/mapper/HrmPunchMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/fad-hrm/src/main/resources/mapper/HrmScheduleMapper.xml b/fad-hrm/src/main/resources/mapper/HrmScheduleMapper.xml new file mode 100644 index 0000000..f98c8f3 --- /dev/null +++ b/fad-hrm/src/main/resources/mapper/HrmScheduleMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/fad-hrm/src/main/resources/mapper/HrmSealReqMapper.xml b/fad-hrm/src/main/resources/mapper/HrmSealReqMapper.xml new file mode 100644 index 0000000..664f4bd --- /dev/null +++ b/fad-hrm/src/main/resources/mapper/HrmSealReqMapper.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/fad-hrm/src/main/resources/mapper/HrmShiftMapper.xml b/fad-hrm/src/main/resources/mapper/HrmShiftMapper.xml new file mode 100644 index 0000000..b6cbf47 --- /dev/null +++ b/fad-hrm/src/main/resources/mapper/HrmShiftMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/fad-hrm/src/main/resources/mapper/HrmStatSnapshotMapper.xml b/fad-hrm/src/main/resources/mapper/HrmStatSnapshotMapper.xml new file mode 100644 index 0000000..10217ce --- /dev/null +++ b/fad-hrm/src/main/resources/mapper/HrmStatSnapshotMapper.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/fad-hrm/src/main/resources/mapper/HrmTravelReqMapper.xml b/fad-hrm/src/main/resources/mapper/HrmTravelReqMapper.xml new file mode 100644 index 0000000..4e17649 --- /dev/null +++ b/fad-hrm/src/main/resources/mapper/HrmTravelReqMapper.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pom.xml b/pom.xml index 44f7bc8..a184fa1 100644 --- a/pom.xml +++ b/pom.xml @@ -380,6 +380,12 @@ ${ruoyi-flowable-plus.version} + + com.ruoyi + fad-hrm + ${ruoyi-flowable-plus.version} + + @@ -398,6 +404,7 @@ ruoyi-oa fad-app fad-export + fad-hrm pom diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml index 6c8c4c1..531b378 100644 --- a/ruoyi-admin/pom.xml +++ b/ruoyi-admin/pom.xml @@ -101,6 +101,11 @@ ruoyi-flowable + + com.ruoyi + fad-hrm + + org.springframework.boot spring-boot-starter-test diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java new file mode 100644 index 0000000..57e87d9 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java @@ -0,0 +1,177 @@ +package com.ruoyi.common.annotation; + +import com.ruoyi.common.utils.poi.ExcelHandlerAdapter; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.math.BigDecimal; + +/** + * 自定义导出Excel数据注解 + * + * @author ruoyi + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface Excel +{ + /** + * 导出时在excel中排序 + */ + public int sort() default Integer.MAX_VALUE; + + /** + * 导出到Excel中的名字. + */ + public String name() default ""; + + /** + * 日期格式, 如: yyyy-MM-dd + */ + public String dateFormat() default ""; + + /** + * 如果是字典类型,请设置字典的type值 (如: sys_user_sex) + */ + public String dictType() default ""; + + /** + * 读取内容转表达式 (如: 0=男,1=女,2=未知) + */ + public String readConverterExp() default ""; + + /** + * 分隔符,读取字符串组内容 + */ + public String separator() default ","; + + /** + * BigDecimal 精度 默认:-1(默认不开启BigDecimal格式化) + */ + public int scale() default -1; + + /** + * BigDecimal 舍入规则 默认:BigDecimal.ROUND_HALF_EVEN + */ + public int roundingMode() default BigDecimal.ROUND_HALF_EVEN; + + /** + * 导出类型(0数字 1字符串) + */ + public ColumnType cellType() default ColumnType.STRING; + + /** + * 导出时在excel中每个列的高度 单位为字符 + */ + public double height() default 14; + + /** + * 导出时在excel中每个列的宽 单位为字符 + */ + public double width() default 16; + + /** + * 文字后缀,如% 90 变成90% + */ + public String suffix() default ""; + + /** + * 当值为空时,字段的默认值 + */ + public String defaultValue() default ""; + + /** + * 提示信息 + */ + public String prompt() default ""; + + /** + * 设置只能选择不能输入的列内容. + */ + public String[] combo() default {}; + + /** + * 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写. + */ + public boolean isExport() default true; + + /** + * 另一个类中的属性名称,支持多级获取,以小数点隔开 + */ + public String targetAttr() default ""; + + /** + * 是否自动统计数据,在最后追加一行统计数据总和 + */ + public boolean isStatistics() default false; + + /** + * 导出字段对齐方式(0:默认;1:靠左;2:居中;3:靠右) + */ + public Align align() default Align.AUTO; + + /** + * 自定义数据处理器 + */ + public Class handler() default ExcelHandlerAdapter.class; + + /** + * 自定义数据处理器参数 + */ + public String[] args() default {}; + + public enum Align + { + AUTO(0), LEFT(1), CENTER(2), RIGHT(3); + private final int value; + + Align(int value) + { + this.value = value; + } + + public int value() + { + return this.value; + } + } + + /** + * 字段类型(0:导出导入;1:仅导出;2:仅导入) + */ + Type type() default Type.ALL; + + public enum Type + { + ALL(0), EXPORT(1), IMPORT(2); + private final int value; + + Type(int value) + { + this.value = value; + } + + public int value() + { + return this.value; + } + } + + public enum ColumnType + { + NUMERIC(0), STRING(1), IMAGE(2); + private final int value; + + ColumnType(int value) + { + this.value = value; + } + + public int value() + { + return this.value; + } + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelHandlerAdapter.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelHandlerAdapter.java new file mode 100644 index 0000000..4243af3 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelHandlerAdapter.java @@ -0,0 +1,19 @@ +package com.ruoyi.common.utils.poi; + +/** + * Excel数据格式处理适配器 + * + * @author ruoyi + */ +public interface ExcelHandlerAdapter +{ + /** + * 格式化 + * + * @param value 单元格数据值 + * @param args excel注解args参数组 + * + * @return 处理后的值 + */ + Object format(Object value, String[] args); +}