From 78e589cadaedc0ba12a9ae5a19d4862642c66a33 Mon Sep 17 00:00:00 2001 From: DB <2502523450@qq.com> Date: Mon, 9 Oct 2023 17:39:23 +0800 Subject: [PATCH] =?UTF-8?q?Oam=E7=AE=A1=E7=90=86=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cpop-Core/pom.xml | 15 + Cpop-Core/sql/QRTZ.sql | 258 +++++++++ .../core/config/GenerateKeyPairConfig.java | 33 +- .../core/filter/JwtAuthenticationFilter.java | 4 +- .../java/com/cpop/core/utils/QuartzUtils.java | 158 ++++++ .../cpop/core/utils/file/FileUploadUtils.java | 5 +- .../com/cpop/core/utils/file/FileUtils.java | 3 +- .../src/main/resources/mapper/CoreMapper.xml | 2 +- Cpop-Oam/Cpop-Oam-Web/pom.xml | 46 ++ .../cpop/oam/web/CpopOamWebApplication.java | 20 + .../src/main/resources/application-dev.yml | 86 +++ .../src/main/resources/application-prod.yml | 60 ++ .../src/main/resources/application-test.yml | 87 +++ .../src/main/resources/application.yml | 118 ++++ .../resources/static.i18n/messages.properties | 0 .../static.i18n/messages_en_US.properties | 80 +++ .../static.i18n/messages_zh_CN.properties | 80 +++ .../java/com/cpop/oam/web/CpopApiTests.java | 31 + .../java/com/cpop/oam/web/CpopCoreTests.java | 81 +++ Cpop-Oam/pom.xml | 24 + Cpop-Oam/sql/Oam.sql | 414 ++++++++++++++ .../java/com/cpop/oam/business/bo/DeptBo.java | 77 +++ .../com/cpop/oam/business/bo/DeptListBo.java | 33 ++ .../java/com/cpop/oam/business/bo/DutyBo.java | 59 ++ .../com/cpop/oam/business/bo/DutyListBo.java | 29 + .../bo/FinanceReimburseAuditPageBo.java | 37 ++ .../business/bo/FinanceReimbursePageBo.java | 32 ++ .../java/com/cpop/oam/business/bo/MenuBo.java | 109 ++++ .../com/cpop/oam/business/bo/MenuListBo.java | 33 ++ .../oam/business/bo/ModifyUserPasswordBo.java | 44 ++ .../oam/business/bo/PauseWorkOrderBo.java | 37 ++ .../oam/business/bo/PersonTaskPageBo.java | 44 ++ .../business/bo/ReimburseApplicationBo.java | 62 ++ .../cpop/oam/business/bo/ReimbursePayBo.java | 44 ++ .../oam/business/bo/ReimburseRejectBo.java | 32 ++ .../oam/business/bo/ReimburseStatusBo.java | 28 + .../cpop/oam/business/bo/ReimburseTypeBo.java | 29 + .../java/com/cpop/oam/business/bo/RoleBo.java | 72 +++ .../com/cpop/oam/business/bo/RolePageBo.java | 34 ++ .../cpop/oam/business/bo/RoleStatusBo.java | 38 ++ .../com/cpop/oam/business/bo/StaffBo.java | 119 ++++ .../com/cpop/oam/business/bo/StaffPageBo.java | 40 ++ .../cpop/oam/business/bo/SysConfigInfoBo.java | 36 ++ .../cpop/oam/business/bo/SysUserLogBo.java | 65 +++ .../oam/business/bo/TaskAuditCommentsBo.java | 59 ++ .../java/com/cpop/oam/business/bo/TaskBo.java | 73 +++ .../cpop/oam/business/bo/TaskDemandBo.java | 89 +++ .../oam/business/bo/TaskDemandPageBo.java | 41 ++ .../com/cpop/oam/business/bo/TaskItemBo.java | 38 ++ .../business/bo/TaskMonthStatisticsBo.java | 34 ++ .../com/cpop/oam/business/bo/TaskPageBo.java | 34 ++ .../oam/business/bo/TaskStaffGroupBo.java | 54 ++ .../oam/business/bo/TaskStaffGroupListBo.java | 31 + .../cpop/oam/business/bo/TaskWorkOrderBo.java | 84 +++ .../oam/business/bo/TaskWorkOrderPageBo.java | 40 ++ .../business/bo/TaskWorkOrderRecordBo.java | 44 ++ .../cpop/oam/business/bo/TransferTaskBo.java | 44 ++ .../business/controller/DeptController.java | 95 ++++ .../business/controller/DutyController.java | 111 ++++ .../FinanceReimburseController.java | 245 ++++++++ .../business/controller/LoginController.java | 64 +++ .../business/controller/MenuController.java | 107 ++++ .../business/controller/RoleController.java | 126 +++++ .../business/controller/StaffController.java | 193 +++++++ .../controller/SysCommonController.java | 57 ++ .../controller/SysConfigController.java | 52 ++ .../business/controller/TaskController.java | 292 ++++++++++ .../controller/TaskDemandController.java | 63 +++ .../controller/TaskWorkOrderController.java | 128 +++++ .../business/dto/TaskWorkOrderRecordDto.java | 50 ++ .../com/cpop/oam/business/entity/Dept.java | 81 +++ .../com/cpop/oam/business/entity/Duty.java | 55 ++ .../oam/business/entity/FinanceReimburse.java | 80 +++ .../entity/FinanceReimburseStage.java | 60 ++ .../business/entity/FinanceReimburseType.java | 39 ++ .../com/cpop/oam/business/entity/Menu.java | 94 ++++ .../com/cpop/oam/business/entity/Role.java | 63 +++ .../cpop/oam/business/entity/RoleMenu.java | 37 ++ .../com/cpop/oam/business/entity/Staff.java | 66 +++ .../com/cpop/oam/business/entity/Task.java | 108 ++++ .../cpop/oam/business/entity/TaskDemand.java | 96 ++++ .../oam/business/entity/TaskStaffGroup.java | 49 ++ .../oam/business/entity/TaskWorkOrder.java | 81 +++ .../business/entity/TaskWorkOrderRecord.java | 58 ++ .../cpop/oam/business/mapper/DeptMapper.java | 14 + .../cpop/oam/business/mapper/DutyMapper.java | 14 + .../mapper/FinanceReimburseMapper.java | 14 + .../mapper/FinanceReimburseStageMapper.java | 14 + .../mapper/FinanceReimburseTypeMapper.java | 14 + .../cpop/oam/business/mapper/MenuMapper.java | 14 + .../cpop/oam/business/mapper/RoleMapper.java | 14 + .../oam/business/mapper/RoleMenuMapper.java | 14 + .../cpop/oam/business/mapper/StaffMapper.java | 14 + .../oam/business/mapper/TaskDemandMapper.java | 14 + .../cpop/oam/business/mapper/TaskMapper.java | 14 + .../business/mapper/TaskStaffGroupMapper.java | 14 + .../business/mapper/TaskWorkOrderMapper.java | 14 + .../mapper/TaskWorkOrderRecordMapper.java | 14 + .../oam/business/service/CommonService.java | 46 ++ .../oam/business/service/DeptService.java | 50 ++ .../oam/business/service/DutyService.java | 44 ++ .../service/FinanceReimburseService.java | 70 +++ .../service/FinanceReimburseStageService.java | 14 + .../service/FinanceReimburseTypeService.java | 14 + .../oam/business/service/LoginService.java | 32 ++ .../oam/business/service/MenuService.java | 69 +++ .../oam/business/service/RoleMenuService.java | 14 + .../oam/business/service/RoleService.java | 58 ++ .../oam/business/service/StaffService.java | 111 ++++ .../business/service/TaskDemandService.java | 35 ++ .../oam/business/service/TaskService.java | 115 ++++ .../service/TaskStaffGroupService.java | 53 ++ .../service/TaskWorkOrderRecordService.java | 22 + .../service/TaskWorkOrderService.java | 76 +++ .../service/impl/CommonServiceImpl.java | 155 +++++ .../service/impl/DeptServiceImpl.java | 207 +++++++ .../service/impl/DutyServiceImpl.java | 116 ++++ .../impl/FinanceReimburseServiceImpl.java | 211 +++++++ .../FinanceReimburseStageServiceImpl.java | 18 + .../impl/FinanceReimburseTypeServiceImpl.java | 18 + .../service/impl/LoginServiceImpl.java | 93 +++ .../service/impl/MenuServiceImpl.java | 288 ++++++++++ .../service/impl/RoleMenuServiceImpl.java | 18 + .../service/impl/RoleServiceImpl.java | 154 +++++ .../service/impl/StaffServiceImpl.java | 333 +++++++++++ .../service/impl/TaskDemandServiceImpl.java | 158 ++++++ .../service/impl/TaskServiceImpl.java | 532 ++++++++++++++++++ .../impl/TaskStaffGroupServiceImpl.java | 223 ++++++++ .../impl/TaskWorkOrderRecordServiceImpl.java | 51 ++ .../impl/TaskWorkOrderServiceImpl.java | 378 +++++++++++++ .../cpop/oam/business/vo/ConfigInfoVo.java | 33 ++ .../java/com/cpop/oam/business/vo/DeptVo.java | 95 ++++ .../com/cpop/oam/business/vo/DutyListVo.java | 67 +++ .../vo/FinanceReimburseAuditPageVo.java | 100 ++++ .../business/vo/FinanceReimbursePageVo.java | 100 ++++ .../vo/FinanceReimburseRecordListVo.java | 45 ++ .../vo/FinanceReimburseTypeListVo.java | 31 + .../cpop/oam/business/vo/LoginUserInfoVo.java | 56 ++ .../com/cpop/oam/business/vo/MenuRouteVo.java | 145 +++++ .../java/com/cpop/oam/business/vo/MenuVo.java | 117 ++++ .../oam/business/vo/PersonTaskPageVo.java | 118 ++++ .../vo/ReimbursePersonStatisticVo.java | 32 ++ .../com/cpop/oam/business/vo/RolePageVo.java | 76 +++ .../java/com/cpop/oam/business/vo/RoleVo.java | 59 ++ .../com/cpop/oam/business/vo/StaffInfoVo.java | 82 +++ .../com/cpop/oam/business/vo/StaffPageVo.java | 121 ++++ .../com/cpop/oam/business/vo/StaffVo.java | 54 ++ .../com/cpop/oam/business/vo/SysFileVo.java | 45 ++ .../oam/business/vo/SysOperationLogVo.java | 97 ++++ .../cpop/oam/business/vo/TaskAuditPageVo.java | 81 +++ .../oam/business/vo/TaskDemandPageVo.java | 103 ++++ .../business/vo/TaskMonthStatisticsVo.java | 88 +++ .../com/cpop/oam/business/vo/TaskPageVo.java | 74 +++ .../oam/business/vo/TaskStaffGroupVo.java | 53 ++ .../oam/business/vo/TaskWorkOrderPageVo.java | 125 ++++ .../vo/TaskWorkOrderRecordListVo.java | 72 +++ .../oam/framework/constant/OamConfigKey.java | 17 + .../constant/WebHookKeyConstant.java | 24 + .../oam/framework/enums/OamConfigEnum.java | 91 +++ .../cpop/oam/framework/enums/QuartzEnums.java | 46 ++ .../tasks/WorkOrderOvertimeTask.java | 41 ++ .../cpop/oam/framework/utils/OamUtils.java | 36 ++ .../src/main/resources/application-oam.yml | 1 + .../src/main/resources/mapper/DeptMapper.xml | 7 + .../src/main/resources/mapper/DutyMapper.xml | 7 + .../mapper/FinanceReimburseMapper.xml | 7 + .../mapper/FinanceReimburseStageMapper.xml | 7 + .../mapper/FinanceReimburseTypeMapper.xml | 7 + .../src/main/resources/mapper/MenuMapper.xml | 7 + .../src/main/resources/mapper/RoleMapper.xml | 7 + .../main/resources/mapper/RoleMenuMapper.xml | 7 + .../src/main/resources/mapper/StaffMapper.xml | 7 + .../resources/mapper/TaskDemandMapper.xml | 7 + .../src/main/resources/mapper/TaskMapper.xml | 7 + .../resources/mapper/TaskStaffGroupMapper.xml | 7 + .../resources/mapper/TaskWorkOrderMapper.xml | 7 + .../mapper/TaskWorkOrderRecordMapper.xml | 7 + pom.xml | 16 + 178 files changed, 12327 insertions(+), 37 deletions(-) create mode 100644 Cpop-Core/sql/QRTZ.sql create mode 100644 Cpop-Core/src/main/java/com/cpop/core/utils/QuartzUtils.java create mode 100644 Cpop-Oam/Cpop-Oam-Web/pom.xml create mode 100644 Cpop-Oam/Cpop-Oam-Web/src/main/java/com/cpop/oam/web/CpopOamWebApplication.java create mode 100644 Cpop-Oam/Cpop-Oam-Web/src/main/resources/application-dev.yml create mode 100644 Cpop-Oam/Cpop-Oam-Web/src/main/resources/application-prod.yml create mode 100644 Cpop-Oam/Cpop-Oam-Web/src/main/resources/application-test.yml create mode 100644 Cpop-Oam/Cpop-Oam-Web/src/main/resources/application.yml create mode 100644 Cpop-Oam/Cpop-Oam-Web/src/main/resources/static.i18n/messages.properties create mode 100644 Cpop-Oam/Cpop-Oam-Web/src/main/resources/static.i18n/messages_en_US.properties create mode 100644 Cpop-Oam/Cpop-Oam-Web/src/main/resources/static.i18n/messages_zh_CN.properties create mode 100644 Cpop-Oam/Cpop-Oam-Web/src/test/java/com/cpop/oam/web/CpopApiTests.java create mode 100644 Cpop-Oam/Cpop-Oam-Web/src/test/java/com/cpop/oam/web/CpopCoreTests.java create mode 100644 Cpop-Oam/pom.xml create mode 100644 Cpop-Oam/sql/Oam.sql create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/DeptBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/DeptListBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/DutyBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/DutyListBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/FinanceReimburseAuditPageBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/FinanceReimbursePageBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/MenuBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/MenuListBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/ModifyUserPasswordBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/PauseWorkOrderBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/PersonTaskPageBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/ReimburseApplicationBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/ReimbursePayBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/ReimburseRejectBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/ReimburseStatusBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/ReimburseTypeBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/RoleBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/RolePageBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/RoleStatusBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/StaffBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/StaffPageBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/SysConfigInfoBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/SysUserLogBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskAuditCommentsBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskDemandBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskDemandPageBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskItemBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskMonthStatisticsBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskPageBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskStaffGroupBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskStaffGroupListBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskWorkOrderBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskWorkOrderPageBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskWorkOrderRecordBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TransferTaskBo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/controller/DeptController.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/controller/DutyController.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/controller/FinanceReimburseController.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/controller/LoginController.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/controller/MenuController.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/controller/RoleController.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/controller/StaffController.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/controller/SysCommonController.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/controller/SysConfigController.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/controller/TaskController.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/controller/TaskDemandController.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/controller/TaskWorkOrderController.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/dto/TaskWorkOrderRecordDto.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/entity/Dept.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/entity/Duty.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/entity/FinanceReimburse.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/entity/FinanceReimburseStage.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/entity/FinanceReimburseType.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/entity/Menu.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/entity/Role.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/entity/RoleMenu.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/entity/Staff.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/entity/Task.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/entity/TaskDemand.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/entity/TaskStaffGroup.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/entity/TaskWorkOrder.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/entity/TaskWorkOrderRecord.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/DeptMapper.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/DutyMapper.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/FinanceReimburseMapper.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/FinanceReimburseStageMapper.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/FinanceReimburseTypeMapper.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/MenuMapper.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/RoleMapper.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/RoleMenuMapper.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/StaffMapper.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/TaskDemandMapper.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/TaskMapper.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/TaskStaffGroupMapper.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/TaskWorkOrderMapper.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/TaskWorkOrderRecordMapper.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/CommonService.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/DeptService.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/DutyService.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/FinanceReimburseService.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/FinanceReimburseStageService.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/FinanceReimburseTypeService.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/LoginService.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/MenuService.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/RoleMenuService.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/RoleService.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/StaffService.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/TaskDemandService.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/TaskService.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/TaskStaffGroupService.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/TaskWorkOrderRecordService.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/TaskWorkOrderService.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/CommonServiceImpl.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/DeptServiceImpl.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/DutyServiceImpl.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/FinanceReimburseServiceImpl.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/FinanceReimburseStageServiceImpl.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/FinanceReimburseTypeServiceImpl.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/LoginServiceImpl.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/MenuServiceImpl.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/RoleMenuServiceImpl.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/RoleServiceImpl.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/StaffServiceImpl.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/TaskDemandServiceImpl.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/TaskServiceImpl.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/TaskStaffGroupServiceImpl.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/TaskWorkOrderRecordServiceImpl.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/TaskWorkOrderServiceImpl.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/vo/ConfigInfoVo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/vo/DeptVo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/vo/DutyListVo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/vo/FinanceReimburseAuditPageVo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/vo/FinanceReimbursePageVo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/vo/FinanceReimburseRecordListVo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/vo/FinanceReimburseTypeListVo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/vo/LoginUserInfoVo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/vo/MenuRouteVo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/vo/MenuVo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/vo/PersonTaskPageVo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/vo/ReimbursePersonStatisticVo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/vo/RolePageVo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/vo/RoleVo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/vo/StaffInfoVo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/vo/StaffPageVo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/vo/StaffVo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/vo/SysFileVo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/vo/SysOperationLogVo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskAuditPageVo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskDemandPageVo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskMonthStatisticsVo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskPageVo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskStaffGroupVo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskWorkOrderPageVo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskWorkOrderRecordListVo.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/framework/constant/OamConfigKey.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/framework/constant/WebHookKeyConstant.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/framework/enums/OamConfigEnum.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/framework/enums/QuartzEnums.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/framework/tasks/WorkOrderOvertimeTask.java create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/framework/utils/OamUtils.java create mode 100644 Cpop-Oam/src/main/resources/application-oam.yml create mode 100644 Cpop-Oam/src/main/resources/mapper/DeptMapper.xml create mode 100644 Cpop-Oam/src/main/resources/mapper/DutyMapper.xml create mode 100644 Cpop-Oam/src/main/resources/mapper/FinanceReimburseMapper.xml create mode 100644 Cpop-Oam/src/main/resources/mapper/FinanceReimburseStageMapper.xml create mode 100644 Cpop-Oam/src/main/resources/mapper/FinanceReimburseTypeMapper.xml create mode 100644 Cpop-Oam/src/main/resources/mapper/MenuMapper.xml create mode 100644 Cpop-Oam/src/main/resources/mapper/RoleMapper.xml create mode 100644 Cpop-Oam/src/main/resources/mapper/RoleMenuMapper.xml create mode 100644 Cpop-Oam/src/main/resources/mapper/StaffMapper.xml create mode 100644 Cpop-Oam/src/main/resources/mapper/TaskDemandMapper.xml create mode 100644 Cpop-Oam/src/main/resources/mapper/TaskMapper.xml create mode 100644 Cpop-Oam/src/main/resources/mapper/TaskStaffGroupMapper.xml create mode 100644 Cpop-Oam/src/main/resources/mapper/TaskWorkOrderMapper.xml create mode 100644 Cpop-Oam/src/main/resources/mapper/TaskWorkOrderRecordMapper.xml diff --git a/Cpop-Core/pom.xml b/Cpop-Core/pom.xml index 9bebf2b..bb8c504 100644 --- a/Cpop-Core/pom.xml +++ b/Cpop-Core/pom.xml @@ -72,6 +72,21 @@ com.zaxxer HikariCP + + + com.github.xiaoymin + knife4j-openapi2-spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-validation + + + + org.springframework.boot + spring-boot-starter-quartz + diff --git a/Cpop-Core/sql/QRTZ.sql b/Cpop-Core/sql/QRTZ.sql new file mode 100644 index 0000000..021c371 --- /dev/null +++ b/Cpop-Core/sql/QRTZ.sql @@ -0,0 +1,258 @@ +/* + Navicat Premium Data Transfer + + Source Server : RockBlade-MYSQL-TEST + Source Server Type : MySQL + Source Server Version : 80021 + Source Host : 192.168.211.130:3306 + Source Schema : rockblade + + Target Server Type : MySQL + Target Server Version : 80021 + File Encoding : 65001 + + Date: 28/08/2023 22:23:11 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for QRTZ_BLOB_TRIGGERS +-- ---------------------------- +DROP TABLE IF EXISTS `QRTZ_BLOB_TRIGGERS`; +CREATE TABLE `QRTZ_BLOB_TRIGGERS` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `BLOB_DATA` blob NULL, + PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, + INDEX `SCHED_NAME`(`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, + CONSTRAINT `qrtz_blob_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of QRTZ_BLOB_TRIGGERS +-- ---------------------------- + +-- ---------------------------- +-- Table structure for QRTZ_CALENDARS +-- ---------------------------- +DROP TABLE IF EXISTS `QRTZ_CALENDARS`; +CREATE TABLE `QRTZ_CALENDARS` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `CALENDAR_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `CALENDAR` blob NOT NULL, + PRIMARY KEY (`SCHED_NAME`, `CALENDAR_NAME`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of QRTZ_CALENDARS +-- ---------------------------- + +-- ---------------------------- +-- Table structure for QRTZ_CRON_TRIGGERS +-- ---------------------------- +DROP TABLE IF EXISTS `QRTZ_CRON_TRIGGERS`; +CREATE TABLE `QRTZ_CRON_TRIGGERS` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `CRON_EXPRESSION` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TIME_ZONE_ID` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, + CONSTRAINT `qrtz_cron_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of QRTZ_CRON_TRIGGERS +-- ---------------------------- + +-- ---------------------------- +-- Table structure for QRTZ_FIRED_TRIGGERS +-- ---------------------------- +DROP TABLE IF EXISTS `QRTZ_FIRED_TRIGGERS`; +CREATE TABLE `QRTZ_FIRED_TRIGGERS` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `ENTRY_ID` varchar(95) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `INSTANCE_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `FIRED_TIME` bigint(0) NOT NULL, + `SCHED_TIME` bigint(0) NOT NULL, + `PRIORITY` int(0) NOT NULL, + `STATE` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `IS_NONCONCURRENT` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `REQUESTS_RECOVERY` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`SCHED_NAME`, `ENTRY_ID`) USING BTREE, + INDEX `IDX_QRTZ_FT_TRIG_INST_NAME`(`SCHED_NAME`, `INSTANCE_NAME`) USING BTREE, + INDEX `IDX_QRTZ_FT_INST_JOB_REQ_RCVRY`(`SCHED_NAME`, `INSTANCE_NAME`, `REQUESTS_RECOVERY`) USING BTREE, + INDEX `IDX_QRTZ_FT_J_G`(`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE, + INDEX `IDX_QRTZ_FT_JG`(`SCHED_NAME`, `JOB_GROUP`) USING BTREE, + INDEX `IDX_QRTZ_FT_T_G`(`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, + INDEX `IDX_QRTZ_FT_TG`(`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of QRTZ_FIRED_TRIGGERS +-- ---------------------------- + +-- ---------------------------- +-- Table structure for QRTZ_JOB_DETAILS +-- ---------------------------- +DROP TABLE IF EXISTS `QRTZ_JOB_DETAILS`; +CREATE TABLE `QRTZ_JOB_DETAILS` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `DESCRIPTION` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `JOB_CLASS_NAME` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `IS_DURABLE` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `IS_NONCONCURRENT` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `IS_UPDATE_DATA` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `REQUESTS_RECOVERY` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `JOB_DATA` blob NULL, + PRIMARY KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE, + INDEX `IDX_QRTZ_J_REQ_RECOVERY`(`SCHED_NAME`, `REQUESTS_RECOVERY`) USING BTREE, + INDEX `IDX_QRTZ_J_GRP`(`SCHED_NAME`, `JOB_GROUP`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of QRTZ_JOB_DETAILS +-- ---------------------------- + +-- ---------------------------- +-- Table structure for QRTZ_LOCKS +-- ---------------------------- +DROP TABLE IF EXISTS `QRTZ_LOCKS`; +CREATE TABLE `QRTZ_LOCKS` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `LOCK_NAME` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + PRIMARY KEY (`SCHED_NAME`, `LOCK_NAME`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of QRTZ_LOCKS +-- ---------------------------- +INSERT INTO `QRTZ_LOCKS` VALUES ('RockBladeScheduler', 'TRIGGER_ACCESS'); + +-- ---------------------------- +-- Table structure for QRTZ_PAUSED_TRIGGER_GRPS +-- ---------------------------- +DROP TABLE IF EXISTS `QRTZ_PAUSED_TRIGGER_GRPS`; +CREATE TABLE `QRTZ_PAUSED_TRIGGER_GRPS` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + PRIMARY KEY (`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of QRTZ_PAUSED_TRIGGER_GRPS +-- ---------------------------- + +-- ---------------------------- +-- Table structure for QRTZ_SCHEDULER_STATE +-- ---------------------------- +DROP TABLE IF EXISTS `QRTZ_SCHEDULER_STATE`; +CREATE TABLE `QRTZ_SCHEDULER_STATE` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `INSTANCE_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `LAST_CHECKIN_TIME` bigint(0) NOT NULL, + `CHECKIN_INTERVAL` bigint(0) NOT NULL, + PRIMARY KEY (`SCHED_NAME`, `INSTANCE_NAME`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of QRTZ_SCHEDULER_STATE +-- ---------------------------- + +-- ---------------------------- +-- Table structure for QRTZ_SIMPLE_TRIGGERS +-- ---------------------------- +DROP TABLE IF EXISTS `QRTZ_SIMPLE_TRIGGERS`; +CREATE TABLE `QRTZ_SIMPLE_TRIGGERS` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `REPEAT_COUNT` bigint(0) NOT NULL, + `REPEAT_INTERVAL` bigint(0) NOT NULL, + `TIMES_TRIGGERED` bigint(0) NOT NULL, + PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, + CONSTRAINT `qrtz_simple_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of QRTZ_SIMPLE_TRIGGERS +-- ---------------------------- + +-- ---------------------------- +-- Table structure for QRTZ_SIMPROP_TRIGGERS +-- ---------------------------- +DROP TABLE IF EXISTS `QRTZ_SIMPROP_TRIGGERS`; +CREATE TABLE `QRTZ_SIMPROP_TRIGGERS` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `STR_PROP_1` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `STR_PROP_2` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `STR_PROP_3` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `INT_PROP_1` int(0) NULL DEFAULT NULL, + `INT_PROP_2` int(0) NULL DEFAULT NULL, + `LONG_PROP_1` bigint(0) NULL DEFAULT NULL, + `LONG_PROP_2` bigint(0) NULL DEFAULT NULL, + `DEC_PROP_1` decimal(13, 4) NULL DEFAULT NULL, + `DEC_PROP_2` decimal(13, 4) NULL DEFAULT NULL, + `BOOL_PROP_1` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `BOOL_PROP_2` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, + CONSTRAINT `qrtz_simprop_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of QRTZ_SIMPROP_TRIGGERS +-- ---------------------------- + +-- ---------------------------- +-- Table structure for QRTZ_TRIGGERS +-- ---------------------------- +DROP TABLE IF EXISTS `QRTZ_TRIGGERS`; +CREATE TABLE `QRTZ_TRIGGERS` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `DESCRIPTION` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `NEXT_FIRE_TIME` bigint(0) NULL DEFAULT NULL, + `PREV_FIRE_TIME` bigint(0) NULL DEFAULT NULL, + `PRIORITY` int(0) NULL DEFAULT NULL, + `TRIGGER_STATE` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_TYPE` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `START_TIME` bigint(0) NOT NULL, + `END_TIME` bigint(0) NULL DEFAULT NULL, + `CALENDAR_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `MISFIRE_INSTR` smallint(0) NULL DEFAULT NULL, + `JOB_DATA` blob NULL, + PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, + INDEX `IDX_QRTZ_T_J`(`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE, + INDEX `IDX_QRTZ_T_JG`(`SCHED_NAME`, `JOB_GROUP`) USING BTREE, + INDEX `IDX_QRTZ_T_C`(`SCHED_NAME`, `CALENDAR_NAME`) USING BTREE, + INDEX `IDX_QRTZ_T_G`(`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE, + INDEX `IDX_QRTZ_T_STATE`(`SCHED_NAME`, `TRIGGER_STATE`) USING BTREE, + INDEX `IDX_QRTZ_T_N_STATE`(`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `TRIGGER_STATE`) USING BTREE, + INDEX `IDX_QRTZ_T_N_G_STATE`(`SCHED_NAME`, `TRIGGER_GROUP`, `TRIGGER_STATE`) USING BTREE, + INDEX `IDX_QRTZ_T_NEXT_FIRE_TIME`(`SCHED_NAME`, `NEXT_FIRE_TIME`) USING BTREE, + INDEX `IDX_QRTZ_T_NFT_ST`(`SCHED_NAME`, `TRIGGER_STATE`, `NEXT_FIRE_TIME`) USING BTREE, + INDEX `IDX_QRTZ_T_NFT_MISFIRE`(`SCHED_NAME`, `MISFIRE_INSTR`, `NEXT_FIRE_TIME`) USING BTREE, + INDEX `IDX_QRTZ_T_NFT_ST_MISFIRE`(`SCHED_NAME`, `MISFIRE_INSTR`, `NEXT_FIRE_TIME`, `TRIGGER_STATE`) USING BTREE, + INDEX `IDX_QRTZ_T_NFT_ST_MISFIRE_GRP`(`SCHED_NAME`, `MISFIRE_INSTR`, `NEXT_FIRE_TIME`, `TRIGGER_GROUP`, `TRIGGER_STATE`) USING BTREE, + CONSTRAINT `qrtz_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) REFERENCES `qrtz_job_details` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of QRTZ_TRIGGERS +-- ---------------------------- + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/Cpop-Core/src/main/java/com/cpop/core/config/GenerateKeyPairConfig.java b/Cpop-Core/src/main/java/com/cpop/core/config/GenerateKeyPairConfig.java index 1b181c7..505bc59 100644 --- a/Cpop-Core/src/main/java/com/cpop/core/config/GenerateKeyPairConfig.java +++ b/Cpop-Core/src/main/java/com/cpop/core/config/GenerateKeyPairConfig.java @@ -1,5 +1,6 @@ package com.cpop.core.config; +import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @@ -8,6 +9,7 @@ import org.springframework.stereotype.Component; * @Description: 生成密钥对的配置文件 * @create: 2023-08-04 23:06 */ +@Data @Component @ConfigurationProperties(prefix = "cpop.gateway.rsa-keypair") public class GenerateKeyPairConfig { @@ -32,36 +34,5 @@ public class GenerateKeyPairConfig { */ private String privateKeyFile; - /** - * 获取指定加密算法 - * @return 读取YAML文件的 SystemConfig.rsa-keypair.algorithm 属性 - */ - public String getAlgorithm() { - return algorithm; - } - - /** - * 获取密钥长度,用来初始化 - * @return 读取YAML文件的 SystemConfig.rsa-keypair.key-size 属性 - */ - public Integer getKeySize() { - return keySize; - } - - /** - * 获取公钥存放文件 - * @return 读取YAML文件的 SystemConfig.rsa-keypair.public-key-file 属性 - */ - public String getPublicKeyFile() { - return publicKeyFile; - } - - /** - * 获取私钥存放文件 - * @return 读取YAML文件的 SystemConfig.rsa-keypair.private-key-file 属性 - */ - public String getPrivateKeyFile() { - return privateKeyFile; - } } diff --git a/Cpop-Core/src/main/java/com/cpop/core/filter/JwtAuthenticationFilter.java b/Cpop-Core/src/main/java/com/cpop/core/filter/JwtAuthenticationFilter.java index 0b5a1de..994c8ef 100644 --- a/Cpop-Core/src/main/java/com/cpop/core/filter/JwtAuthenticationFilter.java +++ b/Cpop-Core/src/main/java/com/cpop/core/filter/JwtAuthenticationFilter.java @@ -6,10 +6,10 @@ import com.cpop.common.utils.StringUtils; import com.cpop.common.utils.ip.IpUtils; import com.cpop.core.base.entity.LoginUser; import com.cpop.core.base.enums.UserType; +import com.cpop.core.gateway.miniProgram.MiniProgramAuthenticationToken; import com.cpop.core.service.RedisService; +import com.cpop.core.service.impl.OamStaffDetailsServiceImpl; import com.cpop.core.utils.JwtUtils; -import com.pupu.core.security.miniProgram.MiniProgramAuthenticationToken; -import com.pupu.core.service.impl.OamStaffDetailsServiceImpl; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jws; import io.jsonwebtoken.JwtException; diff --git a/Cpop-Core/src/main/java/com/cpop/core/utils/QuartzUtils.java b/Cpop-Core/src/main/java/com/cpop/core/utils/QuartzUtils.java new file mode 100644 index 0000000..54a2b16 --- /dev/null +++ b/Cpop-Core/src/main/java/com/cpop/core/utils/QuartzUtils.java @@ -0,0 +1,158 @@ +package com.cpop.core.utils; + +import org.quartz.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.text.ParseException; +import java.util.Calendar; +import java.util.Date; + +/** + * @author: DB + * @Date: 2023/07/12/16:54 + * @Description: + */ +@Component +public class QuartzUtils { + + @Autowired + private Scheduler scheduler; + + /** + * @Description: 获取Job信息 + * @param name + * @param group + * @return String + * @author DB + * @Date: 2023/7/12 0012 16:57 + */ + public String getJobInfo(String name, String group) throws SchedulerException { + TriggerKey triggerKey = new TriggerKey(name, group); + CronTrigger cronTrigger = (CronTrigger) scheduler.getTrigger(triggerKey); + return String.format("time:%s,state:%s", cronTrigger.getCronExpression(), + scheduler.getTriggerState(triggerKey).name()); + } + + /** + * @Description: 修改某个任务的执行时间 + * @param name + * @param group + * @param time + * @return boolean + * @author DB + * @Date: 2023/7/12 0012 16:57 + */ + public boolean modifyJob(String name, String group, String time) throws SchedulerException { + Date date = null; + TriggerKey triggerKey = new TriggerKey(name, group); + CronTrigger cronTrigger = (CronTrigger) scheduler.getTrigger(triggerKey); + String oldTime = cronTrigger.getCronExpression(); + if (!oldTime.equalsIgnoreCase(time)) { + CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(time); + CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(name, group) + .withSchedule(cronScheduleBuilder).build(); + date = scheduler.rescheduleJob(triggerKey, trigger); + } + return date != null; + } + + /** + * @Description: 暂停所有任务 + * @param + * @return + * @author DB + * @Date: 2023/7/12 0012 16:57 + */ + public void pauseAllJob() throws SchedulerException { + scheduler.pauseAll(); + } + + /** + * @Description: 暂停某个任务 + * @param name + * @param group + * @return + * @author DB + * @Date: 2023/7/12 0012 16:57 + */ + public void pauseJob(String name, String group) throws SchedulerException { + JobKey jobKey = new JobKey(name, group); + JobDetail jobDetail = scheduler.getJobDetail(jobKey); + if (jobDetail == null) { + return; + } + scheduler.pauseJob(jobKey); + } + + /** + * @Description: 恢复所有任务 + * @param + * @return + * @author DB + * @Date: 2023/7/12 0012 16:57 + */ + public void resumeAllJob() throws SchedulerException { + scheduler.resumeAll(); + } + + /** + * @Description: 恢复某个任务 + * @param name + * @param group + * @return + * @author DB + * @Date: 2023/7/12 0012 16:57 + */ + public void resumeJob(String name, String group) throws SchedulerException { + JobKey jobKey = new JobKey(name, group); + JobDetail jobDetail = scheduler.getJobDetail(jobKey); + if (jobDetail == null) { + return; + } + scheduler.resumeJob(jobKey); + } + + /** + * @Description: 删除某个任务 + * @param name + * @param group + * @return + * @author DB + * @Date: 2023/7/12 0012 16:57 + */ + public void deleteJob(String name, String group) throws SchedulerException { + JobKey jobKey = new JobKey(name, group); + JobDetail jobDetail = scheduler.getJobDetail(jobKey); + if (jobDetail == null) { + return; + } + scheduler.deleteJob(jobKey); + } + + /** + * @Description: 日期转Cron + * @param date + * @return String + * @author DB + * @Date: 2023/7/14 0014 11:26 + */ + public String convertToCron(Date date) throws ParseException { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + int seconds = calendar.get(Calendar.SECOND); + int minutes = calendar.get(Calendar.MINUTE); + int hours = calendar.get(Calendar.HOUR_OF_DAY); + int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); + // Calendar中的月份从0开始,所以需要加1 + int month = calendar.get(Calendar.MONTH) + 1; + int year = calendar.get(Calendar.YEAR); + return seconds + " " + + minutes + " " + + hours + " " + + dayOfMonth + " " + + month + " " + + "? " + year; + } + +} diff --git a/Cpop-Core/src/main/java/com/cpop/core/utils/file/FileUploadUtils.java b/Cpop-Core/src/main/java/com/cpop/core/utils/file/FileUploadUtils.java index 4ede9db..aeaeb77 100644 --- a/Cpop-Core/src/main/java/com/cpop/core/utils/file/FileUploadUtils.java +++ b/Cpop-Core/src/main/java/com/cpop/core/utils/file/FileUploadUtils.java @@ -7,6 +7,7 @@ import com.cpop.common.utils.StringUtils; import com.cpop.core.base.exception.file.FileNameLengthLimitExceededException; import com.cpop.core.base.exception.file.FileSizeLimitExceededException; import com.cpop.core.base.exception.file.InvalidExtensionException; +import com.cpop.core.utils.SpringUtils; import com.cpop.core.utils.uuid.Seq; import org.apache.commons.io.FilenameUtils; import org.springframework.web.multipart.MultipartFile; @@ -47,7 +48,7 @@ public class FileUploadUtils { /** * 默认上传的地址 */ - private static String defaultBaseDir = CpopConfig.getProfile(); + private static String defaultBaseDir = SpringUtils.getBean(CpopConfig.class).getProfile(); public void setDefaultBaseDir(String defaultBaseDir) { FileUploadUtils.defaultBaseDir = defaultBaseDir; @@ -134,7 +135,7 @@ public class FileUploadUtils { } public final String getPathFileName(String uploadDir, String fileName) throws IOException { - int dirLastIndex = CpopConfig.getProfile().length() + 1; + int dirLastIndex = SpringUtils.getBean(CpopConfig.class).getProfile().length() + 1; String currentDir = StringUtils.substring(uploadDir, dirLastIndex); return Constants.RESOURCE_PREFIX + "/" + currentDir + "/" + fileName; } diff --git a/Cpop-Core/src/main/java/com/cpop/core/utils/file/FileUtils.java b/Cpop-Core/src/main/java/com/cpop/core/utils/file/FileUtils.java index 8ec3feb..664f858 100644 --- a/Cpop-Core/src/main/java/com/cpop/core/utils/file/FileUtils.java +++ b/Cpop-Core/src/main/java/com/cpop/core/utils/file/FileUtils.java @@ -7,6 +7,7 @@ import com.cpop.common.utils.DateUtils; import com.cpop.common.utils.StringUtils; import com.cpop.core.base.exception.UtilException; import com.cpop.core.config.CpopConfig; +import com.cpop.core.utils.SpringUtils; import com.cpop.core.utils.uuid.IdUtils; import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.IOUtils; @@ -80,7 +81,7 @@ public class FileUtils { * @throws IOException IO异常 */ public String writeImportBytes(byte[] data) throws IOException { - return writeBytes(data, CpopConfig.getImportPath()); + return writeBytes(data, SpringUtils.getBean(CpopConfig.class).getImportPath()); } /** diff --git a/Cpop-Core/src/main/resources/mapper/CoreMapper.xml b/Cpop-Core/src/main/resources/mapper/CoreMapper.xml index 42bf32d..2ad6051 100644 --- a/Cpop-Core/src/main/resources/mapper/CoreMapper.xml +++ b/Cpop-Core/src/main/resources/mapper/CoreMapper.xml @@ -121,7 +121,7 @@ - SELECT config_key AS configKey, config_name AS configName, diff --git a/Cpop-Oam/Cpop-Oam-Web/pom.xml b/Cpop-Oam/Cpop-Oam-Web/pom.xml new file mode 100644 index 0000000..ce0b101 --- /dev/null +++ b/Cpop-Oam/Cpop-Oam-Web/pom.xml @@ -0,0 +1,46 @@ + + + 4.0.0 + + com.cpop + Cpop-Union + 1.0.0 + ../../pom.xml + + Cpop-Oam-Web + Cpop-Oam-Web + Cpop-Oam-Web + jar + + + + com.cpop + Cpop-Oam + + + + com.mysql + mysql-connector-j + runtime + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + + + diff --git a/Cpop-Oam/Cpop-Oam-Web/src/main/java/com/cpop/oam/web/CpopOamWebApplication.java b/Cpop-Oam/Cpop-Oam-Web/src/main/java/com/cpop/oam/web/CpopOamWebApplication.java new file mode 100644 index 0000000..e8eeb4c --- /dev/null +++ b/Cpop-Oam/Cpop-Oam-Web/src/main/java/com/cpop/oam/web/CpopOamWebApplication.java @@ -0,0 +1,20 @@ +package com.cpop.oam.web; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableAsync; + +/** + * @author DB + */ +@SpringBootApplication(scanBasePackages = {"com.cpop.**"}) +@MapperScan("com.cpop.**.mapper") +@EnableAsync +public class CpopOamWebApplication { + + public static void main(String[] args) { + SpringApplication.run(CpopOamWebApplication.class, args); + } + +} diff --git a/Cpop-Oam/Cpop-Oam-Web/src/main/resources/application-dev.yml b/Cpop-Oam/Cpop-Oam-Web/src/main/resources/application-dev.yml new file mode 100644 index 0000000..0631c01 --- /dev/null +++ b/Cpop-Oam/Cpop-Oam-Web/src/main/resources/application-dev.yml @@ -0,0 +1,86 @@ +# 项目相关配置 +cpop: + # 文件路径 示例( Windows配置W:/WorkSpace/java/uploadPath,Linux配置 /home/baseFramework/uploadPath) + profile: E:/Cpop/uploadPath + jwt: + #白名单 + whiteList: /login,/getCaptcha,/profile/**,/doc.html,/webjars/**,/favicon.ico,/v2/api-docs/**,/swagger-resources + gateway: + rsa-keypair: + # 公钥文件 + publicKeyFile: E:\Cpop\Cpop-Union\Cpop-Core\src\main\resources\static\keyPair\publicKey + # 公钥文件 + privateKeyFile: E:\Cpop\Cpop-Union\Cpop-Core\src\main\resources\static\keyPair\privateKey + +# DataSource Config +spring: + application: + name: Cpop-Oam-Dev + datasource: + url: jdbc:mysql://localhost:3306/cpop-union?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + username: root + password: root + #redis配置 + redis: + #地址 + host: localhost + #端口 + port: 6379 + #数据库 + database: 0 + #密码 + password: + #连接超时 + timeout: 5000 + lettuce: + pool: + # + min-idle: 0 + # + max-idle: 8 + # + max-active: 8 + # + max-wait: -1ms + data: + mongodb: + host: localhost + port: 27017 + database: cpop-union + +server: + port: 9420 + servlet: + context-path: /Cpop-Oam-Dev + +#Mybatis-Flex +mybatis-flex: + configuration: + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + +# springdoc-openapi项目配置 +knife4j: + enable: true + openapi: + title: PuPu-OAM开发API + description: PuPu-OAM开发API + email: + concat: DB + url: https://api.jamboxsys.com + version: 1.0.0 + license: Apache 2.0 + license-url: https://stackoverflow.com/ + terms-of-service-url: https://api.jamboxsys.com + group: + #系统 + system: + group-name: Oam + api-rule: package + api-rule-resources: + - com.pupu.oam + #jambox + jambox: + group-name: Jambox + api-rule: package + api-rule-resources: + - com.pupu.jambox \ No newline at end of file diff --git a/Cpop-Oam/Cpop-Oam-Web/src/main/resources/application-prod.yml b/Cpop-Oam/Cpop-Oam-Web/src/main/resources/application-prod.yml new file mode 100644 index 0000000..6ee19ac --- /dev/null +++ b/Cpop-Oam/Cpop-Oam-Web/src/main/resources/application-prod.yml @@ -0,0 +1,60 @@ +# 项目相关配置 +cpop: + # 文件路径 示例( Windows配置W:/WorkSpace/java/uploadPath,Linux配置 /home/baseFramework/uploadPath) + profile: /root/jambox-union/jambox-oam/uploadPath/upload + jwt: + #白名单 + whiteList: /login,/getCaptcha,/profile/** + #拦截 + gateway: + rsa-keypair: + # 公钥文件 + publicKeyFile: /root/jambox-union/jambox-oam/script/secretKey/publicKey + # 公钥文件 + privateKeyFile: /root/jambox-union/jambox-oam/script/secretKey/privateKey + +# DataSource Config +spring: + application: + name: PuPu_Oam + datasource: + url: jdbc:mysql://sh-cynosdbmysql-grp-fggo83js.sql.tencentcdb.com:20965/pupu-union?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + username: root + password: Customer0401 + #redis配置 + redis: + #地址 + host: 106.52.49.102 + #端口 + port: 6333 + #数据库 + database: 5 + #密码 + password: Jambox.123* + #连接超时 + timeout: 5000 + lettuce: + pool: + # + min-idle: 0 + # + max-idle: 8 + # + max-active: 8 + # + max-wait: -1ms + data: + mongodb: + host: localhost + port: 27017 + database: rock-blade + +server: + port: 9420 + servlet: + context-path: /PuPu-OAM + +#Mybatis-Flex +mybatis-flex: + configuration: + log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl \ No newline at end of file diff --git a/Cpop-Oam/Cpop-Oam-Web/src/main/resources/application-test.yml b/Cpop-Oam/Cpop-Oam-Web/src/main/resources/application-test.yml new file mode 100644 index 0000000..316894f --- /dev/null +++ b/Cpop-Oam/Cpop-Oam-Web/src/main/resources/application-test.yml @@ -0,0 +1,87 @@ +# 项目相关配置 +cpop: + # 文件路径 示例( Windows配置W:/WorkSpace/java/uploadPath,Linux配置 /home/baseFramework/uploadPath) + profile: /root/jambox-union/jambox-oam/uploadPath/upload + jwt: + #白名单 + whiteList: /login,/getCaptcha,/profile/**,/doc.html,/webjars/**,/favicon.ico,/v2/api-docs/**,/swagger-resources + #拦截 + gateway: + rsa-keypair: + # 公钥文件 + publicKeyFile: /root/jambox-union/jambox-oam/script/secretKey/publicKey + # 公钥文件 + privateKeyFile: /root/jambox-union/jambox-oam/script/secretKey/privateKey + +# DataSource Config +spring: + application: + name: PuPu-TEST + datasource: + url: jdbc:mysql://sh-cynosdbmysql-grp-fggo83js.sql.tencentcdb.com:20965/pupu-union?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + username: root + password: Customer0401 + #redis配置 + redis: + #地址 + host: 106.52.49.102 + #端口 + port: 6333 + #数据库 + database: 5 + #密码 + password: Jambox.123* + #连接超时 + timeout: 5000 + lettuce: + pool: + # + min-idle: 0 + # + max-idle: 8 + # + max-active: 8 + # + max-wait: -1ms + data: + mongodb: + host: localhost + port: 27017 + database: rock-blade + +server: + port: 9420 + servlet: + context-path: /PuPu-Oam-TEST + +#Mybatis-Flex +mybatis-flex: + configuration: + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + +# springdoc-openapi项目配置 +knife4j: + enable: true + openapi: + title: PuPu-OAM开发API + description: PuPu-OAM开发API + email: + concat: DB + url: https://api.jamboxsys.com + version: 1.0.0 + license: Apache 2.0 + license-url: https://stackoverflow.com/ + terms-of-service-url: https://api.jamboxsys.com + group: + #系统 + system: + group-name: Oam + api-rule: package + api-rule-resources: + - com.pupu.oam + #jambox + jambox: + group-name: Jambox + api-rule: package + api-rule-resources: + - com.pupu.jambox \ No newline at end of file diff --git a/Cpop-Oam/Cpop-Oam-Web/src/main/resources/application.yml b/Cpop-Oam/Cpop-Oam-Web/src/main/resources/application.yml new file mode 100644 index 0000000..1ce6497 --- /dev/null +++ b/Cpop-Oam/Cpop-Oam-Web/src/main/resources/application.yml @@ -0,0 +1,118 @@ +# 项目相关配置 +cpop: + # 名称 + name: PuPu-OAM + # 版本 + version: 1.0.0 + #JWT + jwt: + #密钥 + secret: abcdefghijklmnopqrstuvwxyz + #过期时间 + expire: 604800 + #token头 + header: Authorization + #拦截 + gateway: + rsa-keypair: + # 加密方式 + algorithm: RSA + # 初始化大小 + keySize: 2048 + +#Spring +spring: + mvc: + pathmatch: + matching-strategy: ant_path_matcher + servlet: + multipart: + #文件最大传输 + max-file-size: 1024MB + max-request-size: 300MB + profiles: + active: dev,jambox,api,sdk + datasource: + type: com.zaxxer.hikari.HikariDataSource + driver-class-name: com.mysql.cj.jdbc.Driver + #hikari数据源特性配置 + hikari: + #最大连接数,默认值10. + maximum-pool-size: 10 + #最小空闲连接,默认值10. + minimum-idle: 10 + #连接超时时间(毫秒),默认值30秒. + connection-timeout: 30000 + #空闲连接超时时间,默认值600000(10分钟),只有空闲连接数大于最大连接数且空闲时间超过该值,才会被释放;如果大于等于 max-lifetime 且 max-lifetime>0,则会被重置为0. + idle-timeout: 600000 + #连接最大存活时间,默认值30分钟.设置应该比mysql设置的超时时间短 + max-lifetime: 3000000 + #连接测试查询 + connection-test-query: select 1 + messages: + #i18n + basename: static/i18n/messages + encoding: UTF-8 + cacheDuration: 3600 + quartz: + job-store-type: jdbc + jdbc: + initialize-schema: embedded + #定时任务启动开关,true-开 false-关 + auto-startup: true + #延迟1秒启动定时任务 + startup-delay: 1s + #启动时更新己存在的Job + overwrite-existing-jobs: true + properties: + org: + quartz: + scheduler: + instanceName: PuPuOamScheduler + instanceId: AUTO + jobStore: + class: org.springframework.scheduling.quartz.LocalDataSourceJobStore + driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate + tablePrefix: QRTZ_ + isClustered: false + misfireThreshold: 12000 + clusterCheckinInterval: 15000 + threadPool: + class: org.quartz.simpl.SimpleThreadPool + threadCount: 1 + threadPriority: 5 + threadsInheritContextClassLoaderOfInitializingThread: true + +#Mybatis-Flex +mybatis-flex: + global-config: + key-config: + key-type: generator + value: snowFlakeId + # 逻辑删除数据存在标记值 默认值:0 + normal-value-of-logic-delete: 0 + # 逻辑删除数据删除标记值 默认值:0 + deleted-value-of-logic-delete: 1 + # 全局逻辑删除默认字段 + logic-delete-column: is_delete + +# 线程池配置参数 +task: + pool: + # 设置核心线程数 + corePoolSize: 10 + # 设置最大线程数 + maxPoolSize: 20 + # 设置空闲线程存活时间(秒 + keepAliveSeconds: 300 + # 设置队列容量 + queueCapacity: 100 + # 设置线程名称前缀 + threadNamePrefix: "PuPu-Oam-AsyncNotify-" + # 设置线程池等待终止时间(秒) + awaitTerminationSeconds: 60 + +logging: + level: + #swagger日志 + springfox: error \ No newline at end of file diff --git a/Cpop-Oam/Cpop-Oam-Web/src/main/resources/static.i18n/messages.properties b/Cpop-Oam/Cpop-Oam-Web/src/main/resources/static.i18n/messages.properties new file mode 100644 index 0000000..e69de29 diff --git a/Cpop-Oam/Cpop-Oam-Web/src/main/resources/static.i18n/messages_en_US.properties b/Cpop-Oam/Cpop-Oam-Web/src/main/resources/static.i18n/messages_en_US.properties new file mode 100644 index 0000000..8e40c72 --- /dev/null +++ b/Cpop-Oam/Cpop-Oam-Web/src/main/resources/static.i18n/messages_en_US.properties @@ -0,0 +1,80 @@ +#\u767B\u5F55\u4FE1\u606F +i18n_login_success=Login Success +i18n_loginOut_success=Login Out Success + +#\u544A\u8B66\u90AE\u4EF6i18n +i18n_alarm_email_dir=Dear +i18n_alarm_email_as_below=This is an alarm information from cloud platform: +i18n_alarm_email_content=Alarm content: +i18n_alarm_email_source=Alarm source: +i18n_alarm_email_level=Alarm level: +i18n_alarm_email_time=Alarm time: +i18n_alarm_email_level_alert=alert +i18n_alarm_email_level_info=info +i18n_alarm_email_level_warning=warning +i18n_alarm_email_level_error=error +i18n_alarm_email_tip=If the alarm level is warning or error, please resolve it as soon as possible! +i18n_alarm_email_not_reply=This email is automatically sent by system, please do not reply. +i18n_alarm_email_subject=System alert email + +#\u7CFB\u7EDF\u4FE1\u606F +i18n_sysInfo_no_version_Info=No version information retrieved! + +#\u7CFB\u7EDF\u65E5\u5FD7\u4FE1\u606F +i18n_sysLog_terminalLog=Terminal Log +i18n_sysLog_systemLog=System Log +i18n_sysLog_webLog=Web Log +i18n_sysLog_DBLog=DataBase Log +i18n_sysLog_pgPoolLog=PgPool Log + +#\u64CD\u4F5C\u65E5\u5FD7\u4FE1\u606F +i18n_operationLog_systemLogin=System User Login +i18n_operationLog_systemLogout=System User Logout +i18n_operationLog_insertOamMenu=Insert Oam Menu +i18n_operationLog_updateOamMenu=Update Oam Menu +i18n_operationLog_removeOamMenu=Remove Oam Menu +i18n_operationLog_insertOamRole=Insert Oam Role +i18n_operationLog_updateOamRole=Update Oam Role +i18n_operationLog_removeOamRole=Remove Oam Role +i18n_operationLog_insertOamDept=Insert Oam Dept +i18n_operationLog_updateOamDept=Update Oam Dept +i18n_operationLog_removeOamDept=Remove Oam Dept +i18n_operationLog_insertOamStaff=Insert Oam User +i18n_operationLog_updateOamStaff=Update Oam User +i18n_operationLog_removeOamStaff=Remove Oam User +i18n_operationLog_updateOamStaffPassword=Update Oam Staff Password +i18n_operationLog_insertOamDuty=Insert Oam Duty +i18n_operationLog_removeOamDuty=Remove Oam Duty +i18n_operationLog_insertIterationTask=Insert Iteration Task +i18n_operationLog_setTaskAuditComments=Set Task Audit Comments +i18n_operationLog_claimTask=Claim Duty +i18n_operationLog_removeTask=Remove Task +i18n_operationLog_insertTaskStaffGroup=Insert Task Staff Group +i18n_operationLog_updateStaffGrandPoint=Update Staff Grand Point +i18n_operationLog_removeTaskStaffGroup=Remove Task Staff Group +i18n_operationLog_updateTaskItem=Update Task Item +i18n_operationLog_updateTaskResponsibleStaff=Update Task Responsible Staff +i18n_operationLog_insertDemandTask=Insert Demand Task +i18n_operationLog_insertWorkOrder=Insert Work Order +i18n_operationLog_finishTask=Finish Task +i18n_operationLog_insertWorkOrderRecord=Insert Work Order Record +i18n_operationLog_concludeWorkOrder=Conclude Work Order +i18n_operationLog_pauseWorkOrder=Pause Work Order +i18n_operationLog_insertReimburseType=Insert Reimburse Type +i18n_operationLog_updateReimburseType=Update Reimburse Type +i18n_operationLog_removeReimburseType=Remove Reimburse Type +i18n_operationLog_auditStaffApplication=Audit Staff Application +i18n_operationLog_reimburseReject=Reimburse Reject +i18n_operationLog_reimbursePay=Reimburse Pay + +#\u7CFB\u7EDF\u63D0\u793A\u4FE1\u606F +i18n_alert_accountOrPwdError=Username or password is wrong! +i18n_alert_peopleUnderTheDepartmentError=There are people under the department, it is not allowed to delete the department! +i18n_alert_departmentNotDeactivatedError=The current department is not deactivated, deletion is not allowed\uFF01 +i18n_alert_userOrPhoneOrEmailIsExist=Username or mobile phone number or email address already exists +i18n_alert_userIsExist=User already exists +i18n_alert_oldPasswordIsWrong=The old password was entered incorrectly, please try again + +#\u7CFB\u7EDF\u57FA\u7840\u4FE1\u606F +i18n_baseInfo_success=Success +i18n_baseInfo_failed=Failed diff --git a/Cpop-Oam/Cpop-Oam-Web/src/main/resources/static.i18n/messages_zh_CN.properties b/Cpop-Oam/Cpop-Oam-Web/src/main/resources/static.i18n/messages_zh_CN.properties new file mode 100644 index 0000000..e43f69e --- /dev/null +++ b/Cpop-Oam/Cpop-Oam-Web/src/main/resources/static.i18n/messages_zh_CN.properties @@ -0,0 +1,80 @@ +#\u767B\u5F55\u4FE1\u606F +i18n_login_success=\u767B\u5F55\u6210\u529F +i18n_loginOut_success=\u767B\u51FA\u6210\u529F + +#\u544A\u8B66\u90AE\u4EF6i18n +i18n_alarm_email_dir=\u4EB2\u7231\u7684 +i18n_alarm_email_as_below=\u4EE5\u4E0B\u662F\u7CFB\u7EDF\u53D1\u9001\u7684\u544A\u8B66\u4FE1\u606F: +i18n_alarm_email_content=\u544A\u8B66\u5185\u5BB9: +i18n_alarm_email_source=\u544A\u8B66\u6765\u6E90: +i18n_alarm_email_level=\u544A\u8B66\u7EA7\u522B: +i18n_alarm_email_time=\u544A\u8B66\u65F6\u95F4: +i18n_alarm_email_level_alert=\u63D0\u793A +i18n_alarm_email_level_info=\u4FE1\u606F +i18n_alarm_email_level_warning=\u8B66\u544A +i18n_alarm_email_level_error=\u9519\u8BEF +i18n_alarm_email_tip=\u5982\u679C\u662F\u8B66\u544A\u6216\u9519\u8BEF\u7EA7\u522B\u7684\u4FE1\u606F,\u8BF7\u5C3D\u5FEB\u5904\u7406,\u4EE5\u514D\u5F71\u54CD\u5DE5\u4F5C\u4E1A\u52A1\uFF01 +i18n_alarm_email_not_reply=\u672C\u90AE\u4EF6\u4E3A\u7CFB\u7EDF\u81EA\u52A8\u53D1\u9001\u7684\u90AE\u4EF6,\u8BF7\u52FF\u56DE\u590D\u3002 +i18n_alarm_email_subject=\u7CFB\u7EDF\u544A\u8B66\u90AE\u4EF6 + +#\u7CFB\u7EDF\u4FE1\u606F +i18n_sysInfo_no_version_Info=\u6CA1\u6709\u68C0\u7D22\u5230\u7248\u672C\u4FE1\u606F\uFF01 + +#\u7CFB\u7EDF\u65E5\u5FD7\u4FE1\u606F +i18n_sysLog_terminalLog=\u7EC8\u7AEF\u65E5\u5FD7 +i18n_sysLog_systemLog=\u7CFB\u7EDF\u65E5\u5FD7 +i18n_sysLog_webLog=web\u65E5\u5FD7 +i18n_sysLog_DBLog=\u6570\u636E\u5E93\u65E5\u5FD7 +i18n_sysLog_pgPoolLog=pgPool\u65E5\u5FD7 + +#\u64CD\u4F5C\u65E5\u5FD7\u4FE1\u606F +i18n_operationLog_systemLogin=\u7CFB\u7EDF\u7528\u6237\u767B\u5F55 +i18n_operationLog_systemLogout=\u7CFB\u7EDF\u7528\u6237\u9000\u51FA +i18n_operationLog_insertOamMenu=\u6DFB\u52A0OAM\u83DC\u5355 +i18n_operationLog_updateOamMenu=\u4FEE\u6539OAM\u83DC\u5355 +i18n_operationLog_removeOamMenu=\u5220\u9664OAM\u83DC\u5355 +i18n_operationLog_insertOamRole=\u6DFB\u52A0OAM\u89D2\u8272 +i18n_operationLog_updateOamRole=\u4FEE\u6539OAM\u89D2\u8272 +i18n_operationLog_removeOamRole=\u5220\u9664OAM\u89D2\u8272 +i18n_operationLog_insertOamDept=\u6DFB\u52A0OAM\u90E8\u95E8 +i18n_operationLog_updateOamDept=\u4FEE\u6539OAM\u90E8\u95E8 +i18n_operationLog_removeOamDept=\u5220\u9664OAM\u90E8\u95E8 +i18n_operationLog_insertOamStaff=\u6DFB\u52A0OAM\u7528\u6237 +i18n_operationLog_updateOamStaff=\u4FEE\u6539OAM\u7528\u6237 +i18n_operationLog_removeOamStaff=\u5220\u9664OAM\u7528\u6237 +i18n_operationLog_updateOamStaffPassword=\u4FEE\u6539OAM\u7528\u6237\u5BC6\u7801 +i18n_operationLog_insertOamDuty=\u6DFB\u52A0OAM\u503C\u73ED +i18n_operationLog_removeOamDuty=\u5220\u9664OAM\u503C\u73ED +i18n_operationLog_insertIterationTask=\u6DFB\u52A0\u8FED\u4EE3\u4EFB\u52A1 +i18n_operationLog_setTaskAuditComments=\u8BBE\u7F6E\u5BA1\u6838\u610F\u89C1 +i18n_operationLog_claimTask=\u9886\u53D6\u4EFB\u52A1 +i18n_operationLog_removeTask=\u5220\u9664\u4EFB\u52A1 +i18n_operationLog_insertTaskStaffGroup=\u65B0\u589E\u4EFB\u52A1\u5458\u5DE5\u7EC4 +i18n_operationLog_updateStaffGrandPoint=\u66F4\u65B0\u5458\u5DE5\u7EE9\u70B9 +i18n_operationLog_removeTaskStaffGroup=\u5220\u9664\u5458\u5DE5\u4EFB\u52A1\u7EC4 +i18n_operationLog_updateTaskItem=\u66F4\u65B0\u4EFB\u52A1\u8FDB\u5EA6 +i18n_operationLog_updateTaskResponsibleStaff=\u66F4\u65B0\u4EFB\u52A1\u8D1F\u8D23\u4EBA +i18n_operationLog_insertDemandTask=\u65B0\u589E\u9700\u6C42\u4EFB\u52A1 +i18n_operationLog_insertWorkOrder=\u65B0\u589E\u5DE5\u5355 +i18n_operationLog_finishTask=\u5B8C\u6210\u4EFB\u52A1 +i18n_operationLog_insertWorkOrderRecord=\u65B0\u589E\u5DE5\u5355\u8BB0\u5F55 +i18n_operationLog_concludeWorkOrder=\u5B8C\u6210\u5DE5\u5355 +i18n_operationLog_pauseWorkOrder=\u6682\u505C\u5DE5\u5355 +i18n_operationLog_insertReimburseType=\u6DFB\u52A0\u62A5\u9500\u7C7B\u578B +i18n_operationLog_updateReimburseType=\u4FEE\u6539\u62A5\u9500\u7C7B\u578B +i18n_operationLog_removeReimburseType=\u5220\u9664\u62A5\u9500\u7C7B\u578B +i18n_operationLog_auditStaffApplication=\u5BA1\u6838\u5458\u5DE5\u7533\u8BF7 +i18n_operationLog_reimburseReject=\u62A5\u9500\u62D2\u7EDD +i18n_operationLog_reimbursePay=\u62A5\u9500\u4E0B\u6B3E + +#\u7CFB\u7EDF\u63D0\u793A\u4FE1\u606F +i18n_alert_accountOrPwdError=\u8D26\u53F7\u6216\u5BC6\u7801\u9519\u8BEF\uFF01 +i18n_alert_peopleUnderTheDepartmentError=\u5F53\u524D\u90E8\u95E8\u4E0B\u6709\u4EBA\u5458\uFF0C\u4E0D\u5141\u8BB8\u5220\u9664\u90E8\u95E8\uFF01 +i18n_alert_departmentNotDeactivatedError=\u5F53\u524D\u90E8\u95E8\u672A\u505C\u7528\uFF0C\u4E0D\u5141\u8BB8\u5220\u9664\u90E8\u95E8\uFF01 +i18n_alert_userOrPhoneOrEmailIsExist=\u7528\u6237\u540D\u6216\u624B\u673A\u53F7\u6216\u90AE\u7BB1\u5DF2\u5B58\u5728 +i18n_alert_userIsExist=\u7528\u6237\u5DF2\u5B58\u5728 +i18n_alert_oldPasswordIsWrong=\u65E7\u5BC6\u7801\u8F93\u5165\u9519\u8BEF\uFF0C\u8BF7\u91CD\u65B0\u8F93\u5165 + +#\u7CFB\u7EDF\u57FA\u7840\u4FE1\u606F +i18n_baseInfo_success=\u6210\u529F +i18n_baseInfo_failed=\u5931\u8D25 diff --git a/Cpop-Oam/Cpop-Oam-Web/src/test/java/com/cpop/oam/web/CpopApiTests.java b/Cpop-Oam/Cpop-Oam-Web/src/test/java/com/cpop/oam/web/CpopApiTests.java new file mode 100644 index 0000000..463ea96 --- /dev/null +++ b/Cpop-Oam/Cpop-Oam-Web/src/test/java/com/cpop/oam/web/CpopApiTests.java @@ -0,0 +1,31 @@ +package com.cpop.oam.web; + +import org.springframework.boot.test.context.SpringBootTest; + +/** + * @author DB + * @createTime 2023/09/15 17:44 + * @description + */ +@SpringBootTest +public class CpopApiTests { + + /*@Autowired + private WebHookSendHandler webHookSendHandler; + + *//** + * @descriptions 机器人发送测试 + * @author DB + * @date 2023/09/15 17:46 + *//* + @Test + public void webHookSendTest(){ + List list = new ArrayList<>(); + list.add("17728500831"); + try { + System.out.println(webHookSendHandler.webHookSendText("586442ba-6eeb-4a3c-937d-75faa4d9dbb9", list, "测试数据,不用管", false)); + } catch (IOException e) { + throw new RuntimeException(e); + } + }*/ +} diff --git a/Cpop-Oam/Cpop-Oam-Web/src/test/java/com/cpop/oam/web/CpopCoreTests.java b/Cpop-Oam/Cpop-Oam-Web/src/test/java/com/cpop/oam/web/CpopCoreTests.java new file mode 100644 index 0000000..921fffc --- /dev/null +++ b/Cpop-Oam/Cpop-Oam-Web/src/test/java/com/cpop/oam/web/CpopCoreTests.java @@ -0,0 +1,81 @@ +package com.cpop.oam.web; + +import com.cpop.core.base.entity.LoginUser; +import com.cpop.core.base.enums.OperationLogEnum; +import com.cpop.core.base.enums.UserType; +import com.cpop.core.service.CoreService; +import com.cpop.core.utils.RsaUtils; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import java.util.Map; + +/** + * @author DB + * @Description: RockBlade核心功能测试 + * @create 2023-08-27 11:11 + */ +@SpringBootTest +public class CpopCoreTests { + + @Autowired + private CoreService coreService; + + @Autowired + private RsaUtils rsaUtils; + + /** + * @Description: 添加操作日志 + * @param + * @return + * @Author DB + * @Date: 2023/8/27 11:11 + */ + @Test + public void insertOperationLog() { + LoginUser loginUser = new LoginUser(); + loginUser.setIpAddr("localhost") + .setUserId("1") + .setUserName("RockBlade"); + coreService.insertOperationLog(200, OperationLogEnum.SYSTEM_LOGIN, loginUser, null); + } + + /** + * @Description: 根据用户名获取用户信息 + * @param + * @return + * @Author DB + * @Date: 2023/8/27 23:46 + */ + @Test + public void loadUserByUsername() { + System.out.println(coreService.getSysUser("RockBlade", UserType.OAM_USER)); + } + + /** + * 初始化密钥对 + */ + @Test + public void initKeyPair() { + Map keyPairMap = rsaUtils.initKeyPair(); + String publicKey = keyPairMap.get("publicKey"); + String privateKey = keyPairMap.get("privateKey"); + System.out.println("公钥:"); + System.out.println(publicKey); + System.out.println(); + System.out.println("私钥:"); + System.out.println(privateKey); + System.out.println(); + String source = "Admin@123"; + System.out.println("待加密字符串:"+source); + System.out.println(); + String strEncrypt = rsaUtils.encrypt(source); + System.out.println("加密后的字符串:"); + System.out.println(strEncrypt); + System.out.println(); + String strDecrypt = rsaUtils.decrypt(strEncrypt); + System.out.println("解密后的字符串:"); + System.out.println(strDecrypt); + } +} diff --git a/Cpop-Oam/pom.xml b/Cpop-Oam/pom.xml new file mode 100644 index 0000000..4fc52ea --- /dev/null +++ b/Cpop-Oam/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + com.cpop + Cpop-Union + 1.0.0 + ../pom.xml + + Cpop-Oam + Cpop-Oam + Oam模块 + jar + + + + + com.cpop + Cpop-Core + + + + diff --git a/Cpop-Oam/sql/Oam.sql b/Cpop-Oam/sql/Oam.sql new file mode 100644 index 0000000..bcc7bb1 --- /dev/null +++ b/Cpop-Oam/sql/Oam.sql @@ -0,0 +1,414 @@ +/* + Navicat Premium Data Transfer + + Source Server : localhost + Source Server Type : MySQL + Source Server Version : 80032 + Source Host : localhost:3306 + Source Schema : cpop-union + + Target Server Type : MySQL + Target Server Version : 80032 + File Encoding : 65001 + + Date: 27/09/2023 16:06:32 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for pp_oam_dept +-- ---------------------------- +DROP TABLE IF EXISTS `cp_oam_dept`; +CREATE TABLE `cp_oam_dept` ( + `id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '部门id', + `parent_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '父部门id', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '部门名称', + `order_no` int(0) NULL DEFAULT NULL COMMENT '排序', + `leader` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '负责人', + `phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '电话', + `email` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮箱', + `status` tinyint(1) NULL DEFAULT NULL COMMENT '部门状态:1正常,0停用', + `remark` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '备注', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_user_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人id', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `update_user_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新人id', + `is_delete` tinyint(1) NULL DEFAULT 1 COMMENT '逻辑删除(0否1是)', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '部门表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of pp_oam_dept +-- ---------------------------- +INSERT INTO `cp_oam_dept` VALUES ('72c677f7f492c98f39e633ddc4433d17', NULL, '深圳普普数字产业发展有限公司', 0, 'DB', '18000000000', '18000000000@qq.com', 1, NULL, '2023-03-20 22:17:59', '1', '2023-09-12 16:33:44', '1', 0); + +-- ---------------------------- +-- Table structure for pp_oam_duty +-- ---------------------------- +DROP TABLE IF EXISTS `cp_oam_duty`; +CREATE TABLE `cp_oam_duty` ( + `id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键', + `service_staff_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '服务员工id', + `technology_staff_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '技术员工id', + `duty_date` date NULL DEFAULT NULL COMMENT '值班日期', + `remark` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '备注', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_user_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人id', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `update_user_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新人id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '值班表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of pp_oam_duty +-- ---------------------------- + +-- ---------------------------- +-- Table structure for pp_oam_finance_reimburse +-- ---------------------------- +DROP TABLE IF EXISTS `cp_oam_finance_reimburse`; +CREATE TABLE `cp_oam_finance_reimburse` ( + `id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `staff_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '提交人', + `status` int(0) NULL DEFAULT 0 COMMENT '状态:0:已提交;1:审批中;2:下款中;3:已下发;4:驳回', + `type_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '申请类型', + `report_date` date NULL DEFAULT NULL COMMENT '报销日期', + `remarks` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '申请说明', + `price` decimal(20, 2) NULL DEFAULT NULL COMMENT '申请金额', + `attachment_url` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '附件', + `reject_reason` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '驳回原因', + `create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间', + `update_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '更新时间', + `create_user_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人id', + `update_user_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新人id', + `is_delete` tinyint(0) NULL DEFAULT 0 COMMENT '逻辑删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '报销记录表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of pp_oam_finance_reimburse +-- ---------------------------- + +-- ---------------------------- +-- Table structure for pp_oam_finance_reimburse_stage +-- ---------------------------- +DROP TABLE IF EXISTS `cp_oam_finance_reimburse_stage`; +CREATE TABLE `cp_oam_finance_reimburse_stage` ( + `id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键', + `finance_reimburse_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '报销记录id', + `stage_amount` decimal(10, 2) NULL DEFAULT NULL COMMENT '阶段金额', + `payment_time` datetime(0) NULL DEFAULT NULL COMMENT '下发时间', + `create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间', + `create_user_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人id', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `update_user_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新人id', + `deleted` tinyint(1) NULL DEFAULT 1 COMMENT '逻辑删除(1否0是)', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '报销阶段表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of pp_oam_finance_reimburse_stage +-- ---------------------------- + +-- ---------------------------- +-- Table structure for pp_oam_finance_reimburse_type +-- ---------------------------- +DROP TABLE IF EXISTS `cp_oam_finance_reimburse_type`; +CREATE TABLE `cp_oam_finance_reimburse_type` ( + `id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键', + `type_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '报销类型', + `create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间', + `create_user_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人id', + `update_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '更新时间', + `update_user_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新人id', + PRIMARY KEY (`id`) USING BTREE, + INDEX `report_name`(`type_name`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '报销类型表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of pp_oam_finance_reimburse_type +-- ---------------------------- + +-- ---------------------------- +-- Table structure for pp_oam_menu +-- ---------------------------- +DROP TABLE IF EXISTS `cp_oam_menu`; +CREATE TABLE `cp_oam_menu` ( + `id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '菜单ID', + `parent_menu` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '父级菜单ID', + `name` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '菜单名称', + `icon` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '菜单图标', + `component` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '菜单路由,父菜单为空', + `status` tinyint(1) NULL DEFAULT NULL COMMENT '标记菜单的状态 0:禁用 1:正常(根据权限正常显示)', + `type` int(0) NULL DEFAULT NULL COMMENT '菜单类型,0:目录,1:菜单,2:按钮', + `permission` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '权限', + `redirect` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '重定向路径,一级菜单有值', + `order_no` int(0) NULL DEFAULT NULL COMMENT '排序,值越小越靠前,一级菜单有值', + `path` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '路由地址', + `title` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '标题', + `hide_menu` tinyint(1) NULL DEFAULT 0 COMMENT '隐藏菜单', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_user_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人id', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `update_user_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新人id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统菜单表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of pp_oam_menu +-- ---------------------------- +INSERT INTO `cp_oam_menu` VALUES ('0543bcb8d5e324bbfdb3ab5a6a69b6d9', '1e0ab5fda780a0a0f76aa484ef92ec12', NULL, NULL, 'LAYOUT', 1, 2, 'dutyCalendar:duty:remove', NULL, 10, NULL, '删除值班', 0, '2023-05-19 09:23:26', '1', '2023-09-15 10:40:34', '1'); +INSERT INTO `cp_oam_menu` VALUES ('07585353c7ed61cca5fba5ba0057fe9f', NULL, 'OamTask', 'ant-design:carry-out-outlined', 'LAYOUT', 1, 0, NULL, NULL, 10, '/oamTask', '任务管理', 0, '2023-05-19 10:10:24', '1', '2023-09-15 15:46:23', '1'); +INSERT INTO `cp_oam_menu` VALUES ('0bc2a7f74fbfa18a6de9e8582a12a7ae', '0d486bfdddc4d9aae67a7162467848ba', NULL, NULL, 'LAYOUT', 1, 2, 'oamTask:task:update', NULL, 20, NULL, '领取任务', 0, '2023-05-19 17:53:17', '1', '2023-09-15 15:47:05', '1'); +INSERT INTO `cp_oam_menu` VALUES ('0d486bfdddc4d9aae67a7162467848ba', '07585353c7ed61cca5fba5ba0057fe9f', 'Task', 'ant-design:align-left-outlined', '/oamTask/task/Index.vue', 1, 1, 'oamTask:task:list', NULL, 0, '/oamTask/task', '任务列表', 0, '2023-05-19 10:15:13', '1', '2023-09-26 15:26:38', '1'); +INSERT INTO `cp_oam_menu` VALUES ('118a8b1f852823668c3e4969442b1b06', 'bdaf51dd6319b24f7ba1c8d2ae11b953', 'Brand', 'ant-design:behance-circle-filled', '/brandAndCampus/brand/index.vue', 1, 1, 'brandAndCampus:brand:list', NULL, 0, '/brandAndCampus/brand', '品牌管理', 0, '2023-06-01 18:00:25', '1', '2023-06-07 10:07:28', '1'); +INSERT INTO `cp_oam_menu` VALUES ('13474e90432670ec0ffebaf63bd42984', '0d486bfdddc4d9aae67a7162467848ba', NULL, NULL, 'LAYOUT', 1, 2, 'oamTask:task:insert', NULL, 0, NULL, '添加迭代任务', 0, '2023-05-19 17:51:37', '1', '2023-09-15 15:46:51', '1'); +INSERT INTO `cp_oam_menu` VALUES ('1e0ab5fda780a0a0f76aa484ef92ec12', '282e702ef80abfab3e15f857a7fbaf38', 'Duty', 'ant-design:table-outlined', '/dutyCalendar/duty/index.vue', 1, 1, 'dutyCalendar:duty:list', NULL, 0, '/dutyCalendar/duty', '值班管理', 1, '2023-05-17 15:02:54', '1', '2023-09-15 10:40:14', '1'); +INSERT INTO `cp_oam_menu` VALUES ('22fdbfdbdefabb5bfb93f883ab5dcf2e', '118a8b1f852823668c3e4969442b1b06', NULL, NULL, 'LAYOUT', 1, 2, 'brandAndCampus:brand:update', NULL, 0, NULL, '编辑品牌', 0, '2023-06-01 18:01:15', '1', '2023-06-07 10:07:43', '1'); +INSERT INTO `cp_oam_menu` VALUES ('282e702ef80abfab3e15f857a7fbaf38', NULL, 'DutyCalendar', 'ant-design:table-outlined', 'LAYOUT', 1, 0, NULL, '/dutyCalendar/duty', 50, '/dutyCalendar', '值班管理', 0, '2023-05-17 14:56:49', '1', '2023-09-15 10:42:10', '1'); +INSERT INTO `cp_oam_menu` VALUES ('29a80a59088e00ec86c39ae4b4216f02', '56159c5249674322afe4577ecc4e4fb0', 'AccountDetail', 'ant-design:android-filled', '/system/account/components/AccountDetail.vue', 1, 1, NULL, NULL, 35, '/system/accountDetail/:id', '账号详情', 1, '2022-10-20 10:34:31', '1', '2023-04-12 17:37:12', '1'); +INSERT INTO `cp_oam_menu` VALUES ('2b43f89630a90fa1d4e0325d3de20c4a', '97916ae22affe061ec9af71afc915af5', NULL, NULL, 'LAYOUT', 1, 2, 'oamTask:taskDemand:insert', NULL, 0, NULL, '新增需求', 0, '2023-05-30 15:34:21', '1', '2023-05-30 17:14:32', '1'); +INSERT INTO `cp_oam_menu` VALUES ('34b34b1461e9d8ff28904bdcebf6c801', 'bdaf51dd6319b24f7ba1c8d2ae11b953', 'BrandStaff', 'ant-design:user-outlined', '/brandAndCampus/brandStaff/index.vue', 1, 1, 'brandAndCampus:brandStaff:list', NULL, 10, '/brandAndCampus/brandStaff', '品牌管理员', 0, '2023-06-02 11:11:25', '1', '2023-09-14 10:16:08', '1'); +INSERT INTO `cp_oam_menu` VALUES ('3757a482ea8ab4533ea3f58b53844df8', '5f6f850fafc42bf86cccd2b20c2d4560', NULL, NULL, 'LAYOUT', 1, 2, 'toamTask:workOrder:record', NULL, 20, NULL, '工单记录', 0, '2023-07-13 12:47:45', '1', '2023-07-13 12:47:45', '1'); +INSERT INTO `cp_oam_menu` VALUES ('37584218da7773e76fc8cb58a27c190c', '56159c5249674322afe4577ecc4e4fb0', 'Config', 'ant-design:control-filled', '/system/config/index.vue', 1, 1, 'system:config:list', NULL, 40, '/system/config', '系统配置', 0, '2023-07-13 15:19:26', '1', '2023-07-13 15:19:26', '1'); +INSERT INTO `cp_oam_menu` VALUES ('37e2f67bec72f466c1b6863132a6444e', NULL, 'WechatDevelopmentPlatform', 'ant-design:aliwangwang-outlined', 'LAYOUT', 0, 0, NULL, NULL, 80, '/wechatDevelopmentPlatform', '微信开发平台', 0, '2023-06-07 15:18:01', '1', '2023-07-04 17:40:38', '1'); +INSERT INTO `cp_oam_menu` VALUES ('43189970133945d5c5e854b8a8c7acb1', '56159c5249674322afe4577ecc4e4fb0', 'Menu', 'fa:bars', '/system/menu/index.vue', 1, 1, NULL, NULL, 0, '/system/menu', '菜单管理', 0, '2022-10-02 19:07:55', '1', '2022-10-19 17:12:32', '1'); +INSERT INTO `cp_oam_menu` VALUES ('469e2e562418185cf40936c1b1bd8f73', '883112b812224735d2a71b120d0bdf66', NULL, NULL, 'LAYOUT', 1, 2, 'system:dept:update', NULL, 10, NULL, '修改部门', 0, '2022-10-19 17:38:53', '1', '2022-10-19 17:38:53', '1'); +INSERT INTO `cp_oam_menu` VALUES ('4b0cb1472b28b094cb3f2301c792bac3', '913147f25f3721685f74570df0ed6f29', NULL, NULL, 'LAYOUT', 1, 2, 'system:account:update', NULL, 10, NULL, '修改账号', 0, '2022-10-20 11:23:35', '1', '2022-10-20 11:23:35', '1'); +INSERT INTO `cp_oam_menu` VALUES ('508f8ede8beb9ba02d3ba25ab74b57cf', 'c29ebe0bfbc9d62412c0a663175f82ec', NULL, NULL, 'LAYOUT', 1, 2, 'oamTask:taskAudit:update', NULL, 0, NULL, '任务审核', 0, '2023-05-29 09:12:12', '1', '2023-09-18 09:53:54', '1'); +INSERT INTO `cp_oam_menu` VALUES ('56159c5249674322afe4577ecc4e4fb0', NULL, 'System', 'fa:cogs', 'LAYOUT', 1, 0, NULL, NULL, 100, '/system', '系统管理', 0, '2022-09-29 22:48:18', '1', '2023-05-17 14:51:37', '1'); +INSERT INTO `cp_oam_menu` VALUES ('5f6f850fafc42bf86cccd2b20c2d4560', '07585353c7ed61cca5fba5ba0057fe9f', 'WorkOrder', 'ant-design:bulb-twotone', '/oamTask/workOrder/Index.vue', 1, 1, 'oamTask:workOrder:list', NULL, 30, '/oamTask/workOrder', '工单管理', 0, '2023-07-13 12:45:35', '1', '2023-09-26 15:26:56', '1'); +INSERT INTO `cp_oam_menu` VALUES ('5fac1c7c5a5f7f04f1030725c093e7be', '90fb318a81def682de9c48b0fd05cc75', NULL, NULL, 'LAYOUT', 1, 2, 'wechatDevelopmentPlatform:applet:insert', NULL, 0, NULL, '新增小程序', 0, '2023-06-07 15:29:10', '1', '2023-06-07 15:29:10', '1'); +INSERT INTO `cp_oam_menu` VALUES ('62362924994736128', NULL, 'Finance', 'ant-design:money-collect-filled', 'LAYOUT', 1, 0, NULL, NULL, 40, '/finance', '财务报销', 0, '2023-09-21 15:09:00', '1', '2023-09-21 15:09:00', '1'); +INSERT INTO `cp_oam_menu` VALUES ('62363536260018176', '62362924994736128', 'Application', 'ant-design:arrow-up-outlined', '/financial/application/Index.vue', 1, 1, 'financial:application:list', NULL, 0, '/financial/application', '报销申请', 0, '2023-09-21 15:11:26', '1', '2023-09-25 13:06:37', '1'); +INSERT INTO `cp_oam_menu` VALUES ('62364011151699968', '62362924994736128', 'Audit', 'ant-design:bug-twotone', '/financial/audit/Index.vue', 1, 1, 'financial:reimburseAudit:list', NULL, 5, '/financial/audit', '报销审核', 0, '2023-09-21 15:13:19', '1', '2023-09-27 14:06:39', '1'); +INSERT INTO `cp_oam_menu` VALUES ('628e33ac5f72b68e6f11b7e5e1ac4c72', '5f6f850fafc42bf86cccd2b20c2d4560', NULL, NULL, 'LAYOUT', 1, 2, 'task:workOrder:update', NULL, 10, NULL, '修改工单', 0, '2023-07-13 12:47:14', '1', '2023-07-13 12:47:14', '1'); +INSERT INTO `cp_oam_menu` VALUES ('63781576994349056', '62363536260018176', '', NULL, 'LAYOUT', 1, 2, 'financial:application:insert', NULL, 0, NULL, '新增报销', 0, '2023-09-25 13:06:13', '1', '2023-09-25 13:06:13', '1'); +INSERT INTO `cp_oam_menu` VALUES ('64547480627785728', '62364011151699968', '', NULL, 'LAYOUT', 1, 2, 'financial:reimburseAudit:update', NULL, 0, NULL, '编辑报销审核', 0, '2023-09-27 15:49:39', '1', '2023-09-27 15:50:50', '1'); +INSERT INTO `cp_oam_menu` VALUES ('64547713428434944', '62364011151699968', '', NULL, 'LAYOUT', 1, 2, 'financial:reimburseAudit:insert', NULL, 5, NULL, '新增报销审核', 0, '2023-09-27 15:50:34', '1', '2023-09-27 15:50:34', '1'); +INSERT INTO `cp_oam_menu` VALUES ('64547902948061184', '62364011151699968', '', NULL, 'LAYOUT', 1, 2, 'financial:reimburseAudit:remove', NULL, 10, NULL, '删除报销审核', 0, '2023-09-27 15:51:19', '1', '2023-09-27 15:51:19', '1'); +INSERT INTO `cp_oam_menu` VALUES ('735d0f3d49a4543d4af64a9cf4652dff', '1e0ab5fda780a0a0f76aa484ef92ec12', NULL, NULL, 'LAYOUT', 1, 2, 'dutyCalendar:duty:insert', NULL, 0, NULL, '新增值班', 0, '2023-05-19 09:22:58', '1', '2023-09-15 10:40:25', '1'); +INSERT INTO `cp_oam_menu` VALUES ('7be5939441b413a705a5fcb600839f0f', 'ae8d81c31d13607b6f4b1962df01d469', NULL, NULL, 'LAYOUT', 1, 2, 'brandAndCampus:campus:update', NULL, 0, NULL, '编辑校区', 0, '2023-06-07 09:54:51', '1', '2023-06-07 10:08:12', '1'); +INSERT INTO `cp_oam_menu` VALUES ('81973d68c66261975c6c2b5eef9084dd', '913147f25f3721685f74570df0ed6f29', NULL, NULL, 'LAYOUT', 1, 2, 'system:account:info', NULL, 40, NULL, '账号详情', 0, '2022-10-20 11:29:37', '1', '2022-10-20 11:29:37', '1'); +INSERT INTO `cp_oam_menu` VALUES ('83a42156935b50053fbacfa09ef43fbb', '913147f25f3721685f74570df0ed6f29', NULL, NULL, 'LAYOUT', 1, 2, 'system:account:insert', NULL, 0, NULL, '新增账号', 0, '2022-10-20 11:23:05', '1', '2022-10-20 11:23:05', '1'); +INSERT INTO `cp_oam_menu` VALUES ('84098277d121e712c3ea7e850ef0ef49', '118a8b1f852823668c3e4969442b1b06', NULL, NULL, 'LAYOUT', 1, 2, 'brandAndCampus:brand:remove', NULL, 10, NULL, '删除品牌', 0, '2023-06-01 18:01:38', '1', '2023-06-07 10:07:17', '1'); +INSERT INTO `cp_oam_menu` VALUES ('883112b812224735d2a71b120d0bdf66', '56159c5249674322afe4577ecc4e4fb0', 'Department', 'ant-design:apartment-outlined', '/system/dept/index.vue', 1, 1, 'system:dept:list', NULL, 20, '/system/department', '部门管理', 0, '2022-10-14 16:11:15', '1', '2022-10-20 09:47:57', '1'); +INSERT INTO `cp_oam_menu` VALUES ('89b03c3daceb1c2ebe2aa01c4a775888', '5f6f850fafc42bf86cccd2b20c2d4560', NULL, NULL, 'LAYOUT', 1, 2, 'oamTask:workOrder:insert', NULL, 0, NULL, '新增工单', 0, '2023-07-13 12:46:36', '1', '2023-07-13 12:46:36', '1'); +INSERT INTO `cp_oam_menu` VALUES ('8a3cabbff478dac7366d8b5e56da9296', '0d486bfdddc4d9aae67a7162467848ba', NULL, NULL, 'LAYOUT', 1, 2, 'oamTask:task:remove', NULL, 10, NULL, '删除任务', 0, '2023-05-19 17:52:03', '1', '2023-09-15 15:46:57', '1'); +INSERT INTO `cp_oam_menu` VALUES ('8fc436c8b5085e3d6b51ae3a87eb3c2e', 'ae8d81c31d13607b6f4b1962df01d469', NULL, NULL, 'LAYOUT', 1, 2, 'brandAndCampus:campus:remove', NULL, 10, NULL, '删除校区', 0, '2023-06-07 09:55:16', '1', '2023-06-07 10:08:25', '1'); +INSERT INTO `cp_oam_menu` VALUES ('8fd75624e030697574bbee52be834120', '90fb318a81def682de9c48b0fd05cc75', NULL, NULL, 'LAYOUT', 1, 2, 'wechatDevelopmentPlatform:applet:remove', NULL, 20, NULL, '删除小程序', 0, '2023-06-07 15:29:47', '1', '2023-06-07 15:29:47', '1'); +INSERT INTO `cp_oam_menu` VALUES ('90fb318a81def682de9c48b0fd05cc75', '37e2f67bec72f466c1b6863132a6444e', 'Applet', 'ant-design:star-outlined', '/wechatDevelopmentPlatform/applet/index.vue', 1, 1, 'wechatDevelopmentPlatform:applet:list', NULL, 5, '/wechatDevelopmentPlatform/applet', '小程序管理', 0, '2023-06-07 15:20:56', '1', '2023-06-07 16:35:08', '1'); +INSERT INTO `cp_oam_menu` VALUES ('913147f25f3721685f74570df0ed6f29', '56159c5249674322afe4577ecc4e4fb0', 'Account', 'ant-design:user-switch-outlined', '/system/account/index.vue', 1, 1, 'system:account:list', NULL, 30, '/system/account', '账号管理', 0, '2022-10-14 16:12:48', '1', '2022-10-20 11:23:18', '1'); +INSERT INTO `cp_oam_menu` VALUES ('97916ae22affe061ec9af71afc915af5', '07585353c7ed61cca5fba5ba0057fe9f', 'TaskDemand', 'ant-design:highlight-outlined', '/oamTask/taskDemand/Index.vue', 1, 1, 'oamTask:taskDemand:list', NULL, 20, '/oamTask/taskDemand', '需求管理', 0, '2023-05-30 15:33:40', '1', '2023-09-26 15:26:49', '1'); +INSERT INTO `cp_oam_menu` VALUES ('9f617344d80b7cdd8ffe7134b6b123c1', 'ff2f547cefb7e18a0b922afb3e491d87', NULL, NULL, 'LAYOUT', 1, 2, 'system:role:remove', NULL, 20, NULL, '删除角色', 0, '2022-10-20 10:26:21', '1', '2022-10-20 10:26:21', '1'); +INSERT INTO `cp_oam_menu` VALUES ('9f6ff374ed8c9c48152bb7f571688a1a', '913147f25f3721685f74570df0ed6f29', NULL, NULL, 'LAYOUT', 1, 2, 'system:account:remove', NULL, 20, NULL, '删除账号', 0, '2022-10-20 11:23:52', '1', '2022-10-20 11:23:52', '1'); +INSERT INTO `cp_oam_menu` VALUES ('9fb84dd03cb4e7e7722325d8aaa0161d', '883112b812224735d2a71b120d0bdf66', NULL, NULL, 'LAYOUT', 1, 2, 'system:dept:insert', NULL, 0, NULL, '新增部门', 0, '2022-10-19 17:26:49', '1', '2022-10-19 17:45:13', '1'); +INSERT INTO `cp_oam_menu` VALUES ('ae8d81c31d13607b6f4b1962df01d469', 'bdaf51dd6319b24f7ba1c8d2ae11b953', 'Campus', 'ant-design:linkedin-filled', '/brandAndCampus/campus/index.vue', 1, 1, 'brandAndCampus:campus:list', NULL, 5, '/brandAndCampus/campus', '校区管理', 0, '2023-06-07 09:53:22', '1', '2023-09-14 10:15:35', '1'); +INSERT INTO `cp_oam_menu` VALUES ('ae9a4ffa962c4bb9369332f18d5a7c27', 'fc0534b43c89ab33cd5c7c7a61cd8af9', 'Analysis', 'ion:grid-outline', '/dashboard/analysis/index.vue', 1, 1, NULL, NULL, 0, '/dashboard/analysis', '分析页', 1, '2022-10-19 16:05:38', '1', '2022-10-19 17:13:28', '1'); +INSERT INTO `cp_oam_menu` VALUES ('bdaf51dd6319b24f7ba1c8d2ae11b953', NULL, 'BrandAndCampus', 'ant-design:sketch-outlined', 'LAYOUT', 1, 0, NULL, NULL, 30, '/brandAndCampus', '品牌校区', 0, '2023-06-01 17:58:10', '1', '2023-06-01 17:58:10', '1'); +INSERT INTO `cp_oam_menu` VALUES ('c29ebe0bfbc9d62412c0a663175f82ec', '07585353c7ed61cca5fba5ba0057fe9f', 'AuditList', 'ant-design:alert-twotone', '/oamTask/auditList/Index.vue', 1, 1, 'oamTask:taskAudit:list', NULL, 10, '/oamTask/auditList', '审核列表', 0, '2023-05-19 18:06:09', '1', '2023-09-26 15:26:43', '1'); +INSERT INTO `cp_oam_menu` VALUES ('c702e78723fbd8483b797fafd8205cd0', 'ff2f547cefb7e18a0b922afb3e491d87', NULL, NULL, 'LAYOUT', 1, 2, 'system:role:update', NULL, 10, NULL, '修改角色', 0, '2022-10-20 10:26:04', '1', '2022-10-20 10:26:04', '1'); +INSERT INTO `cp_oam_menu` VALUES ('ca262b7fc779b93b677b687cf53f21ce', '34b34b1461e9d8ff28904bdcebf6c801', NULL, NULL, 'LAYOUT', 1, 2, 'brandAndCampus:brandStaff:insert', NULL, 0, NULL, '添加品牌管理员', 0, '2023-06-02 11:26:01', '1', '2023-09-14 17:49:51', '1'); +INSERT INTO `cp_oam_menu` VALUES ('cbabba6bad9ed10af0c0adf1ad669344', '90fb318a81def682de9c48b0fd05cc75', NULL, NULL, 'LAYOUT', 1, 2, 'wechatDevelopmentPlatform:applet:update', NULL, 10, NULL, '修改小程序', 0, '2023-06-07 15:29:28', '1', '2023-06-07 15:29:28', '1'); +INSERT INTO `cp_oam_menu` VALUES ('d31018cf901c9d5cfecb0c112ac3f1d0', '883112b812224735d2a71b120d0bdf66', NULL, NULL, 'LAYOUT', 1, 2, 'system:dept:remove', NULL, 20, NULL, '删除部门', 0, '2022-10-19 17:56:04', '1', '2022-10-19 17:56:04', '1'); +INSERT INTO `cp_oam_menu` VALUES ('dd510cfe81e9f4659caed569da35e415', '34b34b1461e9d8ff28904bdcebf6c801', NULL, NULL, 'LAYOUT', 1, 2, 'brandAndCampus:brandStaff:remove', NULL, 10, NULL, '删除品牌管理员', 0, '2023-06-02 11:26:37', '1', '2023-09-14 17:50:02', '1'); +INSERT INTO `cp_oam_menu` VALUES ('df7de32544aaf7b74aa7c6aaf684e5c4', 'ff2f547cefb7e18a0b922afb3e491d87', NULL, NULL, 'LAYOUT', 1, 2, 'system:role:insert', NULL, 0, NULL, '新增角色', 0, '2022-10-20 10:25:44', '1', '2022-10-20 10:25:44', '1'); +INSERT INTO `cp_oam_menu` VALUES ('fc0534b43c89ab33cd5c7c7a61cd8af9', NULL, 'Dashboard', 'ion:grid-outline', 'LAYOUT', 1, 0, NULL, '/dashboard/analysis', 0, '/dashboard', '系统概况', 0, '2022-09-29 22:48:18', '1', '2022-10-19 17:13:37', '1'); +INSERT INTO `cp_oam_menu` VALUES ('ff2f547cefb7e18a0b922afb3e491d87', '56159c5249674322afe4577ecc4e4fb0', 'Role', 'ant-design:crown-filled', '/system/role/index.vue', 1, 1, 'system:role:list', NULL, 10, '/system/role', '角色管理', 0, '2022-10-02 20:06:22', '1', '2022-10-20 10:25:06', '1'); + +-- ---------------------------- +-- Table structure for pp_oam_role +-- ---------------------------- +DROP TABLE IF EXISTS `cp_oam_role`; +CREATE TABLE `cp_oam_role` ( + `id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键', + `role_name` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '角色名称', + `role_value` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '角色值', + `status` tinyint(1) NULL DEFAULT 1 COMMENT '状态(1启用;0停用)', + `remark` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '备注', + `order_no` int(0) NULL DEFAULT NULL COMMENT '排序', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_user_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人id', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `update_user_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新人id', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uni_role_value`(`role_value`) USING BTREE COMMENT '角色值唯一' +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统角色表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of pp_oam_role +-- ---------------------------- +INSERT INTO `cp_oam_role` VALUES ('40bfee343c625523fc3763353996c6ef', '超级管理员', 'superAdmin', 1, '超级管理员', 0, '2023-03-21 20:38:30', '1', '2023-03-21 20:38:33', '1'); + +-- ---------------------------- +-- Table structure for pp_oam_role_menu +-- ---------------------------- +DROP TABLE IF EXISTS `cp_oam_role_menu`; +CREATE TABLE `cp_oam_role_menu` ( + `role_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色id', + `menu_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '菜单id', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_user_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人id', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `update_user_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新人id', + PRIMARY KEY (`role_id`, `menu_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统-角色-菜单表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of pp_oam_role_menu +-- ---------------------------- + +-- ---------------------------- +-- Table structure for pp_oam_staff +-- ---------------------------- +DROP TABLE IF EXISTS `cp_oam_staff`; +CREATE TABLE `cp_oam_staff` ( + `id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '姓名', + `dept_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '部门id', + `user_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户id', + `staff_type` int(0) NULL DEFAULT NULL COMMENT '员工类型(0:技术人员;1:售后人员;2:管理人员)', + `role_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '角色id', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_user_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人id', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `update_user_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新人id', + `is_delete` tinyint(1) NULL DEFAULT 0 COMMENT '逻辑删除(0否1是)', + PRIMARY KEY (`id`) USING BTREE, + INDEX `fk_user_id`(`user_id`) USING BTREE, + CONSTRAINT `cp_oam_staff_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `cp_sys_user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '员工表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of pp_oam_staff +-- ---------------------------- + +-- ---------------------------- +-- Table structure for pp_oam_task +-- ---------------------------- +DROP TABLE IF EXISTS `cp_oam_task`; +CREATE TABLE `cp_oam_task` ( + `id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键', + `task_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '任务名', + `task_type` int(0) NULL DEFAULT NULL COMMENT '任务类型(0:迭代;1:需求;2:工单)', + `responsible_staff_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '主要负责员工id', + `task_status` int(0) NULL DEFAULT NULL COMMENT '任务状态(-1:失败;0:待审核;1:待接受;2:进行中;3:已完成;4:逾期;5:暂停;6:逾期完成)', + `task_item` int(0) NULL DEFAULT NULL COMMENT '任务项(0:开发中;1:待测试:2:待部署;3:已归档)', + `task_content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '任务内容', + `task_weight` int(0) NULL DEFAULT NULL COMMENT '任务权重', + `task_rating` int(0) NULL DEFAULT NULL COMMENT '任务评级(0:A;1:B;2:C;3:D;4:E)', + `attachment_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '附件地址', + `remark` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '备注', + `expected_completion_date` date NULL DEFAULT NULL COMMENT '预期完成日期', + `completion_date` date NULL DEFAULT NULL COMMENT '完成日期', + `task_receipt_time` datetime(0) NULL DEFAULT NULL COMMENT '任务接收时间', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_user_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人id', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `update_user_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新人id', + `is_delete` tinyint(1) NULL DEFAULT 0 COMMENT '是否删除(0否1是)', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'OAM-任务表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of pp_oam_task +-- ---------------------------- + +-- ---------------------------- +-- Table structure for pp_oam_task_demand +-- ---------------------------- +DROP TABLE IF EXISTS `cp_oam_task_demand`; +CREATE TABLE `cp_oam_task_demand` ( + `id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键', + `task_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '任务id', + `mechanism_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '商户id', + `brand_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '品牌id', + `campus_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '校区id', + `demand_type` int(0) NULL DEFAULT NULL COMMENT '需求类型(0:轻;1:缓;2:急;3:重)', + `record_staff_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '记录员工id', + `sign_pic` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '签约图片', + `sign_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '签约二维码', + `prepayment` decimal(10, 2) NULL DEFAULT NULL COMMENT '预付款', + `payable` decimal(10, 2) NULL DEFAULT NULL COMMENT '应付款', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_user_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人id', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `update_user_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新人id', + `is_delete` tinyint(1) NULL DEFAULT 0 COMMENT '是否删除(0否1是)', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'OAM-任务-需求表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of pp_oam_task_demand +-- ---------------------------- + +-- ---------------------------- +-- Table structure for pp_oam_task_staff_group +-- ---------------------------- +DROP TABLE IF EXISTS `cp_oam_task_staff_group`; +CREATE TABLE `cp_oam_task_staff_group` ( + `id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键', + `task_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '任务id', + `staff_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '员工id', + `grade_point` int(0) NULL DEFAULT NULL COMMENT '绩点', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_user_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人id', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `update_user_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新人id', + PRIMARY KEY (`id`) USING BTREE, + INDEX `task_staff_key`(`task_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'OAM-任务-关联员工任务组表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of pp_oam_task_staff_group +-- ---------------------------- + +-- ---------------------------- +-- Table structure for pp_oam_task_work_order +-- ---------------------------- +DROP TABLE IF EXISTS `cp_oam_task_work_order`; +CREATE TABLE `cp_oam_task_work_order` ( + `id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键', + `task_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '任务id', + `brand_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '品牌id', + `campus_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '校区id', + `product_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '产品id', + `phone_number` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '问题手机号', + `record_staff_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '记录员工id', + `finish_time` datetime(0) NULL DEFAULT NULL COMMENT '办结时间', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_user_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人id', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `update_user_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新人id', + `is_delete` tinyint(1) NULL DEFAULT 0 COMMENT '是否删除(0否1是)', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '任务-工单表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of pp_oam_task_work_order +-- ---------------------------- + +-- ---------------------------- +-- Table structure for pp_oam_task_work_order_record +-- ---------------------------- +DROP TABLE IF EXISTS `cp_oam_task_work_order_record`; +CREATE TABLE `cp_oam_task_work_order_record` ( + `id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键', + `task_work_order_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '任务工单id', + `record_staff_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '记录员工id', + `record_text` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '记录内容', + `attachment_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '附件地址', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_user_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人id', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `update_user_id` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新人id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '任务-工单-记录表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of pp_oam_task_work_order_record +-- ---------------------------- + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/DeptBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/DeptBo.java new file mode 100644 index 0000000..8043c5d --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/DeptBo.java @@ -0,0 +1,77 @@ +package com.cpop.oam.business.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 部门表Bo + * + * @author DB.lost + * @since 2023-05-10 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "SysDept对象", description = "部门表") +public class DeptBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 部门id + */ + @ApiModelProperty("部门id") + private String id; + + /** + * 父部门id + */ + @ApiModelProperty("父部门id") + private String parentId; + + /** + * 部门名称 + */ + @ApiModelProperty("部门名称") + private String name; + + /** + * 排序 + */ + @ApiModelProperty("排序") + private Integer orderNo; + + /** + * 负责人 + */ + @ApiModelProperty("负责人") + private String leader; + + /** + * 电话 + */ + @ApiModelProperty("电话") + private String phone; + + /** + * 邮箱 + */ + @ApiModelProperty("邮箱") + private String email; + + /** + * 部门状态:1正常,0停用 + */ + @ApiModelProperty("部门状态:1正常,0停用") + private Boolean status; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String remark; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/DeptListBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/DeptListBo.java new file mode 100644 index 0000000..e95615f --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/DeptListBo.java @@ -0,0 +1,33 @@ +package com.cpop.oam.business.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * @author DB + * @Description: + * @create 2023-05-09 20:51 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "SysDeptListBo对象", description = "部门树查询参数对象") +public class DeptListBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 部门名称 + */ + @ApiModelProperty("部门名称") + private String name; + + /** + * 部门状态:0正常,1停用 + */ + @ApiModelProperty("部门状态:0正常,1停用") + private Boolean status; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/DutyBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/DutyBo.java new file mode 100644 index 0000000..411a470 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/DutyBo.java @@ -0,0 +1,59 @@ +package com.cpop.oam.business.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import java.io.Serializable; +import java.util.List; + +/** + * 值班表Bo + * + * @author DB.lost + * @since 2023-05-11 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "Duty对象", description = "值班表") +public class DutyBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + private String id; + + /** + * 服务员工id + */ + @NotBlank(message = "服务员工id不能为空") + @ApiModelProperty(value = "服务员工id",required = true) + private String serviceStaffId; + + /** + * 技术员工id + */ + @NotBlank(message = "技术员工id不能为空") + @ApiModelProperty(value = "技术员工id",required = true) + private String technologyStaffId; + + /** + * 值班日期 + */ + @NotEmpty(message = "值班日期不能为空") + @ApiModelProperty(value = "值班日期",required = true) + private List dutyDate; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String remark; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/DutyListBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/DutyListBo.java new file mode 100644 index 0000000..0291518 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/DutyListBo.java @@ -0,0 +1,29 @@ +package com.cpop.oam.business.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * Description: + * date: 2023/5/11 11:43 + * + * @Author ST + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "Duty对象", description = "值班表") +public class DutyListBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 值班月份 + */ + @ApiModelProperty("值班月份") + private String dutyMoth; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/FinanceReimburseAuditPageBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/FinanceReimburseAuditPageBo.java new file mode 100644 index 0000000..0a1cb2b --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/FinanceReimburseAuditPageBo.java @@ -0,0 +1,37 @@ +package com.cpop.oam.business.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * @author DB + * @createTime 2023/09/20 17:37 + * @description + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "FinanceReimburseAuditPageBo对象", description = "财务报销审核请求参数") +public class FinanceReimburseAuditPageBo implements Serializable { + /** + * 状态:0已提交1审批中2已下发3:下款中;5:驳回 + */ + @ApiModelProperty(value = "状态:0已提交1审批中2已下发3:下款中;4:驳回") + private Integer status; + + /** + * 申请类型 + */ + @ApiModelProperty(value = "申请类型") + private String typeId; + + /** + * 查询 + */ + @ApiModelProperty(value = "查询") + private String query; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/FinanceReimbursePageBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/FinanceReimbursePageBo.java new file mode 100644 index 0000000..1d74e2a --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/FinanceReimbursePageBo.java @@ -0,0 +1,32 @@ +package com.cpop.oam.business.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * @author DB + * @createTime 2023/09/20 16:43 + * @description 财务报销请求参数 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "FinanceReimbursePageBo对象", description = "财务报销请求参数") +public class FinanceReimbursePageBo implements Serializable { + + /** + * 状态:0已提交1审批中2已下发3:下款中;5:驳回 + */ + @ApiModelProperty(value = "状态:0:已提交;1:审批中;2:下款中;3:已下发;4:驳回") + private Integer status; + + /** + * 申请类型 + */ + @ApiModelProperty(value = "申请类型") + private String typeId; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/MenuBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/MenuBo.java new file mode 100644 index 0000000..95e8f6c --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/MenuBo.java @@ -0,0 +1,109 @@ +package com.cpop.oam.business.bo; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + + +/** + * 系统菜单表Bo + * + * @author DB.lost + * @since 2023-05-10 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "SysMenu对象", description = "系统菜单表") +public class MenuBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 菜单ID + */ + @ApiModelProperty("菜单ID") + private String id; + + /** + * 父级菜单ID + */ + @ApiModelProperty("父级菜单ID") + private String parentMenu; + + /** + * 菜单名称 + */ + @ApiModelProperty("菜单名称") + private String name; + + /** + * 菜单图标 + */ + @ApiModelProperty(value = "菜单图标") + private String icon; + + /** + * 菜单路由,父菜单为空 + */ + @ApiModelProperty("菜单路由,父菜单为空") + private String component; + + /** + * 标记菜单的状态 0:禁用 1:启用(根据权限正常显示) + */ + @NotNull(message = "状态不能为空") + @ApiModelProperty(value = "标记菜单的状态 0:禁用 1:启用(根据权限正常显示)", required = true) + private Boolean status; + + /** + * 菜单类型,0:目录,1:菜单,2:按钮 + */ + @NotNull(message = "菜单类型不能为空") + @ApiModelProperty(value = "菜单类型,0:目录,1:菜单,2:按钮", required = true) + private Integer type; + + /** + * 权限 + */ + @ApiModelProperty("权限") + private String permission; + + /** + * 重定向路径,一级菜单有值 + */ + @ApiModelProperty("重定向路径,一级菜单有值") + private String redirect; + + /** + * 排序,值越小越靠前,一级菜单有值 + */ + @NotNull(message = "排序不能为空") + @ApiModelProperty(value = "排序,值越小越靠前,一级菜单有值", required = true) + private Integer orderNo; + + /** + * 路由地址 + */ + @ApiModelProperty(value = "路由地址") + private String path; + + /** + * 标题 + */ + @NotBlank(message = "标题不能为空") + @ApiModelProperty(value = "标题", required = true) + private String title; + + /** + * 隐藏菜单 + */ + @ApiModelProperty("隐藏菜单") + private Boolean hideMenu; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/MenuListBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/MenuListBo.java new file mode 100644 index 0000000..1c01bb1 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/MenuListBo.java @@ -0,0 +1,33 @@ +package com.cpop.oam.business.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * Description: + * date: 2023/4/25 18:01 + * @author ST + */ +@Data +@Accessors(chain = true) +@ApiModel(description = "菜单传入对象") +public class MenuListBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 标题 + */ + @ApiModelProperty(value = "标题") + private String title; + + /** + * 标记菜单的状态 0:禁用 1:启用(根据权限正常显示) + */ + @ApiModelProperty(value = "标记菜单的状态 0:禁用 1:启用(根据权限正常显示)") + private Boolean status; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/ModifyUserPasswordBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/ModifyUserPasswordBo.java new file mode 100644 index 0000000..0946da1 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/ModifyUserPasswordBo.java @@ -0,0 +1,44 @@ +package com.cpop.oam.business.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + * Description: 修改用户密码bo + * date: 2023/5/12 16:01 + * + * @Author ST + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "ModifyUserPasswordBo对象", description = "修改用户密码bo") +public class ModifyUserPasswordBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 用户id + */ + @NotBlank(message = "用户id不能为空") + @ApiModelProperty(value = "用户id",required = true) + private String userId; + + /** + * 旧密码 + */ + @NotBlank(message = "旧密码不能为空") + @ApiModelProperty(value = "旧密码",required = true) + private String oldPassword; + + /** + * 新密码 + */ + @NotBlank(message = "新密码不能为空") + @ApiModelProperty(value = "新密码",required = true) + private String newPassword; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/PauseWorkOrderBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/PauseWorkOrderBo.java new file mode 100644 index 0000000..1b52cf3 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/PauseWorkOrderBo.java @@ -0,0 +1,37 @@ +package com.cpop.oam.business.bo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author: DB + * @Date: 2023/07/12/12:00 + * @Description: + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "PauseWorkOrderBo对象", description = "") +public class PauseWorkOrderBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 工单id + */ + @ApiModelProperty("工单id") + private String taskId; + + /** + * 暂停到时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8") + @ApiModelProperty("暂停到时间") + private LocalDateTime taskReceiptTime; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/PersonTaskPageBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/PersonTaskPageBo.java new file mode 100644 index 0000000..36a5455 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/PersonTaskPageBo.java @@ -0,0 +1,44 @@ +package com.cpop.oam.business.bo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * Description: + * date: 2023/5/15 16:20 + * + * @Author ST + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "Task列表分页查询对象", description = "OAM-任务") +public class PersonTaskPageBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 周一 + */ + @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8") + @ApiModelProperty("周一") + private LocalDate monday; + + /** + * 周末 + */ + @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8") + @ApiModelProperty("周末") + private LocalDate sunday; + + /** + * 任务状态 + */ + @ApiModelProperty("任务状态") + private Integer taskStatus; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/ReimburseApplicationBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/ReimburseApplicationBo.java new file mode 100644 index 0000000..62015a6 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/ReimburseApplicationBo.java @@ -0,0 +1,62 @@ +package com.cpop.oam.business.bo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.cpop.core.annontation.StringArrayConvert; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.math.BigDecimal; +import java.sql.Date; + +/** + * @author DB + * @createTime 2023/09/21 15:50 + * @description 报销申请 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "ReimburseStatusBo", description = "报销申请请求参数") +public class ReimburseApplicationBo implements Serializable { + + /** + * 申请类型 + */ + @NotBlank(message = "申请类型不能为空") + @ApiModelProperty(value = "申请类型",required = true) + private String typeId; + + /** + * 报销日期 + */ + @NotNull(message = "报销日期不能为空") + @ApiModelProperty(value = "报销日期",required = true) + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date reportDate; + + /** + * 申请说明 + */ + @NotBlank(message = "申请说明不能为空") + @ApiModelProperty(value = "申请说明",required = true) + private String remarks; + + /** + * 申请金额 + */ + @NotNull(message = "申请金额不能为空") + @ApiModelProperty(value = "申请金额",required = true) + private BigDecimal price; + + /** + * 附件 + */ + @StringArrayConvert + @ApiModelProperty(value = "附件") + private String attachmentUrl; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/ReimbursePayBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/ReimbursePayBo.java new file mode 100644 index 0000000..12f2ea9 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/ReimbursePayBo.java @@ -0,0 +1,44 @@ +package com.cpop.oam.business.bo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @author DB + * @createTime 2023/09/26 23:35 + * @description + */ +@Data +@ApiModel(value = "报销下款") +public class ReimbursePayBo implements Serializable { + + /** + * 主键 + */ + @NotBlank(message = "主键不能为空") + @ApiModelProperty(value = "主键",required = true) + private String id; + + /** + * 下发金额 + */ + @NotNull(message = "下发金额不能为空") + @ApiModelProperty(value = "下发金额",required = true) + private BigDecimal stageAmount; + + /** + * 下款时间 + */ + @NotNull(message = "下款时间不能为空") + @ApiModelProperty(value = "下款时间",required = true) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + private LocalDateTime paymentTime; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/ReimburseRejectBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/ReimburseRejectBo.java new file mode 100644 index 0000000..a76ea7b --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/ReimburseRejectBo.java @@ -0,0 +1,32 @@ +package com.cpop.oam.business.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + * @author DB + * @createTime 2023/09/26 23:02 + * @description + */ +@Data +@ApiModel(value = "报销驳回") +public class ReimburseRejectBo implements Serializable { + + /** + * 主键 + */ + @NotBlank(message = "主键不能为空") + @ApiModelProperty(value = "主键") + private String id; + + /** + * 驳回原因 + */ + @NotBlank(message = "驳回原因不能为空") + @ApiModelProperty(value = "驳回原因") + private String rejectReason; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/ReimburseStatusBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/ReimburseStatusBo.java new file mode 100644 index 0000000..b5bd554 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/ReimburseStatusBo.java @@ -0,0 +1,28 @@ +package com.cpop.oam.business.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotEmpty; +import java.io.Serializable; +import java.util.List; + +/** + * @author DB + * @createTime 2023/09/20 17:46 + * @description 报销状态bo + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "ReimburseStatusBo", description = "") +public class ReimburseStatusBo implements Serializable { + + /** + * 更新状态ids + */ + @NotEmpty(message = "更新状态ids不能为空") + @ApiModelProperty(value = "更新状态ids", required = true) + private List ids; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/ReimburseTypeBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/ReimburseTypeBo.java new file mode 100644 index 0000000..581032f --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/ReimburseTypeBo.java @@ -0,0 +1,29 @@ +package com.cpop.oam.business.bo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + * @author DB + * @createTime 2023/09/25 11:27 + * @description + */ +@Data +public class ReimburseTypeBo implements Serializable { + + /** + * 主键 + */ + @ApiModelProperty("主键") + private String id; + + /** + * 报销类型 + */ + @NotBlank(message = "报销类型不能为空") + @ApiModelProperty(value = "报销类型",required = true) + private String typeName; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/RoleBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/RoleBo.java new file mode 100644 index 0000000..e33f9ac --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/RoleBo.java @@ -0,0 +1,72 @@ +package com.cpop.oam.business.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.util.List; + +/** + * 系统角色表Bo + * + * @author DB.lost + * @since 2023-05-10 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "SysRole对象", description = "系统角色表") +public class RoleBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + private String id; + + /** + * 角色名称 + */ + @NotBlank(message = "角色名称不能为空") + @ApiModelProperty("角色名称") + private String roleName; + + /** + * 角色值 + */ + @NotBlank(message = "角色值不能为空") + @ApiModelProperty("角色值") + private String roleValue; + + /** + * 状态 + */ + @NotNull(message = "状态不能为空") + @ApiModelProperty("状态") + private Boolean status; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String remark; + + /** + * 排序 + */ + @NotNull(message = "排序不能为空") + @ApiModelProperty("排序") + private Integer orderNo; + + /** + * 菜单集合 + */ + @ApiModelProperty("菜单集合") + private List menuIds; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/RolePageBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/RolePageBo.java new file mode 100644 index 0000000..846420d --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/RolePageBo.java @@ -0,0 +1,34 @@ +package com.cpop.oam.business.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * Description: + * date: 2023/5/9 13:58 + * + * @Author DB + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "SysRole分页对象") +public class RolePageBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 角色名称 + */ + @ApiModelProperty("角色名称") + private String roleName; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean status; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/RoleStatusBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/RoleStatusBo.java new file mode 100644 index 0000000..bfb6810 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/RoleStatusBo.java @@ -0,0 +1,38 @@ +package com.cpop.oam.business.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * Description: + * date: 2023/5/9 14:12 + * + * @Author DB + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "SysRole状态对象", description = "修改角色状态") +public class RoleStatusBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @NotBlank(message = "id不能为空") + @ApiModelProperty(value = "主键",required = true) + private String id; + + /** + * 状态 + */ + @NotNull(message = "状态不能为空") + @ApiModelProperty(value = "状态", required = true) + private Boolean status; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/StaffBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/StaffBo.java new file mode 100644 index 0000000..061483d --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/StaffBo.java @@ -0,0 +1,119 @@ +package com.cpop.oam.business.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 员工表Bo + * + * @author DB.lost + * @since 2023-05-11 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "Staff对象", description = "员工表") +public class StaffBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + private String id; + + /** + * 姓名不能为空 + */ + @NotBlank(message = "姓名不能为空") + @ApiModelProperty("姓名") + private String name; + + /** + * 部门id + */ + @NotBlank(message = "部门不能为空") + @ApiModelProperty(value = "部门id",required = true) + private String deptId; + + /** + * 用户id + */ + @ApiModelProperty("用户id") + private String userId; + + /** + * 员工类型 + */ + @NotNull(message = "员工类型不能为空") + @ApiModelProperty(value = "员工类型(0:技术人员;1:售后人员;2:管理人员)",required = true) + private Integer staffType; + + /** + * 用户名 + */ + @NotBlank(message = "用户名不能为空") + @ApiModelProperty(value = "用户名",required = true) + private String userName; + + /** + * 密码 + */ + @NotBlank(message = "密码不能为空") + @ApiModelProperty(value = "密码",required = true) + private String password; + + /** + * 昵称 + */ + @NotBlank(message = "昵称不能为空") + @ApiModelProperty(value = "昵称",required = true) + private String nickName; + + /** + * 邮箱 + */ + @ApiModelProperty(value = "邮箱") + private String email; + + /** + * 手机号 + */ + @NotBlank(message = "手机号不能为空") + @ApiModelProperty(value = "手机号",required = true) + private String phoneNumber; + + /** + * 性别(0:男;1:女) + */ + @NotNull(message = "性别不能为空") + @ApiModelProperty(value = "性别(0:男;1:女)",required = true) + private Boolean sex; + + /** + * 头像 + */ + @ApiModelProperty(value = "头像") + private String avatar; + + /** + * 状态(0:停用;1:启用) + */ + @NotNull(message = "状态不能为空") + @ApiModelProperty(value = "状态(0:停用;1:启用)",required = true) + private Boolean status; + + /** + * 角色id + */ + @NotBlank(message = "角色id不能为空") + @ApiModelProperty(value = "角色id",required = true) + private String roleId; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/StaffPageBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/StaffPageBo.java new file mode 100644 index 0000000..f2533e0 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/StaffPageBo.java @@ -0,0 +1,40 @@ +package com.cpop.oam.business.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * Description: + * date: 2023/5/11 15:23 + * + * @Author ST + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "系统用户", description = "系统用户(员工)") +public class StaffPageBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 姓名 + */ + @ApiModelProperty("姓名") + private String name; + + /** + * 部门id + */ + @ApiModelProperty("部门id") + private String deptId; + + /** + * 员工类型 + */ + @ApiModelProperty("员工类型") + private Integer staffType; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/SysConfigInfoBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/SysConfigInfoBo.java new file mode 100644 index 0000000..b841718 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/SysConfigInfoBo.java @@ -0,0 +1,36 @@ +package com.cpop.oam.business.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + * @author: DB + * @Date: 2023/07/07/16:53 + * @Description: + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "SysConfigInfoBo对象", description = "系统配置信息") +public class SysConfigInfoBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 任务审核员工手机号 + */ + @NotBlank(message = "任务审核员工手机号不能为空") + @ApiModelProperty(value = "任务审核员工手机号",required = true) + private String auditStaffPhone; + + /** + * 核销管理员工手机号 + */ + @NotBlank(message = "核销管理员工手机号不能为空") + @ApiModelProperty(value = "核销管理员工手机号",required = true) + private String cancelAfterVerificationStaffPhone; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/SysUserLogBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/SysUserLogBo.java new file mode 100644 index 0000000..1f79f14 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/SysUserLogBo.java @@ -0,0 +1,65 @@ +package com.cpop.oam.business.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + * @author: DB + * @date: 2022-10-18 15:04 + * @Description: + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "SysUserLogeBo对象", description = "用户操作日志分页请求参数") +public class SysUserLogBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 操作用户 + */ + @ApiModelProperty("操作用户") + private String operationUserName; + + /** + * 操作终端的IP地址 + */ + @ApiModelProperty("操作终端的IP地址") + private String devIp; + + /** + * 结果 -1:失败 1:成功 + */ + @ApiModelProperty("结果 -1:失败 1:成功") + private Integer result; + + /** + * 日志级别,0-提示,1-一般,2-危险,3-高危 + */ + @ApiModelProperty("日志级别,0-提示,1-一般,2-危险,3-高危") + private Integer level; + + /** + * 行为类别,1-一般行为,2-异常行为 + */ + @ApiModelProperty("行为类别,1-一般行为,2-异常行为") + private Integer actionType; + + /** + * 时间字段 + */ + @ApiModelProperty("时间字段") + private String fieldTime; + + /** + * 用户id + */ + @NotBlank(message = "用户id不能为空") + @ApiModelProperty(value = "用户id",required = true) + private String userId; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskAuditCommentsBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskAuditCommentsBo.java new file mode 100644 index 0000000..1533bdc --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskAuditCommentsBo.java @@ -0,0 +1,59 @@ +package com.cpop.oam.business.bo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.time.LocalDate; + +/** + * Description: + * date: 2023/5/16 17:33 + * + * @Author ST + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "TaskAudit对象", description = "任务审核对象") +public class TaskAuditCommentsBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @NotBlank(message = "主键不能为空") + @ApiModelProperty(value = "主键",required = true) + private String id; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String remark; + + /** + * 预期完成日期 + */ + @ApiModelProperty("预期完成日期") + @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8") + private LocalDate expectedCompletionDate; + + /** + * 任务评级(0:A;1:B;2:C;3:D;4:E) + */ + @ApiModelProperty("任务评级(0:A;1:B;2:C;3:D;4:E)") + private Integer taskRating; + + /** + * 任务状态(-1:驳回;0:待审核;1:待接受;2:进行中;3:已完成;4:逾期;) + */ + @NotNull(message = "任务状态不能为空") + @ApiModelProperty(value = "任务状态(-1:驳回;0:待审核;1:待接受;2:进行中;3:已完成;4:逾期;)",required = true) + private Integer taskStatus; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskBo.java new file mode 100644 index 0000000..8ad5351 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskBo.java @@ -0,0 +1,73 @@ +package com.cpop.oam.business.bo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.time.LocalDate; + +/** + * OAM-任务表Bo + * + * @author DB.lost + * @since 2023-05-15 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "Task对象", description = "OAM-任务表") +public class TaskBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + private String id; + + /** + * 任务名 + */ + @NotBlank(message = "任务名不能为空") + @ApiModelProperty(value = "任务名",required = true) + private String taskName; + + /** + * 任务类型(0:迭代;1:需求;2:投诉) + */ + @NotNull(message = "任务类型不能为空") + @ApiModelProperty(value = "任务类型(0:迭代;1:需求;2:投诉)",required = true) + private Integer taskType; + + /** + * 任务内容 + */ + @NotBlank(message = "任务内容不能为空") + @ApiModelProperty(value = "任务内容",required = true) + private String taskContent; + + /** + * 附件地址 + */ + @ApiModelProperty("附件地址") + private String attachmentUrl; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String remark; + + /** + * 预期完成日期 + */ + @ApiModelProperty("预期完成日期") + @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8") + private LocalDate expectedCompletionDate; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskDemandBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskDemandBo.java new file mode 100644 index 0000000..137bfdd --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskDemandBo.java @@ -0,0 +1,89 @@ +package com.cpop.oam.business.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * OAM-任务-需求表Bo + * + * @author DB.lost + * @since 2023-05-30 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "TaskDemand对象", description = "OAM-任务-需求表") +public class TaskDemandBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + private String id; + + /** + * 需求类型(0:轻;1:缓;2:急;3:重) + */ + @ApiModelProperty("需求类型(0:轻;1:缓;2:急;3:重)") + private Integer demandType; + + /** + * 需求状态(0:待接收;1:处理中;2:已解决) + */ + @ApiModelProperty("需求状态(0:待接收;1:处理中;2:已解决)") + private Integer demandStatus; + + /** + * 任务名 + */ + @NotBlank(message = "任务名不能为空") + @ApiModelProperty("任务名") + private String taskName; + + /** + * 任务类型(0:迭代;1:需求;2:投诉) + */ + @NotNull(message = "任务类型不能为空") + @ApiModelProperty("任务类型(0:迭代;1:需求;2:投诉)") + private Integer taskType; + + /** + * 品牌id + */ + @NotBlank(message = "品牌不能为空") + @ApiModelProperty("品牌id") + private String brandId; + + /** + * 校区id + */ + @NotBlank(message = "校区不能为空") + @ApiModelProperty("校区id") + private String campusId; + + /** + * 任务内容 + */ + @NotBlank(message = "任务内容不能为空") + @ApiModelProperty("任务内容") + private String taskContent; + + /** + * 附件地址 + */ + @ApiModelProperty("附件地址") + private String attachmentUrl; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String remark; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskDemandPageBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskDemandPageBo.java new file mode 100644 index 0000000..c6cc62f --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskDemandPageBo.java @@ -0,0 +1,41 @@ +package com.cpop.oam.business.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * Description: + * date: 2023/5/30 15:44 + * + * @Author ST + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "SysDept对象", description = "部门表") +public class TaskDemandPageBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 任务名 + */ + @ApiModelProperty("任务名") + private String taskName; + + /** + * 校区名 + */ + @ApiModelProperty("校区名") + private String campusName; + + /** + * 任务状态 + */ + @ApiModelProperty("任务状态") + private Integer taskStatus; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskItemBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskItemBo.java new file mode 100644 index 0000000..a49caa0 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskItemBo.java @@ -0,0 +1,38 @@ +package com.cpop.oam.business.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * Description: + * date: 2023/5/29 14:56 + * + * @Author ST + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "Task进度对象", description = "Task进度对象") +public class TaskItemBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @NotBlank(message = "主键不能为空") + @ApiModelProperty(value = "主键",required = true) + private String id; + + /** + * 任务项(0:待开发;1:待测试:2:待部署;3:已归档) + */ + @NotNull(message = "任务项不能为空") + @ApiModelProperty(value = "任务项(0:待开发;1:待测试:2:待部署;3:已归档)",required = true) + private Integer taskItem; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskMonthStatisticsBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskMonthStatisticsBo.java new file mode 100644 index 0000000..39eeb48 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskMonthStatisticsBo.java @@ -0,0 +1,34 @@ +package com.cpop.oam.business.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * Description: + * date: 2023/5/15 16:21 + * + * @Author ST + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "Task列表返回对象", description = "OAM-任务表") +public class TaskMonthStatisticsBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主要负责员工id + */ + @ApiModelProperty("主要负责员工id") + private String responsibleStaffId; + + /** + * 任务月份 + */ + @ApiModelProperty("任务月份") + private String taskMoth; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskPageBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskPageBo.java new file mode 100644 index 0000000..0ca7b45 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskPageBo.java @@ -0,0 +1,34 @@ +package com.cpop.oam.business.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * Description: + * date: 2023/5/16 15:27 + * + * @Author ST + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "Task分页列表对象", description = "OAM-任务管理") +public class TaskPageBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 任务类型(0:迭代;1:需求;2:投诉) + */ + @ApiModelProperty("任务类型(0:迭代;1:需求;2:投诉)") + private Integer taskType; + + /** + * 任务评级(0:A;1:B;2:C;3:D;4:E) + */ + @ApiModelProperty("任务评级(0:A;1:B;2:C;3:D;4:E)") + private Integer taskRating; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskStaffGroupBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskStaffGroupBo.java new file mode 100644 index 0000000..132487b --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskStaffGroupBo.java @@ -0,0 +1,54 @@ +package com.cpop.oam.business.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.Min; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * OAM-任务-关联员工任务组表Bo + * + * @author DB.lost + * @since 2023-05-22 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "TaskStaffGroup对象", description = "OAM-任务-关联员工任务组表") +public class TaskStaffGroupBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + private String id; + + /** + * 任务id + */ + @NotBlank(message = "任务id不能为空") + @ApiModelProperty(value = "任务id", required = true) + private String taskId; + + /** + * 员工id + */ + @NotBlank(message = "员工id不能为空") + @ApiModelProperty(value = "员工id", required = true) + private String staffId; + + /** + * 绩点 + */ + @Min(value = 0) + @NotNull(message = "绩点不能为空") + @ApiModelProperty(value = "绩点", required = true) + private Integer gradePoint; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskStaffGroupListBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskStaffGroupListBo.java new file mode 100644 index 0000000..7a1f4dc --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskStaffGroupListBo.java @@ -0,0 +1,31 @@ +package com.cpop.oam.business.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + * OAM-任务-关联员工任务组表Bo + * + * @author DB.lost + * @since 2023-05-22 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "TaskStaffGroup对象", description = "OAM-任务-关联员工任务组表") +public class TaskStaffGroupListBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @NotBlank(message = "不能为空") + @ApiModelProperty(value = "任务id",required = true) + private String taskId; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskWorkOrderBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskWorkOrderBo.java new file mode 100644 index 0000000..9fa28a7 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskWorkOrderBo.java @@ -0,0 +1,84 @@ +package com.cpop.oam.business.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 任务-工单表Bo + * + * @author DB.lost + * @since 2023-07-10 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "TaskWorkOrder对象", description = "任务-工单表") +public class TaskWorkOrderBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + private String id; + + /** + * 品牌id + */ + @NotBlank(message = "品牌id不能为空") + @ApiModelProperty(value = "品牌id",required = true) + private String brandId; + + /** + * 校区id + */ + @NotBlank(message = "校区id不能为空") + @ApiModelProperty(value = "校区id",required = true) + private String campusId; + + /** + * 工单名 + */ + @NotBlank(message = "工单名不能为空") + @ApiModelProperty(value = "工单名",required = true) + private String taskName; + + /** + * 工单内容 + */ + @NotBlank(message = "工单内容不能为空") + @ApiModelProperty(value = "工单内容",required = true) + private String taskContent; + + /** + * 任务类型(0:迭代;1:需求;2:工单) + */ + @NotNull(message = "任务类型不能为空") + @ApiModelProperty(value = "任务类型(0:迭代;1:需求;2:工单)",required = true) + private Integer taskType; + + /** + * 问题手机号 + */ + @ApiModelProperty("问题手机号") + private String phoneNumber; + + /** + * 附件地址 + */ + @ApiModelProperty("附件地址") + private String attachmentUrl; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String remark; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskWorkOrderPageBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskWorkOrderPageBo.java new file mode 100644 index 0000000..4df78ad --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskWorkOrderPageBo.java @@ -0,0 +1,40 @@ +package com.cpop.oam.business.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.List; + +/** + * @author: DB + * @Date: 2023/07/10/14:14 + * @Description: + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "TaskWorkOrder对象", description = "任务-工单表") +public class TaskWorkOrderPageBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 校区id + */ + @ApiModelProperty("校区id") + private String campusName; + + /** + * 任务名 + */ + @ApiModelProperty("任务名") + private String taskName; + + /** + * 任务状态 + */ + @ApiModelProperty("任务状态") + private List taskStatus; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskWorkOrderRecordBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskWorkOrderRecordBo.java new file mode 100644 index 0000000..008fe26 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TaskWorkOrderRecordBo.java @@ -0,0 +1,44 @@ +package com.cpop.oam.business.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + * 任务-工单-记录表Bo + * + * @author DB.lost + * @since 2023-07-10 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "TaskWorkOrderRecord对象", description = "任务-工单-记录表") +public class TaskWorkOrderRecordBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 任务工单id + */ + @NotBlank(message = "任务工单id不能为空") + @ApiModelProperty("任务工单id") + private String taskWorkOrderId; + + /** + * 记录内容 + */ + @NotBlank(message = "记录内容不能为空") + @ApiModelProperty("记录内容") + private String recordText; + + /** + * 附件地址 + */ + @ApiModelProperty("附件地址") + private String attachmentUrl; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TransferTaskBo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TransferTaskBo.java new file mode 100644 index 0000000..a63a105 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/bo/TransferTaskBo.java @@ -0,0 +1,44 @@ +package com.cpop.oam.business.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + * Description: + * date: 2023/5/29 16:00 + * + * @Author ST + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "Task转交对象", description = "Task转交对象") +public class TransferTaskBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @NotBlank(message = "主键不能为空") + @ApiModelProperty(value = "主键",required = true) + private String id; + + /** + * 原负责人 + */ + @NotBlank(message = "原负责人不能为空") + @ApiModelProperty(value = "原负责人",required = true) + private String responsibleStaffId; + + /** + * 新负责人 + */ + @NotBlank(message = "新负责人不能为空") + @ApiModelProperty(value = "新负责人",required = true) + private String newResponsibleStaffId; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/DeptController.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/DeptController.java new file mode 100644 index 0000000..2aeffa7 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/DeptController.java @@ -0,0 +1,95 @@ +package com.cpop.oam.business.controller; + +import com.cpop.oam.business.service.DeptService; +import com.cpop.oam.business.vo.DeptVo; +import com.cpop.core.annontation.OperationLog; +import com.cpop.core.base.R; +import com.cpop.core.base.enums.OperationLogEnum; +import com.cpop.oam.business.bo.DeptBo; +import com.cpop.oam.business.bo.DeptListBo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 部门表 控制层。 + * + * @author DB + * @since 2023-09-08 + */ +@RestController +@Api(tags = "系统部门模块") +@RequestMapping("/dept") +public class DeptController { + + @Autowired + private DeptService deptService; + + /** + * @Description: 查询部门树列表 + * @param bo 请求参数 + * @return R> + * @Author DB + * @Date: 2023/5/9 20:45 + */ + @PreAuthorize("@aps.hasPermission('system:dept:list')") + @ApiOperation("查询部门树列表") + @GetMapping("/getDeptTreeList") + public R> getDeptTreeList(DeptListBo bo) { + List list = deptService.getDeptTreeList(bo); + return R.ok(list); + } + + /** + * @Description: 新增部门 + * @param bo 请求参数 + * @return R + * @Author DB + * @Date: 2023/5/9 20:47 + */ + @PreAuthorize("@aps.hasPermission('system:dept:insert')") + @OperationLog(operationLogEnumType = OperationLogEnum.INSERT_OAM_DEPT) + @ApiOperation("新增部门") + @PostMapping("/insertDept") + public R insertDept(@Validated @RequestBody DeptBo bo) { + deptService.insertDept(bo); + return R.ok(); + } + + /** + * @Description: 修改部门 + * @param bo 请求参数 + * @return R + * @Author DB + * @Date: 2023/5/9 20:47 + */ + @PreAuthorize("@aps.hasPermission('system:dept:update')") + @OperationLog(operationLogEnumType = OperationLogEnum.UPDATE_OAM_DEPT) + @ApiOperation("修改部门") + @PutMapping("/updateDept") + public R updateDept(@Validated @RequestBody DeptBo bo) { + deptService.updateDept(bo); + return R.ok(); + } + + /** + * @Description: 删除部门 + * @param id 主键 + * @Author DB + * @Date: 2023/5/9 20:48 + */ + @PreAuthorize("@aps.hasPermission('system:dept:remove')") + @OperationLog(operationLogEnumType = OperationLogEnum.REMOVE_OAM_DEPT) + @ApiOperation("删除部门") + @DeleteMapping("/removeDept/{id}") + public R removeDept(@PathVariable String id) { + deptService.removeDept(id); + return R.ok(); + } + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/DutyController.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/DutyController.java new file mode 100644 index 0000000..cf33d70 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/DutyController.java @@ -0,0 +1,111 @@ +package com.cpop.oam.business.controller; + +import com.cpop.core.annontation.OperationLog; +import com.cpop.core.base.R; +import com.cpop.core.base.enums.OperationLogEnum; +import com.cpop.oam.business.bo.DutyBo; +import com.cpop.oam.business.bo.DutyListBo; +import com.cpop.oam.business.service.DutyService; +import com.cpop.oam.business.service.StaffService; +import com.cpop.oam.business.vo.DutyListVo; +import com.cpop.oam.business.vo.StaffVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 值班表 控制层。 + * + * @author DB + * @since 2023-09-14 + */ +@RestController +@Api(tags = "值班日历模块") +@RequestMapping("/duty") +public class DutyController { + + @Autowired + private DutyService dutyService; + + @Autowired + private StaffService staffService; + + /** + * @Description: 查询值班列表(当月) + * @param bo 请求参数 + * @return: R> + * @Author: DB + * @Date: 2023/5/11 16:39 + **/ + @PreAuthorize("@aps.hasPermission('dutyCalendar:duty:list')") + @ApiOperation("查询值班列表(当月)") + @GetMapping("/getDutyList") + public R> getDutyList(DutyListBo bo) { + List list = dutyService.getDutyList(bo); + return R.ok(list); + } + + /** + * @Description: 新增值班 + * @param bo 请求参数 + * @return: R + * @Author: DB + * @Date: 2023/5/18 9:50 + **/ + @OperationLog(operationLogEnumType = OperationLogEnum.INSERT_OAM_DUTY) + @PreAuthorize("@aps.hasPermission('dutyCalendar:duty:insert')") + @ApiOperation("新增值班") + @PostMapping("/insertDuty") + public R insertDuty(@RequestBody @Validated DutyBo bo) { + dutyService.insertDuty(bo); + return R.ok(); + } + + /** + * @descriptions 删除值班信息 + * @author DB + * @date 2023/09/14 18:16 + * @param dutyDate 值班日期 + * @return com.pupu.core.base.R + */ + @OperationLog(operationLogEnumType = OperationLogEnum.REMOVE_OAM_DUTY) + @PreAuthorize("@aps.hasPermission('dutyCalendar:duty:remove')") + @ApiOperation("删除值班信息") + @DeleteMapping("/removeDutyByDate/{dutyDate}") + public R removeDutyByDate(@PathVariable String dutyDate) { + dutyService.removeDutyByDate(dutyDate); + return R.ok(); + } + + /** + * @Description: 查询服务员工列表 + * @return: R> + * @Author: DB + * @Date: 2023/5/11 17:49 + **/ + @ApiOperation("查询服务员工列表") + @GetMapping("/getServiceStaffList") + public R> getServiceStaffList() { + List list = staffService.getServiceStaffList(); + return R.ok(list); + } + + /** + * @Description: 查询技术员工列表 + * @return: R> + * @Author: DB + * @Date: 2023/5/11 17:50 + **/ + @ApiOperation("查询技术员工列表") + @GetMapping("/getTechnologyStaffList") + public R> getTechnologyStaffList() { + List list = staffService.getTechnologyStaffList(); + return R.ok(list); + } + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/FinanceReimburseController.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/FinanceReimburseController.java new file mode 100644 index 0000000..f2de540 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/FinanceReimburseController.java @@ -0,0 +1,245 @@ +package com.cpop.oam.business.controller; + +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.query.QueryWrapper; +import com.cpop.common.utils.bean.BeanUtils; +import com.cpop.core.annontation.OperationLog; +import com.cpop.core.base.R; +import com.cpop.core.base.enums.OperationLogEnum; +import com.cpop.oam.business.bo.*; +import com.cpop.oam.business.entity.FinanceReimburseType; +import com.cpop.oam.business.service.FinanceReimburseService; +import com.cpop.oam.business.service.FinanceReimburseStageService; +import com.cpop.oam.business.service.FinanceReimburseTypeService; +import com.cpop.oam.business.vo.*; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +import static com.cpop.oam.business.entity.table.FinanceReimburseStageTableDef.FINANCE_REIMBURSE_STAGE; +import static com.cpop.oam.business.entity.table.FinanceReimburseTableDef.FINANCE_REIMBURSE; + +/** + * 报销记录表 控制层。 + * + * @author DB + * @since 2023-09-20 + */ +@RestController +@Api(tags = "财务报销模块") +@RequestMapping("/financeReimburse") +public class FinanceReimburseController { + + @Autowired + private FinanceReimburseService financeReimburseService; + + @Autowired + private FinanceReimburseTypeService financeReimburseTypeService; + + @Autowired + private FinanceReimburseStageService financeReimburseStageService; + + /** + * @Description: 财务报销模块-报销分页列表 + * @param bo 请求参数 + * @return: R> + * @Author: DB + * @Date: 2023/5/30 15:44 + **/ + @PreAuthorize("@aps.hasPermission('financial:application:list')") + @ApiOperation("财务报销模块-报销申请分页列表") + @GetMapping("/getFinanceReimbursePage") + public R> getFinanceReimbursePage(FinanceReimbursePageBo bo) { + Page pageVo = financeReimburseService.getFinanceReimbursePage(bo); + return R.ok(pageVo); + } + + /** + * @Description: 财务报销模块-报销类型列表 + * @return: R> + * @Author: DB + * @Date: 2023/5/30 15:44 + **/ + @ApiOperation("财务报销模块-报销类型列表") + @GetMapping("/getFinanceReimburseTypeList") + public R> getFinanceReimburseTypeList() { + List list = financeReimburseTypeService.listAs(QueryWrapper.create(), FinanceReimburseTypeListVo.class); + return R.ok(list); + } + + /** + * @descriptions 新增报销申请 + * @author DB + * @date 2023/09/21 15:55 + * @param bo 请求参数 + * @return com.pupu.core.base.R + */ + @ApiOperation("新增报销申请") + @PostMapping("/insertReimburseApplication") + public R insertReimburseApplication(@RequestBody @Validated ReimburseApplicationBo bo) { + financeReimburseService.insertReimburseApplication(bo); + return R.ok(); + } + + /** + * @Description: 财务报销模块-报销审核分页列表 + * @param bo 请求参数 + * @return: R> + * @Author: DB + * @Date: 2023/5/30 15:44 + **/ + @PreAuthorize("@aps.hasPermission('financial:reimburseAudit:list')") + @ApiOperation("财务报销模块-报销审核分页列表") + @GetMapping("/getReimburseAuditPage") + public R> getReimburseAuditPage(FinanceReimburseAuditPageBo bo) { + Page pageVo = financeReimburseService.getReimburseAuditPage(bo); + return R.ok(pageVo); + } + + /** + * @Description: 修改报销状态 + * @param bo 请求参数 + * @Author: DB + * @Date: 2023/5/10 16:01 + **/ + @PreAuthorize("@aps.hasPermission('financial:reimburseAudit:update')") + @ApiOperation("修改报销状态") + @PutMapping("/updateReimburseStatus") + public R updateReimburseStatus(@RequestBody @Validated ReimburseStatusBo bo) { + financeReimburseService.updateReimburseStatus(bo); + return R.ok(); + } + + /** + * @descriptions 新增报销类型 + * @author DB + * @date 2023/09/21 15:55 + * @param bo 请求参数 + * @return com.pupu.core.base.R + */ + @OperationLog(operationLogEnumType = OperationLogEnum.INSERT_REIMBURSE_TYPE) + @PreAuthorize("@aps.hasPermission('financial:reimburseAudit:insert')") + @ApiOperation("新增报销类型") + @PostMapping("/insertReimburseType") + public R insertReimburseApplication(@RequestBody @Validated ReimburseTypeBo bo) { + financeReimburseTypeService.save(BeanUtils.mapToClass(bo, FinanceReimburseType.class)); + return R.ok(); + } + + /** + * @descriptions 修改报销类型 + * @author DB + * @date 2023/09/08 15:20 + * @param bo 请求参数 + * @return com.jambox.core.base.R + */ + @PreAuthorize("@aps.hasPermission('financial:reimburseAudit:update')") + @OperationLog(operationLogEnumType= OperationLogEnum.UPDATE_REIMBURSE_TYPE) + @ApiOperation("修改报销类型") + @PutMapping("/updateReimburseType") + public R updateReimburseType(@RequestBody @Validated ReimburseTypeBo bo) { + financeReimburseTypeService.updateById(BeanUtils.mapToClass(bo, FinanceReimburseType.class)); + return R.ok(); + } + + /** + * @descriptions 删除报销类型 + * @author DB + * @date 2023/09/12 16:57 + * @param id 主键 + * @return com.jambox.core.base.R + */ + @PreAuthorize("@aps.hasPermission('financial:reimburseAudit:remove')") + @OperationLog(operationLogEnumType= OperationLogEnum.REMOVE_REIMBURSE_TYPE) + @ApiOperation("删除报销类型") + @DeleteMapping("/removeReimburseTypeById/{id}") + public R removeReimburseTypeById(@PathVariable String id) { + financeReimburseTypeService.removeById(id); + return R.ok(); + } + + /** + * @Description: 财务报销模块-个人报销统计 + * @return: R> + * @Author: DB + * @Date: 2023/5/30 15:44 + **/ + @PreAuthorize("@aps.hasPermission('financial:application:list')") + @ApiOperation("财务报销模块-个人报销统计") + @GetMapping("/getPersonStatistic") + public R getPersonStatistic() { + return R.ok(financeReimburseService.getPersonStatistic()); + } + + /** + * @Description: 审核员工申请报销 + * @Author: DB + * @Date: 2023/5/10 16:01 + **/ + @OperationLog(operationLogEnumType= OperationLogEnum.AUDIT_STAFF_APPLICATION) + @PreAuthorize("@aps.hasPermission('financial:reimburseAudit:update')") + @ApiOperation("审核员工申请报销") + @PutMapping("/auditReimburseApplication/{id}") + public R auditReimburseApplication(@PathVariable String id) { + financeReimburseService.updateChain().set(FINANCE_REIMBURSE.STATUS, 1).where(FINANCE_REIMBURSE.ID.eq(id)).update(); + return R.ok(); + } + + /** + * @descriptions 报销驳回 + * @author DB + * @date 2023/09/08 15:20 + * @param bo 请求参数 + * @return com.jambox.core.base.R + */ + @PreAuthorize("@aps.hasPermission('financial:reimburseAudit:update')") + @OperationLog(operationLogEnumType= OperationLogEnum.REIMBURSE_REJECT) + @ApiOperation("报销驳回") + @PutMapping("/reimburseReject") + public R reimburseReject(@RequestBody @Validated ReimburseRejectBo bo) { + financeReimburseService.updateChain() + .set(FINANCE_REIMBURSE.STATUS,4) + .set(FINANCE_REIMBURSE.REJECT_REASON,bo.getRejectReason()) + .where(FINANCE_REIMBURSE.ID.eq(bo.getId())) + .update(); + return R.ok(); + } + + /** + * @descriptions 报销下款 + * @author DB + * @date 2023/09/08 15:20 + * @param bo 请求参数 + * @return com.jambox.core.base.R + */ + @PreAuthorize("@aps.hasPermission('financial:reimburseAudit:update')") + @OperationLog(operationLogEnumType= OperationLogEnum.REIMBURSE_PAY) + @ApiOperation("报销下款") + @PutMapping("/reimbursePay") + public R reimbursePay(@RequestBody @Validated ReimbursePayBo bo) { + financeReimburseService.reimbursePay(bo); + return R.ok(); + } + + /** + * @Description: 财务报销模块-报销分页列表 + * @param id 报销主键 + * @return: R> + * @Author: DB + * @Date: 2023/5/30 15:44 + **/ + @PreAuthorize("@aps.hasPermission('financial:application:list')") + @ApiOperation("财务报销模块-报销详情记录列表") + @GetMapping("/getReimburseRecordList/{id}") + public R> getReimburseRecordList(@PathVariable String id) { + List list = financeReimburseStageService.listAs(QueryWrapper.create() + .where(FINANCE_REIMBURSE_STAGE.FINANCE_REIMBURSE_ID.eq(id)) + , FinanceReimburseRecordListVo.class); + return R.ok(list); + } +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/LoginController.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/LoginController.java new file mode 100644 index 0000000..2c9e423 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/LoginController.java @@ -0,0 +1,64 @@ +package com.cpop.oam.business.controller; + +import com.cpop.core.base.R; +import com.cpop.oam.business.service.LoginService; +import com.cpop.oam.business.vo.LoginUserInfoVo; +import com.cpop.oam.business.vo.MenuRouteVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @author DB + * @createTime 2023/09/10 11:13 + * @description 系统登陆 + */ +@Api(tags = "系统登录模块") +@RestController +public class LoginController { + + @Autowired + private LoginService loginService; + + /** + * @author LOST.yuan + * @Description 获取登录用户详情 + * @date 14:52 2022/9/7 + * @return {@link R< LoginUserInfoVo >} + **/ + @GetMapping("/getUserInfo") + @ApiOperation("获取登录用户详情") + public R getUserInfo() { + return R.ok(loginService.getUserInfo()); + } + + /** + * @author LOST.yuan + * @Description 获取权限码 + * @date 14:52 2022/9/7 + * @return {@link List} + **/ + @ApiOperation("获取权限码") + @GetMapping("/getPermCode") + public R> getPermCode(){ + List list = loginService.getPermCode(); + return R.ok(list); + } + + /** + * @author LOST.yuan + * @Description 获取菜单列表 + * @date 14:52 2022/9/7 + * @return {@link R>} + **/ + @ApiOperation("获取菜单列表") + @GetMapping("/getMenuList") + public R> getMenuList(){ + List list = loginService.getOamMenuList(); + return R.ok(list); + } +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/MenuController.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/MenuController.java new file mode 100644 index 0000000..0cac858 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/MenuController.java @@ -0,0 +1,107 @@ +package com.cpop.oam.business.controller; + +import com.cpop.core.annontation.OperationLog; +import com.cpop.core.base.R; +import com.cpop.core.base.enums.OperationLogEnum; +import com.cpop.oam.business.bo.MenuBo; +import com.cpop.oam.business.bo.MenuListBo; +import com.cpop.oam.business.service.MenuService; +import com.cpop.oam.business.vo.MenuVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 系统菜单模块接口 + * + * @author DB + * @since 2023-09-07 + */ +@RestController +@Api(tags = "系统菜单模块") +@RequestMapping("/menu") +public class MenuController { + + @Autowired + private MenuService menuService; + + /** + * @descriptions 获取系统菜单树列表 + * @author DB + * @date 2023/09/07 15:48 + * @param bo 请求参数 + * @return com.jambox.core.base.R> + */ + @PreAuthorize("@aps.hasPermission('*:*:*')") + @ApiOperation("获取OAM菜单树列表") + @GetMapping("/getOamMenuTreeList") + public R> getOamMenuTreeList(MenuListBo bo) { + List list = menuService.getOamMenuTreeList(bo); + return R.ok(list); + } + + /** + * @descriptions 获取目录与菜单树 + * @author DB + * @date 2023/09/07 17:41 + * @return com.jambox.core.base.R> + */ + @ApiOperation("获取目录与菜单树") + @GetMapping("/getDirectoryAndMenuTreeList") + public R> getDirectoryAndMenuTreeList() { + List list = menuService.getDirectoryAndMenuTreeList(); + return R.ok(list); + } + + /** + * @descriptions 新增系统菜单 + * @author DB + * @date 2023/09/07 17:45 + * @param bo 请求参数 + * @return com.jambox.core.base.R + */ + @PreAuthorize("@aps.hasPermission('*:*:*')") + @OperationLog(operationLogEnumType = OperationLogEnum.INSERT_OAM_MENU) + @ApiOperation("新增OAM菜单") + @PostMapping("/insertOamMenu") + public R insertOamMenu(@RequestBody @Validated MenuBo bo) { + menuService.insertOamMenu(bo); + return R.ok(); + } + + /** + * @Description: 修改系统菜单表 + * @param bo 请求参数 + * @Author: DB + * @Date: 2023/5/10 16:01 + **/ + @PreAuthorize("@aps.hasPermission('*:*:*')") + @OperationLog(operationLogEnumType = OperationLogEnum.UPDATE_OAM_MENU) + @ApiOperation("修改OAM菜单") + @PutMapping("/updateOamMenu") + public R updateOamMenu(@RequestBody @Validated MenuBo bo) { + menuService.updateOamMenu(bo); + return R.ok(); + } + + /** + * @Description: 删除系统菜单表 + * @param id 主键id + * @Author: DB + * @Date: 2023/5/10 16:01 + **/ + @PreAuthorize("@aps.hasPermission('*:*:*')") + @OperationLog(operationLogEnumType = OperationLogEnum.REMOVE_OAM_MENU) + @ApiOperation("删除OAM菜单") + @DeleteMapping("/removeOamMenu/{id}") + public R removeOamMenu(@PathVariable String id) { + menuService.removeOamMenu(id); + return R.ok(); + } + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/RoleController.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/RoleController.java new file mode 100644 index 0000000..b20904b --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/RoleController.java @@ -0,0 +1,126 @@ +package com.cpop.oam.business.controller; + +import com.mybatisflex.core.paginate.Page; +import com.cpop.core.annontation.OperationLog; +import com.cpop.core.base.R; +import com.cpop.core.base.enums.OperationLogEnum; +import com.cpop.oam.business.bo.MenuListBo; +import com.cpop.oam.business.bo.RoleBo; +import com.cpop.oam.business.bo.RolePageBo; +import com.cpop.oam.business.bo.RoleStatusBo; +import com.cpop.oam.business.service.MenuService; +import com.cpop.oam.business.service.RoleService; +import com.cpop.oam.business.vo.MenuVo; +import com.cpop.oam.business.vo.RolePageVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 系统角色表 控制层。 + * + * @author DB + * @since 2023-09-08 + */ +@RestController +@Api(tags = "系统角色模块") +@RequestMapping("/role") +public class RoleController { + + @Autowired + private RoleService roleService; + + @Autowired + private MenuService menuService; + + /** + * @descriptions 查询系统角色分页列表 + * @author DB + * @date 2023/09/10 16:51 + * @param bo 请求参数 + * @return R> + */ + @PreAuthorize("@aps.hasPermission('system:role:list')") + @ApiOperation("查询系统角色分页列表") + @GetMapping("/getRolePageList") + public R> getOamRolePageList(RolePageBo bo) { + Page pageVo = roleService.selectOamRolePageList(bo); + return R.ok(pageVo); + } + + /** + * 新增系统角色表 + */ + @PreAuthorize("@aps.hasPermission('system:role:insert')") + @OperationLog(operationLogEnumType = OperationLogEnum.INSERT_OAM_ROLE) + @ApiOperation("新增角色") + @PostMapping("/insertRole") + public R insertSysRole(@RequestBody @Validated RoleBo bo) { + roleService.insertOamRole(bo); + return R.ok(); + } + + /** + * @Description: 获取系统菜单树列表 + * @param bo 请求参数 + * @return: R> + * @Author: DB + * @Date: 2023/5/10 14:39 + **/ + @PreAuthorize("@aps.hasPermission('system:role:insert')") + @ApiOperation("获取菜单树列表") + @GetMapping("/getMenuTreeList") + public R> getMenuTreeList(MenuListBo bo) { + List list = menuService.getOamMenuTreeList(bo); + return R.ok(list); + } + + /** + * @descriptions 修改角色 + * @author DB + * @date 2023/09/10 17:45 + * @param bo 请求参数 + * @return com.jambox.core.base.R + */ + @PreAuthorize("@aps.hasPermission('system:role:update')") + @OperationLog(operationLogEnumType = OperationLogEnum.UPDATE_OAM_ROLE) + @ApiOperation("修改角色") + @PutMapping("/updateRole") + public R updateRole(@RequestBody @Validated RoleBo bo) { + roleService.updateOamRole(bo); + return R.ok(); + } + + /** + * 删除系统角色表 + */ + @PreAuthorize("@aps.hasPermission('system:role:remove')") + @OperationLog(operationLogEnumType = OperationLogEnum.REMOVE_OAM_ROLE) + @ApiOperation("删除系统角色表") + @DeleteMapping("/removeRole/{id}") + public R removeRole(@PathVariable String id) { + roleService.removeOamRole(id); + return R.ok(); + } + + /** + * @Description: 设置角色状态 + * @param bo 请求参数 + * @return: R + * @Author: DB + * @Date: 2023/5/9 14:13 + **/ + @PreAuthorize("@aps.hasPermission('system:role:update')") + @OperationLog(operationLogEnumType = OperationLogEnum.UPDATE_OAM_ROLE) + @ApiOperation("设置角色状态") + @PutMapping("/setRoleStatus") + public R setOamRoleStatus(@RequestBody @Validated RoleStatusBo bo) { + roleService.setOamRoleStatus(bo); + return R.ok(); + } +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/StaffController.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/StaffController.java new file mode 100644 index 0000000..4ec50d5 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/StaffController.java @@ -0,0 +1,193 @@ +package com.cpop.oam.business.controller; + +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.query.QueryWrapper; +import com.cpop.common.constant.Constants; +import com.cpop.core.annontation.OperationLog; +import com.cpop.core.base.R; +import com.cpop.core.base.enums.OperationLogEnum; +import com.cpop.core.utils.SpringUtils; +import com.cpop.oam.business.bo.*; +import com.cpop.oam.business.service.DeptService; +import com.cpop.oam.business.service.RoleService; +import com.cpop.oam.business.service.StaffService; +import com.cpop.oam.business.vo.*; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +import static com.cpop.oam.business.entity.table.RoleTableDef.ROLE; + +/** + * 员工表 控制层。 + * + * @author DB + * @since 2023-09-07 + */ +@RestController +@Api(tags = "员工账号管理模块") +@RequestMapping("/staff") +public class StaffController { + + @Autowired + private StaffService staffService; + + @Autowired + private DeptService deptService; + + /** + * @descriptions 查询员工分页列表 + * @author DB + * @date 2023/09/07 18:07 + * @param bo 请求参数 + * @return R> + */ + @PreAuthorize("@aps.hasPermission('system:account:list')") + @ApiOperation("查询员工分页列表") + @GetMapping("/getStaffPageList") + public R> getStaffPageList(StaffPageBo bo) { + Page pageVo = staffService.getStaffPageList(bo); + return R.ok(pageVo); + } + + /** + * @descriptions 新增员工 + * @author DB + * @date 2023/09/08 14:04 + * @param bo 请求参数 + * @return com.jambox.core.base.R + */ + @PreAuthorize("@aps.hasPermission('system:account:insert')") + @OperationLog(operationLogEnumType= OperationLogEnum.INSERT_OAM_STAFF) + @ApiOperation("新增员工") + @PostMapping("/insertStaff") + public R insertStaff(@RequestBody @Validated StaffBo bo) { + staffService.insertStaff(bo); + return R.ok(); + } + + /** + * @descriptions 修改员工 + * @author DB + * @date 2023/09/08 15:20 + * @param bo 请求参数 + * @return com.jambox.core.base.R + */ + @PreAuthorize("@aps.hasPermission('system:account:update')") + @OperationLog(operationLogEnumType= OperationLogEnum.UPDATE_OAM_STAFF) + @ApiOperation("修改员工") + @PutMapping("/updateStaff") + public R updateStaff(@RequestBody @Validated StaffBo bo) { + staffService.updateStaff(bo); + return R.ok(); + } + + /** + * @descriptions 删除员工 + * @author DB + * @date 2023/09/12 16:57 + * @param id 主键 + * @return com.jambox.core.base.R + */ + @PreAuthorize("@aps.hasPermission('system:account:remove')") + @OperationLog(operationLogEnumType= OperationLogEnum.REMOVE_OAM_STAFF) + @ApiOperation("删除员工") + @DeleteMapping("/removeStaffById/{id}") + public R removeStaffById(@PathVariable String id) { + staffService.removeStaffById(id); + return R.ok(); + } + + /** + * @descriptions 查询部门树列表 + * @author DB + * @date 2023/09/08 18:19 + * @param bo 请求参数 + * @return com.jambox.core.base.R> + */ + @ApiOperation("查询部门树列表") + @GetMapping("/getDeptTreeList") + public R> getDeptTreeList(DeptListBo bo) { + List list = deptService.getDeptTreeList(bo); + return R.ok(list); + } + /** + * 获取所有角色信息 + */ + @ApiOperation("获取所有角色信息") + @GetMapping("/getAllRoleList") + public R> getAllSysRoleList() { + List list = SpringUtils.getBean(RoleService.class).listAs(QueryWrapper.create() + .where(ROLE.STATUS.eq(true)) + .and(ROLE.ROLE_VALUE.ne(Constants.SUPER_ADMIN_VALUE)) + .orderBy(ROLE.ORDER_NO.asc()) + , RoleVo.class); + return R.ok(list); + } + + /** + * @Description: 用户名是否存在 + * @param username 用户名 + * @param id 主键 + * @return: R + * @Author: DB + * @Date: 2023/5/11 10:09 + **/ + @ApiOperation("用户名是否存在") + @GetMapping("/isAccountExist") + public R isAccountExist(String username, String id) { + staffService.isAccountExist(username, id); + return R.ok(); + } + + /** + * @Description: 获取员工信息 + * @param id + * @return: R + * @Author: DB + * @Date: 2023/5/17 10:33 + **/ + @PreAuthorize("@aps.hasPermission('system:account:info')") + @ApiOperation("获取员工信息") + @GetMapping("/getStaffInfo/{id}") + public R getStaffInfo(@PathVariable String id) { + StaffInfoVo staffInfo = staffService.getStaffInfo(id); + return R.ok(staffInfo); + } + + /** + * @Description: 获取用户操作日志分页 + * @param bo 请求参数 + * @return: R> + * @Author: DB + * @Date: 2023/5/12 14:30 + **/ + @PreAuthorize("@aps.hasPermission('system:account:list')") + @ApiOperation("获取用户操作日志分页") + @GetMapping("/getUserLogList") + public R> getUserLogList(@Validated SysUserLogBo bo) { + Page list = staffService.getUserLogList(bo); + return R.ok(list); + } + + /** + * @Description: 修改系统用户密码 + * @param bo 请求参数 + * @return: AjaxResult + * @Author: DB + * @Date: 2023/5/12 16:00 + **/ + @PreAuthorize("@aps.hasPermission('system:account:update')") + @OperationLog(operationLogEnumType= OperationLogEnum.MODIFY_OAM_STAFF_PASSWORD) + @ApiOperation("修改系统用户密码") + @PutMapping("/modifyUserPassword") + public R modifyUserPassword(@Validated @RequestBody ModifyUserPasswordBo bo) { + staffService.modifyUserPassword(bo); + return R.ok(); + } +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/SysCommonController.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/SysCommonController.java new file mode 100644 index 0000000..708a752 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/SysCommonController.java @@ -0,0 +1,57 @@ +package com.cpop.oam.business.controller; + +import com.cpop.core.base.R; +import com.cpop.core.config.CpopConfig; +import com.cpop.core.config.ServerConfig; +import com.cpop.core.utils.file.FileUploadUtils; +import com.cpop.core.utils.file.FileUtils; +import com.cpop.oam.business.vo.SysFileVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +/** + * @author DB + * @createTime 2023/09/13 15:10 + * @description 通用接口 + */ +@Slf4j +@Api(tags = "通用接口") +@RestController +@RequestMapping("/sysCommon") +public class SysCommonController { + + @Autowired + private ServerConfig serverConfig; + + @Autowired + private CpopConfig cpopConfig; + + /** + * 通用上传请求(单个) + */ + @ApiOperation("通用上传请求(单个)") + @PostMapping("/upload") + public R uploadFile(MultipartFile file) { + try { + // 上传文件路径 + String filePath = cpopConfig.getUploadPath(); + // 上传并返回新文件名称 + String fileName = FileUploadUtils.getInstance().upload(filePath, file); + String url = serverConfig.getUrl() + fileName; + SysFileVo sysFileVo = new SysFileVo(); + sysFileVo.setUrl(url) + .setFileName(fileName) + .setNewFileName(FileUtils.getInstance().getName(fileName)) + .setOriginalFilename(file.getOriginalFilename()); + return R.ok(sysFileVo); + } catch (Exception e) { + return R.fail(e.getMessage()); + } + } +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/SysConfigController.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/SysConfigController.java new file mode 100644 index 0000000..6a0a7ed --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/SysConfigController.java @@ -0,0 +1,52 @@ +package com.cpop.oam.business.controller; + +import com.cpop.core.base.R; +import com.cpop.oam.business.bo.SysConfigInfoBo; +import com.cpop.oam.business.service.CommonService; +import com.cpop.oam.business.vo.ConfigInfoVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * @author DB + * @createTime 2023/09/13 12:00 + * @description + */ +@Api(tags = "系统配置模块") +@RestController +@RequestMapping("/sysConfig") +public class SysConfigController { + + @Autowired + private CommonService commonService; + + /** + * @Description: 获取系统配置信息 + * @return R + * @author DB + * @Date: 2023/7/7 0007 16:27 + */ + @ApiOperation("获取系统配置信息") + @GetMapping("/getSysConfigInfo") + public R getSysConfigInfo() { + ConfigInfoVo vo = commonService.getSysConfigInfo(); + return R.ok(vo); + } + + /** + * @param bo 请求参数 + * @Description: 设置系统配置信息 + * @return: R + * @Author: DB + * @Date: 2023/5/11 15:48 + **/ + @ApiOperation("设置系统配置信息") + @PutMapping("/setSysConfigInfo") + public R setSysConfigInfo(@RequestBody @Validated SysConfigInfoBo bo) { + commonService.setSysConfigInfo(bo); + return R.ok(); + } +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/TaskController.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/TaskController.java new file mode 100644 index 0000000..39a5eba --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/TaskController.java @@ -0,0 +1,292 @@ +package com.cpop.oam.business.controller; + +import com.mybatisflex.core.paginate.Page; +import com.cpop.core.annontation.OperationLog; +import com.cpop.core.base.R; +import com.cpop.core.base.enums.OperationLogEnum; +import com.cpop.oam.business.bo.*; +import com.cpop.oam.business.service.StaffService; +import com.cpop.oam.business.service.TaskService; +import com.cpop.oam.business.service.TaskStaffGroupService; +import com.cpop.oam.business.vo.*; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * OAM-任务表 控制层。 + * + * @author DB + * @since 2023-09-15 + */ +@RestController +@Api(tags = "任务管理模块") +@RequestMapping("/task") +public class TaskController { + + @Autowired + private TaskService taskService; + + @Autowired + private TaskStaffGroupService taskStaffGroupService; + + @Autowired + private StaffService staffService; + + /** + * @Description: 查询OAM-任务分页列表 + * @param bo 请求参数 + * @return: R> + * @Author: DB + * @Date: 2023/5/16 15:24 + **/ + @PreAuthorize("@aps.hasPermission('oamTask:task:list')") + @ApiOperation("任务分页列表") + @GetMapping("/getTaskPage") + public R> getTaskPage(TaskPageBo bo) { + Page list = taskService.getTaskPage(bo); + return R.ok(list); + } + + /** + * @Description: OAM-新增迭代任务 + * @param bo 请求参数 + * @return: R + * @Author: DB + * @Date: 2023/5/16 15:58 + **/ + @PreAuthorize("@aps.hasPermission('oamTask:task:insert')") + @OperationLog(operationLogEnumType = OperationLogEnum.INSERT_ITERATION_TASK) + @ApiOperation("新增迭代任务") + @PostMapping("/insertIterationTask") + public R insertIterationTask(@RequestBody @Validated TaskBo bo) { + taskService.insertTask(bo); + return R.ok(); + } + + /** + * @Description: 查询OAM-任务审核分页列表 + * @return: R> + * @Author: DB + * @Date: 2023/5/16 15:24 + **/ + @PreAuthorize("@aps.hasPermission('oamTask:taskAudit:list')") + @ApiOperation("任务审核分页列表") + @GetMapping("/getTaskAuditPage") + public R> getTaskAuditPage() { + Page list = taskService.getTaskAuditPage(); + return R.ok(list); + } + + /** + * @Description: 设置任务审核意见 + * @param bo 请求参数 + * @return: R + * @Author: DB + * @Date: 2023/5/16 17:36 + **/ + @PreAuthorize("@aps.hasPermission('oamTask:taskAudit:update')") + @OperationLog(operationLogEnumType = OperationLogEnum.SET_TASK_AUDIT_COMMENTS) + @ApiOperation("设置任务审核意见") + @PutMapping("/setTaskAuditComments") + public R setTaskAuditComments(@RequestBody TaskAuditCommentsBo bo) { + taskService.setTaskAuditComments(bo); + return R.ok(); + } + + /** + * @Description: 查询OAM-任务审核驳回列表 + * @return: R> + * @Author: DB + * @Date: 2023/5/16 15:24 + **/ + @PreAuthorize("@aps.hasPermission('oamTask:taskAudit:list')") + @ApiOperation("任务审核驳回列表") + @GetMapping("/getTaskRejectPage") + public R> getTaskRejectPage() { + Page list = taskService.getTaskRejectPage(); + return R.ok(list); + } + + /** + * @Description: 技术人员领取任务 + * @param id 任务主键 + * @return: R + * @Author: DB + * @Date: 2023/5/16 17:10 + **/ + @PreAuthorize("@aps.hasPermission('oamTask:task:update')") + @OperationLog(operationLogEnumType = OperationLogEnum.CLAIM_TASK) + @ApiOperation("技术人员领取任务") + @PutMapping("/claimTask/{id}") + public R claimTask(@PathVariable String id) { + taskService.claimTask(id); + return R.ok(); + } + + /** + * @Description: 删除任务 + * @param id 主键 + * @return: R + * @Author: DB + * @Date: 2023/5/19 18:03 + **/ + @PreAuthorize("@aps.hasPermission('oamTask:task:remove')") + @OperationLog(operationLogEnumType = OperationLogEnum.REMOVE_TASK) + @ApiOperation("删除任务") + @DeleteMapping("/removeTask/{id}") + public R removeTask(@PathVariable String id) { + taskService.removeById(id); + return R.ok(); + } + + /** + * @Description: 查询OAM-个人任务分页列表 + * @return: R> + * @Author: DB + * @Date: 2023/5/16 15:24 + **/ + @PreAuthorize("@aps.hasPermission('oamTask:task:list')") + @ApiOperation("个人任务分页列表") + @GetMapping("/getPersonTaskPage") + public R> getPersonTaskPage(PersonTaskPageBo bo) { + Page list = taskService.getPersonTaskPage(bo); + return R.ok(list); + } + + /** + * @Description: 查询OAM-任务成员组列表 + * @return: R> + * @Author: DB + * @Date: 2023/5/16 15:24 + **/ + @ApiOperation("任务成员组列表") + @GetMapping("/getTaskStaffGroupList") + public R> getTaskStaffGroupList(@Validated TaskStaffGroupListBo bo) { + List list = taskStaffGroupService.getTaskStaffGroupList(bo); + return R.ok(list); + } + + /** + * @Description: 查询技术员工列表 + * @return: R> + * @Author: DB + * @Date: 2023/5/11 17:50 + **/ + @ApiOperation("查询技术员工列表") + @GetMapping("/getTechnologyStaffList") + public R> getTechnologyStaffList() { + List list = staffService.getTechnologyStaffList(); + return R.ok(list); + } + + /** + * @Description: 新增任务员工组 + * @param bo 请求参数 + * @return: R + * @Author: DB + * @Date: 2023/5/16 15:58 + **/ + @OperationLog(operationLogEnumType = OperationLogEnum.INSERT_TASK_STAFF_GROUP) + @ApiOperation("新增任务小组成员") + @PostMapping("/insertTaskStaffGroup") + public R insertTaskStaffGroup(@RequestBody @Validated TaskStaffGroupBo bo) { + taskStaffGroupService.insertTaskStaffGroup(bo); + return R.ok(); + } + + /** + * @Description: 修改员工任务绩点 + * @param bo 请求参数 + * @return: R + * @Author: DB + * @Date: 2023/5/29 11:48 + **/ + @OperationLog(operationLogEnumType = OperationLogEnum.UPDATE_STAFF_GRADE_POINT) + @ApiOperation("修改员工任务绩点") + @PutMapping("/updateStaffGradePoint") + public R updateStaffGradePoint(@RequestBody @Validated TaskStaffGroupBo bo) { + taskStaffGroupService.updateStaffGradePoint(bo); + return R.ok(); + } + + /** + * @Description: 删除成员组 + * @param id 主键 + * @return: R + * @Author: DB + * @Date: 2023/5/29 14:18 + **/ + @OperationLog(operationLogEnumType = OperationLogEnum.REMOVE_TASK_STAFF_GROUP) + @ApiOperation("删除成员组") + @DeleteMapping("/removeTaskStaffGroup/{id}") + public R removeTaskStaffGroup(@PathVariable String id) { + taskStaffGroupService.removeTaskStaffGroupById(id); + return R.ok(); + } + + /** + * @Description: 修改任务进度 + * @param bo 请求参数 + * @return: R + * @Author: DB + * @Date: 2023/5/29 14:58 + **/ + @OperationLog(operationLogEnumType = OperationLogEnum.UPDATE_TASK_ITEM) + @ApiOperation("修改任务进度") + @PutMapping("/updateTaskItem") + public R updateTaskItem(@RequestBody @Validated TaskItemBo bo) { + taskService.updateTaskItem(bo); + return R.ok(); + } + + /** + * @Description: 修改任务负责人 + * @param bo 请求参数 + * @return: R + * @Author: DB + * @Date: 2023/5/29 14:58 + **/ + @OperationLog(operationLogEnumType = OperationLogEnum.UPDATE_TASK_RESPONSIBLE_STAFF) + @ApiOperation("修改任务负责人") + @PutMapping("/updateTaskResponsibleStaff") + public R updateTaskResponsibleStaff(@RequestBody @Validated TransferTaskBo bo) { + taskService.updateTaskResponsibleStaff(bo); + return R.ok(); + } + + /** + * @Description: 完成任务 + * @param id 主键 + * @return: R + * @Author: DB + * @Date: 2023/5/31 16:24 + **/ + @PreAuthorize("@aps.hasPermission('oamTask:task:update')") + @OperationLog(operationLogEnumType = OperationLogEnum.FINISH_TASK) + @ApiOperation("完成任务") + @PutMapping("/finishTask/{id}") + public R finishTask(@PathVariable String id) { + taskService.finishTask(id); + return R.ok(); + } + + /** + * @Description: 获取月度任务统计列表 + * @param bo 请求参数 + * @return: R> + * @Author: DB + * @Date: 2023/5/15 16:42 + **/ + @ApiOperation("获取月度任务统计列表") + @GetMapping("/getTaskMonthStatistics") + public R getTaskMonthStatistics(TaskMonthStatisticsBo bo) { + return R.ok(taskService.getTaskMonthStatistics(bo)); + } + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/TaskDemandController.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/TaskDemandController.java new file mode 100644 index 0000000..d7ccc21 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/TaskDemandController.java @@ -0,0 +1,63 @@ +package com.cpop.oam.business.controller; + +import com.mybatisflex.core.paginate.Page; +import com.cpop.core.annontation.OperationLog; +import com.cpop.core.base.R; +import com.cpop.core.base.enums.OperationLogEnum; +import com.cpop.oam.business.bo.TaskDemandBo; +import com.cpop.oam.business.bo.TaskDemandPageBo; +import com.cpop.oam.business.service.TaskDemandService; +import com.cpop.oam.business.vo.TaskDemandPageVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * OAM-任务-需求表 控制层。 + * + * @author DB + * @since 2023-09-18 + */ +@RestController +@Api(tags = "任务管理模块-需求任务") +@RequestMapping("/taskDemand") +public class TaskDemandController { + + @Autowired + private TaskDemandService taskDemandService; + + /** + * @Description: 任务管理-需求管理分页列表 + * @param bo 请求参数 + * @return: R> + * @Author: DB + * @Date: 2023/5/30 15:44 + **/ + @PreAuthorize("@aps.hasPermission('oamTask:taskDemand:list')") + @ApiOperation("任务管理模块-需求任务分页列表") + @GetMapping("/getTaskDemandPage") + public R> getTaskDemandPage(TaskDemandPageBo bo) { + Page pageVo = taskDemandService.getTaskDemandPage(bo); + return R.ok(pageVo); + } + + /** + * @Description: 任务管理-需求管理-新增需求任务 + * @param bo 请求参数 + * @return: R + * @Author: DB + * @Date: 2023/5/30 16:53 + **/ + @OperationLog(operationLogEnumType = OperationLogEnum.INSERT_DEMAND_TASK) + @PreAuthorize("@aps.hasPermission('oamTask:taskDemand:insert')") + @ApiOperation("任务管理模块-新增需求任务") + @PostMapping("/insertDemandTask") + public R insertDemandTask(@RequestBody @Validated TaskDemandBo bo) { + taskDemandService.insertTaskDemand(bo); + return R.ok(); + } + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/TaskWorkOrderController.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/TaskWorkOrderController.java new file mode 100644 index 0000000..078f17d --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/TaskWorkOrderController.java @@ -0,0 +1,128 @@ +package com.cpop.oam.business.controller; + +import com.mybatisflex.core.paginate.Page; +import com.cpop.core.annontation.OperationLog; +import com.cpop.core.base.R; +import com.cpop.core.base.enums.OperationLogEnum; +import com.cpop.oam.business.bo.PauseWorkOrderBo; +import com.cpop.oam.business.bo.TaskWorkOrderBo; +import com.cpop.oam.business.bo.TaskWorkOrderPageBo; +import com.cpop.oam.business.bo.TaskWorkOrderRecordBo; +import com.cpop.oam.business.service.TaskWorkOrderService; +import com.cpop.oam.business.vo.TaskWorkOrderPageVo; +import com.cpop.oam.business.vo.TaskWorkOrderRecordListVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 任务-工单表 控制层。 + * + * @author DB + * @since 2023-09-18 + */ +@RestController +@Api(tags = "任务管理模块-工单管理") +@RequestMapping("/taskWorkOrder") +public class TaskWorkOrderController { + + @Autowired + private TaskWorkOrderService taskWorkOrderService; + + /** + * @Description: 任务管理-工单管理-新增工单 + * @param bo 请求参数 + * @return: R + * @Author: DB + * @Date: 2023/5/30 16:53 + **/ + @OperationLog(operationLogEnumType = OperationLogEnum.INSERT_WORK_ORDER) + @PreAuthorize("@aps.hasPermission('oamTask:workOrder:insert')") + @ApiOperation("任务管理模块-工单管理-新增工单") + @PostMapping("/insertWorkOrder") + public R insertWorkOrder(@RequestBody @Validated TaskWorkOrderBo bo) { + taskWorkOrderService.insertWorkOrder(bo); + return R.ok(); + } + + /** + * @descriptions 查询任务-工单-记录表列表 + * @author DB + * @date 2023/09/18 17:18 + * @param bo 请求参数 + * @return com.cpop.core.base.R> + */ + @ApiOperation("任务管理模块-工单-分页列表") + @PostMapping("/getWorkOrderPage") + public R> getWorkOrderPage(@RequestBody TaskWorkOrderPageBo bo) { + Page pageVo = taskWorkOrderService.getWorkOrderPage(bo); + return R.ok(pageVo); + } + + /** + * @descriptions 查询任务-工单记录-列表 + * @author DB + * @date 2023/09/18 17:19 + * @param workRecordId 工单记录id + * @return com.cpop.core.base.R> + */ + @ApiOperation("任务管理模块-工单记录") + @GetMapping("/getWorkOrderRecordList/{workRecordId}") + public R> getWorkOrderRecordList(@PathVariable String workRecordId) { + List list = taskWorkOrderService.getWorkOrderRecordList(workRecordId); + return R.ok(list); + } + + /** + * @Description: 任务管理-工单管理-新增工单记录 + * @param bo 请求参数 + * @return: R + * @Author: DB + * @Date: 2023/5/30 16:53 + **/ + @OperationLog(operationLogEnumType = OperationLogEnum.INSERT_WORK_ORDER_RECORD) + @ApiOperation("任务管理模块-工单管理-新增工单记录") + @PostMapping("/insertWorkOrderRecord") + public R insertWorkOrderRecord(@RequestBody @Validated TaskWorkOrderRecordBo bo) { + taskWorkOrderService.insertWorkOrderRecord(bo); + return R.ok(); + } + + /** + * @Description: 工单办结 + * @param id 主键 + * @return: R + * @Author: DB + * @Date: 2023/5/16 17:10 + **/ + @PreAuthorize("@aps.hasPermission('oamTask:workOrder:update')") + @OperationLog(operationLogEnumType = OperationLogEnum.CONCLUDE_WORK_ORDER) + @ApiOperation("工单办结") + @PutMapping("/concludeWorkOrder/{id}") + public R concludeWorkOrder(@PathVariable String id) { + taskWorkOrderService.concludeWorkOrder(id); + return R.ok(); + } + + /** + * @Description: 工单暂停 + * @param bo 请求参数 + * @return: R + * @Author: DB + * @Date: 2023/5/16 17:10 + **/ + @PreAuthorize("@aps.hasPermission('oamTask:workOrder:update')") + @OperationLog(operationLogEnumType = OperationLogEnum.PAUSE_WORK_ORDER) + @ApiOperation("工单暂停") + @PutMapping("/pauseWorkOrder") + public R pauseWorkOrder(@RequestBody PauseWorkOrderBo bo) { + taskWorkOrderService.pauseWorkOrder(bo); + return R.ok(); + } + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/dto/TaskWorkOrderRecordDto.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/dto/TaskWorkOrderRecordDto.java new file mode 100644 index 0000000..fbddc18 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/dto/TaskWorkOrderRecordDto.java @@ -0,0 +1,50 @@ +package com.cpop.oam.business.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 任务-工单-记录表Dto + * + * @author DB.lost + * @since 2023-07-10 + */ +@Data +@Accessors(chain = true) +public class TaskWorkOrderRecordDto implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 任务工单id + */ + private String taskWorkOrderId; + + /** + * 记录员工id + */ + private String recordStaffId; + + /** + * 记录内容 + */ + private String recordText; + + /** + * 附件地址 + */ + private String attachmentUrl; + + /** + * 记录员工手机号 + */ + private String recordStaffPhone; + + /** + * 负责员工手机号 + */ + private String responsibleStaffPhone; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/Dept.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/Dept.java new file mode 100644 index 0000000..0570f99 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/Dept.java @@ -0,0 +1,81 @@ +package com.cpop.oam.business.entity; + +import com.mybatisflex.annotation.Column; +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.Table; +import com.cpop.core.base.entity.BaseEntity; +import com.cpop.core.base.entity.BaseInsertListener; +import com.cpop.core.base.entity.BaseUpdateListener; +import lombok.*; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 部门表 实体类。 + * + * @author DB + * @since 2023-09-08 + */ +@Data +@EqualsAndHashCode(callSuper=false) +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +@Table(value = "cp_oam_dept", onInsert = BaseInsertListener.class, onUpdate = BaseUpdateListener.class, mapperGenerateEnable = false) +public class Dept extends BaseEntity implements Serializable { + + /** + * 部门id + */ + @Id + private String id; + + /** + * 父部门id + */ + private String parentId; + + /** + * 部门名称 + */ + private String name; + + /** + * 排序 + */ + private Integer orderNo; + + /** + * 负责人 + */ + private String leader; + + /** + * 电话 + */ + private String phone; + + /** + * 邮箱 + */ + private String email; + + /** + * 部门状态:1正常,0停用 + */ + private Boolean status; + + /** + * 备注 + */ + private String remark; + + /** + * 逻辑删除(0否1是) + */ + @Column(isLogicDelete = true) + private Boolean isDelete; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/Duty.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/Duty.java new file mode 100644 index 0000000..e5e0e9a --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/Duty.java @@ -0,0 +1,55 @@ +package com.cpop.oam.business.entity; + +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.Table; +import com.cpop.core.base.entity.BaseEntity; +import com.cpop.core.base.entity.BaseInsertListener; +import com.cpop.core.base.entity.BaseUpdateListener; +import lombok.*; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.sql.Date; + +/** + * 值班表 实体类。 + * + * @author DB + * @since 2023-09-14 + */ +@Data +@EqualsAndHashCode(callSuper=false) +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +@Table(value = "cp_oam_duty", onInsert = BaseInsertListener.class, onUpdate = BaseUpdateListener.class, mapperGenerateEnable = false) +public class Duty extends BaseEntity implements Serializable { + + /** + * 主键 + */ + @Id + private String id; + + /** + * 服务员工id + */ + private String serviceStaffId; + + /** + * 技术员工id + */ + private String technologyStaffId; + + /** + * 值班日期 + */ + private Date dutyDate; + + /** + * 备注 + */ + private String remark; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/FinanceReimburse.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/FinanceReimburse.java new file mode 100644 index 0000000..831c0fe --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/FinanceReimburse.java @@ -0,0 +1,80 @@ +package com.cpop.oam.business.entity; + +import com.mybatisflex.annotation.Column; +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.Table; +import com.cpop.core.base.entity.BaseEntity; +import com.cpop.core.base.entity.BaseInsertListener; +import com.cpop.core.base.entity.BaseUpdateListener; +import lombok.*; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.sql.Date; + +/** + * 报销记录表 实体类。 + * + * @author DB + * @since 2023-09-20 + */ +@Data +@EqualsAndHashCode(callSuper=false) +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +@Table(value = "cp_oam_finance_reimburse", onInsert = BaseInsertListener.class, onUpdate = BaseUpdateListener.class, mapperGenerateEnable = false) +public class FinanceReimburse extends BaseEntity implements Serializable { + + @Id + private String id; + + /** + * 提交人 + */ + private String staffId; + + /** + * 状态:0:已提交;1:审批中;2:下款中;3:已下发;4:驳回 + */ + private Integer status; + + /** + * 申请类型 + */ + private String typeId; + + /** + * 报销日期 + */ + private Date reportDate; + + /** + * 申请说明 + */ + private String remarks; + + /** + * 申请金额 + */ + private BigDecimal price; + + /** + * 附件 + */ + private String attachmentUrl; + + /** + * 驳回原因 + */ + private String rejectReason; + + /** + * 逻辑删除 + */ + @Column(isLogicDelete = true) + private Boolean isDelete; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/FinanceReimburseStage.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/FinanceReimburseStage.java new file mode 100644 index 0000000..144df50 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/FinanceReimburseStage.java @@ -0,0 +1,60 @@ +package com.cpop.oam.business.entity; + +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.Table; +import com.cpop.core.base.entity.BaseEntity; +import com.cpop.core.base.entity.BaseInsertListener; +import com.cpop.core.base.entity.BaseUpdateListener; +import lombok.*; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 报销阶段表 实体类。 + * + * @author DB + * @since 2023-09-26 + */ +@Data +@EqualsAndHashCode(callSuper=false) +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +@Table(value = "cp_oam_finance_reimburse_stage", onInsert = BaseInsertListener.class, onUpdate = BaseUpdateListener.class, mapperGenerateEnable = false) +public class FinanceReimburseStage extends BaseEntity implements Serializable { + + /** + * 主键 + */ + @Id + private String id; + + /** + * 报销记录id + */ + private String financeReimburseId; + + /** + * 阶段金额 + */ + private BigDecimal stageAmount; + + /** + * 下发时间 + */ + private LocalDateTime paymentTime; + + + + + + /** + * 逻辑删除(1否0是) + */ + private Boolean deleted; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/FinanceReimburseType.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/FinanceReimburseType.java new file mode 100644 index 0000000..5f52f1f --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/FinanceReimburseType.java @@ -0,0 +1,39 @@ +package com.cpop.oam.business.entity; + +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.Table; +import com.cpop.core.base.entity.BaseEntity; +import com.cpop.core.base.entity.BaseInsertListener; +import com.cpop.core.base.entity.BaseUpdateListener; +import lombok.*; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 报销类型表 实体类。 + * + * @author DB + * @since 2023-09-20 + */ +@Data +@EqualsAndHashCode(callSuper=false) +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +@Table(value = "cp_oam_finance_reimburse_type", onInsert = BaseInsertListener.class, onUpdate = BaseUpdateListener.class, mapperGenerateEnable = false) +public class FinanceReimburseType extends BaseEntity implements Serializable { + + /** + * 主键 + */ + @Id + private String id; + + /** + * 报销类型 + */ + private String typeName; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/Menu.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/Menu.java new file mode 100644 index 0000000..20dce9f --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/Menu.java @@ -0,0 +1,94 @@ +package com.cpop.oam.business.entity; + +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.Table; +import com.cpop.core.base.entity.BaseEntity; +import com.cpop.core.base.entity.BaseInsertListener; +import com.cpop.core.base.entity.BaseUpdateListener; +import lombok.*; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 系统菜单表 实体类。 + * + * @author DB + * @since 2023-09-07 + */ +@Data +@EqualsAndHashCode(callSuper=false) +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +@Table(value = "cp_oam_menu", onInsert = BaseInsertListener.class, onUpdate = BaseUpdateListener.class, mapperGenerateEnable = false) +public class Menu extends BaseEntity implements Serializable { + + /** + * 菜单ID + */ + @Id + private String id; + + /** + * 父级菜单ID + */ + private String parentMenu; + + /** + * 菜单名称 + */ + private String name; + + /** + * 菜单图标 + */ + private String icon; + + /** + * 菜单路由,父菜单为空 + */ + private String component; + + /** + * 标记菜单的状态 0:禁用 1:正常(根据权限正常显示) + */ + private Boolean status; + + /** + * 菜单类型,0:目录,1:菜单,2:按钮 + */ + private Integer type; + + /** + * 权限 + */ + private String permission; + + /** + * 重定向路径,一级菜单有值 + */ + private String redirect; + + /** + * 排序,值越小越靠前,一级菜单有值 + */ + private Integer orderNo; + + /** + * 路由地址 + */ + private String path; + + /** + * 标题 + */ + private String title; + + /** + * 隐藏菜单 + */ + private Boolean hideMenu; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/Role.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/Role.java new file mode 100644 index 0000000..abf9e8a --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/Role.java @@ -0,0 +1,63 @@ +package com.cpop.oam.business.entity; + +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.Table; +import com.cpop.core.base.entity.BaseEntity; +import com.cpop.core.base.entity.BaseInsertListener; +import com.cpop.core.base.entity.BaseUpdateListener; +import lombok.*; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 系统角色表 实体类。 + * + * @author DB + * @since 2023-09-08 + */ +@Data +@EqualsAndHashCode(callSuper=false) +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +@Table(value = "cp_oam_role", onInsert = BaseInsertListener.class, onUpdate = BaseUpdateListener.class, mapperGenerateEnable = false) +public class Role extends BaseEntity implements Serializable { + + /** + * 主键 + */ + @Id + private String id; + + /** + * 角色名称 + */ + private String roleName; + + /** + * 角色值 + */ + private String roleValue; + + /** + * 状态 + */ + private Boolean status; + + /** + * 备注 + */ + private String remark; + + /** + * 排序 + */ + private Integer orderNo; + + + + + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/RoleMenu.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/RoleMenu.java new file mode 100644 index 0000000..ab65ab6 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/RoleMenu.java @@ -0,0 +1,37 @@ +package com.cpop.oam.business.entity; + +import com.mybatisflex.annotation.Table; +import com.cpop.core.base.entity.BaseEntity; +import com.cpop.core.base.entity.BaseInsertListener; +import com.cpop.core.base.entity.BaseUpdateListener; +import lombok.*; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 系统-角色-菜单表 实体类。 + * + * @author DB + * @since 2023-09-10 + */ +@Data +@EqualsAndHashCode(callSuper=false) +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +@Table(value = "cp_oam_role_menu", onInsert = BaseInsertListener.class, onUpdate = BaseUpdateListener.class, mapperGenerateEnable = false) +public class RoleMenu extends BaseEntity implements Serializable { + + /** + * 角色id + */ + private String roleId; + + /** + * 菜单id + */ + private String menuId; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/Staff.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/Staff.java new file mode 100644 index 0000000..eccba09 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/Staff.java @@ -0,0 +1,66 @@ +package com.cpop.oam.business.entity; + +import com.mybatisflex.annotation.Column; +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.Table; +import com.cpop.core.base.entity.BaseEntity; +import com.cpop.core.base.entity.BaseInsertListener; +import com.cpop.core.base.entity.BaseUpdateListener; +import lombok.*; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 员工表 实体类。 + * + * @author DB + * @since 2023-09-07 + */ +@Data +@EqualsAndHashCode(callSuper=false) +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +@Table(value = "cp_oam_staff", onInsert = BaseInsertListener.class, onUpdate = BaseUpdateListener.class, mapperGenerateEnable = false) +public class Staff extends BaseEntity implements Serializable { + + /** + * 主键 + */ + @Id + private String id; + + /** + * 姓名 + */ + private String name; + + /** + * 部门id + */ + private String deptId; + + /** + * 用户id + */ + private String userId; + + /** + * 员工类型(0:技术人员;1:售后人员;2:管理人员) + */ + private Integer staffType; + + /** + * 角色id + */ + private String roleId; + + /** + * 逻辑删除(0否1是) + */ + @Column(isLogicDelete = true) + private Boolean isDelete; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/Task.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/Task.java new file mode 100644 index 0000000..4b12c82 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/Task.java @@ -0,0 +1,108 @@ +package com.cpop.oam.business.entity; + +import com.mybatisflex.annotation.Column; +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.Table; +import com.cpop.core.base.entity.BaseEntity; +import com.cpop.core.base.entity.BaseInsertListener; +import com.cpop.core.base.entity.BaseUpdateListener; +import lombok.*; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.sql.Date; +import java.time.LocalDateTime; + +/** + * OAM-任务表 实体类。 + * + * @author DB + * @since 2023-09-15 + */ +@Data +@EqualsAndHashCode(callSuper=false) +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +@Table(value = "cp_oam_task", onInsert = BaseInsertListener.class, onUpdate = BaseUpdateListener.class, mapperGenerateEnable = false) +public class Task extends BaseEntity implements Serializable { + + /** + * 主键 + */ + @Id + private String id; + + /** + * 任务名 + */ + private String taskName; + + /** + * 任务类型(0:迭代;1:需求;2:工单) + */ + private Integer taskType; + + /** + * 主要负责员工id + */ + private String responsibleStaffId; + + /** + * 任务状态(-1:失败;0:待审核;1:待接受;2:进行中;3:已完成;4:逾期;5:暂停;6:逾期完成) + */ + private Integer taskStatus; + + /** + * 任务项(0:开发中;1:待测试:2:待部署;3:已归档) + */ + private Integer taskItem; + + /** + * 任务内容 + */ + private String taskContent; + + /** + * 任务权重 + */ + private Integer taskWeight; + + /** + * 任务评级(0:A;1:B;2:C;3:D;4:E) + */ + private Integer taskRating; + + /** + * 附件地址 + */ + private String attachmentUrl; + + /** + * 备注 + */ + private String remark; + + /** + * 预期完成日期 + */ + private Date expectedCompletionDate; + + /** + * 完成日期 + */ + private Date completionDate; + + /** + * 任务接收时间 + */ + private LocalDateTime taskReceiptTime; + + /** + * 是否删除(0否1是) + */ + @Column(isLogicDelete = true) + private Boolean isDelete; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/TaskDemand.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/TaskDemand.java new file mode 100644 index 0000000..cfc89ba --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/TaskDemand.java @@ -0,0 +1,96 @@ +package com.cpop.oam.business.entity; + +import com.mybatisflex.annotation.Column; +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.Table; +import com.cpop.core.base.entity.BaseEntity; +import com.cpop.core.base.entity.BaseInsertListener; +import com.cpop.core.base.entity.BaseUpdateListener; +import lombok.*; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * OAM-任务-需求表 实体类。 + * + * @author DB + * @since 2023-09-18 + */ +@Data +@EqualsAndHashCode(callSuper=false) +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +@Table(value = "cp_oam_task_demand", onInsert = BaseInsertListener.class, onUpdate = BaseUpdateListener.class, mapperGenerateEnable = false) +public class TaskDemand extends BaseEntity implements Serializable { + + /** + * 主键 + */ + @Id + private String id; + + /** + * 任务id + */ + private String taskId; + + /** + * 商户id + */ + private String mechanismId; + + /** + * 品牌id + */ + private String brandId; + + /** + * 校区id + */ + private String campusId; + + /** + * 需求类型(0:轻;1:缓;2:急;3:重) + */ + private Integer demandType; + + /** + * 记录员工id + */ + private String recordStaffId; + + /** + * 签约图片 + */ + private String signPic; + + /** + * 签约二维码 + */ + private String signUrl; + + /** + * 预付款 + */ + private BigDecimal prepayment; + + /** + * 应付款 + */ + private BigDecimal payable; + + + + + + /** + * 是否删除(0否1是) + */ + @Column(isLogicDelete = true) + private Boolean isDelete; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/TaskStaffGroup.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/TaskStaffGroup.java new file mode 100644 index 0000000..1b32ec2 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/TaskStaffGroup.java @@ -0,0 +1,49 @@ +package com.cpop.oam.business.entity; + +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.Table; +import com.cpop.core.base.entity.BaseEntity; +import com.cpop.core.base.entity.BaseInsertListener; +import com.cpop.core.base.entity.BaseUpdateListener; +import lombok.*; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * OAM-任务-关联员工任务组表 实体类。 + * + * @author DB + * @since 2023-09-18 + */ +@Data +@EqualsAndHashCode(callSuper=false) +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +@Table(value = "cp_oam_task_staff_group", onInsert = BaseInsertListener.class, onUpdate = BaseUpdateListener.class, mapperGenerateEnable = false) +public class TaskStaffGroup extends BaseEntity implements Serializable { + + /** + * 主键 + */ + @Id + private String id; + + /** + * 任务id + */ + private String taskId; + + /** + * 员工id + */ + private String staffId; + + /** + * 绩点 + */ + private Integer gradePoint; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/TaskWorkOrder.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/TaskWorkOrder.java new file mode 100644 index 0000000..248ce83 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/TaskWorkOrder.java @@ -0,0 +1,81 @@ +package com.cpop.oam.business.entity; + +import com.mybatisflex.annotation.Column; +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.Table; +import com.cpop.core.base.entity.BaseEntity; +import com.cpop.core.base.entity.BaseInsertListener; +import com.cpop.core.base.entity.BaseUpdateListener; +import lombok.*; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 任务-工单表 实体类。 + * + * @author DB + * @since 2023-09-18 + */ +@Data +@EqualsAndHashCode(callSuper=false) +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +@Table(value = "cp_oam_task_work_order", onInsert = BaseInsertListener.class, onUpdate = BaseUpdateListener.class, mapperGenerateEnable = false) +public class TaskWorkOrder extends BaseEntity implements Serializable { + + /** + * 主键 + */ + @Id + private String id; + + /** + * 任务id + */ + private String taskId; + + /** + * 品牌id + */ + private String brandId; + + /** + * 校区id + */ + private String campusId; + + /** + * 产品id + */ + private String productId; + + /** + * 问题手机号 + */ + private String phoneNumber; + + /** + * 记录员工id + */ + private String recordStaffId; + + /** + * 办结时间 + */ + private LocalDateTime finishTime; + + + + + + /** + * 是否删除(0否1是) + */ + @Column(isLogicDelete = true) + private Boolean isDelete; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/TaskWorkOrderRecord.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/TaskWorkOrderRecord.java new file mode 100644 index 0000000..be17769 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/TaskWorkOrderRecord.java @@ -0,0 +1,58 @@ +package com.cpop.oam.business.entity; + +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.Table; +import com.cpop.core.base.entity.BaseEntity; +import com.cpop.core.base.entity.BaseInsertListener; +import com.cpop.core.base.entity.BaseUpdateListener; +import lombok.*; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 任务-工单-记录表 实体类。 + * + * @author DB + * @since 2023-09-18 + */ +@Data +@EqualsAndHashCode(callSuper=false) +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +@Table(value = "cp_oam_task_work_order_record", onInsert = BaseInsertListener.class, onUpdate = BaseUpdateListener.class, mapperGenerateEnable = false) +public class TaskWorkOrderRecord extends BaseEntity implements Serializable { + + /** + * 主键 + */ + @Id + private String id; + + /** + * 任务工单id + */ + private String taskWorkOrderId; + + /** + * 记录员工id + */ + private String recordStaffId; + + /** + * 记录内容 + */ + private String recordText; + + /** + * 附件地址 + */ + private String attachmentUrl; + + + + + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/DeptMapper.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/DeptMapper.java new file mode 100644 index 0000000..576f7b5 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/DeptMapper.java @@ -0,0 +1,14 @@ +package com.cpop.oam.business.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.cpop.oam.business.entity.Dept; + +/** + * 部门表 映射层。 + * + * @author DB + * @since 2023-09-08 + */ +public interface DeptMapper extends BaseMapper { + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/DutyMapper.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/DutyMapper.java new file mode 100644 index 0000000..a27849d --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/DutyMapper.java @@ -0,0 +1,14 @@ +package com.cpop.oam.business.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.cpop.oam.business.entity.Duty; + +/** + * 值班表 映射层。 + * + * @author DB + * @since 2023-09-14 + */ +public interface DutyMapper extends BaseMapper { + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/FinanceReimburseMapper.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/FinanceReimburseMapper.java new file mode 100644 index 0000000..e0073d7 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/FinanceReimburseMapper.java @@ -0,0 +1,14 @@ +package com.cpop.oam.business.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.cpop.oam.business.entity.FinanceReimburse; + +/** + * 报销记录表 映射层。 + * + * @author DB + * @since 2023-09-20 + */ +public interface FinanceReimburseMapper extends BaseMapper { + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/FinanceReimburseStageMapper.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/FinanceReimburseStageMapper.java new file mode 100644 index 0000000..a8c2fd0 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/FinanceReimburseStageMapper.java @@ -0,0 +1,14 @@ +package com.cpop.oam.business.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.cpop.oam.business.entity.FinanceReimburseStage; + +/** + * 报销阶段表 映射层。 + * + * @author DB + * @since 2023-09-26 + */ +public interface FinanceReimburseStageMapper extends BaseMapper { + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/FinanceReimburseTypeMapper.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/FinanceReimburseTypeMapper.java new file mode 100644 index 0000000..c3f1b8e --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/FinanceReimburseTypeMapper.java @@ -0,0 +1,14 @@ +package com.cpop.oam.business.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.cpop.oam.business.entity.FinanceReimburseType; + +/** + * 报销类型表 映射层。 + * + * @author DB + * @since 2023-09-20 + */ +public interface FinanceReimburseTypeMapper extends BaseMapper { + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/MenuMapper.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/MenuMapper.java new file mode 100644 index 0000000..a971a74 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/MenuMapper.java @@ -0,0 +1,14 @@ +package com.cpop.oam.business.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.cpop.oam.business.entity.Menu; + +/** + * 系统菜单表 映射层。 + * + * @author DB + * @since 2023-09-07 + */ +public interface MenuMapper extends BaseMapper { + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/RoleMapper.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/RoleMapper.java new file mode 100644 index 0000000..13b6d12 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/RoleMapper.java @@ -0,0 +1,14 @@ +package com.cpop.oam.business.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.cpop.oam.business.entity.Role; + +/** + * 系统角色表 映射层。 + * + * @author DB + * @since 2023-09-08 + */ +public interface RoleMapper extends BaseMapper { + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/RoleMenuMapper.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/RoleMenuMapper.java new file mode 100644 index 0000000..ea02d2d --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/RoleMenuMapper.java @@ -0,0 +1,14 @@ +package com.cpop.oam.business.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.cpop.oam.business.entity.RoleMenu; + +/** + * 系统-角色-菜单表 映射层。 + * + * @author DB + * @since 2023-09-10 + */ +public interface RoleMenuMapper extends BaseMapper { + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/StaffMapper.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/StaffMapper.java new file mode 100644 index 0000000..8b7c7cb --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/StaffMapper.java @@ -0,0 +1,14 @@ +package com.cpop.oam.business.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.cpop.oam.business.entity.Staff; + +/** + * 员工表 映射层。 + * + * @author DB + * @since 2023-09-07 + */ +public interface StaffMapper extends BaseMapper { + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/TaskDemandMapper.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/TaskDemandMapper.java new file mode 100644 index 0000000..e12123f --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/TaskDemandMapper.java @@ -0,0 +1,14 @@ +package com.cpop.oam.business.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.cpop.oam.business.entity.TaskDemand; + +/** + * OAM-任务-需求表 映射层。 + * + * @author DB + * @since 2023-09-18 + */ +public interface TaskDemandMapper extends BaseMapper { + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/TaskMapper.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/TaskMapper.java new file mode 100644 index 0000000..68e72fb --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/TaskMapper.java @@ -0,0 +1,14 @@ +package com.cpop.oam.business.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.cpop.oam.business.entity.Task; + +/** + * OAM-任务表 映射层。 + * + * @author DB + * @since 2023-09-15 + */ +public interface TaskMapper extends BaseMapper { + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/TaskStaffGroupMapper.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/TaskStaffGroupMapper.java new file mode 100644 index 0000000..0196678 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/TaskStaffGroupMapper.java @@ -0,0 +1,14 @@ +package com.cpop.oam.business.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.cpop.oam.business.entity.TaskStaffGroup; + +/** + * OAM-任务-关联员工任务组表 映射层。 + * + * @author DB + * @since 2023-09-18 + */ +public interface TaskStaffGroupMapper extends BaseMapper { + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/TaskWorkOrderMapper.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/TaskWorkOrderMapper.java new file mode 100644 index 0000000..63888ba --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/TaskWorkOrderMapper.java @@ -0,0 +1,14 @@ +package com.cpop.oam.business.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.cpop.oam.business.entity.TaskWorkOrder; + +/** + * 任务-工单表 映射层。 + * + * @author DB + * @since 2023-09-18 + */ +public interface TaskWorkOrderMapper extends BaseMapper { + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/TaskWorkOrderRecordMapper.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/TaskWorkOrderRecordMapper.java new file mode 100644 index 0000000..0d558bb --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/mapper/TaskWorkOrderRecordMapper.java @@ -0,0 +1,14 @@ +package com.cpop.oam.business.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.cpop.oam.business.entity.TaskWorkOrderRecord; + +/** + * 任务-工单-记录表 映射层。 + * + * @author DB + * @since 2023-09-18 + */ +public interface TaskWorkOrderRecordMapper extends BaseMapper { + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/CommonService.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/CommonService.java new file mode 100644 index 0000000..1ef8fbc --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/CommonService.java @@ -0,0 +1,46 @@ +package com.cpop.oam.business.service; + +import com.cpop.oam.business.bo.SysConfigInfoBo; +import com.cpop.oam.business.vo.ConfigInfoVo; + +/** + * + */ +public interface CommonService { + + /** + * 加载参数缓存数据 + */ + void loadingConfigCache(); + + /** + * @Description: 重置参数缓存数据 + * @author DB + * @Date: 2023/6/7 0007 16:29 + */ + void resetConfigCache(); + + /** + * @Description: 清空参数缓存数据 + * @author DB + * @Date: 2023/6/7 0007 16:27 + */ + void clearConfigCache(); + + /** + * @Description: 获取系统配置信息 + * @return R + * @author DB + * @Date: 2023/7/7 0007 16:27 + */ + ConfigInfoVo getSysConfigInfo(); + + /** + * @param bo 请求参数 + * @Description: 设置系统配置信息 + * @return: R + * @Author: DB + * @Date: 2023/5/11 15:48 + **/ + void setSysConfigInfo(SysConfigInfoBo bo); +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/DeptService.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/DeptService.java new file mode 100644 index 0000000..036c4ac --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/DeptService.java @@ -0,0 +1,50 @@ +package com.cpop.oam.business.service; + +import com.mybatisflex.core.service.IService; +import com.cpop.oam.business.bo.DeptBo; +import com.cpop.oam.business.bo.DeptListBo; +import com.cpop.oam.business.entity.Dept; +import com.cpop.oam.business.vo.DeptVo; + +import java.util.List; + +/** + * 部门表 服务层。 + * + * @author DB + * @since 2023-09-08 + */ +public interface DeptService extends IService { + + /** + * @descriptions 查询部门树列表 + * @author DB + * @date 2023/09/08 18:25 + * @param bo 查询参数 + * @return java.util.List + */ + List getDeptTreeList(DeptListBo bo); + + /** + * 新增部门 + * + * @param bo 请求参数 + */ + void insertDept(DeptBo bo); + + /** + * @Description: 修改部门 + * @param bo 请求参数 + * @Author DB + * @Date: 2023/5/9 20:47 + */ + void updateDept(DeptBo bo); + + /** + * @Description: 删除部门 + * @param id 主键 + * @Author DB + * @Date: 2023/5/9 20:48 + */ + void removeDept(String id); +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/DutyService.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/DutyService.java new file mode 100644 index 0000000..d59db23 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/DutyService.java @@ -0,0 +1,44 @@ +package com.cpop.oam.business.service; + +import com.mybatisflex.core.service.IService; +import com.cpop.oam.business.bo.DutyBo; +import com.cpop.oam.business.bo.DutyListBo; +import com.cpop.oam.business.entity.Duty; +import com.cpop.oam.business.vo.DutyListVo; + +import java.util.List; + +/** + * 值班表 服务层。 + * + * @author DB + * @since 2023-09-14 + */ +public interface DutyService extends IService { + + /** + * @Description: 查询值班列表(当月) + * @param bo 请求参数 + * @return: R> + * @Author: DB + * @Date: 2023/5/11 16:39 + **/ + List getDutyList(DutyListBo bo); + + /** + * @Description: 新增值班 + * @param bo 请求参数 + * @return: R + * @Author: DB + * @Date: 2023/5/18 9:50 + **/ + void insertDuty(DutyBo bo); + + /** + * @descriptions 删除值班信息 + * @author DB + * @date 2023/09/14 18:16 + * @param dutyDate 值班日期 + */ + void removeDutyByDate(String dutyDate); +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/FinanceReimburseService.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/FinanceReimburseService.java new file mode 100644 index 0000000..3744ff7 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/FinanceReimburseService.java @@ -0,0 +1,70 @@ +package com.cpop.oam.business.service; + +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.service.IService; +import com.cpop.oam.business.bo.*; +import com.cpop.oam.business.entity.FinanceReimburse; +import com.cpop.oam.business.vo.FinanceReimburseAuditPageVo; +import com.cpop.oam.business.vo.FinanceReimbursePageVo; +import com.cpop.oam.business.vo.ReimbursePersonStatisticVo; + +/** + * 报销记录表 服务层。 + * + * @author DB + * @since 2023-09-20 + */ +public interface FinanceReimburseService extends IService { + + /** + * @Description: 财务报销模块-报销分页列表 + * @param bo 请求参数 + * @return: R> + * @Author: DB + * @Date: 2023/5/30 15:44 + **/ + Page getFinanceReimbursePage(FinanceReimbursePageBo bo); + + /** + * @Description: 财务报销模块-报销审核分页列表 + * @param bo 请求参数 + * @return: R> + * @Author: DB + * @Date: 2023/5/30 15:44 + **/ + Page getReimburseAuditPage(FinanceReimburseAuditPageBo bo); + + /** + * @Description: 修改报销状态 + * @param bo 请求参数 + * @Author: DB + * @Date: 2023/5/10 16:01 + **/ + void updateReimburseStatus(ReimburseStatusBo bo); + + /** + * @descriptions 新增报销申请 + * @author DB + * @date 2023/09/21 15:55 + * @param bo 请求参数 + * @return: com.cpop.core.base.R + */ + void insertReimburseApplication(ReimburseApplicationBo bo); + + /** + * @Description: 财务报销模块-个人报销统计 + * @return: R> + * @Author: DB + * @Date: 2023/5/30 15:44 + **/ + ReimbursePersonStatisticVo getPersonStatistic(); + + /** + * @descriptions 报销下款 + * @author DB + * @date 2023/09/08 15:20 + * @param bo 请求参数 + * @return: com.jambox.core.base.R + */ + void reimbursePay(ReimbursePayBo bo); +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/FinanceReimburseStageService.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/FinanceReimburseStageService.java new file mode 100644 index 0000000..65536be --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/FinanceReimburseStageService.java @@ -0,0 +1,14 @@ +package com.cpop.oam.business.service; + +import com.mybatisflex.core.service.IService; +import com.cpop.oam.business.entity.FinanceReimburseStage; + +/** + * 报销阶段表 服务层。 + * + * @author DB + * @since 2023-09-26 + */ +public interface FinanceReimburseStageService extends IService { + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/FinanceReimburseTypeService.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/FinanceReimburseTypeService.java new file mode 100644 index 0000000..b1baaa8 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/FinanceReimburseTypeService.java @@ -0,0 +1,14 @@ +package com.cpop.oam.business.service; + +import com.mybatisflex.core.service.IService; +import com.cpop.oam.business.entity.FinanceReimburseType; + +/** + * 报销类型表 服务层。 + * + * @author DB + * @since 2023-09-20 + */ +public interface FinanceReimburseTypeService extends IService { + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/LoginService.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/LoginService.java new file mode 100644 index 0000000..3b9a2a5 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/LoginService.java @@ -0,0 +1,32 @@ +package com.cpop.oam.business.service; + +import com.cpop.oam.business.vo.LoginUserInfoVo; +import com.cpop.oam.business.vo.MenuRouteVo; + +import java.util.List; + +/** + * 系统登陆 + */ +public interface LoginService { + + /** + * 获取登录用户详情 + * + * @return 系统用户登陆信息 + */ + LoginUserInfoVo getUserInfo(); + + /** + * 获取权限码 + */ + List getPermCode(); + + /** + * @Description: 获取菜单列表 + * @return: List + * @Author: DB + * @Date: 2023/5/11 9:16 + **/ + List getOamMenuList(); +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/MenuService.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/MenuService.java new file mode 100644 index 0000000..8868af2 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/MenuService.java @@ -0,0 +1,69 @@ +package com.cpop.oam.business.service; + +import com.mybatisflex.core.service.IService; +import com.cpop.oam.business.bo.MenuBo; +import com.cpop.oam.business.bo.MenuListBo; +import com.cpop.oam.business.entity.Menu; +import com.cpop.oam.business.vo.MenuRouteVo; +import com.cpop.oam.business.vo.MenuVo; + +import java.util.List; + +/** + * 系统菜单表 服务层。 + * + * @author DB + * @since 2023-09-07 + */ +public interface MenuService extends IService { + + /** + * @descriptions 获取系统菜单树列表 + * @author DB + * @date 2023/09/07 15:53 + * @param bo 请求参数 + * @return java.util.List + */ + List getOamMenuTreeList(MenuListBo bo); + + /** + * @descriptions 获取目录与菜单树 + * @author DB + * @date 2023/09/07 17:42 + * @return java.util.List + */ + List getDirectoryAndMenuTreeList(); + + /** + * @descriptions 新增系统菜单 + * @author DB + * @date 2023/09/07 17:50 + * @param bo 请求参数 + */ + void insertOamMenu(MenuBo bo); + + /** + * @Description: 修改系统菜单表 + * @param bo 请求参数 + * @Author: DB + * @Date: 2023/5/10 16:01 + **/ + void updateOamMenu(MenuBo bo); + + /** + * @Description: 删除系统菜单表 + * @param id 主键id + * @Author: DB + * @Date: 2023/5/10 16:01 + **/ + void removeOamMenu(String id); + + + /** + * @descriptions 获取菜单列表 + * @author DB + * @date 2023/09/10 14:06 + * @return java.util.List + */ + List getOamMenuList(); +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/RoleMenuService.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/RoleMenuService.java new file mode 100644 index 0000000..77edf24 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/RoleMenuService.java @@ -0,0 +1,14 @@ +package com.cpop.oam.business.service; + +import com.mybatisflex.core.service.IService; +import com.cpop.oam.business.entity.RoleMenu; + +/** + * 系统-角色-菜单表 服务层。 + * + * @author DB + * @since 2023-09-10 + */ +public interface RoleMenuService extends IService { + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/RoleService.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/RoleService.java new file mode 100644 index 0000000..b1a38c8 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/RoleService.java @@ -0,0 +1,58 @@ +package com.cpop.oam.business.service; + +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.service.IService; +import com.cpop.oam.business.bo.RoleBo; +import com.cpop.oam.business.bo.RolePageBo; +import com.cpop.oam.business.bo.RoleStatusBo; +import com.cpop.oam.business.entity.Role; +import com.cpop.oam.business.vo.RolePageVo; + +/** + * 系统角色表 服务层。 + * + * @author DB + * @since 2023-09-08 + */ +public interface RoleService extends IService { + + /** + * 查询系统角色分页列表 + * + * @param bo 请求参数 + * @return SysRole集合 + */ + Page selectOamRolePageList(RolePageBo bo); + + /** + * 新增角色 + * + * @param bo 请求参数 + */ + void insertOamRole(RoleBo bo); + + /** + * @descriptions 修改角色 + * @author DB + * @date 2023/09/10 17:45 + * @param bo 请求参数 + * @return: com.jambox.core.base.R + */ + void updateOamRole(RoleBo bo); + + /** + * 删除系统角色 + * + * @param id 主键 + */ + void removeOamRole(String id); + + /** + * @Description: 设置角色状态 + * @param bo 请求参数 + * @return: void + * @Author: DB + * @Date: 2023/5/9 14:13 + **/ + void setOamRoleStatus(RoleStatusBo bo); +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/StaffService.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/StaffService.java new file mode 100644 index 0000000..c6dfce5 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/StaffService.java @@ -0,0 +1,111 @@ +package com.cpop.oam.business.service; + +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.service.IService; +import com.cpop.oam.business.bo.ModifyUserPasswordBo; +import com.cpop.oam.business.bo.StaffBo; +import com.cpop.oam.business.bo.StaffPageBo; +import com.cpop.oam.business.bo.SysUserLogBo; +import com.cpop.oam.business.entity.Staff; +import com.cpop.oam.business.vo.StaffInfoVo; +import com.cpop.oam.business.vo.StaffPageVo; +import com.cpop.oam.business.vo.StaffVo; +import com.cpop.oam.business.vo.SysOperationLogVo; + +import java.util.List; + +/** + * 员工表 服务层。 + * + * @author DB + * @since 2023-09-07 + */ +public interface StaffService extends IService { + + + /** + * @descriptions 查询员工分页列表 + * @author DB + * @date 2023/09/07 18:11 + * @param bo 请求参数 + * @return com.mybatisflex.core.paginate.Page + */ + Page getStaffPageList(StaffPageBo bo); + + /** + * @descriptions 新增员工 + * @author DB + * @date 2023/09/08 14:12 + * @param bo 请求参数 + */ + void insertStaff(StaffBo bo); + + /** + * @descriptions 修改员工 + * @author DB + * @date 2023/09/08 15:21 + * @param bo 请求参数 + */ + void updateStaff(StaffBo bo); + + /** + * @descriptions 删除员工 + * @author DB + * @date 2023/09/08 17:43 + * @param id 主键 + */ + void removeStaffById(String id); + + /** + * @Description: 用户名是否存在 + * @param username 用户名 + * @param id 主键 + * @return: R + * @Author: DB + * @Date: 2023/5/11 10:09 + **/ + void isAccountExist(String username, String id); + + /** + * @Description: 获取员工信息 + * @param id 主键 + * @return: StaffInfoVo + * @Author: DB + * @Date: 2023/5/17 10:36 + **/ + StaffInfoVo getStaffInfo(String id); + + /** + * @Description: 获取用户操作日志分页 + * @param bo 请求参数 + * @return: R> + * @Author: DB + * @Date: 2023/5/12 14:30 + **/ + Page getUserLogList(SysUserLogBo bo); + + /** + * @Description: 修改系统用户密码 + * @param bo 请求参数 + * @return: AjaxResult + * @Author: DB + * @Date: 2023/5/12 16:00 + **/ + void modifyUserPassword(ModifyUserPasswordBo bo); + + /** + * @Description: 查询服务员工列表 + * @return: R> + * @Author: DB + * @Date: 2023/5/11 17:49 + **/ + List getServiceStaffList(); + + /** + * @Description: 查询技术员工列表 + * @return: R> + * @Author: DB + * @Date: 2023/5/11 17:50 + **/ + List getTechnologyStaffList(); +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/TaskDemandService.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/TaskDemandService.java new file mode 100644 index 0000000..35a836e --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/TaskDemandService.java @@ -0,0 +1,35 @@ +package com.cpop.oam.business.service; + +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.service.IService; +import com.cpop.oam.business.bo.TaskDemandBo; +import com.cpop.oam.business.bo.TaskDemandPageBo; +import com.cpop.oam.business.entity.TaskDemand; +import com.cpop.oam.business.vo.TaskDemandPageVo; + +/** + * OAM-任务-需求表 服务层。 + * + * @author DB + * @since 2023-09-18 + */ +public interface TaskDemandService extends IService { + + /** + * @Description: 任务管理-需求管理分页列表 + * @param bo 请求参数 + * @return: R> + * @Author: DB + * @Date: 2023/5/30 15:44 + **/ + Page getTaskDemandPage(TaskDemandPageBo bo); + + /** + * @Description: 任务管理-需求管理-新增需求任务 + * @param bo 请求参数 + * @return: R + * @Author: DB + * @Date: 2023/5/30 16:53 + **/ + void insertTaskDemand(TaskDemandBo bo); +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/TaskService.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/TaskService.java new file mode 100644 index 0000000..96aa341 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/TaskService.java @@ -0,0 +1,115 @@ +package com.cpop.oam.business.service; + +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.service.IService; +import com.cpop.oam.business.bo.*; +import com.cpop.oam.business.entity.Task; +import com.cpop.oam.business.vo.PersonTaskPageVo; +import com.cpop.oam.business.vo.TaskAuditPageVo; +import com.cpop.oam.business.vo.TaskMonthStatisticsVo; +import com.cpop.oam.business.vo.TaskPageVo; + +/** + * OAM-任务表 服务层。 + * + * @author DB + * @since 2023-09-15 + */ +public interface TaskService extends IService { + + /** + * @Description: 查询OAM-任务分页列表 + * @param bo 请求参数 + * @return: R> + * @Author: DB + * @Date: 2023/5/16 15:24 + **/ + Page getTaskPage(TaskPageBo bo); + + /** + * @Description: OAM-新增任务 + * @param bo 请求参数 + * @return: R + * @Author: DB + * @Date: 2023/5/16 15:58 + **/ + void insertTask(TaskBo bo); + + /** + * @Description: 查询OAM-任务审核分页列表 + * @return: R> + * @Author: DB + * @Date: 2023/5/16 15:24 + **/ + Page getTaskAuditPage(); + + /** + * @Description: 设置任务审核意见 + * @param bo 请求参数 + * @return: R + * @Author: DB + * @Date: 2023/5/16 17:36 + **/ + void setTaskAuditComments(TaskAuditCommentsBo bo); + + /** + * @Description: 查询OAM-任务审核驳回列表 + * @return: R> + * @Author: DB + * @Date: 2023/5/16 15:24 + **/ + Page getTaskRejectPage(); + + /** + * @Description: 技术人员领取任务 + * @param id 任务主键 + * @return: R + * @Author: DB + * @Date: 2023/5/16 17:10 + **/ + void claimTask(String id); + + /** + * @Description: 查询OAM-个人任务分页列表 + * @return: R> + * @Author: DB + * @Date: 2023/5/16 15:24 + **/ + Page getPersonTaskPage(PersonTaskPageBo bo); + + /** + * @Description: 修改任务进度 + * @param bo 请求参数 + * @return: R + * @Author: DB + * @Date: 2023/5/29 14:58 + **/ + void updateTaskItem(TaskItemBo bo); + + /** + * @Description: 修改任务负责人 + * @param bo 请求参数 + * @return: R + * @Author: DB + * @Date: 2023/5/29 14:58 + **/ + void updateTaskResponsibleStaff(TransferTaskBo bo); + + /** + * @Description: 完成任务 + * @param id 主键 + * @return: R + * @Author: DB + * @Date: 2023/5/31 16:24 + **/ + void finishTask(String id); + + /** + * @Description: 获取月度任务统计列表 + * @param bo 请求参数 + * @return: R> + * @Author: DB + * @Date: 2023/5/15 16:42 + **/ + TaskMonthStatisticsVo getTaskMonthStatistics(TaskMonthStatisticsBo bo); +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/TaskStaffGroupService.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/TaskStaffGroupService.java new file mode 100644 index 0000000..732658b --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/TaskStaffGroupService.java @@ -0,0 +1,53 @@ +package com.cpop.oam.business.service; + +import com.mybatisflex.core.service.IService; +import com.cpop.oam.business.bo.TaskStaffGroupBo; +import com.cpop.oam.business.bo.TaskStaffGroupListBo; +import com.cpop.oam.business.entity.TaskStaffGroup; +import com.cpop.oam.business.vo.TaskStaffGroupVo; + +import java.util.List; + +/** + * OAM-任务-关联员工任务组表 服务层。 + * + * @author DB + * @since 2023-09-18 + */ +public interface TaskStaffGroupService extends IService { + + /** + * @Description: 查询OAM-任务成员组列表 + * @return: R> + * @Author: DB + * @Date: 2023/5/16 15:24 + **/ + List getTaskStaffGroupList(TaskStaffGroupListBo bo); + + /** + * @Description: 新增任务员工组 + * @param bo 请求参数 + * @return: R + * @Author: DB + * @Date: 2023/5/16 15:58 + **/ + void insertTaskStaffGroup(TaskStaffGroupBo bo); + + /** + * @Description: 修改员工任务绩点 + * @param bo 请求参数 + * @return: R + * @Author: DB + * @Date: 2023/5/29 11:48 + **/ + void updateStaffGradePoint(TaskStaffGroupBo bo); + + /** + * @Description: 删除成员组 + * @param id 主键 + * @return: R + * @Author: DB + * @Date: 2023/5/29 14:18 + **/ + void removeTaskStaffGroupById(String id); +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/TaskWorkOrderRecordService.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/TaskWorkOrderRecordService.java new file mode 100644 index 0000000..1832336 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/TaskWorkOrderRecordService.java @@ -0,0 +1,22 @@ +package com.cpop.oam.business.service; + +import com.mybatisflex.core.service.IService; +import com.cpop.oam.business.dto.TaskWorkOrderRecordDto; +import com.cpop.oam.business.entity.TaskWorkOrderRecord; + +/** + * 任务-工单-记录表 服务层。 + * + * @author DB + * @since 2023-09-18 + */ +public interface TaskWorkOrderRecordService extends IService { + + /** + * @descriptions 新增任务-工单-记录 + * @author DB + * @date 2023/09/18 17:31 + * @param orderRecordDto 请求参数 + */ + void insertTaskWorkOrderRecord(TaskWorkOrderRecordDto orderRecordDto); +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/TaskWorkOrderService.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/TaskWorkOrderService.java new file mode 100644 index 0000000..81a1ee6 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/TaskWorkOrderService.java @@ -0,0 +1,76 @@ +package com.cpop.oam.business.service; + +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.service.IService; +import com.cpop.oam.business.bo.PauseWorkOrderBo; +import com.cpop.oam.business.bo.TaskWorkOrderBo; +import com.cpop.oam.business.bo.TaskWorkOrderPageBo; +import com.cpop.oam.business.bo.TaskWorkOrderRecordBo; +import com.cpop.oam.business.entity.TaskWorkOrder; +import com.cpop.oam.business.vo.TaskWorkOrderPageVo; +import com.cpop.oam.business.vo.TaskWorkOrderRecordListVo; + +import java.util.List; + +/** + * 任务-工单表 服务层。 + * + * @author DB + * @since 2023-09-18 + */ +public interface TaskWorkOrderService extends IService { + + /** + * @Description: 任务管理-工单管理-新增工单 + * @param bo 请求参数 + * @return: R + * @Author: DB + * @Date: 2023/5/30 16:53 + **/ + void insertWorkOrder(TaskWorkOrderBo bo); + + /** + * @descriptions 查询任务-工单-记录表列表 + * @author DB + * @date 2023/09/18 17:18 + * @param bo 请求参数 + * @return com.cpop.core.base.R> + */ + Page getWorkOrderPage(TaskWorkOrderPageBo bo); + + /** + * @descriptions 查询任务-工单记录-列表 + * @author DB + * @date 2023/09/18 17:19 + * @param workRecordId 工单记录id + * @return com.cpop.core.base.R> + */ + List getWorkOrderRecordList(String workRecordId); + + /** + * @Description: 任务管理-工单管理-新增工单记录 + * @param bo 请求参数 + * @return: R + * @Author: DB + * @Date: 2023/5/30 16:53 + **/ + void insertWorkOrderRecord(TaskWorkOrderRecordBo bo); + + /** + * @Description: 工单办结 + * @param id 主键 + * @return: R + * @Author: DB + * @Date: 2023/5/16 17:10 + **/ + void concludeWorkOrder(String id); + + /** + * @Description: 工单暂停 + * @param bo 请求参数 + * @return: R + * @Author: DB + * @Date: 2023/5/16 17:10 + **/ + void pauseWorkOrder(PauseWorkOrderBo bo); +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/CommonServiceImpl.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/CommonServiceImpl.java new file mode 100644 index 0000000..f7d94d4 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/CommonServiceImpl.java @@ -0,0 +1,155 @@ +package com.cpop.oam.business.service.impl; + +import com.mybatisflex.core.row.DbChain; +import com.cpop.common.utils.StringUtils; +import com.cpop.common.utils.bean.BeanUtils; +import com.cpop.core.base.exception.ServiceException; +import com.cpop.core.base.table.SysConfig; +import com.cpop.core.service.CoreService; +import com.cpop.core.service.RedisService; +import com.cpop.core.utils.SpringUtils; +import com.cpop.oam.business.bo.SysConfigInfoBo; +import com.cpop.oam.business.service.CommonService; +import com.cpop.oam.business.vo.ConfigInfoVo; +import com.cpop.oam.framework.constant.OamConfigKey; +import com.cpop.oam.framework.enums.OamConfigEnum; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; +import java.lang.reflect.Field; +import java.util.*; + +import static com.cpop.core.base.table.table.SysConfigTableDef.SYS_CONFIG; + +/** + * @author DB + * @createTime 2023/09/13 12:45 + * @description + */ +@Service("oamCommonService") +public class CommonServiceImpl implements CommonService { + + /** + * 项目启动时,初始化参数到缓存 + */ + @PostConstruct + private void init() { + loadingConfigCache(); + } + + /** + * 加载参数缓存数据 + */ + @Override + public void loadingConfigCache() { + List keys = Arrays.asList(OamConfigKey.WORK_WX_INFO); + //加载OAM配置参数 + List configsList = DbChain.table(SYS_CONFIG) + .select(SYS_CONFIG.ALL_COLUMNS) + .where(SYS_CONFIG.CONFIG_KEY.in(keys)) + .listAs(SysConfig.class); + if (!configsList.isEmpty()){ + for (SysConfig config : configsList) { + SpringUtils.getBean(RedisService.class).setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); + } + } + } + + /** + * 重置参数缓存数据 + */ + @Override + public void resetConfigCache() { + clearConfigCache(); + loadingConfigCache(); + } + + /** + * 清空参数缓存数据 + */ + @Override + public void clearConfigCache() { + RedisService redisService = SpringUtils.getBean(RedisService.class); + Collection keys = redisService.keys(OamConfigKey.OAM_CONFIG_KEY + "*"); + redisService.deleteObject(keys); + } + + /** + * 设置cache key + * + * @param configKey 参数键 + * @return 缓存键key + */ + private String getCacheKey(String configKey) { + return OamConfigKey.OAM_CONFIG_KEY + configKey; + } + + /** + * @Description: 获取系统配置信息 + * @return R + * @author DB + * @Date: 2023/7/7 0007 16:27 + */ + @Override + public ConfigInfoVo getSysConfigInfo() { + ConfigInfoVo sysConfigInfoVo = new ConfigInfoVo(); + RedisService redisService = SpringUtils.getBean(RedisService.class); + CoreService coreService = SpringUtils.getBean(CoreService.class); + //获取企业微信信息 + Map configMap = new HashMap<>(8); + Arrays.asList(OamConfigKey.WORK_WX_INFO).forEach(item -> { + String cacheInfo = redisService.getCacheObject(getCacheKey(item)); + if (StringUtils.isNotBlank(cacheInfo)) { + //获取枚举 + OamConfigEnum sysConfigEnum = OamConfigEnum.matchKey(item); + configMap.put(sysConfigEnum.getField(), cacheInfo); + } else { + //查询系统 + String value = coreService.selectConfigByKey(item).getConfigValue(); + if (StringUtils.isNotBlank(value)) { + //获取枚举 + OamConfigEnum sysConfigEnum = OamConfigEnum.matchKey(item); + configMap.put(sysConfigEnum.getField(), value); + } + } + }); + BeanUtils.mapToObj(configMap, sysConfigInfoVo); + return sysConfigInfoVo; + } + + /** + * @param bo 请求参数 + * @Description: 设置系统配置信息 + * @return: R + * @Author: DB + * @Date: 2023/5/11 15:48 + **/ + @Override + public void setSysConfigInfo(SysConfigInfoBo bo) { + CoreService coreService = SpringUtils.getBean(CoreService.class); + //遍历属性名与值 + try { + for (Field field : bo.getClass().getDeclaredFields()) { + field.setAccessible(true); + //获取枚举 + OamConfigEnum sysConfigEnum = OamConfigEnum.matchField(field.getName()); + if (null != sysConfigEnum) { + SysConfig sysConfig = new SysConfig(); + sysConfig.setConfigName(sysConfigEnum.getName()) + .setConfigKey(sysConfigEnum.getKey()) + .setConfigValue(field.get(bo).toString()); + //修改 + if (DbChain.table(SYS_CONFIG).where(SYS_CONFIG.CONFIG_KEY.eq(sysConfig.getConfigKey())).count() > 0) { + coreService.updateConfig(sysConfig); + } else { + coreService.insertConfig(sysConfig); + } + //更新缓存 + SpringUtils.getBean(RedisService.class).setCacheObject(getCacheKey(sysConfigEnum.getKey()), sysConfig.getConfigValue()); + } + } + } catch (IllegalAccessException e) { + throw new ServiceException("更新系统配置失败,请联系相关人员!"); + } + } +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/DeptServiceImpl.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/DeptServiceImpl.java new file mode 100644 index 0000000..510f68a --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/DeptServiceImpl.java @@ -0,0 +1,207 @@ +package com.cpop.oam.business.service.impl; + +import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.spring.service.impl.ServiceImpl; +import com.cpop.common.utils.StringUtils; +import com.cpop.common.utils.bean.BeanUtils; +import com.cpop.core.base.exception.ServiceException; +import com.cpop.core.utils.MessageUtils; +import com.cpop.core.utils.SpringUtils; +import com.cpop.oam.business.bo.DeptBo; +import com.cpop.oam.business.bo.DeptListBo; +import com.cpop.oam.business.entity.Dept; +import com.cpop.oam.business.mapper.DeptMapper; +import com.cpop.oam.business.service.DeptService; +import com.cpop.oam.business.service.StaffService; +import com.cpop.oam.business.vo.DeptVo; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +import static com.cpop.oam.business.entity.table.DeptTableDef.DEPT; +import static com.cpop.oam.business.entity.table.StaffTableDef.STAFF; + +/** + * 部门表 服务层实现。 + * + * @author DB + * @since 2023-09-08 + */ +@Service("oamDeptService") +public class DeptServiceImpl extends ServiceImpl implements DeptService { + + /** + * @descriptions 查询部门树列表 + * @author DB + * @date 2023/09/08 18:25 + * @param bo 查询参数 + * @return java.util.List + */ + @Override + public List getDeptTreeList(DeptListBo bo) { + return buildDeptTree(this.listAs(QueryWrapper.create() + .and(DEPT.NAME.like(bo.getName())) + .and(DEPT.STATUS.eq(bo.getStatus())) + .orderBy(DEPT.ORDER_NO.asc()), DeptVo.class)); + } + + /** + * @Description: 构建部门树 + * @param list 部门集合 + * @return List + * @Author DB + * @Date: 2023/5/9 20:56 + */ + private List buildDeptTree(List list) { + List returnList = new ArrayList(); + List tempList = new ArrayList(); + for (DeptVo dept : list) { + tempList.add(dept.getId()); + } + for (DeptVo dept : list) { + // 如果是顶级节点, 遍历该父节点的所有子节点 + if (!tempList.contains(dept.getParentId())) { + recursionFn(list, dept); + returnList.add(dept); + } + } + if (returnList.isEmpty()) { + returnList = list; + } + return returnList; + } + + /** + * @Description: 递归列表 + * @param list 部门集合 + * @param t 参数 + * @Author DB + * @Date: 2023/5/9 20:55 + */ + private void recursionFn(List list, DeptVo t) { + // 得到子节点列表 + List childList = getChildList(list, t); + t.setChildren(childList); + for (DeptVo tChild : childList) { + if (hasChild(list, tChild)) { + recursionFn(list, tChild); + } + } + } + + /** + * @Description: 得到子节点列表 + * @param list 部门集合 + * @param t 参数 + * @return boolean + * @Author DB + * @Date: 2023/5/9 20:55 + */ + private boolean hasChild(List list, DeptVo t) { + return getChildList(list, t).size() > 0; + } + + /** + * @Description: 得到子节点列表 + * @param list 部门集合 + * @param t 参数 + * @return List + * @Author DB + * @Date: 2023/5/9 20:55 + */ + private List getChildList(List list, DeptVo t) { + List tList = new ArrayList(); + for (DeptVo deptVo : list) { + if (StringUtils.isNotNull(deptVo.getParentId()) && StringUtils.equals(deptVo.getParentId(), t.getId())) { + tList.add(deptVo); + } + } + return tList; + } + + /** + * 新增部门 + * + * @param bo 请求参数 + */ + @Override + public void insertDept(DeptBo bo) { + Dept entity = BeanUtils.mapToClass(bo, Dept.class); + this.save(entity); + } + + /** + * @Description: 修改部门 + * @param bo 请求参数 + * @Author DB + * @Date: 2023/5/9 20:47 + */ + @Override + public void updateDept(DeptBo bo) { + Dept entity = BeanUtils.mapToClass(bo, Dept.class); + this.updateById(entity); + } + + /** + * @Description: 删除部门 + * @param id 主键 + * @Author DB + * @Date: 2023/5/9 20:48 + */ + @Override + public void removeDept(String id) { + //首先,只允许删除停用的部门 + if (this.count(QueryWrapper.create().where(DEPT.STATUS.eq(1)).and(DEPT.ID.eq(id))) > 0) { + //再查询所有部门 + List list = this.list(); + //递归获取当前部门与子部门 + List deptIds = filterSonDept(list, id); + //删除部门,首先要查询员工 + if (SpringUtils.getBean(StaffService.class).count(QueryWrapper.create().where(STAFF.DEPT_ID.in(deptIds))) > 0) { + throw new ServiceException(MessageUtils.message("i18n_alert_peopleUnderTheDepartmentError")); + } else { + //当部门人员及其子部门人员为空时,才允许删除部门 + this.removeByIds(deptIds); + } + }else { + throw new ServiceException(MessageUtils.message("i18n_alert_departmentNotDeactivatedError")); + } + } + + /** + * @Description: 过滤子部门 + * @param list 部门集合 + * @param id 部门id + * @return List + * @Author DB + * @Date: 2023/5/9 20:58 + */ + private List filterSonDept(List list, String id) { + List deptIds = new ArrayList<>(); + deptIds.add(id); + //获取其子部门 + List filterList = list.stream() + .filter(s -> StringUtils.equals(s.getParentId(), id)) + .collect(Collectors.toList()); + recursionRemoveIds(deptIds, filterList); + return deptIds; + } + + /** + * @Description: 递归获取当前部门与下属子部门 + * @param deptIds 部门id + * @param filterList 过滤集合 + * @Author DB + * @Date: 2023/5/9 20:59 + */ + private void recursionRemoveIds(List deptIds, List filterList) { + filterList.forEach(item -> { + deptIds.add(item.getId()); + recursionRemoveIds(deptIds, filterList.stream() + .filter(s -> null != s.getParentId() && StringUtils.equals(s.getParentId(), item.getId())) + .collect(Collectors.toList())); + }); + } +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/DutyServiceImpl.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/DutyServiceImpl.java new file mode 100644 index 0000000..bbe4b06 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/DutyServiceImpl.java @@ -0,0 +1,116 @@ +package com.cpop.oam.business.service.impl; + +import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.spring.service.impl.ServiceImpl; +import com.cpop.common.utils.DateUtils; +import com.cpop.common.utils.StringUtils; +import com.cpop.core.utils.SpringUtils; +import com.cpop.oam.business.bo.DutyBo; +import com.cpop.oam.business.bo.DutyListBo; +import com.cpop.oam.business.entity.Duty; +import com.cpop.oam.business.entity.Staff; +import com.cpop.oam.business.mapper.DutyMapper; +import com.cpop.oam.business.service.DutyService; +import com.cpop.oam.business.service.StaffService; +import com.cpop.oam.business.vo.DutyListVo; +import org.springframework.stereotype.Service; + +import java.sql.Date; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.temporal.TemporalAdjusters; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +import static com.cpop.oam.business.entity.table.DutyTableDef.DUTY; + +/** + * 值班表 服务层实现。 + * + * @author DB + * @since 2023-09-14 + */ +@Service("oamDutyService") +public class DutyServiceImpl extends ServiceImpl implements DutyService { + + /** + * @Description: 查询值班列表(当月) + * @param bo 请求参数 + * @return: R> + * @Author: DB + * @Date: 2023/5/11 16:39 + **/ + @Override + public List getDutyList(DutyListBo bo) { + //默认查询当月 + LocalDate date; + if (StringUtils.isNotBlank(bo.getDutyMoth())) { + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + date = LocalDate.parse(bo.getDutyMoth() + "-15", df); + } else { + date = LocalDate.now(); + } + // 获取目标月的第一天 + LocalDate firstDay = date.with(TemporalAdjusters.firstDayOfMonth()); + // 获取目标月的最后一天 + LocalDate lastDay = date.with(TemporalAdjusters.lastDayOfMonth()); + List list = this.listAs(QueryWrapper.create() + .select(DUTY.ID, DUTY.DUTY_DATE, DUTY.SERVICE_STAFF_ID, DUTY.TECHNOLOGY_STAFF_ID) + .where(DUTY.DUTY_DATE.ge(firstDay).and(DUTY.DUTY_DATE.le(lastDay))), + DutyListVo.class); + if (list.isEmpty()){ + return list; + } + //需要额外查询出员工信息 + Set staffIds = list.stream().map(DutyListVo::getServiceStaffId).collect(Collectors.toSet()); + Set technologyStaffIds = list.stream().map(DutyListVo::getTechnologyStaffId).collect(Collectors.toSet()); + staffIds.addAll(technologyStaffIds); + Map staffMap = SpringUtils.getBean(StaffService.class).listByIds(staffIds) + .stream().collect(Collectors.toMap(Staff::getId, Staff::getName)); + list.forEach(item->{ + item.setServiceStaffName(staffMap.get(item.getServiceStaffId())); + item.setTechnologyStaffName(staffMap.get(item.getTechnologyStaffId())); + }); + return list; + } + + /** + * @Description: 新增值班 + * @param bo 请求参数 + * @return: R + * @Author: DB + * @Date: 2023/5/18 9:50 + **/ + @Override + public void insertDuty(DutyBo bo) { + //开始日期,结束日期 + String startDate = bo.getDutyDate().get(0); + String endDate = bo.getDutyDate().get(1); + List dateList = DateUtils.getDatesBetweenTwoDatesT(Date.valueOf(startDate), Date.valueOf(endDate)); + //先删后存 + this.remove(QueryWrapper.create().where(DUTY.DUTY_DATE.ge(startDate).and(DUTY.DUTY_DATE.le(endDate)))); + List entityList = new ArrayList(); + dateList.forEach(item->{ + Duty entity = new Duty(); + entity.setDutyDate(new Date(DateUtils.parseDate(item).getTime())) + .setServiceStaffId(bo.getServiceStaffId()) + .setTechnologyStaffId(bo.getTechnologyStaffId()); + entityList.add(entity); + }); + this.saveBatch(entityList); + } + + /** + * @descriptions 删除值班信息 + * @author DB + * @date 2023/09/14 18:16 + * @param dutyDate 值班日期 + */ + @Override + public void removeDutyByDate(String dutyDate) { + this.remove(QueryWrapper.create().where(DUTY.DUTY_DATE.eq(dutyDate))); + } +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/FinanceReimburseServiceImpl.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/FinanceReimburseServiceImpl.java new file mode 100644 index 0000000..9082039 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/FinanceReimburseServiceImpl.java @@ -0,0 +1,211 @@ +package com.cpop.oam.business.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.spring.service.impl.ServiceImpl; +import com.cpop.common.utils.bean.BeanUtils; +import com.cpop.core.base.entity.LoginUser; +import com.cpop.core.base.entity.PageDomain; +import com.cpop.core.base.entity.loginInfo.OamStaffLoginInfo; +import com.cpop.core.base.enums.UserType; +import com.cpop.core.base.exception.ServiceException; +import com.cpop.core.service.RedisService; +import com.cpop.core.utils.SecurityUtils; +import com.cpop.core.utils.SpringUtils; +import com.cpop.core.utils.sql.SqlUtils; +import com.cpop.oam.business.bo.*; +import com.cpop.oam.business.entity.FinanceReimburse; +import com.cpop.oam.business.entity.FinanceReimburseStage; +import com.cpop.oam.business.mapper.FinanceReimburseMapper; +import com.cpop.oam.business.service.FinanceReimburseService; +import com.cpop.oam.business.service.FinanceReimburseStageService; +import com.cpop.oam.business.vo.FinanceReimburseAuditPageVo; +import com.cpop.oam.business.vo.FinanceReimbursePageVo; +import com.cpop.oam.business.vo.ReimbursePersonStatisticVo; +import com.cpop.oam.framework.utils.OamUtils; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.List; + +import static com.cpop.core.base.table.table.SysUserTableDef.SYS_USER; +import static com.cpop.oam.business.entity.table.FinanceReimburseStageTableDef.FINANCE_REIMBURSE_STAGE; +import static com.cpop.oam.business.entity.table.FinanceReimburseTableDef.FINANCE_REIMBURSE; +import static com.cpop.oam.business.entity.table.FinanceReimburseTypeTableDef.FINANCE_REIMBURSE_TYPE; +import static com.cpop.oam.business.entity.table.StaffTableDef.STAFF; + +/** + * 报销记录表 服务层实现。 + * + * @author DB + * @since 2023-09-20 + */ +@Service("financeReimburseService") +public class FinanceReimburseServiceImpl extends ServiceImpl implements FinanceReimburseService { + + /** + * @Description: 财务报销模块-报销分页列表 + * @param bo 请求参数 + * @return: R> + * @Author: DB + * @Date: 2023/5/30 15:44 + **/ + @Override + public Page getFinanceReimbursePage(FinanceReimbursePageBo bo) { + //获取当前登陆用户信息 + LoginUser loginUser = SecurityUtils.getInstance().getLoginUser(); + PageDomain pageDomain = SqlUtils.getInstance().getPageDomain(); + return this.mapper.paginateAs(pageDomain.getPageNum(), pageDomain.getPageSize(), + QueryWrapper.create().select(FINANCE_REIMBURSE.ALL_COLUMNS) + .select(STAFF.NAME.as(FinanceReimbursePageVo::getStaffName)) + .select(FINANCE_REIMBURSE_TYPE.TYPE_NAME.as(FinanceReimbursePageVo::getTypeName)) + .from(FINANCE_REIMBURSE) + .leftJoin(FINANCE_REIMBURSE_TYPE).on(FINANCE_REIMBURSE_TYPE.ID.eq(FINANCE_REIMBURSE.TYPE_ID)) + .leftJoin(STAFF).on(STAFF.ID.eq(FINANCE_REIMBURSE.STAFF_ID)) + .leftJoin(SYS_USER).on(SYS_USER.ID.eq(STAFF.USER_ID)) + //用户id + .where(SYS_USER.ID.eq(loginUser.getUserId())) + //类型 + .and(FINANCE_REIMBURSE.TYPE_ID.eq(bo.getTypeId())) + //状态 + .and(FINANCE_REIMBURSE.STATUS.eq(bo.getStatus())), + FinanceReimbursePageVo.class); + } + + /** + * @Description: 财务报销模块-报销审核分页列表 + * @param bo 请求参数 + * @return: R> + * @Author: DB + * @Date: 2023/5/30 15:44 + **/ + @Override + public Page getReimburseAuditPage(FinanceReimburseAuditPageBo bo) { + PageDomain pageDomain = SqlUtils.getInstance().getPageDomain(); + return this.mapper.paginateAs(pageDomain.getPageNum(), pageDomain.getPageSize(), + QueryWrapper.create().select(FINANCE_REIMBURSE.ALL_COLUMNS) + .select(STAFF.NAME.as(FinanceReimbursePageVo::getStaffName)) + .select(FINANCE_REIMBURSE_TYPE.TYPE_NAME.as(FinanceReimbursePageVo::getTypeName)) + .from(FINANCE_REIMBURSE) + .leftJoin(FINANCE_REIMBURSE_TYPE).on(FINANCE_REIMBURSE_TYPE.ID.eq(FINANCE_REIMBURSE.TYPE_ID)) + .leftJoin(STAFF).on(STAFF.ID.eq(FINANCE_REIMBURSE.STAFF_ID)) + .leftJoin(SYS_USER).on(SYS_USER.ID.eq(STAFF.USER_ID)) + //类型 + .and(FINANCE_REIMBURSE.TYPE_ID.eq(bo.getTypeId())) + //理由 + .and(FINANCE_REIMBURSE.REMARKS.like(bo.getQuery()).or(STAFF.NAME.like(bo.getQuery()))) + //状态 + .and(FINANCE_REIMBURSE.STATUS.eq(bo.getStatus())) + .orderBy(FINANCE_REIMBURSE.CREATE_TIME.asc()), + FinanceReimburseAuditPageVo.class); + } + + /** + * @Description: 修改报销状态 + * @param bo 请求参数 + * @Author: DB + * @Date: 2023/5/10 16:01 + **/ + @Override + public void updateReimburseStatus(ReimburseStatusBo bo) { + List list = this.list(QueryWrapper.create().where(FINANCE_REIMBURSE.ID.in(bo.getIds()))); + if (!list.isEmpty()){ + list.forEach(item->{ + if (item.getStatus() > 1){ + throw new ServiceException("状态超标"); + } + item.setStatus(item.getStatus() + 1); + }); + this.updateBatch(list); + } + } + + /** + * @descriptions 新增报销申请 + * @author DB + * @date 2023/09/21 15:55 + * @param bo 请求参数 + * @return: com.cpop.core.base.R + */ + @Override + public void insertReimburseApplication(ReimburseApplicationBo bo) { + //获取申请员工信息 + OamStaffLoginInfo staffInfo = SpringUtils.getBean(OamUtils.class).getLoginStaffInfo(); + FinanceReimburse financeReimburse = BeanUtils.mapToClass(bo, FinanceReimburse.class); + financeReimburse.setStaffId(staffInfo.getId()) + .setStatus(0); + this.save(financeReimburse); + } + + /** + * @Description: 财务报销模块-个人报销统计 + * @return: R> + * @Author: DB + * @Date: 2023/5/30 15:44 + **/ + @Override + public ReimbursePersonStatisticVo getPersonStatistic() { + //获取用户信息 + LoginUser loginUser = SecurityUtils.getInstance().getLoginUser(); + //读取员工信息 + RedisService redisService = SpringUtils.getBean(RedisService.class); + JSONObject cacheObject = redisService.getCacheObject(UserType.OAM_USER.getKey() + loginUser.getUsername()); + OamStaffLoginInfo loginInfo = cacheObject.getJSONObject("user").toJavaObject(OamStaffLoginInfo.class); + List list = this.list(QueryWrapper.create() + .where(FINANCE_REIMBURSE.STAFF_ID.eq(loginInfo.getId())) + .and(FINANCE_REIMBURSE.STATUS.ne(4))); + //统计 + ReimbursePersonStatisticVo vo = new ReimbursePersonStatisticVo(); + vo.setUnPay(list.stream().filter(s -> s.getStatus() != 3).map(FinanceReimburse::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add)); + vo.setHavePay(list.stream().filter(s -> s.getStatus() == 3).map(FinanceReimburse::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add)); + return vo; + } + + /** + * @descriptions 报销下款 + * @author DB + * @date 2023/09/08 15:20 + * @param bo 请求参数 + * @return: com.jambox.core.base.R + */ + @Override + public void reimbursePay(ReimbursePayBo bo) { + //报销记录 + FinanceReimburse financeReimburse = this.getById(bo.getId()); + BigDecimal price = financeReimburse.getPrice(); + FinanceReimburseStageService stageService = SpringUtils.getBean(FinanceReimburseStageService.class); + //获取已有的报销记录 + List financeReimburseStageList = stageService.list(QueryWrapper.create().where(FINANCE_REIMBURSE_STAGE.FINANCE_REIMBURSE_ID.eq(bo.getId()))); + //有下款记录 + if (!financeReimburseStageList.isEmpty()) { + //已有金额 + BigDecimal amountAvailable = financeReimburseStageList.stream().map(FinanceReimburseStage::getStageAmount).reduce(BigDecimal.ZERO, BigDecimal::add); + if (price.compareTo(amountAvailable.add(bo.getStageAmount())) < 0) { + throw new ServiceException("当前下发金额总和已超过申请金额!"); + } else if (price.compareTo(amountAvailable.add(bo.getStageAmount())) == 0) { + financeReimburse.setStatus(2); + } else { + //下款中 + financeReimburse.setStatus(3); + } + } else { + //单次下发金额 + if (price.compareTo(bo.getStageAmount()) < 0) { + throw new ServiceException("当前下发金额已超过申请金额!"); + } else if (price.compareTo(bo.getStageAmount()) == 0) { + financeReimburse.setStatus(3); + } else { + //下款中 + financeReimburse.setStatus(2); + } + } + FinanceReimburseStage entity = new FinanceReimburseStage(); + BeanUtils.copyBeanProp(entity, bo); + entity.setFinanceReimburseId(bo.getId()) + .setId(null); + stageService.save(entity); + //更新报销记录 + this.updateById(financeReimburse); + } +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/FinanceReimburseStageServiceImpl.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/FinanceReimburseStageServiceImpl.java new file mode 100644 index 0000000..71fb458 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/FinanceReimburseStageServiceImpl.java @@ -0,0 +1,18 @@ +package com.cpop.oam.business.service.impl; + +import com.mybatisflex.spring.service.impl.ServiceImpl; +import com.cpop.oam.business.entity.FinanceReimburseStage; +import com.cpop.oam.business.mapper.FinanceReimburseStageMapper; +import com.cpop.oam.business.service.FinanceReimburseStageService; +import org.springframework.stereotype.Service; + +/** + * 报销阶段表 服务层实现。 + * + * @author DB + * @since 2023-09-26 + */ +@Service("financeReimburseStageService") +public class FinanceReimburseStageServiceImpl extends ServiceImpl implements FinanceReimburseStageService { + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/FinanceReimburseTypeServiceImpl.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/FinanceReimburseTypeServiceImpl.java new file mode 100644 index 0000000..03bc5e6 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/FinanceReimburseTypeServiceImpl.java @@ -0,0 +1,18 @@ +package com.cpop.oam.business.service.impl; + +import com.mybatisflex.spring.service.impl.ServiceImpl; +import com.cpop.oam.business.entity.FinanceReimburseType; +import com.cpop.oam.business.mapper.FinanceReimburseTypeMapper; +import com.cpop.oam.business.service.FinanceReimburseTypeService; +import org.springframework.stereotype.Service; + +/** + * 报销类型表 服务层实现。 + * + * @author DB + * @since 2023-09-20 + */ +@Service("financeReimburseTypeService") +public class FinanceReimburseTypeServiceImpl extends ServiceImpl implements FinanceReimburseTypeService { + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/LoginServiceImpl.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/LoginServiceImpl.java new file mode 100644 index 0000000..2672f31 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/LoginServiceImpl.java @@ -0,0 +1,93 @@ +package com.cpop.oam.business.service.impl; + +import com.mybatisflex.core.query.QueryWrapper; +import com.cpop.common.constant.Constants; +import com.cpop.core.base.entity.LoginUser; +import com.cpop.core.base.entity.loginInfo.OamStaffLoginInfo; +import com.cpop.core.service.RedisService; +import com.cpop.core.utils.SecurityUtils; +import com.cpop.core.utils.SpringUtils; +import com.cpop.oam.business.entity.Menu; +import com.cpop.oam.business.service.LoginService; +import com.cpop.oam.business.service.MenuService; +import com.cpop.oam.business.vo.LoginUserInfoVo; +import com.cpop.oam.business.vo.MenuRouteVo; +import com.cpop.oam.framework.utils.OamUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +import static com.cpop.oam.business.entity.table.MenuTableDef.MENU; +import static com.cpop.oam.business.entity.table.RoleMenuTableDef.ROLE_MENU; +import static com.cpop.oam.business.entity.table.RoleTableDef.ROLE; + +/** + * @author DB + * @createTime 2023/09/10 11:19 + * @description + */ +@Service("oamLoginService") +public class LoginServiceImpl implements LoginService { + + @Autowired + private RedisService redisService; + + @Autowired + private MenuService menuService; + + /** + * @author LOST.yuan + * @Description 获取用户信息 + * @date 23:01 2022/9/26 + * @return {@link String} + **/ + @Override + public LoginUserInfoVo getUserInfo() { + //获取当前登录用户信息 + LoginUser loginUser = SecurityUtils.getInstance().getLoginUser(); + //获取申请员工信息 + OamStaffLoginInfo staffInfo = SpringUtils.getBean(OamUtils.class).getLoginStaffInfo(); + return new LoginUserInfoVo() + .setUserId(loginUser.getUserId()) + .setUsername(loginUser.getUsername()) + .setRealName(staffInfo.getName()) + .setAvatar(staffInfo.getAvatar()) + //TODO:不同用户根页面不一样,可能后面调整 + .setHomePath(""); + } + + /** + * @author LOST.yuan + * @Description 获取权限码 + * @date 17:30 2022/10/19 + * @return {@link List} + **/ + @Override + public List getPermCode() { + //获取当前用户所属角色以及菜单信息 + LoginUser loginUser = SecurityUtils.getInstance().getLoginUser(); + OamStaffLoginInfo staffInfo = SpringUtils.getBean(OamUtils.class).getLoginStaffInfo(); + if (Constants.SUPER_ADMIN.equals(loginUser.getUsername())){ + return new ArrayList(Collections.singleton(Constants.ALL_PERMISSION)); + } + List list = menuService.list(QueryWrapper.create() + .leftJoin(ROLE_MENU).on(ROLE_MENU.MENU_ID.eq(MENU.ID)) + .leftJoin(ROLE).on(ROLE.ID.eq(ROLE_MENU.ROLE_ID)) + .where(MENU.TYPE.in(1, 2)) + .and(MENU.PERMISSION.ne("")) + .and(ROLE.ID.eq(staffInfo.getRoleId()))); + return list.stream().map(Menu::getPermission).collect(Collectors.toList()); + } + + /** + * 获取菜单列表 + */ + @Override + public List getOamMenuList() { + return menuService.getOamMenuList(); + } +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/MenuServiceImpl.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/MenuServiceImpl.java new file mode 100644 index 0000000..69a5b85 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/MenuServiceImpl.java @@ -0,0 +1,288 @@ +package com.cpop.oam.business.service.impl; + +import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.spring.service.impl.ServiceImpl; +import com.cpop.common.constant.Constants; +import com.cpop.common.utils.StringUtils; +import com.cpop.common.utils.bean.BeanUtils; +import com.cpop.core.base.entity.LoginUser; +import com.cpop.core.base.entity.loginInfo.OamStaffLoginInfo; +import com.cpop.core.utils.SecurityUtils; +import com.cpop.core.utils.SpringUtils; +import com.cpop.oam.business.bo.MenuBo; +import com.cpop.oam.business.bo.MenuListBo; +import com.cpop.oam.business.entity.Menu; +import com.cpop.oam.business.mapper.MenuMapper; +import com.cpop.oam.business.service.MenuService; +import com.cpop.oam.business.vo.MenuRouteVo; +import com.cpop.oam.business.vo.MenuVo; +import com.cpop.oam.framework.utils.OamUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +import static com.cpop.oam.business.entity.table.MenuTableDef.MENU; +import static com.cpop.oam.business.entity.table.RoleMenuTableDef.ROLE_MENU; +import static com.cpop.oam.business.entity.table.RoleTableDef.ROLE; + +/** + * 系统菜单表 服务层实现。 + * + * @author DB + * @since 2023-09-07 + */ +@Service("oamMenuService") +public class MenuServiceImpl extends ServiceImpl implements MenuService { + + /** + * @descriptions 获取系统菜单树列表 + * @author DB + * @date 2023/09/07 15:53 + * @param bo 请求参数 + * @return java.util.List + */ + @Override + public List getOamMenuTreeList(MenuListBo bo) { + return buildMenuTree(this.listAs(QueryWrapper.create() + .where(MENU.NAME.isNull().or(MENU.NAME.ne(Constants.HIDE_MENU))) + //状态不为空 + .and(MENU.STATUS.eq(bo.getStatus())) + //标题不为空 + .and(MENU.TITLE.like(bo.getTitle())) + .orderBy(MENU.ORDER_NO.asc()), MenuVo.class)); + } + + /** + * @descriptions 构建菜单树 + * @author DB + * @date 2023/09/07 16:36 + * @param menus 菜单集合 + * @return java.util.List + */ + private List buildMenuTree(List menus) { + List returnList = new ArrayList(); + if (menus.isEmpty()) { + return menus; + } + //构建根节点 + List tempList = menus.stream() + .filter(s -> StringUtils.isBlank(s.getParentMenu())).collect(Collectors.toList()); + for (MenuVo menu : tempList) { + MenuVo menuVo = recursionFn(menus, menu); + returnList.add(menuVo); + } + return returnList; + } + + /** + * @descriptions 递归列表 + * @author DB + * @date 2023/09/07 16:36 + * @param list 递归集合 + * @param menu 菜单 + * @return com.jambox.OAMtem.business.vo.OAMMenuVo + */ + private MenuVo recursionFn(List list, MenuVo menu) { + // 得到子节点列表 + List childList = new ArrayList(); + for (MenuVo menuNode : list) { + if (null != menuNode.getParentMenu() && menuNode.getParentMenu().equals(menu.getId())) { + childList.add(recursionFn(list, menuNode)); + } + } + if (!childList.isEmpty()){ + menu.setChildren(childList); + } + return menu; + } + + /** + * @descriptions 获取目录与菜单树 + * @author DB + * @date 2023/09/07 17:42 + * @return java.util.List + */ + @Override + public List getDirectoryAndMenuTreeList() { + //只读取启用的菜单 + return buildMenuTree(this.listAs(QueryWrapper.create() + .where(MENU.TYPE.in(0, 1)) + .orderBy(MENU.ORDER_NO.asc()) + , MenuVo.class)); + } + + /** + * @descriptions 新增系统菜单 + * @author DB + * @date 2023/09/07 17:50 + * @param bo 请求参数 + */ + @Override + public void insertOamMenu(MenuBo bo) { + Menu entity = new Menu(); + BeanUtils.copyBeanProp(entity, bo); + //设置菜单名 + if (StringUtils.isNotBlank(bo.getPath())){ + String[] split = bo.getPath().split("/"); + String name = StringUtils.getMethodName(split[split.length - 1].replace("/", "")); + entity.setName(name); + } + //设置组件 + if (StringUtils.isBlank(bo.getComponent())){ + entity.setComponent("LAYOUT"); + } + this.save(entity); + } + + /** + * @Description: 修改系统菜单表 + * @param bo 请求参数 + * @Author: DB + * @Date: 2023/5/10 16:01 + **/ + @Override + public void updateOamMenu(MenuBo bo) { + Menu entity = new Menu(); + BeanUtils.copyBeanProp(entity, bo); + //设置菜单名 + if (StringUtils.isNotBlank(bo.getPath())){ + String[] split = bo.getPath().split("/"); + String toUpperCaseString = split[split.length - 1]; + if (toUpperCaseString.contains(":")) { + toUpperCaseString = split[split.length - 2]; + } + String name = StringUtils.getMethodName(toUpperCaseString.replace("/", "")); + entity.setName(name); + } + //设置组件 + if (StringUtils.isBlank(bo.getComponent())){ + entity.setComponent("LAYOUT"); + } + this.updateById(entity); + } + + /** + * @Description: 删除系统菜单表 + * @param id 主键id + * @Author: DB + * @Date: 2023/5/10 16:01 + **/ + @Override + public void removeOamMenu(String id) { + //查询所有 + List list = this.list(); + //递归获取当前菜单及其下属子菜单 + List removeIds = new ArrayList<>(); + recursionRemove(list, id, removeIds); + removeIds.add(id); + this.removeByIds(removeIds); + } + + /** + * @Description: 递归要删除的菜单集合 + * @param list 菜单集合 + * @param id id + * @param removeIds 删除id集合 + * @Author: DB + * @Date: 2023/5/10 15:27 + **/ + private void recursionRemove(List list, String id, List removeIds) { + //过滤出删除根菜单 + List sonMenu = list.stream().filter(s -> null != s.getParentMenu()&& s.getParentMenu().equals(id)).collect(Collectors.toList()); + if (!sonMenu.isEmpty()) { + sonMenu.forEach(item -> { + recursionRemove(list, item.getId(), removeIds); + removeIds.add(item.getId()); + }); + } + } + + /** + * @descriptions 获取菜单列表 + * @author DB + * @date 2023/09/10 14:06 + * @return java.util.List + */ + @Override + public List getOamMenuList() { + //获取用户信息 + LoginUser user = SecurityUtils.getInstance().getLoginUser(); + //获取申请员工信息 + OamStaffLoginInfo staffInfo = SpringUtils.getBean(OamUtils.class).getLoginStaffInfo(); + //超级管理员 + if (Constants.SUPER_ADMIN.equals(user.getUsername())) { + //获取菜单 + List list = this.listAs(QueryWrapper.create() + .where(MENU.TYPE.in(0, 1)) + .orderBy(MENU.ORDER_NO.asc()), + MenuRouteVo.class); + return buildMenuRouteTree(list); + } else { + return buildMenuRouteTree(this.listAs(QueryWrapper.create() + .select(MENU.ALL_COLUMNS) + .leftJoin(ROLE_MENU).on(ROLE_MENU.MENU_ID.eq(MENU.ID)) + .leftJoin(ROLE).on(ROLE.ID.eq(ROLE_MENU.ROLE_ID)) + .where(MENU.STATUS.eq(1)) + .and(MENU.TYPE.in(0, 1)) + .and(MENU.NAME.ne(Constants.HIDE_MENU)) + .and(ROLE_MENU.ROLE_ID.eq(staffInfo.getRoleId())) + .orderBy(MENU.ORDER_NO.asc()), + MenuRouteVo.class)); + } + } + + /** + * @Description: 构建菜单路由树 + * @param menus 菜单集合 + * @return: List + * @Author: DB + * @Date: 2023/5/11 9:21 + **/ + private List buildMenuRouteTree(List menus) { + if (menus.isEmpty()){ + return menus; + } + //构建内部类 + menus.forEach(item->{ + MenuRouteVo.Meta meta = item.new Meta(); + meta.setIcon(item.getIcon()); + meta.setOrderNo(item.getOrderNo()); + meta.setTitle(item.getTitle()); + meta.setHideMenu(item.getHideMenu()); + item.setMeta(meta); + }); + //构建根节点 + List tempList = menus.stream() + .filter(s -> StringUtils.isBlank(s.getParentMenu())).collect(Collectors.toList()); + List menuRoutes = new ArrayList<>(); + for (MenuRouteVo menu : tempList) { + MenuRouteVo menuVo = recursionMenuRoute(menus, menu); + //设置是否需要隐藏子内部菜单 + menuVo.getMeta().setHideChildrenInMenu(null != menuVo.getChildren() && menuVo.getChildren().size() == 1 && menuVo.getChildren().get(0).getHideMenu()); + menuRoutes.add(menuVo); + } + return BeanUtils.mapToList(menuRoutes, MenuRouteVo.class); + } + + /** + * @Description: 递归列表 + * @param list 菜单集合 + * @param menu 菜单 + * @return: MenuRouteVo + * @Author: DB + * @Date: 2023/5/11 9:22 + **/ + private MenuRouteVo recursionMenuRoute(List list, MenuRouteVo menu) { + // 得到子节点列表 + List childList = new ArrayList(); + for (MenuRouteVo menuNode : list) { + if (StringUtils.isNotBlank(menuNode.getParentMenu()) && menuNode.getParentMenu().equals(menu.getId())) { + childList.add(recursionMenuRoute(list, menuNode)); + } + } + menu.setChildren(childList); + return menu; + } +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/RoleMenuServiceImpl.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/RoleMenuServiceImpl.java new file mode 100644 index 0000000..53f2003 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/RoleMenuServiceImpl.java @@ -0,0 +1,18 @@ +package com.cpop.oam.business.service.impl; + +import com.mybatisflex.spring.service.impl.ServiceImpl; +import com.cpop.oam.business.entity.RoleMenu; +import com.cpop.oam.business.mapper.RoleMenuMapper; +import com.cpop.oam.business.service.RoleMenuService; +import org.springframework.stereotype.Service; + +/** + * 系统-角色-菜单表 服务层实现。 + * + * @author DB + * @since 2023-09-10 + */ +@Service("oamRoleMenuService") +public class RoleMenuServiceImpl extends ServiceImpl implements RoleMenuService { + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/RoleServiceImpl.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/RoleServiceImpl.java new file mode 100644 index 0000000..076da45 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/RoleServiceImpl.java @@ -0,0 +1,154 @@ +package com.cpop.oam.business.service.impl; + +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.spring.service.impl.ServiceImpl; +import com.cpop.common.constant.Constants; +import com.cpop.common.utils.StringUtils; +import com.cpop.common.utils.bean.BeanUtils; +import com.cpop.core.base.entity.PageDomain; +import com.cpop.core.utils.SpringUtils; +import com.cpop.core.utils.sql.SqlUtils; +import com.cpop.oam.business.bo.RoleBo; +import com.cpop.oam.business.bo.RolePageBo; +import com.cpop.oam.business.bo.RoleStatusBo; +import com.cpop.oam.business.entity.Role; +import com.cpop.oam.business.entity.RoleMenu; +import com.cpop.oam.business.mapper.RoleMapper; +import com.cpop.oam.business.service.RoleMenuService; +import com.cpop.oam.business.service.RoleService; +import com.cpop.oam.business.vo.RolePageVo; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +import static com.cpop.oam.business.entity.table.RoleMenuTableDef.ROLE_MENU; +import static com.cpop.oam.business.entity.table.RoleTableDef.ROLE; + + +/** + * 系统角色表 服务层实现。 + * + * @author DB + * @since 2023-09-08 + */ +@Service("oamRoleService") +public class RoleServiceImpl extends ServiceImpl implements RoleService { + + /** + * @param bo 请求参数 + * @Description: 查询系统角色表列表 + * @return: PageVo + * @Author: DB + * @Date: 2023/5/10 17:59 + **/ + @Override + public Page selectOamRolePageList(RolePageBo bo) { + PageDomain pageDomain = SqlUtils.getInstance().getPageDomain(); + Page page = this.mapper.paginateAs(pageDomain.getPageNum(), pageDomain.getPageSize(), + QueryWrapper.create() + .select(ROLE.ALL_COLUMNS) + .where(ROLE.ROLE_VALUE.ne(Constants.SUPER_ADMIN_VALUE)) + .and(ROLE.ROLE_NAME.like(bo.getRoleName())) + .and(ROLE.STATUS.eq(bo.getStatus())) + .orderBy(ROLE.ORDER_NO.asc()) + , RolePageVo.class); + if (!page.getRecords().isEmpty()) { + //根据角色查询中间表 + List roleMenuList = SpringUtils.getBean(RoleMenuService.class).list(QueryWrapper.create() + .where(ROLE_MENU.ROLE_ID.in(page.getRecords().stream().map(RolePageVo::getId).collect(Collectors.toSet())))); + page.getRecords().forEach(item -> { + List filterMenuIds = roleMenuList.stream() + .filter(s -> StringUtils.equals(s.getRoleId(), item.getId())) + .map(RoleMenu::getMenuId).collect(Collectors.toList()); + item.setMenuIds(filterMenuIds); + }); + } + return page; + } + + /** + * @param bo 请求参数 + * @Description: 新增角色 + * @return: void + * @Author: DB + * @Date: 2023/5/10 18:07 + **/ + @Override + @Transactional(rollbackFor = Exception.class) + public void insertOamRole(RoleBo bo) { + Role role = BeanUtils.mapToClass(bo, Role.class); + this.save(role); + //将菜单信息录入中间表 + if (!bo.getMenuIds().isEmpty()) { + List roleMenus = new ArrayList<>(); + bo.getMenuIds().forEach(item -> { + RoleMenu roleMenu = new RoleMenu(); + roleMenu.setMenuId(item); + roleMenu.setRoleId(role.getId()); + roleMenus.add(roleMenu); + }); + SpringUtils.getBean(RoleMenuService.class).saveBatch(roleMenus); + } + } + + /** + * @param bo 请求参数 + * @Description: 修改系统角色 + * @return: void + * @Author: DB + * @Date: 2023/5/10 18:07 + **/ + @Override + @Transactional(rollbackFor = Exception.class) + public void updateOamRole(RoleBo bo) { + Role entity = new Role(); + BeanUtils.copyBeanProp(entity, bo); + this.updateById(entity); + //将菜单信息录入中间表 + if (!bo.getMenuIds().isEmpty()) { + //先删后存 + RoleMenuService sysRoleMenuService = SpringUtils.getBean(RoleMenuService.class); + sysRoleMenuService.remove(QueryWrapper.create() + .where(ROLE_MENU.ROLE_ID.eq(entity.getId()))); + List roleMenus = new ArrayList<>(); + bo.getMenuIds().forEach(item -> { + RoleMenu roleMenu = new RoleMenu(); + roleMenu.setMenuId(item); + roleMenu.setRoleId(entity.getId()); + roleMenus.add(roleMenu); + }); + sysRoleMenuService.saveBatch(roleMenus); + } + } + + /** + * @param id 主键 + * @Description: 删除系统角色 + * @return: void + * @Author: DB + * @Date: 2023/5/10 18:07 + **/ + @Transactional(rollbackFor = Exception.class) + @Override + public void removeOamRole(String id) { + this.removeById(id); + //删除相关联菜单 + SpringUtils.getBean(RoleMenuService.class).remove(QueryWrapper.create().where(ROLE_MENU.ROLE_ID.eq(id))); + } + + /** + * @param bo 请求参数 + * @Description: 设置角色状态 + * @return: void + * @Author: DB + * @Date: 2023/5/9 14:13 + **/ + @Override + public void setOamRoleStatus(RoleStatusBo bo) { + this.updateById(BeanUtils.mapToClass(bo, Role.class)); + } +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/StaffServiceImpl.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/StaffServiceImpl.java new file mode 100644 index 0000000..34ad457 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/StaffServiceImpl.java @@ -0,0 +1,333 @@ +package com.cpop.oam.business.service.impl; + +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.core.row.Db; +import com.mybatisflex.core.row.DbChain; +import com.mybatisflex.core.row.Row; +import com.mybatisflex.spring.service.impl.ServiceImpl; +import com.cpop.common.constant.Constants; +import com.cpop.common.utils.StringUtils; +import com.cpop.common.utils.bean.BeanUtils; +import com.cpop.core.base.entity.LoginUser; +import com.cpop.core.base.entity.PageDomain; +import com.cpop.core.base.entity.loginInfo.OamStaffLoginInfo; +import com.cpop.core.base.enums.UserType; +import com.cpop.core.base.exception.ServiceException; +import com.cpop.core.base.table.SysUser; +import com.cpop.core.service.CoreService; +import com.cpop.core.service.RedisService; +import com.cpop.core.utils.*; +import com.cpop.core.utils.sql.SqlUtils; +import com.cpop.core.utils.uuid.IdUtils; +import com.cpop.oam.business.bo.ModifyUserPasswordBo; +import com.cpop.oam.business.bo.StaffBo; +import com.cpop.oam.business.bo.StaffPageBo; +import com.cpop.oam.business.bo.SysUserLogBo; +import com.cpop.oam.business.entity.Staff; +import com.cpop.oam.business.mapper.StaffMapper; +import com.cpop.oam.business.service.StaffService; +import com.cpop.oam.business.vo.StaffInfoVo; +import com.cpop.oam.business.vo.StaffPageVo; +import com.cpop.oam.business.vo.StaffVo; +import com.cpop.oam.business.vo.SysOperationLogVo; +import org.springframework.security.crypto.bcrypt.BCrypt; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.List; + +import static com.cpop.core.base.table.table.SysOperationLogTableDef.SYS_OPERATION_LOG; +import static com.cpop.core.base.table.table.SysUserTableDef.SYS_USER; +import static com.cpop.oam.business.entity.table.RoleTableDef.ROLE; +import static com.cpop.oam.business.entity.table.StaffTableDef.STAFF; + +/** + * 员工表 服务层实现。 + * + * @author DB + * @since 2023-09-07 + */ +@Service("oamStaffService") +public class StaffServiceImpl extends ServiceImpl implements StaffService { + + /** + * @descriptions 查询员工分页列表 + * @author DB + * @date 2023/09/07 18:11 + * @param bo 请求参数 + * @return com.mybatisflex.core.paginate.Page + */ + @Override + public Page getStaffPageList(StaffPageBo bo) { + PageDomain pageDomain = SqlUtils.getInstance().getPageDomain(); + return this.mapper.paginateAs(pageDomain.getPageNum(), pageDomain.getPageSize() + , QueryWrapper.create() + .select(STAFF.ALL_COLUMNS) + .select(SYS_USER.ALL_COLUMNS,SYS_USER.ID.as("user_id")) + .select(ROLE.ROLE_NAME,ROLE.ID.as("roleId")) + .leftJoin(SYS_USER).on(SYS_USER.ID.eq(STAFF.USER_ID)) + .leftJoin(ROLE).on(ROLE.ID.eq(STAFF.ROLE_ID)) + //姓名 + .and(STAFF.NAME.like(bo.getName())) + //员工类型 + .and(STAFF.STAFF_TYPE.eq(bo.getStaffType())) + //部门id + .and(STAFF.DEPT_ID.eq(bo.getDeptId())) + .and(SYS_USER.USER_NAME.ne(Constants.SUPER_ADMIN)) + , StaffPageVo.class); + } + + /** + * @descriptions 新增员工 + * @author DB + * @date 2023/09/08 14:12 + * @param bo 请求参数 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void insertStaff(StaffBo bo) { + //先添加用户信息 + SysUser sysUser; + if (validatedUserInfo(bo)) { + throw new ServiceException(MessageUtils.message("i18n_alert_userOrPhoneOrEmailIsExist")); + } else { + //用户名-手机-邮箱都需要做唯一校验 + sysUser = BeanUtils.mapToClass(bo, SysUser.class); + //解密与重设密码 + decryptAndResetPasswords(sysUser); + sysUser.setId(IdUtils.fastSimpleUUID()); + //获取当前创建人员信息 + LoginUser loginUser = SecurityUtils.getInstance().getLoginUser(); + sysUser.setCreateUserId(loginUser.getUserId()); + sysUser.setUpdateUserId(loginUser.getUserId()); + sysUser.setUserType(UserType.OAM_USER); + SpringUtils.getBean(CoreService.class).insertSysUser(sysUser); + } + //再添加员工信息 + Staff sysStaff = BeanUtils.mapToClass(bo, Staff.class); + sysStaff.setUserId(sysUser.getId()); + this.save(sysStaff); + } + + /** + * @Description: 用户名-手机-邮箱都需要做唯一校验 + * @param bo 请求参数 + * @return Boolean 通过/未通过 + * @Author DB + * @Date: 2023/5/11 11:02 + **/ + private Boolean validatedUserInfo(StaffBo bo) { + long count = this.count(QueryWrapper.create() + //用户名 + .where(SYS_USER.USER_NAME.eq(bo.getUserName())) + //手机号 + .or(SYS_USER.PHONE_NUMBER.eq(bo.getPhoneNumber())) + //TODO:邮箱暂时不做校验 + //.or(SYS_USER.EMAIL.eq(bo.getEmail())) + .from(SYS_USER)); + if (StringUtils.isNotBlank(bo.getUserId())) { + return count > 1; + } else { + return count > 0; + } + } + + /** + * @Description: 解密与重设密码 + * @param sysUser 系统用户 + * @Author: DB + * @Date: 2023/5/11 11:03 + **/ + private void decryptAndResetPasswords(SysUser sysUser) { + //先用rsa解密 + String password = SpringUtils.getBean(RsaUtils.class).decrypt(sysUser.getPassword()); + //再加密 + sysUser.setPassword(SpringUtils.getBean(PasswordEncoder.class).encode(password)); + } + + /** + * @descriptions 修改员工 + * @author DB + * @date 2023/09/08 15:21 + * @param bo 请求参数 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void updateStaff(StaffBo bo) { + //先修改系统用户信息 用户名-手机-邮箱都需要做唯一校验 + if (validatedUserInfo(bo)) { + throw new ServiceException(MessageUtils.message("i18n_alert_userOrPhoneOrEmailIsExist")); + } else { + SysUser sysUser = BeanUtils.mapToClass(bo, SysUser.class); + sysUser.setId(bo.getUserId()); + //密码在这里不做修改 + sysUser.setPassword(null); + sysUser.setUpdateUserId(SecurityUtils.getInstance().getLoginUser().getUserId()); + sysUser.setUpdateTime(LocalDateTime.now()); + SpringUtils.getBean(CoreService.class).updateSysUser(sysUser); + } + //再修改员工信息 + Staff sysStaff = BeanUtils.mapToClass(bo, Staff.class); + this.updateById(sysStaff); + //获取缓存信息 + RedisService redisService = SpringUtils.getBean(RedisService.class); + LoginUser loginUser = redisService.getCacheObject(UserType.OAM_USER.getKey() + bo.getUserName()); + if (null != loginUser) { + OamStaffLoginInfo staffLoginInfo = BeanUtils.mapToClass(bo, OamStaffLoginInfo.class); + loginUser.setUser(staffLoginInfo); + redisService.setCacheObject(UserType.OAM_USER.getKey() + loginUser.getUsername(), loginUser); + } + } + + /** + * @descriptions 删除员工 + * @author DB + * @date 2023/09/08 17:43 + * @param id 主键 + */ + @Override + public void removeStaffById(String id) { + //先获取员工 + Staff sysStaff = this.getById(id); + if (null == sysStaff) { + throw new ServiceException("获取员工信息失败,请联系相关人员"); + } + //删除用户 + SpringUtils.getBean(CoreService.class).removeSysUserById(sysStaff.getUserId()); + //删除员工 + this.removeById(id); + } + + /** + * @Description: 用户名是否存在 + * @param username 用户名 + * @param id 主键 + * @return: R + * @Author: DB + * @Date: 2023/5/11 10:09 + **/ + @Override + public void isAccountExist(String username, String id) { + if (StringUtils.isBlank(username)){ + return; + } + if (this.count(QueryWrapper.create() + .where(SYS_USER.USER_NAME.eq(username)) + .and(SYS_USER.ID.ne(id))) > 0) { + throw new ServiceException(MessageUtils.message("i18n_alert_userIsExist")); + } + } + + /** + * @Description: 获取员工信息 + * @param id 主键 + * @return: StaffInfoVo + * @Author: DB + * @Date: 2023/5/17 10:36 + **/ + @Override + public StaffInfoVo getStaffInfo(String id) { + return this.getOneAs(QueryWrapper.create() + .select(STAFF.ALL_COLUMNS) + .select(SYS_USER.USER_NAME, SYS_USER.NICK_NAME, SYS_USER.SEX, SYS_USER.PHONE_NUMBER, SYS_USER.ID.as("userId")) + .select(ROLE.ROLE_NAME) + .from(STAFF) + .leftJoin(SYS_USER).on(SYS_USER.ID.eq(STAFF.USER_ID)) + .leftJoin(ROLE).on(ROLE.ID.eq(STAFF.ROLE_ID)) + .where(STAFF.ID.eq(id)) + , StaffInfoVo.class); + } + + /** + * @Description: 获取用户操作日志分页 + * @param bo 请求参数 + * @return: R> + * @Author: DB + * @Date: 2023/5/12 14:30 + **/ + @Override + public Page getUserLogList(SysUserLogBo bo) { + QueryWrapper queryWrapper = QueryWrapper.create(); + queryWrapper.and(SYS_OPERATION_LOG.OPERATION_USER_ID.eq(bo.getUserId())) + .and(SYS_OPERATION_LOG.OPERATION_USER_NAME.like(bo.getOperationUserName())) + .and(SYS_OPERATION_LOG.DEV_IP.eq(bo.getDevIp())) + .and(SYS_OPERATION_LOG.RESULT.eq(bo.getResult())) + .and(SYS_OPERATION_LOG.LEVEL.eq(bo.getLevel())) + .and(SYS_OPERATION_LOG.ACTION_TYPE.eq(bo.getActionType())); + if (StringUtils.isNotBlank(bo.getFieldTime())){ + String[] split = bo.getFieldTime().split(","); + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + queryWrapper.and(SYS_OPERATION_LOG.CREATE_TIME.ge(LocalDateTime.parse(split[0], df))) + .and(SYS_OPERATION_LOG.CREATE_TIME.le(LocalDateTime.parse(split[1], df))); + } + PageDomain pageDomain = SqlUtils.getInstance().getPageDomain(); + Page page = Db.paginate("pp_sys_operation_log", pageDomain.getPageNum(), pageDomain.getPageSize(), queryWrapper); + return page.map(row -> row.toEntity(SysOperationLogVo.class)); + } + + /** + * @Description: 修改系统用户密码 + * @param bo 请求参数 + * @return: AjaxResult + * @Author: DB + * @Date: 2023/5/12 16:00 + **/ + @Override + public void modifyUserPassword(ModifyUserPasswordBo bo) { + //先用rsa解密 + RsaUtils rsaUtils = SpringUtils.getBean(RsaUtils.class); + String oldPassword = rsaUtils.decrypt(bo.getOldPassword()); + //同数据库密码进行比较 + SysUser user = DbChain.table(SYS_USER) + .where(SYS_USER.ID.eq(bo.getUserId())) + .oneAs(SysUser.class); + if (BCrypt.checkpw(oldPassword, user.getPassword())) { + //存入系统 + DbChain.table(SYS_USER) + .set(SYS_USER.PASSWORD,SpringUtils.getBean(PasswordEncoder.class).encode(rsaUtils.decrypt(bo.getNewPassword()))) + .where(SYS_USER.ID.eq(bo.getUserId())) + .update(); + } else { + throw new ServiceException(MessageUtils.message("i18n_alert_oldPasswordIsWrong")); + } + } + + /** + * @Description: 查询服务员工列表 + * @return: R> + * @Author: DB + * @Date: 2023/5/11 17:49 + **/ + @Override + public List getServiceStaffList() { + return SpringUtils.getBean(StaffService.class).listAs(QueryWrapper.create() + .select(STAFF.ID, STAFF.NAME, STAFF.DEPT_ID, STAFF.USER_ID, STAFF.STAFF_TYPE) + .from(STAFF) + .leftJoin(SYS_USER).on(SYS_USER.ID.eq(STAFF.USER_ID)) + .where(STAFF.STAFF_TYPE.eq(1)) + //不查询停用的员工 + .and(SYS_USER.STATUS.eq(true)), + StaffVo.class); + } + + /** + * @Description: 查询技术员工列表 + * @return: R> + * @Author: DB + * @Date: 2023/5/11 17:50 + **/ + @Override + public List getTechnologyStaffList() { + return this.listAs(QueryWrapper.create() + .select(STAFF.ID, STAFF.NAME, STAFF.DEPT_ID, STAFF.USER_ID, STAFF.STAFF_TYPE) + .from(STAFF) + .leftJoin(SYS_USER).on(SYS_USER.ID.eq(STAFF.USER_ID)) + .where(STAFF.STAFF_TYPE.eq(0)) + //不查询停用的员工 + .and(SYS_USER.STATUS.eq(true)), + StaffVo.class); + } +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/TaskDemandServiceImpl.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/TaskDemandServiceImpl.java new file mode 100644 index 0000000..769d362 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/TaskDemandServiceImpl.java @@ -0,0 +1,158 @@ +package com.cpop.oam.business.service.impl; + +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.spring.service.impl.ServiceImpl; +import com.cpop.api.tencent.wxWork.handler.WebHookSendHandler; +import com.cpop.common.utils.StringUtils; +import com.cpop.common.utils.bean.BeanUtils; +import com.cpop.core.base.entity.LoginUser; +import com.cpop.core.base.entity.PageDomain; +import com.cpop.core.base.entity.loginInfo.OamStaffLoginInfo; +import com.cpop.core.base.enums.UserType; +import com.cpop.core.base.exception.ServiceException; +import com.cpop.core.base.table.SysConfig; +import com.cpop.core.service.CoreService; +import com.cpop.core.service.RedisService; +import com.cpop.core.utils.SecurityUtils; +import com.cpop.core.utils.SpringUtils; +import com.cpop.core.utils.sql.SqlUtils; +import com.cpop.oam.business.bo.TaskDemandBo; +import com.cpop.oam.business.bo.TaskDemandPageBo; +import com.cpop.oam.business.entity.Task; +import com.cpop.oam.business.entity.TaskDemand; +import com.cpop.oam.business.mapper.TaskDemandMapper; +import com.cpop.oam.business.service.TaskDemandService; +import com.cpop.oam.business.service.TaskService; +import com.cpop.oam.business.vo.TaskDemandPageVo; +import com.cpop.oam.framework.constant.WebHookKeyConstant; +import com.cpop.oam.framework.enums.OamConfigEnum; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import static com.cpop.jambox.business.entity.table.BrandTableDef.BRAND; +import static com.cpop.jambox.business.entity.table.CampusTableDef.CAMPUS; +import static com.cpop.oam.business.entity.table.StaffTableDef.STAFF; +import static com.cpop.oam.business.entity.table.TaskDemandTableDef.TASK_DEMAND; +import static com.cpop.oam.business.entity.table.TaskTableDef.TASK; + +/** + * OAM-任务-需求表 服务层实现。 + * + * @author DB + * @since 2023-09-18 + */ +@Service("taskDemandService") +public class TaskDemandServiceImpl extends ServiceImpl implements TaskDemandService { + + /** + * @Description: 任务管理-需求管理分页列表 + * @param bo 请求参数 + * @return: R> + * @Author: DB + * @Date: 2023/5/30 15:44 + **/ + @Override + public Page getTaskDemandPage(TaskDemandPageBo bo) { + //分页主体应该是任务 + QueryWrapper queryWrapper = QueryWrapper.create(); + if (null != bo.getTaskStatus()) { + if (bo.getTaskStatus() == 1) { + queryWrapper.and(TASK.TASK_STATUS.in(1, 2, 4)); + } else { + queryWrapper.and(TASK.TASK_STATUS.eq(bo.getTaskStatus())); + } + } else { + queryWrapper.and(TASK.TASK_STATUS.eq(0)); + } + //重新定义列表 + PageDomain pageDomain = SqlUtils.getInstance().getPageDomain(); + return SpringUtils.getBean(TaskService.class).getMapper().paginateAs(pageDomain.getPageNum(), pageDomain.getPageSize(), + queryWrapper.select(TASK.ALL_COLUMNS) + .select(TASK_DEMAND.DEMAND_TYPE.as(TaskDemandPageVo::getDemandType),TASK_DEMAND.RECORD_STAFF_ID,TASK_DEMAND.BRAND_ID,TASK_DEMAND.CAMPUS_ID) + .select(CAMPUS.NAME.as(TaskDemandPageVo::getCampusName)) + .select(BRAND.NAME.as(TaskDemandPageVo::getBrandName)) + .select(STAFF.NAME.as(TaskDemandPageVo::getRecordStaffName)) + .from(TASK) + //任务需求表 + .leftJoin(TASK_DEMAND).on(TASK_DEMAND.TASK_ID.eq(TASK.ID)) + //校区表 + .leftJoin(CAMPUS).on(CAMPUS.ID.eq(TASK_DEMAND.CAMPUS_ID)) + //品牌表 + .leftJoin(BRAND).on(BRAND.ID.eq(CAMPUS.BRAND_ID)) + //员工表 + .leftJoin(STAFF).on(STAFF.ID.eq(TASK_DEMAND.RECORD_STAFF_ID)) + .where(TASK.TASK_TYPE.eq(1)) + .and(TASK.TASK_NAME.like(bo.getTaskName())) + .and(CAMPUS.NAME.like(bo.getCampusName())), + TaskDemandPageVo.class); + } + + /** + * @Description: 任务管理-需求管理-新增需求任务 + * @param bo 请求参数 + * @return: R + * @Author: DB + * @Date: 2023/5/30 16:53 + **/ + @Override + public void insertTaskDemand(TaskDemandBo bo) { + //添加任务 + Task task = BeanUtils.mapToClass(bo, Task.class); + //默认待审核 + task.setTaskStatus(0); + //默认开发中 + task.setTaskItem(0); + TaskService taskService = SpringUtils.getBean(TaskService.class); + taskService.save(task); + //添加需求 + TaskDemand entity = new TaskDemand(); + BeanUtils.copyBeanProp(entity, bo); + entity.setTaskId(task.getId()); + //当前操作员工是否是主要负责人,不是抛出异常 + LoginUser loginUser = SecurityUtils.getInstance().getLoginUser(); + //读取员工信息 + RedisService redisService = SpringUtils.getBean(RedisService.class); + OamStaffLoginInfo loginInfo = redisService.getCacheObject(UserType.OAM_USER.getKey() + loginUser.getUsername()); + entity.setRecordStaffId(loginInfo.getId()); + this.save(entity); + //获取审核管理员手机号 + String auditStaffPhone = redisService.getCacheObject(OamConfigEnum.AUDIT_STAFF_PHONE.getKey()); + if (StringUtils.isBlank(auditStaffPhone)) { + SysConfig sysConfig = SpringUtils.getBean(CoreService.class).selectConfigByKey(OamConfigEnum.AUDIT_STAFF_PHONE.getKey()); + auditStaffPhone = sysConfig.getConfigValue(); + redisService.setCacheObject(OamConfigEnum.AUDIT_STAFF_PHONE.getKey(), auditStaffPhone); + } + if (StringUtils.isNotBlank(auditStaffPhone)) { + //企微通知审核管理员 + List phoneList = new ArrayList(); + phoneList.add(auditStaffPhone); + //同时通知发起人 + if (StringUtils.isNotBlank(loginUser.getUser().getPhoneNumber())) { + phoneList.add(loginUser.getUser().getPhoneNumber()); + } + String demandType; + switch (bo.getDemandType()) { + case 0: + demandType = "轻"; + break; + case 1: + demandType = "缓"; + break; + case 2: + demandType = "急"; + break; + default: + demandType = "重"; + } + try { + SpringUtils.getBean(WebHookSendHandler.class).webHookSendText(WebHookKeyConstant.ORDER_INFO_BOT, phoneList, "==========您有一条新的《" + demandType + "》需求任务需要审核==========", false); + } catch (IOException e) { + throw new ServiceException("发送消息通知失败!"); + } + } + } +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/TaskServiceImpl.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/TaskServiceImpl.java new file mode 100644 index 0000000..089f7de --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/TaskServiceImpl.java @@ -0,0 +1,532 @@ +package com.cpop.oam.business.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.spring.service.impl.ServiceImpl; +import com.cpop.api.tencent.wxWork.handler.WebHookSendHandler; +import com.cpop.common.constant.Constants; +import com.cpop.common.utils.DateUtils; +import com.cpop.common.utils.StringUtils; +import com.cpop.common.utils.bean.BeanUtils; +import com.cpop.core.base.entity.LoginUser; +import com.cpop.core.base.entity.PageDomain; +import com.cpop.core.base.entity.loginInfo.OamStaffLoginInfo; +import com.cpop.core.base.enums.UserType; +import com.cpop.core.base.exception.ServiceException; +import com.cpop.core.base.table.SysConfig; +import com.cpop.core.service.CoreService; +import com.cpop.core.service.RedisService; +import com.cpop.core.utils.SecurityUtils; +import com.cpop.core.utils.SpringUtils; +import com.cpop.core.utils.sql.SqlUtils; +import com.cpop.oam.business.bo.*; +import com.cpop.oam.business.entity.Staff; +import com.cpop.oam.business.entity.Task; +import com.cpop.oam.business.entity.TaskStaffGroup; +import com.cpop.oam.business.mapper.TaskMapper; +import com.cpop.oam.business.service.StaffService; +import com.cpop.oam.business.service.TaskService; +import com.cpop.oam.business.service.TaskStaffGroupService; +import com.cpop.oam.business.vo.PersonTaskPageVo; +import com.cpop.oam.business.vo.TaskAuditPageVo; +import com.cpop.oam.business.vo.TaskMonthStatisticsVo; +import com.cpop.oam.business.vo.TaskPageVo; +import com.cpop.oam.framework.constant.WebHookKeyConstant; +import com.cpop.oam.framework.enums.OamConfigEnum; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; +import java.time.temporal.TemporalAdjusters; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import static com.cpop.oam.business.entity.table.StaffTableDef.STAFF; +import static com.cpop.oam.business.entity.table.TaskStaffGroupTableDef.TASK_STAFF_GROUP; +import static com.cpop.oam.business.entity.table.TaskTableDef.TASK; + +/** + * OAM-任务表 服务层实现。 + * + * @author DB + * @since 2023-09-15 + */ +@Service("oamTaskService") +public class TaskServiceImpl extends ServiceImpl implements TaskService { + + /** + * @Description: 查询OAM-任务分页列表 + * @param bo 请求参数 + * @return: R> + * @Author: DB + * @Date: 2023/5/16 15:24 + **/ + @Override + public Page getTaskPage(TaskPageBo bo) { + PageDomain pageDomain = SqlUtils.getInstance().getPageDomain(); + return this.mapper.paginateAs(pageDomain.getPageNum(),pageDomain.getPageSize(), + QueryWrapper.create() + .where(TASK.TASK_STATUS.eq(1)) + .and(TASK.TASK_TYPE.eq(bo.getTaskType())) + .and(TASK.TASK_RATING.eq(bo.getTaskRating())) + .orderBy(TASK.EXPECTED_COMPLETION_DATE.asc()), + TaskPageVo.class); + } + + /** + * @Description: OAM-新增任务 + * @param bo 请求参数 + * @return: R + * @Author: DB + * @Date: 2023/5/16 15:58 + **/ + @Override + public void insertTask(TaskBo bo) { + Task entity = BeanUtils.mapToClass(bo, Task.class); + //默认待审核 + entity.setTaskStatus(0); + //默认开发中 + entity.setTaskItem(0); + this.save(entity); + //获取审核管理员手机号 + CoreService coreService = SpringUtils.getBean(CoreService.class); + RedisService redisService = SpringUtils.getBean(RedisService.class); + String auditStaffPhone = redisService.getCacheObject(OamConfigEnum.AUDIT_STAFF_PHONE.getKey()); + if (StringUtils.isBlank(auditStaffPhone)) { + SysConfig sysConfig = coreService.selectConfigByKey(OamConfigEnum.AUDIT_STAFF_PHONE.getKey()); + auditStaffPhone = sysConfig.getConfigValue(); + if (StringUtils.isBlank(auditStaffPhone)){ + throw new ServiceException("尚未配置审核管理员信息!"); + } + } + //企微通知审核管理员 + List phoneList = new ArrayList(); + phoneList.add(auditStaffPhone); + try { + SpringUtils.getBean(WebHookSendHandler.class).webHookSendText(WebHookKeyConstant.PRODUCT_BOT, phoneList, "==========您有一条新的迭代任务需要审核==========", false); + } catch (IOException e) { + throw new ServiceException("发送通知失败!"); + } + } + + /** + * @Description: 查询OAM-任务审核分页列表 + * @return: R> + * @Author: DB + * @Date: 2023/5/16 15:24 + **/ + @Override + public Page getTaskAuditPage() { + PageDomain pageDomain = SqlUtils.getInstance().getPageDomain(); + return this.mapper.paginateAs(pageDomain.getPageNum(),pageDomain.getPageSize(), + QueryWrapper.create() + .where(TASK.TASK_STATUS.eq(0)) + .orderBy(TASK.CREATE_TIME.desc()), + TaskAuditPageVo.class); + } + + /** + * @Description: 设置任务审核意见 + * @param bo 请求参数 + * @return: R + * @Author: DB + * @Date: 2023/5/16 17:36 + **/ + @Override + public void setTaskAuditComments(TaskAuditCommentsBo bo) { + Task entity = BeanUtils.mapToClass(bo, Task.class); + this.updateById(entity); + } + + /** + * @Description: 查询OAM-任务审核驳回列表 + * @return: R> + * @Author: DB + * @Date: 2023/5/16 15:24 + **/ + @Override + public Page getTaskRejectPage() { + //获取当前用户信息 + PageDomain pageDomain = SqlUtils.getInstance().getPageDomain(); + return this.mapper.paginateAs(pageDomain.getPageNum(),pageDomain.getPageSize(), + QueryWrapper.create() + .where(TASK.TASK_STATUS.eq(-1)) + .orderBy(TASK.CREATE_TIME.desc()), + TaskAuditPageVo.class); + } + + /** + * @Description: 技术人员领取任务 + * @param id 任务主键 + * @return: R + * @Author: DB + * @Date: 2023/5/16 17:10 + **/ + @Override + public void claimTask(String id) { + //查询任务 + Task task = this.getById(id); + //进行中 + task.setTaskStatus(2); + //接受时间 + task.setTaskReceiptTime(LocalDateTime.now()); + //如果任务没有设置预期完成时间,则按照任务评级进行设置默认 + if (null == task.getExpectedCompletionDate()) { + //获取任务评级 + Integer taskRating = task.getTaskRating(); + Date expectedCompletionDate; + switch (taskRating) { + case 0: + //30天 + expectedCompletionDate = DateUtils.addDateDays(new Date(), 30); + task.setExpectedCompletionDate(new java.sql.Date(expectedCompletionDate.getTime())); + break; + case 1: + //21天 + expectedCompletionDate = DateUtils.addDateDays(new Date(), 21); + task.setExpectedCompletionDate(new java.sql.Date(expectedCompletionDate.getTime())); + break; + case 2: + //15天 + expectedCompletionDate = DateUtils.addDateDays(new Date(), 15); + task.setExpectedCompletionDate(new java.sql.Date(expectedCompletionDate.getTime())); + break; + case 3: + //7天 + expectedCompletionDate = DateUtils.addDateDays(new Date(), 7); + task.setExpectedCompletionDate(new java.sql.Date(expectedCompletionDate.getTime())); + break; + case 4: + //3天 + expectedCompletionDate = DateUtils.addDateDays(new Date(), 3); + task.setExpectedCompletionDate(new java.sql.Date(expectedCompletionDate.getTime())); + break; + default: + //1天 + expectedCompletionDate = DateUtils.addDateDays(new Date(), 1); + task.setExpectedCompletionDate(new java.sql.Date(expectedCompletionDate.getTime())); + break; + } + } + //获取当前用户 + LoginUser loginUser = SecurityUtils.getInstance().getLoginUser(); + if (!Constants.SUPER_ADMIN.equals(loginUser.getUsername())) { + //获取当前员工 + Staff staff = SpringUtils.getBean(StaffService.class) + .getOne(QueryWrapper.create().where(STAFF.USER_ID.eq(loginUser.getUserId()))); + task.setResponsibleStaffId(staff.getId()); + } + this.updateById(task); + //添加主要负责人组 + TaskStaffGroup taskStaffGroup = new TaskStaffGroup(); + int taskRatingPoint; + //评级换绩点 + switch (task.getTaskRating()){ + case 0: + taskRatingPoint = 200; + break; + case 1: + taskRatingPoint = 100; + break; + case 2: + taskRatingPoint = 80; + break; + case 3: + taskRatingPoint = 40; + break; + case 4: + taskRatingPoint = 20; + break; + default: + taskRatingPoint = 10; + } + taskStaffGroup.setStaffId(task.getResponsibleStaffId()) + .setTaskId(id) + .setGradePoint(taskRatingPoint); + SpringUtils.getBean(TaskStaffGroupService.class).save(taskStaffGroup); + } + + /** + * @Description: 查询OAM-个人任务分页列表 + * @return: R> + * @Author: DB + * @Date: 2023/5/16 15:24 + **/ + @Override + public Page getPersonTaskPage(PersonTaskPageBo bo) { + //获取当前登录用户 + LoginUser loginUser = SecurityUtils.getInstance().getLoginUser(); + String staffId = null; + if (Constants.SUPER_ADMIN.equals(loginUser.getUsername())) { + //TODO:超级管理员暂时获取所有任务 + } else { + Staff staff = SpringUtils.getBean(StaffService.class).getOne(QueryWrapper.create() + .where(STAFF.USER_ID.eq(loginUser.getUserId()))); + staffId = staff.getId(); + } + //任务状态 + QueryWrapper queryWrapper = QueryWrapper.create(); + if (null != bo.getTaskStatus()) { + queryWrapper.and(TASK.TASK_STATUS.in(3, 6)); + } else { + //只查询接受与已逾期的任务 + queryWrapper.and(TASK.TASK_STATUS.in(2, 4)); + } + PageDomain pageDomain = SqlUtils.getInstance().getPageDomain(); + return this.mapper.paginateAs(pageDomain.getPageNum(),pageDomain.getPageSize(), + queryWrapper.select(TASK.ALL_COLUMNS) + .select(STAFF.NAME.as(PersonTaskPageVo::getResponsibleStaffName)) + .from(TASK) + //员工表 + .leftJoin(STAFF).on(STAFF.ID.eq(TASK.RESPONSIBLE_STAFF_ID)) + //任务员工组 + .leftJoin(TASK_STAFF_GROUP).on(TASK_STAFF_GROUP.TASK_ID.eq(TASK.ID)) + .where(TASK.TASK_TYPE.in(0,1)) + .and(TASK_STAFF_GROUP.STAFF_ID.eq(staffId)) + .orderBy(TASK.EXPECTED_COMPLETION_DATE.asc()), + PersonTaskPageVo.class); + } + + /** + * @Description: 修改任务进度 + * @param bo 请求参数 + * @return: R + * @Author: DB + * @Date: 2023/5/29 14:58 + **/ + @Override + public void updateTaskItem(TaskItemBo bo) { + isTaskResponsibleStaff(bo.getId()); + this.updateChain().set(TASK.TASK_ITEM, bo.getTaskItem()) + .where(TASK.ID.eq(bo.getId())) + .update(); + } + + /** + * @Description: 修改任务负责人 + * @param bo 请求参数 + * @return: R + * @Author: DB + * @Date: 2023/5/29 14:58 + **/ + @Override + public void updateTaskResponsibleStaff(TransferTaskBo bo) { + isTaskResponsibleStaff(bo.getId()); + //新负责人在不在任务组内 + TaskStaffGroupService taskStaffGroupService = SpringUtils.getBean(TaskStaffGroupService.class); + long count = taskStaffGroupService.count(QueryWrapper.create() + .where(TASK_STAFF_GROUP.TASK_ID.eq(bo.getId())) + .and(TASK_STAFF_GROUP.STAFF_ID.eq(bo.getNewResponsibleStaffId()))); + //获取旧员工绩点 + TaskStaffGroup oldStaffGroup = taskStaffGroupService.getOne(QueryWrapper.create() + .where(TASK_STAFF_GROUP.TASK_ID.eq(bo.getId())) + .and(TASK_STAFF_GROUP.STAFF_ID.eq(bo.getResponsibleStaffId()))); + if (count == 0) { + //不在 + TaskStaffGroup taskStaffGroup = new TaskStaffGroup(); + taskStaffGroup.setStaffId(bo.getNewResponsibleStaffId()) + .setTaskId(bo.getId()) + .setGradePoint(oldStaffGroup.getGradePoint()); + taskStaffGroupService.save(taskStaffGroup); + } else { + //在,直接添加绩点 + TaskStaffGroup newStaffGroup = taskStaffGroupService.getOne(QueryWrapper.create() + .where(TASK_STAFF_GROUP.TASK_ID.eq(bo.getId())) + .and(TASK_STAFF_GROUP.STAFF_ID.eq(bo.getNewResponsibleStaffId()))); + newStaffGroup.setGradePoint(newStaffGroup.getGradePoint() + oldStaffGroup.getGradePoint()); + taskStaffGroupService.updateById(newStaffGroup); + } + taskStaffGroupService.removeById(oldStaffGroup.getId()); + //替换任务负责人 + this.updateChain() + .set(TASK.RESPONSIBLE_STAFF_ID,bo.getNewResponsibleStaffId()) + .where(TASK.ID.eq(bo.getId())) + .update(); + } + + /** + * @Description: 是否是任务主要负责员工 + * @param taskId 任务id + * @return: Boolean + * @Author: DB + * @Date: 2023/5/30 9:48 + **/ + private void isTaskResponsibleStaff(String taskId) { + //获取任务 + Task task = this.getById(taskId); + //当前操作员工是否是主要负责人,不是抛出异常 + LoginUser loginUser = SecurityUtils.getInstance().getLoginUser(); + //读取员工信息 + RedisService redisService = SpringUtils.getBean(RedisService.class); + JSONObject cacheObject = redisService.getCacheObject(UserType.OAM_USER.getKey() + loginUser.getUsername()); + OamStaffLoginInfo loginInfo = cacheObject.getJSONObject("user").toJavaObject(OamStaffLoginInfo.class); + if (!StringUtils.equals(task.getResponsibleStaffId(), loginInfo.getId())) { + throw new ServiceException("当前操作员工不是当前任务主要负责人,不允许操作当前任务!"); + } + } + + /** + * @Description: 完成任务 + * @param id 主键 + * @return: R + * @Author: DB + * @Date: 2023/5/31 16:24 + **/ + @Override + public void finishTask(String id) { + //查询任务相关信息 + Task task = this.getById(id); + if (null == task) { + throw new ServiceException("获取任务失败,请联系相关人员!"); + } + if (task.getTaskItem() != 3){ + throw new ServiceException("当前任务没有归档,请归档后再进行完成操作!"); + } + //判断完成任务日期 + LocalDate now = LocalDate.now(); + LocalDate expectedCompletionDate = task.getExpectedCompletionDate().toLocalDate(); + long day = now.until(expectedCompletionDate, ChronoUnit.DAYS); + //逾期完成 + if (day < 0) { + task.setTaskStatus(6); + } else { + task.setTaskStatus(3); + } + task.setCompletionDate(java.sql.Date.valueOf(now)); + this.updateById(task); + } + + /** + * @Description: 获取月度任务统计列表 + * @param bo 请求参数 + * @return: R> + * @Author: DB + * @Date: 2023/5/15 16:42 + **/ + @Override + public TaskMonthStatisticsVo getTaskMonthStatistics(TaskMonthStatisticsBo bo) { + //员工组绩点信息 + List taskStaffGroups = null; + LoginUser loginUser = SecurityUtils.getInstance().getLoginUser(); + //读取员工信息 + RedisService redisService = SpringUtils.getBean(RedisService.class); + JSONObject cacheObject = redisService.getCacheObject(UserType.OAM_USER.getKey() + loginUser.getUsername()); + OamStaffLoginInfo loginInfo = cacheObject.getJSONObject("user").toJavaObject(OamStaffLoginInfo.class); + QueryWrapper queryWrapper = QueryWrapper.create(); + if (Constants.SUPER_ADMIN.equals(loginUser.getUsername())) { + //TODO:超级管理员暂时获取所有任务 + } else { + //查询个人涉及到的任务 + TaskStaffGroupService taskStaffGroupService = SpringUtils.getBean(TaskStaffGroupService.class); + taskStaffGroups = taskStaffGroupService.list(QueryWrapper.create().where(TASK_STAFF_GROUP.STAFF_ID.eq(loginInfo.getId()))); + if (!taskStaffGroups.isEmpty()) { + queryWrapper.and(TASK.ID.in(taskStaffGroups.stream().map(TaskStaffGroup::getTaskId).collect(Collectors.toSet()))); + } + if (taskStaffGroups.isEmpty()) { + return new TaskMonthStatisticsVo(); + } + } + LocalDate firstDay; + if (StringUtils.isNotBlank(bo.getTaskMoth())) { + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + LocalDate date = LocalDate.parse(bo.getTaskMoth() + "-15", df); + // 获取目标月的第一天 + firstDay = date.with(TemporalAdjusters.firstDayOfMonth()); + } else { + //查询当月 + DateUtils.getDate(); + LocalDate now = LocalDate.now(); + firstDay = now.with(TemporalAdjusters.firstDayOfMonth()); + } + List taskList = this.list(queryWrapper + .select(TASK.ALL_COLUMNS) + .and(TASK.EXPECTED_COMPLETION_DATE.ge(firstDay)) + .orderBy(TASK.EXPECTED_COMPLETION_DATE.asc())); + if (taskList.isEmpty()) { + return new TaskMonthStatisticsVo(); + } + return buildMonthTaskStatistics(taskList, bo, taskStaffGroups); + } + + /** + * @param taskList 任务列表 + * @Description: 构建月统计数据 + * @return: List + * @Author: DB + * @Date: 2023/5/15 17:54 + **/ + private TaskMonthStatisticsVo buildMonthTaskStatistics(List taskList, TaskMonthStatisticsBo bo ,List taskStaffGroups) { + TaskMonthStatisticsVo statisticsVo = new TaskMonthStatisticsVo(); + List vos = new ArrayList<>(); + statisticsVo.setVos(vos); + //统计数据 + //进行中运营人员 + statisticsVo.setInProgress(taskList.stream().filter(s -> 2 == s.getTaskStatus()).count()); + //已完成 + Set finishTaskSet = taskList.stream().filter(s -> 3 == s.getTaskStatus()).map(Task::getId).collect(Collectors.toSet()); + statisticsVo.setHaveCompleted(Long.parseLong(String.valueOf(finishTaskSet.size()))); + //已逾期 + statisticsVo.setOverdue(taskList.stream().filter(s -> 4 == s.getTaskStatus()).count()); + //暂停 + statisticsVo.setPause(taskList.stream().filter(s -> 5 == s.getTaskStatus()).count()); + //逾期完成 + statisticsVo.setOverdueCompletion(taskList.stream().filter(s -> 6 == s.getTaskStatus()).count()); + //逾期完成 + Set overdueCompletionSet = taskList.stream().filter(s -> 6 == s.getTaskStatus()).map(Task::getId).collect(Collectors.toSet()); + if (null != taskStaffGroups){ + //统计绩点(计算已完成的和逾期完成) + Long finishGpa = statisticalGPA(taskStaffGroups.stream().filter(s -> finishTaskSet.contains(s.getTaskId())).collect(Collectors.toList())); + Long overdueCompletionGpa = statisticalGPA(taskStaffGroups.stream().filter(s -> overdueCompletionSet.contains(s.getTaskId())).collect(Collectors.toList())); + statisticsVo.setGpaOfTheMonth(finishGpa + overdueCompletionGpa); + } + List allTheDateOfMonth; + //有传入月份 + if (StringUtils.isNotBlank(bo.getTaskMoth())) { + allTheDateOfMonth = DateUtils.getAllTheDateOfTheMonth(DateUtils.parseDate(bo.getTaskMoth() + "-15")); + } else { + //获取当月日期数组并遍历 + allTheDateOfMonth = DateUtils.getAllTheDateOfTheMonth(new Date()); + } + allTheDateOfMonth.forEach(item -> { + LocalDate localDate = item.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + List taskNames = new ArrayList<>(); + TaskMonthStatisticsVo.DataStatisticsVo dataStatisticsVo = statisticsVo.new DataStatisticsVo(); + //如果日期大于等于接受任务日期,并且小于等于预期完成日期,则插入 + taskList.forEach(task -> { + //接受时间 + LocalDate date = task.getTaskReceiptTime().toLocalDate(); + if (localDate.compareTo(date) >= 0 && localDate.compareTo(task.getExpectedCompletionDate().toLocalDate()) <= 0){ + taskNames.add(task.getTaskName()); + } + }); + dataStatisticsVo.setDate(localDate); + dataStatisticsVo.setTaskNames(taskNames); + statisticsVo.getVos().add(dataStatisticsVo); + }); + return statisticsVo; + } + + /** + * @Description: 统计绩点 + * @param taskStaffGroups 绩点列表 + * @return: Long + * @Author: DB + * @Date: 2023/5/29 18:24 + **/ + private Long statisticalGPA(List taskStaffGroups) { + //获取任务 + if (null != taskStaffGroups) { + return taskStaffGroups.stream().mapToLong(TaskStaffGroup::getGradePoint).sum(); + } else { + return 0L; + } + } +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/TaskStaffGroupServiceImpl.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/TaskStaffGroupServiceImpl.java new file mode 100644 index 0000000..f1be842 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/TaskStaffGroupServiceImpl.java @@ -0,0 +1,223 @@ +package com.cpop.oam.business.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.spring.service.impl.ServiceImpl; +import com.cpop.api.tencent.wxWork.handler.WebHookSendHandler; +import com.cpop.common.utils.StringUtils; +import com.cpop.common.utils.bean.BeanUtils; +import com.cpop.core.base.entity.LoginUser; +import com.cpop.core.base.entity.loginInfo.OamStaffLoginInfo; +import com.cpop.core.base.enums.UserType; +import com.cpop.core.base.exception.ServiceException; +import com.cpop.core.service.RedisService; +import com.cpop.core.utils.SecurityUtils; +import com.cpop.core.utils.SpringUtils; +import com.cpop.oam.business.bo.TaskStaffGroupBo; +import com.cpop.oam.business.bo.TaskStaffGroupListBo; +import com.cpop.oam.business.entity.Task; +import com.cpop.oam.business.entity.TaskStaffGroup; +import com.cpop.oam.business.mapper.TaskStaffGroupMapper; +import com.cpop.oam.business.service.StaffService; +import com.cpop.oam.business.service.TaskService; +import com.cpop.oam.business.service.TaskStaffGroupService; +import com.cpop.oam.business.vo.StaffInfoVo; +import com.cpop.oam.business.vo.TaskStaffGroupVo; +import com.cpop.oam.framework.constant.WebHookKeyConstant; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import static com.cpop.oam.business.entity.table.StaffTableDef.STAFF; +import static com.cpop.oam.business.entity.table.TaskStaffGroupTableDef.TASK_STAFF_GROUP; + +/** + * OAM-任务-关联员工任务组表 服务层实现。 + * + * @author DB + * @since 2023-09-18 + */ +@Service("taskStaffGroupService") +public class TaskStaffGroupServiceImpl extends ServiceImpl implements TaskStaffGroupService { + + /** + * @Description: 查询OAM-任务成员组列表 + * @return: R> + * @Author: DB + * @Date: 2023/5/16 15:24 + **/ + @Override + public List getTaskStaffGroupList(TaskStaffGroupListBo bo) { + return this.listAs(QueryWrapper.create() + .select(TASK_STAFF_GROUP.ALL_COLUMNS) + .select(STAFF.NAME.as(TaskStaffGroupVo::getStaffName)) + .from(TASK_STAFF_GROUP) + .leftJoin(STAFF).on(STAFF.ID.eq(TASK_STAFF_GROUP.STAFF_ID)) + .where(TASK_STAFF_GROUP.TASK_ID.eq(bo.getTaskId())), + TaskStaffGroupVo.class); + } + + /** + * @Description: 新增任务员工组 + * @param bo 请求参数 + * @return: R + * @Author: DB + * @Date: 2023/5/16 15:58 + **/ + @Override + @Transactional(rollbackFor = Exception.class) + public void insertTaskStaffGroup(TaskStaffGroupBo bo) { + //获取任务 + TaskService taskService = SpringUtils.getBean(TaskService.class); + Task task = taskService.getById(bo.getTaskId()); + //当前操作员工是否是主要负责人,不是抛出异常 + LoginUser loginUser = SecurityUtils.getInstance().getLoginUser(); + //读取员工信息 + RedisService redisService = SpringUtils.getBean(RedisService.class); + JSONObject cacheObject = redisService.getCacheObject(UserType.OAM_USER.getKey() + loginUser.getUsername()); + OamStaffLoginInfo loginInfo = cacheObject.getJSONObject("user").toJavaObject(OamStaffLoginInfo.class); + if (!StringUtils.equals(task.getResponsibleStaffId(), loginInfo.getId())) { + throw new ServiceException("当前操作员工不是当前任务主要负责人,不允许操作当前任务!"); + } + //查询当前添加的员工是否存在在此任务中 + long count = this.count(QueryWrapper.create() + .where(TASK_STAFF_GROUP.TASK_ID.eq(bo.getTaskId())) + .and(TASK_STAFF_GROUP.STAFF_ID.eq(bo.getStaffId()))); + if (count > 0) { + throw new ServiceException("当前员工已存在任务中,请添加其他员工或调整此员工绩点"); + } + //获取此任务下关联的主要负责人信息 + TaskStaffGroup responsibleStaff = this.getOne(QueryWrapper.create() + .where(TASK_STAFF_GROUP.TASK_ID.eq(bo.getTaskId())) + .and(TASK_STAFF_GROUP.STAFF_ID.eq(task.getResponsibleStaffId()))); + int balance = responsibleStaff.getGradePoint() - bo.getGradePoint(); + if (balance < 0) { + throw new ServiceException("主要负责人绩点不足,请重新调整!"); + } else { + responsibleStaff.setGradePoint(responsibleStaff.getGradePoint() - bo.getGradePoint()); + } + //存入数据 + TaskStaffGroup taskStaffGroup = BeanUtils.mapToClass(bo, TaskStaffGroup.class); + this.save(taskStaffGroup); + this.updateById(responsibleStaff); + //企微通知绩点调整人员 + List phoneList = new ArrayList(); + phoneList.add(loginInfo.getPhoneNumber()); + //获取新增员工信息 + StaffInfoVo staffInfo = SpringUtils.getBean(StaffService.class).getStaffInfo(bo.getStaffId()); + phoneList.add(staffInfo.getPhoneNumber()); + try { + SpringUtils.getBean(WebHookSendHandler.class).webHookSendText(WebHookKeyConstant.PRODUCT_BOT, phoneList, loginInfo.getName() + "您的绩点调整为" + responsibleStaff.getGradePoint() + + "\n" + staffInfo.getName() + "您新加入任务:" + task.getTaskName() + "绩点为:" + bo.getGradePoint(), false); + } catch (IOException e) { + throw new ServiceException("发送通知失败!"); + } + } + + /** + * @Description: 修改员工任务绩点 + * @param bo 请求参数 + * @return: R + * @Author: DB + * @Date: 2023/5/29 11:48 + **/ + @Override + public void updateStaffGradePoint(TaskStaffGroupBo bo) { + //获取任务主负责人相关绩点 + TaskService taskService = SpringUtils.getBean(TaskService.class); + Task task = taskService.getById(bo.getTaskId()); + if (null == task){ + throw new ServiceException("获取任务失败!请联系相关人员!"); + } + //当前操作员工是否是主要负责人,不是抛出异常 + LoginUser loginUser = SecurityUtils.getInstance().getLoginUser(); + //读取员工信息 + RedisService redisService = SpringUtils.getBean(RedisService.class); + JSONObject cacheObject = redisService.getCacheObject(UserType.OAM_USER.getKey() + loginUser.getUsername()); + OamStaffLoginInfo loginInfo = cacheObject.getJSONObject("user").toJavaObject(OamStaffLoginInfo.class); + if (!StringUtils.equals(task.getResponsibleStaffId(), loginInfo.getId())) { + throw new ServiceException("当前操作员工不是当前任务主要负责人,不允许操作当前任务!"); + } + if (StringUtils.equals(bo.getStaffId(), task.getResponsibleStaffId())) { + throw new ServiceException("不允许直接修改主要负责人绩点"); + } + //获取此任务下关联的主要负责人信息 + TaskStaffGroup responsibleStaffTaskInfo = this.getOne(QueryWrapper.create() + .where(TASK_STAFF_GROUP.TASK_ID.eq(bo.getTaskId())) + .and(TASK_STAFF_GROUP.STAFF_ID.eq(task.getResponsibleStaffId()))); + //自身原绩点 + TaskStaffGroup oldStaffTaskInfo = this.getById(bo.getId()); + //增加 + if (bo.getGradePoint() > oldStaffTaskInfo.getGradePoint()) { + //判断主负责人绩点够不够减 + if (responsibleStaffTaskInfo.getGradePoint() < (bo.getGradePoint() - oldStaffTaskInfo.getGradePoint())){ + throw new ServiceException("当前主负责人绩点不够,请重新调整!"); + } + //添加的绩点 + int addGradePoint = bo.getGradePoint() - oldStaffTaskInfo.getGradePoint(); + responsibleStaffTaskInfo.setGradePoint(responsibleStaffTaskInfo.getGradePoint() - addGradePoint); + //更新主负责人绩点 + this.updateById(responsibleStaffTaskInfo); + } else { + //减少的绩点 + int reduceGradePoint = oldStaffTaskInfo.getGradePoint()-bo.getGradePoint(); + responsibleStaffTaskInfo.setGradePoint(responsibleStaffTaskInfo.getGradePoint() + reduceGradePoint); + //更新主负责人绩点 + this.updateById(responsibleStaffTaskInfo); + } + //更新绩点 + this.updateChain().set(TASK_STAFF_GROUP.GRADE_POINT, bo.getGradePoint()) + .where(TASK_STAFF_GROUP.TASK_ID.eq(bo.getTaskId())) + .and(TASK_STAFF_GROUP.STAFF_ID.eq(bo.getStaffId())) + .update(); + //企微通知绩点调整人员 + List phoneList = new ArrayList(); + phoneList.add(loginInfo.getPhoneNumber()); + //获取新增员工信息 + StaffInfoVo staffInfo = SpringUtils.getBean(StaffService.class).getStaffInfo(bo.getStaffId()); + phoneList.add(staffInfo.getPhoneNumber()); + try { + SpringUtils.getBean(WebHookSendHandler.class).webHookSendText(WebHookKeyConstant.PRODUCT_BOT, phoneList, loginInfo.getName() + "您的绩点调整为" + responsibleStaffTaskInfo.getGradePoint() + + "\n" + staffInfo.getName() + "您的绩点调整为:" + bo.getGradePoint(), false); + } catch (IOException e) { + throw new ServiceException("发送通知失败!"); + } + } + + /** + * @Description: 删除成员组 + * @param id 主键 + * @return: R + * @Author: DB + * @Date: 2023/5/29 14:18 + **/ + @Override + public void removeTaskStaffGroupById(String id) { + //获取任务 + TaskStaffGroup taskStaffGroup = this.getById(id); + TaskService taskService = SpringUtils.getBean(TaskService.class); + Task task = taskService.getById(taskStaffGroup.getTaskId()); + //当前操作员工是否是主要负责人,不是抛出异常 + LoginUser loginUser = SecurityUtils.getInstance().getLoginUser(); + //读取员工信息 + RedisService redisService = SpringUtils.getBean(RedisService.class); + OamStaffLoginInfo loginInfo = redisService.getCacheObject(UserType.OAM_USER.getKey() + loginUser.getUsername()); + if (!StringUtils.equals(task.getResponsibleStaffId(), loginInfo.getId())) { + throw new ServiceException("当前操作员工不是当前任务主要负责人,不允许操作当前任务!"); + } + //不允许删除主要负责人 + if (StringUtils.equals(taskStaffGroup.getStaffId(),task.getResponsibleStaffId())){ + throw new ServiceException("任务主要负责人不允许删除!"); + } + //添加绩点给主要负责人 + TaskStaffGroup responsibleStaffInfo = this.getOne(QueryWrapper.create() + .where(TASK_STAFF_GROUP.TASK_ID.eq(taskStaffGroup.getTaskId())) + .and(TASK_STAFF_GROUP.STAFF_ID.eq(task.getResponsibleStaffId()))); + responsibleStaffInfo.setGradePoint(responsibleStaffInfo.getGradePoint() + taskStaffGroup.getGradePoint()); + this.updateById(responsibleStaffInfo); + this.removeById(id); + } +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/TaskWorkOrderRecordServiceImpl.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/TaskWorkOrderRecordServiceImpl.java new file mode 100644 index 0000000..8a69850 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/TaskWorkOrderRecordServiceImpl.java @@ -0,0 +1,51 @@ +package com.cpop.oam.business.service.impl; + +import com.mybatisflex.spring.service.impl.ServiceImpl; +import com.cpop.api.tencent.wxWork.handler.WebHookSendHandler; +import com.cpop.common.utils.bean.BeanUtils; +import com.cpop.core.base.exception.ServiceException; +import com.cpop.core.utils.SpringUtils; +import com.cpop.oam.business.dto.TaskWorkOrderRecordDto; +import com.cpop.oam.business.entity.TaskWorkOrderRecord; +import com.cpop.oam.business.mapper.TaskWorkOrderRecordMapper; +import com.cpop.oam.business.service.TaskWorkOrderRecordService; +import com.cpop.oam.framework.constant.WebHookKeyConstant; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/** + * 任务-工单-记录表 服务层实现。 + * + * @author DB + * @since 2023-09-18 + */ +@Service("taskWorkOrderRecordService") +public class TaskWorkOrderRecordServiceImpl extends ServiceImpl implements TaskWorkOrderRecordService { + + /** + * @descriptions 新增任务-工单-记录 + * @author DB + * @date 2023/09/18 17:31 + * @param bo 请求参数 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void insertTaskWorkOrderRecord(TaskWorkOrderRecordDto bo) { + TaskWorkOrderRecord entity = new TaskWorkOrderRecord(); + BeanUtils.copyBeanProp(entity, bo); + this.save(entity); + //发送企业微信信息通知 + List phoneList = new ArrayList(); + phoneList.add(bo.getResponsibleStaffPhone()); + phoneList.add(bo.getRecordStaffPhone()); + try { + SpringUtils.getBean(WebHookSendHandler.class).webHookSendText(WebHookKeyConstant.ORDER_INFO_BOT, phoneList, "有新的工单信息请注意回复\n" + bo.getRecordText(), false); + } catch (IOException e) { + throw new ServiceException("发送消息通知失败!"); + } + } +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/TaskWorkOrderServiceImpl.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/TaskWorkOrderServiceImpl.java new file mode 100644 index 0000000..9fa0c3f --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/TaskWorkOrderServiceImpl.java @@ -0,0 +1,378 @@ +package com.cpop.oam.business.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.spring.service.impl.ServiceImpl; +import com.cpop.api.tencent.wxWork.handler.WebHookSendHandler; +import com.cpop.common.utils.DateUtils; +import com.cpop.common.utils.bean.BeanUtils; +import com.cpop.core.base.entity.LoginUser; +import com.cpop.core.base.entity.PageDomain; +import com.cpop.core.base.entity.loginInfo.OamStaffLoginInfo; +import com.cpop.core.base.enums.UserType; +import com.cpop.core.base.exception.ServiceException; +import com.cpop.core.service.RedisService; +import com.cpop.core.utils.QuartzUtils; +import com.cpop.core.utils.SecurityUtils; +import com.cpop.core.utils.SpringUtils; +import com.cpop.core.utils.sql.SqlUtils; +import com.cpop.oam.business.bo.PauseWorkOrderBo; +import com.cpop.oam.business.bo.TaskWorkOrderBo; +import com.cpop.oam.business.bo.TaskWorkOrderPageBo; +import com.cpop.oam.business.bo.TaskWorkOrderRecordBo; +import com.cpop.oam.business.dto.TaskWorkOrderRecordDto; +import com.cpop.oam.business.entity.*; +import com.cpop.oam.business.mapper.TaskWorkOrderMapper; +import com.cpop.oam.business.service.*; +import com.cpop.oam.business.vo.StaffInfoVo; +import com.cpop.oam.business.vo.TaskWorkOrderPageVo; +import com.cpop.oam.business.vo.TaskWorkOrderRecordListVo; +import com.cpop.oam.framework.constant.WebHookKeyConstant; +import com.cpop.oam.framework.enums.QuartzEnums; +import com.cpop.oam.framework.tasks.WorkOrderOvertimeTask; +import org.quartz.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.io.IOException; +import java.sql.Date; +import java.text.ParseException; +import java.time.Duration; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + +import static com.cpop.core.base.table.table.SysUserTableDef.SYS_USER; +import static com.cpop.jambox.business.entity.table.BrandTableDef.BRAND; +import static com.cpop.jambox.business.entity.table.CampusTableDef.CAMPUS; +import static com.cpop.oam.business.entity.table.DutyTableDef.DUTY; +import static com.cpop.oam.business.entity.table.StaffTableDef.STAFF; +import static com.cpop.oam.business.entity.table.TaskStaffGroupTableDef.TASK_STAFF_GROUP; +import static com.cpop.oam.business.entity.table.TaskTableDef.TASK; +import static com.cpop.oam.business.entity.table.TaskWorkOrderRecordTableDef.TASK_WORK_ORDER_RECORD; +import static com.cpop.oam.business.entity.table.TaskWorkOrderTableDef.TASK_WORK_ORDER; + +/** + * 任务-工单表 服务层实现。 + * + * @author DB + * @since 2023-09-18 + */ +@Service("taskWorkOrderService") +public class TaskWorkOrderServiceImpl extends ServiceImpl implements TaskWorkOrderService { + + @Autowired + private Scheduler scheduler; + + /** + * @param bo 请求参数 + * @Description: 任务管理-工单管理-新增工单 + * @return: R + * @Author: DB + * @Date: 2023/5/30 16:53 + **/ + @Override + @Transactional(rollbackFor = Exception.class) + public void insertWorkOrder(TaskWorkOrderBo bo) { + //添加任务 + Task task = new Task(); + BeanUtils.copyBeanProp(task, bo); + //默认待接受 + task.setTaskStatus(2) + //默认开发中 + .setTaskItem(0) + .setTaskWeight(10) + //工单不参与评级 + .setTaskRating(-1) + .setTaskReceiptTime(LocalDateTime.now()); + //获取值班员工 + DutyService dutyService = SpringUtils.getBean(DutyService.class); + Duty duty = dutyService.getOne(QueryWrapper.create().where(DUTY.DUTY_DATE.eq(DateUtils.getDate()))); + if (null == duty) { + throw new ServiceException("当天没有值班员工,请联系相关人员添加值班信息!"); + } + task.setResponsibleStaffId(duty.getTechnologyStaffId()); + TaskService taskService = SpringUtils.getBean(TaskService.class); + task.setExpectedCompletionDate(Date.valueOf(LocalDate.now())); + taskService.save(task); + //添加工单绩点 + TaskStaffGroupService staffGroupService = SpringUtils.getBean(TaskStaffGroupService.class); + TaskStaffGroup taskStaffGroup = new TaskStaffGroup(); + taskStaffGroup.setStaffId(duty.getTechnologyStaffId()) + .setTaskId(task.getId()) + .setGradePoint(0); + staffGroupService.save(taskStaffGroup); + //添加工单 + TaskWorkOrder entity = new TaskWorkOrder(); + BeanUtils.copyBeanProp(entity, bo); + entity.setTaskId(task.getId()); + //当前操作员工是否是主要负责人,不是抛出异常 + LoginUser loginUser = SecurityUtils.getInstance().getLoginUser(); + //读取员工信息 + RedisService redisService = SpringUtils.getBean(RedisService.class); + JSONObject cacheObject = redisService.getCacheObject(UserType.OAM_USER.getKey() + loginUser.getUsername()); + OamStaffLoginInfo loginInfo = cacheObject.getJSONObject("user").toJavaObject(OamStaffLoginInfo.class); + entity.setRecordStaffId(loginInfo.getId()); + this.save(entity); + //通知值班员工 + StaffService staffService = SpringUtils.getBean(StaffService.class); + StaffInfoVo technologyStaffInfo = staffService.getStaffInfo(duty.getTechnologyStaffId()); + if (null != technologyStaffInfo) { + //企微通知值班人员 + List phoneList = new ArrayList(); + phoneList.add(technologyStaffInfo.getPhoneNumber()); + try { + SpringUtils.getBean(WebHookSendHandler.class).webHookSendText(WebHookKeyConstant.ORDER_INFO_BOT, phoneList, "==========您有一条新的工单需要处理==========", false); + } catch (IOException e) { + throw new ServiceException("发送消息通知失败!"); + } + //添加工单记录 + TaskWorkOrderRecordDto orderRecordDto = new TaskWorkOrderRecordDto(); + orderRecordDto.setRecordStaffId(loginInfo.getId()) + .setTaskWorkOrderId(entity.getId()) + .setRecordText(bo.getTaskContent()) + .setAttachmentUrl(bo.getAttachmentUrl()) + .setRecordStaffPhone(loginInfo.getPhoneNumber()) + .setResponsibleStaffPhone(technologyStaffInfo.getPhoneNumber()); + SpringUtils.getBean(TaskWorkOrderRecordService.class).insertTaskWorkOrderRecord(orderRecordDto); + } + //添加逾期检查任务 + startOrUpdateWorkOrderOvertimeTask(entity.getId(), false, Date.valueOf(LocalDate.now())); + } + + /** + * @param workOrderId 工单id + * @param isUpdate 是否更新 + * @param date 开始时间 + * @Description: 生成工单超时任务 + * @author DB + * @Date: 2023/7/13 0013 9:23 + */ + private void startOrUpdateWorkOrderOvertimeTask(String workOrderId, Boolean isUpdate, Date date) { + // 基于表达式构建触发器 + QuartzUtils quartzUtils = SpringUtils.getBean(QuartzUtils.class); + try { + String cron = quartzUtils.convertToCron(DateUtils.addDateHours(date, 2)); + if (isUpdate) { + quartzUtils.modifyJob(QuartzEnums.WORK_ORDER_OVERTIME_TASK.getName() + workOrderId, + QuartzEnums.WORK_ORDER_OVERTIME_TASK.getGroup(), cron); + } else { + // 通过JobBuilder构建JobDetail实例,JobDetail规定其job只能是实现Job接口的实例 + JobDetail jobDetail = JobBuilder.newJob(WorkOrderOvertimeTask.class).withIdentity(QuartzEnums.WORK_ORDER_OVERTIME_TASK.getName() + workOrderId, + QuartzEnums.WORK_ORDER_OVERTIME_TASK.getGroup()) + .usingJobData("WorkOrderId", workOrderId) + .build(); + CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cron); + // CronTrigger表达式触发器 继承于Trigger。TriggerBuilder 用于构建触发器实例 + CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(QuartzEnums.WORK_ORDER_OVERTIME_TASK.getName() + workOrderId, + QuartzEnums.WORK_ORDER_OVERTIME_TASK.getGroup()) + .withSchedule(cronScheduleBuilder).build(); + scheduler.scheduleJob(jobDetail, cronTrigger); + } + } catch (SchedulerException | ParseException e) { + throw new ServiceException("生成工单超时任务失败!"); + } + } + + /** + * @param bo 请求参数 + * @return com.cpop.core.base.R> + * @descriptions 查询任务-工单-记录表列表 + * @author DB + * @date 2023/09/18 17:18 + */ + @Override + public Page getWorkOrderPage(TaskWorkOrderPageBo bo) { + //重新定义列表 + PageDomain pageDomain = SqlUtils.getInstance().getPageDomain(); + return this.mapper.paginateAs(pageDomain.getPageNum(), pageDomain.getPageSize(), + QueryWrapper.create().select(TASK_WORK_ORDER.ALL_COLUMNS) + .select(TASK.TASK_NAME.as(TaskWorkOrderPageVo::getTaskName), TASK.TASK_CONTENT.as(TaskWorkOrderPageVo::getTaskContent), TASK.TASK_STATUS.as(TaskWorkOrderPageVo::getTaskStatus), + TASK.ATTACHMENT_URL.as(TaskWorkOrderPageVo::getAttachmentUrl), TASK.RESPONSIBLE_STAFF_ID.as(TaskWorkOrderPageVo::getResponsibleStaffId), + TASK.RESPONSIBLE_STAFF_ID.as(TaskWorkOrderPageVo::getResponsibleStaffId)) + .select(STAFF.NAME.as(TaskWorkOrderPageVo::getRecordStaffId)) + .select(BRAND.NAME.as(TaskWorkOrderPageVo::getBrandName)) + .select(CAMPUS.NAME.as(TaskWorkOrderPageVo::getCampusName)) + .select("rs.name as responsibleStaffName") + .from(TASK_WORK_ORDER) + //任务表 + .leftJoin(TASK).on(TASK.ID.eq(TASK_WORK_ORDER.TASK_ID)) + //小区表 + .leftJoin(CAMPUS).on(CAMPUS.ID.eq(TASK_WORK_ORDER.CAMPUS_ID)) + //品牌表 + .leftJoin(BRAND).on(BRAND.ID.eq(CAMPUS.BRAND_ID)) + //员工表 + .leftJoin(STAFF).on(STAFF.ID.eq(TASK_WORK_ORDER.RECORD_STAFF_ID)) + .leftJoin(STAFF).as("rs").on("rs.id = pp_oam_task.responsible_staff_id") + .and(TASK.TASK_NAME.like(bo.getTaskName())) + .and(TASK.TASK_STATUS.eq(bo.getTaskStatus())) + .and(CAMPUS.NAME.like(bo.getCampusName())), + TaskWorkOrderPageVo.class); + } + + /** + * @param workRecordId 工单记录id + * @return com.cpop.core.base.R> + * @descriptions 查询任务-工单记录-列表 + * @author DB + * @date 2023/09/18 17:19 + */ + @Override + public List getWorkOrderRecordList(String workRecordId) { + //根据任务id获取列表 + return SpringUtils.getBean(TaskWorkOrderRecordService.class).listAs(QueryWrapper.create() + .select(TASK_WORK_ORDER_RECORD.ALL_COLUMNS) + .select(STAFF.NAME.as(TaskWorkOrderRecordListVo::getRecordStaffName)) + .select(SYS_USER.AVATAR.as(TaskWorkOrderRecordListVo::getAvatar)) + .from(TASK_WORK_ORDER_RECORD) + //员工表 + .leftJoin(STAFF).on(STAFF.ID.eq(TASK_WORK_ORDER_RECORD.RECORD_STAFF_ID)) + //系统用户表 + .leftJoin(SYS_USER).on(SYS_USER.ID.eq(STAFF.USER_ID)) + .where(TASK_WORK_ORDER_RECORD.TASK_WORK_ORDER_ID.eq(workRecordId)) + .orderBy(TASK_WORK_ORDER_RECORD.CREATE_TIME.asc()) + , TaskWorkOrderRecordListVo.class); + } + + /** + * @param bo 请求参数 + * @Description: 任务管理-工单管理-新增工单记录 + * @return: R + * @Author: DB + * @Date: 2023/5/30 16:53 + **/ + @Override + public void insertWorkOrderRecord(TaskWorkOrderRecordBo bo) { + //获取工单信息 + TaskWorkOrder taskWorkOrder = this.getById(bo.getTaskWorkOrderId()); + //获取任务信息 + TaskService taskService = SpringUtils.getBean(TaskService.class); + Task task = taskService.getOne(QueryWrapper.create().where(TASK.ID.eq(taskWorkOrder.getTaskId()))); + //插入工单记录 + TaskWorkOrderRecord taskWorkOrderRecord = BeanUtils.mapToClass(bo, TaskWorkOrderRecord.class); + //获取记录员工 + //当前操作员工是否是主要负责人,不是抛出异常 + LoginUser loginUser = SecurityUtils.getInstance().getLoginUser(); + //读取员工信息 + RedisService redisService = SpringUtils.getBean(RedisService.class); + JSONObject cacheObject = redisService.getCacheObject(UserType.OAM_USER.getKey() + loginUser.getUsername()); + OamStaffLoginInfo loginInfo = cacheObject.getJSONObject("user").toJavaObject(OamStaffLoginInfo.class); + taskWorkOrderRecord.setRecordStaffId(loginInfo.getId()); + //插入记录 + SpringUtils.getBean(TaskWorkOrderRecordService.class).save(taskWorkOrderRecord); + //负责人手机号 + StaffInfoVo responsibleStaff = SpringUtils.getBean(StaffService.class).getStaffInfo(task.getResponsibleStaffId()); + List phoneList = new ArrayList<>(); + phoneList.add(responsibleStaff.getPhoneNumber()); + phoneList.add(loginInfo.getPhoneNumber()); + //通知记录 + try { + SpringUtils.getBean(WebHookSendHandler.class).webHookSendText(WebHookKeyConstant.ORDER_INFO_BOT, phoneList, task.getTaskName() + "\n\n工单有新回复:\n" + bo.getRecordText(), false); + } catch (IOException e) { + throw new ServiceException("发送消息通知失败!"); + } + } + + /** + * @param id 主键 + * @Description: 工单办结 + * @return: R + * @Author: DB + * @Date: 2023/5/16 17:10 + **/ + @Override + @Transactional(rollbackFor = Exception.class) + public void concludeWorkOrder(String id) { + //获取工单信息 + TaskWorkOrder taskWorkOrder = this.getById(id); + LocalDateTime finishTime = LocalDateTime.now(); + taskWorkOrder.setFinishTime(finishTime); + //设置工单完成 + TaskService taskService = SpringUtils.getBean(TaskService.class); + Task task = taskService.getOne(QueryWrapper.create().where(TASK.ID.eq(taskWorkOrder.getTaskId()))); + //超时设置逾期 + if (finishTime.compareTo(task.getTaskReceiptTime()) > 0 || Duration.between(finishTime, task.getTaskReceiptTime()).toMillis() >= 7200000) { + //工单暂停期间完成 + task.setTaskStatus(3); + } else { + task.setTaskStatus(6); + } + task.setTaskItem(3); + task.setCompletionDate(Date.valueOf(LocalDate.now())); + taskService.updateById(task); + this.updateById(taskWorkOrder); + //负责人手机号 + StaffService staffService = SpringUtils.getBean(StaffService.class); + Set staffIds = new HashSet<>(); + staffIds.add(task.getResponsibleStaffId()); + staffIds.add(taskWorkOrder.getRecordStaffId()); + Map staffMap = staffService.listAs(QueryWrapper.create() + .select(STAFF.ID, STAFF.NAME) + .select(SYS_USER.PHONE_NUMBER.as(StaffInfoVo::getPhoneNumber)) + .from(STAFF) + .leftJoin(SYS_USER).on(SYS_USER.ID.eq(STAFF.ID)) + .where(STAFF.ID.in(staffIds)) + , StaffInfoVo.class).stream().collect(Collectors.toMap(StaffInfoVo::getId, item -> item)); + List phoneList = new ArrayList<>(); + phoneList.add(staffMap.get(task.getResponsibleStaffId()).getPhoneNumber()); + //记录人手机号 + phoneList.add(staffMap.get(taskWorkOrder.getRecordStaffId()).getPhoneNumber()); + //通知记录 + try { + SpringUtils.getBean(WebHookSendHandler.class).webHookSendText(WebHookKeyConstant.ORDER_INFO_BOT, phoneList, task.getTaskName() + "\n\n工单办结", false); + } catch (IOException e) { + throw new ServiceException("发送消息通知失败!"); + } + } + + /** + * @param bo 请求参数 + * @Description: 工单暂停 + * @return: R + * @Author: DB + * @Date: 2023/5/16 17:10 + **/ + @Override + public void pauseWorkOrder(PauseWorkOrderBo bo) { + TaskService taskService = SpringUtils.getBean(TaskService.class); + Task task = taskService.getById(bo.getTaskId()); + boolean isUpdate; + if (task.getTaskStatus() == 2) { + isUpdate = true; + } else { + //已是逾期状态,需要重新生成定时任务 + isUpdate = false; + //绩点调整回0 + SpringUtils.getBean(TaskStaffGroupService.class).updateChain().set(TASK_STAFF_GROUP.GRADE_POINT, 0).where(TASK_STAFF_GROUP.TASK_ID.eq(task.getId())).update(); + } + //重新设定任务状态暂停 + task.setTaskStatus(5); + task.setTaskReceiptTime(bo.getTaskReceiptTime()); + taskService.updateById(task); + //获取记录员工 + //当前操作员工是否是主要负责人,不是抛出异常 + LoginUser loginUser = SecurityUtils.getInstance().getLoginUser(); + //读取员工信息 + RedisService redisService = SpringUtils.getBean(RedisService.class); + JSONObject cacheObject = redisService.getCacheObject(UserType.OAM_USER.getKey() + loginUser.getUsername()); + OamStaffLoginInfo loginInfo = cacheObject.getJSONObject("user").toJavaObject(OamStaffLoginInfo.class); + //负责人手机号 + StaffInfoVo responsibleStaff = SpringUtils.getBean(StaffService.class).getStaffInfo(task.getResponsibleStaffId()); + List phoneList = new ArrayList<>(); + phoneList.add(responsibleStaff.getPhoneNumber()); + phoneList.add(loginInfo.getPhoneNumber()); + //通知记录 + Date date = Date.valueOf(bo.getTaskReceiptTime().toLocalDate()); + try { + SpringUtils.getBean(WebHookSendHandler.class).webHookSendText(WebHookKeyConstant.ORDER_INFO_BOT, phoneList,task.getTaskName() + "\n\n工单已暂停到:" + DateUtils.format(date, DateUtils.YYYY_MM_DD_HH_MM_SS), false); + } catch (IOException e) { + throw new ServiceException("发送消息通知失败!"); + } + TaskWorkOrder taskWorkOrder = this.getOne(QueryWrapper.create().where(TASK_WORK_ORDER.TASK_ID.eq(bo.getTaskId()))); + //更新定时任务 + startOrUpdateWorkOrderOvertimeTask(taskWorkOrder.getId(), isUpdate, date); + } +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/ConfigInfoVo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/ConfigInfoVo.java new file mode 100644 index 0000000..2936159 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/ConfigInfoVo.java @@ -0,0 +1,33 @@ +package com.cpop.oam.business.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * @author: DB + * @Date: 2023/07/07/16:43 + * @Description: + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "SysConfigInfoVo对象", description = "系统配置信息") +public class ConfigInfoVo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 任务审核员工手机号 + */ + @ApiModelProperty("任务审核员工手机号") + private String auditStaffPhone; + + /** + * 核销管理员工手机号 + */ + @ApiModelProperty("核销管理员工手机号") + private String cancelAfterVerificationStaffPhone; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/DeptVo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/DeptVo.java new file mode 100644 index 0000000..88c2a7d --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/DeptVo.java @@ -0,0 +1,95 @@ +package com.cpop.oam.business.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.mybatisflex.annotation.Column; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +/** + * 部门表Vo输出 + * + * @author DB.lost + * @since 2023-05-10 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "SysDept对象", description = "部门表") +public class DeptVo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 部门id + */ + @ApiModelProperty("部门id") + private String id; + + /** + * 父部门id + */ + @ApiModelProperty("父部门id") + private String parentId; + + /** + * 部门名称 + */ + @ApiModelProperty("部门名称") + private String name; + + /** + * 排序 + */ + @ApiModelProperty("排序") + private Integer orderNo; + + /** + * 负责人 + */ + @ApiModelProperty("负责人") + private String leader; + + /** + * 电话 + */ + @ApiModelProperty("电话") + private String phone; + + /** + * 邮箱 + */ + @ApiModelProperty("邮箱") + private String email; + + /** + * 部门状态:1正常,0停用 + */ + @ApiModelProperty("部门状态:1正常,0停用") + private Boolean status; + + /** + * 子部门 + */ + @Column(ignore = true) + @ApiModelProperty("子部门集合") + private List children = new ArrayList(); + + /** + * 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8") + @ApiModelProperty("更新时间") + private LocalDateTime updateTime; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String remark; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/DutyListVo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/DutyListVo.java new file mode 100644 index 0000000..1597617 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/DutyListVo.java @@ -0,0 +1,67 @@ +package com.cpop.oam.business.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * Description: + * date: 2023/5/11 11:48 + * + * @Author ST + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "DutyList返回对象", description = "值班表") +public class DutyListVo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + private String id; + + /** + * 服务员工id + */ + @ApiModelProperty("服务员工id") + private String serviceStaffId; + + /** + * 服务员工名称 + */ + @ApiModelProperty("服务员工名称") + private String serviceStaffName; + + /** + * 技术员工id + */ + @ApiModelProperty("技术员工id") + private String technologyStaffId; + + /** + * 技术员工名称 + */ + @ApiModelProperty("技术员工名称") + private String technologyStaffName; + + /** + * 值班日期 + */ + @ApiModelProperty("值班日期") + @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8") + private LocalDate dutyDate; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String remark; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/FinanceReimburseAuditPageVo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/FinanceReimburseAuditPageVo.java new file mode 100644 index 0000000..5400f39 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/FinanceReimburseAuditPageVo.java @@ -0,0 +1,100 @@ +package com.cpop.oam.business.vo; + +import com.cpop.core.annontation.StringArrayConvert; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.sql.Date; +import java.time.LocalDateTime; + +/** + * @author DB + * @createTime 2023/09/20 16:43 + * @description 财务报销请求参数 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "FinanceReimbursePageVo对象", description = "财务报销返回参数") +public class FinanceReimburseAuditPageVo implements Serializable { + + /** + * 主键 + */ + @ApiModelProperty("主键") + private String id; + + /** + * 提交人 + */ + @ApiModelProperty("提交人id") + private String staffId; + + /** + * 提交人 + */ + @ApiModelProperty("提交人") + private String staffName; + + /** + * 状态:0已提交1审批中2已下发3:下款中;5:驳回 + */ + @ApiModelProperty("状态:0已提交1审批中2已下发3:下款中;5:驳回") + private Integer status; + + /** + * 申请类型id + */ + @ApiModelProperty("申请类型id") + private String typeId; + + /** + * 申请类型 + */ + @ApiModelProperty("申请类型") + private String typeName; + + /** + * 报销日期 + */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @ApiModelProperty("报销日期") + private Date reportDate; + + /** + * 申请说明 + */ + @ApiModelProperty("申请说明") + private String remarks; + + /** + * 申请金额 + */ + @ApiModelProperty("申请金额") + private BigDecimal price; + + /** + * 附件 + */ + @StringArrayConvert + @ApiModelProperty("附件") + private String attachmentUrl; + + /** + * 驳回原因 + */ + @ApiModelProperty("驳回原因") + private String rejectReason; + + /** + * 创建时间 + */ + @ApiModelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8") + private LocalDateTime createTime; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/FinanceReimbursePageVo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/FinanceReimbursePageVo.java new file mode 100644 index 0000000..31f3b74 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/FinanceReimbursePageVo.java @@ -0,0 +1,100 @@ +package com.cpop.oam.business.vo; + +import com.cpop.core.annontation.StringArrayConvert; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.sql.Date; +import java.time.LocalDateTime; + +/** + * @author DB + * @createTime 2023/09/20 16:43 + * @description 财务报销请求参数 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "FinanceReimbursePageVo对象", description = "财务报销返回参数") +public class FinanceReimbursePageVo implements Serializable { + + /** + * 主键 + */ + @ApiModelProperty("主键") + private String id; + + /** + * 提交人 + */ + @ApiModelProperty("提交人id") + private String staffId; + + /** + * 提交人 + */ + @ApiModelProperty("提交人") + private String staffName; + + /** + * 状态:0已提交1审批中2已下发3:下款中;5:驳回 + */ + @ApiModelProperty("状态:0已提交1审批中2已下发3:下款中;5:驳回") + private Integer status; + + /** + * 申请类型id + */ + @ApiModelProperty("申请类型id") + private String typeId; + + /** + * 申请类型 + */ + @ApiModelProperty("申请类型") + private String typeName; + + /** + * 报销日期 + */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @ApiModelProperty("报销日期") + private Date reportDate; + + /** + * 申请说明 + */ + @ApiModelProperty("申请说明") + private String remarks; + + /** + * 申请金额 + */ + @ApiModelProperty("申请金额") + private BigDecimal price; + + /** + * 附件 + */ + @StringArrayConvert + @ApiModelProperty("附件") + private String attachmentUrl; + + /** + * 驳回原因 + */ + @ApiModelProperty("驳回原因") + private String rejectReason; + + /** + * 创建时间 + */ + @ApiModelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8") + private LocalDateTime createTime; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/FinanceReimburseRecordListVo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/FinanceReimburseRecordListVo.java new file mode 100644 index 0000000..722c66d --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/FinanceReimburseRecordListVo.java @@ -0,0 +1,45 @@ +package com.cpop.oam.business.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @author DB + * @createTime 2023/09/27 14:22 + * @description + */ +@Data +@ApiModel(value = "财务报销记录列表") +public class FinanceReimburseRecordListVo implements Serializable { + + /** + * id + */ + @ApiModelProperty(value = "id") + private String id; + + /** + * 报销记录id + */ + @ApiModelProperty(value = "报销记录id") + private String financeReimburseId; + + /** + * 阶段金额 + */ + @ApiModelProperty(value = "阶段金额") + private BigDecimal stageAmount; + + /** + * 下发时间 + */ + @ApiModelProperty(value = "下发时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8") + private LocalDateTime paymentTime; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/FinanceReimburseTypeListVo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/FinanceReimburseTypeListVo.java new file mode 100644 index 0000000..37f687b --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/FinanceReimburseTypeListVo.java @@ -0,0 +1,31 @@ +package com.cpop.oam.business.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * @author DB + * @createTime 2023/09/20 17:20 + * @description + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "FinanceReimbursePageVo对象", description = "财务报销返回参数") +public class FinanceReimburseTypeListVo implements Serializable { + + /** + * 主键 + */ + @ApiModelProperty("主键") + private String id; + + /** + * 类型名 + */ + @ApiModelProperty("类型名") + private String typeName; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/LoginUserInfoVo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/LoginUserInfoVo.java new file mode 100644 index 0000000..138e04f --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/LoginUserInfoVo.java @@ -0,0 +1,56 @@ +package com.cpop.oam.business.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 登录用户的基本信息 + * 用于记录到token的信息使用 + * @author Gewj + * + */ +@Data +@Accessors(chain = true) +@ApiModel +public class LoginUserInfoVo { + + /** + * 用户id + */ + @ApiModelProperty("用户id") + private String userId; + + /** + * 头像 + */ + @ApiModelProperty("头像") + private String avatar; + + /** + * 登录用户名 + */ + @ApiModelProperty("登录用户名") + private String username; + + /** + * 真实姓名 + */ + @ApiModelProperty("真实姓名") + private String realName; + + /** + * 介绍 + */ + @ApiModelProperty("介绍") + private String desc; + + /** + * 用户首页路由 + */ + @ApiModelProperty("用户首页路由") + private String homePath; + +} + diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/MenuRouteVo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/MenuRouteVo.java new file mode 100644 index 0000000..b27c155 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/MenuRouteVo.java @@ -0,0 +1,145 @@ +package com.cpop.oam.business.vo; + +import com.mybatisflex.annotation.Column; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.List; + +/** + * Description: + * date: 2023/5/11 9:14 + * + * @Author DB + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "Menu对象", description = "") +public class MenuRouteVo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 菜单ID + */ + @ApiModelProperty("菜单ID") + private String id; + + /** + * 父级菜单ID + */ + @ApiModelProperty("父级菜单ID") + private String parentMenu; + + /** + * 菜单名 + */ + @ApiModelProperty("菜单名") + private String name; + + /** + * 菜单图标 + */ + @ApiModelProperty("菜单图标") + private String icon; + + /** + * 菜单路由,父菜单为空 + */ + @ApiModelProperty("菜单路由,父菜单为空") + private String component; + + /** + * 标记菜单的状态 0:禁用 1:正常(根据权限正常显示) + */ + @ApiModelProperty("标记菜单的状态 0:禁用 1:正常(根据权限正常显示)") + private Boolean status; + + /** + * 用户类型,1管理员,2审计管理员,3安全管理员,4普通用户 + */ + @ApiModelProperty("用户类型,1管理员,2审计管理员,3安全管理员,4普通用户") + private String type; + + /** + * 权限 + */ + @ApiModelProperty("权限") + private String permission; + + /** + * 重定向路径,一级菜单有值 + */ + @ApiModelProperty("重定向路径,一级菜单有值") + private String redirect; + + /** + * 排序,值越小越靠前,一级菜单有值 + */ + @ApiModelProperty("排序,值越小越靠前,一级菜单有值") + private Integer orderNo; + + /** + * 子菜单集 + */ + @Column(ignore = true) + @ApiModelProperty("子菜单集") + private List children; + + /** + * 路由地址 + */ + @ApiModelProperty("路由地址") + private String path; + + /** + * 标题 + */ + @ApiModelProperty("标题") + private String title; + + /** + * 隐藏菜单 + */ + @ApiModelProperty("隐藏菜单") + private Boolean hideMenu; + + /** + * 内部定义类 + */ + @Column(ignore = true) + @ApiModelProperty("内部定义类") + private Meta meta; + + /** + * 内部类 + */ + @Data + public class Meta { + + /** + * 标题 + */ + private String title; + /** + * 图标 + */ + private String icon; + /** + * 排序 + */ + private Integer orderNo; + /** + * 隐藏菜单 + */ + private Boolean hideMenu; + + /** + * 隐藏子类菜单 + */ + private Boolean hideChildrenInMenu; + } +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/MenuVo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/MenuVo.java new file mode 100644 index 0000000..ff71b83 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/MenuVo.java @@ -0,0 +1,117 @@ +package com.cpop.oam.business.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.List; + +/** + * 系统菜单表Vo输出 + * + * @author DB.lost + * @since 2023-05-10 + */ +@Data +@Accessors(chain = true) +@ApiModel(description = "菜单返回对象") +public class MenuVo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 菜单ID + */ + @ApiModelProperty(value = "菜单ID") + private String id; + + /** + * 父级菜单ID + */ + @ApiModelProperty(value = "父级菜单ID") + private String parentMenu; + + /** + * 菜单名称 + */ + @ApiModelProperty(value = "菜单名称") + private String name; + + /** + * 菜单图标 + */ + @ApiModelProperty(value = "菜单图标") + private String icon; + + /** + * 菜单路由,父菜单为空 + */ + @ApiModelProperty(value = "菜单路由,父菜单为空") + private String component; + + /** + * 标记菜单的状态 0:禁用 1:启用(根据权限正常显示) + */ + @ApiModelProperty(value = "标记菜单的状态 0:禁用 1:启用(根据权限正常显示)") + private Boolean status; + + /** + * 权限 + */ + @ApiModelProperty(value = "权限") + private String permission; + + /** + * 重定向路径,一级菜单有值 + */ + @ApiModelProperty(value = "重定向路径,一级菜单有值") + private String redirect; + + /** + * 排序,值越小越靠前,一级菜单有值 + */ + @ApiModelProperty(value = "排序,值越小越靠前,一级菜单有值") + private Integer orderNo; + + /** + * 路由地址 + */ + @ApiModelProperty(value = "路由地址") + private String path; + + /** + * 标题 + */ + @ApiModelProperty(value = "标题") + private String title; + + /** + * 子菜单集 + */ + @ApiModelProperty(value = "子菜单集") + private List children; + + /** + * 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8") + @ApiModelProperty(value = "更新时间") + private LocalDateTime updateTime; + + /** + * 菜单类型,0:目录,1:菜单,2:按钮 + */ + @ApiModelProperty(value = "菜单类型,0:目录,1:菜单,2:按钮") + private Integer type; + + /** + * 隐藏菜单 + */ + @ApiModelProperty(value = "隐藏菜单") + private Boolean hideMenu; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/PersonTaskPageVo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/PersonTaskPageVo.java new file mode 100644 index 0000000..8c674ad --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/PersonTaskPageVo.java @@ -0,0 +1,118 @@ +package com.cpop.oam.business.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.sql.Timestamp; +import java.time.LocalDate; + +/** + * Description: + * date: 2023/5/15 17:30 + * + * @Author ST + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "Task对象", description = "OAM-任务表") +public class PersonTaskPageVo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + private String id; + + /** + * 任务名 + */ + @ApiModelProperty("任务名") + private String taskName; + + /** + * 任务类型(0:迭代;1:需求;2:投诉) + */ + @ApiModelProperty("任务类型(0:迭代;1:需求;2:投诉)") + private Integer taskType; + + /** + * 主要负责员工id + */ + @ApiModelProperty("主要负责员工id") + private String responsibleStaffId; + + /** + * 主要负责员工名 + */ + @ApiModelProperty("主要负责员工名") + private String responsibleStaffName; + + /** + * 任务状态(-1:失败;0:待审核;1:待接受;2:进行中;3:已完成;4:逾期;) + */ + @ApiModelProperty("任务状态(-1:失败;0:待审核;1:待接受;2:进行中;3:已完成;4:逾期;)") + private Integer taskStatus; + + /** + * 任务项(0:待开发;1:待测试:2:待部署;3:已归档) + */ + @ApiModelProperty("任务项(0:待开发;1:待测试:2:待部署;3:已归档)") + private Integer taskItem; + + /** + * 任务内容 + */ + @ApiModelProperty("任务内容") + private String taskContent; + + /** + * 任务权重 + */ + @ApiModelProperty("任务权重") + private Integer taskWeight; + + /** + * 任务评级(0:A;1:B;2:C;3:D;4:E) + */ + @ApiModelProperty("任务评级(0:A;1:B;2:C;3:D;4:E)") + private Integer taskRating; + + /** + * 附件地址 + */ + @ApiModelProperty("附件地址") + private String attachmentUrl; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String remark; + + /** + * 预期完成日期 + */ + @ApiModelProperty("预期完成日期") + @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8") + private LocalDate expectedCompletionDate; + + /** + * 完成日期 + */ + @ApiModelProperty("完成日期") + @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8") + private LocalDate completionDate; + + /** + * 任务接收时间 + */ + @ApiModelProperty("任务接收时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8") + private Timestamp taskReceiptTime; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/ReimbursePersonStatisticVo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/ReimbursePersonStatisticVo.java new file mode 100644 index 0000000..d5ec5c7 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/ReimbursePersonStatisticVo.java @@ -0,0 +1,32 @@ +package com.cpop.oam.business.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * @author DB + * @createTime 2023/09/26 17:07 + * @description + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "个人报销统计") +public class ReimbursePersonStatisticVo implements Serializable { + + /** + * 未核销金额 + */ + @ApiModelProperty("未核销金额") + private BigDecimal unPay; + + /** + * 已核销金额 + */ + @ApiModelProperty("已核销金额") + private BigDecimal havePay; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/RolePageVo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/RolePageVo.java new file mode 100644 index 0000000..f6dec9f --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/RolePageVo.java @@ -0,0 +1,76 @@ +package com.cpop.oam.business.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.mybatisflex.annotation.Column; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.sql.Timestamp; +import java.util.List; + +/** + * Description: + * date: 2023/5/9 14:21 + * + * @Author DB + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "Role分页返回对象") +public class RolePageVo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + private String id; + + /** + * 角色名称 + */ + @ApiModelProperty("角色名称") + private String roleName; + + /** + * 角色值 + */ + @ApiModelProperty("角色值") + private String roleValue; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean status; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String remark; + + /** + * 排序 + */ + @ApiModelProperty("排序") + private Integer orderNo; + + /** + * 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8") + @ApiModelProperty("更新时间") + private Timestamp updateTime; + + /** + * 角色所属菜单id集合 + */ + @ApiModelProperty("角色所属菜单id集合") + @Column(ignore = true) + private List menuIds; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/RoleVo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/RoleVo.java new file mode 100644 index 0000000..0defb20 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/RoleVo.java @@ -0,0 +1,59 @@ +package com.cpop.oam.business.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 系统角色表Vo输出 + * + * @author DB.lost + * @since 2023-05-10 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "SysRole对象", description = "角色信息") +public class RoleVo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + private String id; + + /** + * 角色名称 + */ + @ApiModelProperty("角色名称") + private String roleName; + + /** + * 角色值 + */ + @ApiModelProperty("角色值") + private String roleValue; + + /** + * 状态 0:禁用 1:正常 + */ + @ApiModelProperty("状态 0:禁用 1:正常") + private Boolean status; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String remark; + + /** + * 排序 + */ + @ApiModelProperty("排序") + private Integer orderNo; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/StaffInfoVo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/StaffInfoVo.java new file mode 100644 index 0000000..8669541 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/StaffInfoVo.java @@ -0,0 +1,82 @@ +package com.cpop.oam.business.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * Description: + * date: 2023/5/17 10:34 + * + * @Author ST + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "StaffInfo对象", description = "员工信息") +public class StaffInfoVo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + private String id; + + /** + * 姓名 + */ + @ApiModelProperty("姓名") + private String name; + + /** + * 用户id + */ + @ApiModelProperty("用户id") + private String userId; + + /** + * 用户名 + */ + @ApiModelProperty(value = "用户名") + private String userName; + + /** + * 昵称 + */ + @ApiModelProperty(value = "昵称") + private String nickName; + + /** + * 手机号 + */ + @ApiModelProperty(value = "手机号") + private String phoneNumber; + + /** + * 性别(0:男;1:女) + */ + @ApiModelProperty(value = "性别(0:男;1:女)") + private Boolean sex; + + /** + * 角色id + */ + @ApiModelProperty(value = "角色id") + private String roleId; + + /** + * 角色名 + */ + @ApiModelProperty(value = "角色名") + private String roleName; + + /** + * 头像 + */ + @ApiModelProperty(value = "头像") + private String avatar; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/StaffPageVo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/StaffPageVo.java new file mode 100644 index 0000000..a361cdd --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/StaffPageVo.java @@ -0,0 +1,121 @@ +package com.cpop.oam.business.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * Description: + * date: 2023/5/11 15:24 + * + * @Author ST + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "系统员工返回对象", description = "系统用户(员工)信息") +public class StaffPageVo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + private String id; + + /** + * 姓名 + */ + @ApiModelProperty("姓名") + private String name; + + /** + * 用户名 + */ + @ApiModelProperty("用户名") + private String userName; + + /** + * 部门id + */ + @ApiModelProperty("部门id") + private String deptId; + + /** + * 用户id + */ + @ApiModelProperty("用户id") + private String userId; + + /** + * 员工类型 + */ + @ApiModelProperty("员工类型") + private Integer staffType; + + /** + * 昵称 + */ + @ApiModelProperty("昵称") + private String nickName; + + /** + * 邮箱 + */ + @ApiModelProperty("邮箱") + private String email; + + /** + * 手机号 + */ + @ApiModelProperty("手机号") + private String phoneNumber; + + /** + * 性别(0:男;1:女) + */ + @ApiModelProperty("性别(0:男;1:女)") + private Boolean sex; + + /** + * 头像 + */ + @ApiModelProperty("头像") + private String avatar; + + /** + * 状态(0:停用;1:启用) + */ + @ApiModelProperty("状态(0:停用;1:启用)") + private Boolean status; + + /** + * 角色id + */ + @ApiModelProperty("角色id") + private String roleId; + + /** + * 角色名 + */ + @ApiModelProperty("角色名") + private String roleName; + + /** + * 更新时间 + */ + @ApiModelProperty("更新时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8") + private LocalDateTime updateTime; + + /** + * 密码 + */ + @ApiModelProperty("密码") + private String password; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/StaffVo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/StaffVo.java new file mode 100644 index 0000000..1938a89 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/StaffVo.java @@ -0,0 +1,54 @@ +package com.cpop.oam.business.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 员工表Vo输出 + * + * @author DB.lost + * @since 2023-05-11 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "Staff对象", description = "员工表") +public class StaffVo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + private String id; + + /** + * 姓名 + */ + @ApiModelProperty("姓名") + private String name; + + /** + * 部门id + */ + @ApiModelProperty("部门id") + private String deptId; + + /** + * 用户id + */ + @ApiModelProperty("用户id") + private String userId; + + /** + * 员工类型 + */ + @ApiModelProperty("员工类型") + private Integer staffType; + + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/SysFileVo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/SysFileVo.java new file mode 100644 index 0000000..504d91b --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/SysFileVo.java @@ -0,0 +1,45 @@ +package com.cpop.oam.business.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * Description: + * date: 2023/5/12 17:15 + * + * @Author ST + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "SysFileVo对象", description = "文件上传下载返回对象") +public class SysFileVo implements Serializable { + + /** + * 路径 + */ + @ApiModelProperty("路径") + private String url; + + /** + * 文件名 + */ + @ApiModelProperty("文件名") + private String fileName; + + /** + * 新文件名 + */ + @ApiModelProperty("新文件名") + private String newFileName; + + /** + * 文件源 + */ + @ApiModelProperty("文件源") + private String originalFilename; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/SysOperationLogVo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/SysOperationLogVo.java new file mode 100644 index 0000000..05b0b64 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/SysOperationLogVo.java @@ -0,0 +1,97 @@ +package com.cpop.oam.business.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 操作日志表Vo输出 + * + * @author DB.lost + * @since 2023-05-10 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "SysOperationLog对象", description = "操作日志表") +public class SysOperationLogVo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 用户ID + */ + @ApiModelProperty("用户ID") + private String operationUserId; + + /** + * 操作用户 + */ + @ApiModelProperty("操作用户") + private String operationUserName; + + /** + * 操作码 + */ + @ApiModelProperty("操作码") + private Integer code; + + /** + * 操作信息 + */ + @ApiModelProperty("操作信息") + private String info; + + /** + * 操作终端的IP地址 + */ + @ApiModelProperty("操作终端的IP地址") + private String devIp; + + /** + * 结果 -1:失败 1:成功 + */ + @ApiModelProperty("结果 -1:失败 1:成功") + private Boolean result; + + /** + * 日志级别,0-提示,1-一般,2-危险,3-高危 + */ + @ApiModelProperty("日志级别,0-提示,1-一般,2-危险,3-高危") + private Integer level; + + /** + * 行为类别,1-一般行为,2-异常行为 + */ + @ApiModelProperty("行为类别,1-一般行为,2-异常行为") + private Integer actionType; + + /** + * 失败原因 + */ + @ApiModelProperty("失败原因") + private String failReason; + + /** + * 操作描述 + */ + @ApiModelProperty("操作描述") + private String description; + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8") + @ApiModelProperty("创建时间") + private LocalDateTime createTime; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskAuditPageVo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskAuditPageVo.java new file mode 100644 index 0000000..c42d469 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskAuditPageVo.java @@ -0,0 +1,81 @@ +package com.cpop.oam.business.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * Description: + * date: 2023/5/22 9:28 + * + * @Author DB + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "Task分页对象", description = "OAM-任务列表") +public class TaskAuditPageVo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + private String id; + + /** + * 任务名 + */ + @ApiModelProperty("任务名") + private String taskName; + + /** + * 任务类型(0:迭代;1:需求;2:投诉) + */ + @ApiModelProperty("任务类型(0:迭代;1:需求;2:投诉)") + private Integer taskType; + + /** + * 任务内容 + */ + @ApiModelProperty("任务内容") + private String taskContent; + + /** + * 任务评级(0:A;1:B;2:C;3:D;4:E) + */ + @ApiModelProperty("任务评级(0:A;1:B;2:C;3:D;4:E)") + private Integer taskRating; + + /** + * 附件地址 + */ + @ApiModelProperty("附件地址") + private String attachmentUrl; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String remark; + + /** + * 预期完成日期 + */ + @ApiModelProperty("预期完成日期") + @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8") + private LocalDate expectedCompletionDate; + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8") + @ApiModelProperty("创建时间") + private LocalDateTime createTime; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskDemandPageVo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskDemandPageVo.java new file mode 100644 index 0000000..91a8963 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskDemandPageVo.java @@ -0,0 +1,103 @@ +package com.cpop.oam.business.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.sql.Timestamp; + +/** + * Description: + * date: 2023/5/30 15:44 + * + * @Author ST + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "需求管理分页对象", description = "需求管理") +public class TaskDemandPageVo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + private String id; + + /** + * 任务名 + */ + @ApiModelProperty("任务名") + private String taskName; + + /** + * 任务内容 + */ + @ApiModelProperty("任务内容") + private String taskContent; + + /** + * 附件地址 + */ + @ApiModelProperty("附件地址") + private String attachmentUrl; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String remark; + + /** + * 品牌 + */ + @ApiModelProperty("品牌id") + private String brandId; + + /** + * 品牌 + */ + @ApiModelProperty("品牌") + private String brandName; + + /** + * 校区 + */ + @ApiModelProperty("校区id") + private String campusId; + + /** + * 校区 + */ + @ApiModelProperty("校区") + private String campusName; + + /** + * 创建时间 + */ + @ApiModelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8") + private Timestamp createTime; + + /** + * 需求类型 + */ + @ApiModelProperty("需求类型") + private Integer demandType; + + /** + * 记录员工id + */ + @ApiModelProperty("记录员工id") + private String recordStaffId; + /** + * 记录员工名 + */ + @ApiModelProperty("记录员工名") + private String recordStaffName; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskMonthStatisticsVo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskMonthStatisticsVo.java new file mode 100644 index 0000000..5ab9f30 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskMonthStatisticsVo.java @@ -0,0 +1,88 @@ +package com.cpop.oam.business.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDate; +import java.util.List; + +/** + * Description: + * date: 2023/5/15 16:44 + * + * @Author ST + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "Task对象", description = "OAM-任务表") +public class TaskMonthStatisticsVo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 进行中 + */ + @ApiModelProperty(value = "进行中") + private Long inProgress = 0L; + + /** + * 已完成 + */ + @ApiModelProperty(value = "已完成") + private Long haveCompleted = 0L; + + /** + * 已逾期 + */ + @ApiModelProperty(value = "已逾期") + private Long overdue = 0L; + + /** + * 暂停 + */ + @ApiModelProperty(value = "暂停") + private Long pause = 0L; + + /** + * 逾期完成 + */ + @ApiModelProperty(value = "逾期完成") + private Long overdueCompletion = 0L; + + /** + * 当月绩点 + */ + @ApiModelProperty(value = "当月绩点") + private Long gpaOfTheMonth = 0L; + + /** + * 月度数据统计对象集合 + */ + @ApiModelProperty(value = "月度数据统计对象集合") + private List vos; + + @Data + @Accessors(chain = true) + @ApiModel(value = "月度数据统计对象", description = "OAM-任务表") + public class DataStatisticsVo { + + /** + * 日期 + */ + @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8") + @ApiModelProperty(value = "日期") + private LocalDate date; + + + /** + * 日期 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @ApiModelProperty(value = "任务名") + private List taskNames; + } +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskPageVo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskPageVo.java new file mode 100644 index 0000000..af19fb5 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskPageVo.java @@ -0,0 +1,74 @@ +package com.cpop.oam.business.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * Description: + * date: 2023/5/16 15:48 + * + * @Author ST + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "Task分页对象", description = "OAM-任务列表") +public class TaskPageVo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + private String id; + + /** + * 任务名 + */ + @ApiModelProperty("任务名") + private String taskName; + + /** + * 任务类型(0:迭代;1:需求;2:投诉) + */ + @ApiModelProperty("任务类型(0:迭代;1:需求;2:投诉)") + private Integer taskType; + + /** + * 任务内容 + */ + @ApiModelProperty("任务内容") + private String taskContent; + + /** + * 任务评级(0:A;1:B;2:C;3:D;4:E) + */ + @ApiModelProperty("任务评级(0:A;1:B;2:C;3:D;4:E)") + private Integer taskRating; + + /** + * 附件地址 + */ + @ApiModelProperty("附件地址") + private String attachmentUrl; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String remark; + + /** + * 预期完成日期 + */ + @ApiModelProperty("预期完成日期") + @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8") + private LocalDate expectedCompletionDate; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskStaffGroupVo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskStaffGroupVo.java new file mode 100644 index 0000000..a6e23b7 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskStaffGroupVo.java @@ -0,0 +1,53 @@ +package com.cpop.oam.business.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * OAM-任务-关联员工任务组表Vo输出 + * + * @author DB.lost + * @since 2023-05-22 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "TaskStaffGroup对象", description = "OAM-任务-关联员工任务组表") +public class TaskStaffGroupVo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + private String id; + + /** + * 任务id + */ + @ApiModelProperty("任务id") + private String taskId; + + /** + * 员工id + */ + @ApiModelProperty("员工id") + private String staffId; + + /** + * 员工id + */ + @ApiModelProperty("员工id") + private String staffName; + + /** + * 绩点 + */ + @ApiModelProperty("绩点") + private Integer gradePoint; + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskWorkOrderPageVo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskWorkOrderPageVo.java new file mode 100644 index 0000000..a4818f1 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskWorkOrderPageVo.java @@ -0,0 +1,125 @@ +package com.cpop.oam.business.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author: DB + * @Date: 2023/07/10/14:16 + * @Description: + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "TaskWorkOrderPageVo对象", description = "任务-工单-记录") +public class TaskWorkOrderPageVo implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + private String id; + + /** + * 任务id + */ + @ApiModelProperty("任务id") + private String taskId; + + /** + * 任务名 + */ + @ApiModelProperty("任务名") + private String taskName; + + /** + * 任务内容 + */ + @ApiModelProperty("任务内容") + private String taskContent; + + /** + * 品牌id + */ + @ApiModelProperty("品牌id") + private String brandId; + + /** + * 品牌 + */ + @ApiModelProperty("品牌") + private String brandName; + + /** + * 校区id + */ + @ApiModelProperty("校区id") + private String campusId; + + /** + * 校区 + */ + @ApiModelProperty("校区") + private String campusName; + + /** + * 附件地址 + */ + @ApiModelProperty("附件地址") + private String attachmentUrl; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String remarks; + + /** + * 问题手机号 + */ + @ApiModelProperty("问题手机号") + private String phoneNumber; + + /** + * 记录员工id + */ + @ApiModelProperty("记录员工id") + private String recordStaffId; + + /** + * 记录员工 + */ + @ApiModelProperty("记录员工") + private String recordStaffName; + + /** + * 接收员工id + */ + @ApiModelProperty("接收员工id") + private String responsibleStaffId; + + /** + * 接收员工 + */ + @ApiModelProperty("接收员工") + private String responsibleStaffName; + + /** + * 办结时间 + */ + @ApiModelProperty("办结时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8") + private LocalDateTime finishTime; + + /** + * 任务状态 + */ + @ApiModelProperty("任务状态") + private Integer taskStatus; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskWorkOrderRecordListVo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskWorkOrderRecordListVo.java new file mode 100644 index 0000000..235ca7a --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskWorkOrderRecordListVo.java @@ -0,0 +1,72 @@ +package com.cpop.oam.business.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.sql.Timestamp; + +/** + * @author: DB + * @Date: 2023/07/11/14:25 + * @Description: + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "TaskWorkOrderRecordListVo对象", description = "任务-工单记录-记录") +public class TaskWorkOrderRecordListVo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + private String id; + + /** + * 任务工单id + */ + @ApiModelProperty("任务工单id") + private String taskWorkOrderId; + + /** + * 记录员工id + */ + @ApiModelProperty("记录员工id") + private String recordStaffId; + + /** + * 记录员工id + */ + @ApiModelProperty("记录员工id") + private String recordStaffName; + + /** + * 记录内容 + */ + @ApiModelProperty("记录内容") + private String recordText; + + /** + * 附件地址 + */ + @ApiModelProperty("附件地址") + private String attachmentUrl; + + /** + * 头像 + */ + @ApiModelProperty("头像") + private String avatar; + + /** + * 创建时间 + */ + @ApiModelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8") + private Timestamp createTime; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/framework/constant/OamConfigKey.java b/Cpop-Oam/src/main/java/com/cpop/oam/framework/constant/OamConfigKey.java new file mode 100644 index 0000000..63ea1ca --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/framework/constant/OamConfigKey.java @@ -0,0 +1,17 @@ +package com.cpop.oam.framework.constant; + +/** + * @author DB + */ +public interface OamConfigKey { + + /** + * OAM配置 + */ + String OAM_CONFIG_KEY = "sysConfig:oam:"; + + /** + * 企业微信配置信息 + */ + String[] WORK_WX_INFO = {"OamAuditStaffPhone", "OamCancelAfterVerificationStaffPhone"}; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/framework/constant/WebHookKeyConstant.java b/Cpop-Oam/src/main/java/com/cpop/oam/framework/constant/WebHookKeyConstant.java new file mode 100644 index 0000000..3015c46 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/framework/constant/WebHookKeyConstant.java @@ -0,0 +1,24 @@ +package com.cpop.oam.framework.constant; + +/** + * @author DB + * @createTime 2023/09/15 18:01 + * @description 企业微信机器人key + */ +public interface WebHookKeyConstant { + + /** + * 产品部 + */ + String PRODUCT_BOT = "586442ba-6eeb-4a3c-937d-75faa4d9dbb9"; + + /** + * 综合管理 + */ + String FINANCE_BOT = "a885058b-2478-4df8-bdb7-2bb94a08c1f5"; + + /** + * 技术-售后 + */ + String ORDER_INFO_BOT = "0423ac02-dc26-4b4e-b67f-4e0f0953013f"; +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/framework/enums/OamConfigEnum.java b/Cpop-Oam/src/main/java/com/cpop/oam/framework/enums/OamConfigEnum.java new file mode 100644 index 0000000..2d9a912 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/framework/enums/OamConfigEnum.java @@ -0,0 +1,91 @@ +package com.cpop.oam.framework.enums; + +import com.cpop.common.utils.StringUtils; + +/** + * 系统配置枚举 + * @author DB + */ +public enum OamConfigEnum { + + /** + * 任务审核员工手机号 + */ + AUDIT_STAFF_PHONE("任务审核员工手机号", "OamAuditStaffPhone","auditStaffPhone", true), + /** + * 核销管理员手机号 + */ + CANCEL_AFTER_VERIFICATION_STAFF_PHONE("核销管理员手机号", "OamCancelAfterVerificationStaffPhone", "cancelAfterVerificationStaffPhone",true); + + /** + * 配置名 + */ + private final String name; + /** + * 配置键 + */ + private final String key; + /** + * 属性 + */ + private final String field; + /** + * 配置类型(是否系统内置) + */ + private final Boolean type; + + OamConfigEnum(String name, String key, String field, Boolean type) { + this.name = name; + this.key = key; + this.field = field; + this.type = type; + } + + public String getName() { + return name; + } + + public String getKey() { + return key; + } + + public String getField() { + return field; + } + + public Boolean getType() { + return type; + } + + /** + * 根据属性获取枚举 + * @param field 属性 + * @return OamConfigEnum + */ + public static OamConfigEnum matchField(String field) { + OamConfigEnum oamConfigEnum = null; + for (OamConfigEnum configEnum : values()) { + if (StringUtils.equals(configEnum.getField(), field)) { + oamConfigEnum = configEnum; + break; + } + } + return oamConfigEnum; + } + + /** + * 根据键获取枚举 + * @param key 属性 + * @return OamConfigEnum + */ + public static OamConfigEnum matchKey(String key) { + OamConfigEnum oamConfigEnum = null; + for (OamConfigEnum configEnum : values()) { + if (StringUtils.equals(configEnum.getKey(), key)) { + oamConfigEnum = configEnum; + break; + } + } + return oamConfigEnum; + } +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/framework/enums/QuartzEnums.java b/Cpop-Oam/src/main/java/com/cpop/oam/framework/enums/QuartzEnums.java new file mode 100644 index 0000000..94ba981 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/framework/enums/QuartzEnums.java @@ -0,0 +1,46 @@ +package com.cpop.oam.framework.enums; + +/** + * @author: DB + * @Date: 2023/07/13/9:30 + * @Description: 定时任务枚举类 + */ +public enum QuartzEnums { + + /** + * 工单超时定时任务 + */ + WORK_ORDER_OVERTIME_TASK("WorkOrderOvertimeTask:", "WorkOrder"); + + QuartzEnums(String name, String group) { + this.name = name; + this.group = group; + } + + /** + * 名 + */ + private String name; + + /** + * 组 + */ + private String group; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getGroup() { + return group; + } + + public void setGroup(String group) { + this.group = group; + } + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/framework/tasks/WorkOrderOvertimeTask.java b/Cpop-Oam/src/main/java/com/cpop/oam/framework/tasks/WorkOrderOvertimeTask.java new file mode 100644 index 0000000..0ad9108 --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/framework/tasks/WorkOrderOvertimeTask.java @@ -0,0 +1,41 @@ +package com.cpop.oam.framework.tasks; + +import com.cpop.core.utils.SpringUtils; +import com.cpop.oam.business.entity.TaskWorkOrder; +import com.cpop.oam.business.service.TaskService; +import com.cpop.oam.business.service.TaskWorkOrderService; +import com.pupu.oam.business.service.TaskStaffGroupService; +import org.quartz.Job; +import org.quartz.JobDataMap; +import org.quartz.JobExecutionContext; + +import java.time.LocalDateTime; + +import static com.cpop.oam.business.entity.table.TaskStaffGroupTableDef.TASK_STAFF_GROUP; +import static com.cpop.oam.business.entity.table.TaskTableDef.TASK; + +/** + * @author: DB + * @Date: 2023/07/12/17:11 + * @Description: 工单任务超时检查 + */ +public class WorkOrderOvertimeTask implements Job { + + @Override + public void execute(JobExecutionContext jobExecutionContext) { + //获取工单id + JobDataMap jobDataMap = jobExecutionContext.getJobDetail().getJobDataMap(); + String workOrderId = jobDataMap.getString("WorkOrderId"); + TaskWorkOrderService taskWorkOrderService = SpringUtils.getBean(TaskWorkOrderService.class); + TaskWorkOrder taskWorkOrder = taskWorkOrderService.getById(workOrderId); + //逾期 + if (null == taskWorkOrder.getFinishTime() || (taskWorkOrder.getFinishTime().compareTo(LocalDateTime.now()) > 0)) { + //修改任务逾期 + TaskService taskService = SpringUtils.getBean(TaskService.class); + taskService.updateChain().set(TASK.TASK_STATUS, 4).where(TASK.ID.eq(taskWorkOrder.getTaskId())).update(); + //扣除5点绩点 + TaskStaffGroupService taskStaffGroupService = SpringUtils.getBean(TaskStaffGroupService.class); + taskStaffGroupService.updateChain().set(TASK_STAFF_GROUP.GRADE_POINT, -5).where(TASK_STAFF_GROUP.TASK_ID.eq(taskWorkOrder.getTaskId())); + } + } +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/framework/utils/OamUtils.java b/Cpop-Oam/src/main/java/com/cpop/oam/framework/utils/OamUtils.java new file mode 100644 index 0000000..0d90a1b --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/framework/utils/OamUtils.java @@ -0,0 +1,36 @@ +package com.cpop.oam.framework.utils; + +import com.alibaba.fastjson.JSONObject; +import com.cpop.core.base.entity.LoginUser; +import com.cpop.core.base.entity.loginInfo.OamStaffLoginInfo; +import com.cpop.core.base.enums.UserType; +import com.cpop.core.service.RedisService; +import com.cpop.core.utils.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * @author DB + * @createTime 2023/09/21 15:59 + * @description + */ +@Component +public class OamUtils { + + @Autowired + private RedisService redisService; + + /** + * @descriptions 获取登陆员工信息 + * @author DB + * @date 2023/09/21 16:00 + * @return com.cpop.core.base.entity.loginInfo.OamStaffLoginInfo + */ + public OamStaffLoginInfo getLoginStaffInfo() { + //获取当前登录用户信息 + LoginUser loginUser = SecurityUtils.getInstance().getLoginUser(); + //获取缓存信息 + JSONObject jsonObject = redisService.getCacheObject(UserType.OAM_USER.getKey() + loginUser.getUsername()); + return jsonObject.getJSONObject("user").toJavaObject(OamStaffLoginInfo.class); + } +} diff --git a/Cpop-Oam/src/main/resources/application-oam.yml b/Cpop-Oam/src/main/resources/application-oam.yml new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/Cpop-Oam/src/main/resources/application-oam.yml @@ -0,0 +1 @@ + diff --git a/Cpop-Oam/src/main/resources/mapper/DeptMapper.xml b/Cpop-Oam/src/main/resources/mapper/DeptMapper.xml new file mode 100644 index 0000000..067372b --- /dev/null +++ b/Cpop-Oam/src/main/resources/mapper/DeptMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/Cpop-Oam/src/main/resources/mapper/DutyMapper.xml b/Cpop-Oam/src/main/resources/mapper/DutyMapper.xml new file mode 100644 index 0000000..8f56793 --- /dev/null +++ b/Cpop-Oam/src/main/resources/mapper/DutyMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/Cpop-Oam/src/main/resources/mapper/FinanceReimburseMapper.xml b/Cpop-Oam/src/main/resources/mapper/FinanceReimburseMapper.xml new file mode 100644 index 0000000..a255f9b --- /dev/null +++ b/Cpop-Oam/src/main/resources/mapper/FinanceReimburseMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/Cpop-Oam/src/main/resources/mapper/FinanceReimburseStageMapper.xml b/Cpop-Oam/src/main/resources/mapper/FinanceReimburseStageMapper.xml new file mode 100644 index 0000000..84a4418 --- /dev/null +++ b/Cpop-Oam/src/main/resources/mapper/FinanceReimburseStageMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/Cpop-Oam/src/main/resources/mapper/FinanceReimburseTypeMapper.xml b/Cpop-Oam/src/main/resources/mapper/FinanceReimburseTypeMapper.xml new file mode 100644 index 0000000..e210d0b --- /dev/null +++ b/Cpop-Oam/src/main/resources/mapper/FinanceReimburseTypeMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/Cpop-Oam/src/main/resources/mapper/MenuMapper.xml b/Cpop-Oam/src/main/resources/mapper/MenuMapper.xml new file mode 100644 index 0000000..6f1aadb --- /dev/null +++ b/Cpop-Oam/src/main/resources/mapper/MenuMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/Cpop-Oam/src/main/resources/mapper/RoleMapper.xml b/Cpop-Oam/src/main/resources/mapper/RoleMapper.xml new file mode 100644 index 0000000..2a93395 --- /dev/null +++ b/Cpop-Oam/src/main/resources/mapper/RoleMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/Cpop-Oam/src/main/resources/mapper/RoleMenuMapper.xml b/Cpop-Oam/src/main/resources/mapper/RoleMenuMapper.xml new file mode 100644 index 0000000..30aafbd --- /dev/null +++ b/Cpop-Oam/src/main/resources/mapper/RoleMenuMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/Cpop-Oam/src/main/resources/mapper/StaffMapper.xml b/Cpop-Oam/src/main/resources/mapper/StaffMapper.xml new file mode 100644 index 0000000..77731cb --- /dev/null +++ b/Cpop-Oam/src/main/resources/mapper/StaffMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/Cpop-Oam/src/main/resources/mapper/TaskDemandMapper.xml b/Cpop-Oam/src/main/resources/mapper/TaskDemandMapper.xml new file mode 100644 index 0000000..a592b2d --- /dev/null +++ b/Cpop-Oam/src/main/resources/mapper/TaskDemandMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/Cpop-Oam/src/main/resources/mapper/TaskMapper.xml b/Cpop-Oam/src/main/resources/mapper/TaskMapper.xml new file mode 100644 index 0000000..042035b --- /dev/null +++ b/Cpop-Oam/src/main/resources/mapper/TaskMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/Cpop-Oam/src/main/resources/mapper/TaskStaffGroupMapper.xml b/Cpop-Oam/src/main/resources/mapper/TaskStaffGroupMapper.xml new file mode 100644 index 0000000..0a94902 --- /dev/null +++ b/Cpop-Oam/src/main/resources/mapper/TaskStaffGroupMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/Cpop-Oam/src/main/resources/mapper/TaskWorkOrderMapper.xml b/Cpop-Oam/src/main/resources/mapper/TaskWorkOrderMapper.xml new file mode 100644 index 0000000..e0fa0b6 --- /dev/null +++ b/Cpop-Oam/src/main/resources/mapper/TaskWorkOrderMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/Cpop-Oam/src/main/resources/mapper/TaskWorkOrderRecordMapper.xml b/Cpop-Oam/src/main/resources/mapper/TaskWorkOrderRecordMapper.xml new file mode 100644 index 0000000..7e1dc90 --- /dev/null +++ b/Cpop-Oam/src/main/resources/mapper/TaskWorkOrderRecordMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/pom.xml b/pom.xml index 3ca921c..6b3dee0 100644 --- a/pom.xml +++ b/pom.xml @@ -18,6 +18,9 @@ Cpop-Common Cpop-Core + Cpop-Generator + Cpop-Oam + Cpop-Oam/Cpop-Oam-Web @@ -33,6 +36,7 @@ 1.21 0.9.1 4.0.3 + 4.2.0 @@ -79,6 +83,12 @@ Cpop-Core ${cpop.version} + + + com.cpop + Cpop-Oam + ${cpop.version} + com.zaxxer @@ -114,6 +124,12 @@ commons-compress ${commons-compress.version} + + + com.github.xiaoymin + knife4j-openapi2-spring-boot-starter + ${knife4j.version} +