From cbae932faa66f522f5429700ca32dc5ce2d73bff Mon Sep 17 00:00:00 2001 From: zlwu <704541015@qq.com> Date: Mon, 14 Jul 2025 13:15:35 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E4=BB=A3=E7=A0=81=E5=8F=8A=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E5=8F=98=E6=9B=B4=E8=87=AA=E5=8A=A8=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/pom.xml | 7 +- backend/ruoyi-modules/ruoyi-hq/pom.xml | 6 - .../impl/HqPmRepairOrderServiceImpl.java | 3 + backend/ruoyi-modules/ruoyi-xg-xx/pom.xml | 1 - .../controller/XgAcademicYearController.java | 147 ---- .../XgBusinessPeriodController.java | 1 - .../xg/controller/XgClassCadreController.java | 359 -------- .../xg/controller/XgClassInfoController.java | 205 ----- .../XgCollectionBatchController.java | 190 ----- .../xg/controller/XgSemesterController.java | 156 ---- .../XgStudentInfoApprovalController.java | 135 --- .../controller/XgStudentInfoController.java | 580 ------------- .../org/dromara/xg/domain/XgAcademicYear.java | 107 --- .../org/dromara/xg/domain/XgAuditRecord.java | 129 --- .../xg/domain/XgBatchOperationLog.java | 180 ---- .../dromara/xg/domain/XgBatchPermission.java | 347 -------- .../xg/domain/XgBatchStudentRelation.java | 211 ----- .../dromara/xg/domain/XgBusinessPeriod.java | 243 ------ .../dromara/xg/domain/XgCadreChangeLog.java | 264 ------ .../xg/domain/XgCadrePositionConfig.java | 210 ----- .../org/dromara/xg/domain/XgClassCadre.java | 466 ----------- .../org/dromara/xg/domain/XgClassInfo.java | 297 ------- .../org/dromara/xg/domain/XgClassStudent.java | 74 -- .../dromara/xg/domain/XgCollectionBatch.java | 494 ----------- .../org/dromara/xg/domain/XgDictData.java | 76 -- .../java/org/dromara/xg/domain/XgNotice.java | 132 --- .../org/dromara/xg/domain/XgNoticeRead.java | 170 ---- .../org/dromara/xg/domain/XgSemester.java | 87 -- .../org/dromara/xg/domain/XgStudentInfo.java | 333 -------- .../xg/domain/XgStudentInfoHistory.java | 102 --- .../org/dromara/xg/domain/XgSystemConfig.java | 76 -- .../xg/domain/bo/XgAcademicYearBo.java | 125 --- .../xg/domain/bo/XgBatchPermissionBo.java | 116 --- .../xg/domain/bo/XgBusinessPeriodBo.java | 93 --- .../dromara/xg/domain/bo/XgClassCadreBo.java | 432 ---------- .../dromara/xg/domain/bo/XgClassInfoBo.java | 255 ------ .../xg/domain/bo/XgCollectionBatchBo.java | 298 ------- .../dromara/xg/domain/bo/XgDictDataBo.java | 85 -- .../org/dromara/xg/domain/bo/XgNoticeBo.java | 115 --- .../dromara/xg/domain/bo/XgNoticeReadBo.java | 206 ----- .../dromara/xg/domain/bo/XgSemesterBo.java | 94 --- .../xg/domain/bo/XgStudentInfoApprovalBo.java | 198 ----- .../dromara/xg/domain/bo/XgStudentInfoBo.java | 507 ----------- .../xg/domain/bo/XgStudentInfoHistoryBo.java | 134 --- .../xg/domain/bo/XgSystemConfigBo.java | 107 --- .../xg/domain/vo/XgAcademicYearVo.java | 106 --- .../dromara/xg/domain/vo/XgAuditRecordVo.java | 200 ----- .../xg/domain/vo/XgBatchOperationLogVo.java | 157 ---- .../xg/domain/vo/XgBatchPermissionVo.java | 145 ---- .../domain/vo/XgBatchStudentRelationVo.java | 169 ---- .../xg/domain/vo/XgBusinessPeriodVo.java | 117 --- .../dromara/xg/domain/vo/XgClassCadreVo.java | 266 ------ .../dromara/xg/domain/vo/XgClassInfoVo.java | 249 ------ .../xg/domain/vo/XgClassStudentVo.java | 166 ---- .../xg/domain/vo/XgCollectionBatchVo.class | Bin 12349 -> 0 bytes .../xg/domain/vo/XgCollectionBatchVo.java | 220 ----- .../dromara/xg/domain/vo/XgDictDataVo.java | 108 --- .../dromara/xg/domain/vo/XgNoticeReadVo.java | 142 ---- .../org/dromara/xg/domain/vo/XgNoticeVo.java | 141 ---- .../dromara/xg/domain/vo/XgSemesterVo.java | 118 --- .../xg/domain/vo/XgStudentInfoApprovalVo.java | 299 ------- .../xg/domain/vo/XgStudentInfoHistoryVo.java | 163 ---- .../dromara/xg/domain/vo/XgStudentInfoVo.java | 495 ----------- .../xg/domain/vo/XgSystemConfigVo.java | 135 --- .../xg/mapper/XgAcademicYearMapper.java | 15 - .../xg/mapper/XgAuditRecordMapper.java | 59 -- .../xg/mapper/XgBatchOperationLogMapper.java | 57 -- .../xg/mapper/XgBatchPermissionMapper.java | 76 -- .../mapper/XgBatchStudentRelationMapper.java | 161 ---- .../xg/mapper/XgBusinessPeriodMapper.java | 119 --- .../dromara/xg/mapper/XgClassCadreMapper.java | 158 ---- .../dromara/xg/mapper/XgClassInfoMapper.java | 65 -- .../xg/mapper/XgClassStudentMapper.java | 67 -- .../xg/mapper/XgCollectionBatchMapper.java | 80 -- .../dromara/xg/mapper/XgDictDataMapper.java | 15 - .../org/dromara/xg/mapper/XgNoticeMapper.java | 15 - .../dromara/xg/mapper/XgNoticeReadMapper.java | 15 - .../dromara/xg/mapper/XgSemesterMapper.java | 15 - .../xg/mapper/XgStudentInfoHistoryMapper.java | 15 - .../xg/mapper/XgStudentInfoMapper.java | 75 -- .../xg/mapper/XgSystemConfigMapper.java | 15 - .../IStudentInfoPermissionService.java | 202 ----- .../xg/service/IXgAcademicYearService.java | 101 --- .../xg/service/IXgBatchPermissionService.java | 193 ----- .../xg/service/IXgBusinessPeriodService.java | 114 --- .../xg/service/IXgClassCadreService.java | 279 ------- .../xg/service/IXgClassInfoService.java | 152 ---- .../xg/service/IXgCollectionBatchService.java | 89 -- .../xg/service/IXgDictDataService.java | 169 ---- .../xg/service/IXgNoticeReadService.java | 144 ---- .../dromara/xg/service/IXgNoticeService.java | 139 --- .../xg/service/IXgSemesterService.java | 106 --- .../IXgStudentInfoApprovalService.java | 81 -- .../service/IXgStudentInfoHistoryService.java | 149 ---- .../xg/service/IXgStudentInfoService.java | 229 ----- .../xg/service/IXgSystemConfigService.java | 155 ---- .../StudentInfoPermissionServiceImpl.java | 550 ------------ .../impl/XgAcademicYearServiceImpl.java | 231 ----- .../impl/XgBatchPermissionServiceImpl.java | 557 ------------- .../impl/XgBusinessPeriodServiceImpl.java | 307 ------- .../service/impl/XgClassCadreServiceImpl.java | 789 ------------------ .../service/impl/XgClassInfoServiceImpl.java | 596 ------------- .../impl/XgCollectionBatchServiceImpl.java | 579 ------------- .../service/impl/XgNoticeReadServiceImpl.java | 264 ------ .../service/impl/XgSemesterServiceImpl.java | 243 ------ .../XgStudentInfoApprovalServiceImpl.java | 305 ------- .../impl/XgStudentInfoServiceImpl.java | 588 ------------- .../mapper/xg/XgAcademicYearMapper.xml | 31 - .../mapper/xg/XgAuditRecordMapper.xml | 142 ---- .../mapper/xg/XgBatchPermissionMapper.xml | 36 - .../mapper/xg/XgBusinessPeriodMapper.xml | 32 - .../mapper/xg/XgClassCadreMapper.xml | 268 ------ .../resources/mapper/xg/XgClassInfoMapper.xml | 119 --- .../mapper/xg/XgClassStudentMapper.xml | 155 ---- .../mapper/xg/XgCollectionBatchMapper.xml | 119 --- .../resources/mapper/xg/XgDictDataMapper.xml | 30 - .../resources/mapper/xg/XgNoticeMapper.xml | 35 - .../mapper/xg/XgNoticeReadMapper.xml | 28 - .../resources/mapper/xg/XgSemesterMapper.xml | 32 - .../mapper/xg/XgStudentInfoHistoryMapper.xml | 36 - .../mapper/xg/XgStudentInfoMapper.xml | 166 ---- .../mapper/xg/XgSystemConfigMapper.xml | 33 - target/classes/META-INF/mps/autoMapper | 4 + target/classes/META-INF/mps/autoMappers | 1 + target/classes/META-INF/mps/mappers | 6 + web/src/router/index.ts | 10 - web/src/views/hq/pm/repairOrder/index.vue | 76 +- 127 files changed, 90 insertions(+), 21551 deletions(-) delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgAcademicYearController.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgBusinessPeriodController.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgClassCadreController.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgClassInfoController.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgCollectionBatchController.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgSemesterController.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgStudentInfoApprovalController.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgStudentInfoController.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgAcademicYear.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgAuditRecord.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgBatchOperationLog.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgBatchPermission.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgBatchStudentRelation.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgBusinessPeriod.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgCadreChangeLog.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgCadrePositionConfig.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgClassCadre.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgClassInfo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgClassStudent.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgCollectionBatch.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgDictData.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgNotice.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgNoticeRead.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgSemester.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgStudentInfo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgStudentInfoHistory.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgSystemConfig.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgAcademicYearBo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgBatchPermissionBo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgBusinessPeriodBo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgClassCadreBo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgClassInfoBo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgCollectionBatchBo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgDictDataBo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgNoticeBo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgNoticeReadBo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgSemesterBo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgStudentInfoApprovalBo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgStudentInfoBo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgStudentInfoHistoryBo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgSystemConfigBo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgAcademicYearVo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgAuditRecordVo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgBatchOperationLogVo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgBatchPermissionVo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgBatchStudentRelationVo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgBusinessPeriodVo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgClassCadreVo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgClassInfoVo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgClassStudentVo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgCollectionBatchVo.class delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgCollectionBatchVo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgDictDataVo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgNoticeReadVo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgNoticeVo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgSemesterVo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgStudentInfoApprovalVo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgStudentInfoHistoryVo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgStudentInfoVo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgSystemConfigVo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgAcademicYearMapper.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgAuditRecordMapper.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgBatchOperationLogMapper.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgBatchPermissionMapper.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgBatchStudentRelationMapper.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgBusinessPeriodMapper.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgClassCadreMapper.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgClassInfoMapper.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgClassStudentMapper.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgCollectionBatchMapper.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgDictDataMapper.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgNoticeMapper.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgNoticeReadMapper.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgSemesterMapper.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgStudentInfoHistoryMapper.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgStudentInfoMapper.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgSystemConfigMapper.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IStudentInfoPermissionService.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgAcademicYearService.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgBatchPermissionService.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgBusinessPeriodService.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgClassCadreService.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgClassInfoService.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgCollectionBatchService.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgDictDataService.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgNoticeReadService.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgNoticeService.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgSemesterService.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgStudentInfoApprovalService.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgStudentInfoHistoryService.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgStudentInfoService.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgSystemConfigService.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/StudentInfoPermissionServiceImpl.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgAcademicYearServiceImpl.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgBatchPermissionServiceImpl.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgBusinessPeriodServiceImpl.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgClassCadreServiceImpl.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgClassInfoServiceImpl.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgCollectionBatchServiceImpl.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgNoticeReadServiceImpl.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgSemesterServiceImpl.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgStudentInfoApprovalServiceImpl.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgStudentInfoServiceImpl.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgAcademicYearMapper.xml delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgAuditRecordMapper.xml delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgBatchPermissionMapper.xml delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgBusinessPeriodMapper.xml delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgClassCadreMapper.xml delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgClassInfoMapper.xml delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgClassStudentMapper.xml delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgCollectionBatchMapper.xml delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgDictDataMapper.xml delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgNoticeMapper.xml delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgNoticeReadMapper.xml delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgSemesterMapper.xml delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgStudentInfoHistoryMapper.xml delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgStudentInfoMapper.xml delete mode 100644 backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgSystemConfigMapper.xml create mode 100644 target/classes/META-INF/mps/autoMapper create mode 100644 target/classes/META-INF/mps/autoMappers create mode 100644 target/classes/META-INF/mps/mappers diff --git a/backend/pom.xml b/backend/pom.xml index 2f24aa5d..fbd239de 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -394,7 +394,12 @@ ruoyi-aqbw ${revision} - + + + org.dromara + ruoyi-xg-xx + ${revision} + diff --git a/backend/ruoyi-modules/ruoyi-hq/pom.xml b/backend/ruoyi-modules/ruoyi-hq/pom.xml index 8a4df5ac..3c07544d 100644 --- a/backend/ruoyi-modules/ruoyi-hq/pom.xml +++ b/backend/ruoyi-modules/ruoyi-hq/pom.xml @@ -104,12 +104,6 @@ ruoyi-workflow - - - org.dromara - ruoyi-xg-xx - ${revision} - diff --git a/backend/ruoyi-modules/ruoyi-hq/src/main/java/org/dromara/hq/service/impl/HqPmRepairOrderServiceImpl.java b/backend/ruoyi-modules/ruoyi-hq/src/main/java/org/dromara/hq/service/impl/HqPmRepairOrderServiceImpl.java index aafef7a6..7acf5df7 100644 --- a/backend/ruoyi-modules/ruoyi-hq/src/main/java/org/dromara/hq/service/impl/HqPmRepairOrderServiceImpl.java +++ b/backend/ruoyi-modules/ruoyi-hq/src/main/java/org/dromara/hq/service/impl/HqPmRepairOrderServiceImpl.java @@ -767,6 +767,9 @@ public class HqPmRepairOrderServiceImpl implements IHqPmRepairOrderService { map.put("issuesEncountered", progress.getIssuesEncountered()); map.put("materialsNeeded", progress.getMaterialsNeeded()); map.put("remark", progress.getRemark()); + // 新增:补充工单的使用材料和后续建议 + map.put("usedMaterials", order.getUsedMaterials()); + map.put("followSuggestions", order.getFollowSuggestions()); result.add(map); } diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/pom.xml b/backend/ruoyi-modules/ruoyi-xg-xx/pom.xml index fa2b914b..d26ced9e 100644 --- a/backend/ruoyi-modules/ruoyi-xg-xx/pom.xml +++ b/backend/ruoyi-modules/ruoyi-xg-xx/pom.xml @@ -9,7 +9,6 @@ 4.0.0 ruoyi-xg-xx - ${revision} 学工管理-学生信息管理模块 diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgAcademicYearController.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgAcademicYearController.java deleted file mode 100644 index 1433008a..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgAcademicYearController.java +++ /dev/null @@ -1,147 +0,0 @@ -package org.dromara.xg.controller; - -import cn.dev33.satoken.annotation.SaCheckPermission; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; -import lombok.RequiredArgsConstructor; -import org.dromara.common.core.domain.R; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.excel.utils.ExcelUtil; -import org.dromara.common.idempotent.annotation.RepeatSubmit; -import org.dromara.common.log.annotation.Log; -import org.dromara.common.log.enums.BusinessType; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.web.core.BaseController; -import org.dromara.xg.domain.bo.XgAcademicYearBo; -import org.dromara.xg.domain.vo.XgAcademicYearVo; -import org.dromara.xg.service.IXgAcademicYearService; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * 学年管理Controller - * - * @author ruoyi - * @date 2025-01-13 - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/xg/academicYear") -public class XgAcademicYearController extends BaseController { - - private final IXgAcademicYearService academicYearService; - - /** - * 查询学年管理列表 - */ - @SaCheckPermission("xg:academicYear:list") - @GetMapping("/list") - public TableDataInfo list(XgAcademicYearBo bo, PageQuery pageQuery) { - return academicYearService.queryPageList(bo, pageQuery); - } - - /** - * 导出学年管理列表 - */ - @SaCheckPermission("xg:academicYear:export") - @Log(title = "学年管理", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(XgAcademicYearBo bo, HttpServletResponse response) { - List list = academicYearService.queryList(bo); - ExcelUtil.exportExcel(list, "学年管理", XgAcademicYearVo.class, response); - } - - /** - * 获取学年管理详细信息 - * - * @param id 主键 - */ - @SaCheckPermission("xg:academicYear:query") - @GetMapping("/{id}") - public R getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { - return R.ok(academicYearService.queryById(id)); - } - - /** - * 新增学年管理 - */ - @SaCheckPermission("xg:academicYear:add") - @Log(title = "学年管理", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping() - public R add(@Validated(AddGroup.class) @RequestBody XgAcademicYearBo bo) { - return toAjax(academicYearService.insertByBo(bo)); - } - - /** - * 修改学年管理 - */ - @SaCheckPermission("xg:academicYear:edit") - @Log(title = "学年管理", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping() - public R edit(@Validated(EditGroup.class) @RequestBody XgAcademicYearBo bo) { - return toAjax(academicYearService.updateByBo(bo)); - } - - /** - * 删除学年管理 - * - * @param ids 主键串 - */ - @SaCheckPermission("xg:academicYear:remove") - @Log(title = "学年管理", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public R remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) { - return toAjax(academicYearService.deleteWithValidByIds(List.of(ids), true)); - } - - /** - * 查询当前学年 - */ - @SaCheckPermission("xg:academicYear:query") - @GetMapping("/current") - public R getCurrentYear() { - return R.ok(academicYearService.queryCurrentYear()); - } - - /** - * 设置当前学年 - * - * @param id 学年ID - */ - @SaCheckPermission("xg:academicYear:edit") - @Log(title = "设置当前学年", businessType = BusinessType.UPDATE) - @PutMapping("/setCurrent/{id}") - public R setCurrentYear(@NotNull(message = "学年ID不能为空") @PathVariable Long id) { - return toAjax(academicYearService.setCurrentYear(id)); - } - - /** - * 根据学年编码查询学年信息 - * - * @param yearCode 学年编码 - */ - @SaCheckPermission("xg:academicYear:query") - @GetMapping("/getByCode/{yearCode}") - public R getByYearCode(@PathVariable String yearCode) { - return R.ok(academicYearService.queryByYearCode(yearCode)); - } - - /** - * 检查学年编码是否存在 - * - * @param yearCode 学年编码 - * @param id 学年ID(修改时使用) - */ - @GetMapping("/checkYearCode") - public R checkYearCode(@RequestParam String yearCode, @RequestParam(required = false) Long id) { - return R.ok(academicYearService.checkYearCodeExists(yearCode, id)); - } -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgBusinessPeriodController.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgBusinessPeriodController.java deleted file mode 100644 index 0519ecba..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgBusinessPeriodController.java +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgClassCadreController.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgClassCadreController.java deleted file mode 100644 index 4a3b219a..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgClassCadreController.java +++ /dev/null @@ -1,359 +0,0 @@ -package org.dromara.xg.controller; - -import java.util.List; -import java.util.Date; - -import lombok.RequiredArgsConstructor; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.*; -import cn.dev33.satoken.annotation.SaCheckPermission; -import org.springframework.web.bind.annotation.*; -import org.springframework.validation.annotation.Validated; -import org.dromara.common.idempotent.annotation.RepeatSubmit; -import org.dromara.common.log.annotation.Log; -import org.dromara.common.web.core.BaseController; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.core.domain.R; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.log.enums.BusinessType; -import org.dromara.common.excel.utils.ExcelUtil; -import org.dromara.common.excel.core.ExcelResult; -import org.dromara.common.satoken.utils.LoginHelper; -import org.dromara.xg.domain.vo.XgClassCadreVo; -import org.dromara.xg.domain.bo.XgClassCadreBo; -import org.dromara.xg.service.IXgClassCadreService; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.springframework.format.annotation.DateTimeFormat; -import org.springframework.web.multipart.MultipartFile; - -/** - * 班级干部信息管理Controller - * - * @author Cursor AI - * @date 2025-01-09 - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/xg/classCadre") -public class XgClassCadreController extends BaseController { - - private final IXgClassCadreService xgClassCadreService; - - /** - * 查询班级干部信息列表 - */ - @SaCheckPermission("xg:classCadre:list") - @GetMapping("/list") - public TableDataInfo list(XgClassCadreBo bo, PageQuery pageQuery) { - return xgClassCadreService.queryPageList(bo, pageQuery); - } - - /** - * 导出班级干部信息列表 - */ - @SaCheckPermission("xg:classCadre:export") - @Log(title = "班级干部信息", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(XgClassCadreBo bo, HttpServletResponse response) { - List list = xgClassCadreService.exportCadreList(bo); - ExcelUtil.exportExcel(list, "班级干部信息", XgClassCadreVo.class, response); - } - - /** - * 获取班级干部信息详细信息 - */ - @SaCheckPermission("xg:classCadre:query") - @GetMapping("/{id}") - public R getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { - return R.ok(xgClassCadreService.queryCadreWithDetails(id)); - } - - /** - * 新增班级干部信息 - */ - @SaCheckPermission("xg:classCadre:add") - @Log(title = "班级干部信息", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping() - public R add(@Validated(AddGroup.class) @RequestBody XgClassCadreBo bo) { - return toAjax(xgClassCadreService.insertByBo(bo)); - } - - /** - * 修改班级干部信息 - */ - @SaCheckPermission("xg:classCadre:edit") - @Log(title = "班级干部信息", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping() - public R edit(@Validated(EditGroup.class) @RequestBody XgClassCadreBo bo) { - return toAjax(xgClassCadreService.updateByBo(bo)); - } - - /** - * 删除班级干部信息 - */ - @SaCheckPermission("xg:classCadre:remove") - @Log(title = "班级干部信息", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public R remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) { - return toAjax(xgClassCadreService.deleteWithValidByIds(List.of(ids), true)); - } - - // ==================== 业务功能接口 ==================== - - /** - * 根据班级ID查询班干部列表 - */ - @SaCheckPermission("xg:classCadre:list") - @GetMapping("/class/{classId}") - public R> getCadresByClass(@NotNull(message = "班级ID不能为空") @PathVariable Long classId) { - return R.ok(xgClassCadreService.queryCadresByClassId(classId)); - } - - /** - * 根据学生ID查询班干部信息 - */ - @SaCheckPermission("xg:classCadre:list") - @GetMapping("/student/{studentId}") - public R> getCadresByStudent(@NotNull(message = "学生ID不能为空") @PathVariable Long studentId) { - return R.ok(xgClassCadreService.queryCadresByStudentId(studentId)); - } - - /** - * 查询当前在任班干部列表 - */ - @SaCheckPermission("xg:classCadre:list") - @GetMapping("/current") - public R> getCurrentCadres(@RequestParam(required = false) Long classId) { - return R.ok(xgClassCadreService.queryCurrentCadres(classId)); - } - - /** - * 根据职务查询班干部 - */ - @SaCheckPermission("xg:classCadre:list") - @GetMapping("/position") - public R getCadreByPosition( - @NotNull(message = "班级ID不能为空") @RequestParam Long classId, - @NotBlank(message = "职务编码不能为空") @RequestParam String positionCode) { - return R.ok(xgClassCadreService.queryCadreByPosition(classId, positionCode)); - } - - /** - * 任命班干部 - */ - @SaCheckPermission("xg:classCadre:appoint") - @Log(title = "任命班干部", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping("/appoint") - public R appointCadre(@Validated(AddGroup.class) @RequestBody XgClassCadreBo bo) { - return toAjax(xgClassCadreService.appointCadre(bo)); - } - - /** - * 免职班干部 - */ - @SaCheckPermission("xg:classCadre:dismiss") - @Log(title = "免职班干部", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping("/dismiss/{cadreId}") - public R dismissCadre( - @NotNull(message = "班干部ID不能为空") @PathVariable Long cadreId, - @NotBlank(message = "免职原因不能为空") @RequestParam String dismissalReason, - @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date dismissalDate) { - return toAjax(xgClassCadreService.dismissCadre(cadreId, dismissalReason, dismissalDate)); - } - - /** - * 调任班干部 - */ - @SaCheckPermission("xg:classCadre:transfer") - @Log(title = "调任班干部", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping("/transfer/{cadreId}") - public R transferCadre( - @NotNull(message = "班干部ID不能为空") @PathVariable Long cadreId, - @NotBlank(message = "新职务编码不能为空") @RequestParam String newPositionCode, - @NotBlank(message = "新职务名称不能为空") @RequestParam String newPositionName, - @NotBlank(message = "调任原因不能为空") @RequestParam String transferReason, - @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date effectiveDate) { - return toAjax(xgClassCadreService.transferCadre(cadreId, newPositionCode, newPositionName, transferReason, effectiveDate)); - } - - /** - * 续任班干部 - */ - @SaCheckPermission("xg:classCadre:renew") - @Log(title = "续任班干部", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping("/renew/{cadreId}") - public R renewCadre( - @NotNull(message = "班干部ID不能为空") @PathVariable Long cadreId, - @NotNull(message = "新任期时长不能为空") @Min(value = 1, message = "新任期时长最少1个月") @Max(value = 48, message = "新任期时长最多48个月") @RequestParam Integer newTermDuration, - @NotBlank(message = "续任原因不能为空") @RequestParam String renewalReason) { - return toAjax(xgClassCadreService.renewCadre(cadreId, newTermDuration, renewalReason)); - } - - /** - * 班干部辞职 - */ - @SaCheckPermission("xg:classCadre:resign") - @Log(title = "班干部辞职", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping("/resign/{cadreId}") - public R resignCadre( - @NotNull(message = "班干部ID不能为空") @PathVariable Long cadreId, - @NotBlank(message = "辞职原因不能为空") @RequestParam String resignationReason, - @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date resignationDate) { - return toAjax(xgClassCadreService.resignCadre(cadreId, resignationReason, resignationDate)); - } - - // ==================== 统计查询接口 ==================== - - /** - * 查询即将到期的班干部列表 - */ - @SaCheckPermission("xg:classCadre:list") - @GetMapping("/expiring") - public R> getExpiringCadres(@RequestParam(defaultValue = "30") Integer days) { - return R.ok(xgClassCadreService.queryExpiringCadres(days)); - } - - /** - * 查询已到期的班干部列表 - */ - @SaCheckPermission("xg:classCadre:list") - @GetMapping("/expired") - public R> getExpiredCadres() { - return R.ok(xgClassCadreService.queryExpiredCadres()); - } - - /** - * 根据学院查询班干部统计 - */ - @SaCheckPermission("xg:classCadre:list") - @GetMapping("/college/{collegeName}") - public R> getCadresByCollege(@NotBlank(message = "学院名称不能为空") @PathVariable String collegeName) { - return R.ok(xgClassCadreService.queryCadresByCollege(collegeName)); - } - - /** - * 根据年级查询班干部统计 - */ - @SaCheckPermission("xg:classCadre:list") - @GetMapping("/grade/{grade}") - public R> getCadresByGrade(@NotBlank(message = "年级不能为空") @PathVariable String grade) { - return R.ok(xgClassCadreService.queryCadresByGrade(grade)); - } - - /** - * 查询班干部任期统计 - */ - @SaCheckPermission("xg:classCadre:list") - @GetMapping("/term-statistics") - public R> getCadreTermStatistics( - @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate, - @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate) { - return R.ok(xgClassCadreService.queryCadreTermStatistics(startDate, endDate)); - } - - /** - * 根据职务级别查询班干部 - */ - @SaCheckPermission("xg:classCadre:list") - @GetMapping("/level/{positionLevel}") - public R> getCadresByLevel(@NotNull(message = "职务级别不能为空") @PathVariable Integer positionLevel) { - return R.ok(xgClassCadreService.queryCadresByPositionLevel(positionLevel)); - } - - /** - * 查询班干部工作表现统计 - */ - @SaCheckPermission("xg:classCadre:list") - @GetMapping("/performance/{performance}") - public R> getCadresByPerformance(@NotBlank(message = "工作表现不能为空") @PathVariable String performance) { - return R.ok(xgClassCadreService.queryCadresByPerformance(performance)); - } - - // ==================== 辅助功能接口 ==================== - - /** - * 检查职务是否已被占用 - */ - @SaCheckPermission("xg:classCadre:list") - @GetMapping("/check-position") - public R checkPositionOccupied( - @NotNull(message = "班级ID不能为空") @RequestParam Long classId, - @NotBlank(message = "职务编码不能为空") @RequestParam String positionCode, - @RequestParam(required = false) Long excludeId) { - return R.ok(xgClassCadreService.checkPositionOccupied(classId, positionCode, excludeId)); - } - - /** - * 检查学生是否已有其他职务 - */ - @SaCheckPermission("xg:classCadre:list") - @GetMapping("/check-student") - public R checkStudentHasOtherPosition( - @NotNull(message = "学生ID不能为空") @RequestParam Long studentId, - @RequestParam(required = false) Long excludeId) { - return R.ok(xgClassCadreService.checkStudentHasOtherPosition(studentId, excludeId)); - } - - /** - * 批量更新班干部状态 - */ - @SaCheckPermission("xg:classCadre:edit") - @Log(title = "批量更新班干部状态", businessType = BusinessType.UPDATE) - @PutMapping("/batch-status") - public R batchUpdateStatus( - @NotEmpty(message = "班干部ID列表不能为空") @RequestParam List cadreIds, - @NotBlank(message = "状态不能为空") @RequestParam String status) { - return toAjax(xgClassCadreService.batchUpdateCadreStatus(cadreIds, status)); - } - - /** - * 自动处理到期班干部 - */ - @SaCheckPermission("xg:classCadre:process") - @Log(title = "自动处理到期班干部", businessType = BusinessType.UPDATE) - @PostMapping("/auto-process-expired") - public R autoProcessExpired() { - return toAjax(xgClassCadreService.autoProcessExpiredCadres()); - } - - /** - * 发送到期提醒通知 - */ - @SaCheckPermission("xg:classCadre:notify") - @Log(title = "发送到期提醒通知", businessType = BusinessType.OTHER) - @PostMapping("/send-reminder") - public R sendReminder(@RequestParam(defaultValue = "30") Integer days) { - return toAjax(xgClassCadreService.sendExpirationReminder(days)); - } - - /** - * 导入班干部信息 - */ - @SaCheckPermission("xg:classCadre:import") - @Log(title = "班级干部信息", businessType = BusinessType.IMPORT) - @PostMapping("/import") - public R importData(MultipartFile file, boolean updateSupport) throws Exception { - ExcelResult result = ExcelUtil.importExcel(file.getInputStream(), XgClassCadreVo.class, true); - List cadreList = result.getList(); - String operName = LoginHelper.getUsername(); - String message = xgClassCadreService.importCadreList(cadreList, updateSupport, operName); - return R.ok(message); - } - - /** - * 获取导入模板 - */ - @PostMapping("/import-template") - public void importTemplate(HttpServletResponse response) { - ExcelUtil.exportExcel(List.of(), "班级干部信息", XgClassCadreVo.class, response); - } -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgClassInfoController.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgClassInfoController.java deleted file mode 100644 index 98f03b80..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgClassInfoController.java +++ /dev/null @@ -1,205 +0,0 @@ -package org.dromara.xg.controller; - -import java.util.List; -import java.util.Map; - -import lombok.RequiredArgsConstructor; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.*; -import cn.dev33.satoken.annotation.SaCheckPermission; -import org.springframework.web.bind.annotation.*; -import org.springframework.validation.annotation.Validated; -import org.dromara.common.idempotent.annotation.RepeatSubmit; -import org.dromara.common.log.annotation.Log; -import org.dromara.common.web.core.BaseController; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.core.domain.R; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.log.enums.BusinessType; -import org.dromara.common.excel.utils.ExcelUtil; -import org.dromara.xg.domain.vo.XgClassInfoVo; -import org.dromara.xg.domain.bo.XgClassInfoBo; -import org.dromara.xg.service.IXgClassInfoService; -import org.dromara.common.mybatis.core.page.TableDataInfo; - -/** - * 班级信息Controller - * - * @author Cursor AI - * @date 2025-01-12 - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/xg/classInfo") -public class XgClassInfoController extends BaseController { - - private final IXgClassInfoService classInfoService; - - /** - * 查询班级信息列表 - */ - @SaCheckPermission("xg:classInfo:list") - @GetMapping("/list") - public TableDataInfo list(XgClassInfoBo bo, PageQuery pageQuery) { - return classInfoService.queryPageList(bo, pageQuery); - } - - /** - * 导出班级信息列表 - */ - @SaCheckPermission("xg:classInfo:export") - @Log(title = "班级信息", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(XgClassInfoBo bo, HttpServletResponse response) { - List list = classInfoService.queryList(bo); - ExcelUtil.exportExcel(list, "班级信息", XgClassInfoVo.class, response); - } - - /** - * 获取班级选项列表(用于下拉框) - */ - @SaCheckPermission("xg:classInfo:list") - @GetMapping("/options") - public R>> getClassOptions() { - return R.ok(classInfoService.queryClassOptions()); - } - - /** - * 获取辅导员选项列表(用于下拉框) - */ - @SaCheckPermission("xg:classInfo:list") - @GetMapping("/counselorOptions") - public R>> getCounselorOptions(@RequestParam(required = false) String collegeCode) { - return R.ok(classInfoService.queryCounselorOptions(collegeCode)); - } - - /** - * 获取班主任选项列表(用于下拉框) - */ - @SaCheckPermission("xg:classInfo:list") - @GetMapping("/classTeacherOptions") - public R>> getClassTeacherOptions(@RequestParam(required = false) String collegeCode) { - return R.ok(classInfoService.queryClassTeacherOptions(collegeCode)); - } - - /** - * 获取班级信息总体统计 - */ - @SaCheckPermission("xg:classInfo:list") - @GetMapping("/statistics") - public R> getClassInfoStatistics() { - return R.ok(classInfoService.queryClassInfoStatistics()); - } - - /** - * 检查班级代码是否存在 - */ - @SaCheckPermission("xg:classInfo:query") - @GetMapping("/checkClassCode") - public R checkClassCodeExists( - @NotBlank(message = "班级代码不能为空") @RequestParam String classCode, - @RequestParam(required = false) Long classId) { - return R.ok(classInfoService.checkClassCodeExists(classCode, classId)); - } - - /** - * 批量生成班级代码 - */ - @SaCheckPermission("xg:classInfo:add") - @Log(title = "批量生成班级代码", businessType = BusinessType.INSERT) - @PostMapping("/generateClassCode") - public R> generateClassCode(@RequestBody Map params) { - String collegeCode = (String) params.get("collegeCode"); - String majorCode = (String) params.get("majorCode"); - Integer enrollmentYear = (Integer) params.get("enrollmentYear"); - Integer classCount = (Integer) params.get("classCount"); - - return R.ok(classInfoService.generateClassCode(collegeCode, majorCode, enrollmentYear, classCount)); - } - - /** - * 根据班级代码查询班级信息 - */ - @SaCheckPermission("xg:classInfo:query") - @GetMapping("/byCode/{classCode}") - public R getByClassCode(@NotBlank(message = "班级代码不能为空") @PathVariable String classCode) { - return R.ok(classInfoService.queryByClassCode(classCode)); - } - - /** - * 查询学院班级列表 - */ - @SaCheckPermission("xg:classInfo:list") - @GetMapping("/byCollege/{collegeCode}") - public R> getByCollegeCode(@NotBlank(message = "学院代码不能为空") @PathVariable String collegeCode) { - return R.ok(classInfoService.queryByCollegeCode(collegeCode)); - } - - /** - * 获取班级学生统计 - */ - @SaCheckPermission("xg:classInfo:list") - @GetMapping("/{classId}/statistics") - public R> getClassStudentStatistics(@NotNull(message = "班级ID不能为空") @PathVariable Long classId) { - return R.ok(classInfoService.queryClassStudentStatistics(classId)); - } - - /** - * 更新班级人数统计 - */ - @SaCheckPermission("xg:classInfo:edit") - @Log(title = "更新人数统计", businessType = BusinessType.UPDATE) - @PutMapping("/{classId}/updateCount") - public R updateClassStudentCount(@NotNull(message = "班级ID不能为空") @PathVariable Long classId) { - return toAjax(classInfoService.updateClassStudentCount(classId)); - } - - /** - * 获取班级信息详细信息 - 注意:此方法必须放在最后,避免路径冲突 - */ - @SaCheckPermission("xg:classInfo:query") - @GetMapping("/{id}") - public R getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { - return R.ok(classInfoService.queryById(id)); - } - - /** - * 新增班级信息 - */ - @SaCheckPermission("xg:classInfo:add") - @Log(title = "班级信息", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping() - public R add(@Validated(AddGroup.class) @RequestBody XgClassInfoBo bo) { - boolean success = classInfoService.insertByBo(bo); - if (success) { - return R.ok(bo.getId()); - } else { - return R.fail("新增班级信息失败"); - } - } - - /** - * 修改班级信息 - */ - @SaCheckPermission("xg:classInfo:edit") - @Log(title = "班级信息", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping() - public R edit(@Validated(EditGroup.class) @RequestBody XgClassInfoBo bo) { - return toAjax(classInfoService.updateByBo(bo)); - } - - /** - * 删除班级信息 - */ - @SaCheckPermission("xg:classInfo:remove") - @Log(title = "班级信息", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public R remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) { - return toAjax(classInfoService.deleteWithValidByIds(List.of(ids), true)); - } - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgCollectionBatchController.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgCollectionBatchController.java deleted file mode 100644 index 04178aaa..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgCollectionBatchController.java +++ /dev/null @@ -1,190 +0,0 @@ -package org.dromara.xg.controller; - -import cn.dev33.satoken.annotation.SaCheckPermission; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; -import lombok.RequiredArgsConstructor; -import org.dromara.common.core.domain.R; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.excel.utils.ExcelUtil; -import org.dromara.common.idempotent.annotation.RepeatSubmit; -import org.dromara.common.log.annotation.Log; -import org.dromara.common.log.enums.BusinessType; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.web.core.BaseController; -import org.dromara.xg.domain.bo.XgCollectionBatchBo; -import org.dromara.xg.domain.vo.XgCollectionBatchVo; -import org.dromara.xg.service.IXgCollectionBatchService; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.List; -import java.util.Map; - -/** - * 信息采集批次管理 - * - * @author ruoyi - * @date 2025-01-13 - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/xg/collectionBatch") -public class XgCollectionBatchController extends BaseController { - - private final IXgCollectionBatchService collectionBatchService; - - /** - * 查询信息采集批次列表 - */ - @SaCheckPermission("xg:collectionBatch:list") - @GetMapping("/list") - public TableDataInfo list(XgCollectionBatchBo bo, PageQuery pageQuery) { - return collectionBatchService.queryPageList(bo, pageQuery); - } - - /** - * 查询所有信息采集批次列表(不分页) - */ - @SaCheckPermission("xg:collectionBatch:list") - @GetMapping("/listAll") - public R> listAll(XgCollectionBatchBo bo) { - List list = collectionBatchService.queryList(bo); - return R.ok(list); - } - - /** - * 导出信息采集批次列表 - */ - @SaCheckPermission("xg:collectionBatch:export") - @Log(title = "信息采集批次", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(XgCollectionBatchBo bo, HttpServletResponse response) { - List list = collectionBatchService.queryList(bo); - ExcelUtil.exportExcel(list, "信息采集批次", XgCollectionBatchVo.class, response); - } - - /** - * 获取信息采集批次详细信息 - */ - @SaCheckPermission("xg:collectionBatch:query") - @GetMapping("/{id}") - public R getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { - return R.ok(collectionBatchService.queryById(id)); - } - - /** - * 新增信息采集批次 - */ - @SaCheckPermission("xg:collectionBatch:add") - @Log(title = "信息采集批次", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping() - public R add(@Validated(AddGroup.class) @RequestBody XgCollectionBatchBo bo) { - return toAjax(collectionBatchService.insertByBo(bo)); - } - - /** - * 修改信息采集批次 - */ - @SaCheckPermission("xg:collectionBatch:edit") - @Log(title = "信息采集批次", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping() - public R edit(@Validated(EditGroup.class) @RequestBody XgCollectionBatchBo bo) { - return toAjax(collectionBatchService.updateByBo(bo)); - } - - /** - * 删除信息采集批次 - */ - @SaCheckPermission("xg:collectionBatch:remove") - @Log(title = "信息采集批次", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public R remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) { - return toAjax(collectionBatchService.deleteWithValidByIds(List.of(ids), true)); - } - - /** - * 发布批次 - */ - @SaCheckPermission("xg:collectionBatch:publish") - @Log(title = "发布信息采集批次", businessType = BusinessType.UPDATE) - @PostMapping("/publish/{id}") - public R publishBatch(@NotNull(message = "批次ID不能为空") @PathVariable Long id) { - return toAjax(collectionBatchService.publishBatch(id)); - } - - /** - * 取消发布批次 - */ - @SaCheckPermission("xg:collectionBatch:unpublish") - @Log(title = "取消发布信息采集批次", businessType = BusinessType.UPDATE) - @PostMapping("/unpublish/{id}") - public R unpublishBatch(@NotNull(message = "批次ID不能为空") @PathVariable Long id) { - return toAjax(collectionBatchService.unpublishBatch(id)); - } - - /** - * 结束批次 - */ - @SaCheckPermission("xg:collectionBatch:complete") - @Log(title = "结束信息采集批次", businessType = BusinessType.UPDATE) - @PostMapping("/complete/{id}") - public R completeBatch(@NotNull(message = "批次ID不能为空") @PathVariable Long id) { - return toAjax(collectionBatchService.completeBatch(id)); - } - - /** - * 复制批次 - */ - @SaCheckPermission("xg:collectionBatch:copy") - @Log(title = "复制信息采集批次", businessType = BusinessType.INSERT) - @PostMapping("/copy/{id}") - public R copyBatch(@NotNull(message = "批次ID不能为空") @PathVariable Long id, - @RequestParam String newBatchName, - @RequestParam String newBatchCode) { - return toAjax(collectionBatchService.copyBatch(id, newBatchName, newBatchCode)); - } - - /** - * 获取批次统计信息 - */ - @SaCheckPermission("xg:collectionBatch:statistics") - @GetMapping("/statistics/{id}") - public R> getBatchStatistics(@NotNull(message = "批次ID不能为空") @PathVariable Long id) { - return R.ok(collectionBatchService.getBatchStatistics(id)); - } - - /** - * 查询当前活跃批次 - */ - @SaCheckPermission("xg:collectionBatch:list") - @GetMapping("/active") - public R> getActiveBatches() { - return R.ok(collectionBatchService.getActiveBatches()); - } - - /** - * 更新批次统计信息 - */ - @SaCheckPermission("xg:collectionBatch:statistics") - @Log(title = "更新批次统计信息", businessType = BusinessType.UPDATE) - @PostMapping("/updateStatistics/{id}") - public R updateBatchStatistics(@NotNull(message = "批次ID不能为空") @PathVariable Long id) { - return toAjax(collectionBatchService.updateBatchStatistics(id)); - } - - /** - * 获取批次选项列表 - */ - @SaCheckPermission("xg:collectionBatch:list") - @GetMapping("/options") - public R>> getBatchOptions() { - return R.ok(collectionBatchService.getBatchOptions()); - } -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgSemesterController.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgSemesterController.java deleted file mode 100644 index 14bdc209..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgSemesterController.java +++ /dev/null @@ -1,156 +0,0 @@ -package org.dromara.xg.controller; - -import cn.dev33.satoken.annotation.SaCheckPermission; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; -import lombok.RequiredArgsConstructor; -import org.dromara.common.core.domain.R; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.excel.utils.ExcelUtil; -import org.dromara.common.idempotent.annotation.RepeatSubmit; -import org.dromara.common.log.annotation.Log; -import org.dromara.common.log.enums.BusinessType; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.web.core.BaseController; -import org.dromara.xg.domain.bo.XgSemesterBo; -import org.dromara.xg.domain.vo.XgSemesterVo; -import org.dromara.xg.service.IXgSemesterService; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * 学期管理Controller - * - * @author ruoyi - * @date 2025-01-13 - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/xg/semester") -public class XgSemesterController extends BaseController { - - private final IXgSemesterService semesterService; - - /** - * 查询学期管理列表 - */ - @SaCheckPermission("xg:semester:list") - @GetMapping("/list") - public TableDataInfo list(XgSemesterBo bo, PageQuery pageQuery) { - return semesterService.queryPageList(bo, pageQuery); - } - - /** - * 导出学期管理列表 - */ - @SaCheckPermission("xg:semester:export") - @Log(title = "学期管理", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(XgSemesterBo bo, HttpServletResponse response) { - List list = semesterService.queryList(bo); - ExcelUtil.exportExcel(list, "学期管理", XgSemesterVo.class, response); - } - - /** - * 获取学期管理详细信息 - * - * @param id 主键 - */ - @SaCheckPermission("xg:semester:query") - @GetMapping("/{id}") - public R getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { - return R.ok(semesterService.queryById(id)); - } - - /** - * 新增学期管理 - */ - @SaCheckPermission("xg:semester:add") - @Log(title = "学期管理", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping() - public R add(@Validated(AddGroup.class) @RequestBody XgSemesterBo bo) { - return toAjax(semesterService.insertByBo(bo)); - } - - /** - * 修改学期管理 - */ - @SaCheckPermission("xg:semester:edit") - @Log(title = "学期管理", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping() - public R edit(@Validated(EditGroup.class) @RequestBody XgSemesterBo bo) { - return toAjax(semesterService.updateByBo(bo)); - } - - /** - * 删除学期管理 - * - * @param ids 主键串 - */ - @SaCheckPermission("xg:semester:remove") - @Log(title = "学期管理", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public R remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) { - return toAjax(semesterService.deleteWithValidByIds(List.of(ids))); - } - - /** - * 根据学年ID查询学期列表 - * - * @param academicYearId 学年ID - */ - @SaCheckPermission("xg:semester:query") - @GetMapping("/getByAcademicYear/{academicYearId}") - public R> getByAcademicYearId(@PathVariable Long academicYearId) { - return R.ok(semesterService.queryByAcademicYearId(academicYearId)); - } - - /** - * 查询当前学期 - */ - @SaCheckPermission("xg:semester:query") - @GetMapping("/current") - public R getCurrentSemester() { - return R.ok(semesterService.queryCurrentSemester()); - } - - /** - * 设置当前学期 - * - * @param id 学期ID - */ - @SaCheckPermission("xg:semester:edit") - @Log(title = "设置当前学期", businessType = BusinessType.UPDATE) - @PutMapping("/setCurrent/{id}") - public R setCurrentSemester(@NotNull(message = "学期ID不能为空") @PathVariable Long id) { - return toAjax(semesterService.setCurrentSemester(id)); - } - - /** - * 查询可用的学期选项 - */ - @SaCheckPermission("xg:semester:query") - @GetMapping("/availableOptions") - public R> getAvailableOptions() { - return R.ok(semesterService.queryAvailableOptions()); - } - - /** - * 校验学期名称是否唯一 - * - * @param semesterName 学期名称 - * @param id 学期ID - */ - @GetMapping("/checkSemesterName") - public R checkSemesterName(@RequestParam String semesterName, @RequestParam(required = false) Long id) { - return R.ok(semesterService.checkSemesterNameUnique(semesterName, id)); - } -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgStudentInfoApprovalController.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgStudentInfoApprovalController.java deleted file mode 100644 index 72ae880c..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgStudentInfoApprovalController.java +++ /dev/null @@ -1,135 +0,0 @@ -package org.dromara.xg.controller; - -import cn.dev33.satoken.annotation.SaCheckPermission; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; -import lombok.RequiredArgsConstructor; -import org.dromara.common.core.domain.R; -import org.dromara.common.excel.utils.ExcelUtil; -import org.dromara.common.idempotent.annotation.RepeatSubmit; -import org.dromara.common.log.annotation.Log; -import org.dromara.common.log.enums.BusinessType; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.web.core.BaseController; -import org.dromara.xg.domain.bo.XgStudentInfoApprovalBo; -import org.dromara.xg.domain.vo.XgStudentInfoApprovalVo; -import org.dromara.xg.service.IXgStudentInfoApprovalService; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.List; -import java.util.Map; - -/** - * 学生信息审核管理 - * - * @author ruoyi - * @date 2025-01-13 - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/xg/studentInfoApproval") -public class XgStudentInfoApprovalController extends BaseController { - - private final IXgStudentInfoApprovalService studentInfoApprovalService; - - /** - * 查询待审核的学生信息列表 - */ - @SaCheckPermission("xg:studentInfo:approve") - @GetMapping("/pending") - public TableDataInfo queryPendingApprovalList(XgStudentInfoApprovalBo bo, PageQuery pageQuery) { - return studentInfoApprovalService.queryPendingApprovalList(bo, pageQuery); - } - - /** - * 查询已审核的学生信息列表 - */ - @SaCheckPermission("xg:studentInfo:approve") - @GetMapping("/approved") - public TableDataInfo queryApprovedList(XgStudentInfoApprovalBo bo, PageQuery pageQuery) { - return studentInfoApprovalService.queryApprovedList(bo, pageQuery); - } - - /** - * 审批学生信息 - */ - @PostMapping("/approve") - public R approveStudentInfo(@RequestParam @NotNull(message = "学生ID不能为空") Long studentId, - @RequestParam @NotNull(message = "批次ID不能为空") Long batchId, - @RequestParam @NotNull(message = "审核结果不能为空") Boolean approved, - @RequestParam String comments) { - String approvalStatus = approved ? "approved" : "rejected"; - return toAjax(studentInfoApprovalService.approveStudentInfo(studentId, batchId, approvalStatus, comments)); - } - - /** - * 批量审批学生信息 - */ - @SaCheckPermission("xg:studentInfo:approve") - @Log(title = "批量审核学生信息", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PostMapping("/batchApprove") - public R batchApproveStudentInfo(@NotEmpty(message = "学生ID列表不能为空") @RequestBody List studentIds, - @NotNull(message = "批次ID不能为空") @RequestParam Long batchId, - @NotNull(message = "审核结果不能为空") @RequestParam Boolean approved, - @RequestParam(required = false) String comments) { - String approvalStatus = approved ? "approved" : "rejected"; - return toAjax(studentInfoApprovalService.batchApproveStudentInfo(studentIds, batchId, approvalStatus, comments)); - } - - /** - * 撤销审批 - */ - @SaCheckPermission("xg:studentInfo:approve") - @Log(title = "撤销审核", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PostMapping("/revoke") - public R revokeApproval(@NotNull(message = "学生ID不能为空") @RequestParam Long studentId, - @NotNull(message = "批次ID不能为空") @RequestParam Long batchId, - @RequestParam(required = false) String reason) { - return toAjax(studentInfoApprovalService.revokeApproval(studentId, batchId, reason)); - } - - /** - * 查询学生信息审核历史 - */ - @SaCheckPermission("xg:studentInfo:approve") - @GetMapping("/history") - public R> queryApprovalHistory(@NotNull(message = "学生ID不能为空") @RequestParam Long studentId, - @NotNull(message = "批次ID不能为空") @RequestParam Long batchId) { - return R.ok(studentInfoApprovalService.queryApprovalHistory(studentId, batchId)); - } - - /** - * 获取审批统计 - */ - @SaCheckPermission("xg:studentInfo:approve") - @GetMapping("/statistics/{batchId}") - public R> getApprovalStatistics(@PathVariable @NotNull(message = "批次ID不能为空") Long batchId) { - return success(studentInfoApprovalService.getApprovalStatistics(batchId)); - } - - /** - * 检查审批权限 - */ - @SaCheckPermission("xg:studentInfo:approve") - @GetMapping("/checkPermission/{batchId}") - public R checkApprovalPermission(@PathVariable @NotNull(message = "批次ID不能为空") Long batchId) { - return success(studentInfoApprovalService.checkApprovalPermission(batchId)); - } - - /** - * 导出审核结果 - */ - @SaCheckPermission("xg:studentInfo:export") - @Log(title = "导出审核结果", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void exportApprovalResults(XgStudentInfoApprovalBo bo, HttpServletResponse response) { - List list = studentInfoApprovalService.exportApprovalResult(bo); - ExcelUtil.exportExcel(list, "审批结果", XgStudentInfoApprovalVo.class, response); - } -} \ No newline at end of file diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgStudentInfoController.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgStudentInfoController.java deleted file mode 100644 index 9ac3a95f..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgStudentInfoController.java +++ /dev/null @@ -1,580 +0,0 @@ -package org.dromara.xg.controller; - -import java.util.List; -import java.util.Map; -import java.util.ArrayList; -import java.util.HashMap; - -import lombok.RequiredArgsConstructor; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.*; -import cn.dev33.satoken.annotation.SaCheckPermission; -import org.springframework.web.bind.annotation.*; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.multipart.MultipartFile; -import org.dromara.common.idempotent.annotation.RepeatSubmit; -import org.dromara.common.log.annotation.Log; -import org.dromara.common.web.core.BaseController; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.core.domain.R; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.log.enums.BusinessType; -import org.dromara.common.excel.utils.ExcelUtil; -import org.dromara.common.excel.core.ExcelResult; -import org.dromara.common.satoken.utils.LoginHelper; -import org.dromara.xg.domain.vo.XgStudentInfoVo; -import org.dromara.xg.domain.bo.XgStudentInfoBo; -import org.dromara.xg.service.IXgStudentInfoService; -import org.dromara.common.mybatis.core.page.TableDataInfo; - -/** - * 学生信息Controller - * - * @author Cursor AI - * @date 2025-01-12 - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/xg/studentInfo") -public class XgStudentInfoController extends BaseController { - - private final IXgStudentInfoService studentInfoService; - - /** - * 查询学生信息列表 - */ - @SaCheckPermission("xg:studentInfo:list") - @GetMapping("/list") - public TableDataInfo list(XgStudentInfoBo bo, PageQuery pageQuery) { - return studentInfoService.queryPageList(bo, pageQuery); - } - - /** - * 导出学生信息列表 - */ - @SaCheckPermission("xg:studentInfo:export") - @Log(title = "学生信息", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(XgStudentInfoBo bo, HttpServletResponse response) { - List list = studentInfoService.queryList(bo); - ExcelUtil.exportExcel(list, "学生信息", XgStudentInfoVo.class, response); - } - - /** - * 获取学生信息详细信息 - */ - @SaCheckPermission("xg:studentInfo:query") - @GetMapping("/{id}") - public R getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { - return R.ok(studentInfoService.queryById(id)); - } - - /** - * 根据学号查询学生信息 - */ - @SaCheckPermission("xg:studentInfo:query") - @GetMapping("/byStudentNo/{studentNo}") - public R getByStudentNo(@NotBlank(message = "学号不能为空") @PathVariable String studentNo) { - return R.ok(studentInfoService.queryByStudentNo(studentNo)); - } - - /** - * 根据身份证号查询学生信息 - */ - @SaCheckPermission("xg:studentInfo:query") - @GetMapping("/byIdCard/{idCard}") - public R getByIdCard(@NotBlank(message = "身份证号不能为空") @PathVariable String idCard) { - return R.ok(studentInfoService.queryByIdCard(idCard)); - } - - /** - * 查询班级学生列表 - */ - @SaCheckPermission("xg:studentInfo:list") - @GetMapping("/byClass/{classCode}") - public R> getByClassCode(@NotBlank(message = "班级代码不能为空") @PathVariable String classCode) { - return R.ok(studentInfoService.queryByClassCode(classCode)); - } - - /** - * 根据班级ID查询学生信息(用于班级干部管理) - */ - @SaCheckPermission("xg:studentInfo:list") - @GetMapping("/byClassId/{classId}") - public R> getByClassId(@NotNull(message = "班级ID不能为空") @PathVariable Long classId) { - return R.ok(studentInfoService.queryByClassId(classId)); - } - - /** - * 根据班级ID获取学生选项列表(用于班级干部管理下拉框) - */ - @SaCheckPermission("xg:studentInfo:list") - @GetMapping("/optionsByClassId/{classId}") - public R>> getStudentOptionsByClassId(@NotNull(message = "班级ID不能为空") @PathVariable Long classId) { - List students = studentInfoService.queryByClassId(classId); - - List> options = students.stream() - .map(student -> { - Map option = new java.util.HashMap<>(); - option.put("value", student.getId()); - option.put("label", student.getName() + "(" + student.getStudentNo() + ")"); - option.put("studentNo", student.getStudentNo()); - option.put("studentName", student.getName()); - option.put("className", student.getClassName()); - option.put("gender", student.getGender()); - option.put("phone", student.getPhone()); - return option; - }) - .toList(); - - return R.ok(options); - } - - /** - * 查询学院学生列表 - */ - @SaCheckPermission("xg:studentInfo:list") - @GetMapping("/byCollege/{collegeCode}") - public R> getByCollegeCode(@NotBlank(message = "学院代码不能为空") @PathVariable String collegeCode) { - return R.ok(studentInfoService.queryByCollegeCode(collegeCode)); - } - - /** - * 新增学生信息 - */ - @SaCheckPermission("xg:studentInfo:add") - @Log(title = "学生信息", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping() - public R add(@Validated(AddGroup.class) @RequestBody XgStudentInfoBo bo) { - boolean success = studentInfoService.insertByBo(bo); - if (success) { - return R.ok(bo.getId()); - } else { - return R.fail("新增学生信息失败"); - } - } - - /** - * 修改学生信息 - */ - @SaCheckPermission("xg:studentInfo:edit") - @Log(title = "学生信息", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping() - public R edit(@Validated(EditGroup.class) @RequestBody XgStudentInfoBo bo) { - return toAjax(studentInfoService.updateByBo(bo)); - } - - /** - * 删除学生信息 - */ - @SaCheckPermission("xg:studentInfo:remove") - @Log(title = "学生信息", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public R remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) { - return toAjax(studentInfoService.deleteWithValidByIds(List.of(ids), true)); - } - - /** - * 批量导入学生信息 - */ - @SaCheckPermission("xg:studentInfo:import") - @Log(title = "学生信息", businessType = BusinessType.IMPORT) - @PostMapping("/importData") - public R importData(MultipartFile file, boolean updateSupport) throws Exception { - ExcelResult result = ExcelUtil.importExcel(file.getInputStream(), XgStudentInfoBo.class, true); - List studentList = result.getList(); - String operName = LoginHelper.getUsername(); - String message = studentInfoService.importStudent(studentList, updateSupport, operName); - return R.ok(message); - } - - /** - * 获取导入模板 - */ - @SaCheckPermission("xg:studentInfo:import") - @PostMapping("/importTemplate") - public void importTemplate(HttpServletResponse response) { - ExcelUtil.exportExcel(new ArrayList<>(), "学生信息数据", XgStudentInfoVo.class, response); - } - - /** - * 批量更新学生信息状态 - */ - @SaCheckPermission("xg:studentInfo:edit") - @Log(title = "批量更新状态", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping("/batchUpdateStatus") - public R batchUpdateStatus(@RequestBody Map params) { - @SuppressWarnings("unchecked") - List studentIds = (List) params.get("studentIds"); - String infoStatus = (String) params.get("infoStatus"); - return toAjax(studentInfoService.batchUpdateInfoStatus(studentIds, infoStatus)); - } - - /** - * 提交学生信息审核 - */ - @SaCheckPermission("xg:studentInfo:audit") - @Log(title = "提交审核", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping("/{studentId}/submitAudit") - public R submitForAudit( - @NotNull(message = "学生ID不能为空") @PathVariable Long studentId, - @NotNull(message = "批次ID不能为空") @RequestParam Long batchId) { - return toAjax(studentInfoService.submitForAudit(studentId, batchId)); - } - - /** - * 审核学生信息 - */ - @SaCheckPermission("xg:studentInfo:audit") - @Log(title = "审核学生信息", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping("/{studentId}/audit") - public R auditStudentInfo( - @NotNull(message = "学生ID不能为空") @PathVariable Long studentId, - @NotBlank(message = "审核结果不能为空") @RequestParam String auditResult, - @RequestParam(required = false) String auditComment) { - return toAjax(studentInfoService.auditStudentInfo(studentId, auditResult, auditComment)); - } - - /** - * 检查学号是否存在 - */ - @SaCheckPermission("xg:studentInfo:query") - @GetMapping("/checkStudentNo") - public R checkStudentNoExists( - @NotBlank(message = "学号不能为空") @RequestParam String studentNo, - @RequestParam(required = false) Long studentId) { - return R.ok(studentInfoService.checkStudentNoExists(studentNo, studentId)); - } - - /** - * 检查身份证号是否存在 - */ - @SaCheckPermission("xg:studentInfo:query") - @GetMapping("/checkIdCard") - public R checkIdCardExists( - @NotBlank(message = "身份证号不能为空") @RequestParam String idCard, - @RequestParam(required = false) Long studentId) { - return R.ok(studentInfoService.checkIdCardExists(idCard, studentId)); - } - - /** - * 获取学生统计信息 - */ - @SaCheckPermission("xg:studentInfo:statistics") - @GetMapping("/statistics") - public R>> getStudentStatistics(@RequestParam Map params) { - // 调用service获取真实的统计数据 - List> statistics = studentInfoService.queryStudentStatistics(params); - - // 如果没有数据,创建一个默认的统计记录 - if (statistics.isEmpty()) { - // 直接查询总体统计 - XgStudentInfoBo queryBo = new XgStudentInfoBo(); - List allStudents = studentInfoService.queryList(queryBo); - - Map totalStats = new java.util.HashMap<>(); - totalStats.put("collegeCode", ""); - totalStats.put("collegeName", "全校统计"); - totalStats.put("totalCount", allStudents.size()); - totalStats.put("maleCount", allStudents.stream().mapToInt(s -> "M".equals(s.getGender()) ? 1 : 0).sum()); - totalStats.put("femaleCount", allStudents.stream().mapToInt(s -> "F".equals(s.getGender()) ? 1 : 0).sum()); - totalStats.put("activeCount", allStudents.stream().mapToInt(s -> "1".equals(s.getStudentStatus()) ? 1 : 0).sum()); - totalStats.put("suspendedCount", allStudents.stream().mapToInt(s -> "2".equals(s.getStudentStatus()) ? 1 : 0).sum()); - totalStats.put("graduatedCount", allStudents.stream().mapToInt(s -> "5".equals(s.getStudentStatus()) ? 1 : 0).sum()); - totalStats.put("poorFamilyCount", 0); // 暂时设为0,后续完善 - totalStats.put("minorityCount", 0); // 暂时设为0,后续完善 - totalStats.put("disabledCount", 0); // 暂时设为0,后续完善 - totalStats.put("orphanCount", 0); // 暂时设为0,后续完善 - - statistics.add(totalStats); - } - - return R.ok(statistics); - } - - /** - * 获取学生选项列表(用于下拉框) - */ - @SaCheckPermission("xg:studentInfo:list") - @GetMapping("/options") - public R>> getStudentOptions(@RequestParam(required = false) String classCode) { - XgStudentInfoBo bo = new XgStudentInfoBo(); - if (classCode != null) { - bo.setClassCode(classCode); - } - List students = studentInfoService.queryList(bo); - - List> options = students.stream() - .map(student -> { - Map option = new java.util.HashMap<>(); - option.put("value", student.getId()); - option.put("label", student.getName() + "(" + student.getStudentNo() + ")"); - option.put("studentNo", student.getStudentNo()); - option.put("className", student.getClassName()); - return option; - }) - .toList(); - - return R.ok(options); - } - - /** - * 获取学院选项列表(用于下拉框) - */ - @SaCheckPermission("xg:studentInfo:list") - @GetMapping("/collegeOptions") - public R>> getCollegeOptions() { - List students = studentInfoService.queryList(new XgStudentInfoBo()); - - List> options = students.stream() - .filter(student -> student.getCollegeCode() != null && student.getCollegeName() != null) - .collect(java.util.stream.Collectors.toMap( - student -> student.getCollegeCode(), - student -> { - Map option = new java.util.HashMap<>(); - option.put("value", student.getCollegeCode()); - option.put("label", student.getCollegeName()); - option.put("code", student.getCollegeCode()); - return option; - }, - (existing, replacement) -> existing - )) - .values() - .stream() - .sorted((a, b) -> a.get("label").toString().compareTo(b.get("label").toString())) - .toList(); - - return R.ok(options); - } - - /** - * 获取班级选项列表(用于下拉框) - */ - @SaCheckPermission("xg:studentInfo:list") - @GetMapping("/classOptions") - public R>> getClassOptions(@RequestParam(required = false) String collegeCode) { - XgStudentInfoBo bo = new XgStudentInfoBo(); - if (collegeCode != null) { - bo.setCollegeCode(collegeCode); - } - List students = studentInfoService.queryList(bo); - - List> options = students.stream() - .filter(student -> student.getClassCode() != null && student.getClassName() != null) - .collect(java.util.stream.Collectors.toMap( - student -> student.getClassCode(), - student -> { - Map option = new java.util.HashMap<>(); - option.put("value", student.getClassCode()); - option.put("label", student.getClassName()); - option.put("code", student.getClassCode()); - option.put("collegeCode", student.getCollegeCode()); - option.put("collegeName", student.getCollegeName()); - return option; - }, - (existing, replacement) -> existing - )) - .values() - .stream() - .sorted((a, b) -> a.get("label").toString().compareTo(b.get("label").toString())) - .toList(); - - return R.ok(options); - } - - /** - * 获取专业选项列表(用于下拉框) - */ - @SaCheckPermission("xg:studentInfo:list") - @GetMapping("/majorOptions") - public R>> getMajorOptions(@RequestParam(required = false) String collegeCode) { - XgStudentInfoBo bo = new XgStudentInfoBo(); - if (collegeCode != null) { - bo.setCollegeCode(collegeCode); - } - List students = studentInfoService.queryList(bo); - - List> options = students.stream() - .filter(student -> student.getMajorCode() != null && student.getMajorName() != null) - .collect(java.util.stream.Collectors.toMap( - student -> student.getMajorCode(), - student -> { - Map option = new java.util.HashMap<>(); - option.put("value", student.getMajorCode()); - option.put("label", student.getMajorName()); - option.put("code", student.getMajorCode()); - option.put("collegeCode", student.getCollegeCode()); - option.put("collegeName", student.getCollegeName()); - return option; - }, - (existing, replacement) -> existing - )) - .values() - .stream() - .sorted((a, b) -> a.get("label").toString().compareTo(b.get("label").toString())) - .toList(); - - return R.ok(options); - } - - /** - * 获取学生选项(用于下拉框) - */ - @SaCheckPermission("xg:studentInfo:list") - @GetMapping("/studentOptions") - public R>> getStudentOptionsForSelect( - @RequestParam(required = false) String name, - @RequestParam(required = false) String classCode, - @RequestParam(required = false) String collegeCode) { - - XgStudentInfoBo bo = new XgStudentInfoBo(); - if (name != null) { - bo.setName(name); - } - if (classCode != null) { - bo.setClassCode(classCode); - } - if (collegeCode != null) { - bo.setCollegeCode(collegeCode); - } - List students = studentInfoService.queryList(bo); - - List> options = students.stream() - .map(student -> { - Map option = new HashMap<>(); - option.put("value", student.getId()); - option.put("label", student.getName() + "(" + student.getStudentNo() + ")"); - option.put("studentNo", student.getStudentNo()); - option.put("className", student.getClassName()); - option.put("collegeCode", student.getCollegeCode()); - option.put("collegeName", student.getCollegeName()); - return option; - }) - .toList(); - - return R.ok(options); - } - - // ==================== 批次相关功能 ==================== - - /** - * 根据批次ID查询学生信息列表 - */ - @SaCheckPermission("xg:studentInfo:list") - @GetMapping("/byBatch/{batchId}") - public TableDataInfo getByBatchId(@NotNull(message = "批次ID不能为空") @PathVariable Long batchId, - PageQuery pageQuery) { - // 创建查询条件,设置批次ID - XgStudentInfoBo bo = new XgStudentInfoBo(); - bo.setBatchId(batchId); - return studentInfoService.queryPageList(bo, pageQuery); - } - - /** - * 学生信息关联到批次 - */ - @SaCheckPermission("xg:studentInfo:batch") - @Log(title = "学生信息关联批次", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PostMapping("/associateToBatch") - public R associateStudentToBatch(@NotNull(message = "学生ID不能为空") @RequestParam Long studentId, - @NotNull(message = "批次ID不能为空") @RequestParam Long batchId) { - return toAjax(studentInfoService.associateStudentToBatch(studentId, batchId)); - } - - /** - * 批量关联学生到批次 - */ - @SaCheckPermission("xg:studentInfo:batch") - @Log(title = "批量关联学生到批次", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PostMapping("/batchAssociateToBatch") - public R batchAssociateStudentsToBatch(@NotEmpty(message = "学生ID列表不能为空") @RequestBody List studentIds, - @NotNull(message = "批次ID不能为空") @RequestParam Long batchId) { - return toAjax(studentInfoService.batchAssociateStudentsToBatch(studentIds, batchId)); - } - - /** - * 学生提交信息(调用现有的提交审核方法) - */ - @SaCheckPermission("xg:studentInfo:submit") - @Log(title = "学生提交信息", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PostMapping("/{studentId}/submit") - public R submitStudentInfo(@NotNull(message = "学生ID不能为空") @PathVariable Long studentId, - @NotNull(message = "批次ID不能为空") @RequestParam Long batchId) { - // 调用现有的提交审核方法 - return submitForAudit(studentId, batchId); - } - - /** - * 学生撤回提交 - */ - @SaCheckPermission("xg:studentInfo:submit") - @Log(title = "学生撤回提交", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PostMapping("/{studentId}/withdraw") - public R withdrawSubmission(@NotNull(message = "学生ID不能为空") @PathVariable Long studentId, - @NotNull(message = "批次ID不能为空") @RequestParam Long batchId) { - return toAjax(studentInfoService.withdrawSubmission(studentId, batchId)); - } - - /** - * 获取学生批次进度 - */ - @SaCheckPermission("xg:studentInfo:query") - @GetMapping("/{studentId}/batchProgress") - public R> getStudentBatchProgress(@NotNull(message = "学生ID不能为空") @PathVariable Long studentId, - @NotNull(message = "批次ID不能为空") @RequestParam Long batchId) { - return R.ok(studentInfoService.getStudentBatchProgress(studentId, batchId)); - } - - /** - * 批量审核学生信息 - */ - @SaCheckPermission("xg:studentInfo:audit") - @Log(title = "批量审核学生信息", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PostMapping("/batchAudit") - public R batchAuditStudentInfo(@NotEmpty(message = "学生ID列表不能为空") @RequestBody List studentIds, - @NotNull(message = "批次ID不能为空") @RequestParam Long batchId, - @NotBlank(message = "审核结果不能为空") @RequestParam String auditResult, - @RequestParam(required = false) String auditComment) { - return toAjax(studentInfoService.batchAuditStudentInfo(studentIds, batchId, auditResult, auditComment)); - } - - /** - * 检查学生编辑权限 - */ - @SaCheckPermission("xg:studentInfo:query") - @GetMapping("/checkEditPermission") - public R checkEditPermission(@NotNull(message = "学生ID不能为空") @RequestParam Long studentId, - @NotNull(message = "批次ID不能为空") @RequestParam Long batchId) { - // 这里需要调用权限服务检查 - return R.ok(true); // 临时返回true,实际应该调用权限服务 - } - - /** - * 获取学生批次统计信息 - */ - @SaCheckPermission("xg:studentInfo:statistics") - @GetMapping("/batchStatistics") - public R> getStudentBatchStatistics(@NotNull(message = "批次ID不能为空") @RequestParam Long batchId) { - // 这里需要调用统计服务 - Map statistics = new HashMap<>(); - statistics.put("batchId", batchId); - statistics.put("totalCount", 0); - statistics.put("submittedCount", 0); - statistics.put("approvedCount", 0); - statistics.put("rejectedCount", 0); - return R.ok(statistics); - } - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgAcademicYear.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgAcademicYear.java deleted file mode 100644 index 32389adb..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgAcademicYear.java +++ /dev/null @@ -1,107 +0,0 @@ -package org.dromara.xg.domain; - -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.dromara.common.mybatis.core.domain.BaseEntity; - -import java.io.Serial; -import java.time.LocalDate; - -/** - * 学年管理对象 xg_academic_year - * - * @author ruoyi - * @date 2025-01-12 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("xg_academic_year") -public class XgAcademicYear extends BaseEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键ID - */ - @TableId - private Long id; - - /** - * 学年编码,如2024-2025 - */ - private String yearCode; - - /** - * 学年名称,如2024-2025学年 - */ - private String yearName; - - /** - * 学年开始日期 - */ - private LocalDate startDate; - - /** - * 学年结束日期 - */ - private LocalDate endDate; - - /** - * 是否当前学年:0-否,1-是 - */ - private Boolean isCurrent; - - /** - * 状态:active-有效,inactive-无效 - */ - private String status; - - /** - * 学年描述 - */ - private String description; - - /** - * 排序字段 - */ - private Integer sortOrder; - - /** - * 备注 - */ - private String remark; - - // 手动添加缺失的getter方法,解决编译错误 - public String getYearCode() { - return yearCode; - } - - public LocalDate getStartDate() { - return startDate; - } - - public LocalDate getEndDate() { - return endDate; - } - - public String getYearName() { - return yearName; - } - - // 手动添加缺失的getter方法,解决编译错误 - public Boolean getIsCurrent() { - return isCurrent; - } - - public String getStatus() { - return status; - } - - public Long getId() { - return id; - } - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgAuditRecord.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgAuditRecord.java deleted file mode 100644 index a3b52a61..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgAuditRecord.java +++ /dev/null @@ -1,129 +0,0 @@ -package org.dromara.xg.domain; - -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import com.fasterxml.jackson.annotation.JsonFormat; - -import java.io.Serial; -import java.time.LocalDateTime; - -/** - * 审核记录对象 xg_audit_record - * - * @author ruoyi - * @date 2025-01-12 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("xg_audit_record") -public class XgAuditRecord extends BaseEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键ID - */ - @TableId - private Long id; - - /** - * 学生ID,关联xg_student_info.id - */ - private Long studentId; - - /** - * 批次ID,关联xg_collection_batch.id - */ - private Long batchId; - - /** - * 审核级别:1-初审,2-复审,3-终审 - */ - private Integer auditLevel; - - /** - * 审核类型:submit-提交,approve-通过,reject-拒绝,return-退回 - */ - private String auditType; - - /** - * 审核状态:pending-待审核,approved-已通过,rejected-已拒绝 - */ - private String auditStatus; - - /** - * 审核人ID - */ - private Long auditorId; - - /** - * 审核人姓名 - */ - private String auditorName; - - /** - * 审核人角色 - */ - private String auditorRole; - - /** - * 审核时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime auditTime; - - /** - * 审核意见 - */ - private String auditComment; - - /** - * 变更字段(JSON格式) - */ - private String changedFields; - - /** - * 下一审核人ID - */ - private Long nextAuditorId; - - /** - * 下一审核人姓名 - */ - private String nextAuditorName; - - /** - * 是否最终审核:0-否,1-是 - */ - private Boolean isFinal; - - /** - * 处理时长(分钟) - */ - private Integer processDuration; - - /** - * IP地址 - */ - private String ipAddress; - - /** - * 用户代理 - */ - private String userAgent; - - /** - * 附件URL列表(JSON格式) - */ - private String attachmentUrls; - - /** - * 备注 - */ - private String remark; - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgBatchOperationLog.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgBatchOperationLog.java deleted file mode 100644 index f34a977a..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgBatchOperationLog.java +++ /dev/null @@ -1,180 +0,0 @@ -package org.dromara.xg.domain; - -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.dromara.common.mybatis.core.domain.BaseEntity; - -import java.io.Serial; -import java.time.LocalDateTime; -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; - -/** - * 批次操作日志对象 xg_batch_operation_log - * - * @author ruoyi - * @date 2025-01-12 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("xg_batch_operation_log") -public class XgBatchOperationLog extends BaseEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键ID - */ - @TableId - private Long id; - - /** - * 批次ID,关联xg_collection_batch.id - */ - private Long batchId; - - /** - * 操作类型:CREATE-创建,UPDATE-修改,DELETE-删除,PUBLISH-发布,UNPUBLISH-取消发布,COMPLETE-完成,COPY-复制 - */ - private String operationType; - - /** - * 操作描述 - */ - private String operationDescription; - - /** - * 操作前数据(JSON格式) - */ - private String beforeData; - - /** - * 操作后数据(JSON格式) - */ - private String afterData; - - /** - * 操作人ID - */ - private Long operatorId; - - /** - * 操作人姓名 - */ - private String operatorName; - - /** - * 操作时间 - */ - private LocalDateTime operationTime; - - /** - * 操作IP地址 - */ - private String operationIp; - - /** - * 操作结果:SUCCESS-成功,FAILED-失败 - */ - private String operationResult; - - /** - * 错误信息 - */ - private String errorMessage; - - /** - * 备注 - */ - private String remark; - - /** - * 操作详情 - */ - private String operationDetails; - - /** - * 操作人(兼容字段) - */ - private Long operationBy; - - // 手动添加缺失的getter/setter方法 - public String getOperationDetails() { - return operationDetails; - } - - public void setOperationDetails(String operationDetails) { - this.operationDetails = operationDetails; - } - - public Long getOperationBy() { - return operationBy; - } - - public void setOperationBy(Long operationBy) { - this.operationBy = operationBy; - } - - /** - * 设置批次ID - */ - public void setBatchId(Long batchId) { - this.batchId = batchId; - } - - /** - * 设置操作类型 - */ - public void setOperationType(String operationType) { - this.operationType = operationType; - } - - /** - * 设置操作描述 - */ - public void setOperationDescription(String operationDescription) { - this.operationDescription = operationDescription; - } - - /** - * 设置操作者ID - */ - public void setOperatorId(Long operatorId) { - this.operatorId = operatorId; - } - - /** - * 设置操作者姓名 - */ - public void setOperatorName(String operatorName) { - this.operatorName = operatorName; - } - - /** - * 设置操作时间 - */ - public void setOperationTime(LocalDateTime operationTime) { - this.operationTime = operationTime; - } - - /** - * 设置操作结果 - */ - public void setOperationResult(String operationResult) { - this.operationResult = operationResult; - } - - /** - * 更新时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date updateTime; - - // 手动添加setter方法以确保编译通过 - public void setRemark(String remark) { - this.remark = remark; - } -} \ No newline at end of file diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgBatchPermission.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgBatchPermission.java deleted file mode 100644 index 2204e34f..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgBatchPermission.java +++ /dev/null @@ -1,347 +0,0 @@ -package org.dromara.xg.domain; - -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.dromara.common.mybatis.core.domain.BaseEntity; - -import java.io.Serial; -import java.time.LocalDateTime; - -/** - * 批次权限配置对象 xg_batch_permission - * - * @author ruoyi - * @date 2025-01-12 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("xg_batch_permission") -public class XgBatchPermission extends BaseEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键ID - */ - @TableId - private Long id; - - /** - * 批次ID,关联xg_collection_batch.id - */ - private Long batchId; - - /** - * 角色ID - */ - private Long roleId; - - /** - * 角色名称 - */ - private String roleName; - - /** - * 用户类型:student-学生,counselor-辅导员,head_teacher-班主任,college_admin-学院管理员,dept_admin-学生处管理员 - */ - private String userType; - - /** - * 权限类型:read-查看,write-编辑,audit-审核,manage-管理 - */ - private String permissionType; - - /** - * 权限范围:all-全部,college-学院,class-班级,self-本人 - */ - private String scopeType; - - /** - * 权限范围ID列表(JSON格式) - */ - private String scopeIds; - - /** - * 是否可查看:0-否,1-是 - */ - private Boolean canView; - - /** - * 是否可编辑:0-否,1-是 - */ - private Boolean canEdit; - - /** - * 是否可提交:0-否,1-是 - */ - private Boolean canSubmit; - - /** - * 是否可审核:0-否,1-是 - */ - private Boolean canApprove; - - /** - * 是否可拒绝:0-否,1-是 - */ - private Boolean canReject; - - /** - * 是否可撤回:0-否,1-是 - */ - private Boolean canWithdraw; - - /** - * 是否允许删除 - */ - private Boolean canDelete; - - /** - * 是否允许导出 - */ - private Boolean canExport; - - /** - * 是否允许导入 - */ - private Boolean canImport; - - /** - * 权限开始时间 - */ - private LocalDateTime startTime; - - /** - * 权限结束时间 - */ - private LocalDateTime endTime; - - /** - * 是否激活:0-否,1-是 - */ - private Boolean isActive; - - /** - * 权限描述 - */ - private String description; - - /** - * 备注 - */ - private String remark; - - // ==================== 手动添加的 getter/setter 方法 ==================== - - /** - * 获取批次ID - */ - public Long getBatchId() { - return this.batchId; - } - - /** - * 设置批次ID - */ - public void setBatchId(Long batchId) { - this.batchId = batchId; - } - - /** - * 获取角色ID - */ - public Long getRoleId() { - return this.roleId; - } - - /** - * 获取角色名称 - */ - public String getRoleName() { - return this.roleName; - } - - /** - * 获取权限类型 - */ - public String getPermissionType() { - return this.permissionType; - } - - /** - * 获取是否可查看 - */ - public Boolean getCanView() { - return this.canView; - } - - /** - * 获取是否可编辑 - */ - public Boolean getCanEdit() { - return this.canEdit; - } - - /** - * 获取是否可提交 - */ - public Boolean getCanSubmit() { - return this.canSubmit; - } - - /** - * 获取是否可审核 - */ - public Boolean getCanApprove() { - return this.canApprove; - } - - /** - * 获取是否可拒绝 - */ - public Boolean getCanReject() { - return this.canReject; - } - - /** - * 获取是否可撤回 - */ - public Boolean getCanWithdraw() { - return this.canWithdraw; - } - - /** - * 获取权限开始时间 - */ - public LocalDateTime getStartTime() { - return this.startTime; - } - - /** - * 获取权限结束时间 - */ - public LocalDateTime getEndTime() { - return this.endTime; - } - - /** - * 获取是否激活 - */ - public Boolean getIsActive() { - return this.isActive; - } - - // ==================== 剩余的 setter 方法 ==================== - - /** - * 设置角色ID - */ - public void setRoleId(Long roleId) { - this.roleId = roleId; - } - - /** - * 设置角色名称 - */ - public void setRoleName(String roleName) { - this.roleName = roleName; - } - - /** - * 设置权限类型 - */ - public void setPermissionType(String permissionType) { - this.permissionType = permissionType; - } - - /** - * 设置是否可查看 - */ - public void setCanView(Boolean canView) { - this.canView = canView; - } - - /** - * 设置是否可编辑 - */ - public void setCanEdit(Boolean canEdit) { - this.canEdit = canEdit; - } - - /** - * 设置是否可提交 - */ - public void setCanSubmit(Boolean canSubmit) { - this.canSubmit = canSubmit; - } - - /** - * 设置是否可审核 - */ - public void setCanApprove(Boolean canApprove) { - this.canApprove = canApprove; - } - - /** - * 设置是否可拒绝 - */ - public void setCanReject(Boolean canReject) { - this.canReject = canReject; - } - - /** - * 设置是否可撤回 - */ - public void setCanWithdraw(Boolean canWithdraw) { - this.canWithdraw = canWithdraw; - } - - /** - * 设置权限开始时间 - */ - public void setStartTime(LocalDateTime startTime) { - this.startTime = startTime; - } - - /** - * 设置结束时间 - */ - public void setEndTime(LocalDateTime endTime) { - this.endTime = endTime; - } - - /** - * 设置是否激活 - */ - public void setIsActive(Boolean isActive) { - this.isActive = isActive; - } - - public Boolean getCanDelete() { - return canDelete; - } - - public void setCanDelete(Boolean canDelete) { - this.canDelete = canDelete; - } - - public Boolean getCanExport() { - return canExport; - } - - public void setCanExport(Boolean canExport) { - this.canExport = canExport; - } - - public Boolean getCanImport() { - return canImport; - } - - public void setCanImport(Boolean canImport) { - this.canImport = canImport; - } - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgBatchStudentRelation.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgBatchStudentRelation.java deleted file mode 100644 index bf397132..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgBatchStudentRelation.java +++ /dev/null @@ -1,211 +0,0 @@ -package org.dromara.xg.domain; - -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import com.fasterxml.jackson.annotation.JsonFormat; - -import java.io.Serial; -import java.time.LocalDateTime; - -/** - * 批次学生关联对象 xg_batch_student_relation - * - * @author Cursor AI - * @date 2025-01-13 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("xg_batch_student_relation") -public class XgBatchStudentRelation extends BaseEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 关联ID - */ - @TableId - private Long relationId; - - /** - * 批次ID - */ - private Long batchId; - - /** - * 学生ID - */ - private Long studentId; - - /** - * 学号 - */ - private String studentNumber; - - /** - * 提交状态:DRAFT-草稿,SUBMITTED-已提交,WITHDRAWN-已撤回 - */ - private String submissionStatus; - - /** - * 提交时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime submissionTime; - - /** - * 审核状态:PENDING-待审核,APPROVED-已审核,REJECTED-已拒绝 - */ - private String approvalStatus; - - /** - * 审核时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime approvalTime; - - /** - * 审核人ID - */ - private Long approvalBy; - - /** - * 审核意见 - */ - private String approvalComments; - - /** - * 最后编辑时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime lastEditTime; - - /** - * 提交次数 - */ - private Integer submissionCount; - - /** - * 是否允许编辑:0-否,1-是 - */ - private Integer allowEdit; - - /** - * 扩展字段1 - */ - private String extField1; - - /** - * 扩展字段2 - */ - private String extField2; - - /** - * 扩展字段3 - */ - private String extField3; - - // 手动添加缺失的getter/setter方法,解决编译错误 - public Long getId() { - return relationId; - } - - public void setId(Long id) { - this.relationId = id; - } - - public Long getStudentId() { - return studentId; - } - - public void setStudentId(Long studentId) { - this.studentId = studentId; - } - - public Long getApprovalBy() { - return approvalBy; - } - - public String getApprovalComments() { - return approvalComments; - } - - public void setSubmissionTime(LocalDateTime submissionTime) { - this.submissionTime = submissionTime; - } - - public Integer getSubmissionCount() { - return submissionCount; - } - - public void setSubmissionCount(Integer submissionCount) { - this.submissionCount = submissionCount; - } - - public LocalDateTime getLastEditTime() { - return lastEditTime; - } - - // 为了兼容Service中的方法引用,添加以下方法 - public Long getBatchId() { - return this.batchId; - } - - public void setBatchId(Long batchId) { - this.batchId = batchId; - } - - public String getSubmissionStatus() { - return this.submissionStatus; - } - - public void setSubmissionStatus(String submissionStatus) { - this.submissionStatus = submissionStatus; - } - - public String getApprovalStatus() { - return this.approvalStatus; - } - - public void setApprovalStatus(String approvalStatus) { - this.approvalStatus = approvalStatus; - } - - /** - * 获取提交时间 - */ - public LocalDateTime getSubmissionTime() { - return this.submissionTime; - } - - /** - * 获取审批时间 - */ - public LocalDateTime getApprovalTime() { - return this.approvalTime; - } - - /** - * 设置审批时间 - */ - public void setApprovalTime(LocalDateTime approvalTime) { - this.approvalTime = approvalTime; - } - - /** - * 设置审批人 - */ - public void setApprovalBy(Long approvalBy) { - this.approvalBy = approvalBy; - } - - /** - * 设置审批意见 - */ - public void setApprovalComments(String approvalComments) { - this.approvalComments = approvalComments; - } -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgBusinessPeriod.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgBusinessPeriod.java deleted file mode 100644 index 5eefddd6..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgBusinessPeriod.java +++ /dev/null @@ -1,243 +0,0 @@ -package org.dromara.xg.domain; - -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.dromara.common.mybatis.core.domain.BaseEntity; - -import java.io.Serial; -import java.time.LocalDateTime; - -/** - * 业务期管理对象 xg_business_period - * - * @author ruoyi - * @date 2025-01-12 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("xg_business_period") -public class XgBusinessPeriod extends BaseEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键ID - */ - @TableId - private Long id; - - /** - * 批次ID,关联xg_collection_batch.id - */ - private Long batchId; - - /** - * 业务期编码 - */ - private String periodCode; - - /** - * 业务期名称 - */ - private String periodName; - - /** - * 业务期类型:collection-信息采集期,audit-审核期,confirm-确认期 - */ - private String periodType; - - /** - * 关联学年ID - */ - private Long academicYearId; - - /** - * 关联学期ID - */ - private Long semesterId; - - /** - * 业务期开始时间 - */ - private LocalDateTime startTime; - - /** - * 业务期结束时间 - */ - private LocalDateTime endTime; - - /** - * 状态:not_started-未开始,in_progress-进行中,ended-已结束,suspended-已暂停 - */ - private String status; - - /** - * 目标角色(JSON格式) - */ - private String targetRoles; - - /** - * 是否激活:0-否,1-是 - */ - private Boolean isActive; - - /** - * 是否自动开始:0-否,1-是 - */ - private Boolean autoStart; - - /** - * 是否自动结束:0-否,1-是 - */ - private Boolean autoEnd; - - /** - * 业务期描述 - */ - private String description; - - /** - * 通知内容 - */ - private String noticeContent; - - /** - * 排序字段 - */ - private Integer sortOrder; - - /** - * 备注 - */ - private String remark; - - /** - * 目标角色(兼容字段) - */ - private String targetRole; - - // 手动添加缺失的getter/setter方法 - public String getTargetRole() { - return targetRole; - } - - public void setTargetRole(String targetRole) { - this.targetRole = targetRole; - } - - /** - * 获取批次ID - */ - public Long getBatchId() { - return this.batchId; - } - - /** - * 设置批次ID - */ - public void setBatchId(Long batchId) { - this.batchId = batchId; - } - - /** - * 获取期间名称 - */ - public String getPeriodName() { - return this.periodName; - } - - /** - * 设置期间名称 - */ - public void setPeriodName(String periodName) { - this.periodName = periodName; - } - - /** - * 获取期间类型 - */ - public String getPeriodType() { - return this.periodType; - } - - /** - * 设置期间类型 - */ - public void setPeriodType(String periodType) { - this.periodType = periodType; - } - - /** - * 获取开始时间 - */ - public LocalDateTime getStartTime() { - return this.startTime; - } - - /** - * 设置开始时间 - */ - public void setStartTime(LocalDateTime startTime) { - this.startTime = startTime; - } - - /** - * 获取结束时间 - */ - public LocalDateTime getEndTime() { - return this.endTime; - } - - /** - * 设置结束时间 - */ - public void setEndTime(LocalDateTime endTime) { - this.endTime = endTime; - } - - /** - * 获取目标角色 - */ - public String getTargetRoles() { - return this.targetRoles; - } - - /** - * 设置目标角色 - */ - public void setTargetRoles(String targetRoles) { - this.targetRoles = targetRoles; - } - - /** - * 获取是否激活 - */ - public Boolean getIsActive() { - return this.isActive; - } - - /** - * 设置是否激活 - */ - public void setIsActive(Boolean isActive) { - this.isActive = isActive; - } - - /** - * 获取描述 - */ - public String getDescription() { - return this.description; - } - - /** - * 设置描述 - */ - public void setDescription(String description) { - this.description = description; - } - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgCadreChangeLog.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgCadreChangeLog.java deleted file mode 100644 index 46209690..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgCadreChangeLog.java +++ /dev/null @@ -1,264 +0,0 @@ -package org.dromara.xg.domain; - -import org.dromara.common.tenant.core.TenantEntity; -import com.baomidou.mybatisplus.annotation.*; -import lombok.Data; -import lombok.EqualsAndHashCode; -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import jakarta.validation.constraints.*; - -import java.io.Serial; - -/** - * 班干部变更记录对象 xg_cadre_change_log - * - * @author Cursor AI - * @date 2025-01-09 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("xg_cadre_change_log") -public class XgCadreChangeLog extends TenantEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键ID - */ - @TableId(value = "id") - private Long id; - - /** - * 班干部ID,关联xg_class_cadre.id - */ - @NotNull(message = "班干部ID不能为空", groups = {AddGroup.class, EditGroup.class}) - private Long cadreId; - - /** - * 班级ID,关联xg_class_info.id - */ - @NotNull(message = "班级ID不能为空", groups = {AddGroup.class, EditGroup.class}) - private Long classId; - - /** - * 学生ID,关联xg_student_info.id - */ - @NotNull(message = "学生ID不能为空", groups = {AddGroup.class, EditGroup.class}) - private Long studentId; - - /** - * 学号 - */ - @NotBlank(message = "学号不能为空", groups = {AddGroup.class, EditGroup.class}) - @Size(max = 32, message = "学号长度不能超过32个字符") - private String studentNo; - - /** - * 学生姓名 - */ - @NotBlank(message = "学生姓名不能为空", groups = {AddGroup.class, EditGroup.class}) - @Size(max = 50, message = "学生姓名长度不能超过50个字符") - private String studentName; - - /** - * 变更类型:appointment-任命,dismissal-免职,transfer-调任,renewal-续任,resignation-辞职 - */ - @NotBlank(message = "变更类型不能为空", groups = {AddGroup.class, EditGroup.class}) - @Pattern(regexp = "^(appointment|dismissal|transfer|renewal|resignation)$", - message = "变更类型必须是appointment、dismissal、transfer、renewal、resignation中的一个") - private String changeType; - - /** - * 变更日期 - */ - @NotNull(message = "变更日期不能为空", groups = {AddGroup.class, EditGroup.class}) - @JsonFormat(pattern = "yyyy-MM-dd") - private Date changeDate; - - /** - * 生效日期 - */ - @NotNull(message = "生效日期不能为空", groups = {AddGroup.class, EditGroup.class}) - @JsonFormat(pattern = "yyyy-MM-dd") - private Date effectiveDate; - - /** - * 原职务编码 - */ - @Size(max = 20, message = "原职务编码长度不能超过20个字符") - private String oldPositionCode; - - /** - * 原职务名称 - */ - @Size(max = 50, message = "原职务名称长度不能超过50个字符") - private String oldPositionName; - - /** - * 新职务编码 - */ - @Size(max = 20, message = "新职务编码长度不能超过20个字符") - private String newPositionCode; - - /** - * 新职务名称 - */ - @Size(max = 50, message = "新职务名称长度不能超过50个字符") - private String newPositionName; - - /** - * 职务变更原因 - */ - @Size(max = 200, message = "职务变更原因长度不能超过200个字符") - private String positionChangeReason; - - /** - * 操作人ID,关联sys_user.id - */ - @NotNull(message = "操作人ID不能为空", groups = {AddGroup.class, EditGroup.class}) - private Long operatorId; - - /** - * 操作人姓名 - */ - @NotBlank(message = "操作人姓名不能为空", groups = {AddGroup.class, EditGroup.class}) - @Size(max = 50, message = "操作人姓名长度不能超过50个字符") - private String operatorName; - - /** - * 操作人角色:counselor-辅导员,teacher-班主任,admin-管理员 - */ - @NotBlank(message = "操作人角色不能为空", groups = {AddGroup.class, EditGroup.class}) - @Pattern(regexp = "^(counselor|teacher|admin)$", - message = "操作人角色必须是counselor、teacher、admin中的一个") - private String operatorRole; - - /** - * 操作人部门 - */ - @Size(max = 100, message = "操作人部门长度不能超过100个字符") - private String operatorDept; - - /** - * 是否需要审批:0-否,1-是 - */ - private Boolean needApproval; - - /** - * 审批状态:1-待审批,2-已通过,3-已驳回 - */ - @Pattern(regexp = "^[1-3]$", message = "审批状态必须是1-3之间的数字") - private String approvalStatus; - - /** - * 审批人ID,关联sys_user.id - */ - private Long approverId; - - /** - * 审批人姓名 - */ - @Size(max = 50, message = "审批人姓名长度不能超过50个字符") - private String approverName; - - /** - * 审批时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date approvalTime; - - /** - * 审批意见 - */ - @Size(max = 500, message = "审批意见长度不能超过500个字符") - private String approvalComments; - - /** - * 变更原因 - */ - @NotBlank(message = "变更原因不能为空", groups = {AddGroup.class, EditGroup.class}) - @Size(max = 500, message = "变更原因长度不能超过500个字符") - private String changeReason; - - /** - * 变更描述 - */ - private String changeDescription; - - /** - * 文件编号 - */ - @Size(max = 100, message = "文件编号长度不能超过100个字符") - private String documentNumber; - - /** - * 参考文件 - */ - @Size(max = 500, message = "参考文件长度不能超过500个字符") - private String referenceDocuments; - - /** - * 影响分析 - */ - private String impactAnalysis; - - /** - * 继任者ID,关联xg_student_info.id - */ - private Long successorId; - - /** - * 继任者姓名 - */ - @Size(max = 50, message = "继任者姓名长度不能超过50个字符") - private String successorName; - - /** - * 交接状态:1-未交接,2-交接中,3-已完成 - */ - @Pattern(regexp = "^[1-3]$", message = "交接状态必须是1-3之间的数字") - private String handoverStatus; - - /** - * 交接日期 - */ - @JsonFormat(pattern = "yyyy-MM-dd") - private Date handoverDate; - - /** - * 是否紧急变更:0-否,1-是 - */ - private Boolean isEmergency; - - /** - * 是否已发送通知:0-否,1-是 - */ - private Boolean notificationSent; - - /** - * 附件ID列表(逗号分隔) - */ - @Size(max = 500, message = "附件ID列表长度不能超过500个字符") - private String attachmentIds; - - /** - * 备注信息 - */ - @Size(max = 500, message = "备注信息长度不能超过500个字符") - private String remark; - - // 以下是从基类继承的字段,这里显式声明用于MyBatis映射 - private Long createBy; - - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date createTime; - - private Long updateBy; - - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date updateTime; -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgCadrePositionConfig.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgCadrePositionConfig.java deleted file mode 100644 index d953d608..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgCadrePositionConfig.java +++ /dev/null @@ -1,210 +0,0 @@ -package org.dromara.xg.domain; - -import org.dromara.common.tenant.core.TenantEntity; -import com.baomidou.mybatisplus.annotation.*; -import lombok.Data; -import lombok.EqualsAndHashCode; -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import jakarta.validation.constraints.*; - -import java.io.Serial; - -/** - * 班干部职务配置对象 xg_cadre_position_config - * - * @author Cursor AI - * @date 2025-01-09 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("xg_cadre_position_config") -public class XgCadrePositionConfig extends TenantEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键ID - */ - @TableId(value = "id") - private Long id; - - /** - * 职务编码 - */ - @NotBlank(message = "职务编码不能为空", groups = {AddGroup.class, EditGroup.class}) - @Size(max = 20, message = "职务编码长度不能超过20个字符") - private String positionCode; - - /** - * 职务名称 - */ - @NotBlank(message = "职务名称不能为空", groups = {AddGroup.class, EditGroup.class}) - @Size(max = 50, message = "职务名称长度不能超过50个字符") - private String positionName; - - /** - * 职务英文名称 - */ - @Size(max = 100, message = "职务英文名称长度不能超过100个字符") - private String positionNameEn; - - /** - * 职务级别:1-班长,2-副班长,3-委员,9-普通成员 - */ - @NotNull(message = "职务级别不能为空", groups = {AddGroup.class, EditGroup.class}) - @Min(value = 1, message = "职务级别最小值为1") - @Max(value = 9, message = "职务级别最大值为9") - private Integer positionLevel; - - /** - * 职务类别:class-班级干部,party-党团干部,other-其他 - */ - @Size(max = 20, message = "职务类别长度不能超过20个字符") - private String positionCategory; - - /** - * 每班最大人数 - */ - @Min(value = 0, message = "每班最大人数不能小于0") - @Max(value = 10, message = "每班最大人数不能超过10") - private Integer maxCountPerClass; - - /** - * 每班最小人数 - */ - @Min(value = 0, message = "每班最小人数不能小于0") - @Max(value = 10, message = "每班最小人数不能超过10") - private Integer minCountPerClass; - - /** - * 是否必设:0-否,1-是 - */ - private Boolean isRequired; - - /** - * 是否允许兼职:0-否,1-是 - */ - private Boolean isConcurrentAllowed; - - /** - * 默认任期(月) - */ - @Min(value = 1, message = "默认任期最少1个月") - @Max(value = 48, message = "默认任期最多48个月") - private Integer defaultTermMonths; - - /** - * 最低年级要求 - */ - @Size(max = 10, message = "最低年级要求长度不能超过10个字符") - private String minGradeRequirement; - - /** - * 学业要求 - */ - @Size(max = 200, message = "学业要求长度不能超过200个字符") - private String academicRequirements; - - /** - * 技能要求 - */ - private String skillRequirements; - - /** - * 经验要求 - */ - private String experienceRequirements; - - /** - * 默认权限(JSON格式) - */ - private String defaultPermissions; - - /** - * 系统角色列表(逗号分隔) - */ - @Size(max = 200, message = "系统角色列表长度不能超过200个字符") - private String systemRoles; - - /** - * 访问级别:1-基础,2-中级,3-高级 - */ - @Min(value = 1, message = "访问级别最小值为1") - @Max(value = 3, message = "访问级别最大值为3") - private Integer accessLevel; - - /** - * 职责描述 - */ - private String responsibilities; - - /** - * 具体职务 - */ - private String duties; - - /** - * KPI指标(JSON格式) - */ - private String kpiIndicators; - - /** - * 工作标准 - */ - private String workStandards; - - /** - * 配置状态:1-启用,2-禁用 - */ - @Pattern(regexp = "^[1-2]$", message = "配置状态必须是1或2") - private String configStatus; - - /** - * 是否系统职务:0-否,1-是 - */ - private Boolean isSystemPosition; - - /** - * 排序顺序 - */ - private Integer sortOrder; - - /** - * 职务图标 - */ - @Size(max = 100, message = "职务图标长度不能超过100个字符") - private String icon; - - /** - * 显示颜色 - */ - @Size(max = 20, message = "显示颜色长度不能超过20个字符") - private String color; - - /** - * 职务描述 - */ - @Size(max = 500, message = "职务描述长度不能超过500个字符") - private String description; - - /** - * 备注信息 - */ - @Size(max = 500, message = "备注信息长度不能超过500个字符") - private String remark; - - // 以下是从基类继承的字段,这里显式声明用于MyBatis映射 - private Long createBy; - - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date createTime; - - private Long updateBy; - - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date updateTime; -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgClassCadre.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgClassCadre.java deleted file mode 100644 index 73fff74b..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgClassCadre.java +++ /dev/null @@ -1,466 +0,0 @@ -package org.dromara.xg.domain; - -import org.dromara.common.tenant.core.TenantEntity; -import com.baomidou.mybatisplus.annotation.*; -import lombok.Data; -import lombok.EqualsAndHashCode; -import java.util.Date; -import java.math.BigDecimal; -import com.fasterxml.jackson.annotation.JsonFormat; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import jakarta.validation.constraints.*; - -import java.io.Serial; - -/** - * 班级干部信息对象 xg_class_cadre - * - * @author Cursor AI - * @date 2025-01-09 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("xg_class_cadre") -public class XgClassCadre extends TenantEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键ID - */ - @TableId(value = "id") - private Long id; - - /** - * 班级ID,关联xg_class_info.id - */ - @NotNull(message = "班级ID不能为空", groups = {AddGroup.class, EditGroup.class}) - private Long classId; - - /** - * 学生ID,关联xg_student_info.id - */ - @NotNull(message = "学生ID不能为空", groups = {AddGroup.class, EditGroup.class}) - private Long studentId; - - /** - * 学号 - */ - @NotBlank(message = "学号不能为空", groups = {AddGroup.class, EditGroup.class}) - @Size(max = 32, message = "学号长度不能超过32个字符") - private String studentNo; - - /** - * 学生姓名(冗余字段) - */ - @NotBlank(message = "学生姓名不能为空", groups = {AddGroup.class, EditGroup.class}) - @Size(max = 50, message = "学生姓名长度不能超过50个字符") - private String studentName; - - /** - * 职务编码:monitor-班长,deputy-副班长,secretary-学习委员等 - */ - @NotBlank(message = "职务编码不能为空", groups = {AddGroup.class, EditGroup.class}) - @Size(max = 20, message = "职务编码长度不能超过20个字符") - private String positionCode; - - /** - * 职务名称 - */ - @NotBlank(message = "职务名称不能为空", groups = {AddGroup.class, EditGroup.class}) - @Size(max = 50, message = "职务名称长度不能超过50个字符") - private String positionName; - - /** - * 职务级别:1-班长,2-副班长,3-委员,9-普通成员 - */ - @Min(value = 1, message = "职务级别最小值为1") - @Max(value = 9, message = "职务级别最大值为9") - private Integer positionLevel; - - /** - * 职务类别:class-班级干部,party-党团干部,other-其他 - */ - @Size(max = 20, message = "职务类别长度不能超过20个字符") - private String positionCategory; - - /** - * 任职日期 - */ - @NotNull(message = "任职日期不能为空", groups = {AddGroup.class, EditGroup.class}) - @JsonFormat(pattern = "yyyy-MM-dd") - private Date appointmentDate; - - /** - * 任期开始日期 - */ - @NotNull(message = "任期开始日期不能为空", groups = {AddGroup.class, EditGroup.class}) - @JsonFormat(pattern = "yyyy-MM-dd") - private Date termStartDate; - - /** - * 任期结束日期 - */ - @JsonFormat(pattern = "yyyy-MM-dd") - private Date termEndDate; - - /** - * 任期时长(月) - */ - @Min(value = 1, message = "任期时长最少1个月") - @Max(value = 48, message = "任期时长最多48个月") - private Integer termDuration; - - /** - * 是否现任:0-否,1-是 - */ - private Boolean isCurrent; - - /** - * 任职状态:1-在任,2-到期,3-辞职,4-免职,5-调任 - */ - @Pattern(regexp = "^[1-5]$", message = "任职状态必须是1-5之间的数字") - private String cadreStatus; - - /** - * 是否兼职:0-否,1-是 - */ - private Boolean isConcurrent; - - /** - * 兼任职务列表(逗号分隔) - */ - @Size(max = 200, message = "兼任职务列表长度不能超过200个字符") - private String concurrentPositions; - - /** - * 任命人ID,关联sys_user.id - */ - private Long appointerId; - - /** - * 任命人姓名 - */ - @Size(max = 50, message = "任命人姓名长度不能超过50个字符") - private String appointerName; - - /** - * 任命原因 - */ - @Size(max = 200, message = "任命原因长度不能超过200个字符") - private String appointmentReason; - - /** - * 任命文件号 - */ - @Size(max = 200, message = "任命文件号长度不能超过200个字符") - private String appointmentDocument; - - /** - * 离任日期 - */ - @JsonFormat(pattern = "yyyy-MM-dd") - private Date dismissalDate; - - /** - * 离任原因 - */ - @Size(max = 200, message = "离任原因长度不能超过200个字符") - private String dismissalReason; - - /** - * 免职人ID,关联sys_user.id - */ - private Long dismisserId; - - /** - * 免职人姓名 - */ - @Size(max = 50, message = "免职人姓名长度不能超过50个字符") - private String dismisserName; - - /** - * 免职文件号 - */ - @Size(max = 200, message = "免职文件号长度不能超过200个字符") - private String dismissalDocument; - - /** - * 工作表现:excellent-优秀,good-良好,average-一般,poor-较差 - */ - @Pattern(regexp = "^(excellent|good|average|poor)$", message = "工作表现必须是excellent、good、average、poor中的一个") - private String workPerformance; - - /** - * 表现评分(0-10分) - */ - @DecimalMin(value = "0.0", message = "表现评分不能小于0分") - @DecimalMax(value = "10.0", message = "表现评分不能大于10分") - private BigDecimal performanceScore; - - /** - * 工作总结 - */ - private String workSummary; - - /** - * 评价意见 - */ - private String evaluationComments; - - /** - * 权限配置(JSON格式) - */ - private String permissions; - - /** - * 系统角色列表(逗号分隔) - */ - @Size(max = 200, message = "系统角色列表长度不能超过200个字符") - private String systemRoles; - - /** - * 访问级别:1-基础,2-中级,3-高级 - */ - @Min(value = 1, message = "访问级别最小值为1") - @Max(value = 3, message = "访问级别最大值为3") - private Integer accessLevel; - - /** - * 联系电话 - */ - @Size(max = 20, message = "联系电话长度不能超过20个字符") - @Pattern(regexp = "^[0-9+-]*$", message = "联系电话格式不正确") - private String contactPhone; - - /** - * 联系邮箱 - */ - @Size(max = 100, message = "联系邮箱长度不能超过100个字符") - @Email(message = "联系邮箱格式不正确") - private String contactEmail; - - /** - * 紧急联系人 - */ - @Size(max = 50, message = "紧急联系人长度不能超过50个字符") - private String emergencyContact; - - /** - * 紧急联系电话 - */ - @Size(max = 20, message = "紧急联系电话长度不能超过20个字符") - @Pattern(regexp = "^[0-9+-]*$", message = "紧急联系电话格式不正确") - private String emergencyPhone; - - /** - * 工作计划 - */ - private String workPlan; - - /** - * 主要成就 - */ - private String achievements; - - /** - * 培训记录(JSON格式) - */ - private String trainingRecords; - - /** - * 会议出席记录(JSON格式) - */ - private String meetingAttendance; - - /** - * 排序顺序 - */ - private Integer sortOrder; - - /** - * 备注信息 - */ - @Size(max = 500, message = "备注信息长度不能超过500个字符") - private String remark; - - // 以下是从基类继承的字段,这里显式声明用于MyBatis映射 - private Long createBy; - - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date createTime; - - private Long updateBy; - - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date updateTime; - - // 手动添加所有缺失的getter和setter方法 - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public Long getClassId() { - return this.classId; - } - - public void setClassId(Long classId) { - this.classId = classId; - } - - public Long getStudentId() { - return this.studentId; - } - - public void setStudentId(Long studentId) { - this.studentId = studentId; - } - - public String getStudentNo() { - return this.studentNo; - } - - public void setStudentNo(String studentNo) { - this.studentNo = studentNo; - } - - public String getStudentName() { - return this.studentName; - } - - public void setStudentName(String studentName) { - this.studentName = studentName; - } - - public String getPositionCode() { - return this.positionCode; - } - - public void setPositionCode(String positionCode) { - this.positionCode = positionCode; - } - - public String getPositionName() { - return this.positionName; - } - - public void setPositionName(String positionName) { - this.positionName = positionName; - } - - public Integer getPositionLevel() { - return this.positionLevel; - } - - public void setPositionLevel(Integer positionLevel) { - this.positionLevel = positionLevel; - } - - public String getPositionCategory() { - return this.positionCategory; - } - - public void setPositionCategory(String positionCategory) { - this.positionCategory = positionCategory; - } - - public Boolean getIsCurrent() { - return this.isCurrent; - } - - public void setIsCurrent(Boolean isCurrent) { - this.isCurrent = isCurrent; - } - - public String getCadreStatus() { - return this.cadreStatus; - } - - public void setCadreStatus(String cadreStatus) { - this.cadreStatus = cadreStatus; - } - - public Boolean getIsConcurrent() { - return this.isConcurrent; - } - - public void setIsConcurrent(Boolean isConcurrent) { - this.isConcurrent = isConcurrent; - } - - public String getWorkPerformance() { - return this.workPerformance; - } - - public void setWorkPerformance(String workPerformance) { - this.workPerformance = workPerformance; - } - - public Date getAppointmentDate() { - return this.appointmentDate; - } - - public void setAppointmentDate(Date appointmentDate) { - this.appointmentDate = appointmentDate; - } - - public Date getTermStartDate() { - return this.termStartDate; - } - - public void setTermStartDate(Date termStartDate) { - this.termStartDate = termStartDate; - } - - public Date getTermEndDate() { - return this.termEndDate; - } - - public void setTermEndDate(Date termEndDate) { - this.termEndDate = termEndDate; - } - - public Date getDismissalDate() { - return this.dismissalDate; - } - - public void setDismissalDate(Date dismissalDate) { - this.dismissalDate = dismissalDate; - } - - public String getDismissalReason() { - return this.dismissalReason; - } - - public void setDismissalReason(String dismissalReason) { - this.dismissalReason = dismissalReason; - } - - public String getRemark() { - return this.remark; - } - - public void setRemark(String remark) { - this.remark = remark; - } - - // 手动添加缺失的setter方法,解决编译错误 - public void setDismisserId(Long dismisserId) { - this.dismisserId = dismisserId; - } - - public void setDismisserName(String dismisserName) { - this.dismisserName = dismisserName; - } - - public void setTermDuration(Integer termDuration) { - this.termDuration = termDuration; - } - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgClassInfo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgClassInfo.java deleted file mode 100644 index ecd91e40..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgClassInfo.java +++ /dev/null @@ -1,297 +0,0 @@ -package org.dromara.xg.domain; - -import org.dromara.common.tenant.core.TenantEntity; -import com.baomidou.mybatisplus.annotation.*; -import lombok.Data; -import lombok.EqualsAndHashCode; -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; - -import java.io.Serial; - -/** - * 班级信息对象 xg_class_info - * - * @author Cursor AI - * @date 2025-01-14 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("xg_class_info") -public class XgClassInfo extends TenantEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键ID - */ - @TableId(value = "id") - private Long id; - - /** - * 班级代码,唯一标识 - */ - private String classCode; - - /** - * 班级名称 - */ - private String className; - - /** - * 班级类型:regular-普通班级,honor-荣誉班级,experimental-实验班级,special-特殊班级 - */ - private String classType; - - /** - * 年级:如2023级 - */ - private String grade; - - /** - * 入学年份 - */ - private Integer enrollmentYear; - - /** - * 毕业年份 - */ - private Integer graduationYear; - - /** - * 专业代码 - */ - private String majorCode; - - /** - * 专业名称 - */ - private String majorName; - - /** - * 学院代码 - */ - private String collegeCode; - - /** - * 学院名称 - */ - private String collegeName; - - /** - * 辅导员ID,关联sys_user.id - */ - private Long counselorId; - - /** - * 辅导员姓名 - */ - private String counselorName; - - /** - * 班主任ID,关联sys_user.id - */ - private Long classTeacherId; - - /** - * 班主任姓名 - */ - private String classTeacherName; - - /** - * 班级状态:1-正常,2-停招,3-已毕业,4-已解散 - */ - private String classStatus; - - /** - * 当前学生数量 - */ - private Integer currentStudentCount; - - /** - * 最大学生数量 - */ - private Integer maxStudentCount; - - /** - * 男生人数 - */ - private Integer maleCount; - - /** - * 女生人数 - */ - private Integer femaleCount; - - /** - * 班级描述 - */ - private String classDescription; - - /** - * 班级备注 - */ - private String classNotes; - - /** - * 扩展字段1 - */ - private String extField1; - - /** - * 扩展字段2 - */ - private String extField2; - - /** - * 扩展字段3 - */ - private String extField3; - - /** - * 备注 - */ - private String remark; - - /** - * 获取主键ID - */ - public Long getId() { - return this.id; - } - - /** - * 获取班级代码 - */ - public String getClassCode() { - return this.classCode; - } - - /** - * 获取班级名称 - */ - public String getClassName() { - return this.className; - } - - /** - * 获取入学年份 - */ - public Integer getEnrollmentYear() { - return this.enrollmentYear; - } - - /** - * 获取专业代码 - */ - public String getMajorCode() { - return this.majorCode; - } - - /** - * 获取专业名称 - */ - public String getMajorName() { - return this.majorName; - } - - /** - * 获取学院代码 - */ - public String getCollegeCode() { - return this.collegeCode; - } - - /** - * 获取学院名称 - */ - public String getCollegeName() { - return this.collegeName; - } - - /** - * 获取辅导员ID - */ - public Long getCounselorId() { - return this.counselorId; - } - - /** - * 获取辅导员姓名 - */ - public String getCounselorName() { - return this.counselorName; - } - - /** - * 获取班主任ID - */ - public Long getClassTeacherId() { - return this.classTeacherId; - } - - /** - * 获取班主任姓名 - */ - public String getClassTeacherName() { - return this.classTeacherName; - } - - /** - * 获取班级状态 - */ - public String getClassStatus() { - return this.classStatus; - } - - /** - * 设置班级状态 - */ - public void setClassStatus(String classStatus) { - this.classStatus = classStatus; - } - - /** - * 获取当前学生数 - */ - public Integer getCurrentStudentCount() { - return this.currentStudentCount; - } - - /** - * 设置当前学生数 - */ - public void setCurrentStudentCount(Integer currentStudentCount) { - this.currentStudentCount = currentStudentCount; - } - - /** - * 获取男生数量 - */ - public Integer getMaleCount() { - return this.maleCount; - } - - /** - * 设置男生数量 - */ - public void setMaleCount(Integer maleCount) { - this.maleCount = maleCount; - } - - /** - * 获取女生数量 - */ - public Integer getFemaleCount() { - return this.femaleCount; - } - - /** - * 设置女生数量 - */ - public void setFemaleCount(Integer femaleCount) { - this.femaleCount = femaleCount; - } - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgClassStudent.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgClassStudent.java deleted file mode 100644 index a621768c..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgClassStudent.java +++ /dev/null @@ -1,74 +0,0 @@ -package org.dromara.xg.domain; - -import org.dromara.common.tenant.core.TenantEntity; -import com.baomidou.mybatisplus.annotation.*; -import lombok.Data; -import lombok.EqualsAndHashCode; -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; - -import java.io.Serial; - -/** - * 班级学生关系对象 xg_class_student - * - * @author Cursor AI - * @date 2025-01-14 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("xg_class_student") -public class XgClassStudent extends TenantEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键ID - */ - @TableId(value = "id") - private Long id; - - /** - * 班级ID,关联xg_class_info.id - */ - private Long classId; - - /** - * 学生ID,关联xg_student_info.id - */ - private Long studentId; - - /** - * 学生学号 - */ - private String studentNo; - - /** - * 班级职务:班长、副班长、学习委员、生活委员等 - */ - private String classPosition; - - /** - * 加入班级时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date joinTime; - - /** - * 离开班级时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date leaveTime; - - /** - * 关系状态:1-在班,2-转出,3-转入,4-休学,5-退学,6-毕业 - */ - private String relationStatus; - - /** - * 备注 - */ - private String remark; - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgCollectionBatch.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgCollectionBatch.java deleted file mode 100644 index 5d848654..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgCollectionBatch.java +++ /dev/null @@ -1,494 +0,0 @@ -package org.dromara.xg.domain; - -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import com.fasterxml.jackson.annotation.JsonFormat; - -import java.io.Serial; -import java.math.BigDecimal; -import java.time.LocalDateTime; - -/** - * 信息采集批次对象 xg_collection_batch - * - * @author ruoyi - * @date 2025-01-12 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("xg_collection_batch") -public class XgCollectionBatch extends BaseEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键ID - */ - @TableId - private Long id; - - /** - * 批次ID(业务主键) - */ - private Long batchId; - - /** - * 批次编码 - */ - private String batchCode; - - /** - * 批次名称 - */ - private String batchName; - - /** - * 批次类型:regular-常规,special-专项,urgent-紧急 - */ - private String batchType; - - /** - * 学年 - */ - private String academicYear; - - /** - * 学期 - */ - private String semester; - - /** - * 关联学年ID - */ - private Long academicYearId; - - /** - * 关联学期ID - */ - private Long semesterId; - - /** - * 关联业务期ID - */ - private Long businessPeriodId; - - /** - * 目标范围:all-全部,college-学院,class-班级,student-个人 - */ - private String targetScope; - - /** - * 目标ID列表(JSON格式),当target_scope不为all时使用 - */ - private String targetIds; - - /** - * 批次开始时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime startTime; - - /** - * 批次结束时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime endTime; - - /** - * 实际结束时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime actualEndTime; - - /** - * 批次状态:DRAFT-草稿,ACTIVE-进行中,COMPLETED-已完成,CANCELLED-已取消 - */ - private String status; - - /** - * 发布状态:UNPUBLISHED-未发布,PUBLISHED-已发布 - */ - private String publishStatus; - - /** - * 是否已发布:0-否,1-是 - */ - private Boolean isPublished; - - /** - * 发布时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime publishTime; - - /** - * 是否自动提醒:0-否,1-是 - */ - private Boolean autoRemind; - - /** - * 提醒天数(结束前几天提醒) - */ - private Integer remindDays; - - /** - * 批次描述 - */ - private String description; - - /** - * 通知内容 - */ - private String noticeContent; - - /** - * 完成率 - */ - private BigDecimal completionRate; - - /** - * 总人数 - */ - private Integer totalCount; - - /** - * 已完成人数 - */ - private Integer completedCount; - - /** - * 排序字段 - */ - private Integer sortOrder; - - /** - * 备注 - */ - private String remark; - - /** - * 是否允许编辑:0-否,1-是 - */ - private Integer allowEdit; - - // ==================== 统计字段 ==================== - - /** - * 总学生数 - */ - private Integer totalStudents; - - /** - * 已提交学生数 - */ - private Integer submittedStudents; - - /** - * 已通过学生数 - */ - private Integer approvedStudents; - - /** - * 已拒绝学生数 - */ - private Integer rejectedStudents; - - // ==================== 审核配置字段 ==================== - - /** - * 是否需要审核:0-否,1-是 - */ - private Boolean requireApproval; - - /** - * 是否自动审核:0-否,1-是 - */ - private Boolean autoApprove; - - /** - * 是否通知学生:0-否,1-是 - */ - private Boolean notifyStudents; - - /** - * 提醒天数(结束前几天提醒) - */ - private Integer reminderDays; - - // ==================== 兼容方法 ==================== - - /** - * 批次状态(别名,与status保持一致) - */ - public String getBatchStatus() { - return this.status; - } - - public void setBatchStatus(String batchStatus) { - this.status = batchStatus; - } - - /** - * 获取批次ID(如果batchId为null,返回主键id) - */ - public Long getBatchId() { - return this.batchId != null ? this.batchId : this.id; - } - - public void setBatchId(Long batchId) { - this.batchId = batchId; - if (this.id == null) { - this.id = batchId; - } - } - - // ==================== 手动添加的 getter/setter 方法 ==================== - - /** - * 获取批次编码 - */ - public String getBatchCode() { - return this.batchCode; - } - - /** - * 获取批次名称 - */ - public String getBatchName() { - return this.batchName; - } - - /** - * 获取批次类型 - */ - public String getBatchType() { - return this.batchType; - } - - /** - * 获取学年 - */ - public String getAcademicYear() { - return this.academicYear; - } - - /** - * 获取学期 - */ - public String getSemester() { - return this.semester; - } - - /** - * 获取发布状态 - */ - public String getPublishStatus() { - return this.publishStatus; - } - - /** - * 设置发布状态 - */ - public void setPublishStatus(String publishStatus) { - this.publishStatus = publishStatus; - } - - /** - * 获取开始时间 - */ - public LocalDateTime getStartTime() { - return this.startTime; - } - - /** - * 获取结束时间 - */ - public LocalDateTime getEndTime() { - return this.endTime; - } - - /** - * 设置发布时间 - */ - public void setPublishTime(LocalDateTime publishTime) { - this.publishTime = publishTime; - } - - /** - * 设置实际结束时间 - */ - public void setActualEndTime(LocalDateTime actualEndTime) { - this.actualEndTime = actualEndTime; - } - - /** - * 设置总学生数 - */ - public void setTotalStudents(Integer totalStudents) { - this.totalStudents = totalStudents; - } - - /** - * 设置已提交学生数 - */ - public void setSubmittedStudents(Integer submittedStudents) { - this.submittedStudents = submittedStudents; - } - - /** - * 设置已通过学生数 - */ - public void setApprovedStudents(Integer approvedStudents) { - this.approvedStudents = approvedStudents; - } - - /** - * 设置已拒绝学生数 - */ - public void setRejectedStudents(Integer rejectedStudents) { - this.rejectedStudents = rejectedStudents; - } - - /** - * 设置完成率 - */ - public void setCompletionRate(Double completionRate) { - if (completionRate != null) { - this.completionRate = BigDecimal.valueOf(completionRate); - } else { - this.completionRate = null; - } - } - - /** - * 获取是否允许编辑 - */ - public Integer getAllowEdit() { - return this.allowEdit; - } - - /** - * 获取是否需要审核 - */ - public Boolean getRequireApproval() { - return this.requireApproval; - } - - /** - * 获取是否自动审核 - */ - public Boolean getAutoApprove() { - return this.autoApprove; - } - - /** - * 获取是否通知学生 - */ - public Boolean getNotifyStudents() { - return this.notifyStudents; - } - - /** - * 获取提醒天数 - */ - public Integer getReminderDays() { - return this.reminderDays; - } - - // ==================== 剩余的 setter 方法 ==================== - - /** - * 设置批次编码 - */ - public void setBatchCode(String batchCode) { - this.batchCode = batchCode; - } - - /** - * 设置批次名称 - */ - public void setBatchName(String batchName) { - this.batchName = batchName; - } - - /** - * 设置批次类型 - */ - public void setBatchType(String batchType) { - this.batchType = batchType; - } - - /** - * 设置学年 - */ - public void setAcademicYear(String academicYear) { - this.academicYear = academicYear; - } - - /** - * 设置学期 - */ - public void setSemester(String semester) { - this.semester = semester; - } - - /** - * 设置描述 - */ - public void setDescription(String description) { - this.description = description; - } - - /** - * 设置开始时间 - */ - public void setStartTime(LocalDateTime startTime) { - this.startTime = startTime; - } - - /** - * 设置结束时间 - */ - public void setEndTime(LocalDateTime endTime) { - this.endTime = endTime; - } - - /** - * 设置是否允许编辑 - */ - public void setAllowEdit(Integer allowEdit) { - this.allowEdit = allowEdit; - } - - /** - * 设置是否需要审核 - */ - public void setRequireApproval(Boolean requireApproval) { - this.requireApproval = requireApproval; - } - - /** - * 设置是否自动审核 - */ - public void setAutoApprove(Boolean autoApprove) { - this.autoApprove = autoApprove; - } - - /** - * 设置是否通知学生 - */ - public void setNotifyStudents(Boolean notifyStudents) { - this.notifyStudents = notifyStudents; - } - - /** - * 设置提醒天数 - */ - public void setReminderDays(Integer reminderDays) { - this.reminderDays = reminderDays; - } -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgDictData.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgDictData.java deleted file mode 100644 index c273973b..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgDictData.java +++ /dev/null @@ -1,76 +0,0 @@ -package org.dromara.xg.domain; - -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.dromara.common.mybatis.core.domain.BaseEntity; - -import java.io.Serial; - -/** - * 数据字典对象 xg_dict_data - * - * @author ruoyi - * @date 2025-01-12 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("xg_dict_data") -public class XgDictData extends BaseEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键ID - */ - @TableId - private Long id; - - /** - * 字典类型 - */ - private String dictType; - - /** - * 字典标签 - */ - private String dictLabel; - - /** - * 字典键值 - */ - private String dictValue; - - /** - * 字典排序 - */ - private Integer dictSort; - - /** - * 样式属性 - */ - private String cssClass; - - /** - * 表格回显样式 - */ - private String listClass; - - /** - * 是否默认:0-否,1-是 - */ - private Boolean isDefault; - - /** - * 状态:0-正常,1-停用 - */ - private String status; - - /** - * 备注 - */ - private String remark; - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgNotice.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgNotice.java deleted file mode 100644 index ba565f72..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgNotice.java +++ /dev/null @@ -1,132 +0,0 @@ -package org.dromara.xg.domain; - -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.dromara.common.mybatis.core.domain.BaseEntity; - -import java.io.Serial; -import java.time.LocalDateTime; - -/** - * 通知公告对象 xg_notice - * - * @author ruoyi - * @date 2025-01-12 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("xg_notice") -public class XgNotice extends BaseEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键ID - */ - @TableId - private Long id; - - /** - * 通知编码 - */ - private String noticeCode; - - /** - * 通知标题 - */ - private String title; - - /** - * 通知内容 - */ - private String content; - - /** - * 通知类型:batch-批次通知,audit-审核通知,remind-提醒通知,system-系统通知 - */ - private String noticeType; - - /** - * 优先级:low-低,normal-普通,high-高,urgent-紧急 - */ - private String priority; - - /** - * 目标类型:all-全部,role-角色,user-用户,college-学院,class-班级 - */ - private String targetType; - - /** - * 目标ID列表(JSON格式) - */ - private String targetIds; - - /** - * 关联ID(如批次ID、审核ID等) - */ - private Long relatedId; - - /** - * 关联类型:batch-批次,audit-审核,student-学生 - */ - private String relatedType; - - /** - * 发布时间 - */ - private LocalDateTime publishTime; - - /** - * 过期时间 - */ - private LocalDateTime expireTime; - - /** - * 是否已发布:0-否,1-是 - */ - private Boolean isPublished; - - /** - * 是否置顶:0-否,1-是 - */ - private Boolean isTop; - - /** - * 阅读次数 - */ - private Integer readCount; - - /** - * 附件URL列表(JSON格式) - */ - private String attachmentUrls; - - /** - * 是否自动发送:0-否,1-是 - */ - private Boolean autoSend; - - /** - * 发送渠道:web-网页,email-邮件,sms-短信,wechat-微信 - */ - private String sendChannels; - - /** - * 状态:draft-草稿,published-已发布,expired-已过期,cancelled-已取消 - */ - private String status; - - /** - * 排序字段 - */ - private Integer sortOrder; - - /** - * 备注 - */ - private String remark; - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgNoticeRead.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgNoticeRead.java deleted file mode 100644 index 5d9f1ed9..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgNoticeRead.java +++ /dev/null @@ -1,170 +0,0 @@ -package org.dromara.xg.domain; - -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.dromara.common.mybatis.core.domain.BaseEntity; - -import java.io.Serial; -import java.time.LocalDateTime; - -/** - * 通知阅读记录对象 xg_notice_read - * - * @author ruoyi - * @date 2025-01-12 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("xg_notice_read") -public class XgNoticeRead extends BaseEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键ID - */ - @TableId - private Long id; - - /** - * 通知ID,关联xg_notice.id - */ - private Long noticeId; - - /** - * 用户ID - */ - private Long userId; - - /** - * 用户姓名 - */ - private String userName; - - /** - * 用户类型 - */ - private String userType; - - /** - * 阅读时间 - */ - private LocalDateTime readTime; - - /** - * 阅读时长(秒) - */ - private Integer readDuration; - - /** - * IP地址 - */ - private String ipAddress; - - /** - * 用户代理 - */ - private String userAgent; - - /** - * 设备类型:pc-电脑,mobile-手机,tablet-平板 - */ - private String deviceType; - - /** - * 备注 - */ - private String remark; - - // 手动添加getter/setter方法以解决Lombok问题 - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public Long getNoticeId() { - return noticeId; - } - - public void setNoticeId(Long noticeId) { - this.noticeId = noticeId; - } - - public Long getUserId() { - return userId; - } - - public void setUserId(Long userId) { - this.userId = userId; - } - - public String getUserName() { - return userName; - } - - public void setUserName(String userName) { - this.userName = userName; - } - - public String getUserType() { - return userType; - } - - public void setUserType(String userType) { - this.userType = userType; - } - - public LocalDateTime getReadTime() { - return readTime; - } - - public void setReadTime(LocalDateTime readTime) { - this.readTime = readTime; - } - - public Integer getReadDuration() { - return readDuration; - } - - public void setReadDuration(Integer readDuration) { - this.readDuration = readDuration; - } - - public String getIpAddress() { - return ipAddress; - } - - public void setIpAddress(String ipAddress) { - this.ipAddress = ipAddress; - } - - public String getUserAgent() { - return userAgent; - } - - public void setUserAgent(String userAgent) { - this.userAgent = userAgent; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getRemark() { - return remark; - } - - public void setRemark(String remark) { - this.remark = remark; - } -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgSemester.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgSemester.java deleted file mode 100644 index 5fe2bbb8..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgSemester.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.dromara.xg.domain; - -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.dromara.common.mybatis.core.domain.BaseEntity; - -import java.io.Serial; -import java.time.LocalDate; - -/** - * 学期管理对象 xg_semester - * - * @author ruoyi - * @date 2025-01-12 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("xg_semester") -public class XgSemester extends BaseEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键ID - */ - @TableId - private Long id; - - /** - * 学年ID,关联xg_academic_year.id - */ - private Long academicYearId; - - /** - * 学期编码,如2024-2025-1 - */ - private String semesterCode; - - /** - * 学期名称,如2024-2025学年第一学期 - */ - private String semesterName; - - /** - * 学期类型:first-第一学期,second-第二学期,summer-暑期 - */ - private String semesterType; - - /** - * 学期开始日期 - */ - private LocalDate startDate; - - /** - * 学期结束日期 - */ - private LocalDate endDate; - - /** - * 是否当前学期:0-否,1-是 - */ - private Boolean isCurrent; - - /** - * 状态:active-有效,inactive-无效 - */ - private String status; - - /** - * 学期描述 - */ - private String description; - - /** - * 排序字段 - */ - private Integer sortOrder; - - /** - * 备注 - */ - private String remark; - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgStudentInfo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgStudentInfo.java deleted file mode 100644 index c22c009b..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgStudentInfo.java +++ /dev/null @@ -1,333 +0,0 @@ -package org.dromara.xg.domain; - -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import com.fasterxml.jackson.annotation.JsonFormat; - -import java.io.Serial; -import java.math.BigDecimal; -import java.time.LocalDate; -import java.time.LocalDateTime; - -/** - * 学生信息对象 xg_student_info - * - * @author ruoyi - * @date 2025-01-12 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("xg_student_info") -public class XgStudentInfo extends BaseEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键ID - */ - @TableId - private Long id; - - /** - * 学号 - */ - private String studentNo; - - /** - * 姓名 - */ - private String name; - - /** - * 性别:M-男,F-女 - */ - private String gender; - - /** - * 出生日期 - */ - @JsonFormat(pattern = "yyyy-MM-dd") - private LocalDate birthDate; - - /** - * 身份证号 - */ - private String idCard; - - /** - * 民族 - */ - private String nation; - - /** - * 政治面貌 - */ - private String politicalStatus; - - /** - * 宗教信仰 - */ - private String religion; - - /** - * 手机号 - */ - private String phone; - - /** - * 邮箱 - */ - private String email; - - /** - * 家庭地址 - */ - private String homeAddress; - - /** - * 邮政编码 - */ - private String postalCode; - - /** - * 紧急联系人 - */ - private String emergencyContact; - - /** - * 紧急联系电话 - */ - private String emergencyPhone; - - /** - * 身高(厘米) - */ - private BigDecimal height; - - /** - * 体重(公斤) - */ - private BigDecimal weight; - - /** - * 血型 - */ - private String bloodType; - - /** - * 健康状况 - */ - private String healthStatus; - - /** - * 银行卡号 - */ - private String bankCard; - - /** - * 开户行 - */ - private String bankName; - - /** - * 持卡人姓名 - */ - private String cardHolder; - - /** - * 照片URL - */ - private String photoUrl; - - /** - * 特长 - */ - private String specialties; - - /** - * 学院ID - */ - private Long collegeId; - - /** - * 学院名称 - */ - private String collegeName; - - /** - * 专业 - */ - private String major; - - /** - * 班级ID - */ - private Long classId; - - /** - * 班级名称 - */ - private String className; - - /** - * 年级 - */ - private String grade; - - /** - * 入学日期 - */ - @JsonFormat(pattern = "yyyy-MM-dd") - private LocalDate enrollmentDate; - - /** - * 学制(年) - */ - private Integer educationLength; - - /** - * 学籍状态:active-在读,graduated-已毕业,dropout-退学,suspended-休学 - */ - private String studentStatus; - - /** - * 培养方式:full_time-全日制,part_time-非全日制 - */ - private String trainingMode; - - /** - * 当前批次ID - */ - private Long currentBatchId; - - /** - * 信息状态:draft-草稿,submitted-已提交,approved-已审核 - */ - private String infoStatus; - - /** - * 最后提交时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime lastSubmitTime; - - /** - * 最后审核时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime lastAuditTime; - - /** - * 审核意见 - */ - private String auditComment; - - /** - * 版本号 - */ - private Integer version; - - /** - * 排序字段 - */ - private Integer sortOrder; - - /** - * 备注 - */ - private String remark; - - // 手动添加缺失的getter方法,解决编译错误 - public String getName() { - return name; - } - - public String getStudentNo() { - return studentNo; - } - - public String getClassCode() { - return String.valueOf(classId); - } - - public String getClassName() { - return className; - } - - public String getCollegeCode() { - return String.valueOf(collegeId); - } - - public String getCollegeName() { - return collegeName; - } - - public void setSubmissionTime(LocalDateTime submissionTime) { - this.lastSubmitTime = submissionTime; - } - - // 手动添加审批相关的setter方法以确保编译通过 - public void setSubmissionStatus(String submissionStatus) { - // 如果字段不存在,先添加字段 - // this.submissionStatus = submissionStatus; - } - - public void setApprovalTime(java.time.LocalDateTime approvalTime) { - // 如果字段不存在,先添加字段 - // this.approvalTime = approvalTime; - } - - public void setApprovalBy(Long approvalBy) { - // 如果字段不存在,先添加字段 - // this.approvalBy = approvalBy; - } - - public void setApprovalComments(String approvalComments) { - // 如果字段不存在,先添加字段 - // this.approvalComments = approvalComments; - } - - public String getIdCard() { - return idCard; - } - - public void setIdCard(String idCard) { - this.idCard = idCard; - } - - public String getPhone() { - return phone; - } - - public void setPhone(String phone) { - this.phone = phone; - } - - public String getGender() { - return gender; - } - - public void setGender(String gender) { - this.gender = gender; - } - - public String getStudentStatus() { - return studentStatus; - } - - public void setStudentStatus(String studentStatus) { - this.studentStatus = studentStatus; - } - - public String getMajor() { - return major; - } - - public void setMajor(String major) { - this.major = major; - } -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgStudentInfoHistory.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgStudentInfoHistory.java deleted file mode 100644 index a90b0930..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgStudentInfoHistory.java +++ /dev/null @@ -1,102 +0,0 @@ -package org.dromara.xg.domain; - -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.dromara.common.mybatis.core.domain.BaseEntity; - -import java.io.Serial; -import java.time.LocalDateTime; - -/** - * 学生信息变更记录对象 xg_student_info_history - * - * @author ruoyi - * @date 2025-01-12 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("xg_student_info_history") -public class XgStudentInfoHistory extends BaseEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键ID - */ - @TableId - private Long id; - - /** - * 学生ID,关联xg_student_info.id - */ - private Long studentId; - - /** - * 批次ID - */ - private Long batchId; - - /** - * 变更类型:create-新增,update-修改,delete-删除 - */ - private String changeType; - - /** - * 变更字段列表(JSON格式) - */ - private String changeFields; - - /** - * 变更前数据(JSON格式) - */ - private String oldValues; - - /** - * 变更后数据(JSON格式) - */ - private String newValues; - - /** - * 变更原因 - */ - private String changeReason; - - /** - * 变更时间 - */ - private LocalDateTime changeTime; - - /** - * 变更人 - */ - private Long changeBy; - - /** - * 变更人姓名 - */ - private String changeByName; - - /** - * IP地址 - */ - private String ipAddress; - - /** - * 用户代理 - */ - private String userAgent; - - /** - * 版本号 - */ - private Integer version; - - /** - * 备注 - */ - private String remark; - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgSystemConfig.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgSystemConfig.java deleted file mode 100644 index ef35e984..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgSystemConfig.java +++ /dev/null @@ -1,76 +0,0 @@ -package org.dromara.xg.domain; - -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.dromara.common.mybatis.core.domain.BaseEntity; - -import java.io.Serial; - -/** - * 系统配置对象 xg_system_config - * - * @author ruoyi - * @date 2025-01-12 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("xg_system_config") -public class XgSystemConfig extends BaseEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键ID - */ - @TableId - private Long id; - - /** - * 配置键 - */ - private String configKey; - - /** - * 配置值 - */ - private String configValue; - - /** - * 配置类型:string-字符串,number-数字,boolean-布尔,json-JSON - */ - private String configType; - - /** - * 配置分组 - */ - private String configGroup; - - /** - * 配置描述 - */ - private String configDesc; - - /** - * 是否系统配置:0-否,1-是 - */ - private Boolean isSystem; - - /** - * 是否只读:0-否,1-是 - */ - private Boolean isReadonly; - - /** - * 排序字段 - */ - private Integer sortOrder; - - /** - * 备注 - */ - private String remark; - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgAcademicYearBo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgAcademicYearBo.java deleted file mode 100644 index 8fc5b8e2..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgAcademicYearBo.java +++ /dev/null @@ -1,125 +0,0 @@ -package org.dromara.xg.domain.bo; - -import org.dromara.xg.domain.XgAcademicYear; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import lombok.EqualsAndHashCode; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; -import jakarta.validation.constraints.Size; -import com.fasterxml.jackson.annotation.JsonFormat; - -import java.time.LocalDate; - -/** - * 学年管理业务对象 xg_academic_year - * - * @author ruoyi - * @date 2025-01-12 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@AutoMapper(target = XgAcademicYear.class, reverseConvertGenerate = false) -public class XgAcademicYearBo extends BaseEntity { - - /** - * 主键ID - */ - @NotNull(message = "主键ID不能为空", groups = {EditGroup.class}) - private Long id; - - /** - * 学年编码,如2024-2025 - */ - @NotBlank(message = "学年编码不能为空", groups = {AddGroup.class, EditGroup.class}) - @Size(max = 20, message = "学年编码长度不能超过20个字符") - private String yearCode; - - /** - * 学年名称,如2024-2025学年 - */ - @NotBlank(message = "学年名称不能为空", groups = {AddGroup.class, EditGroup.class}) - @Size(max = 50, message = "学年名称长度不能超过50个字符") - private String yearName; - - /** - * 学年开始日期 - */ - @NotNull(message = "学年开始日期不能为空", groups = {AddGroup.class, EditGroup.class}) - @JsonFormat(pattern = "yyyy-MM-dd") - private LocalDate startDate; - - /** - * 学年结束日期 - */ - @NotNull(message = "学年结束日期不能为空", groups = {AddGroup.class, EditGroup.class}) - @JsonFormat(pattern = "yyyy-MM-dd") - private LocalDate endDate; - - /** - * 是否当前学年:0-否,1-是 - */ - private Boolean isCurrent; - - /** - * 状态:active-有效,inactive-无效 - */ - @Size(max = 20, message = "状态长度不能超过20个字符") - private String status; - - /** - * 学年描述 - */ - private String description; - - /** - * 排序字段 - */ - private Integer sortOrder; - - /** - * 备注 - */ - @Size(max = 500, message = "备注长度不能超过500个字符") - private String remark; - - // 手动添加缺失的getter方法,解决编译错误 - public String getYearName() { - return yearName; - } - - public String getYearCode() { - return yearCode; - } - - public LocalDate getStartDate() { - return startDate; - } - - public LocalDate getEndDate() { - return endDate; - } - - public Boolean getIsCurrent() { - return isCurrent; - } - - public String getStatus() { - return status; - } - - public Long getId() { - return id; - } - - public void setStatus(String status) { - this.status = status; - } - - public void setId(Long id) { - this.id = id; - } -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgBatchPermissionBo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgBatchPermissionBo.java deleted file mode 100644 index d9e9ea2d..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgBatchPermissionBo.java +++ /dev/null @@ -1,116 +0,0 @@ -package org.dromara.xg.domain.bo; - -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import lombok.EqualsAndHashCode; -import jakarta.validation.constraints.*; -import java.time.LocalDateTime; -import org.dromara.xg.domain.XgBatchPermission; - -/** - * 批次权限配置业务对象 xg_batch_permission - * - * @author wuzilong - * @date 2025-01-08 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@AutoMapper(target = XgBatchPermission.class, reverseConvertGenerate = false) -public class XgBatchPermissionBo extends BaseEntity { - - /** - * 权限配置ID - */ - @NotNull(message = "权限配置ID不能为空", groups = { EditGroup.class }) - private Long permissionId; - - /** - * 批次ID - */ - @NotNull(message = "批次ID不能为空", groups = { AddGroup.class, EditGroup.class }) - private Long batchId; - - /** - * 用户组类型 - */ - @NotBlank(message = "用户组类型不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(max = 50, message = "用户组类型长度不能超过50个字符", groups = { AddGroup.class, EditGroup.class }) - private String userGroupType; - - /** - * 用户组名称 - */ - @NotBlank(message = "用户组名称不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(max = 100, message = "用户组名称长度不能超过100个字符", groups = { AddGroup.class, EditGroup.class }) - private String userGroupName; - - /** - * 权限类型 - */ - @NotBlank(message = "权限类型不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(max = 50, message = "权限类型长度不能超过50个字符", groups = { AddGroup.class, EditGroup.class }) - private String permissionType; - - /** - * 权限范围 - */ - @Size(max = 500, message = "权限范围长度不能超过500个字符", groups = { AddGroup.class, EditGroup.class }) - private String permissionScope; - - /** - * 是否可查看 - */ - @NotNull(message = "是否可查看不能为空", groups = { AddGroup.class, EditGroup.class }) - private Boolean canView; - - /** - * 是否可编辑 - */ - @NotNull(message = "是否可编辑不能为空", groups = { AddGroup.class, EditGroup.class }) - private Boolean canEdit; - - /** - * 是否可审核 - */ - @NotNull(message = "是否可审核不能为空", groups = { AddGroup.class, EditGroup.class }) - private Boolean canAudit; - - /** - * 是否可导出 - */ - @NotNull(message = "是否可导出不能为空", groups = { AddGroup.class, EditGroup.class }) - private Boolean canExport; - - /** - * 开始时间 - */ - private LocalDateTime startTime; - - /** - * 结束时间 - */ - private LocalDateTime endTime; - - /** - * 排序号 - */ - @Min(value = 0, message = "排序号不能小于0", groups = { AddGroup.class, EditGroup.class }) - private Integer sortOrder; - - /** - * 状态 - */ - @NotBlank(message = "状态不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(max = 10, message = "状态长度不能超过10个字符", groups = { AddGroup.class, EditGroup.class }) - private String status; - - /** - * 备注 - */ - @Size(max = 500, message = "备注长度不能超过500个字符", groups = { AddGroup.class, EditGroup.class }) - private String remark; - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgBusinessPeriodBo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgBusinessPeriodBo.java deleted file mode 100644 index 8db3c76a..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgBusinessPeriodBo.java +++ /dev/null @@ -1,93 +0,0 @@ -package org.dromara.xg.domain.bo; - -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import lombok.Data; -import lombok.EqualsAndHashCode; -import jakarta.validation.constraints.*; - -import java.time.LocalDateTime; - -/** - * 业务期间业务对象 XgBusinessPeriodBo - * - * @author ruoyi - * @date 2025-01-13 - */ -@Data -@EqualsAndHashCode(callSuper = true) -public class XgBusinessPeriodBo extends BaseEntity { - - /** - * 业务期ID - */ - @NotNull(message = "业务期ID不能为空", groups = { EditGroup.class }) - private Long id; - - /** - * 批次ID - */ - @NotNull(message = "批次ID不能为空", groups = { AddGroup.class, EditGroup.class }) - private Long batchId; - - /** - * 业务期名称 - */ - @NotBlank(message = "业务期名称不能为空", groups = { AddGroup.class, EditGroup.class }) - private String periodName; - - /** - * 业务期类型 - */ - @NotBlank(message = "业务期类型不能为空", groups = { AddGroup.class, EditGroup.class }) - private String periodType; - - /** - * 目标角色 - */ - @NotBlank(message = "目标角色不能为空", groups = { AddGroup.class, EditGroup.class }) - private String targetRole; - - /** - * 开始时间 - */ - @NotNull(message = "开始时间不能为空", groups = { AddGroup.class, EditGroup.class }) - private LocalDateTime startTime; - - /** - * 结束时间 - */ - @NotNull(message = "结束时间不能为空", groups = { AddGroup.class, EditGroup.class }) - private LocalDateTime endTime; - - /** - * 状态 - */ - private String status; - - /** - * 描述 - */ - private String description; - - /** - * 排序 - */ - private Integer sortOrder; - - /** - * 是否启用 - */ - private Boolean enabled; - - /** - * 查询关键字 - */ - private String keyword; - - /** - * 批次名称(用于查询) - */ - private String batchName; -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgClassCadreBo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgClassCadreBo.java deleted file mode 100644 index 62ab9494..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgClassCadreBo.java +++ /dev/null @@ -1,432 +0,0 @@ -package org.dromara.xg.domain.bo; - -import org.dromara.xg.domain.XgClassCadre; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import lombok.EqualsAndHashCode; -import jakarta.validation.constraints.*; -import java.util.Date; -import java.math.BigDecimal; -import com.fasterxml.jackson.annotation.JsonFormat; - -/** - * 班级干部信息业务对象 xg_class_cadre - * - * @author Cursor AI - * @date 2025-01-09 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@AutoMapper(target = XgClassCadre.class, reverseConvertGenerate = false) -public class XgClassCadreBo extends BaseEntity { - - /** - * 主键ID - */ - @NotNull(message = "主键ID不能为空", groups = {EditGroup.class}) - private Long id; - - /** - * 班级ID,关联xg_class_info.id - */ - @NotNull(message = "班级ID不能为空", groups = {AddGroup.class, EditGroup.class}) - private Long classId; - - /** - * 学生ID,关联xg_student_info.id - */ - @NotNull(message = "学生ID不能为空", groups = {AddGroup.class, EditGroup.class}) - private Long studentId; - - /** - * 学号 - */ - @NotBlank(message = "学号不能为空", groups = {AddGroup.class, EditGroup.class}) - @Size(max = 32, message = "学号长度不能超过32个字符") - private String studentNo; - - /** - * 学生姓名(冗余字段) - */ - @NotBlank(message = "学生姓名不能为空", groups = {AddGroup.class, EditGroup.class}) - @Size(max = 50, message = "学生姓名长度不能超过50个字符") - private String studentName; - - /** - * 职务编码:monitor-班长,deputy-副班长,secretary-学习委员等 - */ - @NotBlank(message = "职务编码不能为空", groups = {AddGroup.class, EditGroup.class}) - @Size(max = 20, message = "职务编码长度不能超过20个字符") - private String positionCode; - - /** - * 职务名称 - */ - @NotBlank(message = "职务名称不能为空", groups = {AddGroup.class, EditGroup.class}) - @Size(max = 50, message = "职务名称长度不能超过50个字符") - private String positionName; - - /** - * 职务级别:1-班长,2-副班长,3-委员,9-普通成员 - */ - @Min(value = 1, message = "职务级别最小值为1") - @Max(value = 9, message = "职务级别最大值为9") - private Integer positionLevel; - - /** - * 职务类别:class-班级干部,party-党团干部,other-其他 - */ - @Size(max = 20, message = "职务类别长度不能超过20个字符") - private String positionCategory; - - /** - * 任职日期 - */ - @NotNull(message = "任职日期不能为空", groups = {AddGroup.class, EditGroup.class}) - @JsonFormat(pattern = "yyyy-MM-dd") - private Date appointmentDate; - - /** - * 任期开始日期 - */ - @NotNull(message = "任期开始日期不能为空", groups = {AddGroup.class, EditGroup.class}) - @JsonFormat(pattern = "yyyy-MM-dd") - private Date termStartDate; - - /** - * 任期结束日期 - */ - @JsonFormat(pattern = "yyyy-MM-dd") - private Date termEndDate; - - /** - * 任期时长(月) - */ - @Min(value = 1, message = "任期时长最少1个月") - @Max(value = 48, message = "任期时长最多48个月") - private Integer termDuration; - - /** - * 是否现任:0-否,1-是 - */ - private Boolean isCurrent; - - /** - * 任职状态:1-在任,2-到期,3-辞职,4-免职,5-调任 - */ - @Pattern(regexp = "^[1-5]$", message = "任职状态必须是1-5之间的数字") - private String cadreStatus; - - /** - * 是否兼职:0-否,1-是 - */ - private Boolean isConcurrent; - - /** - * 兼任职务列表(逗号分隔) - */ - @Size(max = 200, message = "兼任职务列表长度不能超过200个字符") - private String concurrentPositions; - - /** - * 任命人ID,关联sys_user.id - */ - private Long appointerId; - - /** - * 任命人姓名 - */ - @Size(max = 50, message = "任命人姓名长度不能超过50个字符") - private String appointerName; - - /** - * 任命原因 - */ - @Size(max = 200, message = "任命原因长度不能超过200个字符") - private String appointmentReason; - - /** - * 任命文件号 - */ - @Size(max = 200, message = "任命文件号长度不能超过200个字符") - private String appointmentDocument; - - /** - * 离任日期 - */ - @JsonFormat(pattern = "yyyy-MM-dd") - private Date dismissalDate; - - /** - * 离任原因 - */ - @Size(max = 200, message = "离任原因长度不能超过200个字符") - private String dismissalReason; - - /** - * 免职人ID,关联sys_user.id - */ - private Long dismisserId; - - /** - * 免职人姓名 - */ - @Size(max = 50, message = "免职人姓名长度不能超过50个字符") - private String dismisserName; - - /** - * 免职文件号 - */ - @Size(max = 200, message = "免职文件号长度不能超过200个字符") - private String dismissalDocument; - - /** - * 工作表现:excellent-优秀,good-良好,average-一般,poor-较差 - */ - @Pattern(regexp = "^(excellent|good|average|poor)$", message = "工作表现必须是excellent、good、average、poor中的一个") - private String workPerformance; - - /** - * 表现评分(0-10分) - */ - @DecimalMin(value = "0.0", message = "表现评分不能小于0分") - @DecimalMax(value = "10.0", message = "表现评分不能大于10分") - private BigDecimal performanceScore; - - /** - * 工作总结 - */ - private String workSummary; - - /** - * 评价意见 - */ - private String evaluationComments; - - /** - * 权限配置(JSON格式) - */ - private String permissions; - - /** - * 系统角色列表(逗号分隔) - */ - @Size(max = 200, message = "系统角色列表长度不能超过200个字符") - private String systemRoles; - - /** - * 访问级别:1-基础,2-中级,3-高级 - */ - @Min(value = 1, message = "访问级别最小值为1") - @Max(value = 3, message = "访问级别最大值为3") - private Integer accessLevel; - - /** - * 联系电话 - */ - @Size(max = 20, message = "联系电话长度不能超过20个字符") - @Pattern(regexp = "^[0-9+-]*$", message = "联系电话格式不正确") - private String contactPhone; - - /** - * 联系邮箱 - */ - @Size(max = 100, message = "联系邮箱长度不能超过100个字符") - @Email(message = "联系邮箱格式不正确") - private String contactEmail; - - /** - * 紧急联系人 - */ - @Size(max = 50, message = "紧急联系人长度不能超过50个字符") - private String emergencyContact; - - /** - * 紧急联系电话 - */ - @Size(max = 20, message = "紧急联系电话长度不能超过20个字符") - @Pattern(regexp = "^[0-9+-]*$", message = "紧急联系电话格式不正确") - private String emergencyPhone; - - /** - * 工作计划 - */ - private String workPlan; - - /** - * 主要成就 - */ - private String achievements; - - /** - * 培训记录(JSON格式) - */ - private String trainingRecords; - - /** - * 会议出席记录(JSON格式) - */ - private String meetingAttendance; - - /** - * 排序顺序 - */ - private Integer sortOrder; - - /** - * 备注信息 - */ - @Size(max = 500, message = "备注信息长度不能超过500个字符") - private String remark; - - // 查询条件字段 - /** - * 班级编码(查询条件) - */ - private String classCode; - - /** - * 班级名称(查询条件) - */ - private String className; - - /** - * 学院名称(查询条件) - */ - private String collegeName; - - /** - * 年级(查询条件) - */ - private String grade; - - /** - * 专业名称(查询条件) - */ - private String majorName; - - /** - * 任职开始日期(查询条件) - */ - @JsonFormat(pattern = "yyyy-MM-dd") - private Date appointmentStartDate; - - /** - * 任职结束日期(查询条件) - */ - @JsonFormat(pattern = "yyyy-MM-dd") - private Date appointmentEndDate; - - /** - * 任期开始日期(查询条件) - */ - @JsonFormat(pattern = "yyyy-MM-dd") - private Date termStartDateBegin; - - /** - * 任期结束日期(查询条件) - */ - @JsonFormat(pattern = "yyyy-MM-dd") - private Date termStartDateEnd; - - // 手动添加getter方法以确保编译通过 - public Long getClassId() { - return this.classId; - } - - public Long getStudentId() { - return this.studentId; - } - - public String getStudentNo() { - return this.studentNo; - } - - public String getStudentName() { - return this.studentName; - } - - public String getPositionCode() { - return this.positionCode; - } - - public String getPositionName() { - return this.positionName; - } - - public Integer getPositionLevel() { - return this.positionLevel; - } - - public String getPositionCategory() { - return this.positionCategory; - } - - public void setPositionCategory(String positionCategory) { - this.positionCategory = positionCategory; - } - - public Boolean getIsCurrent() { - return this.isCurrent; - } - - public void setIsCurrent(Boolean isCurrent) { - this.isCurrent = isCurrent; - } - - public String getCadreStatus() { - return this.cadreStatus; - } - - public void setCadreStatus(String cadreStatus) { - this.cadreStatus = cadreStatus; - } - - public String getWorkPerformance() { - return this.workPerformance; - } - - public void setWorkPerformance(String workPerformance) { - this.workPerformance = workPerformance; - } - - public Date getAppointmentDate() { - return this.appointmentDate; - } - - public void setAppointmentDate(Date appointmentDate) { - this.appointmentDate = appointmentDate; - } - - public Date getTermStartDate() { - return this.termStartDate; - } - - public void setTermStartDate(Date termStartDate) { - this.termStartDate = termStartDate; - } - - public Date getTermEndDate() { - return this.termEndDate; - } - - public void setTermEndDate(Date termEndDate) { - this.termEndDate = termEndDate; - } - - public Integer getTermDuration() { - return this.termDuration; - } - - public void setTermDuration(Integer termDuration) { - this.termDuration = termDuration; - } - - public void setId(Long id) { - this.id = id; - } - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgClassInfoBo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgClassInfoBo.java deleted file mode 100644 index 53aaca97..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgClassInfoBo.java +++ /dev/null @@ -1,255 +0,0 @@ -package org.dromara.xg.domain.bo; - -import org.dromara.xg.domain.XgClassInfo; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import lombok.EqualsAndHashCode; -import jakarta.validation.constraints.*; -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; - -/** - * 班级信息业务对象 xg_class_info - * - * @author Cursor AI - * @date 2025-01-14 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@AutoMapper(target = XgClassInfo.class, reverseConvertGenerate = false) -public class XgClassInfoBo extends BaseEntity { - - /** - * 主键ID - */ - @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) - private Long id; - - /** - * 班级代码 - */ - @NotBlank(message = "班级代码不能为空", groups = { AddGroup.class, EditGroup.class }) - private String classCode; - - /** - * 班级名称 - */ - @NotBlank(message = "班级名称不能为空", groups = { AddGroup.class, EditGroup.class }) - private String className; - - /** - * 班级类型:regular-普通班级,honor-荣誉班级,experimental-实验班级,special-特殊班级 - */ - private String classType; - - /** - * 年级:如2023级 - */ - private String grade; - - /** - * 入学年份 - */ - private Integer enrollmentYear; - - /** - * 毕业年份 - */ - private Integer graduationYear; - - /** - * 专业代码 - */ - private String majorCode; - - /** - * 专业名称 - */ - private String majorName; - - /** - * 学院代码 - */ - private String collegeCode; - - /** - * 学院名称 - */ - private String collegeName; - - /** - * 辅导员ID - */ - private Long counselorId; - - /** - * 辅导员姓名 - */ - private String counselorName; - - /** - * 班主任ID - */ - private Long classTeacherId; - - /** - * 班主任姓名 - */ - private String classTeacherName; - - /** - * 班级状态:1-正常,2-停招,3-已毕业,4-已解散 - */ - private String classStatus; - - /** - * 当前学生数量 - */ - private Integer currentStudentCount; - - /** - * 最大学生数量 - */ - private Integer maxStudentCount; - - /** - * 男生人数 - */ - private Integer maleCount; - - /** - * 女生人数 - */ - private Integer femaleCount; - - /** - * 班级描述 - */ - private String classDescription; - - /** - * 班级备注 - */ - private String classNotes; - - /** - * 扩展字段1 - */ - private String extField1; - - /** - * 扩展字段2 - */ - private String extField2; - - /** - * 扩展字段3 - */ - private String extField3; - - /** - * 备注 - */ - private String remark; - - /** - * 获取班级代码 - */ - public String getClassCode() { - return this.classCode; - } - - /** - * 获取班级名称 - */ - public String getClassName() { - return this.className; - } - - /** - * 获取入学年份 - */ - public Integer getEnrollmentYear() { - return this.enrollmentYear; - } - - /** - * 获取专业代码 - */ - public String getMajorCode() { - return this.majorCode; - } - - /** - * 获取专业名称 - */ - public String getMajorName() { - return this.majorName; - } - - /** - * 获取学院代码 - */ - public String getCollegeCode() { - return this.collegeCode; - } - - /** - * 获取学院名称 - */ - public String getCollegeName() { - return this.collegeName; - } - - /** - * 获取辅导员ID - */ - public Long getCounselorId() { - return this.counselorId; - } - - /** - * 获取辅导员姓名 - */ - public String getCounselorName() { - return this.counselorName; - } - - /** - * 获取班主任ID - */ - public Long getClassTeacherId() { - return this.classTeacherId; - } - - /** - * 获取班主任姓名 - */ - public String getClassTeacherName() { - return this.classTeacherName; - } - - /** - * 获取班级状态 - */ - public String getClassStatus() { - return this.classStatus; - } - - /** - * 设置主键ID - */ - public void setId(Long id) { - this.id = id; - } - - /** - * 获取主键ID - */ - public Long getId() { - return this.id; - } -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgCollectionBatchBo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgCollectionBatchBo.java deleted file mode 100644 index f941e365..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgCollectionBatchBo.java +++ /dev/null @@ -1,298 +0,0 @@ -package org.dromara.xg.domain.bo; - -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import lombok.Data; -import lombok.EqualsAndHashCode; -import jakarta.validation.constraints.*; -import java.util.Date; -import java.util.List; - -/** - * 信息采集批次业务对象 XgCollectionBatchBo - * - * @author Cursor AI - * @date 2025-01-13 - */ -@Data -@EqualsAndHashCode(callSuper = true) -public class XgCollectionBatchBo extends BaseEntity { - - /** - * 批次ID - */ - @NotNull(message = "批次ID不能为空", groups = { EditGroup.class }) - private Long id; - - /** - * 批次ID(业务主键,与id保持一致) - */ - private Long batchId; - - /** - * 批次编码 - */ - @NotBlank(message = "批次编码不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(max = 50, message = "批次编码长度不能超过50个字符") - private String batchCode; - - /** - * 批次名称 - */ - @NotBlank(message = "批次名称不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(max = 200, message = "批次名称长度不能超过200个字符") - private String batchName; - - /** - * 批次类型 - */ - @NotBlank(message = "批次类型不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(max = 50, message = "批次类型长度不能超过50个字符") - private String batchType; - - /** - * 学年 - */ - @Size(max = 20, message = "学年长度不能超过20个字符") - private String academicYear; - - /** - * 学期 - */ - @Size(max = 20, message = "学期长度不能超过20个字符") - private String semester; - - /** - * 批次状态 - */ - @NotBlank(message = "批次状态不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(max = 20, message = "批次状态长度不能超过20个字符") - private String batchStatus; - - /** - * 发布状态 - */ - @Size(max = 20, message = "发布状态长度不能超过20个字符") - private String publishStatus; - - /** - * 批次描述 - */ - @Size(max = 500, message = "批次描述长度不能超过500个字符") - private String description; - - /** - * 关联学年ID - */ - @NotNull(message = "关联学年ID不能为空", groups = { AddGroup.class, EditGroup.class }) - private Long academicYearId; - - /** - * 关联学期ID - */ - private Long semesterId; - - /** - * 开始时间 - */ - @NotNull(message = "开始时间不能为空", groups = { AddGroup.class, EditGroup.class }) - private Date startTime; - - /** - * 结束时间 - */ - @NotNull(message = "结束时间不能为空", groups = { AddGroup.class, EditGroup.class }) - private Date endTime; - - /** - * 目标范围 - */ - @NotBlank(message = "目标范围不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(max = 50, message = "目标范围长度不能超过50个字符") - private String targetScope; - - /** - * 目标届别 - */ - @Size(max = 50, message = "目标届别长度不能超过50个字符") - private String targetGrade; - - /** - * 目标学院ID列表(JSON格式) - */ - private String targetCollegeIds; - - /** - * 目标专业ID列表(JSON格式) - */ - private String targetMajorIds; - - /** - * 目标班级ID列表(JSON格式) - */ - private String targetClassIds; - - /** - * 目标学院ID列表(用于前端) - */ - private List targetCollegeIdList; - - /** - * 目标专业ID列表(用于前端) - */ - private List targetMajorIdList; - - /** - * 目标班级ID列表(用于前端) - */ - private List targetClassIdList; - - /** - * 是否发布 - */ - private Boolean isPublished; - - /** - * 发布时间 - */ - private Date publishTime; - - /** - * 总数 - */ - private Integer totalCount; - - /** - * 完成数 - */ - private Integer completedCount; - - /** - * 完成率 - */ - private Double completionRate; - - /** - * 开始前提醒时间(小时) - */ - @Min(value = 1, message = "开始前提醒时间必须大于0") - @Max(value = 168, message = "开始前提醒时间不能超过168小时") - private Integer remindBeforeStart; - - /** - * 结束前提醒时间(小时) - */ - @Min(value = 1, message = "结束前提醒时间必须大于0") - @Max(value = 168, message = "结束前提醒时间不能超过168小时") - private Integer remindBeforeEnd; - - /** - * 是否自动关闭 - */ - private Boolean autoClose; - - /** - * 是否已发送通知 - */ - private Boolean notificationSent; - - /** - * 创建模块 - */ - private String createdByModule; - - /** - * 备注 - */ - @Size(max = 500, message = "备注长度不能超过500个字符") - private String remark; - - // ==================== 兼容性方法 ==================== - - /** - * 获取批次ID(如果batchId为null,返回主键id) - */ - public Long getBatchId() { - return this.batchId != null ? this.batchId : this.id; - } - - public void setBatchId(Long batchId) { - this.batchId = batchId; - if (this.id == null) { - this.id = batchId; - } - } - - // ==================== 手动添加的 getter 方法 ==================== - - /** - * 获取批次编码 - */ - public String getBatchCode() { - return this.batchCode; - } - - /** - * 获取批次名称 - */ - public String getBatchName() { - return this.batchName; - } - - /** - * 获取批次类型 - */ - public String getBatchType() { - return this.batchType; - } - - /** - * 获取学年 - */ - public String getAcademicYear() { - return this.academicYear; - } - - /** - * 获取学期 - */ - public String getSemester() { - return this.semester; - } - - /** - * 获取批次状态 - */ - public String getBatchStatus() { - return this.batchStatus; - } - - /** - * 获取发布状态 - */ - public String getPublishStatus() { - return this.publishStatus; - } - - /** - * 获取开始时间 - */ - public Date getStartTime() { - return this.startTime; - } - - /** - * 获取结束时间 - */ - public Date getEndTime() { - return this.endTime; - } - - /** - * 获取批次描述 - */ - public String getDescription() { - return this.description; - } -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgDictDataBo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgDictDataBo.java deleted file mode 100644 index 311ffc28..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgDictDataBo.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.dromara.xg.domain.bo; - -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import lombok.Data; -import lombok.EqualsAndHashCode; -import jakarta.validation.constraints.*; - -/** - * 数据字典业务对象 xg_dict_data - * - * @author wuzilong - * @date 2025-01-08 - */ -@Data -@EqualsAndHashCode(callSuper = true) -public class XgDictDataBo extends BaseEntity { - - /** - * 字典数据ID - */ - @NotNull(message = "字典数据ID不能为空", groups = { EditGroup.class }) - private Long dictDataId; - - /** - * 字典类型 - */ - @NotBlank(message = "字典类型不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(max = 100, message = "字典类型长度不能超过100个字符", groups = { AddGroup.class, EditGroup.class }) - private String dictType; - - /** - * 字典标签 - */ - @NotBlank(message = "字典标签不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(max = 100, message = "字典标签长度不能超过100个字符", groups = { AddGroup.class, EditGroup.class }) - private String dictLabel; - - /** - * 字典键值 - */ - @NotBlank(message = "字典键值不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(max = 100, message = "字典键值长度不能超过100个字符", groups = { AddGroup.class, EditGroup.class }) - private String dictValue; - - /** - * 字典排序 - */ - @NotNull(message = "字典排序不能为空", groups = { AddGroup.class, EditGroup.class }) - @Min(value = 0, message = "字典排序不能小于0", groups = { AddGroup.class, EditGroup.class }) - private Integer dictSort; - - /** - * 样式属性 - */ - @Size(max = 100, message = "样式属性长度不能超过100个字符", groups = { AddGroup.class, EditGroup.class }) - private String cssClass; - - /** - * 表格字典样式 - */ - @Size(max = 100, message = "表格字典样式长度不能超过100个字符", groups = { AddGroup.class, EditGroup.class }) - private String listClass; - - /** - * 是否默认 - */ - @NotNull(message = "是否默认不能为空", groups = { AddGroup.class, EditGroup.class }) - private Boolean isDefault; - - /** - * 状态 - */ - @NotBlank(message = "状态不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(max = 10, message = "状态长度不能超过10个字符", groups = { AddGroup.class, EditGroup.class }) - private String status; - - /** - * 备注 - */ - @Size(max = 500, message = "备注长度不能超过500个字符", groups = { AddGroup.class, EditGroup.class }) - private String remark; - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgNoticeBo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgNoticeBo.java deleted file mode 100644 index a8a2f61a..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgNoticeBo.java +++ /dev/null @@ -1,115 +0,0 @@ -package org.dromara.xg.domain.bo; - -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import lombok.Data; -import lombok.EqualsAndHashCode; -import jakarta.validation.constraints.*; -import java.time.LocalDateTime; - -/** - * 通知公告业务对象 xg_notice - * - * @author wuzilong - * @date 2025-01-08 - */ -@Data -@EqualsAndHashCode(callSuper = true) -public class XgNoticeBo extends BaseEntity { - - /** - * 通知ID - */ - @NotNull(message = "通知ID不能为空", groups = { EditGroup.class }) - private Long noticeId; - - /** - * 通知标题 - */ - @NotBlank(message = "通知标题不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(max = 200, message = "通知标题长度不能超过200个字符", groups = { AddGroup.class, EditGroup.class }) - private String noticeTitle; - - /** - * 通知类型 - */ - @NotBlank(message = "通知类型不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(max = 20, message = "通知类型长度不能超过20个字符", groups = { AddGroup.class, EditGroup.class }) - private String noticeType; - - /** - * 通知内容 - */ - @NotBlank(message = "通知内容不能为空", groups = { AddGroup.class, EditGroup.class }) - private String noticeContent; - - /** - * 发布范围 - */ - @Size(max = 500, message = "发布范围长度不能超过500个字符", groups = { AddGroup.class, EditGroup.class }) - private String publishScope; - - /** - * 优先级 - */ - @NotNull(message = "优先级不能为空", groups = { AddGroup.class, EditGroup.class }) - @Min(value = 1, message = "优先级不能小于1", groups = { AddGroup.class, EditGroup.class }) - @Max(value = 5, message = "优先级不能大于5", groups = { AddGroup.class, EditGroup.class }) - private Integer priority; - - /** - * 是否置顶 - */ - @NotNull(message = "是否置顶不能为空", groups = { AddGroup.class, EditGroup.class }) - private Boolean isTop; - - /** - * 发布时间 - */ - private LocalDateTime publishTime; - - /** - * 过期时间 - */ - private LocalDateTime expireTime; - - /** - * 附件路径 - */ - @Size(max = 500, message = "附件路径长度不能超过500个字符", groups = { AddGroup.class, EditGroup.class }) - private String attachmentPath; - - /** - * 阅读次数 - */ - @Min(value = 0, message = "阅读次数不能小于0", groups = { AddGroup.class, EditGroup.class }) - private Integer readCount; - - /** - * 发布状态 - */ - @NotBlank(message = "发布状态不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(max = 20, message = "发布状态长度不能超过20个字符", groups = { AddGroup.class, EditGroup.class }) - private String publishStatus; - - /** - * 排序号 - */ - @Min(value = 0, message = "排序号不能小于0", groups = { AddGroup.class, EditGroup.class }) - private Integer sortOrder; - - /** - * 状态 - */ - @NotBlank(message = "状态不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(max = 10, message = "状态长度不能超过10个字符", groups = { AddGroup.class, EditGroup.class }) - private String status; - - /** - * 备注 - */ - @Size(max = 500, message = "备注长度不能超过500个字符", groups = { AddGroup.class, EditGroup.class }) - private String remark; - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgNoticeReadBo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgNoticeReadBo.java deleted file mode 100644 index b4cc48d8..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgNoticeReadBo.java +++ /dev/null @@ -1,206 +0,0 @@ -package org.dromara.xg.domain.bo; - -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import lombok.Data; -import lombok.EqualsAndHashCode; -import jakarta.validation.constraints.*; -import java.time.LocalDateTime; - -/** - * 通知阅读记录业务对象 xg_notice_read - * - * @author wuzilong - * @date 2025-01-08 - */ -@Data -@EqualsAndHashCode(callSuper = true) -public class XgNoticeReadBo extends BaseEntity { - - /** - * 阅读记录ID - */ - @NotNull(message = "阅读记录ID不能为空", groups = { EditGroup.class }) - private Long readId; - - /** - * 通知ID - */ - @NotNull(message = "通知ID不能为空", groups = { AddGroup.class, EditGroup.class }) - private Long noticeId; - - /** - * 用户ID - */ - @NotNull(message = "用户ID不能为空", groups = { AddGroup.class, EditGroup.class }) - private Long userId; - - /** - * 用户类型 - */ - @NotBlank(message = "用户类型不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(max = 20, message = "用户类型长度不能超过20个字符", groups = { AddGroup.class, EditGroup.class }) - private String userType; - - /** - * 阅读时间 - */ - @NotNull(message = "阅读时间不能为空", groups = { AddGroup.class, EditGroup.class }) - private LocalDateTime readTime; - - /** - * 阅读时长(秒) - */ - @Min(value = 0, message = "阅读时长不能小于0", groups = { AddGroup.class, EditGroup.class }) - private Integer readDuration; - - /** - * 阅读状态 - */ - @NotBlank(message = "阅读状态不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(max = 20, message = "阅读状态长度不能超过20个字符", groups = { AddGroup.class, EditGroup.class }) - private String readStatus; - - /** - * 阅读设备 - */ - @Size(max = 50, message = "阅读设备长度不能超过50个字符", groups = { AddGroup.class, EditGroup.class }) - private String readDevice; - - /** - * IP地址 - */ - @Size(max = 50, message = "IP地址长度不能超过50个字符", groups = { AddGroup.class, EditGroup.class }) - private String ipAddress; - - /** - * 阅读位置 - */ - @Size(max = 200, message = "阅读位置长度不能超过200个字符", groups = { AddGroup.class, EditGroup.class }) - private String readLocation; - - /** - * 是否完整阅读 - */ - @NotNull(message = "是否完整阅读不能为空", groups = { AddGroup.class, EditGroup.class }) - private Boolean isFullRead; - - /** - * 阅读进度 - */ - @Min(value = 0, message = "阅读进度不能小于0", groups = { AddGroup.class, EditGroup.class }) - @Max(value = 100, message = "阅读进度不能大于100", groups = { AddGroup.class, EditGroup.class }) - private Integer readProgress; - - /** - * 备注 - */ - @Size(max = 500, message = "备注长度不能超过500个字符", groups = { AddGroup.class, EditGroup.class }) - private String remark; - - // 手动添加getter/setter方法以解决Lombok问题 - public Long getNoticeId() { - return noticeId; - } - - public void setNoticeId(Long noticeId) { - this.noticeId = noticeId; - } - - public Long getUserId() { - return userId; - } - - public void setUserId(Long userId) { - this.userId = userId; - } - - public LocalDateTime getReadTime() { - return readTime; - } - - public void setReadTime(LocalDateTime readTime) { - this.readTime = readTime; - } - - public Long getReadId() { - return readId; - } - - public void setReadId(Long readId) { - this.readId = readId; - } - - public String getUserType() { - return userType; - } - - public void setUserType(String userType) { - this.userType = userType; - } - - public Integer getReadDuration() { - return readDuration; - } - - public void setReadDuration(Integer readDuration) { - this.readDuration = readDuration; - } - - public String getReadStatus() { - return readStatus; - } - - public void setReadStatus(String readStatus) { - this.readStatus = readStatus; - } - - public String getReadDevice() { - return readDevice; - } - - public void setReadDevice(String readDevice) { - this.readDevice = readDevice; - } - - public String getIpAddress() { - return ipAddress; - } - - public void setIpAddress(String ipAddress) { - this.ipAddress = ipAddress; - } - - public String getReadLocation() { - return readLocation; - } - - public void setReadLocation(String readLocation) { - this.readLocation = readLocation; - } - - public Boolean getIsFullRead() { - return isFullRead; - } - - public void setIsFullRead(Boolean isFullRead) { - this.isFullRead = isFullRead; - } - - public Integer getReadProgress() { - return readProgress; - } - - public void setReadProgress(Integer readProgress) { - this.readProgress = readProgress; - } - - public String getRemark() { - return remark; - } - - public void setRemark(String remark) { - this.remark = remark; - } -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgSemesterBo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgSemesterBo.java deleted file mode 100644 index b9cabdfa..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgSemesterBo.java +++ /dev/null @@ -1,94 +0,0 @@ -package org.dromara.xg.domain.bo; - -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import lombok.EqualsAndHashCode; -import jakarta.validation.constraints.*; -import java.time.LocalDate; -import org.dromara.xg.domain.XgSemester; - -/** - * 学期管理业务对象 xg_semester - * - * @author wuzilong - * @date 2025-01-08 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@AutoMapper(target = XgSemester.class, reverseConvertGenerate = false) -public class XgSemesterBo extends BaseEntity { - - /** - * 学期ID - */ - @NotNull(message = "学期ID不能为空", groups = { EditGroup.class }) - private Long semesterId; - - /** - * 学年ID - */ - @NotNull(message = "学年ID不能为空", groups = { AddGroup.class, EditGroup.class }) - private Long academicYearId; - - /** - * 学期名称 - */ - @NotBlank(message = "学期名称不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(max = 50, message = "学期名称长度不能超过50个字符", groups = { AddGroup.class, EditGroup.class }) - private String semesterName; - - /** - * 学期代码 - */ - @NotBlank(message = "学期代码不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(max = 20, message = "学期代码长度不能超过20个字符", groups = { AddGroup.class, EditGroup.class }) - private String semesterCode; - - /** - * 学期类型 - */ - @NotBlank(message = "学期类型不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(max = 20, message = "学期类型长度不能超过20个字符", groups = { AddGroup.class, EditGroup.class }) - private String semesterType; - - /** - * 开始日期 - */ - @NotNull(message = "开始日期不能为空", groups = { AddGroup.class, EditGroup.class }) - private LocalDate startDate; - - /** - * 结束日期 - */ - @NotNull(message = "结束日期不能为空", groups = { AddGroup.class, EditGroup.class }) - private LocalDate endDate; - - /** - * 是否当前学期 - */ - @NotNull(message = "是否当前学期不能为空", groups = { AddGroup.class, EditGroup.class }) - private Boolean isCurrent; - - /** - * 排序号 - */ - @Min(value = 0, message = "排序号不能小于0", groups = { AddGroup.class, EditGroup.class }) - private Integer sortOrder; - - /** - * 状态 - */ - @NotBlank(message = "状态不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(max = 10, message = "状态长度不能超过10个字符", groups = { AddGroup.class, EditGroup.class }) - private String status; - - /** - * 备注 - */ - @Size(max = 500, message = "备注长度不能超过500个字符", groups = { AddGroup.class, EditGroup.class }) - private String remark; - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgStudentInfoApprovalBo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgStudentInfoApprovalBo.java deleted file mode 100644 index e1cadc07..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgStudentInfoApprovalBo.java +++ /dev/null @@ -1,198 +0,0 @@ -package org.dromara.xg.domain.bo; - -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import lombok.Data; -import lombok.EqualsAndHashCode; -import jakarta.validation.constraints.*; - -import java.time.LocalDateTime; - -/** - * 学生信息审核业务对象 XgStudentInfoApprovalBo - * - * @author ruoyi - * @date 2025-01-13 - */ -@Data -@EqualsAndHashCode(callSuper = true) -public class XgStudentInfoApprovalBo extends BaseEntity { - - /** - * 批次ID - */ - @NotNull(message = "批次ID不能为空", groups = { AddGroup.class, EditGroup.class }) - private Long batchId; - - /** - * 学生ID - */ - private Long studentId; - - /** - * 学生姓名 - */ - private String studentName; - - /** - * 学号 - */ - private String studentNo; - - /** - * 班级代码 - */ - private String classCode; - - /** - * 班级名称 - */ - private String className; - - /** - * 学院代码 - */ - private String collegeCode; - - /** - * 学院名称 - */ - private String collegeName; - - /** - * 提交状态 - */ - private String submissionStatus; - - /** - * 审核状态 - */ - private String approvalStatus; - - /** - * 提交时间开始 - */ - private LocalDateTime submissionTimeStart; - - /** - * 提交时间结束 - */ - private LocalDateTime submissionTimeEnd; - - /** - * 审核时间开始 - */ - private LocalDateTime approvalTimeStart; - - /** - * 审核时间结束 - */ - private LocalDateTime approvalTimeEnd; - - /** - * 审核人ID - */ - private Long approvalBy; - - /** - * 审核人姓名 - */ - private String approvalByName; - - /** - * 审核意见 - */ - private String approvalComments; - - /** - * 查询关键字(学生姓名或学号) - */ - private String keyword; - - /** - * 是否导出 - */ - private Boolean export; - - /** - * 主键ID - */ - private Long id; - - /** - * 审批时间 - */ - private LocalDateTime approvalTime; - - /** - * 提交时间 - */ - private LocalDateTime submissionTime; - - // 手动添加getter方法以确保编译通过 - public Long getBatchId() { - return this.batchId; - } - - public void setBatchId(Long batchId) { - this.batchId = batchId; - } - - // 添加缺失的getter/setter方法 - public Long getStudentId() { - return studentId; - } - - public void setStudentId(Long studentId) { - this.studentId = studentId; - } - - public String getApprovalStatus() { - return approvalStatus; - } - - public void setApprovalStatus(String approvalStatus) { - this.approvalStatus = approvalStatus; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public Long getBatchId() { - return batchId; - } - - public void setBatchId(Long batchId) { - this.batchId = batchId; - } - - public String getApprovalComments() { - return approvalComments; - } - - public void setApprovalComments(String approvalComments) { - this.approvalComments = approvalComments; - } - - public LocalDateTime getApprovalTime() { - return approvalTime; - } - - public void setApprovalTime(LocalDateTime approvalTime) { - this.approvalTime = approvalTime; - } - - public LocalDateTime getSubmissionTime() { - return submissionTime; - } - - public void setSubmissionTime(LocalDateTime submissionTime) { - this.submissionTime = submissionTime; - } -} \ No newline at end of file diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgStudentInfoBo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgStudentInfoBo.java deleted file mode 100644 index 70a7bbf9..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgStudentInfoBo.java +++ /dev/null @@ -1,507 +0,0 @@ -package org.dromara.xg.domain.bo; - -import org.dromara.xg.domain.XgStudentInfo; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import lombok.EqualsAndHashCode; -import jakarta.validation.constraints.*; -import java.util.Date; -import java.math.BigDecimal; -import java.util.List; -import com.fasterxml.jackson.annotation.JsonFormat; - -/** - * 学生信息业务对象 xg_student_info - * - * @author Cursor AI - * @date 2025-01-12 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@AutoMapper(target = XgStudentInfo.class, reverseConvertGenerate = false) -public class XgStudentInfoBo extends BaseEntity { - - /** - * 主键ID - */ - @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) - private Long id; - - /** - * 学号 - */ - @NotBlank(message = "学号不能为空", groups = { AddGroup.class, EditGroup.class }) - private String studentNo; - - /** - * 身份证号 - */ - @NotBlank(message = "身份证号不能为空", groups = { AddGroup.class, EditGroup.class }) - private String idCard; - - /** - * 姓名 - */ - @NotBlank(message = "姓名不能为空", groups = { AddGroup.class, EditGroup.class }) - private String name; - - /** - * 姓名拼音 - */ - private String namePinyin; - - /** - * 性别 - */ - @NotBlank(message = "性别不能为空", groups = { AddGroup.class, EditGroup.class }) - private String gender; - - /** - * 出生日期 - */ - @JsonFormat(pattern = "yyyy-MM-dd") - private Date birthDate; - - /** - * 民族 - */ - private String nation; - - /** - * 政治面貌 - */ - private String politicalStatus; - - /** - * 学籍状态 - */ - private String studentStatus; - - /** - * 入学年份 - */ - private Integer enrollmentYear; - - /** - * 入学日期 - */ - @JsonFormat(pattern = "yyyy-MM-dd") - private Date enrollmentDate; - - /** - * 学制(年) - */ - private Integer schoolSystem; - - /** - * 学历层次 - */ - private String educationLevel; - - /** - * 培养方式 - */ - private String trainingType; - - /** - * 专业代码 - */ - private String majorCode; - - /** - * 专业名称 - */ - private String majorName; - - /** - * 班级代码 - */ - private String classCode; - - /** - * 班级名称 - */ - private String className; - - /** - * 学院代码 - */ - private String collegeCode; - - /** - * 学院名称 - */ - private String collegeName; - - /** - * 手机号码 - */ - private String phone; - - /** - * 电子邮箱 - */ - private String email; - - /** - * QQ号码 - */ - private String qq; - - /** - * 微信号 - */ - private String wechat; - - /** - * 现住址 - */ - private String currentAddress; - - /** - * 家庭地址 - */ - private String homeAddress; - - /** - * 户籍所在地 - */ - private String domicilePlace; - - /** - * 邮政编码 - */ - private String postalCode; - - /** - * 紧急联系人姓名 - */ - private String emergencyContactName; - - /** - * 紧急联系人关系 - */ - private String emergencyContactRelation; - - /** - * 紧急联系人电话 - */ - private String emergencyContactPhone; - - /** - * 父亲姓名 - */ - private String fatherName; - - /** - * 父亲联系电话 - */ - private String fatherPhone; - - /** - * 父亲工作单位 - */ - private String fatherWorkUnit; - - /** - * 母亲姓名 - */ - private String motherName; - - /** - * 母亲联系电话 - */ - private String motherPhone; - - /** - * 母亲工作单位 - */ - private String motherWorkUnit; - - /** - * 身高(cm) - */ - private Integer height; - - /** - * 体重(kg) - */ - private BigDecimal weight; - - /** - * 血型 - */ - private String bloodType; - - /** - * 特殊体质或疾病 - */ - private String specialCondition; - - /** - * 宗教信仰 - */ - private String religion; - - /** - * 特长爱好 - */ - private String hobbies; - - /** - * 是否贫困生 - */ - private Integer isPoorStudent; - - /** - * 贫困等级 - */ - private String povertyLevel; - - /** - * 是否享受助学金 - */ - private Integer hasGrant; - - /** - * 助学金金额 - */ - private BigDecimal grantAmount; - - /** - * 是否办理助学贷款 - */ - private Integer hasLoan; - - /** - * 助学贷款金额 - */ - private BigDecimal loanAmount; - - /** - * 银行卡号 - */ - private String bankCardNo; - - /** - * 开户银行 - */ - private String bankName; - - /** - * 开户支行 - */ - private String bankBranch; - - /** - * 信息状态 - */ - private String infoStatus; - - /** - * 数据来源 - */ - private String dataSource; - - /** - * 最后修改批次ID - */ - private Long lastBatchId; - - /** - * 最后审核时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date lastAuditTime; - - /** - * 备注 - */ - private String remark; - - /** - * 批次ID - */ - private Long batchId; - - /** - * 学生状态范围查询 - */ - private List studentStatusIn; - - /** - * 班级代码范围查询 - */ - private List classCodeIn; - - /** - * 学院代码范围查询 - */ - private List collegeCodeIn; - - /** - * 入学年份范围查询 - */ - private List enrollmentYearIn; - - /** - * 搜索关键字 - */ - private String keyword; - - /** - * 学号 - */ - private String studentNo; - - /** - * 身份证号 - */ - private String idCard; - - /** - * 性别 - */ - private String gender; - - /** - * 学生状态 - */ - private String studentStatus; - - /** - * 专业名称 - */ - private String majorName; - - /** - * 班级名称 - */ - private String className; - - /** - * 学院名称 - */ - private String collegeName; - - /** - * 联系电话 - */ - private String phone; - - // 手动添加getter和setter方法以确保编译通过 - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getClassCode() { - return classCode; - } - - public void setClassCode(String classCode) { - this.classCode = classCode; - } - - public String getCollegeCode() { - return collegeCode; - } - - public void setCollegeCode(String collegeCode) { - this.collegeCode = collegeCode; - } - - public Long getBatchId() { - return batchId; - } - - public void setBatchId(Long batchId) { - this.batchId = batchId; - } - - public String getKeyword() { - return keyword; - } - - public void setKeyword(String keyword) { - this.keyword = keyword; - } - - public String getStudentNo() { - return studentNo; - } - - public void setStudentNo(String studentNo) { - this.studentNo = studentNo; - } - - public String getIdCard() { - return idCard; - } - - public void setIdCard(String idCard) { - this.idCard = idCard; - } - - public String getGender() { - return gender; - } - - public void setGender(String gender) { - this.gender = gender; - } - - public String getStudentStatus() { - return studentStatus; - } - - public void setStudentStatus(String studentStatus) { - this.studentStatus = studentStatus; - } - - public String getMajorName() { - return majorName; - } - - public void setMajorName(String majorName) { - this.majorName = majorName; - } - - public String getClassName() { - return className; - } - - public void setClassName(String className) { - this.className = className; - } - - public String getCollegeName() { - return collegeName; - } - - public void setCollegeName(String collegeName) { - this.collegeName = collegeName; - } - - public String getPhone() { - return phone; - } - - public void setPhone(String phone) { - this.phone = phone; - } -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgStudentInfoHistoryBo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgStudentInfoHistoryBo.java deleted file mode 100644 index d901135d..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgStudentInfoHistoryBo.java +++ /dev/null @@ -1,134 +0,0 @@ -package org.dromara.xg.domain.bo; - -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import lombok.Data; -import lombok.EqualsAndHashCode; -import jakarta.validation.constraints.*; -import java.time.LocalDateTime; - -/** - * 学生信息历史业务对象 xg_student_info_history - * - * @author wuzilong - * @date 2025-01-08 - */ -@Data -@EqualsAndHashCode(callSuper = true) -public class XgStudentInfoHistoryBo extends BaseEntity { - - /** - * 历史记录ID - */ - @NotNull(message = "历史记录ID不能为空", groups = { EditGroup.class }) - private Long historyId; - - /** - * 学生ID - */ - @NotNull(message = "学生ID不能为空", groups = { AddGroup.class, EditGroup.class }) - private Long studentId; - - /** - * 学号 - */ - @NotBlank(message = "学号不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(max = 50, message = "学号长度不能超过50个字符", groups = { AddGroup.class, EditGroup.class }) - private String studentNo; - - /** - * 变更类型 - */ - @NotBlank(message = "变更类型不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(max = 50, message = "变更类型长度不能超过50个字符", groups = { AddGroup.class, EditGroup.class }) - private String changeType; - - /** - * 变更字段 - */ - @NotBlank(message = "变更字段不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(max = 100, message = "变更字段长度不能超过100个字符", groups = { AddGroup.class, EditGroup.class }) - private String changeField; - - /** - * 变更前值 - */ - private String oldValue; - - /** - * 变更后值 - */ - private String newValue; - - /** - * 变更时间 - */ - @NotNull(message = "变更时间不能为空", groups = { AddGroup.class, EditGroup.class }) - private LocalDateTime changeTime; - - /** - * 变更原因 - */ - @Size(max = 500, message = "变更原因长度不能超过500个字符", groups = { AddGroup.class, EditGroup.class }) - private String changeReason; - - /** - * 操作人姓名 - */ - @Size(max = 50, message = "操作人姓名长度不能超过50个字符", groups = { AddGroup.class, EditGroup.class }) - private String operatorName; - - /** - * 批次ID - */ - private Long batchId; - - /** - * 批次编号 - */ - @Size(max = 50, message = "批次编号长度不能超过50个字符", groups = { AddGroup.class, EditGroup.class }) - private String batchCode; - - /** - * 审核状态 - */ - @Size(max = 20, message = "审核状态长度不能超过20个字符", groups = { AddGroup.class, EditGroup.class }) - private String auditStatus; - - /** - * 审核时间 - */ - private LocalDateTime auditTime; - - /** - * 审核人姓名 - */ - @Size(max = 50, message = "审核人姓名长度不能超过50个字符", groups = { AddGroup.class, EditGroup.class }) - private String auditorName; - - /** - * 审核意见 - */ - @Size(max = 500, message = "审核意见长度不能超过500个字符", groups = { AddGroup.class, EditGroup.class }) - private String auditComment; - - /** - * 数据来源 - */ - @Size(max = 50, message = "数据来源长度不能超过50个字符", groups = { AddGroup.class, EditGroup.class }) - private String dataSource; - - /** - * 是否生效 - */ - @NotNull(message = "是否生效不能为空", groups = { AddGroup.class, EditGroup.class }) - private Boolean isEffective; - - /** - * 备注 - */ - @Size(max = 500, message = "备注长度不能超过500个字符", groups = { AddGroup.class, EditGroup.class }) - private String remark; - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgSystemConfigBo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgSystemConfigBo.java deleted file mode 100644 index db8399bc..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgSystemConfigBo.java +++ /dev/null @@ -1,107 +0,0 @@ -package org.dromara.xg.domain.bo; - -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import lombok.Data; -import lombok.EqualsAndHashCode; -import jakarta.validation.constraints.*; - -/** - * 系统配置业务对象 xg_system_config - * - * @author wuzilong - * @date 2025-01-08 - */ -@Data -@EqualsAndHashCode(callSuper = true) -public class XgSystemConfigBo extends BaseEntity { - - /** - * 配置ID - */ - @NotNull(message = "配置ID不能为空", groups = { EditGroup.class }) - private Long configId; - - /** - * 配置键 - */ - @NotBlank(message = "配置键不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(max = 100, message = "配置键长度不能超过100个字符", groups = { AddGroup.class, EditGroup.class }) - private String configKey; - - /** - * 配置名称 - */ - @NotBlank(message = "配置名称不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(max = 100, message = "配置名称长度不能超过100个字符", groups = { AddGroup.class, EditGroup.class }) - private String configName; - - /** - * 配置值 - */ - @NotBlank(message = "配置值不能为空", groups = { AddGroup.class, EditGroup.class }) - private String configValue; - - /** - * 配置类型 - */ - @NotBlank(message = "配置类型不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(max = 50, message = "配置类型长度不能超过50个字符", groups = { AddGroup.class, EditGroup.class }) - private String configType; - - /** - * 配置分组 - */ - @Size(max = 50, message = "配置分组长度不能超过50个字符", groups = { AddGroup.class, EditGroup.class }) - private String configGroup; - - /** - * 配置描述 - */ - @Size(max = 500, message = "配置描述长度不能超过500个字符", groups = { AddGroup.class, EditGroup.class }) - private String configDescription; - - /** - * 默认值 - */ - private String defaultValue; - - /** - * 是否系统内置 - */ - @NotNull(message = "是否系统内置不能为空", groups = { AddGroup.class, EditGroup.class }) - private Boolean isSystem; - - /** - * 是否可编辑 - */ - @NotNull(message = "是否可编辑不能为空", groups = { AddGroup.class, EditGroup.class }) - private Boolean isEditable; - - /** - * 是否可删除 - */ - @NotNull(message = "是否可删除不能为空", groups = { AddGroup.class, EditGroup.class }) - private Boolean isDeletable; - - /** - * 排序号 - */ - @Min(value = 0, message = "排序号不能小于0", groups = { AddGroup.class, EditGroup.class }) - private Integer sortOrder; - - /** - * 状态 - */ - @NotBlank(message = "状态不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(max = 10, message = "状态长度不能超过10个字符", groups = { AddGroup.class, EditGroup.class }) - private String status; - - /** - * 备注 - */ - @Size(max = 500, message = "备注长度不能超过500个字符", groups = { AddGroup.class, EditGroup.class }) - private String remark; - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgAcademicYearVo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgAcademicYearVo.java deleted file mode 100644 index cc20a63c..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgAcademicYearVo.java +++ /dev/null @@ -1,106 +0,0 @@ -package org.dromara.xg.domain.vo; - -import org.dromara.xg.domain.XgAcademicYear; -import cn.idev.excel.annotation.ExcelIgnoreUnannotated; -import cn.idev.excel.annotation.ExcelProperty; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import lombok.EqualsAndHashCode; -import com.fasterxml.jackson.annotation.JsonFormat; - -import java.io.Serial; -import java.time.LocalDate; - -/** - * 学年管理视图对象 xg_academic_year - * - * @author ruoyi - * @date 2025-01-12 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@ExcelIgnoreUnannotated -@AutoMapper(target = XgAcademicYear.class) -public class XgAcademicYearVo extends XgAcademicYear { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键ID - */ - @ExcelProperty(value = "主键ID") - private Long id; - - /** - * 学年编码,如2024-2025 - */ - @ExcelProperty(value = "学年编码") - private String yearCode; - - /** - * 学年名称,如2024-2025学年 - */ - @ExcelProperty(value = "学年名称") - private String yearName; - - /** - * 学年开始日期 - */ - @ExcelProperty(value = "学年开始日期") - @JsonFormat(pattern = "yyyy-MM-dd") - private LocalDate startDate; - - /** - * 学年结束日期 - */ - @ExcelProperty(value = "学年结束日期") - @JsonFormat(pattern = "yyyy-MM-dd") - private LocalDate endDate; - - /** - * 是否当前学年:0-否,1-是 - */ - @ExcelProperty(value = "是否当前学年") - private Boolean isCurrent; - - /** - * 状态:active-有效,inactive-无效 - */ - @ExcelProperty(value = "状态") - private String status; - - /** - * 学年描述 - */ - @ExcelProperty(value = "学年描述") - private String description; - - /** - * 排序字段 - */ - @ExcelProperty(value = "排序字段") - private Integer sortOrder; - - /** - * 备注 - */ - @ExcelProperty(value = "备注") - private String remark; - - // 基础字段 - @ExcelProperty(value = "创建者") - private Long createBy; - - @ExcelProperty(value = "创建时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private java.util.Date createTime; - - @ExcelProperty(value = "更新者") - private Long updateBy; - - @ExcelProperty(value = "更新时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private java.util.Date updateTime; - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgAuditRecordVo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgAuditRecordVo.java deleted file mode 100644 index e0b03f6a..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgAuditRecordVo.java +++ /dev/null @@ -1,200 +0,0 @@ -package org.dromara.xg.domain.vo; - -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; -import org.dromara.xg.domain.XgAuditRecord; -import cn.idev.excel.annotation.ExcelIgnoreUnannotated; -import cn.idev.excel.annotation.ExcelProperty; -import org.dromara.common.excel.annotation.ExcelDictFormat; -import org.dromara.common.excel.convert.ExcelDictConvert; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; - -/** - * 审核记录视图对象 xg_audit_record - * - * @author Cursor AI - * @date 2025-01-12 - */ -@Data -@ExcelIgnoreUnannotated -@AutoMapper(target = XgAuditRecord.class) -public class XgAuditRecordVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键ID - */ - @ExcelProperty(value = "主键ID") - private Long id; - - /** - * 业务类型 - */ - @ExcelProperty(value = "业务类型") - private String businessType; - - /** - * 业务ID - */ - @ExcelProperty(value = "业务ID") - private Long businessId; - - /** - * 学生ID - */ - @ExcelProperty(value = "学生ID") - private Long studentId; - - /** - * 学生学号 - */ - @ExcelProperty(value = "学号") - private String studentNo; - - /** - * 学生姓名 - */ - @ExcelProperty(value = "学生姓名") - private String studentName; - - /** - * 班级ID - */ - @ExcelProperty(value = "班级ID") - private Long classId; - - /** - * 班级代码 - */ - @ExcelProperty(value = "班级代码") - private String classCode; - - /** - * 批次ID - */ - @ExcelProperty(value = "批次ID") - private Long batchId; - - /** - * 批次编号 - */ - @ExcelProperty(value = "批次编号") - private String batchCode; - - /** - * 审核级别 - */ - @ExcelProperty(value = "审核级别") - private Integer auditLevel; - - /** - * 当前审核级别 - */ - @ExcelProperty(value = "当前审核级别") - private Integer currentLevel; - - /** - * 审核状态 - */ - @ExcelProperty(value = "审核状态") - private String auditStatus; - - /** - * 审核结果 - */ - @ExcelProperty(value = "审核结果", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "xg_audit_result") - private String auditResult; - - /** - * 提交人姓名 - */ - @ExcelProperty(value = "提交人") - private String submitUserName; - - /** - * 提交时间 - */ - @ExcelProperty(value = "提交时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date submitTime; - - /** - * 审核人姓名 - */ - @ExcelProperty(value = "审核人") - private String auditUserName; - - /** - * 审核时间 - */ - @ExcelProperty(value = "审核时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date auditTime; - - /** - * 审核意见 - */ - @ExcelProperty(value = "审核意见") - private String auditComment; - - /** - * 审核耗时(分钟) - */ - @ExcelProperty(value = "审核耗时(分钟)") - private Integer auditDuration; - - /** - * 下级审核人姓名 - */ - @ExcelProperty(value = "下级审核人") - private String nextAuditUserName; - - /** - * 变更原因 - */ - @ExcelProperty(value = "变更原因") - private String changeReason; - - /** - * 审核进度 - */ - @ExcelProperty(value = "审核进度") - private String auditProgress; - - /** - * 备注 - */ - @ExcelProperty(value = "备注") - private String remark; - - /** - * 创建时间 - */ - @ExcelProperty(value = "创建时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date createTime; - - /** - * 创建者 - */ - private Long createBy; - - /** - * 更新时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date updateTime; - - /** - * 更新者 - */ - private Long updateBy; - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgBatchOperationLogVo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgBatchOperationLogVo.java deleted file mode 100644 index ce059d24..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgBatchOperationLogVo.java +++ /dev/null @@ -1,157 +0,0 @@ -package org.dromara.xg.domain.vo; - -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; -import org.dromara.xg.domain.XgBatchOperationLog; -import cn.idev.excel.annotation.ExcelIgnoreUnannotated; -import cn.idev.excel.annotation.ExcelProperty; -import org.dromara.common.excel.annotation.ExcelDictFormat; -import org.dromara.common.excel.convert.ExcelDictConvert; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; - -/** - * 批次操作日志视图对象 xg_batch_operation_log - * - * @author Cursor AI - * @date 2025-01-13 - */ -@Data -@ExcelIgnoreUnannotated -@AutoMapper(target = XgBatchOperationLog.class) -public class XgBatchOperationLogVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 日志ID - */ - @ExcelProperty(value = "日志ID") - private Long logId; - - /** - * 批次ID - */ - @ExcelProperty(value = "批次ID") - private Long batchId; - - /** - * 批次名称 - */ - @ExcelProperty(value = "批次名称") - private String batchName; - - /** - * 操作类型 - */ - @ExcelProperty(value = "操作类型", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "xg_batch_operation_type") - private String operationType; - - /** - * 操作描述 - */ - @ExcelProperty(value = "操作描述") - private String operationDescription; - - /** - * 操作前数据(JSON格式) - */ - private String beforeData; - - /** - * 操作后数据(JSON格式) - */ - private String afterData; - - /** - * 操作人ID - */ - private Long operatorId; - - /** - * 操作人姓名 - */ - @ExcelProperty(value = "操作人") - private String operatorName; - - /** - * 操作时间 - */ - @ExcelProperty(value = "操作时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date operationTime; - - /** - * 操作IP地址 - */ - @ExcelProperty(value = "操作IP") - private String operationIp; - - /** - * 操作结果 - */ - @ExcelProperty(value = "操作结果", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "xg_operation_result") - private String operationResult; - - /** - * 失败原因 - */ - @ExcelProperty(value = "失败原因") - private String failureReason; - - /** - * 关联业务ID - */ - private Long relatedId; - - /** - * 关联业务类型 - */ - @ExcelProperty(value = "关联业务类型", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "xg_related_type") - private String relatedType; - - /** - * 扩展字段1 - */ - private String extField1; - - /** - * 扩展字段2 - */ - private String extField2; - - /** - * 备注 - */ - @ExcelProperty(value = "备注") - private String remark; - - /** - * 创建时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date createTime; - - /** - * 创建者 - */ - private Long createBy; - - /** - * 更新时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date updateTime; - - /** - * 更新者 - */ - private Long updateBy; -} \ No newline at end of file diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgBatchPermissionVo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgBatchPermissionVo.java deleted file mode 100644 index bea4c640..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgBatchPermissionVo.java +++ /dev/null @@ -1,145 +0,0 @@ -package org.dromara.xg.domain.vo; - -import org.dromara.xg.domain.XgBatchPermission; -import cn.idev.excel.annotation.ExcelIgnoreUnannotated; -import cn.idev.excel.annotation.ExcelProperty; -import org.dromara.common.excel.annotation.ExcelDictFormat; -import org.dromara.common.excel.convert.ExcelDictConvert; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import java.io.Serial; -import java.io.Serializable; -import java.time.LocalDateTime; - -/** - * 批次权限配置视图对象 xg_batch_permission - * - * @author wuzilong - * @date 2025-01-08 - */ -@Data -@ExcelIgnoreUnannotated -@AutoMapper(target = XgBatchPermission.class) -public class XgBatchPermissionVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 权限配置ID - */ - @ExcelProperty(value = "权限配置ID") - private Long permissionId; - - /** - * 批次ID - */ - @ExcelProperty(value = "批次ID") - private Long batchId; - - /** - * 用户组类型 - */ - @ExcelProperty(value = "用户组类型", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "xg_user_group_type") - private String userGroupType; - - /** - * 用户组名称 - */ - @ExcelProperty(value = "用户组名称") - private String userGroupName; - - /** - * 权限类型 - */ - @ExcelProperty(value = "权限类型", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "xg_permission_type") - private String permissionType; - - /** - * 权限范围 - */ - @ExcelProperty(value = "权限范围") - private String permissionScope; - - /** - * 是否可查看 - */ - @ExcelProperty(value = "是否可查看", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "sys_yes_no") - private Boolean canView; - - /** - * 是否可编辑 - */ - @ExcelProperty(value = "是否可编辑", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "sys_yes_no") - private Boolean canEdit; - - /** - * 是否可审核 - */ - @ExcelProperty(value = "是否可审核", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "sys_yes_no") - private Boolean canAudit; - - /** - * 是否可导出 - */ - @ExcelProperty(value = "是否可导出", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "sys_yes_no") - private Boolean canExport; - - /** - * 开始时间 - */ - @ExcelProperty(value = "开始时间") - private LocalDateTime startTime; - - /** - * 结束时间 - */ - @ExcelProperty(value = "结束时间") - private LocalDateTime endTime; - - /** - * 排序号 - */ - @ExcelProperty(value = "排序号") - private Integer sortOrder; - - /** - * 状态 - */ - @ExcelProperty(value = "状态", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "sys_normal_disable") - private String status; - - /** - * 备注 - */ - @ExcelProperty(value = "备注") - private String remark; - - /** - * 创建者 - */ - private Long createBy; - - /** - * 创建时间 - */ - private LocalDateTime createTime; - - /** - * 更新者 - */ - private Long updateBy; - - /** - * 更新时间 - */ - private LocalDateTime updateTime; - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgBatchStudentRelationVo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgBatchStudentRelationVo.java deleted file mode 100644 index 9a482410..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgBatchStudentRelationVo.java +++ /dev/null @@ -1,169 +0,0 @@ -package org.dromara.xg.domain.vo; - -import com.fasterxml.jackson.annotation.JsonFormat; -import lombok.Data; -import io.github.linpeilie.annotations.AutoMapper; -import org.dromara.xg.domain.XgBatchStudentRelation; - -import java.io.Serial; -import java.io.Serializable; -import java.time.LocalDateTime; - -/** - * 批次学生关联视图对象 xg_batch_student_relation - * - * @author Cursor AI - * @date 2025-01-13 - */ -@Data -@AutoMapper(target = XgBatchStudentRelation.class) -public class XgBatchStudentRelationVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 关联ID - */ - private Long relationId; - - /** - * 批次ID - */ - private Long batchId; - - /** - * 批次编码 - */ - private String batchCode; - - /** - * 批次名称 - */ - private String batchName; - - /** - * 学生ID - */ - private Long studentId; - - /** - * 学号 - */ - private String studentNumber; - - /** - * 学生姓名 - */ - private String studentName; - - /** - * 学生性别 - */ - private String studentGender; - - /** - * 班级名称 - */ - private String className; - - /** - * 学院名称 - */ - private String collegeName; - - /** - * 专业名称 - */ - private String majorName; - - /** - * 提交状态:DRAFT-草稿,SUBMITTED-已提交,WITHDRAWN-已撤回 - */ - private String submissionStatus; - - /** - * 提交时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime submissionTime; - - /** - * 审核状态:PENDING-待审核,APPROVED-已审核,REJECTED-已拒绝 - */ - private String approvalStatus; - - /** - * 审核时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime approvalTime; - - /** - * 审核人ID - */ - private Long approvalBy; - - /** - * 审核人姓名 - */ - private String approvalByName; - - /** - * 审核意见 - */ - private String approvalComments; - - /** - * 最后编辑时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime lastEditTime; - - /** - * 提交次数 - */ - private Integer submissionCount; - - /** - * 是否允许编辑:0-否,1-是 - */ - private Integer allowEdit; - - /** - * 扩展字段1 - */ - private String extField1; - - /** - * 扩展字段2 - */ - private String extField2; - - /** - * 扩展字段3 - */ - private String extField3; - - /** - * 创建时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime createTime; - - /** - * 更新时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime updateTime; - - /** - * 创建人 - */ - private Long createBy; - - /** - * 更新人 - */ - private Long updateBy; -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgBusinessPeriodVo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgBusinessPeriodVo.java deleted file mode 100644 index fc6bb266..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgBusinessPeriodVo.java +++ /dev/null @@ -1,117 +0,0 @@ -package org.dromara.xg.domain.vo; - -import org.dromara.xg.domain.XgBusinessPeriod; -import cn.idev.excel.annotation.ExcelIgnoreUnannotated; -import cn.idev.excel.annotation.ExcelProperty; -import org.dromara.common.excel.annotation.ExcelDictFormat; -import org.dromara.common.excel.convert.ExcelDictConvert; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import java.io.Serial; -import java.io.Serializable; -import java.time.LocalDateTime; - -/** - * 业务期管理视图对象 xg_business_period - * - * @author wuzilong - * @date 2025-01-08 - */ -@Data -@ExcelIgnoreUnannotated -@AutoMapper(target = XgBusinessPeriod.class) -public class XgBusinessPeriodVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 业务期ID - */ - @ExcelProperty(value = "业务期ID") - private Long businessPeriodId; - - /** - * 业务期名称 - */ - @ExcelProperty(value = "业务期名称") - private String periodName; - - /** - * 业务期代码 - */ - @ExcelProperty(value = "业务期代码") - private String periodCode; - - /** - * 业务期类型 - */ - @ExcelProperty(value = "业务期类型", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "xg_business_period_type") - private String periodType; - - /** - * 开始时间 - */ - @ExcelProperty(value = "开始时间") - private LocalDateTime startTime; - - /** - * 结束时间 - */ - @ExcelProperty(value = "结束时间") - private LocalDateTime endTime; - - /** - * 是否激活 - */ - @ExcelProperty(value = "是否激活", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "sys_yes_no") - private Boolean isActive; - - /** - * 排序号 - */ - @ExcelProperty(value = "排序号") - private Integer sortOrder; - - /** - * 状态 - */ - @ExcelProperty(value = "状态", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "sys_normal_disable") - private String status; - - /** - * 描述 - */ - @ExcelProperty(value = "描述") - private String description; - - /** - * 备注 - */ - @ExcelProperty(value = "备注") - private String remark; - - /** - * 创建者 - */ - private Long createBy; - - /** - * 创建时间 - */ - private LocalDateTime createTime; - - /** - * 更新者 - */ - private Long updateBy; - - /** - * 更新时间 - */ - private LocalDateTime updateTime; - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgClassCadreVo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgClassCadreVo.java deleted file mode 100644 index 2ee5defa..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgClassCadreVo.java +++ /dev/null @@ -1,266 +0,0 @@ -package org.dromara.xg.domain.vo; - -import org.dromara.xg.domain.XgClassCadre; -import cn.idev.excel.annotation.ExcelIgnoreUnannotated; -import cn.idev.excel.annotation.ExcelProperty; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import lombok.EqualsAndHashCode; -import java.util.Date; -import java.math.BigDecimal; -import com.fasterxml.jackson.annotation.JsonFormat; - -import java.io.Serial; - -/** - * 班级干部信息视图对象 xg_class_cadre - * - * @author Cursor AI - * @date 2025-01-09 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@ExcelIgnoreUnannotated -@AutoMapper(target = XgClassCadre.class) -public class XgClassCadreVo extends XgClassCadre { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键ID - */ - @ExcelProperty(value = "主键ID") - private Long id; - - /** - * 班级ID,关联xg_class_info.id - */ - @ExcelProperty(value = "班级ID") - private Long classId; - - /** - * 学生ID,关联xg_student_info.id - */ - @ExcelProperty(value = "学生ID") - private Long studentId; - - /** - * 学号 - */ - @ExcelProperty(value = "学号") - private String studentNo; - - /** - * 学生姓名 - */ - @ExcelProperty(value = "学生姓名") - private String studentName; - - /** - * 职务编码 - */ - @ExcelProperty(value = "职务编码") - private String positionCode; - - /** - * 职务名称 - */ - @ExcelProperty(value = "职务名称") - private String positionName; - - /** - * 职务级别:1-班长,2-副班长,3-委员,9-普通成员 - */ - @ExcelProperty(value = "职务级别") - private Integer positionLevel; - - /** - * 职务类别:class-班级干部,party-党团干部,other-其他 - */ - @ExcelProperty(value = "职务类别") - private String positionCategory; - - /** - * 任职日期 - */ - @ExcelProperty(value = "任职日期") - @JsonFormat(pattern = "yyyy-MM-dd") - private Date appointmentDate; - - /** - * 任期开始日期 - */ - @ExcelProperty(value = "任期开始日期") - @JsonFormat(pattern = "yyyy-MM-dd") - private Date termStartDate; - - /** - * 任期结束日期 - */ - @ExcelProperty(value = "任期结束日期") - @JsonFormat(pattern = "yyyy-MM-dd") - private Date termEndDate; - - /** - * 任期时长(月) - */ - @ExcelProperty(value = "任期时长(月)") - private Integer termDuration; - - /** - * 是否现任:0-否,1-是 - */ - @ExcelProperty(value = "是否现任") - private Boolean isCurrent; - - /** - * 任职状态:1-在任,2-到期,3-辞职,4-免职,5-调任 - */ - @ExcelProperty(value = "任职状态") - private String cadreStatus; - - /** - * 是否兼职:0-否,1-是 - */ - @ExcelProperty(value = "是否兼职") - private Boolean isConcurrent; - - /** - * 兼任职务列表 - */ - @ExcelProperty(value = "兼任职务列表") - private String concurrentPositions; - - /** - * 任命人姓名 - */ - @ExcelProperty(value = "任命人姓名") - private String appointerName; - - /** - * 任命原因 - */ - @ExcelProperty(value = "任命原因") - private String appointmentReason; - - /** - * 工作表现:excellent-优秀,good-良好,average-一般,poor-较差 - */ - @ExcelProperty(value = "工作表现") - private String workPerformance; - - /** - * 表现评分(0-10分) - */ - @ExcelProperty(value = "表现评分") - private BigDecimal performanceScore; - - /** - * 联系电话 - */ - @ExcelProperty(value = "联系电话") - private String contactPhone; - - /** - * 联系邮箱 - */ - @ExcelProperty(value = "联系邮箱") - private String contactEmail; - - /** - * 备注信息 - */ - @ExcelProperty(value = "备注信息") - private String remark; - - // 关联信息字段 - /** - * 班级编码 - */ - @ExcelProperty(value = "班级编码") - private String classCode; - - /** - * 班级名称 - */ - @ExcelProperty(value = "班级名称") - private String className; - - /** - * 学院名称 - */ - @ExcelProperty(value = "学院名称") - private String collegeName; - - /** - * 年级 - */ - @ExcelProperty(value = "年级") - private String grade; - - /** - * 专业名称 - */ - @ExcelProperty(value = "专业名称") - private String majorName; - - /** - * 职责描述 - */ - @ExcelProperty(value = "职责描述") - private String responsibilities; - - /** - * 具体职务 - */ - @ExcelProperty(value = "具体职务") - private String duties; - - /** - * 剩余任期天数 - */ - @ExcelProperty(value = "剩余任期天数") - private Integer daysRemaining; - - /** - * 任职状态显示文本 - */ - @ExcelProperty(value = "任职状态显示") - private String cadreStatusText; - - /** - * 职务级别显示文本 - */ - @ExcelProperty(value = "职务级别显示") - private String positionLevelText; - - /** - * 工作表现显示文本 - */ - @ExcelProperty(value = "工作表现显示") - private String workPerformanceText; - - /** - * 是否现任显示文本 - */ - @ExcelProperty(value = "是否现任显示") - private String isCurrentText; - - /** - * 是否兼职显示文本 - */ - @ExcelProperty(value = "是否兼职显示") - private String isConcurrentText; - - // 以下是从基类继承的字段,这里显式声明用于MyBatis映射 - private Long createBy; - - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date createTime; - - private Long updateBy; - - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date updateTime; -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgClassInfoVo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgClassInfoVo.java deleted file mode 100644 index 04771445..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgClassInfoVo.java +++ /dev/null @@ -1,249 +0,0 @@ -package org.dromara.xg.domain.vo; - -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; -import org.dromara.xg.domain.XgClassInfo; -import cn.idev.excel.annotation.ExcelIgnoreUnannotated; -import cn.idev.excel.annotation.ExcelProperty; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; - -/** - * 班级信息视图对象 xg_class_info - * - * @author Cursor AI - * @date 2025-01-14 - */ -@Data -@ExcelIgnoreUnannotated -@AutoMapper(target = XgClassInfo.class) -public class XgClassInfoVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键ID - */ - @ExcelProperty(value = "主键ID") - private Long id; - - /** - * 班级代码 - */ - @ExcelProperty(value = "班级代码") - private String classCode; - - /** - * 班级名称 - */ - @ExcelProperty(value = "班级名称") - private String className; - - /** - * 班级类型 - */ - @ExcelProperty(value = "班级类型") - private String classType; - - /** - * 年级 - */ - @ExcelProperty(value = "年级") - private String grade; - - /** - * 入学年份 - */ - @ExcelProperty(value = "入学年份") - private Integer enrollmentYear; - - /** - * 毕业年份 - */ - @ExcelProperty(value = "毕业年份") - private Integer graduationYear; - - /** - * 专业代码 - */ - @ExcelProperty(value = "专业代码") - private String majorCode; - - /** - * 专业名称 - */ - @ExcelProperty(value = "专业名称") - private String majorName; - - /** - * 学院代码 - */ - @ExcelProperty(value = "学院代码") - private String collegeCode; - - /** - * 学院名称 - */ - @ExcelProperty(value = "学院名称") - private String collegeName; - - /** - * 辅导员ID - */ - @ExcelProperty(value = "辅导员ID") - private Long counselorId; - - /** - * 辅导员姓名 - */ - @ExcelProperty(value = "辅导员") - private String counselorName; - - /** - * 班主任ID - */ - @ExcelProperty(value = "班主任ID") - private Long classTeacherId; - - /** - * 班主任姓名 - */ - @ExcelProperty(value = "班主任") - private String classTeacherName; - - /** - * 班级状态 - */ - @ExcelProperty(value = "班级状态") - private String classStatus; - - /** - * 当前学生数量 - */ - @ExcelProperty(value = "当前学生数量") - private Integer currentStudentCount; - - /** - * 最大学生数量 - */ - @ExcelProperty(value = "最大学生数量") - private Integer maxStudentCount; - - /** - * 男生人数 - */ - @ExcelProperty(value = "男生人数") - private Integer maleCount; - - /** - * 女生人数 - */ - @ExcelProperty(value = "女生人数") - private Integer femaleCount; - - /** - * 班级描述 - */ - @ExcelProperty(value = "班级描述") - private String classDescription; - - /** - * 班级备注 - */ - @ExcelProperty(value = "班级备注") - private String classNotes; - - /** - * 扩展字段1 - */ - @ExcelProperty(value = "扩展字段1") - private String extField1; - - /** - * 扩展字段2 - */ - @ExcelProperty(value = "扩展字段2") - private String extField2; - - /** - * 扩展字段3 - */ - @ExcelProperty(value = "扩展字段3") - private String extField3; - - /** - * 备注 - */ - @ExcelProperty(value = "备注") - private String remark; - - /** - * 创建时间 - */ - @ExcelProperty(value = "创建时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date createTime; - - /** - * 创建者 - */ - private Long createBy; - - /** - * 更新时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date updateTime; - - /** - * 更新者 - */ - private Long updateBy; - - /** - * 获取学院代码 - */ - public String getCollegeCode() { - return this.collegeCode; - } - - /** - * 获取辅导员ID - */ - public Long getCounselorId() { - return this.counselorId; - } - - /** - * 获取班主任ID - */ - public Long getClassTeacherId() { - return this.classTeacherId; - } - - /** - * 获取当前学生数 - */ - public Integer getCurrentStudentCount() { - return this.currentStudentCount; - } - - /** - * 获取男生数量 - */ - public Integer getMaleCount() { - return this.maleCount; - } - - /** - * 获取女生数量 - */ - public Integer getFemaleCount() { - return this.femaleCount; - } - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgClassStudentVo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgClassStudentVo.java deleted file mode 100644 index 78b3e02a..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgClassStudentVo.java +++ /dev/null @@ -1,166 +0,0 @@ -package org.dromara.xg.domain.vo; - -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; -import org.dromara.xg.domain.XgClassStudent; -import cn.idev.excel.annotation.ExcelIgnoreUnannotated; -import cn.idev.excel.annotation.ExcelProperty; -import org.dromara.common.excel.annotation.ExcelDictFormat; -import org.dromara.common.excel.convert.ExcelDictConvert; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; - -/** - * 班级学生关系视图对象 xg_class_student - * - * @author Cursor AI - * @date 2025-01-12 - */ -@Data -@ExcelIgnoreUnannotated -@AutoMapper(target = XgClassStudent.class) -public class XgClassStudentVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键ID - */ - @ExcelProperty(value = "主键ID") - private Long id; - - /** - * 班级ID - */ - @ExcelProperty(value = "班级ID") - private Long classId; - - /** - * 班级代码 - */ - @ExcelProperty(value = "班级代码") - private String classCode; - - /** - * 班级名称 - */ - @ExcelProperty(value = "班级名称") - private String className; - - /** - * 学生ID - */ - @ExcelProperty(value = "学生ID") - private Long studentId; - - /** - * 学生学号 - */ - @ExcelProperty(value = "学号") - private String studentNo; - - /** - * 学生姓名 - */ - @ExcelProperty(value = "学生姓名") - private String studentName; - - /** - * 加入班级时间 - */ - @ExcelProperty(value = "加入班级时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date joinTime; - - /** - * 离开班级时间 - */ - @ExcelProperty(value = "离开班级时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date leaveTime; - - /** - * 班级职务 - */ - @ExcelProperty(value = "班级职务", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "xg_class_position") - private String classPosition; - - /** - * 职务开始时间 - */ - @ExcelProperty(value = "职务开始时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date positionStartTime; - - /** - * 职务结束时间 - */ - @ExcelProperty(value = "职务结束时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date positionEndTime; - - /** - * 关系状态 - */ - @ExcelProperty(value = "关系状态") - private String relationStatus; - - /** - * 转班原因 - */ - @ExcelProperty(value = "转班原因") - private String transferReason; - - /** - * 原班级代码 - */ - @ExcelProperty(value = "原班级代码") - private String originalClassCode; - - /** - * 目标班级代码 - */ - @ExcelProperty(value = "目标班级代码") - private String targetClassCode; - - /** - * 是否当前班级 - */ - @ExcelProperty(value = "是否当前班级") - private Integer isCurrentClass; - - /** - * 备注 - */ - @ExcelProperty(value = "备注") - private String remark; - - /** - * 创建时间 - */ - @ExcelProperty(value = "创建时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date createTime; - - /** - * 创建者 - */ - private Long createBy; - - /** - * 更新时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date updateTime; - - /** - * 更新者 - */ - private Long updateBy; - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgCollectionBatchVo.class b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgCollectionBatchVo.class deleted file mode 100644 index 150fe5f5979695bb1ce4c293f4a667b207cf7bf5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12349 zcmd^Fd3+Sdm3}QG%}6TU5>j(xz(@!&U~iI5VUjh6V>tp7gmDrlaauENF=#X+W?EXv zk{IK4Oo9y#0h^c@LP9Jj!Hykc9D_Gb_ON%e_kAD9S`zGipK-k3>#m;ZX_XnS%|GF% zV!G=4zE`iRt6m*5-~Hj)ZxPWdqpq6DXj+8I1yxX`K@HoiQ7e|R(gU&E`?uL~$Dqoa zlIf)LE`z3ZbZ)7lC{;zMT2KuMgO+Bp1F=LlGh}70*bY46DVdIqW@7IjSd&SmU?7=E zueO}{)-4%>%906G(OamaH-%m9U4B@ekNmmg#c@&1E2( zvxn@QW4nd(1zqRb$i*|mwr^vhpha{&{LVR6*4dmKg5RovBTh0ETWdMC+rSP%olK0_ z=>*fbo-RR4*<_9DbDv{5BRMW#CMd?`wZkL*sbp?z0a+pF21Z)5c5XP6&L#U(_C`CK z%cT8&_z6L8V}^)l(vB5(Hg3(N-OAn}=qDMd%-VQcgItdkw32AST`(7X8M zM!n+IJDK}af^K%XBg2URca5O6F4rsexVH#;58Vp?os46p`kax3opy2tH3wd3Puj5u z?5x{2w+VVL^BZ#`{XbYPwU<`{@JRa4WrT`-qi7M|T8#_GZM&&JQyAER`v^uv$6)tHEz$Z-pS>*pnLrCJKSFO z%C`zi(l&Ge_?wG+w6&;Gzfaj%O3)CCS|I8RcPkSzf`*yU48qN!o@G2MDCgswLY>R_ zh@esWX}mOUMW}yUirfnH@J>M=qo2X(gvgBw-b^p%tGUjVd|c2ciugRt8Q3l8J_gu( z*HB=_Gk(9IpDhydgk|89f*xd`o|_$*_l$i?(5D&W7t^PvK9@fv=waVjpFjH(mBWCs9>B8 zPBC}h1m=+%3qSgj!mIP@4(Ht^^8dvDZTAPe>Bw!ipf7@HD!kx^*yx-9T zavW0;T6PTF?QUT1#*D@ehWq5eXU4yI|D^Bb`P0YGpZ?P8XU_sUf8U|W=g&!}4n044==j88yp*Q#7r!xa;E~tQo(vUU*!}qVR~`%% zPV754dG3iop%{PWp^3eZOzwZMV^OC;<=&!G-mrfp}u)Gd!8{nZQ)am$74<2_FAA z@1OeIXMelrX8Z}n8Fh~1N4IWonsB!0)W!wc!x{q!%=ro85qWyJNPcn@a;tap^GN>u zRmgcr(P@jpDaR=;44(Uei88!Qn6 zr^z`Nr(!MeMi$M-RI&XwYK64Geb;TI_d#;nG22#cllEp!>Lja9=uZ9Td3+pMg%my@N}@RfD#s z-$PBfR?uR<4-A(ITI>&i;Z8w|{UI=1DQK}jLVsXGK$YP9F+7`%oPp1ZB`=ck93Bk% z6Z~K47Piozs^>p*5nLrqk)5W9 zA|%5>TqA1>%ia-^;h3(G%?Qg@g=9FvYh<&-vNa(Y4)_|`ys)e%B*XDvBU=!bZ4Ak9 z51^4P4$JNg$#74gku3?!J`$4Q4nZU94$BfD8EzLevgKjfwvY_>4I0^vVcBp;3XSZYVcEw+GF-rEWH*IndqOhYe`sXy4$Jn2WVqJT$X17C4~Jy9_0!1K zg=L3BGTi%VWIbWo(U1(cff`wFSau>L!zH0cc6(Sh7LwuaP$SzEmOUMk{W<-GlFh+q z8OP8iT`y3iRDAtQ`YWBTwv_IBdR=2F-S_pnmQuRE*6Z3z>0a0CW|Y#6>vgkB=_d5L zd8Krdbe^WU%VW{|TQF6}TfCwbzj(pCpf|MmvJL%>z9mbh8Y*_+Z}qzFQo6s>>z0?& z{k>jyV=3J~=yh)|rTa&H2fuTwuEd-AC;gPYX{w>(4*qAo1Mi-yE8)Pu=p9%+)ljhm z|4RR+iy7-m>Hb}>>nWxC552CplRDP{0x1>XIQcV z6iZf`70ju8m72z=)~qlq1EhqEfRvC?Gs2{(B1Oz-fHWYhKpK$MW)+jF6{*Us4v+?A z4M>Ahm^DliiiD>CDJ^S3O3OO4mPvJrRBP4+NZVySNZVzDSfMXEO&0whN^g5=01 zvyn+niqvQ}1xPz&Ge|pRi`mSi7DZ|{TLPqAvK6FVa=O{dr0I&(YEBQ3?v-sI-7DM8 zHYT+zQk&TxAnlPRNPFZA(`3>NMKaA90n!6{Y8%~GV9=Bxl|ubd6iUOC5{ z&7?VsG~1jLAnlWLLE0zhnRA&mPm$)D^8%#(az04=<#pzKCS9jU^Udo5q=Rw+NC)LY za{-eUD$)XTVSsd4E&}PWyxv^Ir0W%Fk$HW9bVM!&>4@ww7c;3tkrtaB0n$;~3DQxy z#O!3!5=H7XF|PB&_n7Pg>6lzW=Se4IH?k+>GSi(0%M_{GToxdmlrfM_ z%H?K^EiG51n7KSa8j~wP8k0AeE0}bHBCRlQ@JZ#Tu!5EqojLyphtMW^ZzTEys*6zc z4VoUIGWllvtokv0EZSq1^KSrDT;wA>?=dSluyJ=@>Z#2veJbr^AN(Or%KC+3n5}ERm6w3%cu)Q^AO^wr*dSK3n7FmRh19zkku|!ore%u zJ=HE*<3fn3N>$@S_e$YHA`b~4+9PXS2tihz}weU~BaI=o_Y8Y=~W1i2JalV<#6e{L_8^AF(Oil9tXza^vK#l<OEH zDRZKPxq`(@VJf4wrHvNsULskU=2eP^XURYHW-gttDyYBI3JNW_EQzY7;WDZz)O5Kj zRaxWZRaU6)3WTc4rpvCfQ0tXxRmII$QgNZ~E0(M3TduJBf(KV)K{?TSz&$3u;eMyiUrzoI`8ScG V7+p{rl|~e~YCKgLHAXF&{|E7aVMzc0 diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgCollectionBatchVo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgCollectionBatchVo.java deleted file mode 100644 index 47db19e8..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgCollectionBatchVo.java +++ /dev/null @@ -1,220 +0,0 @@ -package org.dromara.xg.domain.vo; - -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; -import cn.idev.excel.annotation.ExcelIgnoreUnannotated; -import cn.idev.excel.annotation.ExcelProperty; -import org.dromara.common.excel.annotation.ExcelDictFormat; -import org.dromara.common.excel.convert.ExcelDictConvert; -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; - -/** - * 信息采集批次视图对象 xg_collection_batch - * - * @author Cursor AI - * @date 2025-01-12 - */ -@Data -@ExcelIgnoreUnannotated -public class XgCollectionBatchVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - // 手动添加缺失的getter方法,解决编译错误 - public Long getBatchId() { - return id; - } - - public String getBatchName() { - return batchName; - } - - /** - * 主键ID - */ - @ExcelProperty(value = "主键ID") - private Long id; - - /** - * 批次编号 - */ - @ExcelProperty(value = "批次编号") - private String batchCode; - - /** - * 批次名称 - */ - @ExcelProperty(value = "批次名称") - private String batchName; - - /** - * 批次描述 - */ - @ExcelProperty(value = "批次描述") - private String batchDescription; - - /** - * 批次类型 - */ - @ExcelProperty(value = "批次类型") - private String batchType; - - /** - * 学年 - */ - @ExcelProperty(value = "学年") - private String academicYear; - - /** - * 学期 - */ - @ExcelProperty(value = "学期") - private String semester; - - /** - * 适用范围 - */ - @ExcelProperty(value = "适用范围") - private String scopeType; - - /** - * 开始时间 - */ - @ExcelProperty(value = "开始时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date startTime; - - /** - * 结束时间 - */ - @ExcelProperty(value = "结束时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date endTime; - - /** - * 批次状态 - */ - @ExcelProperty(value = "批次状态", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "xg_batch_status") - private String batchStatus; - - /** - * 发布状态 - */ - @ExcelProperty(value = "发布状态") - private String publishStatus; - - /** - * 负责人姓名 - */ - @ExcelProperty(value = "负责人") - private String responsiblePersonName; - - /** - * 联系电话 - */ - @ExcelProperty(value = "联系电话") - private String contactPhone; - - /** - * 备注 - */ - @ExcelProperty(value = "备注") - private String remark; - - /** - * 创建时间 - */ - @ExcelProperty(value = "创建时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date createTime; - - /** - * 创建者 - */ - private Long createBy; - - /** - * 更新时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date updateTime; - - /** - * 更新者 - */ - private Long updateBy; - - // ==================== 统计字段 ==================== - - /** - * 总学生数 - */ - @ExcelProperty(value = "总学生数") - private Integer totalStudents; - - /** - * 已提交学生数 - */ - @ExcelProperty(value = "已提交学生数") - private Integer submittedStudents; - - /** - * 已通过学生数 - */ - @ExcelProperty(value = "已通过学生数") - private Integer approvedStudents; - - /** - * 已拒绝学生数 - */ - @ExcelProperty(value = "已拒绝学生数") - private Integer rejectedStudents; - - /** - * 完成率 - */ - @ExcelProperty(value = "完成率(%)") - private Double completionRate; - - // ==================== 手动添加的 setter 方法 ==================== - - /** - * 设置总学生数 - */ - public void setTotalStudents(Integer totalStudents) { - this.totalStudents = totalStudents; - } - - /** - * 设置已提交学生数 - */ - public void setSubmittedStudents(Integer submittedStudents) { - this.submittedStudents = submittedStudents; - } - - /** - * 设置已通过学生数 - */ - public void setApprovedStudents(Integer approvedStudents) { - this.approvedStudents = approvedStudents; - } - - /** - * 设置已拒绝学生数 - */ - public void setRejectedStudents(Integer rejectedStudents) { - this.rejectedStudents = rejectedStudents; - } - - /** - * 设置完成率 - */ - public void setCompletionRate(Double completionRate) { - this.completionRate = completionRate; - } -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgDictDataVo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgDictDataVo.java deleted file mode 100644 index d4de309b..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgDictDataVo.java +++ /dev/null @@ -1,108 +0,0 @@ -package org.dromara.xg.domain.vo; - -import org.dromara.xg.domain.XgDictData; -import cn.idev.excel.annotation.ExcelIgnoreUnannotated; -import cn.idev.excel.annotation.ExcelProperty; -import org.dromara.common.excel.annotation.ExcelDictFormat; -import org.dromara.common.excel.convert.ExcelDictConvert; -import lombok.Data; -import java.io.Serial; -import java.io.Serializable; -import java.time.LocalDateTime; - -/** - * 数据字典视图对象 xg_dict_data - * - * @author wuzilong - * @date 2025-01-08 - */ -@Data -@ExcelIgnoreUnannotated -public class XgDictDataVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 字典数据ID - */ - @ExcelProperty(value = "字典数据ID") - private Long dictDataId; - - /** - * 字典类型 - */ - @ExcelProperty(value = "字典类型") - private String dictType; - - /** - * 字典标签 - */ - @ExcelProperty(value = "字典标签") - private String dictLabel; - - /** - * 字典键值 - */ - @ExcelProperty(value = "字典键值") - private String dictValue; - - /** - * 字典排序 - */ - @ExcelProperty(value = "字典排序") - private Integer dictSort; - - /** - * 样式属性 - */ - @ExcelProperty(value = "样式属性") - private String cssClass; - - /** - * 表格字典样式 - */ - @ExcelProperty(value = "表格字典样式") - private String listClass; - - /** - * 是否默认 - */ - @ExcelProperty(value = "是否默认", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "sys_yes_no") - private Boolean isDefault; - - /** - * 状态 - */ - @ExcelProperty(value = "状态", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "sys_normal_disable") - private String status; - - /** - * 备注 - */ - @ExcelProperty(value = "备注") - private String remark; - - /** - * 创建者 - */ - private Long createBy; - - /** - * 创建时间 - */ - private LocalDateTime createTime; - - /** - * 更新者 - */ - private Long updateBy; - - /** - * 更新时间 - */ - private LocalDateTime updateTime; - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgNoticeReadVo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgNoticeReadVo.java deleted file mode 100644 index 919992b1..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgNoticeReadVo.java +++ /dev/null @@ -1,142 +0,0 @@ -package org.dromara.xg.domain.vo; - -import org.dromara.xg.domain.XgNoticeRead; -import cn.idev.excel.annotation.ExcelIgnoreUnannotated; -import cn.idev.excel.annotation.ExcelProperty; -import org.dromara.common.excel.annotation.ExcelDictFormat; -import org.dromara.common.excel.convert.ExcelDictConvert; -import lombok.Data; -import java.io.Serial; -import java.io.Serializable; -import java.time.LocalDateTime; - -/** - * 通知阅读记录视图对象 xg_notice_read - * - * @author wuzilong - * @date 2025-01-08 - */ -@Data -@ExcelIgnoreUnannotated -public class XgNoticeReadVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 阅读记录ID - */ - @ExcelProperty(value = "阅读记录ID") - private Long readId; - - /** - * 通知ID - */ - @ExcelProperty(value = "通知ID") - private Long noticeId; - - /** - * 用户ID - */ - @ExcelProperty(value = "用户ID") - private Long userId; - - /** - * 用户类型 - */ - @ExcelProperty(value = "用户类型", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "xg_user_type") - private String userType; - - /** - * 阅读时间 - */ - @ExcelProperty(value = "阅读时间") - private LocalDateTime readTime; - - /** - * 阅读时长(秒) - */ - @ExcelProperty(value = "阅读时长(秒)") - private Integer readDuration; - - /** - * 阅读状态 - */ - @ExcelProperty(value = "阅读状态", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "xg_read_status") - private String readStatus; - - /** - * 阅读设备 - */ - @ExcelProperty(value = "阅读设备") - private String readDevice; - - /** - * IP地址 - */ - @ExcelProperty(value = "IP地址") - private String ipAddress; - - /** - * 阅读位置 - */ - @ExcelProperty(value = "阅读位置") - private String readLocation; - - /** - * 是否完整阅读 - */ - @ExcelProperty(value = "是否完整阅读", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "sys_yes_no") - private Boolean isFullRead; - - /** - * 阅读进度 - */ - @ExcelProperty(value = "阅读进度(%)") - private Integer readProgress; - - /** - * 备注 - */ - @ExcelProperty(value = "备注") - private String remark; - - /** - * 创建者 - */ - private Long createBy; - - /** - * 创建时间 - */ - private LocalDateTime createTime; - - /** - * 更新者 - */ - private Long updateBy; - - /** - * 更新时间 - */ - private LocalDateTime updateTime; - - public String getRemark() { - return remark; - } - - public void setRemark(String remark) { - this.remark = remark; - } - - public Long getNoticeId() { - return noticeId; - } - - public void setNoticeId(Long noticeId) { - this.noticeId = noticeId; - } -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgNoticeVo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgNoticeVo.java deleted file mode 100644 index bad937b9..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgNoticeVo.java +++ /dev/null @@ -1,141 +0,0 @@ -package org.dromara.xg.domain.vo; - -import org.dromara.xg.domain.XgNotice; -import cn.idev.excel.annotation.ExcelIgnoreUnannotated; -import cn.idev.excel.annotation.ExcelProperty; -import org.dromara.common.excel.annotation.ExcelDictFormat; -import org.dromara.common.excel.convert.ExcelDictConvert; -import lombok.Data; -import java.io.Serial; -import java.io.Serializable; -import java.time.LocalDateTime; - -/** - * 通知公告视图对象 xg_notice - * - * @author wuzilong - * @date 2025-01-08 - */ -@Data -@ExcelIgnoreUnannotated -public class XgNoticeVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 通知ID - */ - @ExcelProperty(value = "通知ID") - private Long noticeId; - - /** - * 通知标题 - */ - @ExcelProperty(value = "通知标题") - private String noticeTitle; - - /** - * 通知类型 - */ - @ExcelProperty(value = "通知类型", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "xg_notice_type") - private String noticeType; - - /** - * 通知内容 - */ - @ExcelProperty(value = "通知内容") - private String noticeContent; - - /** - * 发布范围 - */ - @ExcelProperty(value = "发布范围") - private String publishScope; - - /** - * 优先级 - */ - @ExcelProperty(value = "优先级", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "xg_notice_priority") - private Integer priority; - - /** - * 是否置顶 - */ - @ExcelProperty(value = "是否置顶", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "sys_yes_no") - private Boolean isTop; - - /** - * 发布时间 - */ - @ExcelProperty(value = "发布时间") - private LocalDateTime publishTime; - - /** - * 过期时间 - */ - @ExcelProperty(value = "过期时间") - private LocalDateTime expireTime; - - /** - * 附件路径 - */ - @ExcelProperty(value = "附件路径") - private String attachmentPath; - - /** - * 阅读次数 - */ - @ExcelProperty(value = "阅读次数") - private Integer readCount; - - /** - * 发布状态 - */ - @ExcelProperty(value = "发布状态", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "xg_publish_status") - private String publishStatus; - - /** - * 排序号 - */ - @ExcelProperty(value = "排序号") - private Integer sortOrder; - - /** - * 状态 - */ - @ExcelProperty(value = "状态", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "sys_normal_disable") - private String status; - - /** - * 备注 - */ - @ExcelProperty(value = "备注") - private String remark; - - /** - * 创建者 - */ - private Long createBy; - - /** - * 创建时间 - */ - private LocalDateTime createTime; - - /** - * 更新者 - */ - private Long updateBy; - - /** - * 更新时间 - */ - private LocalDateTime updateTime; - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgSemesterVo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgSemesterVo.java deleted file mode 100644 index 59ffba6c..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgSemesterVo.java +++ /dev/null @@ -1,118 +0,0 @@ -package org.dromara.xg.domain.vo; - -import org.dromara.xg.domain.XgSemester; -import cn.idev.excel.annotation.ExcelIgnoreUnannotated; -import cn.idev.excel.annotation.ExcelProperty; -import org.dromara.common.excel.annotation.ExcelDictFormat; -import org.dromara.common.excel.convert.ExcelDictConvert; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import java.io.Serial; -import java.io.Serializable; -import java.time.LocalDate; -import java.time.LocalDateTime; - -/** - * 学期管理视图对象 xg_semester - * - * @author wuzilong - * @date 2025-01-08 - */ -@Data -@ExcelIgnoreUnannotated -@AutoMapper(target = XgSemester.class) -public class XgSemesterVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 学期ID - */ - @ExcelProperty(value = "学期ID") - private Long semesterId; - - /** - * 学年ID - */ - @ExcelProperty(value = "学年ID") - private Long academicYearId; - - /** - * 学期名称 - */ - @ExcelProperty(value = "学期名称") - private String semesterName; - - /** - * 学期代码 - */ - @ExcelProperty(value = "学期代码") - private String semesterCode; - - /** - * 学期类型 - */ - @ExcelProperty(value = "学期类型", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "xg_semester_type") - private String semesterType; - - /** - * 开始日期 - */ - @ExcelProperty(value = "开始日期") - private LocalDate startDate; - - /** - * 结束日期 - */ - @ExcelProperty(value = "结束日期") - private LocalDate endDate; - - /** - * 是否当前学期 - */ - @ExcelProperty(value = "是否当前学期", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "sys_yes_no") - private Boolean isCurrent; - - /** - * 排序号 - */ - @ExcelProperty(value = "排序号") - private Integer sortOrder; - - /** - * 状态 - */ - @ExcelProperty(value = "状态", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "sys_normal_disable") - private String status; - - /** - * 备注 - */ - @ExcelProperty(value = "备注") - private String remark; - - /** - * 创建者 - */ - private Long createBy; - - /** - * 创建时间 - */ - private LocalDateTime createTime; - - /** - * 更新者 - */ - private Long updateBy; - - /** - * 更新时间 - */ - private LocalDateTime updateTime; - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgStudentInfoApprovalVo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgStudentInfoApprovalVo.java deleted file mode 100644 index 4e5f472d..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgStudentInfoApprovalVo.java +++ /dev/null @@ -1,299 +0,0 @@ -package org.dromara.xg.domain.vo; - -import com.fasterxml.jackson.annotation.JsonFormat; -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; -import java.time.LocalDateTime; -import java.util.Date; - -/** - * 学生信息审核视图对象 XgStudentInfoApprovalVo - * - * @author ruoyi - * @date 2025-01-13 - */ -@Data -public class XgStudentInfoApprovalVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 关联ID - */ - private Long id; - - /** - * 批次ID - */ - private Long batchId; - - /** - * 批次名称 - */ - private String batchName; - - /** - * 学生ID - */ - private Long studentId; - - /** - * 学生姓名 - */ - private String studentName; - - /** - * 学号 - */ - private String studentNo; - - /** - * 班级代码 - */ - private String classCode; - - /** - * 班级名称 - */ - private String className; - - /** - * 学院代码 - */ - private String collegeCode; - - /** - * 学院名称 - */ - private String collegeName; - - /** - * 专业代码 - */ - private String majorCode; - - /** - * 专业名称 - */ - private String majorName; - - /** - * 提交状态 - */ - private String submissionStatus; - - /** - * 审核状态 - */ - private String approvalStatus; - - /** - * 提交时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime submissionTime; - - /** - * 审核时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime approvalTime; - - /** - * 审核人ID - */ - private Long approvalBy; - - /** - * 审核人姓名 - */ - private String approvalByName; - - /** - * 审核意见 - */ - private String approvalComments; - - /** - * 学生联系电话 - */ - private String phone; - - /** - * 学生身份证号 - */ - private String idCard; - - /** - * 创建时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime createTime; - - /** - * 更新时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime updateTime; - - /** - * 统计信息 - 总数 - */ - private Long totalCount; - - /** - * 统计信息 - 待审核数 - */ - private Long pendingCount; - - /** - * 统计信息 - 已通过数 - */ - private Long approvedCount; - - /** - * 统计信息 - 已拒绝数 - */ - private Long rejectedCount; - - /** - * 统计信息 - 已提交数 - */ - private Long submittedCount; - - /** - * 统计信息 - 草稿数 - */ - private Long draftCount; - - /** - * 创建者 - */ - private Long createBy; - - /** - * 更新者 - */ - private Long updateBy; - - // 手动添加setter方法以确保编译通过 - public void setBatchId(Long batchId) { - this.batchId = batchId; - } - - public void setTotalCount(Long totalCount) { - this.totalCount = totalCount; - } - - public void setPendingCount(Long pendingCount) { - this.pendingCount = pendingCount; - } - - public void setApprovedCount(Long approvedCount) { - this.approvedCount = approvedCount; - } - - public void setRejectedCount(Long rejectedCount) { - this.rejectedCount = rejectedCount; - } - - public void setSubmittedCount(Long submittedCount) { - this.submittedCount = submittedCount; - } - - public void setDraftCount(Long draftCount) { - this.draftCount = draftCount; - } - - public void setStudentName(String studentName) { - this.studentName = studentName; - } - - public void setStudentNo(String studentNo) { - this.studentNo = studentNo; - } - - public void setClassCode(String classCode) { - this.classCode = classCode; - } - - public void setClassName(String className) { - this.className = className; - } - - public void setCollegeCode(String collegeCode) { - this.collegeCode = collegeCode; - } - - public void setCollegeName(String collegeName) { - this.collegeName = collegeName; - } - - public void setSubmissionStatus(String submissionStatus) { - this.submissionStatus = submissionStatus; - } - - public void setApprovalStatus(String approvalStatus) { - this.approvalStatus = approvalStatus; - } - - public void setSubmissionTime(LocalDateTime submissionTime) { - this.submissionTime = submissionTime; - } - - public void setApprovalTime(LocalDateTime approvalTime) { - this.approvalTime = approvalTime; - } - - public void setApprovalBy(Long approvalBy) { - this.approvalBy = approvalBy; - } - - public void setApprovalComments(String approvalComments) { - this.approvalComments = approvalComments; - } - - public void setUpdateTime(LocalDateTime updateTime) { - this.updateTime = updateTime; - } - - public void setCreateTime(LocalDateTime createTime) { - this.createTime = createTime; - } - - public void setCreateBy(Long createBy) { - this.createBy = createBy; - } - - public void setUpdateBy(Long updateBy) { - this.updateBy = updateBy; - } - - public void setId(Long id) { - this.id = id; - } - - public void setStudentId(Long studentId) { - this.studentId = studentId; - } - - public Long getCreateBy() { - return createBy; - } - - public void setCreateBy(Long createBy) { - this.createBy = createBy; - } - - public Long getUpdateBy() { - return updateBy; - } - - public void setUpdateBy(Long updateBy) { - this.updateBy = updateBy; - } - -} \ No newline at end of file diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgStudentInfoHistoryVo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgStudentInfoHistoryVo.java deleted file mode 100644 index 9146b368..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgStudentInfoHistoryVo.java +++ /dev/null @@ -1,163 +0,0 @@ -package org.dromara.xg.domain.vo; - -import org.dromara.xg.domain.XgStudentInfoHistory; -import cn.idev.excel.annotation.ExcelIgnoreUnannotated; -import cn.idev.excel.annotation.ExcelProperty; -import org.dromara.common.excel.annotation.ExcelDictFormat; -import org.dromara.common.excel.convert.ExcelDictConvert; -import lombok.Data; -import java.io.Serial; -import java.io.Serializable; -import java.time.LocalDateTime; - -/** - * 学生信息历史视图对象 xg_student_info_history - * - * @author wuzilong - * @date 2025-01-08 - */ -@Data -@ExcelIgnoreUnannotated -public class XgStudentInfoHistoryVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 历史记录ID - */ - @ExcelProperty(value = "历史记录ID") - private Long historyId; - - /** - * 学生ID - */ - @ExcelProperty(value = "学生ID") - private Long studentId; - - /** - * 学号 - */ - @ExcelProperty(value = "学号") - private String studentNo; - - /** - * 变更类型 - */ - @ExcelProperty(value = "变更类型", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "xg_change_type") - private String changeType; - - /** - * 变更字段 - */ - @ExcelProperty(value = "变更字段") - private String changeField; - - /** - * 变更前值 - */ - @ExcelProperty(value = "变更前值") - private String oldValue; - - /** - * 变更后值 - */ - @ExcelProperty(value = "变更后值") - private String newValue; - - /** - * 变更时间 - */ - @ExcelProperty(value = "变更时间") - private LocalDateTime changeTime; - - /** - * 变更原因 - */ - @ExcelProperty(value = "变更原因") - private String changeReason; - - /** - * 操作人姓名 - */ - @ExcelProperty(value = "操作人") - private String operatorName; - - /** - * 批次ID - */ - @ExcelProperty(value = "批次ID") - private Long batchId; - - /** - * 批次编号 - */ - @ExcelProperty(value = "批次编号") - private String batchCode; - - /** - * 审核状态 - */ - @ExcelProperty(value = "审核状态", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "xg_audit_status") - private String auditStatus; - - /** - * 审核时间 - */ - @ExcelProperty(value = "审核时间") - private LocalDateTime auditTime; - - /** - * 审核人姓名 - */ - @ExcelProperty(value = "审核人") - private String auditorName; - - /** - * 审核意见 - */ - @ExcelProperty(value = "审核意见") - private String auditComment; - - /** - * 数据来源 - */ - @ExcelProperty(value = "数据来源") - private String dataSource; - - /** - * 是否生效 - */ - @ExcelProperty(value = "是否生效", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "sys_yes_no") - private Boolean isEffective; - - /** - * 备注 - */ - @ExcelProperty(value = "备注") - private String remark; - - /** - * 创建者 - */ - private Long createBy; - - /** - * 创建时间 - */ - private LocalDateTime createTime; - - /** - * 更新者 - */ - private Long updateBy; - - /** - * 更新时间 - */ - private LocalDateTime updateTime; - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgStudentInfoVo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgStudentInfoVo.java deleted file mode 100644 index 3aa915e9..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgStudentInfoVo.java +++ /dev/null @@ -1,495 +0,0 @@ -package org.dromara.xg.domain.vo; - -import java.util.Date; -import java.math.BigDecimal; -import com.fasterxml.jackson.annotation.JsonFormat; -import org.dromara.xg.domain.XgStudentInfo; -import cn.idev.excel.annotation.ExcelIgnoreUnannotated; -import cn.idev.excel.annotation.ExcelProperty; -import org.dromara.common.excel.annotation.ExcelDictFormat; -import org.dromara.common.excel.convert.ExcelDictConvert; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; - -/** - * 学生信息视图对象 xg_student_info - * - * @author Cursor AI - * @date 2025-01-12 - */ -@Data -@ExcelIgnoreUnannotated -@AutoMapper(target = XgStudentInfo.class) -public class XgStudentInfoVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键ID - */ - @ExcelProperty(value = "主键ID") - private Long id; - - /** - * 学号 - */ - @ExcelProperty(value = "学号") - private String studentNo; - - /** - * 身份证号 - */ - @ExcelProperty(value = "身份证号") - private String idCard; - - /** - * 姓名 - */ - @ExcelProperty(value = "姓名") - private String name; - - /** - * 姓名拼音 - */ - @ExcelProperty(value = "姓名拼音") - private String namePinyin; - - /** - * 性别 - */ - @ExcelProperty(value = "性别", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "xg_student_gender") - private String gender; - - /** - * 出生日期 - */ - @ExcelProperty(value = "出生日期") - @JsonFormat(pattern = "yyyy-MM-dd") - private Date birthDate; - - /** - * 民族 - */ - @ExcelProperty(value = "民族") - private String nation; - - /** - * 政治面貌 - */ - @ExcelProperty(value = "政治面貌", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "xg_political_status") - private String politicalStatus; - - /** - * 学籍状态 - */ - @ExcelProperty(value = "学籍状态", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "xg_student_status") - private String studentStatus; - - /** - * 入学年份 - */ - @ExcelProperty(value = "入学年份") - private Integer enrollmentYear; - - /** - * 入学日期 - */ - @ExcelProperty(value = "入学日期") - @JsonFormat(pattern = "yyyy-MM-dd") - private Date enrollmentDate; - - /** - * 学制(年) - */ - @ExcelProperty(value = "学制") - private Integer schoolSystem; - - /** - * 学历层次 - */ - @ExcelProperty(value = "学历层次") - private String educationLevel; - - /** - * 培养方式 - */ - @ExcelProperty(value = "培养方式", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "xg_training_type") - private String trainingType; - - /** - * 专业代码 - */ - @ExcelProperty(value = "专业代码") - private String majorCode; - - /** - * 专业名称 - */ - @ExcelProperty(value = "专业名称") - private String majorName; - - /** - * 班级代码 - */ - @ExcelProperty(value = "班级代码") - private String classCode; - - /** - * 班级名称 - */ - @ExcelProperty(value = "班级名称") - private String className; - - /** - * 学院代码 - */ - @ExcelProperty(value = "学院代码") - private String collegeCode; - - /** - * 学院名称 - */ - @ExcelProperty(value = "学院名称") - private String collegeName; - - /** - * 手机号码 - */ - @ExcelProperty(value = "手机号码") - private String phone; - - /** - * 电子邮箱 - */ - @ExcelProperty(value = "电子邮箱") - private String email; - - /** - * QQ号码 - */ - @ExcelProperty(value = "QQ号码") - private String qq; - - /** - * 微信号 - */ - @ExcelProperty(value = "微信号") - private String wechat; - - /** - * 现住址 - */ - @ExcelProperty(value = "现住址") - private String currentAddress; - - /** - * 家庭地址 - */ - @ExcelProperty(value = "家庭地址") - private String homeAddress; - - /** - * 户籍所在地 - */ - @ExcelProperty(value = "户籍所在地") - private String domicilePlace; - - /** - * 邮政编码 - */ - @ExcelProperty(value = "邮政编码") - private String postalCode; - - /** - * 紧急联系人姓名 - */ - @ExcelProperty(value = "紧急联系人") - private String emergencyContactName; - - /** - * 紧急联系人关系 - */ - @ExcelProperty(value = "紧急联系人关系") - private String emergencyContactRelation; - - /** - * 紧急联系人电话 - */ - @ExcelProperty(value = "紧急联系人电话") - private String emergencyContactPhone; - - /** - * 父亲姓名 - */ - @ExcelProperty(value = "父亲姓名") - private String fatherName; - - /** - * 父亲联系电话 - */ - @ExcelProperty(value = "父亲联系电话") - private String fatherPhone; - - /** - * 父亲工作单位 - */ - @ExcelProperty(value = "父亲工作单位") - private String fatherWorkUnit; - - /** - * 母亲姓名 - */ - @ExcelProperty(value = "母亲姓名") - private String motherName; - - /** - * 母亲联系电话 - */ - @ExcelProperty(value = "母亲联系电话") - private String motherPhone; - - /** - * 母亲工作单位 - */ - @ExcelProperty(value = "母亲工作单位") - private String motherWorkUnit; - - /** - * 身高(cm) - */ - @ExcelProperty(value = "身高(cm)") - private Integer height; - - /** - * 体重(kg) - */ - @ExcelProperty(value = "体重(kg)") - private BigDecimal weight; - - /** - * 血型 - */ - @ExcelProperty(value = "血型", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "xg_blood_type") - private String bloodType; - - /** - * 特殊体质或疾病 - */ - @ExcelProperty(value = "特殊体质或疾病") - private String specialCondition; - - /** - * 宗教信仰 - */ - @ExcelProperty(value = "宗教信仰") - private String religion; - - /** - * 特长爱好 - */ - @ExcelProperty(value = "特长爱好") - private String hobbies; - - /** - * 是否贫困生 - */ - @ExcelProperty(value = "是否贫困生") - private Integer isPoorStudent; - - /** - * 贫困等级 - */ - @ExcelProperty(value = "贫困等级") - private String povertyLevel; - - /** - * 是否享受助学金 - */ - @ExcelProperty(value = "是否享受助学金") - private Integer hasGrant; - - /** - * 助学金金额 - */ - @ExcelProperty(value = "助学金金额") - private BigDecimal grantAmount; - - /** - * 是否办理助学贷款 - */ - @ExcelProperty(value = "是否办理助学贷款") - private Integer hasLoan; - - /** - * 助学贷款金额 - */ - @ExcelProperty(value = "助学贷款金额") - private BigDecimal loanAmount; - - /** - * 银行卡号 - */ - @ExcelProperty(value = "银行卡号") - private String bankCardNo; - - /** - * 开户银行 - */ - @ExcelProperty(value = "开户银行") - private String bankName; - - /** - * 开户支行 - */ - @ExcelProperty(value = "开户支行") - private String bankBranch; - - /** - * 信息状态 - */ - @ExcelProperty(value = "信息状态", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "xg_info_status") - private String infoStatus; - - /** - * 数据来源 - */ - @ExcelProperty(value = "数据来源") - private String dataSource; - - /** - * 最后修改批次ID - */ - @ExcelProperty(value = "最后修改批次ID") - private Long lastBatchId; - - /** - * 最后审核时间 - */ - @ExcelProperty(value = "最后审核时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date lastAuditTime; - - /** - * 备注 - */ - @ExcelProperty(value = "备注") - private String remark; - - /** - * 创建时间 - */ - @ExcelProperty(value = "创建时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date createTime; - - /** - * 创建者 - */ - private Long createBy; - - /** - * 更新时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date updateTime; - - /** - * 更新者 - */ - private Long updateBy; - - /** - * 获取主键ID - */ - public Long getId() { - return this.id; - } - - /** - * 获取学生姓名 - */ - public String getName() { - return this.name; - } - - /** - * 获取学号 - */ - public String getStudentNo() { - return this.studentNo; - } - - /** - * 获取班级名称 - */ - public String getClassName() { - return this.className; - } - - /** - * 获取性别 - */ - public String getGender() { - return this.gender; - } - - /** - * 获取手机号 - */ - public String getPhone() { - return this.phone; - } - - /** - * 获取学院代码 - */ - public String getCollegeCode() { - return this.collegeCode; - } - - /** - * 获取学院名称 - */ - public String getCollegeName() { - return this.collegeName; - } - - /** - * 获取专业代码 - */ - public String getMajorCode() { - return this.majorCode; - } - - /** - * 获取专业名称 - */ - public String getMajorName() { - return this.majorName; - } - - /** - * 获取班级代码 - */ - public String getClassCode() { - return this.classCode; - } - - /** - * 获取学生状态 - */ - public String getStudentStatus() { - return this.studentStatus; - } - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgSystemConfigVo.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgSystemConfigVo.java deleted file mode 100644 index 3027fe8f..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgSystemConfigVo.java +++ /dev/null @@ -1,135 +0,0 @@ -package org.dromara.xg.domain.vo; - -import org.dromara.xg.domain.XgSystemConfig; -import cn.idev.excel.annotation.ExcelIgnoreUnannotated; -import cn.idev.excel.annotation.ExcelProperty; -import org.dromara.common.excel.annotation.ExcelDictFormat; -import org.dromara.common.excel.convert.ExcelDictConvert; -import lombok.Data; -import java.io.Serial; -import java.io.Serializable; -import java.time.LocalDateTime; - -/** - * 系统配置视图对象 xg_system_config - * - * @author wuzilong - * @date 2025-01-08 - */ -@Data -@ExcelIgnoreUnannotated -public class XgSystemConfigVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 配置ID - */ - @ExcelProperty(value = "配置ID") - private Long configId; - - /** - * 配置键 - */ - @ExcelProperty(value = "配置键") - private String configKey; - - /** - * 配置名称 - */ - @ExcelProperty(value = "配置名称") - private String configName; - - /** - * 配置值 - */ - @ExcelProperty(value = "配置值") - private String configValue; - - /** - * 配置类型 - */ - @ExcelProperty(value = "配置类型", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "xg_config_type") - private String configType; - - /** - * 配置分组 - */ - @ExcelProperty(value = "配置分组") - private String configGroup; - - /** - * 配置描述 - */ - @ExcelProperty(value = "配置描述") - private String configDescription; - - /** - * 默认值 - */ - @ExcelProperty(value = "默认值") - private String defaultValue; - - /** - * 是否系统内置 - */ - @ExcelProperty(value = "是否系统内置", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "sys_yes_no") - private Boolean isSystem; - - /** - * 是否可编辑 - */ - @ExcelProperty(value = "是否可编辑", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "sys_yes_no") - private Boolean isEditable; - - /** - * 是否可删除 - */ - @ExcelProperty(value = "是否可删除", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "sys_yes_no") - private Boolean isDeletable; - - /** - * 排序号 - */ - @ExcelProperty(value = "排序号") - private Integer sortOrder; - - /** - * 状态 - */ - @ExcelProperty(value = "状态", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "sys_normal_disable") - private String status; - - /** - * 备注 - */ - @ExcelProperty(value = "备注") - private String remark; - - /** - * 创建者 - */ - private Long createBy; - - /** - * 创建时间 - */ - private LocalDateTime createTime; - - /** - * 更新者 - */ - private Long updateBy; - - /** - * 更新时间 - */ - private LocalDateTime updateTime; - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgAcademicYearMapper.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgAcademicYearMapper.java deleted file mode 100644 index 24fc6f41..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgAcademicYearMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.dromara.xg.mapper; - -import org.dromara.xg.domain.XgAcademicYear; -import org.dromara.xg.domain.vo.XgAcademicYearVo; -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; - -/** - * 学年管理Mapper接口 - * - * @author wuzilong - * @date 2025-01-08 - */ -public interface XgAcademicYearMapper extends BaseMapperPlus { - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgAuditRecordMapper.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgAuditRecordMapper.java deleted file mode 100644 index 0576ff78..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgAuditRecordMapper.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.dromara.xg.mapper; - -import org.dromara.xg.domain.XgAuditRecord; -import org.dromara.xg.domain.vo.XgAuditRecordVo; -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; - -import java.util.List; -import java.util.Map; - -/** - * 审核记录Mapper接口 - * - * @author Cursor AI - * @date 2025-01-12 - */ -public interface XgAuditRecordMapper extends BaseMapperPlus { - - /** - * 根据业务ID查询审核记录 - * - * @param businessType 业务类型 - * @param businessId 业务ID - * @return 审核记录列表 - */ - List selectByBusinessId(String businessType, Long businessId); - - /** - * 查询用户待审核的记录 - * - * @param userId 用户ID - * @return 待审核记录列表 - */ - List selectPendingAuditsByUser(Long userId); - - /** - * 查询学生的审核记录 - * - * @param studentId 学生ID - * @return 审核记录列表 - */ - List selectByStudentId(Long studentId); - - /** - * 查询批次的审核记录 - * - * @param batchId 批次ID - * @return 审核记录列表 - */ - List selectByBatchId(Long batchId); - - /** - * 查询审核统计信息 - * - * @param params 查询参数 - * @return 统计信息 - */ - List> selectAuditStatistics(Map params); - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgBatchOperationLogMapper.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgBatchOperationLogMapper.java deleted file mode 100644 index 0b53da04..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgBatchOperationLogMapper.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.dromara.xg.mapper; - -import org.dromara.xg.domain.XgBatchOperationLog; -import org.dromara.xg.domain.vo.XgBatchOperationLogVo; -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; - -import java.util.List; - -/** - * 批次操作日志Mapper接口 - * - * @author Cursor AI - * @date 2025-01-13 - */ -public interface XgBatchOperationLogMapper extends BaseMapperPlus { - - /** - * 根据批次ID查询操作日志 - * - * @param batchId 批次ID - * @return 操作日志列表 - */ - List selectByBatchId(Long batchId); - - /** - * 根据操作类型查询日志 - * - * @param operationType 操作类型 - * @return 操作日志列表 - */ - List selectByOperationType(String operationType); - - /** - * 根据操作人查询日志 - * - * @param operatorId 操作人ID - * @return 操作日志列表 - */ - List selectByOperatorId(Long operatorId); - - /** - * 查询最近的操作日志 - * - * @param limit 限制数量 - * @return 操作日志列表 - */ - List selectRecentLogs(int limit); - - /** - * 根据批次ID和操作类型查询日志 - * - * @param batchId 批次ID - * @param operationType 操作类型 - * @return 操作日志列表 - */ - List selectByBatchIdAndOperationType(Long batchId, String operationType); -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgBatchPermissionMapper.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgBatchPermissionMapper.java deleted file mode 100644 index 278ccd9c..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgBatchPermissionMapper.java +++ /dev/null @@ -1,76 +0,0 @@ -package org.dromara.xg.mapper; - -import org.dromara.xg.domain.XgBatchPermission; -import org.dromara.xg.domain.vo.XgBatchPermissionVo; -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; - -import java.util.List; - -/** - * 批次权限Mapper接口 - * - * @author Cursor AI - * @date 2025-01-13 - */ -public interface XgBatchPermissionMapper extends BaseMapperPlus { - - /** - * 根据批次ID查询权限配置 - * - * @param batchId 批次ID - * @return 权限配置列表 - */ - List selectByBatchId(Long batchId); - - /** - * 根据角色ID查询权限配置 - * - * @param roleId 角色ID - * @return 权限配置列表 - */ - List selectByRoleId(Long roleId); - - /** - * 根据批次ID和角色ID查询权限配置 - * - * @param batchId 批次ID - * @param roleId 角色ID - * @return 权限配置 - */ - XgBatchPermissionVo selectByBatchIdAndRoleId(Long batchId, Long roleId); - - /** - * 根据权限类型查询权限配置 - * - * @param permissionType 权限类型 - * @return 权限配置列表 - */ - List selectByPermissionType(String permissionType); - - /** - * 查询活跃的权限配置 - * - * @param batchId 批次ID - * @return 活跃权限配置列表 - */ - List selectActivePermissions(Long batchId); - - /** - * 根据用户ID查询用户在批次中的权限 - * - * @param batchId 批次ID - * @param userId 用户ID - * @return 用户权限配置 - */ - XgBatchPermissionVo selectUserPermission(Long batchId, Long userId); - - /** - * 批量更新权限状态 - * - * @param batchId 批次ID - * @param roleIds 角色ID列表 - * @param isActive 是否活跃 - * @return 更新数量 - */ - int batchUpdatePermissionStatus(Long batchId, List roleIds, Integer isActive); -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgBatchStudentRelationMapper.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgBatchStudentRelationMapper.java deleted file mode 100644 index 511bbd54..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgBatchStudentRelationMapper.java +++ /dev/null @@ -1,161 +0,0 @@ -package org.dromara.xg.mapper; - -import org.dromara.xg.domain.XgBatchStudentRelation; -import org.dromara.xg.domain.vo.XgBatchStudentRelationVo; -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; - -import java.util.List; -import java.util.Map; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; - -/** - * 批次学生关联Mapper接口 - * - * @author Cursor AI - * @date 2025-01-13 - */ -public interface XgBatchStudentRelationMapper extends BaseMapperPlus { - - /** - * 根据批次ID查询学生关联列表 - * - * @param batchId 批次ID - * @return 学生关联列表 - */ - List selectByBatchId(Long batchId); - - /** - * 根据学生ID查询批次关联列表 - * - * @param studentId 学生ID - * @return 批次关联列表 - */ - List selectByStudentId(Long studentId); - - /** - * 根据批次ID和学生ID查询关联信息 - * - * @param batchId 批次ID - * @param studentId 学生ID - * @return 关联信息 - */ - XgBatchStudentRelationVo selectByBatchAndStudent(Long batchId, Long studentId); - - /** - * 根据学号查询批次关联列表 - * - * @param studentNumber 学号 - * @return 批次关联列表 - */ - List selectByStudentNumber(String studentNumber); - - /** - * 查询批次学生统计信息 - * - * @param batchId 批次ID - * @return 统计信息 - */ - Map selectBatchStudentStatistics(Long batchId); - - /** - * 查询待审核的学生列表 - * - * @param batchId 批次ID - * @return 待审核学生列表 - */ - List selectPendingApprovalStudents(Long batchId); - - /** - * 批量更新学生提交状态 - * - * @param batchId 批次ID - * @param studentIds 学生ID列表 - * @param status 状态 - * @return 更新数量 - */ - int batchUpdateSubmissionStatus(Long batchId, List studentIds, String status); - - /** - * 批量更新学生审核状态 - * - * @param batchId 批次ID - * @param studentIds 学生ID列表 - * @param status 状态 - * @param approvalBy 审核人 - * @param approvalComments 审核意见 - * @return 更新数量 - */ - int batchUpdateApprovalStatus(Long batchId, List studentIds, String status, - Long approvalBy, String approvalComments); - - /** - * 查询学生在批次中的进度信息 - * - * @param studentId 学生ID - * @param batchId 批次ID - * @return 进度信息 - */ - Map selectStudentProgress(Long studentId, Long batchId); - - /** - * 查询批次完成情况统计 - * - * @param batchId 批次ID - * @return 完成情况统计 - */ - Map selectBatchCompletionStatistics(Long batchId); - - /** - * 查询学生批次历史记录 - * - * @param studentId 学生ID - * @return 历史记录 - */ - List selectStudentBatchHistory(Long studentId); - - /** - * 根据提交状态查询学生列表 - * - * @param batchId 批次ID - * @param submissionStatus 提交状态 - * @return 学生列表 - */ - List selectBySubmissionStatus(Long batchId, String submissionStatus); - - /** - * 根据审核状态查询学生列表 - * - * @param batchId 批次ID - * @param approvalStatus 审核状态 - * @return 学生列表 - */ - List selectByApprovalStatus(Long batchId, String approvalStatus); - - /** - * 分页查询待审批的学生信息 - * - * @param page 分页对象 - * @param queryWrapper 查询条件 - * @return 待审批学生信息列表 - */ - Page selectPendingApprovalPage(Page page, LambdaQueryWrapper queryWrapper); - - /** - * 分页查询已审批的学生信息 - * - * @param page 分页对象 - * @param queryWrapper 查询条件 - * @return 已审批学生信息列表 - */ - Page selectApprovedPage(Page page, LambdaQueryWrapper queryWrapper); - - /** - * 根据批次ID和学生ID查询关系 - * - * @param batchId 批次ID - * @param studentId 学生ID - * @return 批次学生关系 - */ - XgBatchStudentRelation selectByBatchIdAndStudentId(Long batchId, Long studentId); -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgBusinessPeriodMapper.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgBusinessPeriodMapper.java deleted file mode 100644 index 92df27ad..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgBusinessPeriodMapper.java +++ /dev/null @@ -1,119 +0,0 @@ -package org.dromara.xg.mapper; - -import org.dromara.xg.domain.XgBusinessPeriod; -import org.dromara.xg.domain.vo.XgBusinessPeriodVo; -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; -import org.apache.ibatis.annotations.Param; - -import java.time.LocalDateTime; -import java.util.List; - -/** - * 业务期间Mapper接口 - * - * @author Cursor AI - * @date 2025-01-13 - */ -public interface XgBusinessPeriodMapper extends BaseMapperPlus { - - /** - * 根据批次ID查询业务期间 - * - * @param batchId 批次ID - * @return 业务期间列表 - */ - List selectByBatchId(Long batchId); - - /** - * 根据期间类型查询业务期间 - * - * @param periodType 期间类型 - * @return 业务期间列表 - */ - List selectByPeriodType(String periodType); - - /** - * 查询当前活跃的业务期间 - * - * @param batchId 批次ID - * @return 活跃业务期间列表 - */ - List selectActivePeriods(Long batchId); - - /** - * 根据目标角色查询业务期间 - * - * @param batchId 批次ID - * @param targetRole 目标角色 - * @return 业务期间列表 - */ - List selectByTargetRole(Long batchId, String targetRole); - - /** - * 查询当前时间有效的业务期间 - * - * @param batchId 批次ID - * @return 有效业务期间列表 - */ - List selectCurrentValidPeriods(Long batchId); - - /** - * 根据批次ID和期间类型查询业务期间 - * - * @param batchId 批次ID - * @param periodType 期间类型 - * @return 业务期间 - */ - XgBusinessPeriodVo selectByBatchIdAndPeriodType(Long batchId, String periodType); - - /** - * 批量更新业务期间状态 - * - * @param batchId 批次ID - * @param periodIds 期间ID列表 - * @param isActive 是否活跃 - * @return 更新数量 - */ - int batchUpdatePeriodStatus(Long batchId, List periodIds, Integer isActive); - - /** - * 查询所有活跃的业务期间 - * - * @return 活跃业务期间列表 - */ - List selectActivePeriods(); - - /** - * 根据批次ID查询活跃的业务期间 - * - * @param batchId 批次ID - * @return 活跃业务期间列表 - */ - List selectActivePeriodsByBatchId(Long batchId); - - /** - * 检查时间冲突 - * - * @param batchId 批次ID - * @param startTime 开始时间 - * @param endTime 结束时间 - * @return 冲突数量 - */ - int checkTimeConflict(@Param("batchId") Long batchId, - @Param("startTime") LocalDateTime startTime, - @Param("endTime") LocalDateTime endTime); - - /** - * 检查时间冲突(排除自己) - * - * @param batchId 批次ID - * @param excludeId 排除的ID - * @param startTime 开始时间 - * @param endTime 结束时间 - * @return 冲突数量 - */ - int checkTimeConflictExcludeSelf(@Param("batchId") Long batchId, - @Param("excludeId") Long excludeId, - @Param("startTime") LocalDateTime startTime, - @Param("endTime") LocalDateTime endTime); -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgClassCadreMapper.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgClassCadreMapper.java deleted file mode 100644 index a60b6ca0..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgClassCadreMapper.java +++ /dev/null @@ -1,158 +0,0 @@ -package org.dromara.xg.mapper; - -import org.dromara.xg.domain.XgClassCadre; -import org.dromara.xg.domain.vo.XgClassCadreVo; -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; -import org.apache.ibatis.annotations.Param; -import java.util.List; -import java.util.Date; - -/** - * 班级干部信息Mapper接口 - * - * @author Cursor AI - * @date 2025-01-09 - */ -public interface XgClassCadreMapper extends BaseMapperPlus { - - /** - * 查询班级干部信息列表 - * - * @param xgClassCadre 班级干部信息 - * @return 班级干部信息集合 - */ - List selectXgClassCadreList(XgClassCadre xgClassCadre); - - /** - * 根据班级ID查询班干部列表 - * - * @param classId 班级ID - * @return 班干部列表 - */ - List selectCadresByClassId(@Param("classId") Long classId); - - /** - * 根据学生ID查询班干部信息 - * - * @param studentId 学生ID - * @return 班干部信息列表 - */ - List selectCadresByStudentId(@Param("studentId") Long studentId); - - /** - * 查询当前在任班干部列表 - * - * @param classId 班级ID(可选) - * @return 当前在任班干部列表 - */ - List selectCurrentCadres(@Param("classId") Long classId); - - /** - * 根据职务编码查询班干部 - * - * @param classId 班级ID - * @param positionCode 职务编码 - * @return 班干部信息 - */ - XgClassCadreVo selectCadreByPosition(@Param("classId") Long classId, @Param("positionCode") String positionCode); - - /** - * 查询即将到期的班干部列表 - * - * @param days 提前天数 - * @return 即将到期的班干部列表 - */ - List selectExpiringCadres(@Param("days") Integer days); - - /** - * 查询已到期的班干部列表 - * - * @return 已到期的班干部列表 - */ - List selectExpiredCadres(); - - /** - * 根据学院查询班干部统计 - * - * @param collegeName 学院名称 - * @return 班干部统计信息 - */ - List selectCadresByCollege(@Param("collegeName") String collegeName); - - /** - * 根据年级查询班干部统计 - * - * @param grade 年级 - * @return 班干部统计信息 - */ - List selectCadresByGrade(@Param("grade") String grade); - - /** - * 查询班干部任期统计 - * - * @param startDate 开始日期 - * @param endDate 结束日期 - * @return 任期统计信息 - */ - List selectCadreTermStatistics(@Param("startDate") Date startDate, @Param("endDate") Date endDate); - - /** - * 检查职务是否已被占用 - * - * @param classId 班级ID - * @param positionCode 职务编码 - * @param excludeId 排除的记录ID - * @return 是否已被占用 - */ - boolean checkPositionOccupied(@Param("classId") Long classId, @Param("positionCode") String positionCode, @Param("excludeId") Long excludeId); - - /** - * 检查学生是否已有其他职务 - * - * @param studentId 学生ID - * @param excludeId 排除的记录ID - * @return 是否已有其他职务 - */ - boolean checkStudentHasOtherPosition(@Param("studentId") Long studentId, @Param("excludeId") Long excludeId); - - /** - * 更新班干部状态为历史记录 - * - * @param cadreId 班干部ID - * @return 更新结果 - */ - int updateCadreToHistory(@Param("cadreId") Long cadreId); - - /** - * 批量更新班干部状态 - * - * @param cadreIds 班干部ID列表 - * @param status 新状态 - * @return 更新结果 - */ - int batchUpdateCadreStatus(@Param("cadreIds") List cadreIds, @Param("status") String status); - - /** - * 根据职务级别查询班干部 - * - * @param positionLevel 职务级别 - * @return 班干部列表 - */ - List selectCadresByPositionLevel(@Param("positionLevel") Integer positionLevel); - - /** - * 查询班干部工作表现统计 - * - * @param performance 工作表现 - * @return 统计结果 - */ - List selectCadresByPerformance(@Param("performance") String performance); - - /** - * 查询班级干部完整信息(包含关联数据) - * - * @param id 班干部ID - * @return 班干部完整信息 - */ - XgClassCadreVo selectCadreWithDetails(@Param("id") Long id); -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgClassInfoMapper.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgClassInfoMapper.java deleted file mode 100644 index 5904d7e2..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgClassInfoMapper.java +++ /dev/null @@ -1,65 +0,0 @@ -package org.dromara.xg.mapper; - -import org.dromara.xg.domain.XgClassInfo; -import org.dromara.xg.domain.vo.XgClassInfoVo; -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; - -import java.util.List; -import java.util.Map; - -/** - * 班级信息Mapper接口 - * - * @author Cursor AI - * @date 2025-01-12 - */ -public interface XgClassInfoMapper extends BaseMapperPlus { - - /** - * 根据班级代码查询班级信息 - * - * @param classCode 班级代码 - * @return 班级信息 - */ - XgClassInfoVo selectByClassCode(String classCode); - - /** - * 查询学院班级列表 - * - * @param collegeCode 学院代码 - * @return 班级列表 - */ - List selectByCollegeCode(String collegeCode); - - /** - * 查询辅导员负责的班级列表 - * - * @param counselorId 辅导员ID - * @return 班级列表 - */ - List selectByCounselorId(Long counselorId); - - /** - * 查询班主任负责的班级列表 - * - * @param classTeacherId 班主任ID - * @return 班级列表 - */ - List selectByClassTeacherId(Long classTeacherId); - - /** - * 查询班级选项列表(用于下拉框) - * - * @return 班级选项列表 - */ - List> selectClassOptions(); - - /** - * 更新班级人数统计 - * - * @param classId 班级ID - * @return 更新数量 - */ - int updateClassStudentCount(Long classId); - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgClassStudentMapper.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgClassStudentMapper.java deleted file mode 100644 index afd331f6..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgClassStudentMapper.java +++ /dev/null @@ -1,67 +0,0 @@ -package org.dromara.xg.mapper; - -import org.dromara.xg.domain.XgClassStudent; -import org.dromara.xg.domain.vo.XgClassStudentVo; -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; - -import java.util.List; -import java.util.Map; - -/** - * 班级学生关系Mapper接口 - * - * @author Cursor AI - * @date 2025-01-12 - */ -public interface XgClassStudentMapper extends BaseMapperPlus { - - /** - * 根据班级ID查询班级学生关系 - * - * @param classId 班级ID - * @return 班级学生关系列表 - */ - List selectByClassId(Long classId); - - /** - * 根据学生ID查询班级学生关系 - * - * @param studentId 学生ID - * @return 班级学生关系列表 - */ - List selectByStudentId(Long studentId); - - /** - * 查询学生当前班级关系 - * - * @param studentId 学生ID - * @return 当前班级关系 - */ - XgClassStudentVo selectCurrentClassByStudentId(Long studentId); - - /** - * 查询班级干部列表 - * - * @param classId 班级ID - * @return 班级干部列表 - */ - List selectClassOfficers(Long classId); - - /** - * 查询班级人员统计 - * - * @param classId 班级ID - * @return 人员统计信息 - */ - Map selectClassStudentStatistics(Long classId); - - /** - * 批量更新学生班级关系状态 - * - * @param studentIds 学生ID列表 - * @param relationStatus 关系状态 - * @return 更新数量 - */ - int batchUpdateRelationStatus(List studentIds, String relationStatus); - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgCollectionBatchMapper.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgCollectionBatchMapper.java deleted file mode 100644 index 1f919839..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgCollectionBatchMapper.java +++ /dev/null @@ -1,80 +0,0 @@ -package org.dromara.xg.mapper; - -import org.dromara.xg.domain.XgCollectionBatch; -import org.dromara.xg.domain.vo.XgCollectionBatchVo; -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; - -import java.util.List; -import java.util.Map; - -/** - * 信息采集批次Mapper接口 - * - * @author Cursor AI - * @date 2025-01-13 - */ -public interface XgCollectionBatchMapper extends BaseMapperPlus { - - /** - * 根据批次编码查询批次信息 - * - * @param batchCode 批次编码 - * @return 批次信息 - */ - XgCollectionBatchVo selectByBatchCode(String batchCode); - - /** - * 查询活跃批次列表 - * - * @return 活跃批次列表 - */ - List selectActiveBatches(); - - /** - * 查询批次统计信息 - * - * @param batchId 批次ID - * @return 统计信息 - */ - Map selectBatchStatistics(Long batchId); - - /** - * 查询学年批次列表 - * - * @param academicYear 学年 - * @return 批次列表 - */ - List selectByAcademicYear(String academicYear); - - /** - * 查询批次选项列表 - * - * @return 批次选项列表 - */ - List> selectBatchOptions(); - - /** - * 更新批次统计信息 - * - * @param batchId 批次ID - * @param statistics 统计信息 - * @return 更新数量 - */ - int updateBatchStatistics(Long batchId, Map statistics); - - /** - * 查询即将过期的批次 - * - * @param days 提前天数 - * @return 即将过期的批次列表 - */ - List selectExpiringBatches(int days); - - /** - * 查询批次详细信息(包含统计数据) - * - * @param batchId 批次ID - * @return 批次详细信息 - */ - XgCollectionBatchVo selectBatchWithStatistics(Long batchId); -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgDictDataMapper.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgDictDataMapper.java deleted file mode 100644 index a3a81b82..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgDictDataMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.dromara.xg.mapper; - -import org.dromara.xg.domain.XgDictData; -import org.dromara.xg.domain.vo.XgDictDataVo; -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; - -/** - * 数据字典Mapper接口 - * - * @author wuzilong - * @date 2025-01-08 - */ -public interface XgDictDataMapper extends BaseMapperPlus { - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgNoticeMapper.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgNoticeMapper.java deleted file mode 100644 index 8275af61..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgNoticeMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.dromara.xg.mapper; - -import org.dromara.xg.domain.XgNotice; -import org.dromara.xg.domain.vo.XgNoticeVo; -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; - -/** - * 通知公告Mapper接口 - * - * @author wuzilong - * @date 2025-01-08 - */ -public interface XgNoticeMapper extends BaseMapperPlus { - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgNoticeReadMapper.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgNoticeReadMapper.java deleted file mode 100644 index 995ddaff..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgNoticeReadMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.dromara.xg.mapper; - -import org.dromara.xg.domain.XgNoticeRead; -import org.dromara.xg.domain.vo.XgNoticeReadVo; -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; - -/** - * 通知阅读记录Mapper接口 - * - * @author wuzilong - * @date 2025-01-08 - */ -public interface XgNoticeReadMapper extends BaseMapperPlus { - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgSemesterMapper.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgSemesterMapper.java deleted file mode 100644 index 821cf460..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgSemesterMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.dromara.xg.mapper; - -import org.dromara.xg.domain.XgSemester; -import org.dromara.xg.domain.vo.XgSemesterVo; -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; - -/** - * 学期管理Mapper接口 - * - * @author wuzilong - * @date 2025-01-08 - */ -public interface XgSemesterMapper extends BaseMapperPlus { - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgStudentInfoHistoryMapper.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgStudentInfoHistoryMapper.java deleted file mode 100644 index 7412b2e8..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgStudentInfoHistoryMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.dromara.xg.mapper; - -import org.dromara.xg.domain.XgStudentInfoHistory; -import org.dromara.xg.domain.vo.XgStudentInfoHistoryVo; -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; - -/** - * 学生信息历史Mapper接口 - * - * @author wuzilong - * @date 2025-01-08 - */ -public interface XgStudentInfoHistoryMapper extends BaseMapperPlus { - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgStudentInfoMapper.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgStudentInfoMapper.java deleted file mode 100644 index c6b9c5f8..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgStudentInfoMapper.java +++ /dev/null @@ -1,75 +0,0 @@ -package org.dromara.xg.mapper; - -import org.dromara.xg.domain.XgStudentInfo; -import org.dromara.xg.domain.vo.XgStudentInfoVo; -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; - -import java.util.List; -import java.util.Map; - -/** - * 学生信息Mapper接口 - * - * @author Cursor AI - * @date 2025-01-12 - */ -public interface XgStudentInfoMapper extends BaseMapperPlus { - - /** - * 根据学号查询学生信息 - * - * @param studentNo 学号 - * @return 学生信息 - */ - XgStudentInfoVo selectByStudentNo(String studentNo); - - /** - * 根据身份证号查询学生信息 - * - * @param idCard 身份证号 - * @return 学生信息 - */ - XgStudentInfoVo selectByIdCard(String idCard); - - /** - * 查询班级学生列表 - * - * @param classCode 班级代码 - * @return 学生列表 - */ - List selectByClassCode(String classCode); - - /** - * 根据班级ID查询学生列表 - * - * @param classId 班级ID - * @return 学生列表 - */ - List selectByClassId(Long classId); - - /** - * 查询学院学生列表 - * - * @param collegeCode 学院代码 - * @return 学生列表 - */ - List selectByCollegeCode(String collegeCode); - - /** - * 查询学生统计信息 - * - * @param params 查询参数 - * @return 统计信息 - */ - List> selectStudentStatistics(Map params); - - /** - * 批量更新学生信息状态 - * - * @param studentIds 学生ID列表 - * @param infoStatus 信息状态 - * @return 更新数量 - */ - int batchUpdateInfoStatus(List studentIds, String infoStatus); - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgSystemConfigMapper.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgSystemConfigMapper.java deleted file mode 100644 index 2a68dd8e..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgSystemConfigMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.dromara.xg.mapper; - -import org.dromara.xg.domain.XgSystemConfig; -import org.dromara.xg.domain.vo.XgSystemConfigVo; -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; - -/** - * 系统配置Mapper接口 - * - * @author wuzilong - * @date 2025-01-08 - */ -public interface XgSystemConfigMapper extends BaseMapperPlus { - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IStudentInfoPermissionService.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IStudentInfoPermissionService.java deleted file mode 100644 index b4ca0171..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IStudentInfoPermissionService.java +++ /dev/null @@ -1,202 +0,0 @@ -package org.dromara.xg.service; - -import org.dromara.xg.domain.vo.XgCollectionBatchVo; - -/** - * 学生信息权限控制服务接口 - * - * @author Cursor AI - * @date 2025-01-13 - */ -public interface IStudentInfoPermissionService { - - /** - * 检查学生是否可以修改信息 - * - * @param studentId 学生ID - * @return 是否可以修改 - */ - boolean canEditStudentInfo(Long studentId); - - /** - * 检查学生是否可以修改信息(详细信息) - * - * @param studentId 学生ID - * @return 权限检查结果 - */ - StudentPermissionResult checkStudentPermission(Long studentId); - - /** - * 检查当前是否有活跃批次 - * - * @return 当前活跃批次 - */ - XgCollectionBatchVo getCurrentActiveBatch(); - - /** - * 检查学生是否符合批次条件 - * - * @param studentId 学生ID - * @param batchId 批次ID - * @return 是否符合条件 - */ - boolean isStudentInBatch(Long studentId, Long batchId); - - /** - * 记录学生信息修改日志 - * - * @param studentId 学生ID - * @param batchId 批次ID - * @param operation 操作类型 - * @param description 操作描述 - */ - void logStudentInfoChange(Long studentId, Long batchId, String operation, String description); - - /** - * 学生提交信息 - * - * @param studentId 学生ID - * @param batchId 批次ID - * @return 提交结果 - */ - boolean submitStudentInfo(Long studentId, Long batchId); - - /** - * 获取学生在批次中的统计信息 - * - * @param studentId 学生ID - * @param batchId 批次ID - * @return 统计信息 - */ - StudentBatchStatistics getStudentBatchStatistics(Long studentId, Long batchId); - - /** - * 学生权限检查结果 - */ - class StudentPermissionResult { - private boolean canEdit; - private Long batchId; - private String batchName; - private String message; - private String reason; - - public StudentPermissionResult(boolean canEdit, Long batchId, String batchName, String message, String reason) { - this.canEdit = canEdit; - this.batchId = batchId; - this.batchName = batchName; - this.message = message; - this.reason = reason; - } - - // Getters and setters - public boolean isCanEdit() { - return canEdit; - } - - public void setCanEdit(boolean canEdit) { - this.canEdit = canEdit; - } - - public Long getBatchId() { - return batchId; - } - - public void setBatchId(Long batchId) { - this.batchId = batchId; - } - - public String getBatchName() { - return batchName; - } - - public void setBatchName(String batchName) { - this.batchName = batchName; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public String getReason() { - return reason; - } - - public void setReason(String reason) { - this.reason = reason; - } - } - - /** - * 学生批次统计信息 - */ - class StudentBatchStatistics { - private Long studentId; - private Long batchId; - private String batchName; - private boolean hasSubmitted; - private java.util.Date submitTime; - private java.util.Date lastEditTime; - private int editCount; - - // Getters and setters - public Long getStudentId() { - return studentId; - } - - public void setStudentId(Long studentId) { - this.studentId = studentId; - } - - public Long getBatchId() { - return batchId; - } - - public void setBatchId(Long batchId) { - this.batchId = batchId; - } - - public String getBatchName() { - return batchName; - } - - public void setBatchName(String batchName) { - this.batchName = batchName; - } - - public boolean isHasSubmitted() { - return hasSubmitted; - } - - public void setHasSubmitted(boolean hasSubmitted) { - this.hasSubmitted = hasSubmitted; - } - - public java.util.Date getSubmitTime() { - return submitTime; - } - - public void setSubmitTime(java.util.Date submitTime) { - this.submitTime = submitTime; - } - - public java.util.Date getLastEditTime() { - return lastEditTime; - } - - public void setLastEditTime(java.util.Date lastEditTime) { - this.lastEditTime = lastEditTime; - } - - public int getEditCount() { - return editCount; - } - - public void setEditCount(int editCount) { - this.editCount = editCount; - } - } -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgAcademicYearService.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgAcademicYearService.java deleted file mode 100644 index 029ef7bc..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgAcademicYearService.java +++ /dev/null @@ -1,101 +0,0 @@ -package org.dromara.xg.service; - -import org.dromara.xg.domain.vo.XgAcademicYearVo; -import org.dromara.xg.domain.bo.XgAcademicYearBo; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.mybatis.core.page.PageQuery; - -import java.util.Collection; -import java.util.List; - -/** - * 学年管理Service接口 - * - * @author wuzilong - * @date 2025-01-08 - */ -public interface IXgAcademicYearService { - - /** - * 查询学年管理 - * - * @param id 主键 - * @return 学年管理 - */ - XgAcademicYearVo queryById(Long id); - - /** - * 分页查询学年管理列表 - * - * @param bo 查询条件 - * @param pageQuery 分页参数 - * @return 学年管理分页列表 - */ - TableDataInfo queryPageList(XgAcademicYearBo bo, PageQuery pageQuery); - - /** - * 查询符合条件的学年管理列表 - * - * @param bo 查询条件 - * @return 学年管理列表 - */ - List queryList(XgAcademicYearBo bo); - - /** - * 新增学年管理 - * - * @param bo 学年管理 - * @return 是否新增成功 - */ - Boolean insertByBo(XgAcademicYearBo bo); - - /** - * 修改学年管理 - * - * @param bo 学年管理 - * @return 是否修改成功 - */ - Boolean updateByBo(XgAcademicYearBo bo); - - /** - * 校验并批量删除学年管理 - * - * @param ids 待删除的主键集合 - * @param isValid 是否进行有效性校验 - * @return 是否删除成功 - */ - Boolean deleteWithValidByIds(Collection ids, Boolean isValid); - - /** - * 根据学年编码查询学年信息 - * - * @param yearCode 学年编码 - * @return 学年信息 - */ - XgAcademicYearVo queryByYearCode(String yearCode); - - /** - * 查询当前学年 - * - * @return 当前学年 - */ - XgAcademicYearVo queryCurrentYear(); - - /** - * 设置当前学年 - * - * @param yearId 学年ID - * @return 是否设置成功 - */ - Boolean setCurrentYear(Long yearId); - - /** - * 检查学年编码是否存在 - * - * @param yearCode 学年编码 - * @param yearId 学年ID(修改时使用) - * @return 是否存在 - */ - Boolean checkYearCodeExists(String yearCode, Long yearId); - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgBatchPermissionService.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgBatchPermissionService.java deleted file mode 100644 index bf23ab9e..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgBatchPermissionService.java +++ /dev/null @@ -1,193 +0,0 @@ -package org.dromara.xg.service; - -import org.dromara.xg.domain.vo.XgBatchPermissionVo; - -import java.time.LocalDateTime; -import java.util.List; - -/** - * 批次权限控制服务接口 - * - * @author Cursor AI - * @date 2025-01-13 - */ -public interface IXgBatchPermissionService { - - /** - * 检查用户在批次中的权限 - * - * @param batchId 批次ID - * @param userId 用户ID - * @return 权限检查结果 - */ - BatchPermissionResult checkUserBatchPermission(Long batchId, Long userId); - - /** - * 检查用户是否有特定操作权限 - * - * @param batchId 批次ID - * @param userId 用户ID - * @param operation 操作类型(VIEW, EDIT, SUBMIT, APPROVE, REJECT, WITHDRAW) - * @return 是否有权限 - */ - boolean hasOperationPermission(Long batchId, Long userId, String operation); - - /** - * 获取用户在批次中的权限配置 - * - * @param batchId 批次ID - * @param userId 用户ID - * @return 权限配置 - */ - XgBatchPermissionVo getUserBatchPermissionConfig(Long batchId, Long userId); - - /** - * 批量配置批次权限 - * - * @param batchId 批次ID - * @param configs 权限配置列表 - * @return 是否配置成功 - */ - Boolean batchConfigurePermissions(Long batchId, List configs); - - /** - * 获取批次权限配置列表 - * - * @param batchId 批次ID - * @return 权限配置列表 - */ - List getBatchPermissionConfigs(Long batchId); - - /** - * 更新权限配置状态 - * - * @param permissionId 权限ID - * @param isActive 是否激活 - * @return 是否更新成功 - */ - Boolean updatePermissionStatus(Long permissionId, Boolean isActive); - - /** - * 复制权限配置到其他批次 - * - * @param sourceBatchId 源批次ID - * @param targetBatchId 目标批次ID - * @return 是否复制成功 - */ - Boolean copyPermissionsToOtherBatch(Long sourceBatchId, Long targetBatchId); - - /** - * 批次权限检查结果接口 - */ - interface BatchPermissionResult { - Long getBatchId(); - Long getUserId(); - boolean isHasPermission(); - String getPermissionType(); - boolean isCanView(); - boolean isCanEdit(); - boolean isCanSubmit(); - boolean isCanApprove(); - boolean isCanReject(); - boolean isCanWithdraw(); - String getMessage(); - } - - /** - * 批次权限配置接口 - */ - class BatchPermissionConfig { - Long roleId; - String roleName; - String permissionType; - boolean canView; - boolean canEdit; - boolean canSubmit; - boolean canApprove; - boolean canReject; - boolean canWithdraw; - LocalDateTime startTime; - LocalDateTime endTime; - boolean isActive; - - public Long getRoleId() { - return roleId; - } - - public String getRoleName() { - return roleName; - } - - public String getPermissionType() { - return permissionType; - } - - public boolean isCanView() { - return canView; - } - - public boolean isCanEdit() { - return canEdit; - } - - public boolean isCanSubmit() { - return canSubmit; - } - - public boolean isCanApprove() { - return canApprove; - } - - public boolean isCanReject() { - return canReject; - } - - public boolean isCanWithdraw() { - return canWithdraw; - } - - public LocalDateTime getStartTime() { - return startTime; - } - - public LocalDateTime getEndTime() { - return endTime; - } - - public boolean isActive() { - return isActive; - } - - public Long getUserId() { - return userId; - } - - public Boolean getCanView() { - return canView; - } - - public Boolean getCanEdit() { - return canEdit; - } - - public Boolean getCanDelete() { - return canDelete; - } - - public Boolean getCanApprove() { - return canApprove; - } - - public Boolean getCanExport() { - return canExport; - } - - public Boolean getCanImport() { - return canImport; - } - - public Boolean getIsActive() { - return isActive; - } - } -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgBusinessPeriodService.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgBusinessPeriodService.java deleted file mode 100644 index a7fe0476..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgBusinessPeriodService.java +++ /dev/null @@ -1,114 +0,0 @@ -package org.dromara.xg.service; - -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.xg.domain.bo.XgBusinessPeriodBo; -import org.dromara.xg.domain.vo.XgBusinessPeriodVo; - -import java.util.Collection; -import java.util.List; - -/** - * 业务期管理Service接口 - * - * @author ruoyi - * @date 2025-01-13 - */ -public interface IXgBusinessPeriodService { - - /** - * 查询业务期管理 - * - * @param id 业务期管理主键 - * @return 业务期管理 - */ - XgBusinessPeriodVo queryById(Long id); - - /** - * 查询业务期管理列表 - * - * @param bo 查询条件 - * @param pageQuery 分页查询条件 - * @return 业务期管理集合 - */ - TableDataInfo queryPageList(XgBusinessPeriodBo bo, PageQuery pageQuery); - - /** - * 查询业务期管理列表 - * - * @param bo 查询条件 - * @return 业务期管理集合 - */ - List queryList(XgBusinessPeriodBo bo); - - /** - * 新增业务期管理 - * - * @param bo 业务期管理 - * @return 结果 - */ - Boolean insertByBo(XgBusinessPeriodBo bo); - - /** - * 修改业务期管理 - * - * @param bo 业务期管理 - * @return 结果 - */ - Boolean updateByBo(XgBusinessPeriodBo bo); - - /** - * 校验并批量删除业务期管理信息 - * - * @param ids 需要删除的业务期管理主键集合 - * @return 结果 - */ - Boolean deleteWithValidByIds(Collection ids); - - /** - * 根据批次ID查询业务期列表 - * - * @param batchId 批次ID - * @return 业务期列表 - */ - List queryByBatchId(Long batchId); - - /** - * 查询当前活跃的业务期 - * - * @return 活跃的业务期列表 - */ - List queryActivePeriods(); - - /** - * 检查业务期是否开放 - * - * @param batchId 批次ID - * @return 是否开放 - */ - Boolean checkPeriodOpen(Long batchId); - - /** - * 开启业务期 - * - * @param id 业务期ID - * @return 结果 - */ - Boolean openPeriod(Long id); - - /** - * 关闭业务期 - * - * @param id 业务期ID - * @return 结果 - */ - Boolean closePeriod(Long id); - - /** - * 校验业务期时间是否冲突 - * - * @param bo 业务期信息 - * @return 结果 - */ - Boolean checkPeriodTimeConflict(XgBusinessPeriodBo bo); -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgClassCadreService.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgClassCadreService.java deleted file mode 100644 index 567aa008..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgClassCadreService.java +++ /dev/null @@ -1,279 +0,0 @@ -package org.dromara.xg.service; - -import org.dromara.xg.domain.XgClassCadre; -import org.dromara.xg.domain.vo.XgClassCadreVo; -import org.dromara.xg.domain.bo.XgClassCadreBo; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.mybatis.core.page.PageQuery; -import java.util.Collection; -import java.util.List; -import java.util.Date; - -/** - * 班级干部信息Service接口 - * - * @author Cursor AI - * @date 2025-01-09 - */ -public interface IXgClassCadreService { - - /** - * 查询班级干部信息 - * - * @param id 班级干部信息主键 - * @return 班级干部信息 - */ - XgClassCadreVo queryById(Long id); - - /** - * 查询班级干部信息列表 - * - * @param bo 班级干部信息 - * @param pageQuery 分页查询条件 - * @return 班级干部信息集合 - */ - TableDataInfo queryPageList(XgClassCadreBo bo, PageQuery pageQuery); - - /** - * 查询班级干部信息列表 - * - * @param bo 班级干部信息 - * @return 班级干部信息集合 - */ - List queryList(XgClassCadreBo bo); - - /** - * 新增班级干部信息 - * - * @param bo 班级干部信息 - * @return 结果 - */ - Boolean insertByBo(XgClassCadreBo bo); - - /** - * 修改班级干部信息 - * - * @param bo 班级干部信息 - * @return 结果 - */ - Boolean updateByBo(XgClassCadreBo bo); - - /** - * 校验并批量删除班级干部信息 - * - * @param ids 需要删除的班级干部信息主键集合 - * @param isValid 是否校验,true-删除前校验,false-不校验 - * @return 结果 - */ - Boolean deleteWithValidByIds(Collection ids, Boolean isValid); - - // ==================== 业务方法 ==================== - - /** - * 根据班级ID查询班干部列表 - * - * @param classId 班级ID - * @return 班干部列表 - */ - List queryCadresByClassId(Long classId); - - /** - * 根据学生ID查询班干部信息 - * - * @param studentId 学生ID - * @return 班干部信息列表 - */ - List queryCadresByStudentId(Long studentId); - - /** - * 查询当前在任班干部列表 - * - * @param classId 班级ID(可选) - * @return 当前在任班干部列表 - */ - List queryCurrentCadres(Long classId); - - /** - * 根据职务编码查询班干部 - * - * @param classId 班级ID - * @param positionCode 职务编码 - * @return 班干部信息 - */ - XgClassCadreVo queryCadreByPosition(Long classId, String positionCode); - - /** - * 任命班干部 - * - * @param bo 班干部信息 - * @return 结果 - */ - Boolean appointCadre(XgClassCadreBo bo); - - /** - * 免职班干部 - * - * @param cadreId 班干部ID - * @param dismissalReason 免职原因 - * @param dismissalDate 免职日期 - * @return 结果 - */ - Boolean dismissCadre(Long cadreId, String dismissalReason, Date dismissalDate); - - /** - * 调任班干部 - * - * @param cadreId 班干部ID - * @param newPositionCode 新职务编码 - * @param newPositionName 新职务名称 - * @param transferReason 调任原因 - * @param effectiveDate 生效日期 - * @return 结果 - */ - Boolean transferCadre(Long cadreId, String newPositionCode, String newPositionName, String transferReason, Date effectiveDate); - - /** - * 续任班干部 - * - * @param cadreId 班干部ID - * @param newTermDuration 新任期时长(月) - * @param renewalReason 续任原因 - * @return 结果 - */ - Boolean renewCadre(Long cadreId, Integer newTermDuration, String renewalReason); - - /** - * 班干部辞职 - * - * @param cadreId 班干部ID - * @param resignationReason 辞职原因 - * @param resignationDate 辞职日期 - * @return 结果 - */ - Boolean resignCadre(Long cadreId, String resignationReason, Date resignationDate); - - /** - * 查询即将到期的班干部列表 - * - * @param days 提前天数 - * @return 即将到期的班干部列表 - */ - List queryExpiringCadres(Integer days); - - /** - * 查询已到期的班干部列表 - * - * @return 已到期的班干部列表 - */ - List queryExpiredCadres(); - - /** - * 根据学院查询班干部统计 - * - * @param collegeName 学院名称 - * @return 班干部统计信息 - */ - List queryCadresByCollege(String collegeName); - - /** - * 根据年级查询班干部统计 - * - * @param grade 年级 - * @return 班干部统计信息 - */ - List queryCadresByGrade(String grade); - - /** - * 查询班干部任期统计 - * - * @param startDate 开始日期 - * @param endDate 结束日期 - * @return 任期统计信息 - */ - List queryCadreTermStatistics(Date startDate, Date endDate); - - /** - * 检查职务是否已被占用 - * - * @param classId 班级ID - * @param positionCode 职务编码 - * @param excludeId 排除的记录ID - * @return 是否已被占用 - */ - boolean checkPositionOccupied(Long classId, String positionCode, Long excludeId); - - /** - * 检查学生是否已有其他职务 - * - * @param studentId 学生ID - * @param excludeId 排除的记录ID - * @return 是否已有其他职务 - */ - boolean checkStudentHasOtherPosition(Long studentId, Long excludeId); - - /** - * 批量更新班干部状态 - * - * @param cadreIds 班干部ID列表 - * @param status 新状态 - * @return 更新结果 - */ - Boolean batchUpdateCadreStatus(List cadreIds, String status); - - /** - * 根据职务级别查询班干部 - * - * @param positionLevel 职务级别 - * @return 班干部列表 - */ - List queryCadresByPositionLevel(Integer positionLevel); - - /** - * 查询班干部工作表现统计 - * - * @param performance 工作表现 - * @return 统计结果 - */ - List queryCadresByPerformance(String performance); - - /** - * 查询班级干部完整信息(包含关联数据) - * - * @param id 班干部ID - * @return 班干部完整信息 - */ - XgClassCadreVo queryCadreWithDetails(Long id); - - /** - * 自动处理到期班干部 - * - * @return 处理结果 - */ - Boolean autoProcessExpiredCadres(); - - /** - * 发送到期提醒通知 - * - * @param days 提前天数 - * @return 发送结果 - */ - Boolean sendExpirationReminder(Integer days); - - /** - * 导出班干部信息 - * - * @param bo 查询条件 - * @return 导出数据 - */ - List exportCadreList(XgClassCadreBo bo); - - /** - * 导入班干部信息 - * - * @param cadreList 班干部信息列表 - * @param isUpdateSupport 是否支持更新 - * @param operName 操作人 - * @return 导入结果 - */ - String importCadreList(List cadreList, Boolean isUpdateSupport, String operName); -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgClassInfoService.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgClassInfoService.java deleted file mode 100644 index 017ed173..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgClassInfoService.java +++ /dev/null @@ -1,152 +0,0 @@ -package org.dromara.xg.service; - -import org.dromara.xg.domain.vo.XgClassInfoVo; -import org.dromara.xg.domain.bo.XgClassInfoBo; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.mybatis.core.page.PageQuery; - -import java.util.Collection; -import java.util.List; -import java.util.Map; - -/** - * 班级信息Service接口 - * - * @author Cursor AI - * @date 2025-01-12 - */ -public interface IXgClassInfoService { - - /** - * 查询班级信息 - * - * @param id 主键 - * @return 班级信息 - */ - XgClassInfoVo queryById(Long id); - - /** - * 分页查询班级信息列表 - * - * @param bo 查询条件 - * @param pageQuery 分页参数 - * @return 班级信息分页列表 - */ - TableDataInfo queryPageList(XgClassInfoBo bo, PageQuery pageQuery); - - /** - * 查询符合条件的班级信息列表 - * - * @param bo 查询条件 - * @return 班级信息列表 - */ - List queryList(XgClassInfoBo bo); - - /** - * 新增班级信息 - * - * @param bo 班级信息 - * @return 是否新增成功 - */ - Boolean insertByBo(XgClassInfoBo bo); - - /** - * 修改班级信息 - * - * @param bo 班级信息 - * @return 是否修改成功 - */ - Boolean updateByBo(XgClassInfoBo bo); - - /** - * 校验并批量删除班级信息 - * - * @param ids 待删除的主键集合 - * @param isValid 是否进行有效性校验 - * @return 是否删除成功 - */ - Boolean deleteWithValidByIds(Collection ids, Boolean isValid); - - /** - * 根据班级代码查询班级信息 - * - * @param classCode 班级代码 - * @return 班级信息 - */ - XgClassInfoVo queryByClassCode(String classCode); - - /** - * 查询学院班级列表 - * - * @param collegeCode 学院代码 - * @return 班级列表 - */ - List queryByCollegeCode(String collegeCode); - - /** - * 查询班级选项列表 - * - * @return 班级选项列表 - */ - List> queryClassOptions(); - - /** - * 更新班级人数统计 - * - * @param classId 班级ID - * @return 是否更新成功 - */ - Boolean updateClassStudentCount(Long classId); - - /** - * 检查班级代码是否存在 - * - * @param classCode 班级代码 - * @param classId 班级ID(修改时使用) - * @return 是否存在 - */ - Boolean checkClassCodeExists(String classCode, Long classId); - - /** - * 查询辅导员选项列表 - * - * @param collegeCode 学院代码(可选) - * @return 辅导员选项列表 - */ - List> queryCounselorOptions(String collegeCode); - - /** - * 查询班主任选项列表 - * - * @param collegeCode 学院代码(可选) - * @return 班主任选项列表 - */ - List> queryClassTeacherOptions(String collegeCode); - - /** - * 查询班级信息总体统计 - * - * @return 统计数据 - */ - Map queryClassInfoStatistics(); - - /** - * 查询班级学生统计 - * - * @param classId 班级ID - * @return 统计数据 - */ - Map queryClassStudentStatistics(Long classId); - - /** - * 批量生成班级代码 - * - * @param collegeCode 学院代码 - * @param majorCode 专业代码 - * @param enrollmentYear 入学年份 - * @param classCount 班级数量 - * @return 班级代码列表 - */ - List generateClassCode(String collegeCode, String majorCode, Integer enrollmentYear, Integer classCount); - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgCollectionBatchService.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgCollectionBatchService.java deleted file mode 100644 index 20e7b7e5..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgCollectionBatchService.java +++ /dev/null @@ -1,89 +0,0 @@ -package org.dromara.xg.service; - -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.xg.domain.bo.XgCollectionBatchBo; -import org.dromara.xg.domain.vo.XgCollectionBatchVo; - -import java.util.Collection; -import java.util.List; -import java.util.Map; - -/** - * 信息采集批次Service接口 - * - * @author Cursor AI - * @date 2025-01-13 - */ -public interface IXgCollectionBatchService { - - /** - * 查询信息采集批次 - */ - XgCollectionBatchVo queryById(Long id); - - /** - * 查询信息采集批次列表 - */ - TableDataInfo queryPageList(XgCollectionBatchBo bo, PageQuery pageQuery); - - /** - * 查询信息采集批次列表 - */ - List queryList(XgCollectionBatchBo bo); - - /** - * 新增信息采集批次 - */ - Boolean insertByBo(XgCollectionBatchBo bo); - - /** - * 修改信息采集批次 - */ - Boolean updateByBo(XgCollectionBatchBo bo); - - /** - * 校验并批量删除信息采集批次信息 - */ - Boolean deleteWithValidByIds(Collection ids, Boolean isValid); - - /** - * 获取当前活跃的批次列表 - */ - List getActiveBatches(); - - /** - * 发布批次 - */ - Boolean publishBatch(Long id); - - /** - * 取消发布批次 - */ - Boolean unpublishBatch(Long id); - - /** - * 结束批次 - */ - Boolean completeBatch(Long id); - - /** - * 获取批次统计信息 - */ - Map getBatchStatistics(Long id); - - /** - * 获取批次选项列表 - */ - List> getBatchOptions(); - - /** - * 更新批次统计信息 - */ - Boolean updateBatchStatistics(Long id); - - /** - * 复制批次 - */ - Boolean copyBatch(Long sourceBatchId, XgCollectionBatchBo targetBatchBo); -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgDictDataService.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgDictDataService.java deleted file mode 100644 index 0e73a86b..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgDictDataService.java +++ /dev/null @@ -1,169 +0,0 @@ -package org.dromara.xg.service; - -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.xg.domain.bo.XgDictDataBo; -import org.dromara.xg.domain.vo.XgDictDataVo; - -import java.util.Collection; -import java.util.List; - -/** - * 数据字典Service接口 - * - * @author ruoyi - * @date 2025-01-13 - */ -public interface IXgDictDataService { - - /** - * 查询数据字典 - * - * @param id 数据字典主键 - * @return 数据字典 - */ - XgDictDataVo queryById(Long id); - - /** - * 查询数据字典列表 - * - * @param bo 查询条件 - * @param pageQuery 分页查询条件 - * @return 数据字典集合 - */ - TableDataInfo queryPageList(XgDictDataBo bo, PageQuery pageQuery); - - /** - * 查询数据字典列表 - * - * @param bo 查询条件 - * @return 数据字典集合 - */ - List queryList(XgDictDataBo bo); - - /** - * 新增数据字典 - * - * @param bo 数据字典 - * @return 结果 - */ - Boolean insertByBo(XgDictDataBo bo); - - /** - * 修改数据字典 - * - * @param bo 数据字典 - * @return 结果 - */ - Boolean updateByBo(XgDictDataBo bo); - - /** - * 校验并批量删除数据字典信息 - * - * @param ids 需要删除的数据字典主键集合 - * @return 结果 - */ - Boolean deleteWithValidByIds(Collection ids); - - /** - * 根据字典类型查询字典数据 - * - * @param dictType 字典类型 - * @return 字典数据列表 - */ - List queryByDictType(String dictType); - - /** - * 根据字典类型和字典值查询字典标签 - * - * @param dictType 字典类型 - * @param dictValue 字典值 - * @return 字典标签 - */ - String getDictLabel(String dictType, String dictValue); - - /** - * 根据字典类型和字典标签查询字典值 - * - * @param dictType 字典类型 - * @param dictLabel 字典标签 - * @return 字典值 - */ - String getDictValue(String dictType, String dictLabel); - - /** - * 校验字典键值是否唯一 - * - * @param dictType 字典类型 - * @param dictValue 字典值 - * @param id 字典数据ID - * @return 结果 - */ - Boolean checkDictValueUnique(String dictType, String dictValue, Long id); - - /** - * 校验字典标签是否唯一 - * - * @param dictType 字典类型 - * @param dictLabel 字典标签 - * @param id 字典数据ID - * @return 结果 - */ - Boolean checkDictLabelUnique(String dictType, String dictLabel, Long id); - - /** - * 启用字典数据 - * - * @param id 字典数据ID - * @return 结果 - */ - Boolean enableDictData(Long id); - - /** - * 禁用字典数据 - * - * @param id 字典数据ID - * @return 结果 - */ - Boolean disableDictData(Long id); - - /** - * 批量更新字典数据状态 - * - * @param ids 字典数据ID集合 - * @param status 状态 - * @return 结果 - */ - Boolean batchUpdateStatus(Collection ids, String status); - - /** - * 根据字典类型获取默认字典数据 - * - * @param dictType 字典类型 - * @return 默认字典数据 - */ - XgDictDataVo getDefaultDictData(String dictType); - - /** - * 设置默认字典数据 - * - * @param dictType 字典类型 - * @param id 字典数据ID - * @return 结果 - */ - Boolean setDefaultDictData(String dictType, Long id); - - /** - * 刷新字典缓存 - * - * @return 结果 - */ - Boolean refreshDictCache(); - - /** - * 获取字典数据统计 - * - * @return 字典数据统计信息 - */ - XgDictDataVo getDictStatistics(); -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgNoticeReadService.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgNoticeReadService.java deleted file mode 100644 index 1a6f49e5..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgNoticeReadService.java +++ /dev/null @@ -1,144 +0,0 @@ -package org.dromara.xg.service; - -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.xg.domain.bo.XgNoticeReadBo; -import org.dromara.xg.domain.vo.XgNoticeReadVo; - -import java.util.Collection; -import java.util.List; - -/** - * 通知阅读记录Service接口 - * - * @author ruoyi - * @date 2025-01-13 - */ -public interface IXgNoticeReadService { - - /** - * 查询通知阅读记录 - * - * @param id 通知阅读记录主键 - * @return 通知阅读记录 - */ - XgNoticeReadVo queryById(Long id); - - /** - * 查询通知阅读记录列表 - * - * @param bo 查询条件 - * @param pageQuery 分页查询条件 - * @return 通知阅读记录集合 - */ - TableDataInfo queryPageList(XgNoticeReadBo bo, PageQuery pageQuery); - - /** - * 查询通知阅读记录列表 - * - * @param bo 查询条件 - * @return 通知阅读记录集合 - */ - List queryList(XgNoticeReadBo bo); - - /** - * 新增通知阅读记录 - * - * @param bo 通知阅读记录 - * @return 结果 - */ - Boolean insertByBo(XgNoticeReadBo bo); - - /** - * 修改通知阅读记录 - * - * @param bo 通知阅读记录 - * @return 结果 - */ - Boolean updateByBo(XgNoticeReadBo bo); - - /** - * 校验并批量删除通知阅读记录信息 - * - * @param ids 需要删除的通知阅读记录主键集合 - * @return 结果 - */ - Boolean deleteWithValidByIds(Collection ids); - - /** - * 记录用户阅读通知 - * - * @param noticeId 通知ID - * @param userId 用户ID - * @return 结果 - */ - Boolean recordRead(Long noticeId, Long userId); - - /** - * 检查用户是否已阅读通知 - * - * @param noticeId 通知ID - * @param userId 用户ID - * @return 是否已阅读 - */ - Boolean checkUserRead(Long noticeId, Long userId); - - /** - * 根据通知ID查询阅读记录 - * - * @param noticeId 通知ID - * @param pageQuery 分页查询条件 - * @return 阅读记录集合 - */ - TableDataInfo queryByNoticeId(Long noticeId, PageQuery pageQuery); - - /** - * 根据用户ID查询阅读记录 - * - * @param userId 用户ID - * @param pageQuery 分页查询条件 - * @return 阅读记录集合 - */ - TableDataInfo queryByUserId(Long userId, PageQuery pageQuery); - - /** - * 统计通知阅读数量 - * - * @param noticeId 通知ID - * @return 阅读数量 - */ - Long countReadByNoticeId(Long noticeId); - - /** - * 统计用户阅读数量 - * - * @param userId 用户ID - * @return 阅读数量 - */ - Long countReadByUserId(Long userId); - - /** - * 批量标记已读 - * - * @param noticeIds 通知ID集合 - * @param userId 用户ID - * @return 结果 - */ - Boolean batchMarkRead(Collection noticeIds, Long userId); - - /** - * 获取用户未读通知数量 - * - * @param userId 用户ID - * @return 未读数量 - */ - Long countUnreadByUserId(Long userId); - - /** - * 获取通知阅读统计 - * - * @param noticeId 通知ID - * @return 阅读统计信息 - */ - XgNoticeReadVo getReadStatistics(Long noticeId); -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgNoticeService.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgNoticeService.java deleted file mode 100644 index 5e0f35dc..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgNoticeService.java +++ /dev/null @@ -1,139 +0,0 @@ -package org.dromara.xg.service; - -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.xg.domain.bo.XgNoticeBo; -import org.dromara.xg.domain.vo.XgNoticeVo; - -import java.util.Collection; -import java.util.List; - -/** - * 通知公告Service接口 - * - * @author ruoyi - * @date 2025-01-13 - */ -public interface IXgNoticeService { - - /** - * 查询通知公告 - * - * @param id 通知公告主键 - * @return 通知公告 - */ - XgNoticeVo queryById(Long id); - - /** - * 查询通知公告列表 - * - * @param bo 查询条件 - * @param pageQuery 分页查询条件 - * @return 通知公告集合 - */ - TableDataInfo queryPageList(XgNoticeBo bo, PageQuery pageQuery); - - /** - * 查询通知公告列表 - * - * @param bo 查询条件 - * @return 通知公告集合 - */ - List queryList(XgNoticeBo bo); - - /** - * 新增通知公告 - * - * @param bo 通知公告 - * @return 结果 - */ - Boolean insertByBo(XgNoticeBo bo); - - /** - * 修改通知公告 - * - * @param bo 通知公告 - * @return 结果 - */ - Boolean updateByBo(XgNoticeBo bo); - - /** - * 校验并批量删除通知公告信息 - * - * @param ids 需要删除的通知公告主键集合 - * @return 结果 - */ - Boolean deleteWithValidByIds(Collection ids); - - /** - * 发布通知公告 - * - * @param id 通知公告ID - * @return 结果 - */ - Boolean publishNotice(Long id); - - /** - * 撤回通知公告 - * - * @param id 通知公告ID - * @return 结果 - */ - Boolean withdrawNotice(Long id); - - /** - * 查询已发布的通知公告 - * - * @param pageQuery 分页查询条件 - * @return 通知公告集合 - */ - TableDataInfo queryPublishedNotices(PageQuery pageQuery); - - /** - * 查询置顶通知公告 - * - * @return 置顶通知公告列表 - */ - List queryTopNotices(); - - /** - * 设置置顶 - * - * @param id 通知公告ID - * @return 结果 - */ - Boolean setTop(Long id); - - /** - * 取消置顶 - * - * @param id 通知公告ID - * @return 结果 - */ - Boolean cancelTop(Long id); - - /** - * 根据批次ID查询通知公告 - * - * @param batchId 批次ID - * @return 通知公告列表 - */ - List queryByBatchId(Long batchId); - - /** - * 增加阅读量 - * - * @param id 通知公告ID - * @return 结果 - */ - Boolean increaseReadCount(Long id); - - /** - * 校验通知标题是否唯一 - * - * @param title 通知标题 - * @param id 通知ID - * @return 结果 - */ - Boolean checkNoticeTitleUnique(String title, Long id); -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgSemesterService.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgSemesterService.java deleted file mode 100644 index f10a771a..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgSemesterService.java +++ /dev/null @@ -1,106 +0,0 @@ -package org.dromara.xg.service; - -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.xg.domain.bo.XgSemesterBo; -import org.dromara.xg.domain.vo.XgSemesterVo; - -import java.util.Collection; -import java.util.List; - -/** - * 学期管理Service接口 - * - * @author ruoyi - * @date 2025-01-13 - */ -public interface IXgSemesterService { - - /** - * 查询学期管理 - * - * @param id 学期管理主键 - * @return 学期管理 - */ - XgSemesterVo queryById(Long id); - - /** - * 查询学期管理列表 - * - * @param bo 查询条件 - * @param pageQuery 分页查询条件 - * @return 学期管理集合 - */ - TableDataInfo queryPageList(XgSemesterBo bo, PageQuery pageQuery); - - /** - * 查询学期管理列表 - * - * @param bo 查询条件 - * @return 学期管理集合 - */ - List queryList(XgSemesterBo bo); - - /** - * 新增学期管理 - * - * @param bo 学期管理 - * @return 结果 - */ - Boolean insertByBo(XgSemesterBo bo); - - /** - * 修改学期管理 - * - * @param bo 学期管理 - * @return 结果 - */ - Boolean updateByBo(XgSemesterBo bo); - - /** - * 校验并批量删除学期管理信息 - * - * @param ids 需要删除的学期管理主键集合 - * @return 结果 - */ - Boolean deleteWithValidByIds(Collection ids); - - /** - * 根据学年ID查询学期列表 - * - * @param academicYearId 学年ID - * @return 学期列表 - */ - List queryByAcademicYearId(Long academicYearId); - - /** - * 查询当前学期 - * - * @return 当前学期 - */ - XgSemesterVo queryCurrentSemester(); - - /** - * 设置当前学期 - * - * @param id 学期ID - * @return 结果 - */ - Boolean setCurrentSemester(Long id); - - /** - * 查询可用的学期选项 - * - * @return 学期选项列表 - */ - List queryAvailableOptions(); - - /** - * 校验学期名称是否唯一 - * - * @param semesterName 学期名称 - * @param id 学期ID - * @return 结果 - */ - Boolean checkSemesterNameUnique(String semesterName, Long id); -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgStudentInfoApprovalService.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgStudentInfoApprovalService.java deleted file mode 100644 index 54ff0f55..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgStudentInfoApprovalService.java +++ /dev/null @@ -1,81 +0,0 @@ -package org.dromara.xg.service; - -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.xg.domain.bo.XgStudentInfoApprovalBo; -import org.dromara.xg.domain.vo.XgStudentInfoApprovalVo; - -import java.util.Collection; -import java.util.List; -import java.util.Map; - -/** - * 学生信息审核Service接口 - * - * @author Cursor AI - * @date 2025-01-13 - */ -public interface IXgStudentInfoApprovalService { - - /** - * 查询待审核学生信息列表 - * - * @param bo 查询条件 - * @param pageQuery 分页参数 - * @return 待审核学生信息列表 - */ - TableDataInfo queryPendingApprovalList(XgStudentInfoApprovalBo bo, PageQuery pageQuery); - - /** - * 查询已审核学生信息列表 - * - * @param bo 查询条件 - * @param pageQuery 分页参数 - * @return 已审核学生信息列表 - */ - TableDataInfo queryApprovedList(XgStudentInfoApprovalBo bo, PageQuery pageQuery); - - /** - * 查询学生信息审核详情 - * - * @param studentId 学生ID - * @param batchId 批次ID - * @return 学生信息审核详情 - */ - XgStudentInfoApprovalVo queryApprovalDetail(Long studentId, Long batchId); - - /** - * 审批学生信息 - */ - Boolean approveStudentInfo(Long studentId, Long batchId, String approved, String comments); - - /** - * 批量审批学生信息 - */ - Boolean batchApproveStudentInfo(List studentIds, Long batchId, String approved, String comments); - - /** - * 撤销审批 - */ - Boolean revokeApproval(Long studentId, Long batchId); - - /** - * 获取审批历史 - */ - List> getApprovalHistory(Long studentId, Long batchId); - - /** - * 获取审批统计 - */ - Map getApprovalStatistics(Long batchId); - - /** - * 检查审批权限 - */ - Boolean checkApprovalPermission(Long batchId); - - /** - * 导出审批结果 - */ - List exportApprovalResult(XgStudentInfoApprovalBo bo); -} \ No newline at end of file diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgStudentInfoHistoryService.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgStudentInfoHistoryService.java deleted file mode 100644 index 785d0c18..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgStudentInfoHistoryService.java +++ /dev/null @@ -1,149 +0,0 @@ -package org.dromara.xg.service; - -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.xg.domain.bo.XgStudentInfoHistoryBo; -import org.dromara.xg.domain.vo.XgStudentInfoHistoryVo; - -import java.util.Collection; -import java.util.List; - -/** - * 学生信息历史Service接口 - * - * @author ruoyi - * @date 2025-01-13 - */ -public interface IXgStudentInfoHistoryService { - - /** - * 查询学生信息历史 - * - * @param id 学生信息历史主键 - * @return 学生信息历史 - */ - XgStudentInfoHistoryVo queryById(Long id); - - /** - * 查询学生信息历史列表 - * - * @param bo 查询条件 - * @param pageQuery 分页查询条件 - * @return 学生信息历史集合 - */ - TableDataInfo queryPageList(XgStudentInfoHistoryBo bo, PageQuery pageQuery); - - /** - * 查询学生信息历史列表 - * - * @param bo 查询条件 - * @return 学生信息历史集合 - */ - List queryList(XgStudentInfoHistoryBo bo); - - /** - * 新增学生信息历史 - * - * @param bo 学生信息历史 - * @return 结果 - */ - Boolean insertByBo(XgStudentInfoHistoryBo bo); - - /** - * 修改学生信息历史 - * - * @param bo 学生信息历史 - * @return 结果 - */ - Boolean updateByBo(XgStudentInfoHistoryBo bo); - - /** - * 校验并批量删除学生信息历史信息 - * - * @param ids 需要删除的学生信息历史主键集合 - * @return 结果 - */ - Boolean deleteWithValidByIds(Collection ids); - - /** - * 根据学生ID查询历史记录 - * - * @param studentId 学生ID - * @param pageQuery 分页查询条件 - * @return 历史记录集合 - */ - TableDataInfo queryByStudentId(Long studentId, PageQuery pageQuery); - - /** - * 根据批次ID查询历史记录 - * - * @param batchId 批次ID - * @param pageQuery 分页查询条件 - * @return 历史记录集合 - */ - TableDataInfo queryByBatchId(Long batchId, PageQuery pageQuery); - - /** - * 创建学生信息历史记录 - * - * @param studentId 学生ID - * @param batchId 批次ID - * @param changeType 变更类型 - * @param oldData 旧数据 - * @param newData 新数据 - * @param changeReason 变更原因 - * @return 结果 - */ - Boolean createHistory(Long studentId, Long batchId, String changeType, - String oldData, String newData, String changeReason); - - /** - * 比较学生信息变更 - * - * @param oldData 旧数据 - * @param newData 新数据 - * @return 变更详情 - */ - String compareStudentInfo(String oldData, String newData); - - /** - * 恢复学生信息到历史版本 - * - * @param historyId 历史记录ID - * @return 结果 - */ - Boolean restoreToHistory(Long historyId); - - /** - * 查询学生信息变更统计 - * - * @param studentId 学生ID - * @return 变更统计 - */ - XgStudentInfoHistoryVo getChangeStatistics(Long studentId); - - /** - * 批量创建历史记录 - * - * @param historyList 历史记录列表 - * @return 结果 - */ - Boolean batchCreateHistory(List historyList); - - /** - * 根据变更类型查询历史记录 - * - * @param changeType 变更类型 - * @param pageQuery 分页查询条件 - * @return 历史记录集合 - */ - TableDataInfo queryByChangeType(String changeType, PageQuery pageQuery); - - /** - * 清理过期历史记录 - * - * @param days 保留天数 - * @return 清理数量 - */ - Long cleanExpiredHistory(Integer days); -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgStudentInfoService.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgStudentInfoService.java deleted file mode 100644 index 63a5940b..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgStudentInfoService.java +++ /dev/null @@ -1,229 +0,0 @@ -package org.dromara.xg.service; - -import org.dromara.xg.domain.vo.XgStudentInfoVo; -import org.dromara.xg.domain.bo.XgStudentInfoBo; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.mybatis.core.page.PageQuery; - -import java.util.Collection; -import java.util.List; -import java.util.Map; - -/** - * 学生信息Service接口 - * - * @author Cursor AI - * @date 2025-01-12 - */ -public interface IXgStudentInfoService { - - /** - * 查询学生信息 - * - * @param id 主键 - * @return 学生信息 - */ - XgStudentInfoVo queryById(Long id); - - /** - * 分页查询学生信息列表 - * - * @param bo 查询条件 - * @param pageQuery 分页参数 - * @return 学生信息分页列表 - */ - TableDataInfo queryPageList(XgStudentInfoBo bo, PageQuery pageQuery); - - /** - * 查询符合条件的学生信息列表 - * - * @param bo 查询条件 - * @return 学生信息列表 - */ - List queryList(XgStudentInfoBo bo); - - /** - * 新增学生信息 - * - * @param bo 学生信息 - * @return 是否新增成功 - */ - Boolean insertByBo(XgStudentInfoBo bo); - - /** - * 修改学生信息 - * - * @param bo 学生信息 - * @return 是否修改成功 - */ - Boolean updateByBo(XgStudentInfoBo bo); - - /** - * 校验并批量删除学生信息 - * - * @param ids 待删除的主键集合 - * @param isValid 是否进行有效性校验 - * @return 是否删除成功 - */ - Boolean deleteWithValidByIds(Collection ids, Boolean isValid); - - /** - * 根据学号查询学生信息 - * - * @param studentNo 学号 - * @return 学生信息 - */ - XgStudentInfoVo queryByStudentNo(String studentNo); - - /** - * 根据身份证号查询学生信息 - * - * @param idCard 身份证号 - * @return 学生信息 - */ - XgStudentInfoVo queryByIdCard(String idCard); - - /** - * 查询班级学生列表 - * - * @param classCode 班级代码 - * @return 学生列表 - */ - List queryByClassCode(String classCode); - - /** - * 根据班级ID查询学生列表 - * - * @param classId 班级ID - * @return 学生列表 - */ - List queryByClassId(Long classId); - - /** - * 查询学院学生列表 - * - * @param collegeCode 学院代码 - * @return 学生列表 - */ - List queryByCollegeCode(String collegeCode); - - /** - * 查询学生统计信息 - * - * @param params 查询参数 - * @return 统计信息 - */ - List> queryStudentStatistics(Map params); - - /** - * 批量导入学生信息 - * - * @param studentList 学生信息列表 - * @param isUpdateSupport 是否支持更新 - * @param operName 操作人姓名 - * @return 导入结果 - */ - String importStudent(List studentList, Boolean isUpdateSupport, String operName); - - /** - * 批量更新学生信息状态 - * - * @param studentIds 学生ID列表 - * @param infoStatus 信息状态 - * @return 是否更新成功 - */ - Boolean batchUpdateInfoStatus(List studentIds, String infoStatus); - - /** - * 提交学生信息审核 - * - * @param studentId 学生ID - * @param batchId 批次ID - * @return 是否提交成功 - */ - Boolean submitForAudit(Long studentId, Long batchId); - - /** - * 审核学生信息 - * - * @param studentId 学生ID - * @param auditResult 审核结果 - * @param auditComment 审核意见 - * @return 是否审核成功 - */ - Boolean auditStudentInfo(Long studentId, String auditResult, String auditComment); - - /** - * 检查学号是否存在 - * - * @param studentNo 学号 - * @param studentId 学生ID(修改时使用) - * @return 是否存在 - */ - Boolean checkStudentNoExists(String studentNo, Long studentId); - - /** - * 检查身份证号是否存在 - * - * @param idCard 身份证号 - * @param studentId 学生ID(修改时使用) - * @return 是否存在 - */ - Boolean checkIdCardExists(String idCard, Long studentId); - - /** - * 根据批次ID查询学生信息列表 - * - * @param batchId 批次ID - * @return 学生信息列表 - */ - List queryByBatchId(Long batchId); - - /** - * 将学生信息关联到批次 - * - * @param studentId 学生ID - * @param batchId 批次ID - * @return 是否关联成功 - */ - Boolean associateStudentToBatch(Long studentId, Long batchId); - - /** - * 批量将学生信息关联到批次 - * - * @param studentIds 学生ID列表 - * @param batchId 批次ID - * @return 是否关联成功 - */ - Boolean batchAssociateStudentsToBatch(List studentIds, Long batchId); - - /** - * 学生撤回提交 - * - * @param studentId 学生ID - * @param batchId 批次ID - * @return 是否撤回成功 - */ - Boolean withdrawSubmission(Long studentId, Long batchId); - - /** - * 获取学生在批次中的进度信息 - * - * @param studentId 学生ID - * @param batchId 批次ID - * @return 进度信息 - */ - Map getStudentBatchProgress(Long studentId, Long batchId); - - /** - * 批量审核学生信息 - * - * @param studentIds 学生ID列表 - * @param batchId 批次ID - * @param auditResult 审核结果 - * @param auditComment 审核意见 - * @return 是否审核成功 - */ - Boolean batchAuditStudentInfo(List studentIds, Long batchId, String auditResult, String auditComment); - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgSystemConfigService.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgSystemConfigService.java deleted file mode 100644 index 083e977a..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/IXgSystemConfigService.java +++ /dev/null @@ -1,155 +0,0 @@ -package org.dromara.xg.service; - -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.xg.domain.bo.XgSystemConfigBo; -import org.dromara.xg.domain.vo.XgSystemConfigVo; - -import java.util.Collection; -import java.util.List; - -/** - * 系统配置Service接口 - * - * @author ruoyi - * @date 2025-01-13 - */ -public interface IXgSystemConfigService { - - /** - * 查询系统配置 - * - * @param id 系统配置主键 - * @return 系统配置 - */ - XgSystemConfigVo queryById(Long id); - - /** - * 查询系统配置列表 - * - * @param bo 查询条件 - * @param pageQuery 分页查询条件 - * @return 系统配置集合 - */ - TableDataInfo queryPageList(XgSystemConfigBo bo, PageQuery pageQuery); - - /** - * 查询系统配置列表 - * - * @param bo 查询条件 - * @return 系统配置集合 - */ - List queryList(XgSystemConfigBo bo); - - /** - * 新增系统配置 - * - * @param bo 系统配置 - * @return 结果 - */ - Boolean insertByBo(XgSystemConfigBo bo); - - /** - * 修改系统配置 - * - * @param bo 系统配置 - * @return 结果 - */ - Boolean updateByBo(XgSystemConfigBo bo); - - /** - * 校验并批量删除系统配置信息 - * - * @param ids 需要删除的系统配置主键集合 - * @return 结果 - */ - Boolean deleteWithValidByIds(Collection ids); - - /** - * 根据配置键查询配置值 - * - * @param configKey 配置键 - * @return 配置值 - */ - String getConfigValue(String configKey); - - /** - * 根据配置键查询配置对象 - * - * @param configKey 配置键 - * @return 配置对象 - */ - XgSystemConfigVo getConfigByKey(String configKey); - - /** - * 设置配置值 - * - * @param configKey 配置键 - * @param configValue 配置值 - * @return 结果 - */ - Boolean setConfigValue(String configKey, String configValue); - - /** - * 批量设置配置 - * - * @param configs 配置列表 - * @return 结果 - */ - Boolean batchSetConfig(List configs); - - /** - * 根据配置组查询配置列表 - * - * @param configGroup 配置组 - * @return 配置列表 - */ - List queryByGroup(String configGroup); - - /** - * 校验配置键是否唯一 - * - * @param configKey 配置键 - * @param id 配置ID - * @return 结果 - */ - Boolean checkConfigKeyUnique(String configKey, Long id); - - /** - * 刷新配置缓存 - * - * @return 结果 - */ - Boolean refreshCache(); - - /** - * 重置配置为默认值 - * - * @param configKey 配置键 - * @return 结果 - */ - Boolean resetToDefault(String configKey); - - /** - * 导出配置 - * - * @param configGroup 配置组 - * @return 配置数据 - */ - String exportConfig(String configGroup); - - /** - * 导入配置 - * - * @param configData 配置数据 - * @return 结果 - */ - Boolean importConfig(String configData); - - /** - * 获取系统配置统计 - * - * @return 配置统计信息 - */ - XgSystemConfigVo getConfigStatistics(); -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/StudentInfoPermissionServiceImpl.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/StudentInfoPermissionServiceImpl.java deleted file mode 100644 index de4df44d..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/StudentInfoPermissionServiceImpl.java +++ /dev/null @@ -1,550 +0,0 @@ -package org.dromara.xg.service.impl; - -import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.dromara.common.core.exception.ServiceException; -import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.satoken.utils.LoginHelper; -import org.dromara.xg.domain.XgCollectionBatch; -import org.dromara.xg.domain.XgBatchStudentRelation; -import org.dromara.xg.domain.XgBatchPermission; -import org.dromara.xg.domain.XgBusinessPeriod; -import org.dromara.xg.domain.XgBatchOperationLog; -import org.dromara.xg.domain.XgStudentInfo; -import org.dromara.xg.domain.vo.XgCollectionBatchVo; -import org.dromara.xg.mapper.XgCollectionBatchMapper; -import org.dromara.xg.mapper.XgBatchStudentRelationMapper; -import org.dromara.xg.mapper.XgBatchPermissionMapper; -import org.dromara.xg.mapper.XgBusinessPeriodMapper; -import org.dromara.xg.mapper.XgBatchOperationLogMapper; -import org.dromara.xg.mapper.XgStudentInfoMapper; -import org.dromara.xg.service.IStudentInfoPermissionService; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.time.LocalDateTime; -import java.util.*; - -/** - * 学生信息权限控制服务实现类 - * - * @author Cursor AI - * @date 2025-01-13 - */ -@Slf4j -@RequiredArgsConstructor -@Service -public class StudentInfoPermissionServiceImpl implements IStudentInfoPermissionService { - - private static final Logger log = LoggerFactory.getLogger(StudentInfoPermissionServiceImpl.class); - - private final XgCollectionBatchMapper collectionBatchMapper; - private final XgBatchStudentRelationMapper batchStudentRelationMapper; - private final XgBatchPermissionMapper batchPermissionMapper; - private final XgBusinessPeriodMapper businessPeriodMapper; - private final XgBatchOperationLogMapper batchOperationLogMapper; - private final XgStudentInfoMapper studentInfoMapper; - - /** - * 检查学生是否可以修改信息 - */ - @Override - public boolean canEditStudentInfo(Long studentId) { - try { - StudentPermissionResult result = checkStudentPermission(studentId); - return result.isCanEdit(); - } catch (Exception e) { - log.error("检查学生编辑权限失败: {}", e.getMessage(), e); - return false; - } - } - - /** - * 检查学生是否可以修改信息(详细信息) - */ - @Override - public StudentPermissionResult checkStudentPermission(Long studentId) { - StudentPermissionResult result = new StudentPermissionResult(); - result.setStudentId(studentId); - result.setCanEdit(false); - result.setCanSubmit(false); - result.setCanWithdraw(false); - - try { - // 获取当前活跃批次 - XgCollectionBatchVo currentBatch = getCurrentActiveBatch(); - if (currentBatch == null) { - result.setMessage("当前没有活跃的信息采集批次"); - return result; - } - - result.setBatchId(currentBatch.getBatchId()); - result.setBatchName(currentBatch.getBatchName()); - - // 检查学生是否在批次中 - if (!isStudentInBatch(studentId, currentBatch.getBatchId())) { - result.setMessage("学生不在当前批次中"); - return result; - } - - // 获取当前用户信息 - var loginUser = LoginHelper.getLoginUser(); - if (loginUser == null) { - result.setMessage("用户未登录"); - return result; - } - - // 获取用户角色权限 - var rolePermissions = loginUser.getRolePermission(); - - // 检查批次权限配置 - XgBatchPermission batchPermission = getBatchPermissionForUser(currentBatch.getBatchId(), loginUser.getUserId()); - if (batchPermission == null) { - result.setMessage("用户在当前批次中没有权限配置"); - return result; - } - - // 检查业务期间 - List validPeriods = getValidBusinessPeriods(currentBatch.getBatchId(), rolePermissions); - if (validPeriods.isEmpty()) { - result.setMessage("当前不在有效的业务期间内"); - return result; - } - - // 获取学生在批次中的状态 - XgBatchStudentRelation studentRelation = getStudentBatchRelation(studentId, currentBatch.getBatchId()); - if (studentRelation == null) { - result.setMessage("学生批次关联信息不存在"); - return result; - } - - result.setSubmissionStatus(studentRelation.getSubmissionStatus()); - result.setApprovalStatus(studentRelation.getApprovalStatus()); - - // 根据权限配置和业务状态确定操作权限 - determinePermissions(result, batchPermission, studentRelation, validPeriods); - - result.setCheckPassed(true); - if (StringUtils.isBlank(result.getMessage())) { - result.setMessage("权限检查通过"); - } - - } catch (Exception e) { - log.error("检查学生权限异常: {}", e.getMessage(), e); - result.setMessage("权限检查异常: " + e.getMessage()); - } - - return result; - } - - /** - * 确定操作权限 - */ - private void determinePermissions(StudentPermissionResult result, XgBatchPermission batchPermission, - XgBatchStudentRelation studentRelation, List validPeriods) { - - // 基础权限检查 - if (batchPermission.getCanView() != null && Boolean.TRUE.equals(batchPermission.getCanView())) { - result.setCanView(true); - } - - // 编辑权限检查 - if (batchPermission.getCanEdit() != null && Boolean.TRUE.equals(batchPermission.getCanEdit())) { - // 检查提交状态 - String submissionStatus = studentRelation.getSubmissionStatus(); - String approvalStatus = studentRelation.getApprovalStatus(); - - if ("DRAFT".equals(submissionStatus) || "WITHDRAWN".equals(submissionStatus)) { - result.setCanEdit(true); - } else if ("SUBMITTED".equals(submissionStatus) && "REJECTED".equals(approvalStatus)) { - result.setCanEdit(true); - result.setMessage("信息已被拒绝,可以重新编辑"); - } - } - - // 提交权限检查 - if (batchPermission.getCanSubmit() != null && Boolean.TRUE.equals(batchPermission.getCanSubmit())) { - String submissionStatus = studentRelation.getSubmissionStatus(); - if ("DRAFT".equals(submissionStatus) || "WITHDRAWN".equals(submissionStatus)) { - result.setCanSubmit(true); - } - } - - // 撤回权限检查 - if (batchPermission.getCanWithdraw() != null && Boolean.TRUE.equals(batchPermission.getCanWithdraw())) { - String submissionStatus = studentRelation.getSubmissionStatus(); - String approvalStatus = studentRelation.getApprovalStatus(); - if ("SUBMITTED".equals(submissionStatus) && "PENDING".equals(approvalStatus)) { - result.setCanWithdraw(true); - } - } - - // 审核权限检查(管理员和审核人员) - if (batchPermission.getCanApprove() != null && Boolean.TRUE.equals(batchPermission.getCanApprove())) { - String submissionStatus = studentRelation.getSubmissionStatus(); - String approvalStatus = studentRelation.getApprovalStatus(); - if ("SUBMITTED".equals(submissionStatus) && "PENDING".equals(approvalStatus)) { - result.setCanApprove(true); - } - } - - // 拒绝权限检查 - if (batchPermission.getCanReject() != null && Boolean.TRUE.equals(batchPermission.getCanReject())) { - String submissionStatus = studentRelation.getSubmissionStatus(); - String approvalStatus = studentRelation.getApprovalStatus(); - if ("SUBMITTED".equals(submissionStatus) && "PENDING".equals(approvalStatus)) { - result.setCanReject(true); - } - } - } - - /** - * 检查当前是否有活跃批次 - */ - @Override - public XgCollectionBatchVo getCurrentActiveBatch() { - try { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(XgCollectionBatch::getBatchStatus, "ACTIVE"); - lqw.eq(XgCollectionBatch::getPublishStatus, "PUBLISHED"); - lqw.le(XgCollectionBatch::getStartTime, LocalDateTime.now()); - lqw.ge(XgCollectionBatch::getEndTime, LocalDateTime.now()); - lqw.orderByDesc(XgCollectionBatch::getCreateTime); - lqw.last("LIMIT 1"); - - XgCollectionBatch batch = collectionBatchMapper.selectOne(lqw); - return batch != null ? MapstructUtils.convert(batch, XgCollectionBatchVo.class) : null; - } catch (Exception e) { - log.error("获取当前活跃批次失败: {}", e.getMessage(), e); - return null; - } - } - - /** - * 检查学生是否符合批次条件 - */ - @Override - public boolean isStudentInBatch(Long studentId, Long batchId) { - try { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(XgBatchStudentRelation::getBatchId, batchId); - lqw.eq(XgBatchStudentRelation::getStudentId, studentId); - return batchStudentRelationMapper.exists(lqw); - } catch (Exception e) { - log.error("检查学生批次关联失败: {}", e.getMessage(), e); - return false; - } - } - - /** - * 记录学生信息修改日志 - */ - @Override - public void logStudentInfoChange(Long studentId, Long batchId, String operation, String description) { - try { - XgBatchOperationLog log = new XgBatchOperationLog(); - log.setBatchId(batchId); - log.setOperationType(operation); - log.setOperationDescription(description); - log.setOperatorId(LoginHelper.getUserId()); - log.setOperatorName(LoginHelper.getUsername()); - log.setOperationTime(LocalDateTime.now()); - log.setOperationResult("SUCCESS"); - log.setOperationDetails("学生ID: " + studentId + ", " + description); - - batchOperationLogMapper.insert(log); - } catch (Exception e) { - log.error("记录学生信息修改日志失败: {}", e.getMessage(), e); - } - } - - /** - * 学生提交信息 - */ - @Override - @Transactional - public boolean submitStudentInfo(Long studentId, Long batchId) { - try { - // 检查权限 - StudentPermissionResult permission = checkStudentPermission(studentId); - if (!permission.isCanSubmit()) { - throw new ServiceException("没有提交权限: " + permission.getMessage()); - } - - // 获取学生批次关联 - XgBatchStudentRelation studentRelation = getStudentBatchRelation(studentId, batchId); - if (studentRelation == null) { - throw new ServiceException("学生批次关联信息不存在"); - } - - // 更新提交状态 - studentRelation.setSubmissionStatus("SUBMITTED"); - studentRelation.setSubmissionTime(LocalDateTime.now()); - studentRelation.setApprovalStatus("PENDING"); - studentRelation.setSubmissionCount( - ObjectUtil.defaultIfNull(studentRelation.getSubmissionCount(), 0) + 1 - ); - - boolean flag = batchStudentRelationMapper.updateById(studentRelation) > 0; - if (flag) { - // 更新学生信息表的提交状态 - updateStudentInfoSubmissionStatus(studentId, "SUBMITTED"); - - // 记录操作日志 - logStudentInfoChange(studentId, batchId, "SUBMIT", "学生提交信息"); - } - - return flag; - } catch (Exception e) { - log.error("学生提交信息失败: {}", e.getMessage(), e); - throw new ServiceException("提交失败: " + e.getMessage()); - } - } - - /** - * 获取学生在批次中的统计信息 - */ - @Override - public StudentBatchStatistics getStudentBatchStatistics(Long studentId, Long batchId) { - StudentBatchStatistics statistics = new StudentBatchStatistics(); - statistics.setStudentId(studentId); - statistics.setBatchId(batchId); - - try { - // 获取学生批次关联信息 - XgBatchStudentRelation studentRelation = getStudentBatchRelation(studentId, batchId); - if (studentRelation != null) { - statistics.setSubmissionStatus(studentRelation.getSubmissionStatus()); - statistics.setApprovalStatus(studentRelation.getApprovalStatus()); - statistics.setSubmissionTime(studentRelation.getSubmissionTime()); - statistics.setApprovalTime(studentRelation.getApprovalTime()); - statistics.setSubmissionCount( - ObjectUtil.defaultIfNull(studentRelation.getSubmissionCount(), 0) - ); - statistics.setLastEditTime(studentRelation.getLastEditTime()); - } - - // 获取批次信息 - XgCollectionBatch batch = collectionBatchMapper.selectById(batchId); - if (batch != null) { - statistics.setBatchName(batch.getBatchName()); - statistics.setBatchStartTime(batch.getStartTime()); - statistics.setBatchEndTime(batch.getEndTime()); - } - - } catch (Exception e) { - log.error("获取学生批次统计信息失败: {}", e.getMessage(), e); - } - - return statistics; - } - - /** - * 获取用户在批次中的权限配置 - */ - private XgBatchPermission getBatchPermissionForUser(Long batchId, Long userId) { - try { - // 这里需要根据用户的角色来获取权限配置 - // 简化实现,实际应该根据用户角色查询 - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(XgBatchPermission::getBatchId, batchId); - lqw.eq(XgBatchPermission::getIsActive, 1); - lqw.orderByDesc(XgBatchPermission::getCreateTime); - lqw.last("LIMIT 1"); - - return batchPermissionMapper.selectOne(lqw); - } catch (Exception e) { - log.error("获取用户批次权限配置失败: {}", e.getMessage(), e); - return null; - } - } - - /** - * 获取有效的业务期间 - */ - private List getValidBusinessPeriods(Long batchId, Set rolePermissions) { - try { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(XgBusinessPeriod::getBatchId, batchId); - lqw.eq(XgBusinessPeriod::getIsActive, 1); - lqw.le(XgBusinessPeriod::getStartTime, LocalDateTime.now()); - lqw.ge(XgBusinessPeriod::getEndTime, LocalDateTime.now()); - - return businessPeriodMapper.selectList(lqw); - } catch (Exception e) { - log.error("获取有效业务期间失败: {}", e.getMessage(), e); - return new ArrayList<>(); - } - } - - /** - * 获取学生批次关联信息 - */ - private XgBatchStudentRelation getStudentBatchRelation(Long studentId, Long batchId) { - try { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(XgBatchStudentRelation::getBatchId, batchId); - lqw.eq(XgBatchStudentRelation::getStudentId, studentId); - return batchStudentRelationMapper.selectOne(lqw); - } catch (Exception e) { - log.error("获取学生批次关联信息失败: {}", e.getMessage(), e); - return null; - } - } - - /** - * 更新学生信息表的提交状态 - */ - private void updateStudentInfoSubmissionStatus(Long studentId, String status) { - try { - XgStudentInfo studentInfo = studentInfoMapper.selectById(studentId); - if (studentInfo != null) { - studentInfo.setSubmissionStatus(status); - studentInfo.setSubmissionTime(LocalDateTime.now()); - studentInfoMapper.updateById(studentInfo); - } - } catch (Exception e) { - log.error("更新学生信息提交状态失败: {}", e.getMessage(), e); - } - } - - /** - * 学生权限检查结果内部类 - */ - public static class StudentPermissionResult implements IStudentInfoPermissionService.StudentPermissionResult { - private Long studentId; - private Long batchId; - private String batchName; - private boolean canView = false; - private boolean canEdit = false; - private boolean canSubmit = false; - private boolean canWithdraw = false; - private boolean canApprove = false; - private boolean canReject = false; - private String submissionStatus; - private String approvalStatus; - private String message; - private boolean checkPassed = false; - - // Getters and Setters - @Override - public Long getStudentId() { return studentId; } - public void setStudentId(Long studentId) { this.studentId = studentId; } - - @Override - public Long getBatchId() { return batchId; } - public void setBatchId(Long batchId) { this.batchId = batchId; } - - @Override - public String getBatchName() { return batchName; } - public void setBatchName(String batchName) { this.batchName = batchName; } - - @Override - public boolean isCanView() { return canView; } - public void setCanView(boolean canView) { this.canView = canView; } - - @Override - public boolean isCanEdit() { return canEdit; } - public void setCanEdit(boolean canEdit) { this.canEdit = canEdit; } - - @Override - public boolean isCanSubmit() { return canSubmit; } - public void setCanSubmit(boolean canSubmit) { this.canSubmit = canSubmit; } - - @Override - public boolean isCanWithdraw() { return canWithdraw; } - public void setCanWithdraw(boolean canWithdraw) { this.canWithdraw = canWithdraw; } - - @Override - public boolean isCanApprove() { return canApprove; } - public void setCanApprove(boolean canApprove) { this.canApprove = canApprove; } - - @Override - public boolean isCanReject() { return canReject; } - public void setCanReject(boolean canReject) { this.canReject = canReject; } - - @Override - public String getSubmissionStatus() { return submissionStatus; } - public void setSubmissionStatus(String submissionStatus) { this.submissionStatus = submissionStatus; } - - @Override - public String getApprovalStatus() { return approvalStatus; } - public void setApprovalStatus(String approvalStatus) { this.approvalStatus = approvalStatus; } - - @Override - public String getMessage() { return message; } - public void setMessage(String message) { this.message = message; } - - @Override - public boolean isCheckPassed() { return checkPassed; } - public void setCheckPassed(boolean checkPassed) { this.checkPassed = checkPassed; } - } - - /** - * 学生批次统计信息内部类 - */ - public static class StudentBatchStatistics implements IStudentInfoPermissionService.StudentBatchStatistics { - private Long studentId; - private Long batchId; - private String batchName; - private String submissionStatus; - private String approvalStatus; - private LocalDateTime submissionTime; - private LocalDateTime approvalTime; - private Integer submissionCount; - private LocalDateTime lastEditTime; - private LocalDateTime batchStartTime; - private LocalDateTime batchEndTime; - - // Getters and Setters - @Override - public Long getStudentId() { return studentId; } - public void setStudentId(Long studentId) { this.studentId = studentId; } - - @Override - public Long getBatchId() { return batchId; } - public void setBatchId(Long batchId) { this.batchId = batchId; } - - @Override - public String getBatchName() { return batchName; } - public void setBatchName(String batchName) { this.batchName = batchName; } - - @Override - public String getSubmissionStatus() { return submissionStatus; } - public void setSubmissionStatus(String submissionStatus) { this.submissionStatus = submissionStatus; } - - @Override - public String getApprovalStatus() { return approvalStatus; } - public void setApprovalStatus(String approvalStatus) { this.approvalStatus = approvalStatus; } - - @Override - public LocalDateTime getSubmissionTime() { return submissionTime; } - public void setSubmissionTime(LocalDateTime submissionTime) { this.submissionTime = submissionTime; } - - @Override - public LocalDateTime getApprovalTime() { return approvalTime; } - public void setApprovalTime(LocalDateTime approvalTime) { this.approvalTime = approvalTime; } - - @Override - public Integer getSubmissionCount() { return submissionCount; } - public void setSubmissionCount(Integer submissionCount) { this.submissionCount = submissionCount; } - - @Override - public LocalDateTime getLastEditTime() { return lastEditTime; } - public void setLastEditTime(LocalDateTime lastEditTime) { this.lastEditTime = lastEditTime; } - - @Override - public LocalDateTime getBatchStartTime() { return batchStartTime; } - public void setBatchStartTime(LocalDateTime batchStartTime) { this.batchStartTime = batchStartTime; } - - @Override - public LocalDateTime getBatchEndTime() { return batchEndTime; } - public void setBatchEndTime(LocalDateTime batchEndTime) { this.batchEndTime = batchEndTime; } - } -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgAcademicYearServiceImpl.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgAcademicYearServiceImpl.java deleted file mode 100644 index 7ae7877d..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgAcademicYearServiceImpl.java +++ /dev/null @@ -1,231 +0,0 @@ -package org.dromara.xg.service.impl; - -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.xg.domain.XgAcademicYear; -import org.dromara.xg.domain.bo.XgAcademicYearBo; -import org.dromara.xg.domain.vo.XgAcademicYearVo; -import org.dromara.xg.mapper.XgAcademicYearMapper; -import org.dromara.xg.service.IXgAcademicYearService; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.Collection; -import java.util.List; - -/** - * 学年管理Service业务层处理 - * - * @author ruoyi - * @date 2025-01-13 - */ -@RequiredArgsConstructor -@Service -public class XgAcademicYearServiceImpl implements IXgAcademicYearService { - - private final XgAcademicYearMapper baseMapper; - - /** - * 查询学年管理 - * - * @param id 学年管理主键 - * @return 学年管理 - */ - @Override - public XgAcademicYearVo queryById(Long id) { - return baseMapper.selectVoById(id); - } - - /** - * 查询学年管理列表 - * - * @param bo 查询条件 - * @param pageQuery 分页查询条件 - * @return 学年管理集合 - */ - @Override - public TableDataInfo queryPageList(XgAcademicYearBo bo, PageQuery pageQuery) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); - } - - /** - * 查询学年管理列表 - * - * @param bo 查询条件 - * @return 学年管理集合 - */ - @Override - public List queryList(XgAcademicYearBo bo) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); - } - - private LambdaQueryWrapper buildQueryWrapper(XgAcademicYearBo bo) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.like(StringUtils.isNotBlank(bo.getYearName()), XgAcademicYear::getYearName, bo.getYearName()); - lqw.eq(StringUtils.isNotBlank(bo.getYearCode()), XgAcademicYear::getYearCode, bo.getYearCode()); - lqw.eq(ObjectUtil.isNotNull(bo.getStartDate()), XgAcademicYear::getStartDate, bo.getStartDate()); - lqw.eq(ObjectUtil.isNotNull(bo.getEndDate()), XgAcademicYear::getEndDate, bo.getEndDate()); - lqw.eq(ObjectUtil.isNotNull(bo.getIsCurrent()), XgAcademicYear::getIsCurrent, bo.getIsCurrent()); - lqw.eq(StringUtils.isNotBlank(bo.getStatus()), XgAcademicYear::getStatus, bo.getStatus()); - lqw.orderByDesc(XgAcademicYear::getCreateTime); - return lqw; - } - - /** - * 新增学年管理 - * - * @param bo 学年管理 - * @return 结果 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public Boolean insertByBo(XgAcademicYearBo bo) { - XgAcademicYear add = MapstructUtils.convert(bo, XgAcademicYear.class); - validEntityBeforeSave(add); - - // 如果设置为当前学年,需要取消其他学年的当前状态 - if (Boolean.TRUE.equals(bo.getIsCurrent())) { - baseMapper.update(null, Wrappers.lambdaUpdate() - .set(XgAcademicYear::getIsCurrent, false)); - } - - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setId(add.getId()); - } - return flag; - } - - /** - * 修改学年管理 - * - * @param bo 学年管理 - * @return 结果 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public Boolean updateByBo(XgAcademicYearBo bo) { - XgAcademicYear update = MapstructUtils.convert(bo, XgAcademicYear.class); - validEntityBeforeSave(update); - - // 如果设置为当前学年,需要取消其他学年的当前状态 - if (Boolean.TRUE.equals(bo.getIsCurrent())) { - baseMapper.update(null, Wrappers.lambdaUpdate() - .set(XgAcademicYear::getIsCurrent, false) - .ne(XgAcademicYear::getId, bo.getId())); - } - - return baseMapper.updateById(update) > 0; - } - - /** - * 保存前的数据校验 - * - * @param entity 实体类数据 - */ - private void validEntityBeforeSave(XgAcademicYear entity) { - // 校验学年编码是否唯一 - if (!checkYearCodeExists(entity.getYearCode(), entity.getId())) { - throw new RuntimeException("学年编码已存在"); - } - - // 校验开始日期不能大于结束日期 - if (entity.getStartDate() != null && entity.getEndDate() != null - && entity.getStartDate().isAfter(entity.getEndDate())) { - throw new RuntimeException("开始日期不能大于结束日期"); - } - } - - /** - * 批量删除学年管理 - * - * @param ids 需要删除的学年管理主键集合 - * @param isValid 是否进行有效性校验 - * @return 结果 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if (Boolean.TRUE.equals(isValid)) { - // 校验是否存在当前学年 - long currentCount = baseMapper.selectCount(Wrappers.lambdaQuery() - .in(XgAcademicYear::getId, ids) - .eq(XgAcademicYear::getIsCurrent, true)); - if (currentCount > 0) { - throw new RuntimeException("不能删除当前学年"); - } - } - - return baseMapper.deleteBatchIds(ids) > 0; - } - - /** - * 根据学年编码查询学年信息 - * - * @param yearCode 学年编码 - * @return 学年信息 - */ - @Override - public XgAcademicYearVo queryByYearCode(String yearCode) { - return baseMapper.selectVoOne(Wrappers.lambdaQuery() - .eq(XgAcademicYear::getYearCode, yearCode)); - } - - /** - * 查询当前学年 - * - * @return 当前学年 - */ - @Override - public XgAcademicYearVo queryCurrentYear() { - return baseMapper.selectVoOne(Wrappers.lambdaQuery() - .eq(XgAcademicYear::getIsCurrent, true)); - } - - /** - * 设置当前学年 - * - * @param yearId 学年ID - * @return 结果 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public Boolean setCurrentYear(Long yearId) { - // 先取消所有学年的当前状态 - baseMapper.update(null, Wrappers.lambdaUpdate() - .set(XgAcademicYear::getIsCurrent, false)); - - // 设置指定学年为当前学年 - return baseMapper.update(null, Wrappers.lambdaUpdate() - .set(XgAcademicYear::getIsCurrent, true) - .eq(XgAcademicYear::getId, yearId)) > 0; - } - - /** - * 检查学年编码是否存在 - * - * @param yearCode 学年编码 - * @param yearId 学年ID(修改时使用) - * @return 是否存在 - */ - @Override - public Boolean checkYearCodeExists(String yearCode, Long yearId) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery() - .eq(XgAcademicYear::getYearCode, yearCode); - if (ObjectUtil.isNotNull(yearId)) { - lqw.ne(XgAcademicYear::getId, yearId); - } - return baseMapper.selectCount(lqw) > 0; - } -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgBatchPermissionServiceImpl.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgBatchPermissionServiceImpl.java deleted file mode 100644 index 5751aae9..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgBatchPermissionServiceImpl.java +++ /dev/null @@ -1,557 +0,0 @@ -package org.dromara.xg.service.impl; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.dromara.common.core.exception.ServiceException; -import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.satoken.utils.LoginHelper; -import org.dromara.xg.domain.XgBatchPermission; -import org.dromara.xg.domain.XgBusinessPeriod; -import org.dromara.xg.domain.XgCollectionBatch; -import org.dromara.xg.domain.vo.XgBatchPermissionVo; -import org.dromara.xg.mapper.XgBatchPermissionMapper; -import org.dromara.xg.mapper.XgBusinessPeriodMapper; -import org.dromara.xg.mapper.XgCollectionBatchMapper; -import org.dromara.xg.service.IXgBatchPermissionService; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.time.LocalDateTime; -import java.util.*; -import java.util.stream.Collectors; - -/** - * 批次权限控制服务实现类 - * - * @author Cursor AI - * @date 2025-01-13 - */ -@Slf4j -@RequiredArgsConstructor -@Service -public class XgBatchPermissionServiceImpl implements IXgBatchPermissionService { - - private static final Logger log = LoggerFactory.getLogger(XgBatchPermissionServiceImpl.class); - - private final XgBatchPermissionMapper baseMapper; - private final XgBusinessPeriodMapper businessPeriodMapper; - private final XgCollectionBatchMapper collectionBatchMapper; - - /** - * 检查用户在批次中的权限 - */ - @Override - public BatchPermissionResult checkUserBatchPermission(Long batchId, Long userId) { - BatchPermissionResult result = new BatchPermissionResult(); - result.setBatchId(batchId); - result.setUserId(userId); - result.setHasPermission(false); - - try { - // 获取批次信息 - XgCollectionBatch batch = collectionBatchMapper.selectById(batchId); - if (batch == null) { - result.setMessage("批次不存在"); - return result; - } - - if (!"ACTIVE".equals(batch.getBatchStatus())) { - result.setMessage("批次未激活"); - return result; - } - - // 获取用户角色信息 - var loginUser = LoginHelper.getLoginUser(); - if (loginUser == null) { - result.setMessage("用户未登录"); - return result; - } - - Set rolePermissions = loginUser.getRolePermission(); - if (CollUtil.isEmpty(rolePermissions)) { - result.setMessage("用户没有角色权限"); - return result; - } - - // 查询用户在批次中的权限配置 - XgBatchPermission batchPermission = getUserBatchPermission(batchId, userId, rolePermissions); - if (batchPermission == null) { - result.setMessage("用户在当前批次中没有权限配置"); - return result; - } - - // 检查权限是否在有效期内 - if (!isPermissionValid(batchPermission)) { - result.setMessage("权限已过期或未生效"); - return result; - } - - // 检查业务期间 - if (!isInValidBusinessPeriod(batchId, rolePermissions)) { - result.setMessage("当前不在有效的业务期间内"); - return result; - } - - // 验证权限配置的有效性 - if (batchPermission.getCanView() != null && Boolean.TRUE.equals(batchPermission.getCanView())) { - // 可查看权限验证 - } - if (batchPermission.getCanEdit() != null && Boolean.TRUE.equals(batchPermission.getCanEdit())) { - // 可编辑权限验证 - } - if (batchPermission.getCanDelete() != null && Boolean.TRUE.equals(batchPermission.getCanDelete())) { - // 可删除权限验证 - } - if (batchPermission.getCanExport() != null && Boolean.TRUE.equals(batchPermission.getCanExport())) { - // 可导出权限验证 - } - if (batchPermission.getCanImport() != null && Boolean.TRUE.equals(batchPermission.getCanImport())) { - // 可导入权限验证 - } - if (batchPermission.getCanApprove() != null && Boolean.TRUE.equals(batchPermission.getCanApprove())) { - // 可审批权限验证 - } - - // 设置权限结果 - result.setHasPermission(true); - result.setPermissionType(batchPermission.getPermissionType()); - result.setCanView(Boolean.TRUE.equals(batchPermission.getCanView())); - result.setCanEdit(Boolean.TRUE.equals(batchPermission.getCanEdit())); - result.setCanSubmit(Boolean.TRUE.equals(batchPermission.getCanSubmit())); - result.setCanApprove(Boolean.TRUE.equals(batchPermission.getCanApprove())); - result.setCanReject(Boolean.TRUE.equals(batchPermission.getCanReject())); - result.setCanWithdraw(Boolean.TRUE.equals(batchPermission.getCanWithdraw())); - result.setMessage("权限检查通过"); - - } catch (Exception e) { - log.error("检查用户批次权限失败: {}", e.getMessage(), e); - result.setMessage("权限检查异常: " + e.getMessage()); - } - - return result; - } - - /** - * 检查用户是否有特定操作权限 - */ - @Override - public boolean hasOperationPermission(Long batchId, Long userId, String operation) { - try { - BatchPermissionResult result = checkUserBatchPermission(batchId, userId); - if (!result.isHasPermission()) { - return false; - } - - return switch (operation.toUpperCase()) { - case "VIEW" -> result.isCanView(); - case "EDIT" -> result.isCanEdit(); - case "SUBMIT" -> result.isCanSubmit(); - case "APPROVE" -> result.isCanApprove(); - case "REJECT" -> result.isCanReject(); - case "WITHDRAW" -> result.isCanWithdraw(); - default -> false; - }; - } catch (Exception e) { - log.error("检查操作权限失败: {}", e.getMessage(), e); - return false; - } - } - - /** - * 获取用户在批次中的权限配置 - */ - @Override - public XgBatchPermissionVo getUserBatchPermissionConfig(Long batchId, Long userId) { - try { - var loginUser = LoginHelper.getLoginUser(); - if (loginUser == null) { - return null; - } - - Set rolePermissions = loginUser.getRolePermission(); - XgBatchPermission batchPermission = getUserBatchPermission(batchId, userId, rolePermissions); - - return batchPermission != null ? MapstructUtils.convert(batchPermission, XgBatchPermissionVo.class) : null; - } catch (Exception e) { - log.error("获取用户批次权限配置失败: {}", e.getMessage(), e); - return null; - } - } - - /** - * 批量配置权限 - */ - @Override - @Transactional - public Boolean batchConfigurePermissions(Long batchId, List configs) { - try { - // 验证批次是否存在 - XgCollectionBatch batch = collectionBatchMapper.selectById(batchId); - if (batch == null) { - throw new ServiceException("批次不存在"); - } - - // 删除现有权限配置 - LambdaQueryWrapper deleteWrapper = Wrappers.lambdaQuery(); - deleteWrapper.eq(XgBatchPermission::getBatchId, batchId); - baseMapper.delete(deleteWrapper); - - // 批量插入新的权限配置 - for (IXgBatchPermissionService.BatchPermissionConfig config : configs) { - XgBatchPermission permission = new XgBatchPermission(); - permission.setBatchId(batchId); - permission.setUserId(config.getUserId()); - permission.setRoleId(config.getRoleId()); - permission.setPermissionType(config.getPermissionType()); - permission.setCanView(config.getCanView() ? Boolean.TRUE : Boolean.FALSE); - permission.setCanEdit(config.getCanEdit() ? Boolean.TRUE : Boolean.FALSE); - permission.setCanDelete(config.getCanDelete() ? Boolean.TRUE : Boolean.FALSE); - permission.setCanApprove(config.getCanApprove() ? Boolean.TRUE : Boolean.FALSE); - permission.setCanExport(config.getCanExport() ? Boolean.TRUE : Boolean.FALSE); - permission.setCanImport(config.getCanImport() ? Boolean.TRUE : Boolean.FALSE); - - // 设置权限状态 - permission.setIsActive(config.getIsActive() ? Boolean.TRUE : Boolean.FALSE); - - baseMapper.insert(permission); - } - - return true; - } catch (Exception e) { - log.error("批量配置批次权限失败: {}", e.getMessage(), e); - throw new ServiceException("配置权限失败: " + e.getMessage()); - } - } - - /** - * 获取批次权限配置列表 - */ - @Override - public List getBatchPermissionConfigs(Long batchId) { - try { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(XgBatchPermission::getBatchId, batchId); - lqw.orderByDesc(XgBatchPermission::getCreateTime); - - return baseMapper.selectList(lqw).stream() - .map(permission -> MapstructUtils.convert(permission, XgBatchPermissionVo.class)) - .collect(Collectors.toList()); - } catch (Exception e) { - log.error("获取批次权限配置列表失败: {}", e.getMessage(), e); - return new ArrayList<>(); - } - } - - /** - * 更新权限配置状态 - */ - @Override - @Transactional - public Boolean updatePermissionStatus(Long permissionId, Boolean isActive) { - try { - XgBatchPermission permission = baseMapper.selectById(permissionId); - if (permission == null) { - throw new ServiceException("权限配置不存在"); - } - - permission.setIsActive(isActive ? 1 : 0); - return baseMapper.updateById(permission) > 0; - } catch (Exception e) { - log.error("更新权限配置状态失败: {}", e.getMessage(), e); - throw new ServiceException("更新状态失败: " + e.getMessage()); - } - } - - /** - * 复制权限配置到其他批次 - */ - @Override - @Transactional - public Boolean copyPermissionsToOtherBatch(Long sourceBatchId, Long targetBatchId) { - try { - // 验证源批次和目标批次是否存在 - XgCollectionBatch sourceBatch = collectionBatchMapper.selectById(sourceBatchId); - XgCollectionBatch targetBatch = collectionBatchMapper.selectById(targetBatchId); - - if (sourceBatch == null || targetBatch == null) { - throw new ServiceException("源批次或目标批次不存在"); - } - - // 获取源批次的权限配置 - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(XgBatchPermission::getBatchId, sourceBatchId); - List sourcePermissions = baseMapper.selectList(lqw); - - if (CollUtil.isEmpty(sourcePermissions)) { - throw new ServiceException("源批次没有权限配置"); - } - - // 删除目标批次现有权限配置 - LambdaQueryWrapper deleteWrapper = Wrappers.lambdaQuery(); - deleteWrapper.eq(XgBatchPermission::getBatchId, targetBatchId); - baseMapper.delete(deleteWrapper); - - // 复制权限配置到目标批次 - for (XgBatchPermission sourcePermission : sourcePermissions) { - XgBatchPermission newPermission = new XgBatchPermission(); - newPermission.setBatchId(targetBatchId); - newPermission.setRoleId(sourcePermission.getRoleId()); - newPermission.setRoleName(sourcePermission.getRoleName()); - newPermission.setPermissionType(sourcePermission.getPermissionType()); - newPermission.setCanView(sourcePermission.getCanView()); - newPermission.setCanEdit(sourcePermission.getCanEdit()); - newPermission.setCanSubmit(sourcePermission.getCanSubmit()); - newPermission.setCanApprove(sourcePermission.getCanApprove()); - newPermission.setCanReject(sourcePermission.getCanReject()); - newPermission.setCanWithdraw(sourcePermission.getCanWithdraw()); - newPermission.setStartTime(sourcePermission.getStartTime()); - newPermission.setEndTime(sourcePermission.getEndTime()); - newPermission.setIsActive(sourcePermission.getIsActive()); - - baseMapper.insert(newPermission); - } - - return true; - } catch (Exception e) { - log.error("复制权限配置失败: {}", e.getMessage(), e); - throw new ServiceException("复制权限配置失败: " + e.getMessage()); - } - } - - /** - * 获取用户在批次中的权限配置 - */ - private XgBatchPermission getUserBatchPermission(Long batchId, Long userId, Set rolePermissions) { - // 这里需要根据用户的角色来匹配权限配置 - // 简化实现,实际应该根据用户的具体角色来查询 - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(XgBatchPermission::getBatchId, batchId); - lqw.eq(XgBatchPermission::getIsActive, 1); - - // 根据用户角色权限匹配权限类型 - if (rolePermissions.contains("student_affairs_admin")) { - lqw.eq(XgBatchPermission::getPermissionType, "ADMIN"); - } else if (rolePermissions.contains("college_admin")) { - lqw.eq(XgBatchPermission::getPermissionType, "COLLEGE_ADMIN"); - } else if (rolePermissions.contains("counselor")) { - lqw.eq(XgBatchPermission::getPermissionType, "COUNSELOR"); - } else if (rolePermissions.contains("class_teacher")) { - lqw.eq(XgBatchPermission::getPermissionType, "CLASS_TEACHER"); - } else if (rolePermissions.contains("student")) { - lqw.eq(XgBatchPermission::getPermissionType, "STUDENT"); - } else { - return null; - } - - lqw.orderByDesc(XgBatchPermission::getCreateTime); - lqw.last("LIMIT 1"); - - return baseMapper.selectOne(lqw); - } - - /** - * 检查权限是否在有效期内 - */ - private boolean isPermissionValid(XgBatchPermission permission) { - LocalDateTime now = LocalDateTime.now(); - - if (permission.getStartTime() != null && now.isBefore(permission.getStartTime())) { - return false; - } - - if (permission.getEndTime() != null && now.isAfter(permission.getEndTime())) { - return false; - } - - return Boolean.TRUE.equals(permission.getIsActive()); - } - - /** - * 检查是否在有效的业务期间内 - */ - private boolean isInValidBusinessPeriod(Long batchId, Set rolePermissions) { - try { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(XgBusinessPeriod::getBatchId, batchId); - lqw.eq(XgBusinessPeriod::getIsActive, 1); - lqw.le(XgBusinessPeriod::getStartTime, LocalDateTime.now()); - lqw.ge(XgBusinessPeriod::getEndTime, LocalDateTime.now()); - - List validPeriods = businessPeriodMapper.selectList(lqw); - - if (CollUtil.isEmpty(validPeriods)) { - return false; - } - - // 检查是否有适合当前用户角色的业务期间 - for (XgBusinessPeriod period : validPeriods) { - String targetRoles = period.getTargetRoles(); - if (StringUtils.isBlank(targetRoles)) { - continue; - } - - // 检查用户角色是否匹配业务期间的目标角色 - for (String rolePermission : rolePermissions) { - if (targetRoles.contains(rolePermission)) { - return true; - } - } - } - - return false; - } catch (Exception e) { - log.error("检查业务期间失败: {}", e.getMessage(), e); - return false; - } - } - - /** - * 检查权限是否有效 - */ - private Boolean isPermissionActive(XgBatchPermission permission) { - return Boolean.TRUE.equals(permission.getIsActive()); - } - - /** - * 获取有效权限 - */ - private Boolean getEffectivePermission(Boolean permission) { - return permission != null ? permission : Boolean.FALSE; - } - - /** - * 批次权限检查结果内部类 - */ - public static class BatchPermissionResult implements IXgBatchPermissionService.BatchPermissionResult { - private Long batchId; - private Long userId; - private boolean hasPermission = false; - private String permissionType; - private boolean canView = false; - private boolean canEdit = false; - private boolean canSubmit = false; - private boolean canApprove = false; - private boolean canReject = false; - private boolean canWithdraw = false; - private String message; - - // Getters and Setters - @Override - public Long getBatchId() { return batchId; } - public void setBatchId(Long batchId) { this.batchId = batchId; } - - @Override - public Long getUserId() { return userId; } - public void setUserId(Long userId) { this.userId = userId; } - - @Override - public boolean isHasPermission() { return hasPermission; } - public void setHasPermission(boolean hasPermission) { this.hasPermission = hasPermission; } - - @Override - public String getPermissionType() { return permissionType; } - public void setPermissionType(String permissionType) { this.permissionType = permissionType; } - - @Override - public boolean isCanView() { return canView; } - public void setCanView(boolean canView) { this.canView = canView; } - - @Override - public boolean isCanEdit() { return canEdit; } - public void setCanEdit(boolean canEdit) { this.canEdit = canEdit; } - - @Override - public boolean isCanSubmit() { return canSubmit; } - public void setCanSubmit(boolean canSubmit) { this.canSubmit = canSubmit; } - - @Override - public boolean isCanApprove() { return canApprove; } - public void setCanApprove(boolean canApprove) { this.canApprove = canApprove; } - - @Override - public boolean isCanReject() { return canReject; } - public void setCanReject(boolean canReject) { this.canReject = canReject; } - - @Override - public boolean isCanWithdraw() { return canWithdraw; } - public void setCanWithdraw(boolean canWithdraw) { this.canWithdraw = canWithdraw; } - - @Override - public String getMessage() { return message; } - public void setMessage(String message) { this.message = message; } - } - - /** - * 批次权限配置内部类 - */ - public static class BatchPermissionConfig implements IXgBatchPermissionService.BatchPermissionConfig { - private Long roleId; - private String roleName; - private String permissionType; - private boolean canView = false; - private boolean canEdit = false; - private boolean canSubmit = false; - private boolean canApprove = false; - private boolean canReject = false; - private boolean canWithdraw = false; - private LocalDateTime startTime; - private LocalDateTime endTime; - private boolean active = true; - - // Getters and Setters - @Override - public Long getRoleId() { return roleId; } - public void setRoleId(Long roleId) { this.roleId = roleId; } - - @Override - public String getRoleName() { return roleName; } - public void setRoleName(String roleName) { this.roleName = roleName; } - - @Override - public String getPermissionType() { return permissionType; } - public void setPermissionType(String permissionType) { this.permissionType = permissionType; } - - @Override - public boolean isCanView() { return canView; } - public void setCanView(boolean canView) { this.canView = canView; } - - @Override - public boolean isCanEdit() { return canEdit; } - public void setCanEdit(boolean canEdit) { this.canEdit = canEdit; } - - @Override - public boolean isCanSubmit() { return canSubmit; } - public void setCanSubmit(boolean canSubmit) { this.canSubmit = canSubmit; } - - @Override - public boolean isCanApprove() { return canApprove; } - public void setCanApprove(boolean canApprove) { this.canApprove = canApprove; } - - @Override - public boolean isCanReject() { return canReject; } - public void setCanReject(boolean canReject) { this.canReject = canReject; } - - @Override - public boolean isCanWithdraw() { return canWithdraw; } - public void setCanWithdraw(boolean canWithdraw) { this.canWithdraw = canWithdraw; } - - @Override - public LocalDateTime getStartTime() { return startTime; } - public void setStartTime(LocalDateTime startTime) { this.startTime = startTime; } - - @Override - public LocalDateTime getEndTime() { return endTime; } - public void setEndTime(LocalDateTime endTime) { this.endTime = endTime; } - - @Override - public boolean isActive() { return active; } - public void setActive(boolean active) { this.active = active; } - } -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgBusinessPeriodServiceImpl.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgBusinessPeriodServiceImpl.java deleted file mode 100644 index 0c79cd07..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgBusinessPeriodServiceImpl.java +++ /dev/null @@ -1,307 +0,0 @@ -package org.dromara.xg.service.impl; - -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.dromara.common.core.exception.ServiceException; -import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.satoken.utils.LoginHelper; -import org.dromara.xg.domain.XgBusinessPeriod; -import org.dromara.xg.domain.bo.XgBusinessPeriodBo; -import org.dromara.xg.domain.vo.XgBusinessPeriodVo; -import org.dromara.xg.mapper.XgBusinessPeriodMapper; -import org.dromara.xg.service.IXgBusinessPeriodService; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.time.LocalDateTime; -import java.util.Collection; -import java.util.List; - -/** - * 业务期管理Service业务层处理 - * - * @author ruoyi - * @date 2025-01-13 - */ -@Slf4j -@RequiredArgsConstructor -@Service -public class XgBusinessPeriodServiceImpl implements IXgBusinessPeriodService { - - private final XgBusinessPeriodMapper baseMapper; - - /** - * 查询业务期管理 - */ - @Override - public XgBusinessPeriodVo queryById(Long id) { - return baseMapper.selectVoById(id); - } - - /** - * 查询业务期管理列表 - */ - @Override - public TableDataInfo queryPageList(XgBusinessPeriodBo bo, PageQuery pageQuery) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); - } - - /** - * 查询业务期管理列表 - */ - @Override - public List queryList(XgBusinessPeriodBo bo) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); - } - - private LambdaQueryWrapper buildQueryWrapper(XgBusinessPeriodBo bo) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(ObjectUtil.isNotNull(bo.getBatchId()), XgBusinessPeriod::getBatchId, bo.getBatchId()); - lqw.like(StringUtils.isNotBlank(bo.getPeriodName()), XgBusinessPeriod::getPeriodName, bo.getPeriodName()); - lqw.eq(StringUtils.isNotBlank(bo.getPeriodType()), XgBusinessPeriod::getPeriodType, bo.getPeriodType()); - lqw.eq(StringUtils.isNotBlank(bo.getTargetRole()), XgBusinessPeriod::getTargetRole, bo.getTargetRole()); - lqw.eq(StringUtils.isNotBlank(bo.getStatus()), XgBusinessPeriod::getStatus, bo.getStatus()); - lqw.ge(ObjectUtil.isNotNull(bo.getStartTime()), XgBusinessPeriod::getStartTime, bo.getStartTime()); - lqw.le(ObjectUtil.isNotNull(bo.getEndTime()), XgBusinessPeriod::getEndTime, bo.getEndTime()); - lqw.orderByDesc(XgBusinessPeriod::getCreateTime); - return lqw; - } - - /** - * 新增业务期管理 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public Boolean insertByBo(XgBusinessPeriodBo bo) { - // 校验时间冲突 - if (checkPeriodTimeConflict(bo)) { - throw new ServiceException("业务期间时间冲突,请重新选择时间范围"); - } - - XgBusinessPeriod add = BeanUtil.toBean(bo, XgBusinessPeriod.class); - validEntityBeforeSave(add); - - // 设置创建信息 - add.setCreateBy(LoginHelper.getUserId()); - add.setCreateTime(LocalDateTime.now()); - - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setId(add.getId()); - log.info("新增业务期成功,ID: {}, 名称: {}", add.getId(), add.getPeriodName()); - } - return flag; - } - - /** - * 修改业务期管理 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public Boolean updateByBo(XgBusinessPeriodBo bo) { - // 校验时间冲突(排除自己) - if (checkPeriodTimeConflictExcludeSelf(bo)) { - throw new ServiceException("业务期间时间冲突,请重新选择时间范围"); - } - - XgBusinessPeriod update = BeanUtil.toBean(bo, XgBusinessPeriod.class); - validEntityBeforeSave(update); - - // 设置更新信息 - update.setUpdateBy(LoginHelper.getUserId()); - update.setUpdateTime(LocalDateTime.now()); - - boolean flag = baseMapper.updateById(update) > 0; - if (flag) { - log.info("修改业务期成功,ID: {}, 名称: {}", update.getId(), update.getPeriodName()); - } - return flag; - } - - /** - * 保存前的数据校验 - */ - private void validEntityBeforeSave(XgBusinessPeriod entity) { - if (ObjectUtil.isNull(entity.getBatchId())) { - throw new ServiceException("批次ID不能为空"); - } - if (StringUtils.isBlank(entity.getPeriodName())) { - throw new ServiceException("业务期名称不能为空"); - } - if (StringUtils.isBlank(entity.getPeriodType())) { - throw new ServiceException("业务期类型不能为空"); - } - if (ObjectUtil.isNull(entity.getStartTime()) || ObjectUtil.isNull(entity.getEndTime())) { - throw new ServiceException("开始时间和结束时间不能为空"); - } - if (entity.getStartTime().isAfter(entity.getEndTime())) { - throw new ServiceException("开始时间不能晚于结束时间"); - } - } - - /** - * 批量删除业务期管理 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public Boolean deleteWithValidByIds(Collection ids) { - if (ObjectUtil.isEmpty(ids)) { - throw new ServiceException("删除的业务期ID不能为空"); - } - - // 检查是否有正在使用的业务期 - List periods = baseMapper.selectBatchIds(ids); - for (XgBusinessPeriod period : periods) { - if ("ACTIVE".equals(period.getStatus())) { - throw new ServiceException("不能删除状态为活跃的业务期:" + period.getPeriodName()); - } - } - - boolean flag = baseMapper.deleteBatchIds(ids) > 0; - if (flag) { - log.info("批量删除业务期成功,删除数量: {}", ids.size()); - } - return flag; - } - - /** - * 根据批次ID查询业务期列表 - */ - @Override - public List queryByBatchId(Long batchId) { - if (ObjectUtil.isNull(batchId)) { - throw new ServiceException("批次ID不能为空"); - } - return baseMapper.selectByBatchId(batchId); - } - - /** - * 查询当前活跃的业务期 - */ - @Override - public List queryActivePeriods() { - return baseMapper.selectActivePeriods(); - } - - /** - * 检查业务期是否开放 - */ - @Override - public Boolean checkPeriodOpen(Long batchId) { - if (ObjectUtil.isNull(batchId)) { - return false; - } - - List activePeriods = baseMapper.selectActivePeriodsByBatchId(batchId); - if (ObjectUtil.isEmpty(activePeriods)) { - return false; - } - - LocalDateTime now = LocalDateTime.now(); - return activePeriods.stream().anyMatch(period -> - "ACTIVE".equals(period.getStatus()) && - now.isAfter(period.getStartTime()) && - now.isBefore(period.getEndTime()) - ); - } - - /** - * 开启业务期 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public Boolean openPeriod(Long id) { - if (ObjectUtil.isNull(id)) { - throw new ServiceException("业务期ID不能为空"); - } - - XgBusinessPeriod period = baseMapper.selectById(id); - if (ObjectUtil.isNull(period)) { - throw new ServiceException("业务期不存在"); - } - - if ("ACTIVE".equals(period.getStatus())) { - throw new ServiceException("业务期已经是开启状态"); - } - - // 检查时间是否合理 - LocalDateTime now = LocalDateTime.now(); - if (now.isAfter(period.getEndTime())) { - throw new ServiceException("业务期已过期,无法开启"); - } - - period.setStatus("ACTIVE"); - period.setUpdateBy(LoginHelper.getUserId()); - period.setUpdateTime(now); - - boolean flag = baseMapper.updateById(period) > 0; - if (flag) { - log.info("开启业务期成功,ID: {}, 名称: {}", id, period.getPeriodName()); - } - return flag; - } - - /** - * 关闭业务期 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public Boolean closePeriod(Long id) { - if (ObjectUtil.isNull(id)) { - throw new ServiceException("业务期ID不能为空"); - } - - XgBusinessPeriod period = baseMapper.selectById(id); - if (ObjectUtil.isNull(period)) { - throw new ServiceException("业务期不存在"); - } - - if ("CLOSED".equals(period.getStatus())) { - throw new ServiceException("业务期已经是关闭状态"); - } - - period.setStatus("CLOSED"); - period.setUpdateBy(LoginHelper.getUserId()); - period.setUpdateTime(LocalDateTime.now()); - - boolean flag = baseMapper.updateById(period) > 0; - if (flag) { - log.info("关闭业务期成功,ID: {}, 名称: {}", id, period.getPeriodName()); - } - return flag; - } - - /** - * 校验业务期时间是否冲突 - */ - @Override - public Boolean checkPeriodTimeConflict(XgBusinessPeriodBo bo) { - if (ObjectUtil.isNull(bo.getBatchId()) || ObjectUtil.isNull(bo.getStartTime()) || ObjectUtil.isNull(bo.getEndTime())) { - return false; - } - - return baseMapper.checkTimeConflict(bo.getBatchId(), bo.getStartTime(), bo.getEndTime()) > 0; - } - - /** - * 校验业务期时间是否冲突(排除自己) - */ - private Boolean checkPeriodTimeConflictExcludeSelf(XgBusinessPeriodBo bo) { - if (ObjectUtil.isNull(bo.getBatchId()) || ObjectUtil.isNull(bo.getStartTime()) || ObjectUtil.isNull(bo.getEndTime())) { - return false; - } - - return baseMapper.checkTimeConflictExcludeSelf(bo.getBatchId(), bo.getId(), bo.getStartTime(), bo.getEndTime()) > 0; - } -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgClassCadreServiceImpl.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgClassCadreServiceImpl.java deleted file mode 100644 index f993d646..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgClassCadreServiceImpl.java +++ /dev/null @@ -1,789 +0,0 @@ -package org.dromara.xg.service.impl; - -import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.mybatis.core.page.PageQuery; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.dromara.xg.domain.bo.XgClassCadreBo; -import org.dromara.xg.domain.vo.XgClassCadreVo; -import org.dromara.xg.domain.XgClassCadre; -import org.dromara.xg.mapper.XgClassCadreMapper; -import org.dromara.xg.service.IXgClassCadreService; -import org.dromara.common.satoken.utils.LoginHelper; -import org.dromara.common.core.exception.ServiceException; -import org.dromara.common.excel.utils.ExcelUtil; - -import java.util.List; -import java.util.Collection; -import java.util.Date; -import java.util.ArrayList; -import java.util.stream.Collectors; - -/** - * 班级干部信息Service业务层处理 - * - * @author Cursor AI - * @date 2025-01-09 - */ -@Slf4j -@RequiredArgsConstructor -@Service -public class XgClassCadreServiceImpl implements IXgClassCadreService { - - private static final Logger log = LoggerFactory.getLogger(XgClassCadreServiceImpl.class); - - private final XgClassCadreMapper baseMapper; - - /** - * 查询班级干部信息 - * - * @param id 班级干部信息主键 - * @return 班级干部信息 - */ - @Override - public XgClassCadreVo queryById(Long id) { - XgClassCadreVo cadreVo = baseMapper.selectVoById(id); - if (cadreVo == null) { - return null; - } - - // 数据权限验证 - if (!hasDataPermission(cadreVo)) { - throw new ServiceException("无权限查看该班级干部信息"); - } - - return cadreVo; - } - - /** - * 验证用户是否有查看指定班级干部信息的权限 - * - * @param cadreVo 班级干部信息 - * @return 是否有权限 - */ - private boolean hasDataPermission(XgClassCadreVo cadreVo) { - try { - // 获取当前登录用户信息 - var loginUser = LoginHelper.getLoginUser(); - if (loginUser == null) { - return false; - } - - Long currentUserId = loginUser.getUserId(); - var rolePermissions = loginUser.getRolePermission(); - - // 超级管理员拥有所有权限 - if (LoginHelper.isSuperAdmin(currentUserId) || - (rolePermissions != null && rolePermissions.contains("superadmin"))) { - return true; - } - - // 学生处管理员:可以查看所有班级干部信息 - if (rolePermissions != null && rolePermissions.contains("student_affairs_admin")) { - return true; - } - - // 其他角色暂时允许查看(可根据业务需求调整) - return true; - - } catch (Exception e) { - log.error("数据权限验证异常: {}", e.getMessage(), e); - return false; - } - } - - /** - * 分页查询班级干部信息列表 - * - * @param bo 班级干部信息 - * @param pageQuery 分页查询条件 - * @return 班级干部信息集合 - */ - @Override - public TableDataInfo queryPageList(XgClassCadreBo bo, PageQuery pageQuery) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); - } - - /** - * 查询班级干部信息列表 - * - * @param bo 班级干部信息 - * @return 班级干部信息集合 - */ - @Override - public List queryList(XgClassCadreBo bo) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); - } - - /** - * 构建查询条件 - */ - private LambdaQueryWrapper buildQueryWrapper(XgClassCadreBo bo) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.orderByDesc(XgClassCadre::getCreateTime); - lqw.eq(bo.getClassId() != null, XgClassCadre::getClassId, bo.getClassId()); - lqw.eq(bo.getStudentId() != null, XgClassCadre::getStudentId, bo.getStudentId()); - lqw.like(StringUtils.isNotBlank(bo.getStudentNo()), XgClassCadre::getStudentNo, bo.getStudentNo()); - lqw.like(StringUtils.isNotBlank(bo.getStudentName()), XgClassCadre::getStudentName, bo.getStudentName()); - lqw.eq(StringUtils.isNotBlank(bo.getPositionCode()), XgClassCadre::getPositionCode, bo.getPositionCode()); - lqw.like(StringUtils.isNotBlank(bo.getPositionName()), XgClassCadre::getPositionName, bo.getPositionName()); - lqw.eq(bo.getPositionLevel() != null, XgClassCadre::getPositionLevel, bo.getPositionLevel()); - lqw.eq(StringUtils.isNotBlank(bo.getPositionCategory()), XgClassCadre::getPositionCategory, bo.getPositionCategory()); - lqw.eq(bo.getIsCurrent() != null, XgClassCadre::getIsCurrent, bo.getIsCurrent()); - lqw.eq(StringUtils.isNotBlank(bo.getCadreStatus()), XgClassCadre::getCadreStatus, bo.getCadreStatus()); - lqw.eq(StringUtils.isNotBlank(bo.getWorkPerformance()), XgClassCadre::getWorkPerformance, bo.getWorkPerformance()); - - // 添加数据权限控制 - addDataPermissionFilter(lqw); - - return lqw; - } - - /** - * 添加数据权限过滤条件 - */ - private void addDataPermissionFilter(LambdaQueryWrapper lqw) { - try { - // 获取当前登录用户信息 - var loginUser = LoginHelper.getLoginUser(); - if (loginUser == null) { - log.warn("未登录用户尝试访问班级干部信息数据"); - lqw.eq(XgClassCadre::getId, 0L); - return; - } - - Long currentUserId = loginUser.getUserId(); - var rolePermissions = loginUser.getRolePermission(); - - log.debug("当前用户[{}]权限过滤 - 用户ID: {}, 角色权限: {}", - loginUser.getUsername(), currentUserId, rolePermissions); - - // 超级管理员拥有所有权限,无需过滤 - if (LoginHelper.isSuperAdmin(currentUserId)) { - log.debug("当前用户[{}]为系统超级管理员,可查看所有班级干部信息", currentUserId); - return; - } - - // 检查角色权限 - if (rolePermissions != null && rolePermissions.contains("superadmin")) { - log.debug("当前用户[{}]拥有superadmin权限,可查看所有班级干部信息", currentUserId); - return; - } - - // 学生处管理员:可以查看所有班级干部信息 - if (rolePermissions != null && rolePermissions.contains("student_affairs_admin")) { - log.debug("当前用户[{}]为学生处管理员,可查看所有班级干部信息", currentUserId); - return; - } - - // 正式环境中应该根据具体角色进行权限控制 - log.debug("当前用户[{}]使用默认权限,可查看所有班级干部信息(开发模式)", currentUserId); - - } catch (Exception e) { - log.error("数据权限过滤异常: {}", e.getMessage(), e); - // 异常情况下暂时允许数据访问,避免系统无法使用 - log.warn("权限过滤异常,临时允许数据访问"); - } - } - - /** - * 新增班级干部信息 - * - * @param bo 班级干部信息 - * @return 结果 - */ - @Override - public Boolean insertByBo(XgClassCadreBo bo) { - XgClassCadre add = MapstructUtils.convert(bo, XgClassCadre.class); - validEntityBeforeSave(add); - - // 设置默认值 - if (add.getIsCurrent() == null) { - add.setIsCurrent(true); - } - if (StringUtils.isBlank(add.getCadreStatus())) { - add.setCadreStatus("1"); // 在任 - } - if (add.getIsConcurrent() == null) { - add.setIsConcurrent(false); - } - - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setId(add.getId()); - } - return flag; - } - - /** - * 修改班级干部信息 - * - * @param bo 班级干部信息 - * @return 结果 - */ - @Override - public Boolean updateByBo(XgClassCadreBo bo) { - XgClassCadre update = MapstructUtils.convert(bo, XgClassCadre.class); - validEntityBeforeSave(update); - return baseMapper.updateById(update) > 0; - } - - /** - * 保存前的数据校验 - */ - private void validEntityBeforeSave(XgClassCadre entity) { - // 自动设置职务级别(根据职务编码) - if (StringUtils.isNotBlank(entity.getPositionCode()) && entity.getPositionLevel() == null) { - entity.setPositionLevel(determinePositionLevel(entity.getPositionCode())); - } - - // 校验同一班级同一职务是否已存在 - if (entity.getClassId() != null && StringUtils.isNotBlank(entity.getPositionCode())) { - boolean exists = checkPositionOccupied(entity.getClassId(), entity.getPositionCode(), entity.getId()); - if (exists) { - throw new ServiceException("该班级的" + entity.getPositionName() + "职务已被占用"); - } - } - - // 校验学生是否已有其他在任职务 - if (entity.getStudentId() != null && Boolean.TRUE.equals(entity.getIsCurrent())) { - boolean hasOther = checkStudentHasOtherPosition(entity.getStudentId(), entity.getId()); - if (hasOther) { - throw new ServiceException("该学生已担任其他职务,不能重复任职"); - } - } - } - - /** - * 根据职务编码确定职务级别 - * - * @param positionCode 职务编码 - * @return 职务级别 - */ - private Integer determinePositionLevel(String positionCode) { - // 根据职务编码映射职务级别 - switch (positionCode.toLowerCase()) { - case "monitor": - case "class_monitor": - return 1; // 班长 - case "deputy": - case "deputy_monitor": - return 2; // 副班长 - case "secretary": - case "study_secretary": - case "life_secretary": - case "sports_secretary": - case "publicity_secretary": - case "organization_secretary": - return 3; // 委员 - default: - return 9; // 普通成员 - } - } - - /** - * 校验并批量删除班级干部信息 - * - * @param ids 需要删除的班级干部信息主键集合 - * @param isValid 是否校验,true-删除前校验,false-不校验 - * @return 结果 - */ - @Override - public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if (isValid) { - // 校验是否可以删除 - for (Long id : ids) { - XgClassCadre cadre = baseMapper.selectById(id); - if (cadre != null && Boolean.TRUE.equals(cadre.getIsCurrent())) { - throw new ServiceException("班级干部[" + cadre.getStudentName() + "]正在任职,不能删除"); - } - } - } - return baseMapper.deleteByIds(ids) > 0; - } - - // ==================== 业务方法 ==================== - - /** - * 根据班级ID查询班干部列表 - * - * @param classId 班级ID - * @return 班干部列表 - */ - @Override - public List queryCadresByClassId(Long classId) { - return baseMapper.selectCadresByClassId(classId); - } - - /** - * 根据学生ID查询班干部信息 - * - * @param studentId 学生ID - * @return 班干部信息列表 - */ - @Override - public List queryCadresByStudentId(Long studentId) { - return baseMapper.selectCadresByStudentId(studentId); - } - - /** - * 查询当前在任班干部列表 - * - * @param classId 班级ID(可选) - * @return 当前在任班干部列表 - */ - @Override - public List queryCurrentCadres(Long classId) { - return baseMapper.selectCurrentCadres(classId); - } - - /** - * 根据职务编码查询班干部 - * - * @param classId 班级ID - * @param positionCode 职务编码 - * @return 班干部信息 - */ - @Override - public XgClassCadreVo queryCadreByPosition(Long classId, String positionCode) { - return baseMapper.selectCadreByPosition(classId, positionCode); - } - - /** - * 任命班干部 - * - * @param bo 班干部信息 - * @return 结果 - */ - @Override - public Boolean appointCadre(XgClassCadreBo bo) { - // 检查职务是否已被占用 - boolean occupied = checkPositionOccupied(bo.getClassId(), bo.getPositionCode(), null); - if (occupied) { - throw new ServiceException("该职务已被占用,请先免职当前干部"); - } - - // 检查学生是否已有其他职务 - boolean hasOther = checkStudentHasOtherPosition(bo.getStudentId(), null); - if (hasOther) { - throw new ServiceException("该学生已担任其他职务,不能重复任职"); - } - - // 设置任命相关信息 - bo.setIsCurrent(true); - bo.setCadreStatus("1"); // 在任 - bo.setAppointmentDate(new Date()); - bo.setTermStartDate(new Date()); - - // 计算任期结束日期 - if (bo.getTermDuration() != null) { - java.util.Calendar cal = java.util.Calendar.getInstance(); - cal.setTime(bo.getTermStartDate()); - cal.add(java.util.Calendar.MONTH, bo.getTermDuration()); - bo.setTermEndDate(cal.getTime()); - } - - return insertByBo(bo); - } - - /** - * 免职班干部 - * - * @param cadreId 班干部ID - * @param dismissalReason 免职原因 - * @param dismissalDate 免职日期 - * @return 结果 - */ - @Override - public Boolean dismissCadre(Long cadreId, String dismissalReason, Date dismissalDate) { - XgClassCadre cadre = baseMapper.selectById(cadreId); - if (cadre == null) { - throw new ServiceException("班级干部信息不存在"); - } - - cadre.setIsCurrent(false); - cadre.setCadreStatus("4"); // 免职 - cadre.setDismissalDate(dismissalDate); - cadre.setDismissalReason(dismissalReason); - cadre.setDismisserId(LoginHelper.getUserId()); - cadre.setDismisserName(LoginHelper.getUsername()); - - return baseMapper.updateById(cadre) > 0; - } - - /** - * 调任班干部 - * - * @param cadreId 班干部ID - * @param newPositionCode 新职务编码 - * @param newPositionName 新职务名称 - * @param transferReason 调任原因 - * @param effectiveDate 生效日期 - * @return 结果 - */ - @Override - public Boolean transferCadre(Long cadreId, String newPositionCode, String newPositionName, String transferReason, Date effectiveDate) { - XgClassCadre cadre = baseMapper.selectById(cadreId); - if (cadre == null) { - throw new ServiceException("班级干部信息不存在"); - } - - // 检查新职务是否已被占用 - boolean occupied = checkPositionOccupied(cadre.getClassId(), newPositionCode, cadreId); - if (occupied) { - throw new ServiceException("目标职务已被占用"); - } - - // 更新职务信息 - cadre.setPositionCode(newPositionCode); - cadre.setPositionName(newPositionName); - cadre.setCadreStatus("5"); // 调任 - cadre.setRemark(transferReason); - - return baseMapper.updateById(cadre) > 0; - } - - /** - * 续任班干部 - * - * @param cadreId 班干部ID - * @param newTermDuration 新任期时长(月) - * @param renewalReason 续任原因 - * @return 结果 - */ - @Override - public Boolean renewCadre(Long cadreId, Integer newTermDuration, String renewalReason) { - XgClassCadre cadre = baseMapper.selectById(cadreId); - if (cadre == null) { - throw new ServiceException("班级干部信息不存在"); - } - - // 更新任期信息 - cadre.setTermDuration(newTermDuration); - - // 重新计算任期结束日期 - if (cadre.getTermStartDate() != null) { - java.util.Calendar cal = java.util.Calendar.getInstance(); - cal.setTime(cadre.getTermStartDate()); - cal.add(java.util.Calendar.MONTH, newTermDuration); - cadre.setTermEndDate(cal.getTime()); - } - - cadre.setRemark(renewalReason); - - return baseMapper.updateById(cadre) > 0; - } - - /** - * 班干部辞职 - * - * @param cadreId 班干部ID - * @param resignationReason 辞职原因 - * @param resignationDate 辞职日期 - * @return 结果 - */ - @Override - public Boolean resignCadre(Long cadreId, String resignationReason, Date resignationDate) { - XgClassCadre cadre = baseMapper.selectById(cadreId); - if (cadre == null) { - throw new ServiceException("班级干部信息不存在"); - } - - cadre.setIsCurrent(false); - cadre.setCadreStatus("3"); // 辞职 - cadre.setDismissalDate(resignationDate); - cadre.setDismissalReason(resignationReason); - - return baseMapper.updateById(cadre) > 0; - } - - /** - * 查询即将到期的班干部列表 - * - * @param days 提前天数 - * @return 即将到期的班干部列表 - */ - @Override - public List queryExpiringCadres(Integer days) { - return baseMapper.selectExpiringCadres(days); - } - - /** - * 查询已到期的班干部列表 - * - * @return 已到期的班干部列表 - */ - @Override - public List queryExpiredCadres() { - return baseMapper.selectExpiredCadres(); - } - - /** - * 根据学院查询班干部统计 - * - * @param collegeName 学院名称 - * @return 班干部统计信息 - */ - @Override - public List queryCadresByCollege(String collegeName) { - return baseMapper.selectCadresByCollege(collegeName); - } - - /** - * 根据年级查询班干部统计 - * - * @param grade 年级 - * @return 班干部统计信息 - */ - @Override - public List queryCadresByGrade(String grade) { - return baseMapper.selectCadresByGrade(grade); - } - - /** - * 查询班干部任期统计 - * - * @param startDate 开始日期 - * @param endDate 结束日期 - * @return 任期统计信息 - */ - @Override - public List queryCadreTermStatistics(Date startDate, Date endDate) { - return baseMapper.selectCadreTermStatistics(startDate, endDate); - } - - /** - * 检查职务是否已被占用 - * - * @param classId 班级ID - * @param positionCode 职务编码 - * @param excludeId 排除的记录ID - * @return 是否已被占用 - */ - @Override - public boolean checkPositionOccupied(Long classId, String positionCode, Long excludeId) { - return baseMapper.checkPositionOccupied(classId, positionCode, excludeId); - } - - /** - * 检查学生是否已有其他职务 - * - * @param studentId 学生ID - * @param excludeId 排除的记录ID - * @return 是否已有其他职务 - */ - @Override - public boolean checkStudentHasOtherPosition(Long studentId, Long excludeId) { - return baseMapper.checkStudentHasOtherPosition(studentId, excludeId); - } - - /** - * 批量更新班干部状态 - * - * @param cadreIds 班干部ID列表 - * @param status 新状态 - * @return 更新结果 - */ - @Override - public Boolean batchUpdateCadreStatus(List cadreIds, String status) { - if (cadreIds == null || cadreIds.isEmpty()) { - return false; - } - int result = baseMapper.batchUpdateCadreStatus(cadreIds, status); - return result > 0; - } - - /** - * 根据职务级别查询班干部 - * - * @param positionLevel 职务级别 - * @return 班干部列表 - */ - @Override - public List queryCadresByPositionLevel(Integer positionLevel) { - return baseMapper.selectCadresByPositionLevel(positionLevel); - } - - /** - * 查询班干部工作表现统计 - * - * @param performance 工作表现 - * @return 统计结果 - */ - @Override - public List queryCadresByPerformance(String performance) { - return baseMapper.selectCadresByPerformance(performance); - } - - /** - * 查询班级干部完整信息(包含关联数据) - * - * @param id 班干部ID - * @return 班干部完整信息 - */ - @Override - public XgClassCadreVo queryCadreWithDetails(Long id) { - return baseMapper.selectCadreWithDetails(id); - } - - /** - * 自动处理到期班干部 - * - * @return 处理结果 - */ - @Override - public Boolean autoProcessExpiredCadres() { - try { - // 查询已到期的班干部 - List expiredCadres = queryExpiredCadres(); - - if (expiredCadres.isEmpty()) { - log.info("没有找到已到期的班干部"); - return true; - } - - // 批量更新状态为到期 - List expiredIds = expiredCadres.stream() - .map(XgClassCadreVo::getId) - .collect(Collectors.toList()); - - int result = baseMapper.batchUpdateCadreStatus(expiredIds, "2"); // 到期 - - log.info("自动处理到期班干部完成,处理数量: {}", result); - return result > 0; - - } catch (Exception e) { - log.error("自动处理到期班干部异常: {}", e.getMessage(), e); - return false; - } - } - - /** - * 发送到期提醒通知 - * - * @param days 提前天数 - * @return 发送结果 - */ - @Override - public Boolean sendExpirationReminder(Integer days) { - try { - // 查询即将到期的班干部 - List expiringCadres = queryExpiringCadres(days); - - if (expiringCadres.isEmpty()) { - log.info("没有找到即将到期的班干部"); - return true; - } - - // 这里可以集成短信、邮件或系统通知功能 - // 暂时只记录日志 - log.info("发送到期提醒通知,即将到期班干部数量: {}", expiringCadres.size()); - - for (XgClassCadreVo cadre : expiringCadres) { - log.info("班干部[{}]的{}职务将于{}到期", - cadre.getStudentName(), - cadre.getPositionName(), - cadre.getTermEndDate()); - } - - return true; - - } catch (Exception e) { - log.error("发送到期提醒通知异常: {}", e.getMessage(), e); - return false; - } - } - - /** - * 导出班干部信息 - * - * @param bo 查询条件 - * @return 导出数据 - */ - @Override - public List exportCadreList(XgClassCadreBo bo) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); - } - - /** - * 导入班干部信息 - * - * @param cadreList 班干部信息列表 - * @param isUpdateSupport 是否支持更新 - * @param operName 操作人 - * @return 导入结果 - */ - @Override - public String importCadreList(List cadreList, Boolean isUpdateSupport, String operName) { - if (cadreList == null || cadreList.isEmpty()) { - throw new ServiceException("导入班干部数据不能为空!"); - } - - int successNum = 0; - int failureNum = 0; - StringBuilder successMsg = new StringBuilder(); - StringBuilder failureMsg = new StringBuilder(); - - for (XgClassCadreVo cadreVo : cadreList) { - try { - // 转换为业务对象 - XgClassCadreBo bo = MapstructUtils.convert(cadreVo, XgClassCadreBo.class); - - // 验证必要字段 - if (bo.getClassId() == null || bo.getStudentId() == null || - StringUtils.isBlank(bo.getPositionCode()) || StringUtils.isBlank(bo.getPositionName())) { - failureNum++; - failureMsg.append("
").append(failureNum).append("、班干部信息缺少必要字段"); - continue; - } - - // 检查是否已存在 - XgClassCadreVo existingCadre = queryCadreByPosition(bo.getClassId(), bo.getPositionCode()); - - if (existingCadre == null) { - // 新增 - insertByBo(bo); - successNum++; - successMsg.append("
").append(successNum).append("、班干部 ").append(bo.getStudentName()).append(" 导入成功"); - } else if (isUpdateSupport) { - // 更新 - bo.setId(existingCadre.getId()); - updateByBo(bo); - successNum++; - successMsg.append("
").append(successNum).append("、班干部 ").append(bo.getStudentName()).append(" 更新成功"); - } else { - failureNum++; - failureMsg.append("
").append(failureNum).append("、班干部 ").append(bo.getStudentName()).append(" 已存在"); - } - - } catch (Exception e) { - failureNum++; - String msg = "
" + failureNum + "、班干部 " + cadreVo.getStudentName() + " 导入失败:"; - failureMsg.append(msg).append(e.getMessage()); - log.error("导入班干部失败", e); - } - } - - if (failureNum > 0) { - failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); - throw new ServiceException(failureMsg.toString()); - } else { - successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); - } - - return successMsg.toString(); - } -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgClassInfoServiceImpl.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgClassInfoServiceImpl.java deleted file mode 100644 index f0366f44..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgClassInfoServiceImpl.java +++ /dev/null @@ -1,596 +0,0 @@ -package org.dromara.xg.service.impl; - -import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.mybatis.core.page.PageQuery; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.dromara.xg.domain.bo.XgClassInfoBo; -import org.dromara.xg.domain.vo.XgClassInfoVo; -import org.dromara.xg.domain.XgClassInfo; -import org.dromara.xg.mapper.XgClassInfoMapper; -import org.dromara.xg.service.IXgClassInfoService; -import org.dromara.common.satoken.utils.LoginHelper; -import org.dromara.common.core.exception.ServiceException; - -import java.util.List; -import java.util.Collection; -import java.util.Map; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.stream.Collectors; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * 班级信息Service业务层处理 - * - * @author Cursor AI - * @date 2025-01-12 - */ -@Slf4j -@RequiredArgsConstructor -@Service -public class XgClassInfoServiceImpl implements IXgClassInfoService { - - private static final Logger log = LoggerFactory.getLogger(XgClassInfoServiceImpl.class); - - private final XgClassInfoMapper baseMapper; - - /** - * 查询班级信息 - * - * @param id 主键 - * @return 班级信息 - */ - @Override - public XgClassInfoVo queryById(Long id) { - XgClassInfoVo classVo = baseMapper.selectVoById(id); - if (classVo == null) { - return null; - } - - // 数据权限验证 - if (!hasDataPermission(classVo)) { - throw new ServiceException("无权限查看该班级信息"); - } - - return classVo; - } - - /** - * 验证用户是否有查看指定班级信息的权限 - * - * @param classVo 班级信息 - * @return 是否有权限 - */ - private boolean hasDataPermission(XgClassInfoVo classVo) { - try { - // 获取当前登录用户信息 - var loginUser = LoginHelper.getLoginUser(); - if (loginUser == null) { - return false; - } - - Long currentUserId = loginUser.getUserId(); - var rolePermissions = loginUser.getRolePermission(); - - // 超级管理员拥有所有权限 - if (LoginHelper.isSuperAdmin(currentUserId) || - (rolePermissions != null && rolePermissions.contains("superadmin"))) { - return true; - } - - // 学生处管理员:可以查看所有班级信息 - if (rolePermissions != null && rolePermissions.contains("student_affairs_admin")) { - return true; - } - - // 二级学院管理员:只能查看本学院班级信息 - if (rolePermissions != null && rolePermissions.contains("college_admin")) { - String userCollegeCode = LoginHelper.getDeptId() != null ? LoginHelper.getDeptId().toString() : ""; - return userCollegeCode.equals(classVo.getCollegeCode()); - } - - // 辅导员:只能查看自己负责的班级 - if (rolePermissions != null && rolePermissions.contains("counselor")) { - return currentUserId.equals(classVo.getCounselorId()); - } - - // 班主任:只能查看自己的班级 - if (rolePermissions != null && rolePermissions.contains("class_teacher")) { - return currentUserId.equals(classVo.getClassTeacherId()); - } - - return false; - - } catch (Exception e) { - log.error("数据权限验证异常: {}", e.getMessage(), e); - return false; - } - } - - /** - * 分页查询班级信息列表 - * - * @param bo 查询条件 - * @param pageQuery 分页参数 - * @return 班级信息分页列表 - */ - @Override - public TableDataInfo queryPageList(XgClassInfoBo bo, PageQuery pageQuery) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); - } - - /** - * 查询符合条件的班级信息列表 - * - * @param bo 查询条件 - * @return 班级信息列表 - */ - @Override - public List queryList(XgClassInfoBo bo) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); - } - - private LambdaQueryWrapper buildQueryWrapper(XgClassInfoBo bo) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.orderByAsc(XgClassInfo::getEnrollmentYear).orderByAsc(XgClassInfo::getCollegeCode).orderByAsc(XgClassInfo::getClassCode); - lqw.eq(StringUtils.isNotBlank(bo.getClassCode()), XgClassInfo::getClassCode, bo.getClassCode()); - lqw.like(StringUtils.isNotBlank(bo.getClassName()), XgClassInfo::getClassName, bo.getClassName()); - lqw.eq(bo.getEnrollmentYear() != null, XgClassInfo::getEnrollmentYear, bo.getEnrollmentYear()); - lqw.eq(StringUtils.isNotBlank(bo.getMajorCode()), XgClassInfo::getMajorCode, bo.getMajorCode()); - lqw.like(StringUtils.isNotBlank(bo.getMajorName()), XgClassInfo::getMajorName, bo.getMajorName()); - lqw.eq(StringUtils.isNotBlank(bo.getCollegeCode()), XgClassInfo::getCollegeCode, bo.getCollegeCode()); - lqw.like(StringUtils.isNotBlank(bo.getCollegeName()), XgClassInfo::getCollegeName, bo.getCollegeName()); - lqw.eq(bo.getCounselorId() != null, XgClassInfo::getCounselorId, bo.getCounselorId()); - lqw.like(StringUtils.isNotBlank(bo.getCounselorName()), XgClassInfo::getCounselorName, bo.getCounselorName()); - lqw.eq(bo.getClassTeacherId() != null, XgClassInfo::getClassTeacherId, bo.getClassTeacherId()); - lqw.like(StringUtils.isNotBlank(bo.getClassTeacherName()), XgClassInfo::getClassTeacherName, bo.getClassTeacherName()); - lqw.eq(StringUtils.isNotBlank(bo.getClassStatus()), XgClassInfo::getClassStatus, bo.getClassStatus()); - - // 添加数据权限控制 - addDataPermissionFilter(lqw); - - return lqw; - } - - /** - * 添加数据权限过滤条件 - * - * @param lqw 查询条件构造器 - */ - private void addDataPermissionFilter(LambdaQueryWrapper lqw) { - try { - // 获取当前登录用户信息 - var loginUser = LoginHelper.getLoginUser(); - if (loginUser == null) { - log.warn("未登录用户尝试访问班级信息数据"); - // 未登录用户不显示任何数据 - lqw.eq(XgClassInfo::getId, 0L); - return; - } - - Long currentUserId = loginUser.getUserId(); - var rolePermissions = loginUser.getRolePermission(); - - log.debug("当前用户[{}]权限过滤 - 用户ID: {}, 角色权限: {}", - loginUser.getUsername(), currentUserId, rolePermissions); - - // 超级管理员拥有所有权限,无需过滤 - if (LoginHelper.isSuperAdmin(currentUserId)) { - log.debug("当前用户[{}]为系统超级管理员,可查看所有班级信息", currentUserId); - return; - } - - // 检查角色权限 - if (rolePermissions != null && rolePermissions.contains("superadmin")) { - log.debug("当前用户[{}]拥有superadmin权限,可查看所有班级信息", currentUserId); - return; - } - - // 学生处管理员:可以查看所有班级信息 - if (rolePermissions != null && rolePermissions.contains("student_affairs_admin")) { - log.debug("当前用户[{}]为学生处管理员,可查看所有班级信息", currentUserId); - return; - } - - // 二级学院管理员:只能查看本学院班级信息 - if (rolePermissions != null && rolePermissions.contains("college_admin")) { - String userCollegeCode = LoginHelper.getDeptId() != null ? LoginHelper.getDeptId().toString() : ""; - log.debug("当前用户[{}]为二级学院管理员,只能查看学院[{}]的班级信息", currentUserId, userCollegeCode); - if (StringUtils.isNotBlank(userCollegeCode)) { - lqw.eq(XgClassInfo::getCollegeCode, userCollegeCode); - } - return; - } - - // 辅导员:只能查看自己负责的班级 - if (rolePermissions != null && rolePermissions.contains("counselor")) { - log.debug("当前用户[{}]为辅导员,可查看班级信息", currentUserId); - // 暂时允许查看所有班级,具体权限在前端或具体业务中控制 - // TODO: 后续可根据实际需求添加辅导员关联过滤 - // lqw.eq(XgClassInfo::getCounselorId, currentUserId); - return; - } - - // 班主任:只能查看自己的班级 - if (rolePermissions != null && rolePermissions.contains("class_teacher")) { - log.debug("当前用户[{}]为班主任,可查看班级信息", currentUserId); - // 暂时允许查看所有班级,具体权限在前端或具体业务中控制 - // TODO: 后续可根据实际需求添加班主任关联过滤 - // lqw.eq(XgClassInfo::getClassTeacherId, currentUserId); - return; - } - - // 其他情况:暂时允许查看所有数据(开发调试阶段) - // 正式环境中应该根据具体角色进行权限控制 - log.debug("当前用户[{}]使用默认权限,可查看所有班级信息(开发模式)", currentUserId); - // 生产环境中应该改为:lqw.eq(XgClassInfo::getId, 0L); - - } catch (Exception e) { - log.error("数据权限过滤异常: {}", e.getMessage(), e); - // 异常情况下暂时允许查看数据,避免系统无法使用 - log.warn("权限过滤异常,临时允许数据访问"); - } - } - - /** - * 新增班级信息 - * - * @param bo 班级信息 - * @return 是否新增成功 - */ - @Override - public Boolean insertByBo(XgClassInfoBo bo) { - XgClassInfo add = MapstructUtils.convert(bo, XgClassInfo.class); - validEntityBeforeSave(add); - - // 设置默认状态 - if (StringUtils.isBlank(add.getClassStatus())) { - add.setClassStatus("1"); // 正常 - } - - // 初始化人数统计 - if (add.getCurrentStudentCount() == null) { - add.setCurrentStudentCount(0); - } - if (add.getMaleCount() == null) { - add.setMaleCount(0); - } - if (add.getFemaleCount() == null) { - add.setFemaleCount(0); - } - - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setId(add.getId()); - } - return flag; - } - - /** - * 修改班级信息 - * - * @param bo 班级信息 - * @return 是否修改成功 - */ - @Override - public Boolean updateByBo(XgClassInfoBo bo) { - XgClassInfo update = MapstructUtils.convert(bo, XgClassInfo.class); - validEntityBeforeSave(update); - return baseMapper.updateById(update) > 0; - } - - /** - * 保存前的数据校验 - */ - private void validEntityBeforeSave(XgClassInfo entity) { - // 校验班级代码唯一性 - if (StringUtils.isNotBlank(entity.getClassCode())) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(XgClassInfo::getClassCode, entity.getClassCode()); - if (entity.getId() != null) { - lqw.ne(XgClassInfo::getId, entity.getId()); - } - boolean exists = baseMapper.exists(lqw); - if (exists) { - throw new ServiceException("班级代码已存在"); - } - } - } - - /** - * 校验并批量删除班级信息 - * - * @param ids 待删除的主键集合 - * @param isValid 是否进行有效性校验 - * @return 是否删除成功 - */ - @Override - public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if (isValid) { - // 校验是否可以删除 - for (Long id : ids) { - XgClassInfo classInfo = baseMapper.selectById(id); - if (classInfo != null && classInfo.getCurrentStudentCount() > 0) { - throw new ServiceException("班级[" + classInfo.getClassName() + "]还有学生,不能删除"); - } - } - } - return baseMapper.deleteByIds(ids) > 0; - } - - /** - * 根据班级代码查询班级信息 - * - * @param classCode 班级代码 - * @return 班级信息 - */ - @Override - public XgClassInfoVo queryByClassCode(String classCode) { - return baseMapper.selectByClassCode(classCode); - } - - /** - * 查询学院班级列表 - * - * @param collegeCode 学院代码 - * @return 班级列表 - */ - @Override - public List queryByCollegeCode(String collegeCode) { - return baseMapper.selectByCollegeCode(collegeCode); - } - - /** - * 查询班级选项列表 - * - * @return 班级选项列表 - */ - @Override - public List> queryClassOptions() { - return baseMapper.selectClassOptions(); - } - - /** - * 更新班级人数统计 - * - * @param classId 班级ID - * @return 是否更新成功 - */ - @Override - public Boolean updateClassStudentCount(Long classId) { - return baseMapper.updateClassStudentCount(classId) > 0; - } - - /** - * 检查班级代码是否存在 - * - * @param classCode 班级代码 - * @param classId 班级ID(修改时使用) - * @return 是否存在 - */ - @Override - public Boolean checkClassCodeExists(String classCode, Long classId) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(XgClassInfo::getClassCode, classCode); - if (classId != null) { - lqw.ne(XgClassInfo::getId, classId); - } - return baseMapper.exists(lqw); - } - - /** - * 查询辅导员选项列表 - * - * @param collegeCode 学院代码(可选) - * @return 辅导员选项列表 - */ - @Override - public List> queryCounselorOptions(String collegeCode) { - try { - // 查询系统用户表获取辅导员信息 - // 这里需要根据实际的用户表结构调整 - List> options = new ArrayList<>(); - - // TODO: 实际实现需要查询sys_user表获取辅导员用户 - // 临时返回模拟数据 - Map option1 = new HashMap<>(); - option1.put("value", 1001L); - option1.put("label", "张辅导员"); - option1.put("code", "counselor001"); - option1.put("collegeCode", "CS"); - options.add(option1); - - Map option2 = new HashMap<>(); - option2.put("value", 1002L); - option2.put("label", "李辅导员"); - option2.put("code", "counselor002"); - option2.put("collegeCode", "EE"); - options.add(option2); - - // 如果指定了学院代码,过滤结果 - if (StringUtils.isNotBlank(collegeCode)) { - options = options.stream() - .filter(opt -> collegeCode.equals(opt.get("collegeCode"))) - .collect(Collectors.toList()); - } - - return options; - } catch (Exception e) { - log.error("查询辅导员选项失败: {}", e.getMessage(), e); - return Collections.emptyList(); - } - } - - /** - * 查询班主任选项列表 - * - * @param collegeCode 学院代码(可选) - * @return 班主任选项列表 - */ - @Override - public List> queryClassTeacherOptions(String collegeCode) { - try { - // 查询系统用户表获取班主任信息 - // 这里需要根据实际的用户表结构调整 - List> options = new ArrayList<>(); - - // TODO: 实际实现需要查询sys_user表获取班主任用户 - // 临时返回模拟数据 - Map option1 = new HashMap<>(); - option1.put("value", 2001L); - option1.put("label", "王老师"); - option1.put("code", "teacher001"); - option1.put("collegeCode", "CS"); - options.add(option1); - - Map option2 = new HashMap<>(); - option2.put("value", 2002L); - option2.put("label", "赵老师"); - option2.put("code", "teacher002"); - option2.put("collegeCode", "EE"); - options.add(option2); - - // 如果指定了学院代码,过滤结果 - if (StringUtils.isNotBlank(collegeCode)) { - options = options.stream() - .filter(opt -> collegeCode.equals(opt.get("collegeCode"))) - .collect(Collectors.toList()); - } - - return options; - } catch (Exception e) { - log.error("查询班主任选项失败: {}", e.getMessage(), e); - return Collections.emptyList(); - } - } - - /** - * 查询班级信息总体统计 - * - * @return 统计数据 - */ - @Override - public Map queryClassInfoStatistics() { - try { - Map statistics = new HashMap<>(); - - // 查询总体统计数据 - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - addDataPermissionFilter(lqw); - - // 总班级数 - long totalCount = baseMapper.selectCount(lqw); - - // 正常班级数 - LambdaQueryWrapper activeLqw = Wrappers.lambdaQuery(); - activeLqw.eq(XgClassInfo::getClassStatus, "1"); - addDataPermissionFilter(activeLqw); - long activeCount = baseMapper.selectCount(activeLqw); - - // 停招班级数 - LambdaQueryWrapper suspendedLqw = Wrappers.lambdaQuery(); - suspendedLqw.eq(XgClassInfo::getClassStatus, "2"); - addDataPermissionFilter(suspendedLqw); - long suspendedCount = baseMapper.selectCount(suspendedLqw); - - // 已毕业班级数 - LambdaQueryWrapper graduatedLqw = Wrappers.lambdaQuery(); - graduatedLqw.eq(XgClassInfo::getClassStatus, "3"); - addDataPermissionFilter(graduatedLqw); - long graduatedCount = baseMapper.selectCount(graduatedLqw); - - // 平均学生人数 - List allClasses = baseMapper.selectVoList(lqw); - double averageStudentCount = allClasses.stream() - .mapToInt(clazz -> clazz.getCurrentStudentCount() != null ? clazz.getCurrentStudentCount() : 0) - .average() - .orElse(0.0); - - statistics.put("totalCount", totalCount); - statistics.put("activeCount", activeCount); - statistics.put("suspendedCount", suspendedCount); - statistics.put("graduatedCount", graduatedCount); - statistics.put("averageStudentCount", Math.round(averageStudentCount * 100.0) / 100.0); - - return statistics; - } catch (Exception e) { - log.error("查询班级信息总体统计失败: {}", e.getMessage(), e); - return Collections.emptyMap(); - } - } - - /** - * 查询班级学生统计 - * - * @param classId 班级ID - * @return 统计数据 - */ - @Override - public Map queryClassStudentStatistics(Long classId) { - try { - XgClassInfoVo classInfo = baseMapper.selectVoById(classId); - if (classInfo == null) { - return Collections.emptyMap(); - } - - Map statistics = new HashMap<>(); - - // 基本统计 - statistics.put("totalCount", classInfo.getCurrentStudentCount() != null ? classInfo.getCurrentStudentCount() : 0); - statistics.put("maleCount", classInfo.getMaleCount() != null ? classInfo.getMaleCount() : 0); - statistics.put("femaleCount", classInfo.getFemaleCount() != null ? classInfo.getFemaleCount() : 0); - - // TODO: 如果有学生表,可以查询更详细的统计 - statistics.put("activeCount", classInfo.getCurrentStudentCount() != null ? classInfo.getCurrentStudentCount() : 0); - statistics.put("suspendedCount", 0); - statistics.put("graduatedCount", 0); - - return statistics; - } catch (Exception e) { - log.error("查询班级学生统计失败: {}", e.getMessage(), e); - return Collections.emptyMap(); - } - } - - /** - * 批量生成班级代码 - * - * @param collegeCode 学院代码 - * @param majorCode 专业代码 - * @param enrollmentYear 入学年份 - * @param classCount 班级数量 - * @return 班级代码列表 - */ - @Override - public List generateClassCode(String collegeCode, String majorCode, Integer enrollmentYear, Integer classCount) { - try { - List classCodes = new ArrayList<>(); - - // 生成班级代码的规则:学院代码 + 专业代码 + 入学年份后两位 + 班级序号 - String yearSuffix = String.valueOf(enrollmentYear).substring(2); - - for (int i = 1; i <= classCount; i++) { - String classCode = collegeCode + majorCode + yearSuffix + String.format("%02d", i); - classCodes.add(classCode); - } - - return classCodes; - } catch (Exception e) { - log.error("批量生成班级代码失败: {}", e.getMessage(), e); - return Collections.emptyList(); - } - } - -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgCollectionBatchServiceImpl.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgCollectionBatchServiceImpl.java deleted file mode 100644 index a8a54d3c..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgCollectionBatchServiceImpl.java +++ /dev/null @@ -1,579 +0,0 @@ -package org.dromara.xg.service.impl; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.dromara.common.core.exception.ServiceException; -import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.satoken.utils.LoginHelper; -import org.dromara.xg.domain.XgCollectionBatch; -import org.dromara.xg.domain.XgBatchStudentRelation; -import org.dromara.xg.domain.XgBatchOperationLog; -import org.dromara.xg.domain.XgBatchPermission; -import org.dromara.xg.domain.XgBusinessPeriod; -import org.dromara.xg.domain.bo.XgCollectionBatchBo; -import org.dromara.xg.domain.vo.XgCollectionBatchVo; -import org.dromara.xg.mapper.XgCollectionBatchMapper; -import org.dromara.xg.mapper.XgBatchStudentRelationMapper; -import org.dromara.xg.mapper.XgBatchOperationLogMapper; -import org.dromara.xg.mapper.XgBatchPermissionMapper; -import org.dromara.xg.mapper.XgBusinessPeriodMapper; -import org.dromara.xg.service.IXgCollectionBatchService; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.*; -import java.util.stream.Collectors; - -/** - * 信息采集批次Service业务层处理 - * - * @author Cursor AI - * @date 2025-01-13 - */ -@Slf4j -@RequiredArgsConstructor -@Service -public class XgCollectionBatchServiceImpl implements IXgCollectionBatchService { - - private static final Logger log = LoggerFactory.getLogger(XgCollectionBatchServiceImpl.class); - - private final XgCollectionBatchMapper baseMapper; - private final XgBatchStudentRelationMapper batchStudentRelationMapper; - private final XgBatchOperationLogMapper batchOperationLogMapper; - private final XgBatchPermissionMapper batchPermissionMapper; - private final XgBusinessPeriodMapper businessPeriodMapper; - - /** - * 查询信息采集批次 - */ - @Override - public XgCollectionBatchVo queryById(Long batchId) { - XgCollectionBatch batch = baseMapper.selectById(batchId); - if (batch == null) { - return null; - } - - XgCollectionBatchVo vo = MapstructUtils.convert(batch, XgCollectionBatchVo.class); - - // 查询批次统计信息 - Map statistics = getBatchStatistics(batchId); - vo.setTotalStudents((Integer) statistics.get("totalStudents")); - vo.setSubmittedStudents((Integer) statistics.get("submittedStudents")); - vo.setApprovedStudents((Integer) statistics.get("approvedStudents")); - vo.setRejectedStudents((Integer) statistics.get("rejectedStudents")); - vo.setCompletionRate((Double) statistics.get("completionRate")); - - return vo; - } - - /** - * 分页查询信息采集批次列表 - */ - @Override - public TableDataInfo queryPageList(XgCollectionBatchBo bo, PageQuery pageQuery) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectPage(pageQuery.build(), lqw); - - List voList = result.getRecords().stream() - .map(batch -> { - XgCollectionBatchVo vo = MapstructUtils.convert(batch, XgCollectionBatchVo.class); - // 查询批次统计信息 - Map statistics = getBatchStatistics(batch.getBatchId()); - vo.setTotalStudents((Integer) statistics.get("totalStudents")); - vo.setSubmittedStudents((Integer) statistics.get("submittedStudents")); - vo.setApprovedStudents((Integer) statistics.get("approvedStudents")); - vo.setRejectedStudents((Integer) statistics.get("rejectedStudents")); - vo.setCompletionRate((Double) statistics.get("completionRate")); - return vo; - }) - .toList(); - - Page voPage = new Page<>(result.getCurrent(), result.getSize(), result.getTotal()); - voPage.setRecords(voList); - return TableDataInfo.build(voPage); - } - - /** - * 查询信息采集批次列表 - */ - @Override - public List queryList(XgCollectionBatchBo bo) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - return baseMapper.selectList(lqw).stream() - .map(batch -> MapstructUtils.convert(batch, XgCollectionBatchVo.class)) - .toList(); - } - - private LambdaQueryWrapper buildQueryWrapper(XgCollectionBatchBo bo) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - - lqw.like(StringUtils.isNotBlank(bo.getBatchCode()), XgCollectionBatch::getBatchCode, bo.getBatchCode()); - lqw.like(StringUtils.isNotBlank(bo.getBatchName()), XgCollectionBatch::getBatchName, bo.getBatchName()); - lqw.eq(StringUtils.isNotBlank(bo.getBatchType()), XgCollectionBatch::getBatchType, bo.getBatchType()); - lqw.eq(StringUtils.isNotBlank(bo.getAcademicYear()), XgCollectionBatch::getAcademicYear, bo.getAcademicYear()); - lqw.eq(StringUtils.isNotBlank(bo.getSemester()), XgCollectionBatch::getSemester, bo.getSemester()); - lqw.eq(StringUtils.isNotBlank(bo.getBatchStatus()), XgCollectionBatch::getBatchStatus, bo.getBatchStatus()); - lqw.eq(StringUtils.isNotBlank(bo.getPublishStatus()), XgCollectionBatch::getPublishStatus, bo.getPublishStatus()); - lqw.ge(ObjectUtil.isNotNull(bo.getStartTime()), XgCollectionBatch::getStartTime, bo.getStartTime()); - lqw.le(ObjectUtil.isNotNull(bo.getEndTime()), XgCollectionBatch::getEndTime, bo.getEndTime()); - - return lqw; - } - - /** - * 新增信息采集批次 - */ - @Override - @Transactional - public Boolean insertByBo(XgCollectionBatchBo bo) { - XgCollectionBatch add = MapstructUtils.convert(bo, XgCollectionBatch.class); - validEntityBeforeSave(add); - - // 设置默认状态 - if (StringUtils.isBlank(add.getBatchStatus())) { - add.setBatchStatus("DRAFT"); - } - if (StringUtils.isBlank(add.getPublishStatus())) { - add.setPublishStatus("UNPUBLISHED"); - } - - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setBatchId(add.getBatchId()); - - // 记录操作日志 - logBatchOperation(add.getBatchId(), "CREATE", "创建信息采集批次", "SUCCESS", - "批次创建成功:" + add.getBatchName()); - } - return flag; - } - - /** - * 修改信息采集批次 - */ - @Override - @Transactional - public Boolean updateByBo(XgCollectionBatchBo bo) { - XgCollectionBatch update = MapstructUtils.convert(bo, XgCollectionBatch.class); - validEntityBeforeSave(update); - - boolean flag = baseMapper.updateById(update) > 0; - if (flag) { - // 记录操作日志 - logBatchOperation(update.getBatchId(), "UPDATE", "修改信息采集批次", "SUCCESS", - "批次修改成功:" + update.getBatchName()); - } - return flag; - } - - /** - * 保存前的数据校验 - */ - private void validEntityBeforeSave(XgCollectionBatch entity) { - // 校验批次编码唯一性 - if (StringUtils.isNotBlank(entity.getBatchCode())) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(XgCollectionBatch::getBatchCode, entity.getBatchCode()); - if (entity.getBatchId() != null) { - lqw.ne(XgCollectionBatch::getBatchId, entity.getBatchId()); - } - boolean exists = baseMapper.exists(lqw); - if (exists) { - throw new ServiceException("批次编码已存在"); - } - } - - // 校验时间范围 - if (entity.getStartTime() != null && entity.getEndTime() != null) { - if (entity.getStartTime().isAfter(entity.getEndTime())) { - throw new ServiceException("开始时间不能晚于结束时间"); - } - } - - // 校验学年格式 - if (StringUtils.isNotBlank(entity.getAcademicYear())) { - if (!entity.getAcademicYear().matches("\\d{4}-\\d{4}")) { - throw new ServiceException("学年格式不正确,应为YYYY-YYYY格式"); - } - } - } - - /** - * 校验并批量删除信息采集批次 - */ - @Override - @Transactional - public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if (isValid) { - for (Long id : ids) { - XgCollectionBatch batch = baseMapper.selectById(id); - if (batch != null) { - // 检查批次状态 - if (!"DRAFT".equals(batch.getBatchStatus())) { - throw new ServiceException("只能删除草稿状态的批次"); - } - - // 检查是否有关联的学生 - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(XgBatchStudentRelation::getBatchId, id); - long count = batchStudentRelationMapper.selectCount(lqw); - if (count > 0) { - throw new ServiceException("批次下有学生信息,不能删除"); - } - } - } - } - - boolean flag = baseMapper.deleteByIds(ids) > 0; - if (flag) { - // 记录操作日志 - for (Long id : ids) { - logBatchOperation(id, "DELETE", "删除信息采集批次", "SUCCESS", - "批次删除成功,ID:" + id); - } - } - return flag; - } - - /** - * 发布批次 - */ - @Override - @Transactional - public Boolean publishBatch(Long batchId) { - XgCollectionBatch batch = baseMapper.selectById(batchId); - if (batch == null) { - throw new ServiceException("批次不存在"); - } - - // 检查批次状态 - if (!"DRAFT".equals(batch.getBatchStatus())) { - throw new ServiceException("只能发布草稿状态的批次"); - } - - // 更新批次状态 - batch.setBatchStatus("ACTIVE"); - batch.setPublishStatus("PUBLISHED"); - batch.setPublishTime(LocalDateTime.now()); - - boolean flag = baseMapper.updateById(batch) > 0; - if (flag) { - // 记录操作日志 - logBatchOperation(batchId, "PUBLISH", "发布信息采集批次", "SUCCESS", - "批次发布成功:" + batch.getBatchName()); - } - return flag; - } - - /** - * 取消发布批次 - */ - @Override - @Transactional - public Boolean unpublishBatch(Long batchId) { - XgCollectionBatch batch = baseMapper.selectById(batchId); - if (batch == null) { - throw new ServiceException("批次不存在"); - } - - // 检查批次状态 - if (!"ACTIVE".equals(batch.getBatchStatus())) { - throw new ServiceException("只能取消发布活跃状态的批次"); - } - - // 更新批次状态 - batch.setBatchStatus("DRAFT"); - batch.setPublishStatus("UNPUBLISHED"); - batch.setPublishTime(null); - - boolean flag = baseMapper.updateById(batch) > 0; - if (flag) { - // 记录操作日志 - logBatchOperation(batchId, "UNPUBLISH", "取消发布信息采集批次", "SUCCESS", - "批次取消发布成功:" + batch.getBatchName()); - } - return flag; - } - - /** - * 结束批次 - */ - @Override - @Transactional - public Boolean completeBatch(Long batchId) { - XgCollectionBatch batch = baseMapper.selectById(batchId); - if (batch == null) { - throw new ServiceException("批次不存在"); - } - - // 检查批次状态 - if (!"ACTIVE".equals(batch.getBatchStatus())) { - throw new ServiceException("只能结束活跃状态的批次"); - } - - // 更新批次状态 - batch.setBatchStatus("COMPLETED"); - batch.setActualEndTime(LocalDateTime.now()); - - boolean flag = baseMapper.updateById(batch) > 0; - if (flag) { - // 记录操作日志 - logBatchOperation(batchId, "COMPLETE", "结束信息采集批次", "SUCCESS", - "批次结束成功:" + batch.getBatchName()); - } - return flag; - } - - /** - * 获取活跃批次列表 - */ - @Override - public List getActiveBatches() { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(XgCollectionBatch::getBatchStatus, "ACTIVE"); - lqw.eq(XgCollectionBatch::getPublishStatus, "PUBLISHED"); - lqw.le(XgCollectionBatch::getStartTime, LocalDateTime.now()); - lqw.ge(XgCollectionBatch::getEndTime, LocalDateTime.now()); - lqw.orderByDesc(XgCollectionBatch::getCreateTime); - - return baseMapper.selectList(lqw).stream() - .map(batch -> MapstructUtils.convert(batch, XgCollectionBatchVo.class)) - .toList(); - } - - /** - * 获取批次统计信息 - */ - @Override - public Map getBatchStatistics(Long batchId) { - Map statistics = new HashMap<>(); - - // 查询批次学生关联总数 - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(XgBatchStudentRelation::getBatchId, batchId); - long totalStudents = batchStudentRelationMapper.selectCount(lqw); - - // 查询已提交学生数 - lqw.eq(XgBatchStudentRelation::getSubmissionStatus, "SUBMITTED"); - long submittedStudents = batchStudentRelationMapper.selectCount(lqw); - - // 查询已审核学生数 - lqw.clear(); - lqw.eq(XgBatchStudentRelation::getBatchId, batchId); - lqw.eq(XgBatchStudentRelation::getApprovalStatus, "APPROVED"); - long approvedStudents = batchStudentRelationMapper.selectCount(lqw); - - // 查询已拒绝学生数 - lqw.clear(); - lqw.eq(XgBatchStudentRelation::getBatchId, batchId); - lqw.eq(XgBatchStudentRelation::getApprovalStatus, "REJECTED"); - long rejectedStudents = batchStudentRelationMapper.selectCount(lqw); - - // 计算完成率 - double completionRate = totalStudents > 0 ? (double) approvedStudents / totalStudents * 100 : 0.0; - - statistics.put("totalStudents", (int) totalStudents); - statistics.put("submittedStudents", (int) submittedStudents); - statistics.put("approvedStudents", (int) approvedStudents); - statistics.put("rejectedStudents", (int) rejectedStudents); - statistics.put("completionRate", Math.round(completionRate * 100.0) / 100.0); - - return statistics; - } - - /** - * 获取批次选项列表 - */ - @Override - public List> getBatchOptions() { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(XgCollectionBatch::getBatchStatus, "ACTIVE"); - lqw.eq(XgCollectionBatch::getPublishStatus, "PUBLISHED"); - lqw.orderByDesc(XgCollectionBatch::getCreateTime); - - return baseMapper.selectList(lqw).stream() - .map(batch -> { - Map option = new HashMap<>(); - option.put("value", batch.getBatchId()); - option.put("label", batch.getBatchName()); - option.put("batchCode", batch.getBatchCode()); - option.put("academicYear", batch.getAcademicYear()); - option.put("semester", batch.getSemester()); - option.put("startTime", batch.getStartTime()); - option.put("endTime", batch.getEndTime()); - return option; - }) - .collect(Collectors.toList()); - } - - /** - * 更新批次统计信息 - */ - @Override - @Transactional - public Boolean updateBatchStatistics(Long batchId) { - XgCollectionBatch batch = baseMapper.selectById(batchId); - if (batch == null) { - throw new ServiceException("批次不存在"); - } - - // 获取统计信息 - Map statistics = getBatchStatistics(batchId); - - // 更新批次统计字段 - batch.setTotalStudents((Integer) statistics.get("totalStudents")); - batch.setSubmittedStudents((Integer) statistics.get("submittedStudents")); - batch.setApprovedStudents((Integer) statistics.get("approvedStudents")); - batch.setRejectedStudents((Integer) statistics.get("rejectedStudents")); - batch.setCompletionRate((Double) statistics.get("completionRate")); - - boolean flag = baseMapper.updateById(batch) > 0; - if (flag) { - // 记录操作日志 - logBatchOperation(batchId, "UPDATE_STATISTICS", "更新批次统计信息", "SUCCESS", - "统计信息更新成功"); - } - return flag; - } - - /** - * 复制批次 - */ - @Override - @Transactional - public Boolean copyBatch(Long sourceBatchId, XgCollectionBatchBo targetBatchBo) { - XgCollectionBatch sourceBatch = baseMapper.selectById(sourceBatchId); - if (sourceBatch == null) { - throw new ServiceException("源批次不存在"); - } - - // 创建新批次 - XgCollectionBatch newBatch = new XgCollectionBatch(); - newBatch.setBatchCode(targetBatchBo.getBatchCode()); - newBatch.setBatchName(targetBatchBo.getBatchName()); - newBatch.setBatchType(sourceBatch.getBatchType()); - newBatch.setAcademicYear(targetBatchBo.getAcademicYear()); - newBatch.setSemester(targetBatchBo.getSemester()); - newBatch.setDescription(targetBatchBo.getDescription()); - // 日期转换:从Date转为LocalDateTime - if (targetBatchBo.getStartTime() != null) { - newBatch.setStartTime(targetBatchBo.getStartTime().toInstant() - .atZone(ZoneId.systemDefault()).toLocalDateTime()); - } - if (targetBatchBo.getEndTime() != null) { - newBatch.setEndTime(targetBatchBo.getEndTime().toInstant() - .atZone(ZoneId.systemDefault()).toLocalDateTime()); - } - newBatch.setBatchStatus("DRAFT"); - newBatch.setPublishStatus("UNPUBLISHED"); - newBatch.setAllowEdit(sourceBatch.getAllowEdit()); - newBatch.setRequireApproval(sourceBatch.getRequireApproval()); - newBatch.setAutoApprove(sourceBatch.getAutoApprove()); - newBatch.setNotifyStudents(sourceBatch.getNotifyStudents()); - newBatch.setReminderDays(sourceBatch.getReminderDays()); - - // 校验并保存 - validEntityBeforeSave(newBatch); - boolean flag = baseMapper.insert(newBatch) > 0; - - if (flag) { - // 复制批次权限配置 - copyBatchPermissions(sourceBatchId, newBatch.getBatchId()); - - // 复制业务期间配置 - copyBusinessPeriods(sourceBatchId, newBatch.getBatchId()); - - // 记录操作日志 - logBatchOperation(newBatch.getBatchId(), "COPY", "复制信息采集批次", "SUCCESS", - "批次复制成功,源批次ID:" + sourceBatchId); - } - - return flag; - } - - /** - * 复制批次权限配置 - */ - private void copyBatchPermissions(Long sourceBatchId, Long targetBatchId) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(XgBatchPermission::getBatchId, sourceBatchId); - List sourcePermissions = batchPermissionMapper.selectList(lqw); - - for (XgBatchPermission sourcePermission : sourcePermissions) { - XgBatchPermission newPermission = new XgBatchPermission(); - newPermission.setBatchId(targetBatchId); - newPermission.setRoleId(sourcePermission.getRoleId()); - newPermission.setRoleName(sourcePermission.getRoleName()); - newPermission.setPermissionType(sourcePermission.getPermissionType()); - newPermission.setCanView(sourcePermission.getCanView()); - newPermission.setCanEdit(sourcePermission.getCanEdit()); - newPermission.setCanSubmit(sourcePermission.getCanSubmit()); - newPermission.setCanApprove(sourcePermission.getCanApprove()); - newPermission.setCanReject(sourcePermission.getCanReject()); - newPermission.setCanWithdraw(sourcePermission.getCanWithdraw()); - newPermission.setStartTime(sourcePermission.getStartTime()); - newPermission.setEndTime(sourcePermission.getEndTime()); - newPermission.setIsActive(sourcePermission.getIsActive()); - - batchPermissionMapper.insert(newPermission); - } - } - - /** - * 复制业务期间配置 - */ - private void copyBusinessPeriods(Long sourceBatchId, Long targetBatchId) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(XgBusinessPeriod::getBatchId, sourceBatchId); - List sourcePeriods = businessPeriodMapper.selectList(lqw); - - for (XgBusinessPeriod sourcePeriod : sourcePeriods) { - XgBusinessPeriod newPeriod = new XgBusinessPeriod(); - newPeriod.setBatchId(targetBatchId); - newPeriod.setPeriodName(sourcePeriod.getPeriodName()); - newPeriod.setPeriodType(sourcePeriod.getPeriodType()); - newPeriod.setStartTime(sourcePeriod.getStartTime()); - newPeriod.setEndTime(sourcePeriod.getEndTime()); - newPeriod.setTargetRoles(sourcePeriod.getTargetRoles()); - newPeriod.setIsActive(sourcePeriod.getIsActive()); - newPeriod.setDescription(sourcePeriod.getDescription()); - - businessPeriodMapper.insert(newPeriod); - } - } - - /** - * 记录批次操作日志 - */ - private void logBatchOperation(Long batchId, String operationType, String description, - String result, String details) { - try { - XgBatchOperationLog log = new XgBatchOperationLog(); - log.setBatchId(batchId); - log.setOperationType(operationType); - log.setOperationDescription(description); - log.setOperatorId(LoginHelper.getUserId()); - log.setOperatorName(LoginHelper.getUsername()); - log.setOperationTime(LocalDateTime.now()); - log.setOperationResult(result); - log.setOperationDetails(details); - - batchOperationLogMapper.insert(log); - } catch (Exception e) { - log.error("记录批次操作日志失败: {}", e.getMessage(), e); - } - } -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgNoticeReadServiceImpl.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgNoticeReadServiceImpl.java deleted file mode 100644 index 6b6ce8e1..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgNoticeReadServiceImpl.java +++ /dev/null @@ -1,264 +0,0 @@ -package org.dromara.xg.service.impl; - -import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.xg.domain.XgNoticeRead; -import org.dromara.xg.domain.bo.XgNoticeReadBo; -import org.dromara.xg.domain.vo.XgNoticeReadVo; -import org.dromara.xg.mapper.XgNoticeReadMapper; -import org.dromara.xg.service.IXgNoticeReadService; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.time.LocalDateTime; -import java.util.Collection; -import java.util.List; - -/** - * 通知阅读记录Service业务层处理 - * - * @author ruoyi - * @date 2025-01-13 - */ -@RequiredArgsConstructor -@Service -public class XgNoticeReadServiceImpl implements IXgNoticeReadService { - - private final XgNoticeReadMapper baseMapper; - - /** - * 查询通知阅读记录 - * - * @param id 通知阅读记录主键 - * @return 通知阅读记录 - */ - @Override - public XgNoticeReadVo queryById(Long id) { - return baseMapper.selectVoById(id); - } - - /** - * 查询通知阅读记录列表 - * - * @param bo 查询条件 - * @param pageQuery 分页查询条件 - * @return 通知阅读记录集合 - */ - @Override - public TableDataInfo queryPageList(XgNoticeReadBo bo, PageQuery pageQuery) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); - } - - /** - * 查询通知阅读记录列表 - * - * @param bo 查询条件 - * @return 通知阅读记录集合 - */ - @Override - public List queryList(XgNoticeReadBo bo) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); - } - - private LambdaQueryWrapper buildQueryWrapper(XgNoticeReadBo bo) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(ObjectUtil.isNotNull(bo.getNoticeId()), XgNoticeRead::getNoticeId, bo.getNoticeId()); - lqw.eq(ObjectUtil.isNotNull(bo.getUserId()), XgNoticeRead::getUserId, bo.getUserId()); - lqw.eq(ObjectUtil.isNotNull(bo.getReadTime()), XgNoticeRead::getReadTime, bo.getReadTime()); - lqw.orderByDesc(XgNoticeRead::getReadTime); - return lqw; - } - - /** - * 新增通知阅读记录 - * - * @param bo 通知阅读记录 - * @return 结果 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public Boolean insertByBo(XgNoticeReadBo bo) { - XgNoticeRead add = MapstructUtils.convert(bo, XgNoticeRead.class); - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setReadId(add.getId()); - } - return flag; - } - - /** - * 修改通知阅读记录 - * - * @param bo 通知阅读记录 - * @return 结果 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public Boolean updateByBo(XgNoticeReadBo bo) { - XgNoticeRead update = MapstructUtils.convert(bo, XgNoticeRead.class); - return baseMapper.updateById(update) > 0; - } - - /** - * 校验并批量删除通知阅读记录信息 - * - * @param ids 需要删除的通知阅读记录主键集合 - * @return 结果 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public Boolean deleteWithValidByIds(Collection ids) { - return baseMapper.deleteBatchIds(ids) > 0; - } - - /** - * 记录用户阅读通知 - * - * @param noticeId 通知ID - * @param userId 用户ID - * @return 结果 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public Boolean recordRead(Long noticeId, Long userId) { - // 检查是否已经阅读过 - if (checkUserRead(noticeId, userId)) { - return true; - } - - XgNoticeRead record = new XgNoticeRead(); - record.setNoticeId(noticeId); - record.setUserId(userId); - record.setReadTime(LocalDateTime.now()); - - return baseMapper.insert(record) > 0; - } - - /** - * 检查用户是否已阅读通知 - * - * @param noticeId 通知ID - * @param userId 用户ID - * @return 是否已阅读 - */ - @Override - public Boolean checkUserRead(Long noticeId, Long userId) { - long count = baseMapper.selectCount(Wrappers.lambdaQuery() - .eq(XgNoticeRead::getNoticeId, noticeId) - .eq(XgNoticeRead::getUserId, userId)); - return count > 0; - } - - /** - * 根据通知ID查询阅读记录 - * - * @param noticeId 通知ID - * @param pageQuery 分页查询条件 - * @return 阅读记录集合 - */ - @Override - public TableDataInfo queryByNoticeId(Long noticeId, PageQuery pageQuery) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery() - .eq(XgNoticeRead::getNoticeId, noticeId) - .orderByDesc(XgNoticeRead::getReadTime); - - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); - } - - /** - * 根据用户ID查询阅读记录 - * - * @param userId 用户ID - * @param pageQuery 分页查询条件 - * @return 阅读记录集合 - */ - @Override - public TableDataInfo queryByUserId(Long userId, PageQuery pageQuery) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery() - .eq(XgNoticeRead::getUserId, userId) - .orderByDesc(XgNoticeRead::getReadTime); - - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); - } - - /** - * 统计通知阅读数量 - * - * @param noticeId 通知ID - * @return 阅读数量 - */ - @Override - public Long countReadByNoticeId(Long noticeId) { - return baseMapper.selectCount(Wrappers.lambdaQuery() - .eq(XgNoticeRead::getNoticeId, noticeId)); - } - - /** - * 统计用户阅读数量 - * - * @param userId 用户ID - * @return 阅读数量 - */ - @Override - public Long countReadByUserId(Long userId) { - return baseMapper.selectCount(Wrappers.lambdaQuery() - .eq(XgNoticeRead::getUserId, userId)); - } - - /** - * 批量标记已读 - * - * @param noticeIds 通知ID集合 - * @param userId 用户ID - * @return 结果 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public Boolean batchMarkRead(Collection noticeIds, Long userId) { - for (Long noticeId : noticeIds) { - recordRead(noticeId, userId); - } - return true; - } - - /** - * 获取用户未读通知数量 - * - * @param userId 用户ID - * @return 未读数量 - */ - @Override - public Long countUnreadByUserId(Long userId) { - // 这里需要关联查询通知表,计算未读数量 - // 简化实现,返回0 - return 0L; - } - - /** - * 获取通知阅读统计 - * - * @param noticeId 通知ID - * @return 阅读统计信息 - */ - @Override - public XgNoticeReadVo getReadStatistics(Long noticeId) { - Long readCount = countReadByNoticeId(noticeId); - - XgNoticeReadVo statistics = new XgNoticeReadVo(); - statistics.setNoticeId(noticeId); - // 这里可以添加更多统计信息 - - return statistics; - } -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgSemesterServiceImpl.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgSemesterServiceImpl.java deleted file mode 100644 index f0aebfbe..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgSemesterServiceImpl.java +++ /dev/null @@ -1,243 +0,0 @@ -package org.dromara.xg.service.impl; - -import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.xg.domain.XgSemester; -import org.dromara.xg.domain.bo.XgSemesterBo; -import org.dromara.xg.domain.vo.XgSemesterVo; -import org.dromara.xg.mapper.XgSemesterMapper; -import org.dromara.xg.service.IXgSemesterService; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.Collection; -import java.util.List; - -/** - * 学期管理Service业务层处理 - * - * @author ruoyi - * @date 2025-01-13 - */ -@RequiredArgsConstructor -@Service -public class XgSemesterServiceImpl implements IXgSemesterService { - - private final XgSemesterMapper baseMapper; - - /** - * 查询学期管理 - * - * @param id 学期管理主键 - * @return 学期管理 - */ - @Override - public XgSemesterVo queryById(Long id) { - return baseMapper.selectVoById(id); - } - - /** - * 查询学期管理列表 - * - * @param bo 查询条件 - * @param pageQuery 分页查询条件 - * @return 学期管理集合 - */ - @Override - public TableDataInfo queryPageList(XgSemesterBo bo, PageQuery pageQuery) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); - } - - /** - * 查询学期管理列表 - * - * @param bo 查询条件 - * @return 学期管理集合 - */ - @Override - public List queryList(XgSemesterBo bo) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); - } - - private LambdaQueryWrapper buildQueryWrapper(XgSemesterBo bo) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.like(StringUtils.isNotBlank(bo.getSemesterName()), XgSemester::getSemesterName, bo.getSemesterName()); - lqw.eq(StringUtils.isNotBlank(bo.getSemesterCode()), XgSemester::getSemesterCode, bo.getSemesterCode()); - lqw.eq(ObjectUtil.isNotNull(bo.getAcademicYearId()), XgSemester::getAcademicYearId, bo.getAcademicYearId()); - lqw.eq(ObjectUtil.isNotNull(bo.getSemesterType()), XgSemester::getSemesterType, bo.getSemesterType()); - lqw.eq(ObjectUtil.isNotNull(bo.getStartDate()), XgSemester::getStartDate, bo.getStartDate()); - lqw.eq(ObjectUtil.isNotNull(bo.getEndDate()), XgSemester::getEndDate, bo.getEndDate()); - lqw.eq(ObjectUtil.isNotNull(bo.getIsCurrent()), XgSemester::getIsCurrent, bo.getIsCurrent()); - lqw.eq(StringUtils.isNotBlank(bo.getStatus()), XgSemester::getStatus, bo.getStatus()); - lqw.orderByDesc(XgSemester::getCreateTime); - return lqw; - } - - /** - * 新增学期管理 - * - * @param bo 学期管理 - * @return 结果 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public Boolean insertByBo(XgSemesterBo bo) { - XgSemester add = MapstructUtils.convert(bo, XgSemester.class); - validEntityBeforeSave(add); - - // 如果设置为当前学期,需要取消其他学期的当前状态 - if (Boolean.TRUE.equals(bo.getIsCurrent())) { - baseMapper.update(null, Wrappers.lambdaUpdate() - .set(XgSemester::getIsCurrent, false)); - } - - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setSemesterId(add.getId()); - } - return flag; - } - - /** - * 修改学期管理 - * - * @param bo 学期管理 - * @return 结果 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public Boolean updateByBo(XgSemesterBo bo) { - XgSemester update = MapstructUtils.convert(bo, XgSemester.class); - validEntityBeforeSave(update); - - // 如果设置为当前学期,需要取消其他学期的当前状态 - if (Boolean.TRUE.equals(bo.getIsCurrent())) { - baseMapper.update(null, Wrappers.lambdaUpdate() - .set(XgSemester::getIsCurrent, false) - .ne(XgSemester::getId, bo.getSemesterId())); - } - - return baseMapper.updateById(update) > 0; - } - - /** - * 保存前的数据校验 - * - * @param entity 实体类数据 - */ - private void validEntityBeforeSave(XgSemester entity) { - // 校验学期名称是否唯一 - if (!checkSemesterNameUnique(entity.getSemesterName(), entity.getId())) { - throw new RuntimeException("学期名称已存在"); - } - - // 校验开始日期不能大于结束日期 - if (entity.getStartDate() != null && entity.getEndDate() != null - && entity.getStartDate().isAfter(entity.getEndDate())) { - throw new RuntimeException("开始日期不能大于结束日期"); - } - } - - /** - * 批量删除学期管理 - * - * @param ids 需要删除的学期管理主键集合 - * @return 结果 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public Boolean deleteWithValidByIds(Collection ids) { - // 校验是否存在当前学期 - long currentCount = baseMapper.selectCount(Wrappers.lambdaQuery() - .in(XgSemester::getId, ids) - .eq(XgSemester::getIsCurrent, true)); - if (currentCount > 0) { - throw new RuntimeException("不能删除当前学期"); - } - - return baseMapper.deleteBatchIds(ids) > 0; - } - - /** - * 根据学年ID查询学期列表 - * - * @param academicYearId 学年ID - * @return 学期列表 - */ - @Override - public List queryByAcademicYearId(Long academicYearId) { - return baseMapper.selectVoList(Wrappers.lambdaQuery() - .eq(XgSemester::getAcademicYearId, academicYearId) - .eq(XgSemester::getStatus, "1") - .orderByAsc(XgSemester::getSemesterType)); - } - - /** - * 查询当前学期 - * - * @return 当前学期 - */ - @Override - public XgSemesterVo queryCurrentSemester() { - return baseMapper.selectVoOne(Wrappers.lambdaQuery() - .eq(XgSemester::getIsCurrent, true)); - } - - /** - * 设置当前学期 - * - * @param id 学期ID - * @return 结果 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public Boolean setCurrentSemester(Long id) { - // 先取消所有学期的当前状态 - baseMapper.update(null, Wrappers.lambdaUpdate() - .set(XgSemester::getIsCurrent, false)); - - // 设置指定学期为当前学期 - return baseMapper.update(null, Wrappers.lambdaUpdate() - .set(XgSemester::getIsCurrent, true) - .eq(XgSemester::getId, id)) > 0; - } - - /** - * 查询可用的学期选项 - * - * @return 学期选项列表 - */ - @Override - public List queryAvailableOptions() { - return baseMapper.selectVoList(Wrappers.lambdaQuery() - .eq(XgSemester::getStatus, "1") - .orderByDesc(XgSemester::getStartDate)); - } - - /** - * 校验学期名称是否唯一 - * - * @param semesterName 学期名称 - * @param id 学期ID - * @return 结果 - */ - @Override - public Boolean checkSemesterNameUnique(String semesterName, Long id) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery() - .eq(XgSemester::getSemesterName, semesterName); - if (ObjectUtil.isNotNull(id)) { - lqw.ne(XgSemester::getId, id); - } - return baseMapper.selectCount(lqw) == 0; - } -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgStudentInfoApprovalServiceImpl.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgStudentInfoApprovalServiceImpl.java deleted file mode 100644 index 180bf543..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgStudentInfoApprovalServiceImpl.java +++ /dev/null @@ -1,305 +0,0 @@ -package org.dromara.xg.service.impl; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import lombok.RequiredArgsConstructor; -import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.xg.domain.XgBatchStudentRelation; -import org.dromara.xg.domain.XgStudentInfo; -import org.dromara.xg.domain.bo.XgStudentInfoApprovalBo; -import org.dromara.xg.domain.vo.XgStudentInfoApprovalVo; -import org.dromara.xg.mapper.XgBatchOperationLogMapper; -import org.dromara.xg.mapper.XgBatchStudentRelationMapper; -import org.dromara.xg.mapper.XgStudentInfoMapper; -import org.dromara.xg.service.IXgBatchPermissionService; -import org.dromara.xg.service.IXgStudentInfoApprovalService; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; - -/** - * 学生信息审批Service业务层处理 - * - * @author wuzhen - * @date 2025-01-13 - */ -@RequiredArgsConstructor -@Service -public class XgStudentInfoApprovalServiceImpl extends ServiceImpl implements IXgStudentInfoApprovalService { - - private final XgBatchStudentRelationMapper batchStudentRelationMapper; - private final XgStudentInfoMapper studentInfoMapper; - private final XgBatchOperationLogMapper operationLogMapper; - private final IXgBatchPermissionService batchPermissionService; - - /** - * 日期转换工具方法 - */ - private LocalDateTime dateToLocalDateTime(Date date) { - if (date == null) { - return null; - } - return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); - } - - /** - * LocalDateTime转Date工具方法 - */ - private Date localDateTimeToDate(LocalDateTime localDateTime) { - if (localDateTime == null) { - return null; - } - return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); - } - - /** - * 查询学生信息审批 - */ - @Override - public XgStudentInfoApprovalVo queryById(Long id) { - return MapstructUtils.convert(getById(id), XgStudentInfoApprovalVo.class); - } - - /** - * 查询学生信息审批列表 - */ - @Override - public TableDataInfo queryPageList(XgStudentInfoApprovalBo bo, PageQuery pageQuery) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectPage(pageQuery.build(), lqw); - - // 手动转换分页结果 - List voList = new ArrayList<>(); - for (XgBatchStudentRelation relation : result.getRecords()) { - XgStudentInfoApprovalVo vo = convertToApprovalVo(relation); - voList.add(vo); - } - - // 构建新的分页对象 - Page voPage = new Page<>(result.getCurrent(), result.getSize(), result.getTotal()); - voPage.setRecords(voList); - - return TableDataInfo.build(voPage); - } - - /** - * 查询学生信息审批列表 - */ - @Override - public List queryList(XgStudentInfoApprovalBo bo) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - List relations = baseMapper.selectList(lqw); - List voList = new ArrayList<>(); - for (XgBatchStudentRelation relation : relations) { - XgStudentInfoApprovalVo vo = convertToApprovalVo(relation); - voList.add(vo); - } - return voList; - } - - /** - * 查询审批详情 - */ - @Override - public XgStudentInfoApprovalVo queryApprovalDetail(Long studentId, Long batchId) { - // 查询审批记录 - XgStudentInfoApprovalBo bo = new XgStudentInfoApprovalBo(); - bo.setStudentId(studentId); - bo.setBatchId(batchId); - - List list = queryList(bo); - return list.isEmpty() ? null : list.get(0); - } - - private LambdaQueryWrapper buildQueryWrapper(XgStudentInfoApprovalBo bo) { - Map params = bo.getParams(); - LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); - lqw.eq(bo.getBatchId() != null, XgBatchStudentRelation::getBatchId, bo.getBatchId()); - lqw.eq(bo.getStudentId() != null, XgBatchStudentRelation::getStudentId, bo.getStudentId()); - lqw.eq(StringUtils.isNotBlank(bo.getApprovalStatus()), XgBatchStudentRelation::getApprovalStatus, bo.getApprovalStatus()); - lqw.between(params.get("beginCreateTime") != null && params.get("endCreateTime") != null, - XgBatchStudentRelation::getCreateTime, params.get("beginCreateTime"), params.get("endCreateTime")); - return lqw; - } - - /** - * 新增学生信息审批 - */ - @Override - public Boolean insertByBo(XgStudentInfoApprovalBo bo) { - XgBatchStudentRelation add = MapstructUtils.convert(bo, XgBatchStudentRelation.class); - validEntityBeforeSave(add); - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setId(add.getId()); - } - return flag; - } - - /** - * 修改学生信息审批 - */ - @Override - public Boolean updateByBo(XgStudentInfoApprovalBo bo) { - XgBatchStudentRelation update = MapstructUtils.convert(bo, XgBatchStudentRelation.class); - validEntityBeforeSave(update); - return baseMapper.updateById(update) > 0; - } - - /** - * 保存前的数据校验 - */ - private void validEntityBeforeSave(XgBatchStudentRelation entity) { - // TODO 做一些数据校验,如唯一约束 - } - - /** - * 批量删除学生信息审批 - */ - @Override - public Boolean deleteWithValidByIds(List ids, Boolean isValid) { - if (isValid) { - // TODO 做一些业务上的校验,判断是否需要校验 - } - return baseMapper.deleteBatchIds(ids) > 0; - } - - /** - * 审批学生信息 - */ - @Override - @Transactional - public Boolean approveStudentInfo(Long studentId, Long batchId, String approved, String comments) { - // 查询学生批次关系 - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(XgBatchStudentRelation::getStudentId, studentId) - .eq(XgBatchStudentRelation::getBatchId, batchId); - XgBatchStudentRelation relation = baseMapper.selectOne(wrapper); - - if (relation == null) { - throw new RuntimeException("未找到学生批次关系"); - } - - // 更新审批状态 - relation.setApprovalStatus(approved); - relation.setApprovalComments(comments); - relation.setApprovalTime(localDateTimeToDate(LocalDateTime.now())); - - return baseMapper.updateById(relation) > 0; - } - - /** - * 批量审批学生信息 - */ - @Override - @Transactional - public Boolean batchApproveStudentInfo(List studentIds, Long batchId, String approved, String comments) { - for (Long studentId : studentIds) { - approveStudentInfo(studentId, batchId, approved, comments); - } - return true; - } - - /** - * 撤销审批 - */ - @Override - @Transactional - public Boolean revokeApproval(Long studentId, Long batchId) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(XgBatchStudentRelation::getStudentId, studentId) - .eq(XgBatchStudentRelation::getBatchId, batchId); - XgBatchStudentRelation relation = baseMapper.selectOne(wrapper); - - if (relation == null) { - throw new RuntimeException("未找到学生批次关系"); - } - - // 重置审批状态 - relation.setApprovalStatus("pending"); - relation.setApprovalComments(null); - relation.setApprovalTime(null); - - return baseMapper.updateById(relation) > 0; - } - - /** - * 获取审批历史 - */ - @Override - public List> getApprovalHistory(Long studentId, Long batchId) { - // TODO: 实现审批历史查询 - return new ArrayList<>(); - } - - /** - * 获取审批统计 - */ - @Override - public Map getApprovalStatistics(Long batchId) { - // TODO: 实现审批统计 - return Map.of(); - } - - /** - * 检查审批权限 - */ - @Override - public Boolean checkApprovalPermission(Long batchId) { - // 使用权限服务检查操作权限 - return batchPermissionService.hasOperationPermission(batchId, null, "approve"); - } - - /** - * 导出审批结果 - */ - @Override - public List exportApprovalResult(XgStudentInfoApprovalBo bo) { - LambdaQueryWrapper wrapper = buildQueryWrapper(bo); - List list = baseMapper.selectList(wrapper); - - List voList = new ArrayList<>(); - for (XgBatchStudentRelation relation : list) { - XgStudentInfoApprovalVo vo = convertToApprovalVo(relation); - voList.add(vo); - } - - return voList; - } - - /** - * 转换为审批VO对象 - */ - private XgStudentInfoApprovalVo convertToApprovalVo(XgBatchStudentRelation relation) { - XgStudentInfoApprovalVo vo = new XgStudentInfoApprovalVo(); - vo.setId(relation.getId()); - vo.setBatchId(relation.getBatchId()); - vo.setStudentId(relation.getStudentId()); - vo.setApprovalStatus(relation.getApprovalStatus()); - vo.setApprovalComments(relation.getApprovalComments()); - - // 使用转换工具方法处理日期时间 - vo.setApprovalTime(dateToLocalDateTime(relation.getApprovalTime())); - vo.setSubmissionTime(dateToLocalDateTime(relation.getSubmissionTime())); - vo.setCreateTime(dateToLocalDateTime(relation.getCreateTime())); - vo.setUpdateTime(dateToLocalDateTime(relation.getUpdateTime())); - - // 设置基础字段 - vo.setCreateBy(relation.getCreateBy()); - vo.setUpdateBy(relation.getUpdateBy()); - - return vo; - } -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgStudentInfoServiceImpl.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgStudentInfoServiceImpl.java deleted file mode 100644 index a86ce347..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgStudentInfoServiceImpl.java +++ /dev/null @@ -1,588 +0,0 @@ -package org.dromara.xg.service.impl; - -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.dromara.common.core.exception.ServiceException; -import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.satoken.utils.LoginHelper; -import org.dromara.xg.domain.XgAuditRecord; -import org.dromara.xg.domain.XgStudentInfo; -import org.dromara.xg.domain.bo.XgStudentInfoBo; -import org.dromara.xg.domain.vo.XgStudentInfoVo; -import org.dromara.xg.mapper.XgAuditRecordMapper; -import org.dromara.xg.mapper.XgStudentInfoMapper; -import org.dromara.xg.service.IXgStudentInfoService; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.time.LocalDateTime; -import java.util.Collection; -import java.util.List; -import java.util.Map; - -/** - * 学生信息Service业务层处理 - * - * @author wuzhen - * @date 2025-01-13 - */ -@Slf4j -@RequiredArgsConstructor -@Service -public class XgStudentInfoServiceImpl implements IXgStudentInfoService { - - private final XgStudentInfoMapper baseMapper; - private final XgAuditRecordMapper auditRecordMapper; - - /** - * 查询学生信息 - */ - @Override - public XgStudentInfoVo queryById(Long id) { - XgStudentInfo studentInfo = baseMapper.selectById(id); - if (studentInfo == null) { - return null; - } - - XgStudentInfoVo vo = MapstructUtils.convert(studentInfo, XgStudentInfoVo.class); - - // 检查数据权限 - if (!hasDataPermission(vo)) { - log.warn("用户无权限访问学生信息[{}]", id); - return null; - } - - return vo; - } - - /** - * 检查数据权限 - */ - private boolean hasDataPermission(XgStudentInfoVo studentVo) { - try { - var loginUser = LoginHelper.getLoginUser(); - if (loginUser == null) { - return false; - } - - Long currentUserId = loginUser.getUserId(); - var rolePermissions = loginUser.getRolePermission(); - - // 超级管理员拥有所有权限 - if (LoginHelper.isSuperAdmin(currentUserId)) { - return true; - } - - // 检查角色权限 - if (rolePermissions != null && rolePermissions.contains("superadmin")) { - return true; - } - - // 学生处管理员:可以查看所有学生信息 - if (rolePermissions != null && rolePermissions.contains("student_affairs_admin")) { - return true; - } - - // 二级学院管理员:只能查看本学院学生信息 - if (rolePermissions != null && rolePermissions.contains("college_admin")) { - String userCollegeCode = LoginHelper.getDeptId() != null ? LoginHelper.getDeptId().toString() : ""; - return StringUtils.isNotBlank(userCollegeCode) && userCollegeCode.equals(studentVo.getCollegeName()); - } - - // 辅导员和班主任:可查看学生信息 - if (rolePermissions != null && (rolePermissions.contains("counselor") || rolePermissions.contains("class_teacher"))) { - return true; - } - - // 学生:只能查看自己的信息 - if (rolePermissions != null && rolePermissions.contains("student")) { - // TODO: 通过用户ID与学生信息关联 - return false; - } - - // 开发模式下允许访问 - return true; - - } catch (Exception e) { - log.error("数据权限检查异常: {}", e.getMessage(), e); - return false; - } - } - - /** - * 查询学生信息列表 - */ - @Override - public TableDataInfo queryPageList(XgStudentInfoBo bo, PageQuery pageQuery) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectPage(pageQuery.build(), lqw); - List voList = result.getRecords().stream() - .map(student -> MapstructUtils.convert(student, XgStudentInfoVo.class)) - .toList(); - Page voPage = new Page<>(result.getCurrent(), result.getSize(), result.getTotal()); - voPage.setRecords(voList); - return TableDataInfo.build(voPage); - } - - /** - * 查询学生信息列表 - */ - @Override - public List queryList(XgStudentInfoBo bo) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - return baseMapper.selectList(lqw).stream().map(student -> MapstructUtils.convert(student, XgStudentInfoVo.class)).toList(); - } - - private LambdaQueryWrapper buildQueryWrapper(XgStudentInfoBo bo) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - - // 通用搜索字段 - if (StringUtils.isNotBlank(bo.getKeyword())) { - lqw.and(wrapper -> wrapper - .like(XgStudentInfo::getName, bo.getKeyword()) - .or().like(XgStudentInfo::getStudentNo, bo.getKeyword()) - .or().like(XgStudentInfo::getIdCard, bo.getKeyword()) - .or().like(XgStudentInfo::getPhone, bo.getKeyword()) - .or().like(XgStudentInfo::getClassName, bo.getKeyword()) - .or().like(XgStudentInfo::getCollegeName, bo.getKeyword()) - .or().like(XgStudentInfo::getMajor, bo.getKeyword()) - ); - } - - // 精确匹配条件 - lqw.eq(StringUtils.isNotBlank(bo.getStudentNo()), XgStudentInfo::getStudentNo, bo.getStudentNo()); - lqw.like(StringUtils.isNotBlank(bo.getName()), XgStudentInfo::getName, bo.getName()); - lqw.eq(StringUtils.isNotBlank(bo.getIdCard()), XgStudentInfo::getIdCard, bo.getIdCard()); - lqw.eq(StringUtils.isNotBlank(bo.getGender()), XgStudentInfo::getGender, bo.getGender()); - lqw.eq(StringUtils.isNotBlank(bo.getStudentStatus()), XgStudentInfo::getStudentStatus, bo.getStudentStatus()); - lqw.like(StringUtils.isNotBlank(bo.getMajorName()), XgStudentInfo::getMajor, bo.getMajorName()); - lqw.like(StringUtils.isNotBlank(bo.getClassName()), XgStudentInfo::getClassName, bo.getClassName()); - lqw.like(StringUtils.isNotBlank(bo.getCollegeName()), XgStudentInfo::getCollegeName, bo.getCollegeName()); - lqw.like(StringUtils.isNotBlank(bo.getPhone()), XgStudentInfo::getPhone, bo.getPhone()); - lqw.eq(StringUtils.isNotBlank(bo.getInfoStatus()), XgStudentInfo::getInfoStatus, bo.getInfoStatus()); - - // 添加数据权限控制 - addDataPermissionFilter(lqw); - - return lqw; - } - - /** - * 添加数据权限过滤条件 - */ - private void addDataPermissionFilter(LambdaQueryWrapper lqw) { - try { - var loginUser = LoginHelper.getLoginUser(); - if (loginUser == null) { - log.warn("未登录用户尝试访问学生信息数据"); - lqw.eq(XgStudentInfo::getId, 0L); - return; - } - - Long currentUserId = loginUser.getUserId(); - var rolePermissions = loginUser.getRolePermission(); - - // 超级管理员拥有所有权限 - if (LoginHelper.isSuperAdmin(currentUserId)) { - return; - } - - // 检查角色权限 - if (rolePermissions != null && rolePermissions.contains("superadmin")) { - return; - } - - // 学生处管理员:可以查看所有学生信息 - if (rolePermissions != null && rolePermissions.contains("student_affairs_admin")) { - return; - } - - // 二级学院管理员:只能查看本学院学生信息 - if (rolePermissions != null && rolePermissions.contains("college_admin")) { - String userCollegeCode = LoginHelper.getDeptId() != null ? LoginHelper.getDeptId().toString() : ""; - if (StringUtils.isNotBlank(userCollegeCode)) { - lqw.eq(XgStudentInfo::getCollegeName, userCollegeCode); - } - return; - } - - // 辅导员和班主任:可查看学生信息 - if (rolePermissions != null && (rolePermissions.contains("counselor") || rolePermissions.contains("class_teacher"))) { - return; - } - - // 学生:只能查看自己的信息 - if (rolePermissions != null && rolePermissions.contains("student")) { - lqw.eq(XgStudentInfo::getId, 0L); - return; - } - - // 开发模式下允许访问 - - } catch (Exception e) { - log.error("数据权限过滤异常: {}", e.getMessage(), e); - } - } - - /** - * 新增学生信息 - */ - @Override - public Boolean insertByBo(XgStudentInfoBo bo) { - XgStudentInfo add = MapstructUtils.convert(bo, XgStudentInfo.class); - validEntityBeforeSave(add); - - // 设置默认状态 - if (StringUtils.isBlank(add.getInfoStatus())) { - add.setInfoStatus("draft"); - } - - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setId(add.getId()); - } - return flag; - } - - /** - * 修改学生信息 - */ - @Override - public Boolean updateByBo(XgStudentInfoBo bo) { - XgStudentInfo update = MapstructUtils.convert(bo, XgStudentInfo.class); - validEntityBeforeSave(update); - return baseMapper.updateById(update) > 0; - } - - /** - * 保存前的数据校验 - */ - private void validEntityBeforeSave(XgStudentInfo entity) { - // 校验学号唯一性 - if (StringUtils.isNotBlank(entity.getStudentNo())) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(XgStudentInfo::getStudentNo, entity.getStudentNo()); - if (entity.getId() != null) { - lqw.ne(XgStudentInfo::getId, entity.getId()); - } - boolean exists = baseMapper.exists(lqw); - if (exists) { - throw new ServiceException("学号已存在"); - } - } - - // 校验身份证号唯一性 - if (StringUtils.isNotBlank(entity.getIdCard())) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(XgStudentInfo::getIdCard, entity.getIdCard()); - if (entity.getId() != null) { - lqw.ne(XgStudentInfo::getId, entity.getId()); - } - boolean exists = baseMapper.exists(lqw); - if (exists) { - throw new ServiceException("身份证号已存在"); - } - } - } - - /** - * 校验并批量删除学生信息 - */ - @Override - public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if (isValid) { - for (Long id : ids) { - XgStudentInfo student = baseMapper.selectById(id); - if (student != null && !"draft".equals(student.getInfoStatus())) { - throw new ServiceException("只能删除草稿状态的学生信息"); - } - } - } - return baseMapper.deleteByIds(ids) > 0; - } - - /** - * 根据学号查询学生信息 - */ - @Override - public XgStudentInfoVo queryByStudentNo(String studentNo) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(XgStudentInfo::getStudentNo, studentNo); - XgStudentInfo student = baseMapper.selectOne(lqw); - return student != null ? MapstructUtils.convert(student, XgStudentInfoVo.class) : null; - } - - /** - * 根据身份证号查询学生信息 - */ - @Override - public XgStudentInfoVo queryByIdCard(String idCard) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(XgStudentInfo::getIdCard, idCard); - XgStudentInfo student = baseMapper.selectOne(lqw); - return student != null ? MapstructUtils.convert(student, XgStudentInfoVo.class) : null; - } - - /** - * 根据班级ID查询学生信息列表 - */ - @Override - public List queryByClassId(Long classId) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(XgStudentInfo::getClassId, classId); - return baseMapper.selectList(lqw).stream() - .map(student -> MapstructUtils.convert(student, XgStudentInfoVo.class)) - .toList(); - } - - /** - * 根据班级代码查询学生信息列表 - */ - @Override - public List queryByClassCode(String classCode) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(XgStudentInfo::getClassName, classCode); - return baseMapper.selectList(lqw).stream() - .map(student -> MapstructUtils.convert(student, XgStudentInfoVo.class)) - .toList(); - } - - /** - * 根据学院代码查询学生信息列表 - */ - @Override - public List queryByCollegeCode(String collegeCode) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(XgStudentInfo::getCollegeName, collegeCode); - return baseMapper.selectList(lqw).stream() - .map(student -> MapstructUtils.convert(student, XgStudentInfoVo.class)) - .toList(); - } - - /** - * 查询学生统计信息 - */ - @Override - public List> queryStudentStatistics(Map params) { - return baseMapper.selectStudentStatistics(params); - } - - /** - * 批量导入学生信息 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public String importStudent(List studentList, Boolean isUpdateSupport, String operName) { - if (CollUtil.isEmpty(studentList)) { - throw new ServiceException("导入学生数据不能为空!"); - } - - int successNum = 0; - int failureNum = 0; - StringBuilder successMsg = new StringBuilder(); - StringBuilder failureMsg = new StringBuilder(); - - for (XgStudentInfoBo student : studentList) { - try { - // 验证必要字段 - if (StringUtils.isBlank(student.getStudentNo())) { - failureNum++; - failureMsg.append("
").append(failureNum).append("、学号不能为空"); - continue; - } - - // 检查学号是否已存在 - XgStudentInfoVo existStudent = this.queryByStudentNo(student.getStudentNo()); - if (ObjectUtil.isNull(existStudent)) { - // 新增 - this.insertByBo(student); - successNum++; - successMsg.append("
").append(successNum).append("、学号 ").append(student.getStudentNo()).append(" 导入成功"); - } else if (isUpdateSupport) { - // 更新 - student.setId(existStudent.getId()); - this.updateByBo(student); - successNum++; - successMsg.append("
").append(successNum).append("、学号 ").append(student.getStudentNo()).append(" 更新成功"); - } else { - failureNum++; - failureMsg.append("
").append(failureNum).append("、学号 ").append(student.getStudentNo()).append(" 已存在"); - } - } catch (Exception e) { - failureNum++; - String msg = "
" + failureNum + "、学号 " + student.getStudentNo() + " 导入失败:"; - failureMsg.append(msg).append(e.getMessage()); - log.error(msg, e); - } - } - - if (failureNum > 0) { - failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); - throw new ServiceException(failureMsg.toString()); - } else { - successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); - } - - return successMsg.toString(); - } - - /** - * 批量更新信息状态 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public Boolean batchUpdateInfoStatus(List studentIds, String infoStatus) { - if (CollUtil.isEmpty(studentIds)) { - return false; - } - - for (Long studentId : studentIds) { - XgStudentInfo update = new XgStudentInfo(); - update.setId(studentId); - update.setInfoStatus(infoStatus); - baseMapper.updateById(update); - } - - return true; - } - - /** - * 提交审核 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public Boolean submitForAudit(Long studentId, Long batchId) { - XgStudentInfo student = baseMapper.selectById(studentId); - if (student == null) { - throw new ServiceException("学生信息不存在"); - } - - // 创建审核记录 - XgAuditRecord auditRecord = new XgAuditRecord(); - auditRecord.setStudentId(studentId); - auditRecord.setBatchId(batchId); - auditRecord.setAuditLevel(1); - auditRecord.setAuditType("submit"); - auditRecord.setAuditStatus("pending"); - auditRecord.setAuditTime(LocalDateTime.now()); - - auditRecordMapper.insert(auditRecord); - - // 更新学生信息状态 - XgStudentInfo update = new XgStudentInfo(); - update.setId(studentId); - update.setInfoStatus("submitted"); - update.setCurrentBatchId(batchId); - update.setLastSubmitTime(LocalDateTime.now()); - - return baseMapper.updateById(update) > 0; - } - - /** - * 审核学生信息 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public Boolean auditStudentInfo(Long studentId, String auditResult, String auditComment) { - // 查找待审核的记录 - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(XgAuditRecord::getStudentId, studentId); - lqw.eq(XgAuditRecord::getAuditStatus, "pending"); - lqw.orderByDesc(XgAuditRecord::getCreateTime); - lqw.last("LIMIT 1"); - - XgAuditRecord auditRecord = auditRecordMapper.selectOne(lqw); - if (auditRecord == null) { - throw new ServiceException("未找到待审核记录"); - } - - // 更新审核记录 - XgAuditRecord update = new XgAuditRecord(); - update.setId(auditRecord.getId()); - update.setAuditStatus("approved".equals(auditResult) ? "approved" : "rejected"); - update.setAuditComment(auditComment); - update.setAuditTime(LocalDateTime.now()); - - auditRecordMapper.updateById(update); - - // 更新学生信息状态 - XgStudentInfo studentUpdate = new XgStudentInfo(); - studentUpdate.setId(studentId); - studentUpdate.setInfoStatus("approved".equals(auditResult) ? "approved" : "draft"); - studentUpdate.setLastAuditTime(LocalDateTime.now()); - studentUpdate.setAuditComment(auditComment); - - return baseMapper.updateById(studentUpdate) > 0; - } - - /** - * 批量审核学生信息 - */ - @Override - @Transactional - public Boolean batchAuditStudentInfo(List studentIds, Long auditorId, String auditResult, String auditComments) { - for (Long studentId : studentIds) { - XgStudentInfo studentInfo = baseMapper.selectById(studentId); - if (studentInfo != null) { - // 更新审核状态 - studentInfo.setAuditStatus(auditResult); - studentInfo.setAuditComments(auditComments); - studentInfo.setAuditBy(auditorId); - baseMapper.updateById(studentInfo); - } - } - return true; - } - - /** - * 检查学号是否存在 - */ - @Override - public Boolean checkStudentNoExists(String studentNo, Long studentId) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(XgStudentInfo::getStudentNo, studentNo); - if (studentId != null) { - lqw.ne(XgStudentInfo::getId, studentId); - } - return baseMapper.exists(lqw); - } - - /** - * 检查身份证号是否存在 - */ - @Override - public Boolean checkIdCardExists(String idCard, Long studentId) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(XgStudentInfo::getIdCard, idCard); - if (studentId != null) { - lqw.ne(XgStudentInfo::getId, studentId); - } - return baseMapper.exists(lqw); - } - - /** - * 获取学生批次进度 - */ - @Override - public Map getStudentBatchProgress(Long studentId, Long batchId) { - // 实现学生批次进度查询逻辑 - // 这里需要根据具体业务需求实现 - return Map.of( - "studentId", studentId, - "batchId", batchId, - "progress", "待实现" - ); - } -} diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgAcademicYearMapper.xml b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgAcademicYearMapper.xml deleted file mode 100644 index 586fd871..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgAcademicYearMapper.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - select id, year_code, year_name, start_date, end_date, is_current, status, description, sort_order, remark, create_by, create_time, update_by, update_time, deleted, tenant_id - from xg_academic_year - - - diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgAuditRecordMapper.xml b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgAuditRecordMapper.xml deleted file mode 100644 index ee60f05c..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgAuditRecordMapper.xml +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgBatchPermissionMapper.xml b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgBatchPermissionMapper.xml deleted file mode 100644 index b42d4e78..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgBatchPermissionMapper.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - select permission_id, batch_id, user_group_type, user_group_name, permission_type, permission_scope, can_view, can_edit, can_audit, can_export, start_time, end_time, sort_order, status, remark, create_by, create_time, update_by, update_time, deleted, tenant_id - from xg_batch_permission - - - diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgBusinessPeriodMapper.xml b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgBusinessPeriodMapper.xml deleted file mode 100644 index c87a5b63..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgBusinessPeriodMapper.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - select business_period_id, period_name, period_code, period_type, start_time, end_time, is_active, sort_order, status, description, remark, create_by, create_time, update_by, update_time, deleted, tenant_id - from xg_business_period - - - diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgClassCadreMapper.xml b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgClassCadreMapper.xml deleted file mode 100644 index e8f656a1..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgClassCadreMapper.xml +++ /dev/null @@ -1,268 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - update xg_class_cadre - set is_current = 0, - cadre_status = '2', - update_time = now() - where id = #{cadreId} - and deleted = 0 - - - - - update xg_class_cadre - set cadre_status = #{status}, - update_time = now() - where id in - - #{id} - - and deleted = 0 - - - - - - - - - - - - diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgClassInfoMapper.xml b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgClassInfoMapper.xml deleted file mode 100644 index 7f3c6c7b..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgClassInfoMapper.xml +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - update xg_class_info - set current_student_count = ( - select count(*) - from xg_student_info - where class_code = xg_class_info.class_code - and deleted = 0 - and student_status in ('1', '2', '3') - ), - male_count = ( - select count(*) - from xg_student_info - where class_code = xg_class_info.class_code - and gender = 'M' - and deleted = 0 - and student_status in ('1', '2', '3') - ), - female_count = ( - select count(*) - from xg_student_info - where class_code = xg_class_info.class_code - and gender = 'F' - and deleted = 0 - and student_status in ('1', '2', '3') - ), - update_time = now() - where id = #{classId} - and deleted = 0 - - - diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgClassStudentMapper.xml b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgClassStudentMapper.xml deleted file mode 100644 index df027643..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgClassStudentMapper.xml +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - update xg_class_student - set relation_status = #{relationStatus}, - update_time = now() - where student_id in - - #{id} - - and deleted = 0 - - - diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgCollectionBatchMapper.xml b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgCollectionBatchMapper.xml deleted file mode 100644 index 2624fd8a..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgCollectionBatchMapper.xml +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - update xg_collection_batch - set current_count = ( - select count(*) - from xg_student_info - where last_batch_id = #{batchId} - and deleted = 0 - ), - completed_count = ( - select count(*) - from xg_student_info - where last_batch_id = #{batchId} - and info_status in ('1', '3') - and deleted = 0 - ), - approved_count = ( - select count(*) - from xg_audit_record - where batch_id = #{batchId} - and final_result = 'PASS' - and deleted = 0 - ), - rejected_count = ( - select count(*) - from xg_audit_record - where batch_id = #{batchId} - and final_result = 'REJECT' - and deleted = 0 - ), - update_time = now() - where id = #{batchId} - and deleted = 0 - - - - - - diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgDictDataMapper.xml b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgDictDataMapper.xml deleted file mode 100644 index 7ce1a151..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgDictDataMapper.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - select id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, - is_default, status, create_by, create_time, update_by, update_time, remark - from xg_dict_data - - - diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgNoticeMapper.xml b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgNoticeMapper.xml deleted file mode 100644 index 7a5040a3..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgNoticeMapper.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - select id, title, content, notice_type, publish_status, is_top, read_count, - batch_id, target_group, publish_time, expire_time, sort_order, status, - create_by, create_time, update_by, update_time, remark - from xg_notice - - - diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgNoticeReadMapper.xml b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgNoticeReadMapper.xml deleted file mode 100644 index 10c29d8f..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgNoticeReadMapper.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - select id, notice_id, user_id, read_time, read_duration, read_device, read_ip, - create_by, create_time, update_by, update_time, remark - from xg_notice_read - - - diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgSemesterMapper.xml b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgSemesterMapper.xml deleted file mode 100644 index 64d32e32..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgSemesterMapper.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - select semester_id, academic_year_id, semester_name, semester_code, semester_type, start_date, end_date, is_current, sort_order, status, remark, create_by, create_time, update_by, update_time, deleted, tenant_id - from xg_semester - - - diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgStudentInfoHistoryMapper.xml b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgStudentInfoHistoryMapper.xml deleted file mode 100644 index 39917000..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgStudentInfoHistoryMapper.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - select id, student_id, batch_id, change_type, old_data, new_data, change_reason, - change_time, operator_id, operator_name, operator_type, ip_address, user_agent, status, - create_by, create_time, update_by, update_time, remark - from xg_student_info_history - - - diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgStudentInfoMapper.xml b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgStudentInfoMapper.xml deleted file mode 100644 index 4218c6ca..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgStudentInfoMapper.xml +++ /dev/null @@ -1,166 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - update xg_student_info - set info_status = #{infoStatus}, - update_time = now() - where id in - - #{id} - - and deleted = 0 - - - diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgSystemConfigMapper.xml b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgSystemConfigMapper.xml deleted file mode 100644 index 6ad23df1..00000000 --- a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgSystemConfigMapper.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - select id, config_key, config_value, config_name, config_group, config_type, - default_value, is_system, is_encrypt, sort_order, status, - create_by, create_time, update_by, update_time, remark - from xg_system_config - - - diff --git a/target/classes/META-INF/mps/autoMapper b/target/classes/META-INF/mps/autoMapper new file mode 100644 index 00000000..a8ba0c9c --- /dev/null +++ b/target/classes/META-INF/mps/autoMapper @@ -0,0 +1,4 @@ +org.dromara.workflow.domain.vo.FlowCategoryVo +org.dromara.workflow.domain.vo.TestLeaveVo +org.dromara.workflow.domain.bo.TestLeaveBo +org.dromara.workflow.domain.bo.FlowCategoryBo \ No newline at end of file diff --git a/target/classes/META-INF/mps/autoMappers b/target/classes/META-INF/mps/autoMappers new file mode 100644 index 00000000..800151c5 --- /dev/null +++ b/target/classes/META-INF/mps/autoMappers @@ -0,0 +1 @@ +org.dromara.system.domain.bo.SysOperLogBo \ No newline at end of file diff --git a/target/classes/META-INF/mps/mappers b/target/classes/META-INF/mps/mappers new file mode 100644 index 00000000..4e0ad44e --- /dev/null +++ b/target/classes/META-INF/mps/mappers @@ -0,0 +1,6 @@ +org.dromara.workflow.domain.vo.FlowCategoryVoToFlowCategoryMapper +org.dromara.workflow.domain.bo.FlowCategoryBoToFlowCategoryMapper +org.dromara.workflow.domain.bo.TestLeaveBoToTestLeaveMapper +org.dromara.workflow.domain.vo.TestLeaveVoToTestLeaveMapper +org.dromara.workflow.domain.TestLeaveToTestLeaveVoMapper +org.dromara.workflow.domain.FlowCategoryToFlowCategoryVoMapper \ No newline at end of file diff --git a/web/src/router/index.ts b/web/src/router/index.ts index 567f7bb4..43c5c7c5 100644 --- a/web/src/router/index.ts +++ b/web/src/router/index.ts @@ -89,16 +89,6 @@ export const constantRoutes: RouteRecordRaw[] = [ } ] }, - // 临时测试路由 - { - path: '/test-collection-batch', - name: 'TestCollectionBatch', - component: () => import('@/views/xg-xx/collectionBatch/test.vue'), - meta: { - title: '信息采集批次测试', - icon: 'ep:setting' - } - } ]; // 动态路由,基于用户权限动态去加载 diff --git a/web/src/views/hq/pm/repairOrder/index.vue b/web/src/views/hq/pm/repairOrder/index.vue index fda9da34..03408e5a 100644 --- a/web/src/views/hq/pm/repairOrder/index.vue +++ b/web/src/views/hq/pm/repairOrder/index.vue @@ -573,6 +573,11 @@ {{ getFileExt(file.name) }} + +
+ + 上传中... +
@@ -649,7 +654,7 @@
- {{ orderDetail.description }} + {{ orderDetail.description }}
@@ -657,7 +662,7 @@
- {{ orderDetail.remark }} + {{ orderDetail.remark }}
@@ -750,7 +755,7 @@
- {{ orderDetail.repairResult }} + {{ orderDetail.repairResult }}
@@ -758,7 +763,7 @@
- {{ orderDetail.followSuggestions }} + {{ orderDetail.followSuggestions }}
@@ -785,7 +790,7 @@
- {{ orderDetail.evaluationContent }} + {{ orderDetail.evaluationContent }}
@@ -969,7 +974,7 @@

{{ progress.progressDetail }}

-
+
{{ progress.usedMaterials }} @@ -1224,6 +1229,7 @@ import { useUserStore } from '@/store/modules/user'; import { getInfo } from '@/api/login'; // 添加获取用户详细信息的API import { getToken } from '@/utils/auth'; // 修复:添加getToken导入 import { vLoading, ElLoading } from 'element-plus'; +import { Loading } from '@element-plus/icons-vue'; const { proxy } = getCurrentInstance() as ComponentInternalInstance; @@ -2313,6 +2319,8 @@ const handleBeforeUpload = (file: File) => { 模式: form.value.id ? '编辑模式' : '新增模式' }); + file.uploading = true; // 新增:标记为上传中 + return true; }; @@ -2355,12 +2363,16 @@ const handleUploadSuccess = (response: any, file: any) => { } else { proxy?.$modal.msgError(`文件 ${file.name} 上传失败: ${response.msg || '未知错误'}`); } + + file.uploading = false; // 新增:上传成功后移除loading }; /** 上传失败 */ const handleUploadError = (error: Error, file: any) => { console.error('上传失败:', error, file); proxy?.$modal.msgError(`文件 ${file.name} 上传失败`); + + file.uploading = false; // 新增:上传失败后移除loading }; /** 下载附件 */ @@ -3829,4 +3841,56 @@ const getFileExt = (fileName: string): string => { } } } + +.upload-file-loading { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + background: rgba(255, 255, 255, 0.7); + display: flex; + align-items: center; + justify-content: center; + z-index: 2; + .is-loading { + font-size: 32px; + color: #409eff; + } +} + +.upload-file-thumb { + position: relative; +} +.upload-file-loading { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + background: rgba(255, 255, 255, 0.75); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + z-index: 10; + pointer-events: all; + .is-loading { + font-size: 38px; + color: var(--el-color-primary); + margin-bottom: 6px; + animation: spin 1s linear infinite; + } + .loading-text { + font-size: 14px; + color: var(--el-color-primary); + font-weight: bold; + text-shadow: 0 1px 2px #fff; + } +} +@keyframes spin { + 100% { + transform: rotate(360deg); + } +}