From c517e999569e0c6facbcfa702fd26fc5183c297f Mon Sep 17 00:00:00 2001 From: ybb <2532447764@qq.com> Date: Tue, 29 Jul 2025 10:43:20 +0800 Subject: [PATCH] =?UTF-8?q?=E2=80=9D=E8=A2=81=E5=BD=AC=E5=BD=ACpush?= =?UTF-8?q?=E2=80=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitattributes | 2 + .gitignore | 38 + core/pom.xml | 180 ++ .../com/dite/znpt/annotations/MatchType.java | 73 + .../dite/znpt/annotations/QueryCondition.java | 27 + .../com/dite/znpt/aspect/HttpLogAspect.java | 82 + .../znpt/config/BeanPostProcessorConfig.java | 49 + .../CustomLocalDateTimeDeserializer.java | 20 + .../com/dite/znpt/config/ExtUtilConfig.java | 80 + .../config/FastJson2JsonRedisSerializer.java | 52 + .../dite/znpt/config/GlobalCorsConfig.java | 32 + .../com/dite/znpt/config/JacksonConfig.java | 34 + .../com/dite/znpt/config/RedisConfig.java | 63 + .../java/com/dite/znpt/config/Schedule.java | 70 + .../com/dite/znpt/config/SwaggerConfig.java | 53 + .../com/dite/znpt/config/WebMvcConfig.java | 52 + .../dite/znpt/config/YoloModelRegistry.java | 112 + .../com/dite/znpt/constant/Constants.java | 100 + .../java/com/dite/znpt/constant/Message.java | 82 + .../com/dite/znpt/context/UserContext.java | 62 + .../java/com/dite/znpt/converts/Converts.java | 128 + .../com/dite/znpt/domain/AuditableEntity.java | 58 + .../java/com/dite/znpt/domain/PageResult.java | 58 + .../dite/znpt/domain/QueryWrapperBuilder.java | 77 + .../java/com/dite/znpt/domain/Result.java | 80 + .../java/com/dite/znpt/domain/TableData.java | 35 + .../com/dite/znpt/domain/bo/Detection.java | 21 + .../com/dite/znpt/domain/bo/Letterbox.java | 73 + .../com/dite/znpt/domain/bo/ODConfig.java | 55 + .../dite/znpt/domain/dto/FlowProcDefDto.java | 57 + .../znpt/domain/dto/OutWorkDefectDTO.java | 50 + .../znpt/domain/entity/AttachInfoEntity.java | 58 + .../domain/entity/AttendanceRecordEntity.java | 54 + .../domain/entity/AudioFileInfoEntity.java | 44 + .../domain/entity/CertificationEntity.java | 62 + .../znpt/domain/entity/CheckSchemeEntity.java | 57 + .../domain/entity/CombinedDictEntity.java | 56 + .../znpt/domain/entity/ContractEntity.java | 110 + .../entity/ContractSettlementEntity.java | 105 + .../dite/znpt/domain/entity/DefectEntity.java | 105 + .../dite/znpt/domain/entity/DeptEntity.java | 64 + .../dite/znpt/domain/entity/DictEntity.java | 61 + .../znpt/domain/entity/EquipmentEntity.java | 55 + .../entity/EquipmentUseRecordEntity.java | 53 + .../domain/entity/ImageCollectEntity.java | 82 + .../dite/znpt/domain/entity/ImageEntity.java | 139 ++ .../domain/entity/InspectionReportEntity.java | 98 + .../domain/entity/InsuranceCompanyEntity.java | 52 + .../domain/entity/InsuranceInfoEntity.java | 99 + .../domain/entity/InsuranceTypeEntity.java | 44 + .../entity/MaintainSuggestionEntity.java | 46 + .../dite/znpt/domain/entity/MenuEntity.java | 79 + .../znpt/domain/entity/ModelConfigEntity.java | 56 + .../dite/znpt/domain/entity/PartEntity.java | 69 + .../dite/znpt/domain/entity/PostEntity.java | 49 + .../entity/ProjectBudgetInfoEntity.java | 61 + .../znpt/domain/entity/ProjectEntity.java | 165 ++ .../znpt/domain/entity/ProjectTaskEntity.java | 89 + .../domain/entity/ProjectTaskGroupEntity.java | 41 + .../dite/znpt/domain/entity/RoleEntity.java | 67 + .../znpt/domain/entity/RoleMenuEntity.java | 38 + .../domain/entity/TConstructionEntity.java | 85 + .../znpt/domain/entity/TurbineEntity.java | 69 + .../dite/znpt/domain/entity/UserEntity.java | 152 ++ .../znpt/domain/entity/UserPostEntity.java | 35 + .../znpt/domain/entity/UserRoleEntity.java | 35 + .../domain/entity/VideoFileInfoEntity.java | 75 + .../znpt/domain/entity/WeatherTypeEntity.java | 42 + .../znpt/domain/entity/WorkShiftEntity.java | 85 + .../znpt/domain/entity/job/DefectDTO.java | 58 + .../domain/entity/job/JobAntiThunderWork.java | 2212 +++++++++++++++++ .../znpt/domain/entity/job/JobInWork.java | 131 + .../domain/entity/job/JobInWorkParts.java | 128 + .../dite/znpt/domain/entity/job/JobInfo.java | 70 + .../znpt/domain/entity/job/JobOutWork.java | 210 ++ .../domain/entity/job/JobSummaryWork.java | 49 + .../com/dite/znpt/domain/page/PageDomain.java | 67 + .../dite/znpt/domain/page/TableSupport.java | 74 + .../com/dite/znpt/domain/vo/AppImageResp.java | 32 + .../znpt/domain/vo/AppImageToPartReq.java | 53 + .../dite/znpt/domain/vo/AttachInfoReq.java | 33 + .../dite/znpt/domain/vo/AttachInfoResp.java | 45 + .../znpt/domain/vo/AttendanceRecordReq.java | 34 + .../znpt/domain/vo/AttendanceRecordResp.java | 54 + .../znpt/domain/vo/AudioFileInfoListReq.java | 32 + .../znpt/domain/vo/AudioFileInfoResp.java | 32 + .../znpt/domain/vo/CertificationListReq.java | 29 + .../dite/znpt/domain/vo/CertificationReq.java | 55 + .../znpt/domain/vo/CertificationResp.java | 54 + .../znpt/domain/vo/CheckSchemeListReq.java | 27 + .../dite/znpt/domain/vo/CheckSchemeReq.java | 50 + .../dite/znpt/domain/vo/CheckSchemeResp.java | 44 + .../znpt/domain/vo/CombinedDictListReq.java | 42 + .../dite/znpt/domain/vo/CombinedDictResp.java | 18 + .../znpt/domain/vo/ContractImportReq.java | 77 + .../dite/znpt/domain/vo/ContractListReq.java | 76 + .../com/dite/znpt/domain/vo/ContractReq.java | 80 + .../com/dite/znpt/domain/vo/ContractResp.java | 39 + .../vo/ContractSettlementImportReq.java | 74 + .../domain/vo/ContractSettlementListReq.java | 73 + .../znpt/domain/vo/ContractSettlementReq.java | 79 + .../domain/vo/ContractSettlementResp.java | 20 + .../dite/znpt/domain/vo/DefectListReq.java | 41 + .../dite/znpt/domain/vo/DefectListResp.java | 60 + .../dite/znpt/domain/vo/DefectMarkReq.java | 38 + .../com/dite/znpt/domain/vo/DefectReq.java | 66 + .../com/dite/znpt/domain/vo/DefectResp.java | 44 + .../java/com/dite/znpt/domain/vo/DeptReq.java | 40 + .../com/dite/znpt/domain/vo/DeptResp.java | 39 + .../com/dite/znpt/domain/vo/DictListReq.java | 41 + .../java/com/dite/znpt/domain/vo/DictReq.java | 48 + .../com/dite/znpt/domain/vo/DictResp.java | 18 + .../dite/znpt/domain/vo/EquipmentListReq.java | 29 + .../com/dite/znpt/domain/vo/EquipmentReq.java | 41 + .../dite/znpt/domain/vo/EquipmentResp.java | 59 + .../domain/vo/EquipmentUseRecordListReq.java | 33 + .../znpt/domain/vo/EquipmentUseRecordReq.java | 34 + .../domain/vo/EquipmentUseRecordResp.java | 60 + .../dite/znpt/domain/vo/ImageCollectInfo.java | 56 + .../dite/znpt/domain/vo/ImageCollectReq.java | 74 + .../dite/znpt/domain/vo/ImageExifInfo.java | 67 + .../com/dite/znpt/domain/vo/ImageListReq.java | 36 + .../dite/znpt/domain/vo/ImageListResp.java | 109 + .../com/dite/znpt/domain/vo/ImageReq.java | 44 + .../com/dite/znpt/domain/vo/ImageResp.java | 63 + .../dite/znpt/domain/vo/ImageSimpleReq.java | 32 + .../com/dite/znpt/domain/vo/ImageWorkReq.java | 35 + .../domain/vo/InspectionReportCheckInfo.java | 41 + .../domain/vo/InspectionReportListReq.java | 43 + .../domain/vo/InspectionReportListResp.java | 62 + .../domain/vo/InspectionReportReportInfo.java | 65 + .../znpt/domain/vo/InspectionReportReq.java | 94 + .../znpt/domain/vo/InspectionReportResp.java | 41 + .../domain/vo/InspectionReportSchemeInfo.java | 40 + .../znpt/domain/vo/InsuranceAttachResp.java | 57 + .../domain/vo/InsuranceCompanyListReq.java | 36 + .../znpt/domain/vo/InsuranceCompanyReq.java | 44 + .../znpt/domain/vo/InsuranceCompanyResp.java | 37 + .../znpt/domain/vo/InsuranceInfoListReq.java | 38 + .../dite/znpt/domain/vo/InsuranceInfoReq.java | 70 + .../znpt/domain/vo/InsuranceInfoResp.java | 75 + .../dite/znpt/domain/vo/InsuranceTypeReq.java | 33 + .../znpt/domain/vo/InsuranceTypeResp.java | 31 + .../com/dite/znpt/domain/vo/LoginReq.java | 30 + .../znpt/domain/vo/MaintainSuggestionReq.java | 37 + .../domain/vo/MaintainSuggestionResp.java | 40 + .../java/com/dite/znpt/domain/vo/MenuReq.java | 63 + .../com/dite/znpt/domain/vo/MenuResp.java | 48 + .../znpt/domain/vo/ModelConfigListReq.java | 41 + .../dite/znpt/domain/vo/ModelConfigReq.java | 50 + .../dite/znpt/domain/vo/ModelConfigResp.java | 18 + .../znpt/domain/vo/ModifyPasswordReq.java | 34 + .../dite/znpt/domain/vo/OutWorkDefectReq.java | 27 + .../com/dite/znpt/domain/vo/PartListReq.java | 41 + .../com/dite/znpt/domain/vo/PartListResp.java | 48 + .../java/com/dite/znpt/domain/vo/PartReq.java | 52 + .../com/dite/znpt/domain/vo/PartResp.java | 58 + .../java/com/dite/znpt/domain/vo/PostReq.java | 37 + .../com/dite/znpt/domain/vo/PostResp.java | 38 + .../domain/vo/ProjectBudgetInfoImportReq.java | 38 + .../domain/vo/ProjectBudgetInfoListReq.java | 44 + .../domain/vo/ProjectBudgetInfoListResp.java | 19 + .../znpt/domain/vo/ProjectBudgetInfoReq.java | 41 + .../znpt/domain/vo/ProjectBudgetInfoResp.java | 22 + .../dite/znpt/domain/vo/ProjectListReq.java | 48 + .../dite/znpt/domain/vo/ProjectListResp.java | 105 + .../com/dite/znpt/domain/vo/ProjectReq.java | 108 + .../com/dite/znpt/domain/vo/ProjectResp.java | 48 + .../domain/vo/ProjectTaskGroupListReq.java | 36 + .../znpt/domain/vo/ProjectTaskGroupReq.java | 43 + .../znpt/domain/vo/ProjectTaskGroupResp.java | 27 + .../znpt/domain/vo/ProjectTaskImportReq.java | 67 + .../znpt/domain/vo/ProjectTaskListReq.java | 75 + .../dite/znpt/domain/vo/ProjectTaskReq.java | 88 + .../dite/znpt/domain/vo/ProjectTaskResp.java | 29 + .../znpt/domain/vo/ProjectTaskStartReq.java | 37 + .../com/dite/znpt/domain/vo/RoleMenuReq.java | 32 + .../java/com/dite/znpt/domain/vo/RoleReq.java | 45 + .../com/dite/znpt/domain/vo/RoleResp.java | 39 + .../znpt/domain/vo/TConstructionListReq.java | 59 + .../dite/znpt/domain/vo/TConstructionReq.java | 57 + .../znpt/domain/vo/TConstructionResp.java | 20 + .../dite/znpt/domain/vo/TurbineInfoResp.java | 25 + .../dite/znpt/domain/vo/TurbineListReq.java | 36 + .../dite/znpt/domain/vo/TurbineListResp.java | 57 + .../com/dite/znpt/domain/vo/TurbineReq.java | 56 + .../com/dite/znpt/domain/vo/TurbineResp.java | 48 + .../com/dite/znpt/domain/vo/UserInfo.java | 34 + .../com/dite/znpt/domain/vo/UserListReq.java | 42 + .../com/dite/znpt/domain/vo/UserListResp.java | 69 + .../java/com/dite/znpt/domain/vo/UserReq.java | 96 + .../com/dite/znpt/domain/vo/UserResp.java | 46 + .../com/dite/znpt/domain/vo/UserRoleReq.java | 34 + .../znpt/domain/vo/VideoFileInfoListReq.java | 49 + .../dite/znpt/domain/vo/VideoFileInfoReq.java | 43 + .../znpt/domain/vo/VideoFileInfoResp.java | 19 + .../znpt/domain/vo/WeatherTypeListReq.java | 34 + .../dite/znpt/domain/vo/WeatherTypeResp.java | 19 + .../znpt/domain/vo/WorkShiftListResp.java | 54 + .../com/dite/znpt/domain/vo/WorkShiftReq.java | 59 + .../dite/znpt/domain/vo/WorkShiftResp.java | 67 + .../znpt/domain/vo/WorkbenchInfoResp.java | 28 + .../domain/vo/job/req/JobAllContentReq.java | 23 + .../vo/job/req/JobAntiThunderWorkReq.java | 13 + .../domain/vo/job/req/JobInWorkPartsReq.java | 13 + .../znpt/domain/vo/job/req/JobInWorkReq.java | 13 + .../znpt/domain/vo/job/req/JobInfoReq.java | 26 + .../znpt/domain/vo/job/req/JobOutWorkReq.java | 13 + .../domain/vo/job/req/JobSummaryWorkReq.java | 13 + .../domain/vo/job/resp/JobAllContentResp.java | 35 + .../vo/job/resp/JobAntiThunderWorkResp.java | 17 + .../vo/job/resp/JobInWorkPartsResp.java | 14 + .../domain/vo/job/resp/JobInWorkResp.java | 17 + .../znpt/domain/vo/job/resp/JobInfoResp.java | 17 + .../domain/vo/job/resp/JobOutWorkResp.java | 17 + .../vo/job/resp/JobSummaryWorkResp.java | 17 + .../domain/vo/job/resp/TurbineStatusResp.java | 49 + .../znpt/enums/AttachBusinessTypeEnum.java | 54 + .../com/dite/znpt/enums/BudgeTypeEnum.java | 52 + .../dite/znpt/enums/CertificationEnum.java | 56 + .../com/dite/znpt/enums/CheckMethodEnum.java | 52 + .../com/dite/znpt/enums/DefectLevelEnum.java | 52 + .../com/dite/znpt/enums/DefectSourceEnum.java | 51 + .../com/dite/znpt/enums/DefectTypeEnum.java | 60 + .../com/dite/znpt/enums/EducationEnum.java | 58 + .../main/java/com/dite/znpt/enums/Enums.java | 183 ++ .../dite/znpt/enums/EquipmentStatusEnum.java | 54 + .../dite/znpt/enums/EquipmentTypeEnum.java | 54 + .../com/dite/znpt/enums/FilePathEnum.java | 58 + .../java/com/dite/znpt/enums/GenderEnum.java | 51 + .../com/dite/znpt/enums/ImageSourceEnum.java | 52 + .../com/dite/znpt/enums/ImageTypeEnum.java | 50 + .../enums/InspectionReportStatusEnum.java | 51 + .../dite/znpt/enums/InsuranceStatusEnum.java | 51 + .../com/dite/znpt/enums/MenuTypeEnum.java | 52 + .../com/dite/znpt/enums/PartTypeEnum.java | 53 + .../dite/znpt/enums/ProjectStatusEnum.java | 50 + .../dite/znpt/enums/ProjectTaskStateEnum.java | 48 + .../dite/znpt/enums/ProjectWorkJobEnum.java | 66 + .../dite/znpt/enums/ProjectWorkTypeEnum.java | 51 + .../com/dite/znpt/enums/RepairStatusEnum.java | 51 + .../dite/znpt/enums/ShootingMethodEnum.java | 50 + .../com/dite/znpt/enums/TerminalTypeEnum.java | 50 + .../com/dite/znpt/enums/UserStatusEnum.java | 52 + .../com/dite/znpt/enums/UserTypeEnum.java | 51 + .../java/com/dite/znpt/enums/WeatherEnum.java | 71 + .../RestResponseEntityExceptionHandler.java | 56 + .../dite/znpt/exception/ServiceException.java | 15 + .../znpt/mapper/AttendanceRecordMapper.java | 12 + .../dite/znpt/mapper/AudioFileInfoMapper.java | 19 + .../dite/znpt/mapper/CertificationMapper.java | 17 + .../dite/znpt/mapper/CheckSchemeMapper.java | 12 + .../com/dite/znpt/mapper/ContractMapper.java | 19 + .../znpt/mapper/ContractSettlementMapper.java | 19 + .../com/dite/znpt/mapper/DefectMapper.java | 20 + .../java/com/dite/znpt/mapper/DeptMapper.java | 32 + .../java/com/dite/znpt/mapper/DictMapper.java | 18 + .../com/dite/znpt/mapper/EquipmentMapper.java | 21 + .../znpt/mapper/EquipmentUseRecordMapper.java | 20 + .../com/dite/znpt/mapper/FileInfoMapper.java | 13 + .../dite/znpt/mapper/FlowDeployMapper.java | 23 + .../dite/znpt/mapper/ImageCollectMapper.java | 13 + .../com/dite/znpt/mapper/ImageMapper.java | 18 + .../znpt/mapper/InspectionReportMapper.java | 21 + .../znpt/mapper/InsuranceCompanyMapper.java | 12 + .../dite/znpt/mapper/InsuranceInfoMapper.java | 12 + .../dite/znpt/mapper/InsuranceTypeMapper.java | 12 + .../znpt/mapper/JobAntiThunderWorkMapper.java | 18 + .../com/dite/znpt/mapper/JobInWorkMapper.java | 18 + .../znpt/mapper/JobInWorkPartsMapper.java | 18 + .../com/dite/znpt/mapper/JobInfoMapper.java | 20 + .../dite/znpt/mapper/JobOutWorkMapper.java | 19 + .../znpt/mapper/JobSummaryWorkMapper.java | 18 + .../znpt/mapper/MaintainSuggestionMapper.java | 13 + .../java/com/dite/znpt/mapper/MenuMapper.java | 33 + .../dite/znpt/mapper/ModelConfigMapper.java | 18 + .../java/com/dite/znpt/mapper/PartMapper.java | 18 + .../java/com/dite/znpt/mapper/PostMapper.java | 12 + .../znpt/mapper/ProjectBudgetInfoMapper.java | 20 + .../com/dite/znpt/mapper/ProjectMapper.java | 20 + .../znpt/mapper/ProjectTaskGroupMapper.java | 19 + .../dite/znpt/mapper/ProjectTaskMapper.java | 21 + .../java/com/dite/znpt/mapper/RoleMapper.java | 12 + .../com/dite/znpt/mapper/RoleMenuMapper.java | 12 + .../dite/znpt/mapper/TConstructionMapper.java | 19 + .../com/dite/znpt/mapper/TurbineMapper.java | 21 + .../java/com/dite/znpt/mapper/UserMapper.java | 19 + .../com/dite/znpt/mapper/UserPostMapper.java | 12 + .../com/dite/znpt/mapper/UserRoleMapper.java | 12 + .../dite/znpt/mapper/VideoFileInfoMapper.java | 19 + .../dite/znpt/mapper/WeatherTypeMapper.java | 19 + .../com/dite/znpt/mapper/WorkShiftMapper.java | 12 + .../dite/znpt/service/AttachInfoService.java | 65 + .../znpt/service/AttendanceRecordService.java | 23 + .../znpt/service/AudioFileInfoService.java | 68 + .../com/dite/znpt/service/AuthService.java | 28 + .../znpt/service/CertificationService.java | 24 + .../dite/znpt/service/CheckSchemeService.java | 23 + .../dite/znpt/service/ContractService.java | 65 + .../service/ContractSettlementService.java | 47 + .../com/dite/znpt/service/DefectService.java | 86 + .../com/dite/znpt/service/DeptService.java | 27 + .../com/dite/znpt/service/DictService.java | 65 + .../dite/znpt/service/EquipmentService.java | 24 + .../service/EquipmentUseRecordService.java | 22 + .../znpt/service/ImageCollectService.java | 14 + .../com/dite/znpt/service/ImageService.java | 56 + .../znpt/service/InspectionReportService.java | 41 + .../znpt/service/InsuranceCompanyService.java | 23 + .../znpt/service/InsuranceInfoService.java | 27 + .../znpt/service/InsuranceTypeService.java | 23 + .../service/MaintainSuggestionService.java | 23 + .../com/dite/znpt/service/MenuService.java | 23 + .../dite/znpt/service/ModelConfigService.java | 65 + .../com/dite/znpt/service/PartService.java | 92 + .../com/dite/znpt/service/PostService.java | 28 + .../service/ProjectBudgetInfoService.java | 48 + .../com/dite/znpt/service/ProjectService.java | 68 + .../znpt/service/ProjectTaskGroupService.java | 55 + .../dite/znpt/service/ProjectTaskService.java | 93 + .../dite/znpt/service/RoleMenuService.java | 17 + .../com/dite/znpt/service/RoleService.java | 28 + .../znpt/service/TConstructionService.java | 65 + .../com/dite/znpt/service/TurbineService.java | 112 + .../dite/znpt/service/UserPostService.java | 19 + .../dite/znpt/service/UserRoleService.java | 22 + .../com/dite/znpt/service/UserService.java | 76 + .../znpt/service/VideoFileInfoService.java | 68 + .../dite/znpt/service/WeatherTypeService.java | 64 + .../dite/znpt/service/WorkShiftService.java | 33 + .../dite/znpt/service/WorkbenchService.java | 15 + .../service/impl/AttachInfoServiceImpl.java | 177 ++ .../impl/AttendanceRecordServiceImpl.java | 93 + .../impl/AudioFileInfoServiceImpl.java | 126 + .../znpt/service/impl/AuthServiceImpl.java | 168 ++ .../impl/CertificationServiceImpl.java | 116 + .../service/impl/CheckSchemeServiceImpl.java | 86 + .../service/impl/ContractServiceImpl.java | 103 + .../impl/ContractSettlementServiceImpl.java | 76 + .../znpt/service/impl/DefectServiceImpl.java | 236 ++ .../znpt/service/impl/DeptServiceImpl.java | 120 + .../znpt/service/impl/DictServiceImpl.java | 103 + .../service/impl/EquipmentServiceImpl.java | 108 + .../impl/EquipmentUseRecordServiceImpl.java | 137 + .../service/impl/ImageCollectServiceImpl.java | 71 + .../znpt/service/impl/ImageServiceImpl.java | 505 ++++ .../impl/InspectionReportServiceImpl.java | 201 ++ .../impl/InsuranceCompanyServiceImpl.java | 96 + .../impl/InsuranceInfoServiceImpl.java | 200 ++ .../impl/InsuranceTypeServiceImpl.java | 93 + .../impl/MaintainSuggestionServiceImpl.java | 99 + .../znpt/service/impl/MenuServiceImpl.java | 94 + .../service/impl/ModelConfigServiceImpl.java | 123 + .../service/impl/MultiModelYoloService.java | 147 ++ .../znpt/service/impl/PartServiceImpl.java | 186 ++ .../znpt/service/impl/PostServiceImpl.java | 70 + .../impl/ProjectBudgetInfoServiceImpl.java | 92 + .../znpt/service/impl/ProjectServiceImpl.java | 164 ++ .../impl/ProjectTaskGroupServiceImpl.java | 95 + .../service/impl/ProjectTaskServiceImpl.java | 269 ++ .../dite/znpt/service/impl/RedisService.java | 342 +++ .../service/impl/RoleMenuServiceImpl.java | 59 + .../znpt/service/impl/RoleServiceImpl.java | 92 + .../impl/TConstructionServiceImpl.java | 99 + .../znpt/service/impl/TurbineServiceImpl.java | 284 +++ .../service/impl/UserPostServiceImpl.java | 91 + .../service/impl/UserRoleServiceImpl.java | 91 + .../znpt/service/impl/UserServiceImpl.java | 257 ++ .../impl/VideoFileInfoServiceImpl.java | 136 + .../service/impl/WeatherTypeServiceImpl.java | 99 + .../service/impl/WorkShitServiceImpl.java | 157 ++ .../service/impl/WorkbenchServiceImpl.java | 53 + .../job/JobAntiThunderWorkService.java | 41 + .../service/job/JobInWorkPartsService.java | 8 + .../znpt/service/job/JobInWorkService.java | 42 + .../znpt/service/job/JobOutWorkService.java | 41 + .../com/dite/znpt/service/job/JobService.java | 15 + .../service/job/JobSummaryWorkService.java | 41 + .../impl/JobAntiThunderWorkServiceImpl.java | 173 ++ .../job/impl/JobInWorkPartsServiceImpl.java | 21 + .../job/impl/JobInWorkServiceImpl.java | 192 ++ .../job/impl/JobOutWorkServiceImpl.java | 294 +++ .../znpt/service/job/impl/JobServiceImpl.java | 31 + .../job/impl/JobSummaryWorkServiceImpl.java | 149 ++ .../typehandle/ArrayObjectTypeHandler.java | 37 + .../znpt/typehandle/OutworkDefectHandler.java | 19 + .../java/com/dite/znpt/util/EXIFUtil.java | 68 + .../java/com/dite/znpt/util/ModelUtil.java | 74 + .../java/com/dite/znpt/util/PageUtil.java | 25 + .../java/com/dite/znpt/util/PasswordUtil.java | 54 + .../main/java/com/dite/znpt/util/SqlUtil.java | 36 + .../com/dite/znpt/util/ValidationGroup.java | 13 + .../resources/mapper/AudioFileInfoMapper.xml | 30 + .../resources/mapper/CertificationMapper.xml | 21 + .../main/resources/mapper/ContractMapper.xml | 74 + .../mapper/ContractSettlementMapper.xml | 69 + .../main/resources/mapper/DefectMapper.xml | 36 + core/src/main/resources/mapper/DeptMapper.xml | 39 + core/src/main/resources/mapper/DictMapper.xml | 37 + .../main/resources/mapper/EquipmentMapper.xml | 31 + .../mapper/EquipmentUseRecordMapper.xml | 34 + .../resources/mapper/ImageCollectMapper.xml | 6 + .../src/main/resources/mapper/ImageMapper.xml | 83 + .../mapper/InspectionReportMapper.xml | 37 + .../main/resources/mapper/JobInfoMapper.xml | 99 + .../mapper/MaintainSuggestionMapper.xml | 4 + core/src/main/resources/mapper/MenuMapper.xml | 39 + .../resources/mapper/ModelConfigMapper.xml | 34 + core/src/main/resources/mapper/PartMapper.xml | 34 + core/src/main/resources/mapper/PostMapper.xml | 5 + .../mapper/ProjectBudgetInfoMapper.xml | 49 + .../main/resources/mapper/ProjectMapper.xml | 56 + .../mapper/ProjectTaskGroupMapper.xml | 28 + .../resources/mapper/ProjectTaskMapper.xml | 84 + core/src/main/resources/mapper/RoleMapper.xml | 5 + .../main/resources/mapper/RoleMenuMapper.xml | 5 + .../resources/mapper/TConstructionMapper.xml | 55 + .../main/resources/mapper/TurbineMapper.xml | 90 + core/src/main/resources/mapper/UserMapper.xml | 45 + .../main/resources/mapper/UserPostMapper.xml | 5 + .../main/resources/mapper/UserRoleMapper.xml | 5 + .../resources/mapper/VideoFileInfoMapper.xml | 44 + .../resources/mapper/WeatherTypeMapper.xml | 29 + .../main/resources/mapper/WorkShiftMapper.xml | 5 + .../.mvn/wrapper/maven-wrapper.properties | 19 + flowable/pom.xml | 67 + .../common/constant/ProcessConstants.java | 80 + .../flowable/common/enums/FlowComment.java | 43 + .../flowable/common/expand/el/BaseEl.java | 12 + .../flowable/common/expand/el/FlowEl.java | 26 + .../znpt/flowable/config/FlowableConfig.java | 23 + .../config/MyDefaultProcessDiagramCanvas.java | 95 + .../controller/FlowDefinitionController.java | 200 ++ .../controller/FlowInstanceController.java | 62 + .../controller/FlowTaskController.java | 267 ++ .../controller/SysExpressionController.java | 91 + .../controller/SysFormController.java | 104 + .../controller/SysListenerController.java | 92 + .../flowable/domain/dto/FlowCommentDto.java | 25 + .../flowable/domain/dto/FlowFromFieldDTO.java | 15 + .../znpt/flowable/domain/dto/FlowNextDto.java | 30 + .../flowable/domain/dto/FlowSaveXmlVo.java | 28 + .../znpt/flowable/domain/dto/FlowTaskDto.java | 102 + .../flowable/domain/dto/FlowViewerDto.java | 23 + .../flowable/domain/entity/SysDeployForm.java | 51 + .../flowable/domain/entity/SysExpression.java | 73 + .../znpt/flowable/domain/entity/SysForm.java | 63 + .../flowable/domain/entity/SysListener.java | 87 + .../znpt/flowable/domain/vo/FlowQueryVo.java | 36 + .../znpt/flowable/domain/vo/FlowTaskVo.java | 56 + .../flowable/domain/vo/ReturnTaskNodeVo.java | 26 + .../flowable/factory/FlowServiceFactory.java | 41 + .../flow/CustomProcessDiagramCanvas.java | 370 +++ .../flow/CustomProcessDiagramGenerator.java | 404 +++ .../znpt/flowable/flow/FindNextNodeUtil.java | 266 ++ .../znpt/flowable/flow/FlowableUtils.java | 702 ++++++ .../listener/FlowExecutionListener.java | 36 + .../flowable/listener/FlowTaskListener.java | 32 + .../flowable/mapper/SysDeployFormMapper.java | 73 + .../flowable/mapper/SysExpressionMapper.java | 63 + .../znpt/flowable/mapper/SysFormMapper.java | 63 + .../flowable/mapper/SysListenerMapper.java | 62 + .../service/IFlowDefinitionService.java | 80 + .../service/IFlowInstanceService.java | 53 + .../flowable/service/IFlowTaskService.java | 218 ++ .../service/ISysDeployFormService.java | 70 + .../service/ISysExpressionService.java | 63 + .../flowable/service/ISysFormService.java | 61 + .../flowable/service/ISysListenerService.java | 63 + .../impl/FlowDefinitionServiceImpl.java | 241 ++ .../service/impl/FlowInstanceServiceImpl.java | 119 + .../service/impl/FlowTaskServiceImpl.java | 1266 ++++++++++ .../impl/SysDeployFormServiceImpl.java | 112 + .../impl/SysExpressionServiceImpl.java | 97 + .../service/impl/SysFormServiceImpl.java | 97 + .../service/impl/SysListenerServiceImpl.java | 97 + .../resources/mapper/FlowDeployMapper.xml | 26 + .../resources/mapper/SysDeployFormMapper.xml | 66 + .../resources/mapper/SysExpressionMapper.xml | 90 + .../main/resources/mapper/SysFormMapper.xml | 82 + .../resources/mapper/SysListenerMapper.xml | 115 + pom.xml | 54 + web/pom.xml | 60 + .../com/dite/znpt/web/DiteApplication.java | 21 + .../dite/znpt/web/build/DeployController.java | 191 ++ .../web/build/GiteeSignatureVerifier.java | 82 + .../web/controller/AttachInfoController.java | 38 + .../AttendanceRecordController.java | 49 + .../znpt/web/controller/AudioController.java | 66 + .../znpt/web/controller/AuthController.java | 64 + .../controller/CertificationController.java | 68 + .../web/controller/CheckSchemeController.java | 65 + .../znpt/web/controller/CommonController.java | 179 ++ .../web/controller/ContractController.java | 85 + .../ContractSettlementController.java | 42 + .../znpt/web/controller/DefectController.java | 73 + .../znpt/web/controller/DeptController.java | 62 + .../znpt/web/controller/DictController.java | 62 + .../web/controller/EquipmentController.java | 68 + .../EquipmentUseRecordController.java | 62 + .../znpt/web/controller/ImageController.java | 104 + .../InspectionReportController.java | 77 + .../InsuranceCompanyController.java | 68 + .../controller/InsuranceInfoController.java | 107 + .../controller/InsuranceTypeController.java | 67 + .../JobAntiThunderWorkController.java | 70 + .../znpt/web/controller/JobController.java | 39 + .../web/controller/JobInWorkController.java | 70 + .../web/controller/JobOutWorkController.java | 66 + .../controller/JobSummaryWorkController.java | 74 + .../MaintainSuggestionController.java | 67 + .../znpt/web/controller/MenuController.java | 58 + .../web/controller/ModelConfigController.java | 69 + .../znpt/web/controller/PartController.java | 94 + .../znpt/web/controller/PostController.java | 68 + .../ProjectBudgetInfoController.java | 48 + .../web/controller/ProjectController.java | 104 + .../web/controller/ProjectTaskController.java | 111 + .../ProjectTaskGroupController.java | 63 + .../znpt/web/controller/RoleController.java | 82 + .../controller/TConstructionController.java | 85 + .../web/controller/TurbineController.java | 103 + .../znpt/web/controller/UserController.java | 75 + .../controller/VideoFileInfoController.java | 63 + .../web/controller/WeatherTypeController.java | 84 + .../web/controller/WorkShiftController.java | 77 + .../web/controller/WorkbenchController.java | 34 + web/src/main/resources/application-dev.yml | 150 ++ web/src/main/resources/application.yml | 30 + web/src/main/resources/logback.xml | 99 + 530 files changed, 37278 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 core/pom.xml create mode 100644 core/src/main/java/com/dite/znpt/annotations/MatchType.java create mode 100644 core/src/main/java/com/dite/znpt/annotations/QueryCondition.java create mode 100644 core/src/main/java/com/dite/znpt/aspect/HttpLogAspect.java create mode 100644 core/src/main/java/com/dite/znpt/config/BeanPostProcessorConfig.java create mode 100644 core/src/main/java/com/dite/znpt/config/CustomLocalDateTimeDeserializer.java create mode 100644 core/src/main/java/com/dite/znpt/config/ExtUtilConfig.java create mode 100644 core/src/main/java/com/dite/znpt/config/FastJson2JsonRedisSerializer.java create mode 100644 core/src/main/java/com/dite/znpt/config/GlobalCorsConfig.java create mode 100644 core/src/main/java/com/dite/znpt/config/JacksonConfig.java create mode 100644 core/src/main/java/com/dite/znpt/config/RedisConfig.java create mode 100644 core/src/main/java/com/dite/znpt/config/Schedule.java create mode 100644 core/src/main/java/com/dite/znpt/config/SwaggerConfig.java create mode 100644 core/src/main/java/com/dite/znpt/config/WebMvcConfig.java create mode 100644 core/src/main/java/com/dite/znpt/config/YoloModelRegistry.java create mode 100644 core/src/main/java/com/dite/znpt/constant/Constants.java create mode 100644 core/src/main/java/com/dite/znpt/constant/Message.java create mode 100644 core/src/main/java/com/dite/znpt/context/UserContext.java create mode 100644 core/src/main/java/com/dite/znpt/converts/Converts.java create mode 100644 core/src/main/java/com/dite/znpt/domain/AuditableEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/PageResult.java create mode 100644 core/src/main/java/com/dite/znpt/domain/QueryWrapperBuilder.java create mode 100644 core/src/main/java/com/dite/znpt/domain/Result.java create mode 100644 core/src/main/java/com/dite/znpt/domain/TableData.java create mode 100644 core/src/main/java/com/dite/znpt/domain/bo/Detection.java create mode 100644 core/src/main/java/com/dite/znpt/domain/bo/Letterbox.java create mode 100644 core/src/main/java/com/dite/znpt/domain/bo/ODConfig.java create mode 100644 core/src/main/java/com/dite/znpt/domain/dto/FlowProcDefDto.java create mode 100644 core/src/main/java/com/dite/znpt/domain/dto/OutWorkDefectDTO.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/AttachInfoEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/AttendanceRecordEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/AudioFileInfoEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/CertificationEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/CheckSchemeEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/CombinedDictEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/ContractEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/ContractSettlementEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/DefectEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/DeptEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/DictEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/EquipmentEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/EquipmentUseRecordEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/ImageCollectEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/ImageEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/InspectionReportEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/InsuranceCompanyEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/InsuranceInfoEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/InsuranceTypeEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/MaintainSuggestionEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/MenuEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/ModelConfigEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/PartEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/PostEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/ProjectBudgetInfoEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/ProjectEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/ProjectTaskEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/ProjectTaskGroupEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/RoleEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/RoleMenuEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/TConstructionEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/TurbineEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/UserEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/UserPostEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/UserRoleEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/VideoFileInfoEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/WeatherTypeEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/WorkShiftEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/job/DefectDTO.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/job/JobAntiThunderWork.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/job/JobInWork.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/job/JobInWorkParts.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/job/JobInfo.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/job/JobOutWork.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/job/JobSummaryWork.java create mode 100644 core/src/main/java/com/dite/znpt/domain/page/PageDomain.java create mode 100644 core/src/main/java/com/dite/znpt/domain/page/TableSupport.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/AppImageResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/AppImageToPartReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/AttachInfoReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/AttachInfoResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/AttendanceRecordReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/AttendanceRecordResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/AudioFileInfoListReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/AudioFileInfoResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/CertificationListReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/CertificationReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/CertificationResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/CheckSchemeListReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/CheckSchemeReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/CheckSchemeResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/CombinedDictListReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/CombinedDictResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ContractImportReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ContractListReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ContractReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ContractResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ContractSettlementImportReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ContractSettlementListReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ContractSettlementReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ContractSettlementResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/DefectListReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/DefectListResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/DefectMarkReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/DefectReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/DefectResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/DeptReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/DeptResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/DictListReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/DictReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/DictResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/EquipmentListReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/EquipmentReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/EquipmentResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/EquipmentUseRecordListReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/EquipmentUseRecordReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/EquipmentUseRecordResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ImageCollectInfo.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ImageCollectReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ImageExifInfo.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ImageListReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ImageListResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ImageReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ImageResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ImageSimpleReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ImageWorkReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/InspectionReportCheckInfo.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/InspectionReportListReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/InspectionReportListResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/InspectionReportReportInfo.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/InspectionReportReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/InspectionReportResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/InspectionReportSchemeInfo.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/InsuranceAttachResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/InsuranceCompanyListReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/InsuranceCompanyReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/InsuranceCompanyResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/InsuranceInfoListReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/InsuranceInfoReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/InsuranceInfoResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/InsuranceTypeReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/InsuranceTypeResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/LoginReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/MaintainSuggestionReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/MaintainSuggestionResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/MenuReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/MenuResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ModelConfigListReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ModelConfigReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ModelConfigResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ModifyPasswordReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/OutWorkDefectReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/PartListReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/PartListResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/PartReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/PartResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/PostReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/PostResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoImportReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoListReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoListResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ProjectListReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ProjectListResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ProjectReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ProjectResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskGroupListReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskGroupReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskGroupResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskImportReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskListReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskStartReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/RoleMenuReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/RoleReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/RoleResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/TConstructionListReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/TConstructionReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/TConstructionResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/TurbineInfoResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/TurbineListReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/TurbineListResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/TurbineReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/TurbineResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/UserInfo.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/UserListReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/UserListResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/UserReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/UserResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/UserRoleReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/VideoFileInfoListReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/VideoFileInfoReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/VideoFileInfoResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/WeatherTypeListReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/WeatherTypeResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/WorkShiftListResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/WorkShiftReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/WorkShiftResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/WorkbenchInfoResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/job/req/JobAllContentReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/job/req/JobAntiThunderWorkReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/job/req/JobInWorkPartsReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/job/req/JobInWorkReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/job/req/JobInfoReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/job/req/JobOutWorkReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/job/req/JobSummaryWorkReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/job/resp/JobAllContentResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/job/resp/JobAntiThunderWorkResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/job/resp/JobInWorkPartsResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/job/resp/JobInWorkResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/job/resp/JobInfoResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/job/resp/JobOutWorkResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/job/resp/JobSummaryWorkResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/job/resp/TurbineStatusResp.java create mode 100644 core/src/main/java/com/dite/znpt/enums/AttachBusinessTypeEnum.java create mode 100644 core/src/main/java/com/dite/znpt/enums/BudgeTypeEnum.java create mode 100644 core/src/main/java/com/dite/znpt/enums/CertificationEnum.java create mode 100644 core/src/main/java/com/dite/znpt/enums/CheckMethodEnum.java create mode 100644 core/src/main/java/com/dite/znpt/enums/DefectLevelEnum.java create mode 100644 core/src/main/java/com/dite/znpt/enums/DefectSourceEnum.java create mode 100644 core/src/main/java/com/dite/znpt/enums/DefectTypeEnum.java create mode 100644 core/src/main/java/com/dite/znpt/enums/EducationEnum.java create mode 100644 core/src/main/java/com/dite/znpt/enums/Enums.java create mode 100644 core/src/main/java/com/dite/znpt/enums/EquipmentStatusEnum.java create mode 100644 core/src/main/java/com/dite/znpt/enums/EquipmentTypeEnum.java create mode 100644 core/src/main/java/com/dite/znpt/enums/FilePathEnum.java create mode 100644 core/src/main/java/com/dite/znpt/enums/GenderEnum.java create mode 100644 core/src/main/java/com/dite/znpt/enums/ImageSourceEnum.java create mode 100644 core/src/main/java/com/dite/znpt/enums/ImageTypeEnum.java create mode 100644 core/src/main/java/com/dite/znpt/enums/InspectionReportStatusEnum.java create mode 100644 core/src/main/java/com/dite/znpt/enums/InsuranceStatusEnum.java create mode 100644 core/src/main/java/com/dite/znpt/enums/MenuTypeEnum.java create mode 100644 core/src/main/java/com/dite/znpt/enums/PartTypeEnum.java create mode 100644 core/src/main/java/com/dite/znpt/enums/ProjectStatusEnum.java create mode 100644 core/src/main/java/com/dite/znpt/enums/ProjectTaskStateEnum.java create mode 100644 core/src/main/java/com/dite/znpt/enums/ProjectWorkJobEnum.java create mode 100644 core/src/main/java/com/dite/znpt/enums/ProjectWorkTypeEnum.java create mode 100644 core/src/main/java/com/dite/znpt/enums/RepairStatusEnum.java create mode 100644 core/src/main/java/com/dite/znpt/enums/ShootingMethodEnum.java create mode 100644 core/src/main/java/com/dite/znpt/enums/TerminalTypeEnum.java create mode 100644 core/src/main/java/com/dite/znpt/enums/UserStatusEnum.java create mode 100644 core/src/main/java/com/dite/znpt/enums/UserTypeEnum.java create mode 100644 core/src/main/java/com/dite/znpt/enums/WeatherEnum.java create mode 100644 core/src/main/java/com/dite/znpt/exception/RestResponseEntityExceptionHandler.java create mode 100644 core/src/main/java/com/dite/znpt/exception/ServiceException.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/AttendanceRecordMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/AudioFileInfoMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/CertificationMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/CheckSchemeMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/ContractMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/ContractSettlementMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/DefectMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/DeptMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/DictMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/EquipmentMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/EquipmentUseRecordMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/FileInfoMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/FlowDeployMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/ImageCollectMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/ImageMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/InspectionReportMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/InsuranceCompanyMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/InsuranceInfoMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/InsuranceTypeMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/JobAntiThunderWorkMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/JobInWorkMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/JobInWorkPartsMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/JobInfoMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/JobOutWorkMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/JobSummaryWorkMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/MaintainSuggestionMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/MenuMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/ModelConfigMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/PartMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/PostMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/ProjectBudgetInfoMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/ProjectMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/ProjectTaskGroupMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/ProjectTaskMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/RoleMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/RoleMenuMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/TConstructionMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/TurbineMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/UserMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/UserPostMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/UserRoleMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/VideoFileInfoMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/WeatherTypeMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/WorkShiftMapper.java create mode 100644 core/src/main/java/com/dite/znpt/service/AttachInfoService.java create mode 100644 core/src/main/java/com/dite/znpt/service/AttendanceRecordService.java create mode 100644 core/src/main/java/com/dite/znpt/service/AudioFileInfoService.java create mode 100644 core/src/main/java/com/dite/znpt/service/AuthService.java create mode 100644 core/src/main/java/com/dite/znpt/service/CertificationService.java create mode 100644 core/src/main/java/com/dite/znpt/service/CheckSchemeService.java create mode 100644 core/src/main/java/com/dite/znpt/service/ContractService.java create mode 100644 core/src/main/java/com/dite/znpt/service/ContractSettlementService.java create mode 100644 core/src/main/java/com/dite/znpt/service/DefectService.java create mode 100644 core/src/main/java/com/dite/znpt/service/DeptService.java create mode 100644 core/src/main/java/com/dite/znpt/service/DictService.java create mode 100644 core/src/main/java/com/dite/znpt/service/EquipmentService.java create mode 100644 core/src/main/java/com/dite/znpt/service/EquipmentUseRecordService.java create mode 100644 core/src/main/java/com/dite/znpt/service/ImageCollectService.java create mode 100644 core/src/main/java/com/dite/znpt/service/ImageService.java create mode 100644 core/src/main/java/com/dite/znpt/service/InspectionReportService.java create mode 100644 core/src/main/java/com/dite/znpt/service/InsuranceCompanyService.java create mode 100644 core/src/main/java/com/dite/znpt/service/InsuranceInfoService.java create mode 100644 core/src/main/java/com/dite/znpt/service/InsuranceTypeService.java create mode 100644 core/src/main/java/com/dite/znpt/service/MaintainSuggestionService.java create mode 100644 core/src/main/java/com/dite/znpt/service/MenuService.java create mode 100644 core/src/main/java/com/dite/znpt/service/ModelConfigService.java create mode 100644 core/src/main/java/com/dite/znpt/service/PartService.java create mode 100644 core/src/main/java/com/dite/znpt/service/PostService.java create mode 100644 core/src/main/java/com/dite/znpt/service/ProjectBudgetInfoService.java create mode 100644 core/src/main/java/com/dite/znpt/service/ProjectService.java create mode 100644 core/src/main/java/com/dite/znpt/service/ProjectTaskGroupService.java create mode 100644 core/src/main/java/com/dite/znpt/service/ProjectTaskService.java create mode 100644 core/src/main/java/com/dite/znpt/service/RoleMenuService.java create mode 100644 core/src/main/java/com/dite/znpt/service/RoleService.java create mode 100644 core/src/main/java/com/dite/znpt/service/TConstructionService.java create mode 100644 core/src/main/java/com/dite/znpt/service/TurbineService.java create mode 100644 core/src/main/java/com/dite/znpt/service/UserPostService.java create mode 100644 core/src/main/java/com/dite/znpt/service/UserRoleService.java create mode 100644 core/src/main/java/com/dite/znpt/service/UserService.java create mode 100644 core/src/main/java/com/dite/znpt/service/VideoFileInfoService.java create mode 100644 core/src/main/java/com/dite/znpt/service/WeatherTypeService.java create mode 100644 core/src/main/java/com/dite/znpt/service/WorkShiftService.java create mode 100644 core/src/main/java/com/dite/znpt/service/WorkbenchService.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/AttachInfoServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/AttendanceRecordServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/AudioFileInfoServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/AuthServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/CertificationServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/CheckSchemeServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/ContractServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/ContractSettlementServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/DefectServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/DeptServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/DictServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/EquipmentServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/EquipmentUseRecordServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/ImageCollectServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/ImageServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/InspectionReportServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/InsuranceCompanyServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/InsuranceInfoServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/InsuranceTypeServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/MaintainSuggestionServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/MenuServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/ModelConfigServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/MultiModelYoloService.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/PartServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/PostServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/ProjectBudgetInfoServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/ProjectServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/ProjectTaskGroupServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/ProjectTaskServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/RedisService.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/RoleMenuServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/RoleServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/TConstructionServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/TurbineServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/UserPostServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/UserRoleServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/UserServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/VideoFileInfoServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/WeatherTypeServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/WorkShitServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/WorkbenchServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/job/JobAntiThunderWorkService.java create mode 100644 core/src/main/java/com/dite/znpt/service/job/JobInWorkPartsService.java create mode 100644 core/src/main/java/com/dite/znpt/service/job/JobInWorkService.java create mode 100644 core/src/main/java/com/dite/znpt/service/job/JobOutWorkService.java create mode 100644 core/src/main/java/com/dite/znpt/service/job/JobService.java create mode 100644 core/src/main/java/com/dite/znpt/service/job/JobSummaryWorkService.java create mode 100644 core/src/main/java/com/dite/znpt/service/job/impl/JobAntiThunderWorkServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/job/impl/JobInWorkPartsServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/job/impl/JobInWorkServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/job/impl/JobOutWorkServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/job/impl/JobServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/job/impl/JobSummaryWorkServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/typehandle/ArrayObjectTypeHandler.java create mode 100644 core/src/main/java/com/dite/znpt/typehandle/OutworkDefectHandler.java create mode 100644 core/src/main/java/com/dite/znpt/util/EXIFUtil.java create mode 100644 core/src/main/java/com/dite/znpt/util/ModelUtil.java create mode 100644 core/src/main/java/com/dite/znpt/util/PageUtil.java create mode 100644 core/src/main/java/com/dite/znpt/util/PasswordUtil.java create mode 100644 core/src/main/java/com/dite/znpt/util/SqlUtil.java create mode 100644 core/src/main/java/com/dite/znpt/util/ValidationGroup.java create mode 100644 core/src/main/resources/mapper/AudioFileInfoMapper.xml create mode 100644 core/src/main/resources/mapper/CertificationMapper.xml create mode 100644 core/src/main/resources/mapper/ContractMapper.xml create mode 100644 core/src/main/resources/mapper/ContractSettlementMapper.xml create mode 100644 core/src/main/resources/mapper/DefectMapper.xml create mode 100644 core/src/main/resources/mapper/DeptMapper.xml create mode 100644 core/src/main/resources/mapper/DictMapper.xml create mode 100644 core/src/main/resources/mapper/EquipmentMapper.xml create mode 100644 core/src/main/resources/mapper/EquipmentUseRecordMapper.xml create mode 100644 core/src/main/resources/mapper/ImageCollectMapper.xml create mode 100644 core/src/main/resources/mapper/ImageMapper.xml create mode 100644 core/src/main/resources/mapper/InspectionReportMapper.xml create mode 100644 core/src/main/resources/mapper/JobInfoMapper.xml create mode 100644 core/src/main/resources/mapper/MaintainSuggestionMapper.xml create mode 100644 core/src/main/resources/mapper/MenuMapper.xml create mode 100644 core/src/main/resources/mapper/ModelConfigMapper.xml create mode 100644 core/src/main/resources/mapper/PartMapper.xml create mode 100644 core/src/main/resources/mapper/PostMapper.xml create mode 100644 core/src/main/resources/mapper/ProjectBudgetInfoMapper.xml create mode 100644 core/src/main/resources/mapper/ProjectMapper.xml create mode 100644 core/src/main/resources/mapper/ProjectTaskGroupMapper.xml create mode 100644 core/src/main/resources/mapper/ProjectTaskMapper.xml create mode 100644 core/src/main/resources/mapper/RoleMapper.xml create mode 100644 core/src/main/resources/mapper/RoleMenuMapper.xml create mode 100644 core/src/main/resources/mapper/TConstructionMapper.xml create mode 100644 core/src/main/resources/mapper/TurbineMapper.xml create mode 100644 core/src/main/resources/mapper/UserMapper.xml create mode 100644 core/src/main/resources/mapper/UserPostMapper.xml create mode 100644 core/src/main/resources/mapper/UserRoleMapper.xml create mode 100644 core/src/main/resources/mapper/VideoFileInfoMapper.xml create mode 100644 core/src/main/resources/mapper/WeatherTypeMapper.xml create mode 100644 core/src/main/resources/mapper/WorkShiftMapper.xml create mode 100644 flowable/.mvn/wrapper/maven-wrapper.properties create mode 100644 flowable/pom.xml create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/common/constant/ProcessConstants.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/common/enums/FlowComment.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/common/expand/el/BaseEl.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/common/expand/el/FlowEl.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/config/FlowableConfig.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/config/MyDefaultProcessDiagramCanvas.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/controller/FlowDefinitionController.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/controller/FlowInstanceController.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/controller/FlowTaskController.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/controller/SysExpressionController.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/controller/SysFormController.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/controller/SysListenerController.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/domain/dto/FlowCommentDto.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/domain/dto/FlowFromFieldDTO.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/domain/dto/FlowNextDto.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/domain/dto/FlowSaveXmlVo.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/domain/dto/FlowTaskDto.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/domain/dto/FlowViewerDto.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/domain/entity/SysDeployForm.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/domain/entity/SysExpression.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/domain/entity/SysForm.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/domain/entity/SysListener.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/domain/vo/FlowQueryVo.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/domain/vo/FlowTaskVo.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/domain/vo/ReturnTaskNodeVo.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/factory/FlowServiceFactory.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/flow/CustomProcessDiagramCanvas.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/flow/CustomProcessDiagramGenerator.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/flow/FindNextNodeUtil.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/flow/FlowableUtils.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/listener/FlowExecutionListener.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/listener/FlowTaskListener.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/mapper/SysDeployFormMapper.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/mapper/SysExpressionMapper.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/mapper/SysFormMapper.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/mapper/SysListenerMapper.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/service/IFlowDefinitionService.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/service/IFlowInstanceService.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/service/IFlowTaskService.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/service/ISysDeployFormService.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/service/ISysExpressionService.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/service/ISysFormService.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/service/ISysListenerService.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/service/impl/FlowDefinitionServiceImpl.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/service/impl/FlowInstanceServiceImpl.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/service/impl/FlowTaskServiceImpl.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/service/impl/SysDeployFormServiceImpl.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/service/impl/SysExpressionServiceImpl.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/service/impl/SysFormServiceImpl.java create mode 100644 flowable/src/main/java/com/dite/znpt/flowable/service/impl/SysListenerServiceImpl.java create mode 100644 flowable/src/main/resources/mapper/FlowDeployMapper.xml create mode 100644 flowable/src/main/resources/mapper/SysDeployFormMapper.xml create mode 100644 flowable/src/main/resources/mapper/SysExpressionMapper.xml create mode 100644 flowable/src/main/resources/mapper/SysFormMapper.xml create mode 100644 flowable/src/main/resources/mapper/SysListenerMapper.xml create mode 100644 pom.xml create mode 100644 web/pom.xml create mode 100644 web/src/main/java/com/dite/znpt/web/DiteApplication.java create mode 100644 web/src/main/java/com/dite/znpt/web/build/DeployController.java create mode 100644 web/src/main/java/com/dite/znpt/web/build/GiteeSignatureVerifier.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/AttachInfoController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/AttendanceRecordController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/AudioController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/AuthController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/CertificationController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/CheckSchemeController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/CommonController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/ContractController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/ContractSettlementController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/DefectController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/DeptController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/DictController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/EquipmentController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/EquipmentUseRecordController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/ImageController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/InspectionReportController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/InsuranceCompanyController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/InsuranceInfoController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/InsuranceTypeController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/JobAntiThunderWorkController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/JobController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/JobInWorkController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/JobOutWorkController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/JobSummaryWorkController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/MaintainSuggestionController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/MenuController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/ModelConfigController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/PartController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/PostController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/ProjectBudgetInfoController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/ProjectController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/ProjectTaskController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/ProjectTaskGroupController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/RoleController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/TConstructionController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/TurbineController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/UserController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/VideoFileInfoController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/WeatherTypeController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/WorkShiftController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/WorkbenchController.java create mode 100644 web/src/main/resources/application-dev.yml create mode 100644 web/src/main/resources/application.yml create mode 100644 web/src/main/resources/logback.xml diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..3b41682 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +/mvnw text eol=lf +*.cmd text eol=crlf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5c11c82 --- /dev/null +++ b/.gitignore @@ -0,0 +1,38 @@ +HELP.md +core/target/ +data-bus/target/ +sip/target/ +web/target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ +target/ +logs/ \ No newline at end of file diff --git a/core/pom.xml b/core/pom.xml new file mode 100644 index 0000000..94afd03 --- /dev/null +++ b/core/pom.xml @@ -0,0 +1,180 @@ + + + 4.0.0 + + com.dite.znpt + parent + 1.0.0-SNAPSHOT + + core + 1.0.0-SNAPSHOT + + + + org.springframework.boot + spring-boot-starter-web + + + + cn.dev33 + sa-token-spring-boot-starter + 1.43.0 + + + + cn.dev33 + sa-token-redis-template + 1.43.0 + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + com.mysql + mysql-connector-j + runtime + + + org.springframework.boot + spring-boot-configuration-processor + true + + + org.projectlombok + lombok + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.security + spring-security-crypto + + + org.springframework.boot + spring-boot-starter-aop + + + + + com.baomidou + mybatis-plus-boot-starter + 3.5.11 + + + io.springfox + springfox-boot-starter + 3.0.0 + + + com.github.xiaoymin + knife4j-spring-boot-starter + 3.0.3 + + + + + com.alibaba + druid-spring-boot-starter + 1.2.22 + + + + org.springframework + spring-jdbc + + + + org.springframework + spring-tx + + + cn.hutool + hutool-all + + + com.github.pagehelper + pagehelper-spring-boot-starter + 1.4.7 + + + com.pig4cloud.excel + excel-spring-boot-starter + 1.2.7 + + + + + org.springframework.boot + spring-boot-starter-data-redis + + + + org.redisson + redisson + 3.22.0 + + + + com.alibaba + fastjson + 1.2.83 + + + + com.drewnoakes + metadata-extractor + 2.18.0 + + + + org.mapstruct + mapstruct + 1.4.1.Final + + + org.mapstruct + mapstruct-processor + 1.4.1.Final + + + javax.sip + jain-sip-ri + 1.3.0-91 + compile + + + + com.microsoft.onnxruntime + onnxruntime + 1.16.1 + + + + org.openpnp + opencv + 4.7.0-0 + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + 17 + 17 + + + + + + diff --git a/core/src/main/java/com/dite/znpt/annotations/MatchType.java b/core/src/main/java/com/dite/znpt/annotations/MatchType.java new file mode 100644 index 0000000..2c7fbe3 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/annotations/MatchType.java @@ -0,0 +1,73 @@ +package com.dite.znpt.annotations; + +/** + * @author wujinsong + * @date 2021/9/15 3:57 下午 + * @description: 查询条件 + */ +public enum MatchType { + /** + * filed = value + */ + equal, + /** + * filed > value + */ + gt, + /** + * field >= value + */ + ge, + /** + * field < value + */ + lt, + /** + * field <= value + */ + le, + /** + * field != value + */ + notEqual, + /** + * field like value + */ + like, + /** + * field not like value + */ + notLike, + /** + * field > value + */ + greaterThan, + /** + * field >= value + */ + greaterThanOrEqualTo, + /** + * field < value + */ + lessThan, + /** + * field <= value + */ + lessThanOrEqualTo, + /** + * in + */ + in, + /** + * in for Number + */ + inn, + /** + * field is null + */ + isNull, + /** + * field is not null + */ + isNotNull +} diff --git a/core/src/main/java/com/dite/znpt/annotations/QueryCondition.java b/core/src/main/java/com/dite/znpt/annotations/QueryCondition.java new file mode 100644 index 0000000..a9b88e8 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/annotations/QueryCondition.java @@ -0,0 +1,27 @@ +package com.dite.znpt.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @author wujinsong + * @date 2021/9/15 4:31 下午 + * @description: + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface QueryCondition { + // 数据库中字段名,默认为空字符串,则Query类中的字段要与数据库中字段一致 + String column() default ""; + + // equal, like, gt, lt... + MatchType func() default MatchType.equal; + + // object是否可以为null + boolean nullable() default false; + + // 字符串是否可为空 + boolean emptyable() default false; +} diff --git a/core/src/main/java/com/dite/znpt/aspect/HttpLogAspect.java b/core/src/main/java/com/dite/znpt/aspect/HttpLogAspect.java new file mode 100644 index 0000000..1035ce5 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/aspect/HttpLogAspect.java @@ -0,0 +1,82 @@ +package com.dite.znpt.aspect; + +import cn.hutool.json.JSONUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; + +/** + * @date 2022/1/4 7:39 上午 + * @description: + */ +@Slf4j +@Aspect +@Component +public class HttpLogAspect { + + /** + * 换行符 + */ + private static final String LINE_SEPARATOR = System.lineSeparator(); + + /** + * 自定义切点 + */ + @Pointcut("execution(* com.dite.znpt.web..*(..)) ") + public void log() { + } + + /** + * 在切点之前织入 + * + * @param joinPoint + */ + @Before("log()") + public void doBefore(JoinPoint joinPoint) throws Exception { + + // 开始打印请求日志 + ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + HttpServletRequest request = attributes.getRequest(); + // 打印请求相关参数 + log.info("\n=============== Start ==================="); + // 打印请求 url + log.info("请求路径 : {}", request.getRequestURL().toString()); + // 打印 Http method + log.info("请求方法 : {}", request.getMethod()); + // 打印调用 controller 的全路径以及执行方法 + log.info("调用方法 : {}.{}", joinPoint.getSignature().getDeclaringTypeName(), joinPoint.getSignature().getName()); + //获取传入目标方法的参数 + log.info("请求参数 : {}", JSONUtil.toJsonStr(joinPoint.getArgs())); + + } + + /** + * 环绕 + * + * @param proceedingJoinPoint + * @return + * @throws Throwable + */ + @Around("log()") + public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { + long startTime = System.currentTimeMillis(); + Object result = proceedingJoinPoint.proceed(); + // 打印出参 + log.info("响应结果 : {}", JSONUtil.toJsonStr(result)); + // 执行耗时 + log.info("请求耗时 : {} ms", System.currentTimeMillis() - startTime); + + log.info("\n=========================================== End ===========================================" + LINE_SEPARATOR); + return result; + } + +} diff --git a/core/src/main/java/com/dite/znpt/config/BeanPostProcessorConfig.java b/core/src/main/java/com/dite/znpt/config/BeanPostProcessorConfig.java new file mode 100644 index 0000000..c759a00 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/config/BeanPostProcessorConfig.java @@ -0,0 +1,49 @@ +package com.dite.znpt.config; + +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.util.ReflectionUtils; +import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping; +import springfox.documentation.spring.web.plugins.WebFluxRequestHandlerProvider; +import springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider; + +import java.lang.reflect.Field; +import java.util.List; +import java.util.stream.Collectors; + +@Configuration +public class BeanPostProcessorConfig { + + @Bean + public BeanPostProcessor beanPostProcessor() { + return new BeanPostProcessor() { + @Override + public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { + if (bean instanceof WebMvcRequestHandlerProvider || bean instanceof WebFluxRequestHandlerProvider) { + handlerMappings(getHandlerMappings(bean)); + } + return bean; + } + + private void handlerMappings(List mappings) { + List copy = mappings.stream() + .filter(mapping -> mapping.getPatternParser() == null) + .collect(Collectors.toList()); + mappings.clear(); + mappings.addAll(copy); + } + + private List getHandlerMappings(Object bean) { + try { + Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings"); + field.setAccessible(true); + return (List) field.get(bean); + } catch (IllegalArgumentException | IllegalAccessException e) { + throw new IllegalStateException(e); + } + } + }; + } +} diff --git a/core/src/main/java/com/dite/znpt/config/CustomLocalDateTimeDeserializer.java b/core/src/main/java/com/dite/znpt/config/CustomLocalDateTimeDeserializer.java new file mode 100644 index 0000000..b616b3a --- /dev/null +++ b/core/src/main/java/com/dite/znpt/config/CustomLocalDateTimeDeserializer.java @@ -0,0 +1,20 @@ +package com.dite.znpt.config; + +import cn.hutool.core.date.LocalDateTimeUtil; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; + +import java.io.IOException; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +public class CustomLocalDateTimeDeserializer extends JsonDeserializer { + private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + @Override + public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + String date = p.getText(); + return LocalDateTimeUtil.parse(date, FORMATTER); + } +} diff --git a/core/src/main/java/com/dite/znpt/config/ExtUtilConfig.java b/core/src/main/java/com/dite/znpt/config/ExtUtilConfig.java new file mode 100644 index 0000000..9d09043 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/config/ExtUtilConfig.java @@ -0,0 +1,80 @@ +package com.dite.znpt.config; + +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.RuntimeUtil; +import com.dite.znpt.constant.Message; +import com.dite.znpt.exception.ServiceException; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "util") +public class ExtUtilConfig { + + @ApiModelProperty("是否开启预处理job") + private Boolean enableImagePreTreatment; + @ApiModelProperty("图片预处理工具路径") + private String imagePreTreatmentPath; + @ApiModelProperty("报告生成工具路径") + private String reportGeneratorPath; + @ApiModelProperty("报告生成工具模板路径") + private String reportGeneratorTemplatePath; + + /** + * 参数 缩写 默认值 说明 + * --input-dir 无 必需 输入图片目录路径 + * --input-file 无 必需 输入的单图,默认输出到输入值同一目录 + * --output-dir 无 输入目录+"+调整" 输出目录路径 + * --gamma 无 180 阴影检测阈值 (0-255) + * --threshold 无 253 高光检测阈值 (0-255) + * --config-file 无 naming_config.json 命名规则配置文件路径 + * --no-auto-bright 无 禁用 RAW文件禁用自动亮度调整 + * --quiet 无 禁用 减少控制台输出 + * --encoder 无 vitl 深度模型编码器类型 (vits/vitb/vitl/vitg) + * --input-size 无 518 模型输入图像尺寸 + * @param inputFile + * @param outputDir + * @return + */ + public String imagePreTreatment(String inputFile, String outputDir) { + boolean directory = FileUtil.isDirectory(inputFile); + try { + Process exec = RuntimeUtil.exec(imagePreTreatmentPath, + directory ? "--input-dir" : "--input-file", inputFile, + "--output-dir", outputDir + ); + exec.waitFor(); + return RuntimeUtil.getResult(exec); + } catch (InterruptedException e) { + throw new ServiceException(Message.UTIL_EXEC_ERROR + e.getMessage()); + } + } + + /** + * 功能描述:报告生成器 + * --turbine_id 是 指定要生成报告的机组ID + * --output_dir 是 指定生成报告的输出目录 + * --template_dir 是 指定Word模板文件所在的目录 + * @param turbineId 机组id + * @param outputDir 输出dir + * @return {@link String } + * @author cuizhibin + * @date 2025/07/17 14:08 + **/ + public String reportGenerator(String turbineId, String outputDir) { + try { + Process exec = RuntimeUtil.exec(reportGeneratorPath, + "--turbine_id", turbineId, + "--output_dir", outputDir, + "--template_dir", reportGeneratorTemplatePath + ); + exec.waitFor(); + return RuntimeUtil.getResult(exec); + } catch (InterruptedException e) { + throw new ServiceException(Message.UTIL_EXEC_ERROR + e.getMessage()); + } + } +} diff --git a/core/src/main/java/com/dite/znpt/config/FastJson2JsonRedisSerializer.java b/core/src/main/java/com/dite/znpt/config/FastJson2JsonRedisSerializer.java new file mode 100644 index 0000000..9a711e0 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/config/FastJson2JsonRedisSerializer.java @@ -0,0 +1,52 @@ +package com.dite.znpt.config; + + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.parser.ParserConfig; +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.type.TypeFactory; +import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.data.redis.serializer.SerializationException; +import org.springframework.util.Assert; + +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; + +public class FastJson2JsonRedisSerializer implements RedisSerializer { + private ObjectMapper objectMapper = new ObjectMapper(); + public static final Charset DEFAULT_CHARSET; + private Class clazz; + + public FastJson2JsonRedisSerializer(Class clazz) { + this.clazz = clazz; + } + + public byte[] serialize(T t) throws SerializationException { + return t == null ? new byte[0] : JSON.toJSONString(t, new SerializerFeature[]{SerializerFeature.WriteClassName}).getBytes(DEFAULT_CHARSET); + } + + public T deserialize(byte[] bytes) throws SerializationException { + if (bytes != null && bytes.length > 0) { + String str = new String(bytes, DEFAULT_CHARSET); + return JSON.parseObject(str, this.clazz); + } else { + return null; + } + } + + public void setObjectMapper(ObjectMapper objectMapper) { + Assert.notNull(objectMapper, "'objectMapper' must not be null"); + this.objectMapper = objectMapper; + } + + protected JavaType getJavaType(Class clazz) { + return TypeFactory.defaultInstance().constructType(clazz); + } + + static { + DEFAULT_CHARSET = StandardCharsets.UTF_8; + ParserConfig.getGlobalInstance().setAutoTypeSupport(true); + } +} \ No newline at end of file diff --git a/core/src/main/java/com/dite/znpt/config/GlobalCorsConfig.java b/core/src/main/java/com/dite/znpt/config/GlobalCorsConfig.java new file mode 100644 index 0000000..364e2c3 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/config/GlobalCorsConfig.java @@ -0,0 +1,32 @@ +package com.dite.znpt.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + + +/** + * @date 2023/4/5 11:30 + * @description: 全局过滤器 + */ +@Configuration +public class GlobalCorsConfig { + + @Bean + public CorsFilter corsFilter() { + CorsConfiguration config = new CorsConfiguration(); + //允许所有域名进行跨域调用 + config.addAllowedOriginPattern("*");//替换这个 + //允许跨越发送cookie + config.setAllowCredentials(true); + //放行全部原始头信息 + config.addAllowedHeader("*"); + //允许所有请求方法跨域调用 + config.addAllowedMethod("*"); + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", config); + return new CorsFilter(source); + } +} diff --git a/core/src/main/java/com/dite/znpt/config/JacksonConfig.java b/core/src/main/java/com/dite/znpt/config/JacksonConfig.java new file mode 100644 index 0000000..8c7a729 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/config/JacksonConfig.java @@ -0,0 +1,34 @@ +package com.dite.znpt.config; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; + +import java.time.LocalDateTime; + +/** + * @date 2022/3/20 10:34 上午 + * @description: + */ +@Configuration +public class JacksonConfig { + + @Bean + @Primary + @ConditionalOnMissingBean(ObjectMapper.class) + public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) { + ObjectMapper objectMapper = builder.createXmlMapper(false).build(); + // 全局配置序列化返回 JSON 处理 + SimpleModule simpleModule = new SimpleModule(); + //JSON Long ==> String + simpleModule.addSerializer(Long.class, ToStringSerializer.instance); + simpleModule.addDeserializer(LocalDateTime.class, new CustomLocalDateTimeDeserializer()); + objectMapper.registerModule(simpleModule); + return objectMapper; + } +} diff --git a/core/src/main/java/com/dite/znpt/config/RedisConfig.java b/core/src/main/java/com/dite/znpt/config/RedisConfig.java new file mode 100644 index 0000000..6b0c737 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/config/RedisConfig.java @@ -0,0 +1,63 @@ +package com.dite.znpt.config; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.cache.annotation.CachingConfigurerSupport; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.data.redis.cache.RedisCacheConfiguration; +import org.springframework.data.redis.cache.RedisCacheManager; +import org.springframework.data.redis.cache.RedisCacheWriter; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.script.DefaultRedisScript; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.RedisSerializationContext; +import org.springframework.data.redis.serializer.StringRedisSerializer; +import org.springframework.stereotype.Component; + +import java.util.Objects; + +@Configuration +@EnableCaching +public class RedisConfig extends CachingConfigurerSupport { + + public RedisConfig() { + } + + @Bean + @Primary + public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) { + RedisTemplate template = new RedisTemplate(); + template.setConnectionFactory(connectionFactory); + FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class); + ObjectMapper mapper = new ObjectMapper(); + mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY); + serializer.setObjectMapper(mapper); + template.setKeySerializer(new StringRedisSerializer()); + template.setValueSerializer(serializer); + template.setHashKeySerializer(new StringRedisSerializer()); + template.setHashValueSerializer(serializer); + template.afterPropertiesSet(); + return template; + } + + @Bean + public DefaultRedisScript limitScript() { + DefaultRedisScript redisScript = new DefaultRedisScript(); + redisScript.setScriptText(this.limitScriptText()); + redisScript.setResultType(Long.class); + return redisScript; + } + + private String limitScriptText() { + return "local key = KEYS[1]\nlocal count = tonumber(ARGV[1])\nlocal time = tonumber(ARGV[2])\nlocal current = redis.call('get', key);\nif current and tonumber(current) > count then\n return tonumber(current);\nend\ncurrent = redis.call('incr', key)\nif tonumber(current) == 1 then\n redis.call('expire', key, time)\nend\nreturn tonumber(current);"; + } +} diff --git a/core/src/main/java/com/dite/znpt/config/Schedule.java b/core/src/main/java/com/dite/znpt/config/Schedule.java new file mode 100644 index 0000000..8f6a837 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/config/Schedule.java @@ -0,0 +1,70 @@ +package com.dite.znpt.config; + +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.BooleanUtil; +import com.dite.znpt.domain.entity.ImageEntity; +import com.dite.znpt.domain.vo.PartResp; +import com.dite.znpt.enums.FilePathEnum; +import com.dite.znpt.service.ImageService; +import com.dite.znpt.service.PartService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Slf4j +@Component +@RequiredArgsConstructor +public class Schedule { + + private final ImageService imageService; + private final PartService partService; + private final ExtUtilConfig extUtilConfig; + + /** + * 功能描述:图像预处理,持续运行 + * + * @author cuizhibin + * @date 2025/07/24 14:23 + **/ + @Scheduled(fixedRate = 10_000) + public void imagePreTreatment() { + if (BooleanUtil.isFalse(extUtilConfig.getEnableImagePreTreatment())) { + return; + } + List list = imageService.lambdaQuery().eq(ImageEntity::getPreTreatment, "0") + .isNotNull(ImageEntity::getPartId) + .isNotNull(ImageEntity::getProjectId).list(); + List partIds = list.stream().map(ImageEntity::getPartId).toList(); + Map partRespMap = partService.listInfos(partIds).stream().collect(Collectors.toMap(PartResp::getPartId, Function.identity())); +// 预处理 + List successList = new ArrayList<>(); + for (ImageEntity image : list) { + PartResp partResp = partRespMap.get(image.getPartId()); + FilePathEnum pathEnum = image.getImagePath().contains("temp") ? FilePathEnum.IMAGE_TEMP : FilePathEnum.IMAGE; + String inputFile = pathEnum.getFileAbsolutePath(image.getImagePath()); + String outputDir = FilePathEnum.IMAGE.getFileAbsolutePathPrefix() + .concat("已调整") + .concat(FileUtil.FILE_SEPARATOR).concat(partResp.getProjectName()) + .concat(FileUtil.FILE_SEPARATOR).concat(partResp.getTurbineName()) + .concat(FileUtil.FILE_SEPARATOR).concat(partResp.getPartName()); + extUtilConfig.imagePreTreatment(inputFile, outputDir); + String outputFile = outputDir.concat(FileUtil.FILE_SEPARATOR).concat(FileUtil.getName(inputFile)); + boolean preSuccess = FileUtil.exist(outputFile); + if(!preSuccess) { + log.warn("图片预处理失败,图片id:{},路径:{}", image.getImageId(), inputFile); + continue; + } + image.setPreTreatment(true); + image.setPreImagePath(FilePathEnum.IMAGE.getFileDownPath(outputFile)); + successList.add(image); + } + imageService.updateBatchById(successList); + } +} diff --git a/core/src/main/java/com/dite/znpt/config/SwaggerConfig.java b/core/src/main/java/com/dite/znpt/config/SwaggerConfig.java new file mode 100644 index 0000000..5f30e05 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/config/SwaggerConfig.java @@ -0,0 +1,53 @@ +package com.dite.znpt.config; + + +import io.swagger.annotations.ApiOperation; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.builders.RequestParameterBuilder; +import springfox.documentation.oas.annotations.EnableOpenApi; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.service.ParameterType; +import springfox.documentation.service.RequestParameter; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; + +import java.util.ArrayList; +import java.util.List; + +@Configuration +@EnableOpenApi +public class SwaggerConfig { + + @Bean + public Docket docket() { + RequestParameterBuilder parameterBuilder = new RequestParameterBuilder(); + List parameters = new ArrayList<>(); + parameterBuilder.name("Authorization") + .description("token值") + .in(ParameterType.HEADER) +// todo 暂时设置为false,后续上登录后需要开启 + .required(false) + .build(); + parameters.add(parameterBuilder.build()); + return new Docket(DocumentationType.OAS_30) + .apiInfo(apiInfo()) + .enable(true)//开启Swagger文档 + .select() + .apis(RequestHandlerSelectors.basePackage("com.dite")) + .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) + .paths(PathSelectors.any()) + .build() + .globalRequestParameters(parameters); + } + + public ApiInfo apiInfo() { + return new ApiInfoBuilder() + .title("智能平台") + .version("1.0") + .build(); + } +} \ No newline at end of file diff --git a/core/src/main/java/com/dite/znpt/config/WebMvcConfig.java b/core/src/main/java/com/dite/znpt/config/WebMvcConfig.java new file mode 100644 index 0000000..e2b42fa --- /dev/null +++ b/core/src/main/java/com/dite/znpt/config/WebMvcConfig.java @@ -0,0 +1,52 @@ +package com.dite.znpt.config; + +import cn.hutool.core.collection.ListUtil; +import com.dite.znpt.enums.FilePathEnum; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/23/周五 11:19 + * @description + */ + +@Configuration +public class WebMvcConfig implements WebMvcConfigurer { + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/"); + registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); + registry.addResourceHandler("/swagger-ui/**").addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/"); + for (FilePathEnum pathEnum : FilePathEnum.values()) { + registry.addResourceHandler(pathEnum.getUrlPath() + "**").addResourceLocations("file:" + pathEnum.getFileAbsolutePathPrefix()); + } + } + +// @Override +// public void addInterceptors(InterceptorRegistry registry) { +// // 注册 Sa-Token 拦截器,定义详细认证规则 +// registry.addInterceptor(new SaInterceptor(handler -> { +// SaRouter +// .match("/**") // 拦截的 path 列表,可以写多个 */ +// .notMatch(excludePaths()) +// .check(r -> StpUtil.checkLogin()); +// })).addPathPatterns("/**"); +// } + + // 动态获取哪些 path 可以忽略鉴权 + public List excludePaths() { + // 此处仅为示例,实际项目你可以写任意代码来查询这些path + ArrayList list = ListUtil.toList("/auth/login", "/favicon.ico", "/favicon.ico", "/doc.html", "/swagger-ui/**", "/swagger-resources", "/webjars/**", "/v3/api-docs/**", "/**/v3/api-docs"); + for (FilePathEnum pathEnum : FilePathEnum.values()) { + list.add(pathEnum.getUrlPath() + "**"); + } + return list; + } + +} diff --git a/core/src/main/java/com/dite/znpt/config/YoloModelRegistry.java b/core/src/main/java/com/dite/znpt/config/YoloModelRegistry.java new file mode 100644 index 0000000..a93583e --- /dev/null +++ b/core/src/main/java/com/dite/znpt/config/YoloModelRegistry.java @@ -0,0 +1,112 @@ +package com.dite.znpt.config; + +import ai.onnxruntime.OrtEnvironment; +import ai.onnxruntime.OrtException; +import ai.onnxruntime.OrtSession; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.dite.znpt.domain.entity.ModelConfigEntity; +import com.dite.znpt.enums.FilePathEnum; +import com.dite.znpt.mapper.ModelConfigMapper; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.concurrent.ConcurrentHashMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +@Slf4j +@Component +@RequiredArgsConstructor +public class YoloModelRegistry { + + private final ModelConfigMapper modelConfigMapper; + + private final Map sessionMap = new ConcurrentHashMap<>(); + private final Map metaMap = new ConcurrentHashMap<>(); + private final Map modelParamMap = new ConcurrentHashMap<>(); + @Getter + private final OrtEnvironment environment = OrtEnvironment.getEnvironment(); + + static { + // 加载opencv动态库 + nu.pattern.OpenCV.loadLocally(); + } + + @PostConstruct + public void loadModelsOnStartup() throws OrtException { + List configs = modelConfigMapper.selectList(Wrappers.emptyWrapper()); + for (ModelConfigEntity config : configs) { + loadModel(config); + } + } + + public void loadModel(ModelConfigEntity config) throws OrtException { + OrtSession.SessionOptions opts = new OrtSession.SessionOptions(); + // 使用gpu,需要本机安装过cuda,并修改pom.xml,不安装也能运行本程序 + // sessionOptions.addCUDA(0); + OrtSession session = environment.createSession(FilePathEnum.ATTACH.getFileAbsolutePath(config.getModelPath()), opts); + String labelStr = session.getMetadata().getCustomMetadata().get("names"); + + // label解析 + List labels = new ArrayList<>(); + List colors = new ArrayList<>(); + Pattern pattern = Pattern.compile("'([^']*)'"); + Matcher matcher = pattern.matcher(labelStr); + Random random = new Random(); + while (matcher.find()) { + labels.add(matcher.group(1)); + colors.add(new double[]{random.nextDouble() * 256, random.nextDouble() * 256, random.nextDouble() * 256}); + } + + sessionMap.put(config.getModelId(), session); + metaMap.put(config.getModelId(), new ModelMetadata(labels.toArray(new String[0]), colors, config)); + modelParamMap.put(config.getModelId(), config); + } + + public OrtSession getSession(String modelId) { + return sessionMap.get(modelId); + } + + public ModelMetadata getMetadata(String modelId) { + return metaMap.get(modelId); + } + + public ModelConfigEntity getModelConfig(String modelId) { + return modelParamMap.get(modelId); + } + + public void unloadModel(String modelId) { + OrtSession session = sessionMap.remove(modelId); + if (session != null) { + try { + session.close(); // 释放 ONNX runtime 资源 + } catch (OrtException e) { + log.warn("模型 {} 卸载时发生错误: {}", modelId, e.getMessage()); + } + } + metaMap.remove(modelId); + } + + public void reloadModel(ModelConfigEntity modelConfig) throws OrtException { + unloadModel(modelConfig.getModelId()); + loadModel(modelConfig); + } + + @Data + @AllArgsConstructor + public static class ModelMetadata { + private String[] labels; + private List colors; + private ModelConfigEntity config; + } +} + diff --git a/core/src/main/java/com/dite/znpt/constant/Constants.java b/core/src/main/java/com/dite/znpt/constant/Constants.java new file mode 100644 index 0000000..8b5f824 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/constant/Constants.java @@ -0,0 +1,100 @@ +package com.dite.znpt.constant; + +/** + * @description: 常量 + */ +public class Constants { + + /** + * 系统异常 + */ + public static final String SYSTEM_EXCEPTION = "000001"; + + /** + * 服务异常 + */ + public static final String SERVICE_EXCEPTION = "000002"; + + /** + * 参数异常 + */ + public static final String PARAMETER_EXCEPTION = "000003"; + + public static final String SERVICE_EXCEPTION_MESSAGE = "服务开小差,请稍后再试!"; + + /** + * 账号密码错误 + */ + public static final String ACCOUNT_ERROR_EXCEPTION = "500000"; + + public static final String ACCOUNT_ERROR_EXCEPTION_MESSAGE = "用户名或者密码错误!"; + + /** + * 账号密码错误 + */ + public static final String PASSWORD_ERROR_EXCEPTION = "500001"; + + public static final String PASSWORD_ERROR_EXCEPTION_MESSAGE = "用户名或者密码错误!"; + + /** + * 账号密码错误 + */ + public static final String PASSWORD_EXCEPTION = "500002"; + + public static final String PASSWORD_EXCEPTION_MESSAGE = "用户名或者密码错误!"; + + /** + * 账号停用 + */ + public static final String USER_DISABLE_EXCEPTION = "500100"; + + public static final String USER_DISABLE_EXCEPTION_MESSAGE = "用户已停用!"; + + /** + * 默认密码 + */ + public static final String DEFAULT_PASSWORD_EXCEPTION = "500200"; + + public static final String DEFAULT_PASSWORD_EXCEPTION_MESSAGE = "初始密码,请修改密码后登陆!"; + + /** + * 0:代表存在 + */ + public static final String DEL_FLAG_0 = "0"; + + /** + * 1:代表删除 + */ + public static final String DEL_FLAG_1 = "1"; + + /** + * 0:代表启用 + */ + public static final Integer STATUS_0 = 0; + + /** + * 1:代表停用 + */ + public static final Integer STATUS_1 = 1; + + /** + * 0:代表显示 + */ + public static final String VISIBLE_0 = "0"; + + /** + * 1:代表隐藏 + */ + public static final String VISIBLE_1 = "1"; + + + /** + * 0:代表发布 + */ + public static final String STATUS_PUBLISH = "0"; + + /** + * 1:代表未发布 + */ + public static final String STATUS_UNPUBLISH = "1"; +} diff --git a/core/src/main/java/com/dite/znpt/constant/Message.java b/core/src/main/java/com/dite/znpt/constant/Message.java new file mode 100644 index 0000000..842c55e --- /dev/null +++ b/core/src/main/java/com/dite/znpt/constant/Message.java @@ -0,0 +1,82 @@ +package com.dite.znpt.constant; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/4/26 23:19 + * @Description: + */ +public class Message implements Serializable { + @Serial + private static final long serialVersionUID = 4010434089386946123L; + + public static final String IMAGE_IS_EMPTY = "图像信息为空"; + public static final String ATTACH_INFO_IS_NOT_EXIST = "附件信息id不存在"; + public static final String ATTACH_FILE_IS_NOT_EXIST = "不存在{}的附件文件"; + public static final String IMAGE_PATH_IS_NOT_EXIST = "图像地址不存在"; + public static final String IMAGE_ID_IS_NOT_EXIST = "图像id不存在"; + public static final String IMAGE_SOURCE_IS_NOT_EXIST = "图像类型不存在"; + public static final String DEFECT_ID_IS_NOT_EXIST = "缺陷id不存在"; + public static final String PROJECT_ID_IS_NOT_EXIST = "项目id不存在"; + public static final String PROJECT_STATUS_IS_NOT_COMPLETED = "项目[{}]的状态不是已完工"; + public static final String TURBINE_ID_IS_NOT_EXIST = "机组id不存在"; + public static final String TURBINE_STATUS_IS_NOT_COMPLETED = "机组[{}]的状态不是已完工"; + public static final String PART_ID_IS_NOT_EXIST = "部件id不存在"; + public static final String USER_ID_NOT_EXIST = "用户id不存在"; + public static final String USER_ID_NOT_EXIST_OR_ILLEGAL = "用户id不存在或者不合法"; + public static final String ACCOUNT_EXIST = "用户账号已经存在,请重新输入"; + public static final String MOBILE_EXIST = "手机号码已经存在,请重新输入"; + public static final String EMAIL_EXIST = "邮箱已经存在,请重新输入"; + public static final String IDENTITY_CARD_EXIST = "身份证已经存在,请重新输入"; + public static final String OLD_PASSWORD_EQUAL_NEW_PASSWORD = "身份证已经存在,请重新输入"; + public static final String OLD_PASSWORD_IS_ERROR = "旧密码错误,请重新输入"; + public static final String DEPT_PARENT_NOT_EXIST = "父级部门不存在"; + public static final String DEPT_ID_NOT_EXIST = "部门id不存在"; + public static final String POST_ID_NOT_EXIST = "岗位id不存在"; + public static final String POST_ID_NOT_EXIST_OR_ILLEGAL = "岗位id不存在或者不合法"; + public static final String ROLE_ID_NOT_EXIST = "角色id不存在"; + public static final String ROLE_CODE_EXIST = "角色编码已经存在"; + public static final String ROLE_ID_NOT_EXIST_OR_ILLEGAL = "角色id不存在或者不合法"; + public static final String MENU_ID_NOT_EXIST = "菜单id不存在"; + public static final String MENU_ID_NOT_EXIST_OR_ILLEGAL = "菜单id不存在或者不合法"; + public static final String USER_CERTIFICATION_EXIST = "用户{}已存在{}证书"; + public static final String CERTIFICATION_TYPE_ILLEGAL = "证书类型不合法"; + public static final String CERTIFICATION_CODE_EXIST = "证书编码已存在"; + public static final String CERTIFICATION_ID_NOT_EXIST = "证书id不存在"; + public static final String INSURANCE_TYPE_NAME_IS_EXIST = "保险类型名称已存在"; + public static final String INSURANCE_TYPE_ID_IS_NOT_EXIST = "保险类型id不存在"; + public static final String INSURANCE_COMPANY_NAME_IS_EXIST = "保险公司名称已存在"; + public static final String INSURANCE_COMPANY_ID_IS_NOT_EXIST = "保险公司id不存在"; + public static final String INSURANCE_INFO_ID_IS_NOT_EXIST = "保险信息id不存在"; + public static final String INSURANCE_FILE_IS_NOT_EXIST = "保险文不存在"; + public static final String TASK_ID_GROUP_ID_ALL_EMPTY = "任务id和任务组id不可同时为空"; + public static final String TASK_STATUS_NOT_PENDING = "任务状态不是未开始"; + public static final String TASK_STATUS_NOT_IN_PROGRESS = "任务状态不是进行中"; + public static final String TASK_IN_CYCLE = "父级任务存在循环依赖:"; + public static final String TASK_GROUP_ID_NOT_EXIST = "任务组id不存在"; + public static final String WORK_TIME_START_CAN_NOT_BEFORE_WORK_TIME_END = "下班时间不能早于上班时间"; + public static final String REST_TIME_START_CAN_NOT_BEFORE_REST_TIME_END = "休息结束时间不能早于休息开始时间"; + public static final String REST_TIME_START_MUST_BETWEEN_WORK_TIME = "休息开始时间必须是在上班时间范围内"; + public static final String REST_TIME_END_MUST_BETWEEN_WORK_TIME = "休息结束时间必须是在上班时间范围内"; + public static final String EARLY_TIME_LIMIT_CAN_NOT_BEFORE_EARLY_TIME_OFFSET = "早退临界时间不能小于早退豁免时间"; + public static final String LATE_TIME_LIMIT_CAN_NOT_BEFORE_LATE_TIME_OFFSET = "迟到临界时间不能小于迟到豁免时间"; + public static final String WORK_SHIFT_NAME_EXIST = "班次名称已经存在"; + public static final String WORK_SHIFT_NOT_EXIST = "班次不存在"; + public static final String WORK_SHIFT_IS_NOT_UNPUBLISH = "班次的状态不是未发布"; + public static final String IMAGE_AUTO_MARK_ERROR = "自动标注出错:"; + public static final String SUGGESTION_ID_IS_NOT_EXIST = "维修建议id不存在"; + public static final String SUGGESTION_LEVEL_TYPE_FORBID_REPEAT = "存在缺陷级别为[{}]缺陷类型为[{}]的维修建议"; + public static final String CHECK_SCHEME_ID_IS_NOT_EXIST = "检查方案id不存在"; + public static final String INSPECTION_REPORT_ID_IS_NOT_EXIST = "检查报告id不存在"; + public static final String UTIL_EXEC_ERROR = "工具执行出错:"; + public static final String REPORT_GENERATOR_ERROR = "报告生成出错"; + public static final String EQUIPMENT_ID_NOT_EXIST = "设备id不存在"; + public static final String EQUIPMENT_SN_EXIST = "设备序列号已经存在"; + public static final String EQUIPMENT_STATUS_ERROR_FORBIDDEN_USE = "设备状态不合法,禁止使用"; + public static final String EQUIPMENT_USE_RECORD_ID_NOT_EXIST = "设备使用记录id不存在"; + public static final String EQUIPMENT_USE_RECORD_STATUS_ERROR = "设备使用记录状态不合法"; + public static final String EQUIPMENT_IS_USED = "设备已被使用"; + public static final String EQUIPMENT_IS_RETURN = "设备已归还"; +} diff --git a/core/src/main/java/com/dite/znpt/context/UserContext.java b/core/src/main/java/com/dite/znpt/context/UserContext.java new file mode 100644 index 0000000..e92b61c --- /dev/null +++ b/core/src/main/java/com/dite/znpt/context/UserContext.java @@ -0,0 +1,62 @@ +package com.dite.znpt.context; + +//import cn.dev33.satoken.stp.StpUtil; + +import cn.hutool.extra.spring.SpringUtil; +import com.dite.znpt.domain.vo.UserResp; +import com.dite.znpt.service.impl.RedisService; + +/** + * @author wujinsong + * @date 2021/11/20 9:43 上午 + * @description: 用户context + */ +public class UserContext { + private final RedisService redisService; + + public UserContext(RedisService redisService) { + this.redisService = SpringUtil.getBean(RedisService.class); + } + + /** + * @author wujinsong + * @date 2021/11/20 10:02 上午 + * @description: 获取当前登录用户信息 + * @Param [] + * @Return com.gaea.common.vo.common.UserInfo + */ + public static UserResp getUserInfo() { +// try { +// String token = StpUtil.getTokenValue(); +// if (!StringUtils.isEmpty(token)) { +// String s = redisTemplate.opsForValue().get(token); +// if (!StringUtils.isEmpty(s)) { +// return JSONObject.parseObject(s, UserInfo.class); +// } +// } +// } catch (Exception e) { +// UserInfo userInfo = new UserInfo(); +// userInfo.setUsername(Constants.SYSTEM_USER); +// userInfo.setName(Constants.SYSTEM_USER); +// userInfo.setId(Constants.SYSTEM_USER); +// return userInfo; +// } +//TODO + UserResp resp = new UserResp(); +// resp.setRoleType("Builder"); + return resp; + } + + /** + * 功能描述:获取角色编码 + * + * @return {@link String } + * @author cuizhibin + * @date 2025/04/25 11:23 + **/ + public static String getRoleCode() { + //TODO +// return getUserInfo().getRoleType(); + return null; + } +} diff --git a/core/src/main/java/com/dite/znpt/converts/Converts.java b/core/src/main/java/com/dite/znpt/converts/Converts.java new file mode 100644 index 0000000..b373e0f --- /dev/null +++ b/core/src/main/java/com/dite/znpt/converts/Converts.java @@ -0,0 +1,128 @@ +package com.dite.znpt.converts; + +import com.dite.znpt.domain.entity.*; +import com.dite.znpt.domain.vo.*; +import org.mapstruct.Mapper; +import org.mapstruct.NullValuePropertyMappingStrategy; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/4/26 1:32 + * @Description: + */ +@Mapper(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE) +public interface Converts { + Converts INSTANCE = Mappers.getMapper(Converts.class); + + List toImageEntity(List list); + + List toImageSimpleReq(List list); + + ImageCollectEntity toImageCollectEntity(ImageCollectReq req); + + DefectEntity toDefectEntity(DefectReq req); + + DefectResp toDefectResp(DefectEntity entity); + + ProjectResp toProjectResp(ProjectEntity entity); + + ProjectEntity toProjectEntity(ProjectReq req); + + TurbineEntity toTurbineEntity(TurbineReq req); + + TurbineResp toTurbineResp(TurbineEntity entity); + + PartEntity toPartEntity(PartReq req); + + PartResp toPartResp(PartEntity entity); + + UserResp toUserResp(UserEntity entity); + + UserListResp toUserListResp(UserEntity entity); + + UserEntity toUserEntity(UserReq req); + + DeptEntity toDeptEntity(DeptReq req); + + DeptResp toDeptResp(DeptEntity entity); + + PostEntity toPostEntity(PostReq req); + + List toPostResp(List list); + + PostResp toPostResp(PostEntity entity); + + RoleResp toRoleResp(RoleEntity entity); + + List toRoleResp(List list); + + RoleEntity toRoleEntity(RoleReq req); + + MenuEntity toMenuEntity(MenuReq req); + + MenuResp toMenuResp(MenuEntity entity); + + CertificationEntity toCertificationEntity(CertificationReq req); + + CertificationResp toCertificationResp(CertificationEntity entity); + + List toCertificationResp(List list); + + List toInsuranceTypeResp(List list); + + InsuranceTypeResp toInsuranceTypeResp(InsuranceTypeEntity entity); + + InsuranceTypeEntity toInsuranceTypeEntity(InsuranceTypeReq req); + + List toInsuranceCompanyResp(List list); + + InsuranceCompanyResp toInsuranceCompanyResp(InsuranceCompanyEntity entity); + + InsuranceCompanyEntity toInsuranceCompanyEntity(InsuranceCompanyReq req); + + List toInsuranceInfoResp(List list); + List toInsuranceAttachResp(List list); + + InsuranceInfoResp toInsuranceInfoResp(InsuranceInfoEntity entity); + + InsuranceInfoEntity toInsuranceInfoEntity(InsuranceInfoReq req); + + AttachInfoResp toAttacheInfoResp(AttachInfoEntity entity); + + List toWorkShiftListResp(List list); + + WorkShiftResp toWorkShiftResp(WorkShiftEntity entity); + + WorkShiftEntity toWorkShiftEntity(WorkShiftReq req); + + List toMaintainSuggestionResp(List list); + + MaintainSuggestionResp toMaintainSuggestionResp(MaintainSuggestionEntity entity); + + MaintainSuggestionEntity toMaintainSuggestionEntity(MaintainSuggestionReq req); + + List toCheckSchemeResp(List list); + CheckSchemeResp toCheckSchemeResp(CheckSchemeEntity entity); + + CheckSchemeEntity toCheckSchemeEntity(CheckSchemeReq req); + + InspectionReportEntity toInspectionReportEntity(InspectionReportReq req); + + InspectionReportCheckInfo toInspectionReportCheckInfo(InspectionReportEntity entity); + + InspectionReportReportInfo toInspectionReportReportInfo(InspectionReportEntity entity); + + List toInspectionReportSchemeInfo(List list); + + AttendanceRecordEntity toAttendanceRecordEntity(AttendanceRecordReq req); + + List toAttendanceRecordResp(List list); + + EquipmentEntity toEquipmentUseRecordEntity(EquipmentReq req); + + EquipmentUseRecordEntity toEquipmentUseRecordEntity(EquipmentUseRecordReq req); +} + diff --git a/core/src/main/java/com/dite/znpt/domain/AuditableEntity.java b/core/src/main/java/com/dite/znpt/domain/AuditableEntity.java new file mode 100644 index 0000000..0eb68a1 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/AuditableEntity.java @@ -0,0 +1,58 @@ +package com.dite.znpt.domain; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.annotations.ApiParam; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.List; + +/** + * @description: 统一定义顶层Entity实体审计 基类 + * 基类统一定义id的属性名称、数据类型、列名映射及生成策略. + */ +@AllArgsConstructor +@NoArgsConstructor +@Data +public class AuditableEntity implements Serializable { + @Serial + private static final long serialVersionUID = 141481953116476081L; + + @ApiModelProperty(value = "创建人id", hidden = true) + private String createBy; + + @ApiModelProperty(value = "更新时间", hidden = true) + private String updateBy; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建时间", hidden = true) + private LocalDateTime createTime; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "修改人id", hidden = true) + private LocalDateTime updateTime; + + @ExcelIgnore + @ApiModelProperty(value = "id集合", example = "[]", notes = "id集合") + @TableField(exist = false) + private List idList; + + @ExcelIgnore + @ApiModelProperty(value = "当前页", example = "1", notes = "0") + @TableField(exist = false) + int page = 1; + + @ExcelIgnore + @ApiModelProperty(value = "页大小", example = "10", notes = "10") + @TableField(exist = false) + int pageSize = 10; +} diff --git a/core/src/main/java/com/dite/znpt/domain/PageResult.java b/core/src/main/java/com/dite/znpt/domain/PageResult.java new file mode 100644 index 0000000..91944ae --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/PageResult.java @@ -0,0 +1,58 @@ +package com.dite.znpt.domain; + +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 分页查询结果 + */ +@Data +public class PageResult { + private static final long serialVersionUID = 1L; + @ApiModelProperty("状态码") + private Integer code; + @ApiModelProperty("返回内容") + private String msg; + @ApiModelProperty("对象列表") + private List rows; + @ApiModelProperty("数据对象") + private Long total; + + public PageResult(int code, String msg) { + this.code = code; + this.msg = msg; + } + + public PageResult(int code, String msg, List rows, Long total) { + this.code = code; + this.msg = msg; + this.rows = rows; + this.total = total; + } + + public static PageResult ok(List rows) { + return ok(rows, (new PageInfo(rows)).getTotal()); + } + + public static PageResult ok(List rows, Long total) { + return new PageResult(200, "操作成功", rows, total); + } + + public static PageResult ok(List rows, Integer total) { + return new PageResult(200, "操作成功", rows, (long)total); + } + + public static PageResult error() { + return error("操作失败"); + } + + public static PageResult error(String msg) { + return new PageResult(500, msg); + } + +} + diff --git a/core/src/main/java/com/dite/znpt/domain/QueryWrapperBuilder.java b/core/src/main/java/com/dite/znpt/domain/QueryWrapperBuilder.java new file mode 100644 index 0000000..68e6f8f --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/QueryWrapperBuilder.java @@ -0,0 +1,77 @@ +package com.dite.znpt.domain; + +import cn.hutool.core.util.ReflectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.dite.znpt.annotations.QueryCondition; +import org.apache.commons.lang3.StringUtils; +import org.springframework.core.annotation.AnnotationUtils; + +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.Collection; + +public class QueryWrapperBuilder { + + public static QueryWrapper build(Object queryDTO) { + QueryWrapper wrapper = new QueryWrapper<>(); + Field[] fields = ReflectUtil.getFields(queryDTO.getClass()); + + for (Field field : fields) { + QueryCondition qc = AnnotationUtils.getAnnotation(field, QueryCondition.class); + if (qc == null) continue; + + TableField tf = AnnotationUtils.getAnnotation(field, TableField.class); + field.setAccessible(true); + try { + Object value = field.get(queryDTO); + // 获取列名:优先 QueryCondition.column -> TableField.value -> 字段名 + String column = qc.column(); + if (StringUtils.isBlank(column)) { + TableField tableField = field.getAnnotation(TableField.class); + if (tableField != null && StringUtils.isNotBlank(tableField.value())) { + column = tableField.value(); + } else { + column = StrUtil.toUnderlineCase(field.getName()); + } + } + + // null检查 + if (value == null && !qc.nullable()) continue; + + // empty检查 + if (value instanceof String && ((String) value).isEmpty() && !qc.emptyable()) continue; + + switch (qc.func()) { + case equal: wrapper.eq(column, value); break; + case notEqual: wrapper.ne(column, value); break; + case like: wrapper.like(column, value); break; + case notLike: wrapper.notLike(column, value); break; + case gt: wrapper.gt(column, value); break; + case ge: wrapper.ge(column, value); break; + case lt: wrapper.lt(column, value); break; + case le: wrapper.le(column, value); break; + case greaterThan: wrapper.gt(column, (Comparable) value); break; + case greaterThanOrEqualTo: wrapper.ge(column, (Comparable) value); break; + case lessThan: wrapper.lt(column, (Comparable) value); break; + case lessThanOrEqualTo: wrapper.le(column, (Comparable) value); break; + case in: + case inn: + if (value instanceof Collection) { + wrapper.in(column, (Collection) value); + } else if (value.getClass().isArray()) { + wrapper.in(column, Arrays.asList((Object[]) value)); + } + break; + case isNull: wrapper.isNull(column); break; + case isNotNull: wrapper.isNotNull(column); break; + default: break; + } + + } catch (IllegalAccessException ignored) {} + } + + return wrapper; + } +} diff --git a/core/src/main/java/com/dite/znpt/domain/Result.java b/core/src/main/java/com/dite/znpt/domain/Result.java new file mode 100644 index 0000000..9228b34 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/Result.java @@ -0,0 +1,80 @@ +package com.dite.znpt.domain; + +import com.dite.znpt.constant.Constants; +import lombok.Data; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; + +import java.io.Serializable; + +/** + * @description: 返回结果 + */ +@Data +public class Result implements Serializable { + private static final Logger LOGGER = LoggerFactory.getLogger(Result.class); + private static final String SUCCESS = "success"; + private static final Integer SUCCESS_CODE = 200; + + private int status; + + private T data; + + private String msg; + + private Integer code; + + public Result(HttpStatus status, T data, Integer code, String msg) { + this.status = status.value(); + this.data = data; + this.code = code; + this.msg = msg; + } + + public boolean isSuccess() { + return this.getCode().equals(SUCCESS_CODE); + } + + public static Result okM(String msg) { + return new Result<>(HttpStatus.OK, null, SUCCESS_CODE, msg); + } + + public static Result ok() { + return new Result<>(HttpStatus.OK, null, SUCCESS_CODE, StringUtils.EMPTY); + } + + public static Result okM(T t, String msg) { + return new Result<>(HttpStatus.OK, t, SUCCESS_CODE, msg); + } + + public static Result ok(T t) { + return new Result<>(HttpStatus.OK, t, SUCCESS_CODE, StringUtils.EMPTY); + } + + public static Result okTrue() { + return new Result(HttpStatus.OK, Boolean.TRUE, SUCCESS_CODE, StringUtils.EMPTY); + } + + public static Result okFalse() { + return new Result(HttpStatus.OK, Boolean.FALSE, SUCCESS_CODE, StringUtils.EMPTY); + } + + public static Result error() { + return new Result(HttpStatus.INTERNAL_SERVER_ERROR, null, Integer.parseInt(Constants.SERVICE_EXCEPTION), Constants.SERVICE_EXCEPTION_MESSAGE); + } + + public static Result error(String msg) { + return new Result(HttpStatus.INTERNAL_SERVER_ERROR, null, Integer.parseInt(Constants.SERVICE_EXCEPTION), msg); + } + + public static Result error(String code, String msg) { + return error(code, msg, null); + } + + public static Result error(String code, String msg, T data) { + return new Result(HttpStatus.INTERNAL_SERVER_ERROR, data, Integer.parseInt(code), msg); + } + +} diff --git a/core/src/main/java/com/dite/znpt/domain/TableData.java b/core/src/main/java/com/dite/znpt/domain/TableData.java new file mode 100644 index 0000000..6e7c09a --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/TableData.java @@ -0,0 +1,35 @@ +package com.dite.znpt.domain; + +import lombok.Data; + +import java.util.Collections; +import java.util.List; + +/** + * @author wujinsong + * @date 2021/9/15 10:11 下午 + * @description: 巡检数据使用 + */ +@Data +@Deprecated +public class TableData { + private List list = Collections.emptyList(); + + private Integer page = 0; + + private Integer pageSize = 10; + + private long total = 0L; + + public TableData(List list, Integer page, Integer pageSize, long total) { + this.list = list; + this.page = page; + this.pageSize = pageSize; + this.total = total; + } + + public TableData() { + } + + +} diff --git a/core/src/main/java/com/dite/znpt/domain/bo/Detection.java b/core/src/main/java/com/dite/znpt/domain/bo/Detection.java new file mode 100644 index 0000000..063a4f3 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/bo/Detection.java @@ -0,0 +1,21 @@ +package com.dite.znpt.domain.bo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class Detection{ + + @ApiModelProperty("标签") + public String label; + @ApiModelProperty("分类id") + private Integer clsId; + @ApiModelProperty("位置") + private float[] bbox; + @ApiModelProperty("置信度") + private float confidence; +} diff --git a/core/src/main/java/com/dite/znpt/domain/bo/Letterbox.java b/core/src/main/java/com/dite/znpt/domain/bo/Letterbox.java new file mode 100644 index 0000000..b709f79 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/bo/Letterbox.java @@ -0,0 +1,73 @@ +package com.dite.znpt.domain.bo; + +import lombok.Getter; +import lombok.Setter; +import org.opencv.core.Core; +import org.opencv.core.Mat; +import org.opencv.core.Size; +import org.opencv.imgproc.Imgproc; + +public class Letterbox { + + @Setter + private Size newShape ; + private final double[] color = new double[]{114,114,114}; + private final Boolean auto = false; + private final Boolean scaleUp = true; + @Setter + private Integer stride = 32; + + @Getter + private double ratio; + @Getter + private double dw; + @Getter + private double dh; + + public Letterbox(int w,int h) { + this.newShape = new Size(w, h); + } + + public Letterbox() { + this.newShape = new Size(640, 640); + } + + + public Integer getWidth() { + return (int) this.newShape.width; + } + + public Integer getHeight() { + return (int) this.newShape.height; + } + + public Mat letterbox(Mat im) { // 调整图像大小和填充图像,使满足步长约束,并记录参数 + + int[] shape = {im.rows(), im.cols()}; // 当前形状 [height, width] + // Scale ratio (new / old) + double r = Math.min(this.newShape.height / shape[0], this.newShape.width / shape[1]); + if (!this.scaleUp) { // 仅缩小,不扩大(一且为了mAP) + r = Math.min(r, 1.0); + } + // Compute padding + Size newUnpad = new Size(Math.round(shape[1] * r), Math.round(shape[0] * r)); + double dw = this.newShape.width - newUnpad.width, dh = this.newShape.height - newUnpad.height; // wh 填充 + if (this.auto) { // 最小矩形 + dw = dw % this.stride; + dh = dh % this.stride; + } + dw /= 2; // 填充的时候两边都填充一半,使图像居于中心 + dh /= 2; + if (shape[1] != newUnpad.width || shape[0] != newUnpad.height) { // resize + Imgproc.resize(im, im, newUnpad, 0, 0, Imgproc.INTER_LINEAR); + } + int top = (int) Math.round(dh - 0.1), bottom = (int) Math.round(dh + 0.1); + int left = (int) Math.round(dw - 0.1), right = (int) Math.round(dw + 0.1); + // 将图像填充为正方形 + Core.copyMakeBorder(im, im, top, bottom, left, right, Core.BORDER_CONSTANT, new org.opencv.core.Scalar(this.color)); + this.ratio = r; + this.dh = dh; + this.dw = dw; + return im; + } +} \ No newline at end of file diff --git a/core/src/main/java/com/dite/znpt/domain/bo/ODConfig.java b/core/src/main/java/com/dite/znpt/domain/bo/ODConfig.java new file mode 100644 index 0000000..9f9a10b --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/bo/ODConfig.java @@ -0,0 +1,55 @@ +package com.dite.znpt.domain.bo; + +import java.util.*; + +public final class ODConfig { + + + public static final Integer lineThicknessRatio = 333; + public static final Double fontSizeRatio = 1080.0; + + private static final List default_names = new ArrayList<>(Arrays.asList( + "person", "bicycle", "car", "motorcycle", "airplane", "bus", "train", + "truck", "boat", "traffic light", "fire hydrant", "stop sign", "parking meter", + "bench", "bird", "cat", "dog", "horse", "sheep", "cow", "elephant", "bear", + "zebra", "giraffe", "backpack", "umbrella", "handbag", "tie", "suitcase", + "frisbee", "skis", "snowboard", "sports ball", "kite", "baseball bat", + "baseball glove", "skateboard", "surfboard", "tennis racket", "bottle", + "wine glass", "cup", "fork", "knife", "spoon", "bowl", "banana", "apple", + "sandwich", "orange", "broccoli", "carrot", "hot dog", "pizza", "donut", + "cake", "chair", "couch", "potted plant", "bed", "dining table", "toilet", + "tv", "laptop", "mouse", "remote", "keyboard", "cell phone", "microwave", + "oven", "toaster", "sink", "refrigerator", "book", "clock", "vase", "scissors", + "teddy bear", "hair drier", "toothbrush")); + + + private static final List names = new ArrayList<>(Arrays.asList( + "no_helmet", "helmet")); + + private final Map colors; + + public ODConfig() { + this.colors = new HashMap<>(); + default_names.forEach(name->{ + Random random = new Random(); + double[] color = {random.nextDouble()*256, random.nextDouble()*256, random.nextDouble()*256}; + colors.put(name, color); + }); + } + + public String getName(int clsId) { + return names.get(clsId); + } + + public double[] getColor(int clsId) { + return colors.get(getName(clsId)); + } + + public double[] getNameColor(String Name){ + return colors.get(Name); + } + + public double[] getOtherColor(int clsId) { + return colors.get(default_names.get(clsId)); + } +} \ No newline at end of file diff --git a/core/src/main/java/com/dite/znpt/domain/dto/FlowProcDefDto.java b/core/src/main/java/com/dite/znpt/domain/dto/FlowProcDefDto.java new file mode 100644 index 0000000..b4922ea --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/dto/FlowProcDefDto.java @@ -0,0 +1,57 @@ +package com.dite.znpt.domain.dto; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.Date; + +/** + *

流程定义

+ * + * @author Tony + * @date 2021-04-03 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@ApiModel("流程定义") +public class FlowProcDefDto implements Serializable { + + @ApiModelProperty("流程id") + private String id; + + @ApiModelProperty("流程名称") + private String name; + + @ApiModelProperty("流程key") + private String flowKey; + + @ApiModelProperty("流程分类") + private String category; + + @ApiModelProperty("配置表单名称") + private String formName; + + @ApiModelProperty("配置表单id") + private Long formId; + + @ApiModelProperty("版本") + private int version; + + @ApiModelProperty("部署ID") + private String deploymentId; + + @ApiModelProperty("流程定义状态: 1:激活 , 2:中止") + private int suspensionState; + + @ApiModelProperty("部署时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date deploymentTime; + + +} diff --git a/core/src/main/java/com/dite/znpt/domain/dto/OutWorkDefectDTO.java b/core/src/main/java/com/dite/znpt/domain/dto/OutWorkDefectDTO.java new file mode 100644 index 0000000..86d32c6 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/dto/OutWorkDefectDTO.java @@ -0,0 +1,50 @@ +package com.dite.znpt.domain.dto; + +import com.dite.znpt.annotations.MatchType; +import com.dite.znpt.annotations.QueryCondition; +import com.dite.znpt.domain.entity.job.DefectDTO; +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +@Data +public class OutWorkDefectDTO implements Serializable { + + @ApiModelProperty(value = "项目id", example = "797989789797", notes = "项目id") + @QueryCondition(func = MatchType.like) + private String projectId; + + @ApiModelProperty(value = "机组id", example = "797989789797", notes = "机组id") + @QueryCondition(func = MatchType.like) + private String crewId; + + @ApiModelProperty(value = "内业或外业id", example = "797989789797", notes = "内业或外业id") + @QueryCondition(func = MatchType.like) + private String reportId; + + @ApiModelProperty(value = "图片地址", example = "http://www.images/1.png,http://www.images/1.png", notes = "图片地址") + private List urlsList; + + @ApiModelProperty(value = "岗位类型", example = "78979879375", notes = "岗位id") + @QueryCondition(func = MatchType.like) + private String jobCode; + + @ApiModelProperty(value = "部件编号", example = "GG1", notes = "部件编号") + @QueryCondition(func = MatchType.like) + private String code; + + @ApiModelProperty("图片地址") + @QueryCondition(func = MatchType.like) + @JsonIgnore + private String urls; + + @ApiModelProperty("是否有缺陷:1有,0无") + @QueryCondition(func = MatchType.equal) + private Integer status; + + @ApiModelProperty("缺陷列表") + private List defectList; +} diff --git a/core/src/main/java/com/dite/znpt/domain/entity/AttachInfoEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/AttachInfoEntity.java new file mode 100644 index 0000000..5e1fb8c --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/AttachInfoEntity.java @@ -0,0 +1,58 @@ +package com.dite.znpt.domain.entity; + +import java.time.LocalDateTime; +import java.io.Serial; +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.*; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.*; + +/** + * @author huise23 + * @date 2025/06/27 16:18 + * @Description: 附件信息表实体类 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@EqualsAndHashCode(callSuper = false) +@TableName("attach_info") +@ApiModel(value="AttachInfoEntity对象", description="附件信息表") +public class AttachInfoEntity extends AuditableEntity implements Serializable { + + @Serial + private static final long serialVersionUID = -74430400890258372L; + + @ApiModelProperty("附件id") + @TableId(value = "attach_id", type = IdType.ASSIGN_ID) + private String attachId; + + @ApiModelProperty("业务id") + @TableField("business_id") + private String businessId; + + @ApiModelProperty("附件路径") + @TableField("attach_path") + private String attachPath; + + @ApiModelProperty("业务类型,字典attach_business_type") + @TableField("business_type") + private String businessType; + + @ApiModelProperty("文件类型") + @TableField("file_type") + private String fileType; + + @ApiModelProperty("备注") + @TableField("remark") + private String remark; + + @ApiModelProperty("删除标志(0代表存在 1代表删除)") + @TableField("del_flag") + private String delFlag; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/entity/AttendanceRecordEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/AttendanceRecordEntity.java new file mode 100644 index 0000000..d6413ee --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/AttendanceRecordEntity.java @@ -0,0 +1,54 @@ +package com.dite.znpt.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * @Author: gaoxiong + * @Date: 2025/7/21 20:51 + * @Description: + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("attendance_record") +@ApiModel(value="AttendanceRecordEntity对象", description="打卡记录表") +public class AttendanceRecordEntity extends AuditableEntity implements Serializable { + @Serial + private static final long serialVersionUID = 6186237408298557453L; + + @ApiModelProperty("考勤记录id") + @TableId(value = "record_id", type = IdType.ASSIGN_UUID) + private String recordId; + + @ApiModelProperty("考勤人员") + private String userId; + + @ApiModelProperty("记录类型,0-上班,1-下班,2-无效") + private String recordType; + + @ApiModelProperty("考勤日期") + private LocalDate attendanceDate; + + @ApiModelProperty("打卡时间") + private LocalDateTime recordTime; + + @ApiModelProperty("照片") + private String recordImage; + + @ApiModelProperty("打卡地点,经纬度") + private String recordPosition; + + @ApiModelProperty("打卡地点,中文描述") + private String recordPositionLabel; +} diff --git a/core/src/main/java/com/dite/znpt/domain/entity/AudioFileInfoEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/AudioFileInfoEntity.java new file mode 100644 index 0000000..0a63151 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/AudioFileInfoEntity.java @@ -0,0 +1,44 @@ +package com.dite.znpt.domain.entity; + +import java.io.Serial; +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.*; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.alibaba.excel.annotation.ExcelProperty; + +/** + * @author huise23 + * @date 2025/06/23 13:39 + * @Description: 音频文件信息表实体类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("audio_file_info") +@ApiModel(value="AudioFileInfoEntity对象", description="音频文件信息表") +public class AudioFileInfoEntity extends AuditableEntity implements Serializable { + + @Serial + private static final long serialVersionUID = -86870801917845298L; + + @ExcelProperty("id") + @ApiModelProperty("id") + @TableId(value = "audio_id", type = IdType.ASSIGN_ID) + private String audioId; + + @ExcelProperty("图片id") + @ApiModelProperty("图片id") + @TableField("image_id") + private String imageId; + + @ExcelProperty("文件保存路径") + @ApiModelProperty("文件保存路径") + @TableField("file_path") + private String filePath; + +} + diff --git a/core/src/main/java/com/dite/znpt/domain/entity/CertificationEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/CertificationEntity.java new file mode 100644 index 0000000..9a92d6b --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/CertificationEntity.java @@ -0,0 +1,62 @@ +package com.dite.znpt.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; + +/** + * @author Bear.G + * @date 2025/5/27/周二 15:15 + * @description + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("certification") +@ApiModel(value="CertificationEntity对象", description="人员资质") +public class CertificationEntity extends AuditableEntity implements Serializable { + + @Serial + private static final long serialVersionUID = -5650015300122333342L; + + @ApiModelProperty("证书id") + @TableId(value = "certification_id", type = IdType.ASSIGN_UUID) + private String certificationId; + + @ApiModelProperty("用户id") + @TableField("user_id") + private String userId; + + @ApiModelProperty("证书编号") + @TableField("certification_code") + private String certificationCode; + + @ApiModelProperty("证书名称") + @TableField("certification_name") + private String certificationName; + + @ApiModelProperty("证书类型") + @TableField("certification_type") + private String certificationType; + + @ApiModelProperty("证书有效期-起") + @TableField("validity_date_begin") + private LocalDate validityDateBegin; + + @ApiModelProperty("证书有效期-讫") + @TableField("validity_date_end") + private LocalDate validityDateEnd; + + @ApiModelProperty("证书图片") + @TableField("certification_image") + private String certificationImage; +} diff --git a/core/src/main/java/com/dite/znpt/domain/entity/CheckSchemeEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/CheckSchemeEntity.java new file mode 100644 index 0000000..ae4d742 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/CheckSchemeEntity.java @@ -0,0 +1,57 @@ +package com.dite.znpt.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/7/9 23:29 + * @Description: + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("check_scheme") +@ApiModel(value="CheckSchemeEntity对象", description="检查方案") +public class CheckSchemeEntity extends AuditableEntity implements Serializable { + + @ApiModelProperty("方案id") + @TableId(value = "scheme_id", type = IdType.ASSIGN_UUID) + private String schemeId; + + @ApiModelProperty("工作内容") + @TableField("work_content") + private String workContent; + + @ApiModelProperty("人员配置") + @TableField("staff_config") + private String staffConfig; + + @ApiModelProperty("设备配置") + @TableField("device_config") + private String deviceConfig; + + @ApiModelProperty("实施方案") + @TableField("construction_scheme") + private String constructionScheme; + + @ApiModelProperty("检查方式,枚举CheckMethodEnum") + @TableField("check_method") + private String checkMethod; + + @ApiModelProperty("备注") + @TableField("remark") + private String remark; + + @ApiModelProperty("删除标志(0代表存在 1代表删除)") + @TableField("del_flag") + private String delFlag; +} diff --git a/core/src/main/java/com/dite/znpt/domain/entity/CombinedDictEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/CombinedDictEntity.java new file mode 100644 index 0000000..6acc4fc --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/CombinedDictEntity.java @@ -0,0 +1,56 @@ +package com.dite.znpt.domain.entity; + +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.*; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.alibaba.excel.annotation.ExcelProperty; + +/** + * @author huise23 + * @date 2025/04/24 13:44 + * @Description: 字典表实体类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("combined_dict") +@ApiModel(value="CombinedDictEntity对象", description="字典表") +public class CombinedDictEntity extends AuditableEntity implements Serializable { + + private static final long serialVersionUID = 839158304342208816L; + + @ExcelProperty("字典id") + @ApiModelProperty("字典id") + @TableId(value = "dict_id", type = IdType.ASSIGN_UUID) + private String dictId; + + @ExcelProperty("字典类型") + @ApiModelProperty("字典类型") + @TableField("dict_type") + private String dictType; + + @ExcelProperty("字典名称") + @ApiModelProperty("字典名称") + @TableField("dict_name") + private String dictName; + + @ExcelProperty("父级id") + @ApiModelProperty("父级id") + @TableField("parent_id") + private Long parentId; + + @ExcelProperty("字典排序") + @ApiModelProperty("字典排序") + @TableField("sort_order") + private Integer sortOrder; + + @ExcelProperty("是否字典终值") + @ApiModelProperty("是否字典终值") + @TableField("final_state") + private Boolean finalState; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/entity/ContractEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/ContractEntity.java new file mode 100644 index 0000000..56a31cf --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/ContractEntity.java @@ -0,0 +1,110 @@ +package com.dite.znpt.domain.entity; + +import java.math.BigDecimal; +import java.util.Date; +import java.io.Serial; +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.*; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.alibaba.excel.annotation.ExcelProperty; + +/** + * @author huise23 + * @date 2025/07/21 21:13 + * @Description: 合同表实体类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("contract") +@ApiModel(value="ContractEntity对象", description="合同表") +public class ContractEntity extends AuditableEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 782007452634989148L; + + @ExcelProperty("合同id") + @ApiModelProperty("合同id") + @TableId(value = "contract_id", type = IdType.ASSIGN_ID) + private String contractId; + + @ExcelProperty("客户名称") + @ApiModelProperty("客户名称") + @TableField("customer") + private String customer; + + @ExcelProperty("合同编号") + @ApiModelProperty("合同编号") + @TableField("code") + private String code; + + @ExcelProperty("项目id") + @ApiModelProperty("项目id") + @TableField("project_id") + private String projectId; + + @ExcelProperty("业务员id") + @ApiModelProperty("业务员id") + @TableField("salesperson_id") + private String salespersonId; + + @ExcelProperty("部门id") + @ApiModelProperty("部门id") + @TableField("department_id") + private String departmentId; + + @ExcelProperty("签订日期") + @ApiModelProperty("签订日期") + @TableField("sign_date") + private Date signDate; + + @ExcelProperty("期限") + @ApiModelProperty("期限") + @TableField("duration") + private String duration; + + @ExcelProperty("类型") + @ApiModelProperty("类型") + @TableField("type") + private String type; + + @ExcelProperty("产品或服务") + @ApiModelProperty("产品或服务") + @TableField("product_service") + private String productService; + + @ExcelProperty("付款日期/交付日期") + @ApiModelProperty("付款日期/交付日期") + @TableField("payment_date") + private Date paymentDate; + + @ExcelProperty("付款地址/交付地址") + @ApiModelProperty("付款地址/交付地址") + @TableField("payment_address") + private String paymentAddress; + + @ExcelProperty("金额") + @ApiModelProperty("金额") + @TableField("amount") + private BigDecimal amount; + + @ExcelProperty("收款账号") + @ApiModelProperty("收款账号") + @TableField("account_number") + private String accountNumber; + + @ExcelProperty("备注") + @ApiModelProperty("备注") + @TableField("notes") + private String notes; + + @ExcelProperty("合同状态") + @ApiModelProperty("合同状态") + @TableField("contract_status") + private String contractStatus; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/entity/ContractSettlementEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/ContractSettlementEntity.java new file mode 100644 index 0000000..ef53a4c --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/ContractSettlementEntity.java @@ -0,0 +1,105 @@ +package com.dite.znpt.domain.entity; + +import java.math.BigDecimal; +import java.util.Date; +import java.io.Serial; +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.*; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.alibaba.excel.annotation.ExcelProperty; + +/** + * @author huise23 + * @date 2025/07/21 21:13 + * @Description: 合同结算表实体类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("contract_settlement") +@ApiModel(value="ContractSettlementEntity对象", description="合同结算表") +public class ContractSettlementEntity extends AuditableEntity implements Serializable { + + @Serial + private static final long serialVersionUID = -59751771276704650L; + + @ExcelProperty("合同结算id") + @ApiModelProperty("合同结算id") + @TableId(value = "settlement_id", type = IdType.ASSIGN_ID) + private String settlementId; + + @ExcelProperty("合同id") + @ApiModelProperty("合同id") + @TableField("contract_id") + private String contractId; + + @ExcelProperty("客户/供应商名称") + @ApiModelProperty("客户/供应商名称") + @TableField("customer") + private String customer; + + @ExcelProperty("合同结算编号") + @ApiModelProperty("合同结算编号") + @TableField("code") + private String code; + + @ExcelProperty("项目id") + @ApiModelProperty("项目id") + @TableField("project_id") + private String projectId; + + @ExcelProperty("业务员id") + @ApiModelProperty("业务员id") + @TableField("salesperson_id") + private String salespersonId; + + @ExcelProperty("部门id") + @ApiModelProperty("部门id") + @TableField("department_id") + private String departmentId; + + @ExcelProperty("账期") + @ApiModelProperty("账期") + @TableField("payment_period") + private Date paymentPeriod; + + @ExcelProperty("日期") + @ApiModelProperty("日期") + @TableField("payment_date") + private Date paymentDate; + + @ExcelProperty("期限") + @ApiModelProperty("期限") + @TableField("duration") + private String duration; + + @ExcelProperty("产品或服务") + @ApiModelProperty("产品或服务") + @TableField("product_service") + private String productService; + + @ExcelProperty("金额") + @ApiModelProperty("金额") + @TableField("amount") + private BigDecimal amount; + + @ExcelProperty("收款账号") + @ApiModelProperty("收款账号") + @TableField("account_number") + private String accountNumber; + + @ExcelProperty("备注") + @ApiModelProperty("备注") + @TableField("notes") + private String notes; + + @ExcelProperty("合同结算状态") + @ApiModelProperty("合同结算状态") + @TableField("settlement_status") + private String settlementStatus; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/entity/DefectEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/DefectEntity.java new file mode 100644 index 0000000..1921e16 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/DefectEntity.java @@ -0,0 +1,105 @@ +package com.dite.znpt.domain.entity; + +import java.io.Serial; +import java.math.BigDecimal; +import java.io.Serializable; +import java.time.LocalDateTime; + +import com.baomidou.mybatisplus.annotation.*; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.alibaba.excel.annotation.ExcelProperty; + +/** + * @author huise23 + * @date 2025/04/24 13:44 + * @Description: 缺陷记录表实体类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("defect") +@ApiModel(value="DefectEntity对象", description="缺陷记录表") +public class DefectEntity extends AuditableEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 721961595098309935L; + + @ExcelProperty("缺陷id") + @ApiModelProperty("缺陷id") + @TableId(value = "defect_id", type = IdType.ASSIGN_UUID) + private String defectId; + + @ExcelProperty("图像id") + @ApiModelProperty("图像id") + @TableField("image_id") + private String imageId; + + @ExcelProperty("缺陷编码") + @ApiModelProperty("缺陷编码") + @TableField("defect_code") + private String defectCode; + + @ExcelProperty("缺陷名称") + @ApiModelProperty("缺陷名称") + @TableField("defect_name") + private String defectName; + + @ExcelProperty("缺陷部位") + @ApiModelProperty("缺陷部位") + @TableField("defect_position") + private String defectPosition; + + @ExcelProperty("缺陷类型,枚举DefectTypeEnum") + @ApiModelProperty("缺陷类型,枚举DefectTypeEnum") + @TableField("defect_type") + private String defectType; + + @ExcelProperty("危重等级,枚举DefectLevelEnum") + @ApiModelProperty("危重等级,枚举DefectLevelEnum") + @TableField("defect_level") + private String defectLevel; + + @ExcelProperty("维修状态,枚举RepairStatusEnum") + @ApiModelProperty("维修状态,枚举RepairStatusEnum") + @TableField("repair_status") + private String repairStatus; + + @ExcelProperty("检测时间") + @ApiModelProperty("检测时间") + @TableField("detection_time") + private LocalDateTime detectionTime; + + @ExcelProperty("来源") + @ApiModelProperty("来源") + @TableField("source") + private String source; + + @ExcelProperty("弦向") + @ApiModelProperty("弦向") + @TableField("chordwise") + private String chordwise; + + @ExcelProperty("轴向") + @ApiModelProperty("轴向") + @TableField("axial") + private String axial; + + @ExcelProperty("标注信息") + @ApiModelProperty("标注信息") + @TableField("label_info") + private String labelInfo; + + @ExcelProperty("说明") + @ApiModelProperty("说明") + @TableField("description") + private String description; + + @ExcelProperty("维修建议") + @ApiModelProperty("维修建议") + @TableField("repair_idea") + private String repairIdea; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/entity/DeptEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/DeptEntity.java new file mode 100644 index 0000000..592aa2f --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/DeptEntity.java @@ -0,0 +1,64 @@ +package com.dite.znpt.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author Bear.G + * @date 2025/5/20/周二 9:17 + * @description + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("dept") +@ApiModel(value="DeptEntity对象", description="部门信息表") +public class DeptEntity extends AuditableEntity implements Serializable { + @Serial + private static final long serialVersionUID = -6471015140726790051L; + + @ApiModelProperty("部门id") + @TableId(value = "dept_id", type = IdType.ASSIGN_UUID) + private String deptId; + + @ApiModelProperty("父级部门id") + @TableField("parent_id") + private String parentId; + + @ApiModelProperty("祖籍列表") + @TableField("ancestors") + private String ancestors; + + @ApiModelProperty("部门全路径名称") + @TableField("dept_full_name") + private String deptFullName; + + @ApiModelProperty("部门名称") + @TableField("dept_name") + private String deptName; + + @ApiModelProperty("显示顺序") + @TableField("order_num") + private Integer orderNum; + + @ApiModelProperty("部门负责人") + @TableField("leader_id") + private String leaderId; + + @ApiModelProperty("状态(0正常 1停用)") + @TableField("status") + private Integer status; + + @ApiModelProperty("删除标志(0代表存在 1代表删除)") + @TableField("del_flag") + private String delFlag; +} diff --git a/core/src/main/java/com/dite/znpt/domain/entity/DictEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/DictEntity.java new file mode 100644 index 0000000..f79ac88 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/DictEntity.java @@ -0,0 +1,61 @@ +package com.dite.znpt.domain.entity; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author huise23 + * @date 2025/06/30 11:38 + * @Description: 字典表实体类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("dict") +@ApiModel(value="DictEntity对象", description="字典表") +public class DictEntity extends AuditableEntity implements Serializable { + + @Serial + private static final long serialVersionUID = -52191875430786367L; + + @ExcelProperty("字典id") + @ApiModelProperty("字典id") + @TableId(value = "dict_id", type = IdType.ASSIGN_ID) + private String dictId; + + @ExcelProperty("字典类型") + @ApiModelProperty("字典类型") + @TableField("dict_type") + private String dictType; + + @ExcelProperty("字典名称") + @ApiModelProperty("字典名称") + @TableField("dict_name") + private String dictName; + + @ExcelProperty("父级id") + @ApiModelProperty("父级id") + @TableField("parent_id") + private Long parentId; + + @ExcelProperty("字典排序") + @ApiModelProperty("字典排序") + @TableField("sort_order") + private Integer sortOrder; + + @ExcelProperty("是否字典终值") + @ApiModelProperty("是否字典终值") + @TableField("final_state") + private Integer finalState; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/entity/EquipmentEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/EquipmentEntity.java new file mode 100644 index 0000000..e1d577e --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/EquipmentEntity.java @@ -0,0 +1,55 @@ +package com.dite.znpt.domain.entity; + +import com.baomidou.mybatisplus.annotation.*; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author Bear.G + * @date 2025/7/23/周三 17:26 + * @description + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("equipment") +@ApiModel(value="EquipmentEntity对象", description="设备信息表") +public class EquipmentEntity extends AuditableEntity implements Serializable { + @Serial + private static final long serialVersionUID = -6665040704562461286L; + + @ApiModelProperty("设备id") + @TableId(type = IdType.ASSIGN_ID) + private String equipmentId; + + @ApiModelProperty("设备名称") + private String equipmentName; + + @ApiModelProperty("设备型号") + private String equipmentModel; + + @ApiModelProperty("设备类型") + private String equipmentType; + + @ApiModelProperty("设备状态,枚举:EquipmentStatusEnum") + private String equipmentStatus; + + @ApiModelProperty("使用状态,0-空闲中,1-使用中") + private String useStatus; + + @ApiModelProperty("设备序列号") + private String equipmentSn; + + @ApiModelProperty("当前使用记录id") + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private String useRecordId; + + @ApiModelProperty("删除标志(0代表存在 1代表删除)") + @TableLogic(value = "0", delval = "1") + private String delFlag; +} diff --git a/core/src/main/java/com/dite/znpt/domain/entity/EquipmentUseRecordEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/EquipmentUseRecordEntity.java new file mode 100644 index 0000000..0fe4696 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/EquipmentUseRecordEntity.java @@ -0,0 +1,53 @@ +package com.dite.znpt.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author Bear.G + * @date 2025/7/23/周三 17:33 + * @description + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("equipment_use_record") +@ApiModel(value="EquipmentUseRecordEntity对象", description="设备使用记录表") +public class EquipmentUseRecordEntity extends AuditableEntity implements Serializable { + @Serial + private static final long serialVersionUID = -812107257694322222L; + + @ApiModelProperty("设备使用记录id") + @TableId(type = IdType.ASSIGN_UUID) + private String useRecordId; + + @ApiModelProperty("设备id") + private String equipmentId; + + @ApiModelProperty("用户id") + private String userId; + + @ApiModelProperty("项目id") + private String projectId; + + @ApiModelProperty("操作类型:0-借用,1-归还") + private String operateType; + + @ApiModelProperty("操作时间") + private LocalDateTime operateTime; + + @ApiModelProperty("批次id") + private String batchId; + + @ApiModelProperty("备注") + private String remark; +} diff --git a/core/src/main/java/com/dite/znpt/domain/entity/ImageCollectEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/ImageCollectEntity.java new file mode 100644 index 0000000..5321e72 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/ImageCollectEntity.java @@ -0,0 +1,82 @@ +package com.dite.znpt.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @Author: gaoxiong + * @Date: 2025/4/24 20:33 + * @Description: + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("image_collect") +@ApiModel(value="ImageEntity对象", description="图像采集信息表") +public class ImageCollectEntity extends AuditableEntity implements Serializable { + + @Serial + private static final long serialVersionUID = -2957687117182827156L; + + @ApiModelProperty("图像采集id") + @TableId(value = "collect_id", type = IdType.ASSIGN_UUID) + private String collectId; + + @ApiModelProperty("拍摄时间-起") + @TableField("shooting_time_begin") + private LocalDateTime shootingTimeBegin; + + @ApiModelProperty("拍摄时间-讫") + @TableField("shooting_time_end") + private LocalDateTime shootingTimeEnd; + + @ApiModelProperty("天气,枚举:WeatherEnum") + @TableField("weather") + private String weather; + + @ApiModelProperty("湿度(百分比)") + @TableField("humidness") + private Integer humidness; + + @ApiModelProperty("温度-低") + @TableField("temperature_min") + private Double temperatureMin; + + @ApiModelProperty("温度-高") + @TableField("temperature_max") + private Double temperatureMax; + + @ApiModelProperty("风力等级") + @TableField("wind_level") + private Integer windLevel; + + @ApiModelProperty("拍摄方式,枚举ShootingMethodEnum") + @TableField("shooting_method") + private String shootingMethod; + + @ApiModelProperty("拍摄距离") + @TableField("shooting_distance") + private Integer shootingDistance; + + @ApiModelProperty("采集员id") + @TableField("collector_id") + private String collectorId; + + @ApiModelProperty("采集员姓名") + @TableField("collector_name") + private String collectorName; + + @ApiModelProperty("来源") + @TableField("image_source") + private String imageSource; +} diff --git a/core/src/main/java/com/dite/znpt/domain/entity/ImageEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/ImageEntity.java new file mode 100644 index 0000000..788a75b --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/ImageEntity.java @@ -0,0 +1,139 @@ +package com.dite.znpt.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author Bear.G + * @date 2025/4/24/周四 13:15 + * @description + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("image") +@ApiModel(value="ImageEntity对象", description="图像信息表") +public class ImageEntity extends AuditableEntity implements Serializable { + + @Serial + private static final long serialVersionUID = -7702927820673158420L; + + @ApiModelProperty("图像id") + @TableId(value = "image_id", type = IdType.ASSIGN_UUID) + private String imageId; + + @ApiModelProperty("部件id") + @TableField("part_id") + private String partId; + + @ApiModelProperty("图像采集id") + @TableField("collect_id") + private String collectId; + + @ApiModelProperty("图像名称") + @TableField("image_name") + private String imageName; + + @ApiModelProperty("图像大小") + @TableField("image_size") + private String imageSize; + + @ApiModelProperty("图像宽") + @TableField("image_width") + private String imageWidth; + + @ApiModelProperty("图像高") + @TableField("image_height") + private String imageHeight; + + @ApiModelProperty("图像分辨率") + @TableField("image_resolution") + private String imageResolution; + + @ApiModelProperty("焦平面X轴分辨率") + @TableField("x_resolution") + private String xResolution; + + @ApiModelProperty("焦平面Y轴分辨率") + @TableField("y_resolution") + private String YResolution; + + @ApiModelProperty("焦平面分辨率单位") + @TableField("resolution_units") + private String ResolutionUnits; + + @ApiModelProperty("焦距") + @TableField("focal_distance") + private String focalDistance; + + @ApiModelProperty("35毫米焦距") + @TableField("focal_distance35") + private String focalDistance35; + + @ApiModelProperty("拍摄时间") + @TableField("shooting_time") + private LocalDateTime shootingTime; + + @ApiModelProperty("相机制造商") + @TableField("camera_manufacturer") + private String cameraManufacturer; + + @ApiModelProperty("相机型号") + @TableField("camera_model") + private String cameraModel; + + @ApiModelProperty("经度") + @TableField("longitude") + private String longitude; + + @ApiModelProperty("纬度") + @TableField("latitude") + private String latitude; + + @ApiModelProperty("海拔") + @TableField("altitude") + private String altitude; + + @ApiModelProperty("GPS") + @TableField("GPS") + private String GPS; + + @ApiModelProperty("影像类型") + @TableField("image_type") + private String imageType; + + @ApiModelProperty("影像类型描述") + @TableField("image_type_label") + private String imageTypeLabel; + + @ApiModelProperty("图片路径") + @TableField("image_path") + private String imagePath; + + @ApiModelProperty("预处理后的图片路径") + @TableField("pre_image_path") + private String preImagePath; + + @ApiModelProperty("是否已审核,0未审核,1已审核") + @TableField("review_state") + private Boolean reviewState; + + @ApiModelProperty("是否已预处理,0未审核,1已审核") + @TableField("pre_treatment") + private Boolean preTreatment; + + @ApiModelProperty("项目id") + @TableField("project_id") + private String projectId; + +} diff --git a/core/src/main/java/com/dite/znpt/domain/entity/InspectionReportEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/InspectionReportEntity.java new file mode 100644 index 0000000..edbc9ac --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/InspectionReportEntity.java @@ -0,0 +1,98 @@ +package com.dite.znpt.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * @author Bear.G + * @date 2025/7/7/周一 16:59 + * @description + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("inspection_report") +@ApiModel(value="InspectionReportEntity对象", description="检测报告表") +public class InspectionReportEntity extends AuditableEntity implements Serializable { + @Serial + private static final long serialVersionUID = 6994234156669409533L; + + @ApiModelProperty("报告id") + @TableId(value = "report_id", type = IdType.ASSIGN_UUID) + private String reportId; + + @ApiModelProperty("主标题") + @TableField("title") + private String title; + + @ApiModelProperty("副标题") + @TableField("sub_title") + private String subTitle; + + @ApiModelProperty("封面") + @TableField("cover_image") + private String coverImage; + + @ApiModelProperty("项目id") + @TableField("project_id") + private String projectId; + + @ApiModelProperty("机组id") + @TableField("turbine_id") + private String turbineId; + + @ApiModelProperty("检查日期") + @TableField("check_date") + private LocalDate checkDate; + + @ApiModelProperty("检查内容") + @TableField("check_content") + private String checkContent; + + @ApiModelProperty("检查方式") + @TableField("check_method") + private String checkMethod; + + @ApiModelProperty("检查人员id,多个人员英文逗号分隔") + @TableField("check_user_id") + private String checkUserId; + + @ApiModelProperty("报告编制人员id") + @TableField("report_writer") + private String reportWriter; + + @ApiModelProperty("报告编制时间") + @TableField("report_write_time") + private LocalDateTime reportWriteTime; + + @ApiModelProperty("报告复核人员id") + @TableField("report_reviewer") + private String reportReviewer; + + @ApiModelProperty("报告复核时间") + @TableField("report_review_time") + private LocalDateTime reportReviewTime; + + @ApiModelProperty("报告审核人员id") + @TableField("report_auditor") + private String reportAuditor; + + @ApiModelProperty("报告审核时间") + @TableField("report_audit_time") + private LocalDateTime reportAuditTime; + + @ApiModelProperty("报告状态") + @TableField("report_status") + private String reportStatus; +} diff --git a/core/src/main/java/com/dite/znpt/domain/entity/InsuranceCompanyEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/InsuranceCompanyEntity.java new file mode 100644 index 0000000..dc6fa2e --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/InsuranceCompanyEntity.java @@ -0,0 +1,52 @@ +package com.dite.znpt.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/6/24 23:15 + * @Description: + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("insurance_company") +@ApiModel(value="InsuranceCompanyEntity对象", description="保险公司信息") +public class InsuranceCompanyEntity extends AuditableEntity implements Serializable { + @Serial + private static final long serialVersionUID = 6335457810854776901L; + + @ApiModelProperty("公司id") + @TableId(value = "insurance_company_id", type = IdType.ASSIGN_UUID) + private String insuranceCompanyId; + + @ApiModelProperty("公司名称") + @TableField("insurance_company_name") + private String insuranceCompanyName; + + @ApiModelProperty("联系人") + @TableField("contact") + private String contact; + + @ApiModelProperty("联系人电话") + @TableField("contact_phone") + private String contactPhone; + + @ApiModelProperty("状态:0-合作中,1-终止合作") + @TableField("status") + private String status; + + @ApiModelProperty("删除标志(0代表存在 ,1代表删除)") + @TableField("del_flag") + private String delFlag; +} diff --git a/core/src/main/java/com/dite/znpt/domain/entity/InsuranceInfoEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/InsuranceInfoEntity.java new file mode 100644 index 0000000..4242ef0 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/InsuranceInfoEntity.java @@ -0,0 +1,99 @@ +package com.dite.znpt.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; + +/** + * @Author: gaoxiong + * @Date: 2025/6/24 23:15 + * @Description: + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("insurance_info") +@ApiModel(value="InsuranceInfoEntity对象", description="保险信息") +public class InsuranceInfoEntity extends AuditableEntity implements Serializable { + @Serial + private static final long serialVersionUID = 465741795038101117L; + + @ApiModelProperty("保险信息id") + @TableId(value = "insurance_info_id", type = IdType.ASSIGN_UUID) + private String insuranceInfoId; + + @ApiModelProperty("员工id") + @TableField("user_id") + private String userId; + + @ApiModelProperty("员工姓名") + @TableField("name") + private String name; + + @ApiModelProperty("员工工号") + @TableField("user_code") + private String userCode; + + @ApiModelProperty("保险公司id") + @TableField("insurance_company_id") + private String insuranceCompanyId; + + @ApiModelProperty("保险公司") + @TableField("insurance_company_name") + private String insuranceCompanyName; + + @ApiModelProperty("保险类型id") + @TableField("insurance_type_id") + private String insuranceTypeId; + + @ApiModelProperty("保险类型") + @TableField("insurance_type_name") + private String insuranceTypeName; + + @ApiModelProperty("保险单号") + @TableField("insurance_bill_code") + private String insuranceBillCode; + + @ApiModelProperty("附件id") + @TableField("attach_info_id") + private String attachInfoId; + + @ApiModelProperty("生效日期") + @TableField("effective_date") + private LocalDate effectiveDate; + + @ApiModelProperty("到期日期") + @TableField("expire_date") + private LocalDate expireDate; + + @ApiModelProperty("保费") + @TableField("insurance_premium") + private BigDecimal insurancePremium; + + @ApiModelProperty("保额") + @TableField("insurance_amount") + private BigDecimal insuranceAmount; + + @ApiModelProperty("状态") + @TableField("insurance_status") + private String insuranceStatus; + + @ApiModelProperty("备注") + @TableField("remark") + private String remark; + + @ApiModelProperty("删除标志(0代表存在 ,1代表删除)") + @TableField("del_flag") + private String delFlag; + +} diff --git a/core/src/main/java/com/dite/znpt/domain/entity/InsuranceTypeEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/InsuranceTypeEntity.java new file mode 100644 index 0000000..18a3151 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/InsuranceTypeEntity.java @@ -0,0 +1,44 @@ +package com.dite.znpt.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/6/24 23:15 + * @Description: + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("insurance_type") +@ApiModel(value="InsuranceTypeEntity对象", description="保险类型") +public class InsuranceTypeEntity extends AuditableEntity implements Serializable { + @Serial + private static final long serialVersionUID = 3027186714895190416L; + + @ApiModelProperty("保险类型id") + @TableId(value = "insurance_type_id", type = IdType.ASSIGN_UUID) + private String insuranceTypeId; + + @ApiModelProperty("保险类型名称") + @TableField("insurance_type_name") + private String insuranceTypeName; + + @ApiModelProperty("描述") + @TableField("description") + private String description; + + @ApiModelProperty("删除标志(0代表存在 ,1代表删除)") + @TableField("del_flag") + private String delFlag; +} diff --git a/core/src/main/java/com/dite/znpt/domain/entity/MaintainSuggestionEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/MaintainSuggestionEntity.java new file mode 100644 index 0000000..7191246 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/MaintainSuggestionEntity.java @@ -0,0 +1,46 @@ +package com.dite.znpt.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/7/7 22:18 + * @Description: + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("maintain_suggestion") +@ApiModel(value="MaintainSuggestionEntity对象", description="维修建议库") +public class MaintainSuggestionEntity extends AuditableEntity implements Serializable { + + @Serial + private static final long serialVersionUID = -5774159362861473940L; + + @ApiModelProperty("建议id") + @TableId(value = "suggestion_id", type = IdType.ASSIGN_UUID) + private String suggestionId; + + @ApiModelProperty("建议类容") + @TableField("suggestion_content") + private String suggestionContent; + + @ApiModelProperty("缺陷级别") + @TableField("defect_level") + private String defectLevel; + + + @ApiModelProperty("缺陷类型") + @TableField("defect_type") + private String defectType; +} diff --git a/core/src/main/java/com/dite/znpt/domain/entity/MenuEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/MenuEntity.java new file mode 100644 index 0000000..f7b213c --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/MenuEntity.java @@ -0,0 +1,79 @@ +package com.dite.znpt.domain.entity; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/5/15 23:33 + * @Description: + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("menu") +@ApiModel(value="MenuEntity对象", description="菜单信息表") +public class MenuEntity extends AuditableEntity implements Serializable { + + @Serial + private static final long serialVersionUID = -6913953673120999054L; + + @ExcelProperty("菜单id") + @ApiModelProperty("菜单id") + @TableId(value = "menu_id", type = IdType.ASSIGN_UUID) + private String menuId; + + @ExcelProperty("菜单名称") + @ApiModelProperty("菜单名称") + @TableField("menu_name") + private String menuName; + + @ExcelProperty("父菜单ID") + @ApiModelProperty("父菜单ID") + @TableField("parent_id") + private String parentId; + + @ExcelProperty("order_num") + @ApiModelProperty("显示顺序") + @TableField("order_num") + private Integer orderNum; + + @ExcelProperty("组件地址") + @ApiModelProperty("组件地址") + @TableField("component") + private String component; + + @ExcelProperty("路由地址") + @ApiModelProperty("路由地址") + @TableField("path") + private String path; + + @ExcelProperty("菜单类型(M目录 C菜单 F按钮)") + @ApiModelProperty("菜单类型(M目录 C菜单 F按钮)") + @TableField("menu_type") + private String menuType; + + @ExcelProperty("菜单状态(0显示 1隐藏)") + @ApiModelProperty("菜单状态(0显示 1隐藏)") + @TableField("visible") + private String visible; + + @ExcelProperty("权限标识") + @ApiModelProperty("权限标识") + @TableField("perms") + private String perms; + + @ApiModelProperty("终端类型(PC-电脑端,APP-移动端)") + @TableField("terminal_type") + private String terminalType; +} diff --git a/core/src/main/java/com/dite/znpt/domain/entity/ModelConfigEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/ModelConfigEntity.java new file mode 100644 index 0000000..b001c1f --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/ModelConfigEntity.java @@ -0,0 +1,56 @@ +package com.dite.znpt.domain.entity; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author huise23 + * @date 2025/07/02 20:57 + * @Description: 模型配置表实体类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("model_config") +@ApiModel(value="ModelConfigEntity对象", description="模型配置表") +public class ModelConfigEntity extends AuditableEntity implements Serializable { + + @Serial + private static final long serialVersionUID = -73052440757340126L; + + @ExcelProperty("模型id") + @ApiModelProperty("模型id") + @TableId(value = "model_id", type = IdType.ASSIGN_ID) + private String modelId; + + @ExcelProperty("模型名称") + @ApiModelProperty("模型名称") + @TableField("model_name") + private String modelName; + + @ExcelProperty("模型路径") + @ApiModelProperty("模型路径") + @TableField("model_path") + private String modelPath; + + @ExcelProperty("模型置信度") + @ApiModelProperty("模型置信度") + @TableField("conf_threshold") + private Float confThreshold; + + @ExcelProperty("非极大抑制") + @ApiModelProperty("非极大抑制") + @TableField("nms_threshold") + private Float nmsThreshold; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/entity/PartEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/PartEntity.java new file mode 100644 index 0000000..c5614ea --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/PartEntity.java @@ -0,0 +1,69 @@ +package com.dite.znpt.domain.entity; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 部件表实体类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("part") +@ApiModel(value="PartEntity对象", description="部件表") +public class PartEntity extends AuditableEntity implements Serializable { + + private static final long serialVersionUID = -53853862365306266L; + + @ExcelProperty("部件id") + @ApiModelProperty("部件id") + @TableId(value = "part_id", type = IdType.ASSIGN_UUID) + private String partId; + + @ExcelProperty("机组id") + @ApiModelProperty("机组id") + @TableField("turbine_id") + private String turbineId; + + @ExcelProperty("名称") + @ApiModelProperty("名称") + @TableField("part_name") + private String partName; + + @ExcelProperty("编号") + @ApiModelProperty("编号") + @TableField("part_code") + private String partCode; + + @ExcelProperty("类型,枚举PartTypeEnum") + @ApiModelProperty("类型,枚举PartTypeEnum") + @TableField("part_type") + private String partType; + + @ExcelProperty("描述") + @ApiModelProperty("描述") + @TableField("part_desc") + private String partDesc; + + @ExcelProperty("厂商") + @ApiModelProperty("厂商") + @TableField("part_manufacturer") + private String partManufacturer; + + @ExcelProperty("型号") + @ApiModelProperty("型号") + @TableField("part_model") + private String partModel; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/entity/PostEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/PostEntity.java new file mode 100644 index 0000000..0071710 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/PostEntity.java @@ -0,0 +1,49 @@ +package com.dite.znpt.domain.entity; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author Bear.G + * @date 2025/5/20/周二 9:17 + * @description + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("post") +@ApiModel(value="PostEntity对象", description="表") +public class PostEntity extends AuditableEntity implements Serializable { + @Serial + private static final long serialVersionUID = -5163882523494504223L; + + @ApiModelProperty("岗位id") + @TableId(value = "post_id", type = IdType.ASSIGN_UUID) + private String postId; + + @ApiModelProperty("岗位名称") + @TableField("post_name") + private String postName; + + @ApiModelProperty("显示顺序") + @TableField("post_sort") + private Integer postSort; + + @ApiModelProperty("状态(0正常 1停用)") + @TableField("status") + private Integer status; + + @ApiModelProperty("备注") + @TableField("remark") + private String remark; +} diff --git a/core/src/main/java/com/dite/znpt/domain/entity/ProjectBudgetInfoEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/ProjectBudgetInfoEntity.java new file mode 100644 index 0000000..7656d98 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/ProjectBudgetInfoEntity.java @@ -0,0 +1,61 @@ +package com.dite.znpt.domain.entity; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author huise23 + * @date 2025/07/17 21:58 + * @Description: 项目预算信息表实体类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("project_budget_info") +@ApiModel(value="ProjectBudgetInfoEntity对象", description="项目预算信息表") +public class ProjectBudgetInfoEntity extends AuditableEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 514469235298737990L; + + @ExcelProperty("主键") + @ApiModelProperty("主键") + @TableId(value = "budget_id", type = IdType.ASSIGN_ID) + private String budgetId; + + @ExcelProperty("项目id") + @ApiModelProperty("项目id") + @TableField("project_id") + private String projectId; + + @ExcelProperty("预算名称") + @ApiModelProperty("预算名称") + @TableField("budget_name") + private String budgetName; + + @ExcelProperty("预算类型") + @ApiModelProperty("预算类型") + @TableField("budget_type") + private String budgetType; + + @ExcelProperty("预算金额(万元)") + @ApiModelProperty("预算金额(万元)") + @TableField("budget_amount") + private Double budgetAmount; + + @ExcelProperty("预算说明") + @ApiModelProperty("预算说明") + @TableField("budget_desc") + private String budgetDesc; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/entity/ProjectEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/ProjectEntity.java new file mode 100644 index 0000000..c044195 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/ProjectEntity.java @@ -0,0 +1,165 @@ +package com.dite.znpt.domain.entity; + +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; + +import com.baomidou.mybatisplus.annotation.*; +import com.dite.znpt.domain.AuditableEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.alibaba.excel.annotation.ExcelProperty; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 项目信息表实体类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("project") +@ApiModel(value="ProjectEntity对象", description="项目信息表") +public class ProjectEntity extends AuditableEntity implements Serializable { + + private static final long serialVersionUID = -38332266915294799L; + + @ExcelProperty("项目id") + @ApiModelProperty("项目id") + @TableId(value = "project_id", type = IdType.ASSIGN_UUID) + private String projectId; + + @ExcelProperty("项目名称") + @ApiModelProperty("项目名称") + @TableField("project_name") + private String projectName; + + @ApiModelProperty("项目封面") + @TableField("cover_url") + private String coverUrl; + + @ExcelProperty("风场名称") + @ApiModelProperty("风场名称") + @TableField("farm_name") + private String farmName; + + @ExcelProperty("风场地址") + @ApiModelProperty("风场地址") + @TableField("farm_address") + private String farmAddress; + + @ApiModelProperty("委托单位") + @TableField("client") + private String client; + + @ApiModelProperty("委托单位联系人") + @TableField("client_contact") + private String clientContact; + + @ApiModelProperty("委托单位联系电话") + @TableField("client_phone") + private String clientPhone; + + @ApiModelProperty("检查单位") + @TableField("inspection_unit") + private String inspectionUnit; + + @ApiModelProperty("检查单位联系人") + @TableField("inspection_contact") + private String inspectionContact; + + @ApiModelProperty("检查单位联系电话") + @TableField("inspection_phone") + private String inspectionPhone; + + @ExcelProperty("项目规模") + @ApiModelProperty("项目规模") + @TableField("scale") + private String scale; + + @ExcelProperty("总工期,单位天") + @ApiModelProperty("总工期,单位天") + @TableField("duration") + private Integer duration; + + @ExcelProperty("风机型号") + @ApiModelProperty("风机型号") + @TableField("turbine_model") + private String turbineModel; + + @ApiModelProperty("施工人员id") + @TableField("constructor_ids") + private String constructorIds; + + @ApiModelProperty("安全员id") + @TableField("auditor_id") + private String auditorId; + + @ApiModelProperty("质量员id") + @TableField("quality_officer_id") + private String qualityOfficerId; + + @ApiModelProperty("项目经理id") + @TableField("project_manager_id") + private String projectManagerId; + + @ApiModelProperty("施工组长id") + @TableField("construct_team_leader_id") + private String constructTeamLeaderId; + + @ApiModelProperty("技术方案图片,多个用逗号隔开") + @JsonIgnore + @TableField("technical_image") + @Deprecated + private String technicalImage; + + @ApiModelProperty("技术方案内容") + @TableField("technical_content") + @Deprecated + private String technicalContent; + + @ApiModelProperty("安全措施图片,多个用逗号隔开") + @JsonIgnore + @TableField("safety_image") + @Deprecated + private String safetyImage; + + @ApiModelProperty("安全措施内容") + @TableField("safety_content") + @Deprecated + private String safetyContent; + + @ApiModelProperty("交底内容") + @TableField("disclose_content") + @Deprecated + private String discloseContent; + + @ApiModelProperty("状态:0待施工,1施工中,2已完工,3已审核,4已验收") + @TableField("status") + private Integer status; + + @ApiModelProperty("项目工作类型 可能有多项,逗号分隔") + @TableField("work_type") + @Deprecated + private String workType; + + @ApiModelProperty("项目工作岗位 可能有多项,json对象保存") + @TableField("job") + @Deprecated + private String job; + + @ApiModelProperty(value = "项目安全风险点", example = "1", notes = "项目安全风险点 可能有多项,逗号分隔") + @TableField("safety_risk_point") + @Deprecated + private String safetyRiskPoint; + + @ApiModelProperty(value = "开始时间") + private LocalDate startDate; + + @ApiModelProperty(value = "结束时间") + private LocalDate endDate; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/entity/ProjectTaskEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/ProjectTaskEntity.java new file mode 100644 index 0000000..6a6ac92 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/ProjectTaskEntity.java @@ -0,0 +1,89 @@ +package com.dite.znpt.domain.entity; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.io.Serial; +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.*; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author huise23 + * @date 2025/06/25 21:48 + * @Description: 项目任务信息表实体类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("project_task") +@ApiModel(value="ProjectTaskEntity对象", description="项目任务信息表") +public class ProjectTaskEntity extends AuditableEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 445818156838153502L; + + @ApiModelProperty("任务id") + @TableId(value = "task_id", type = IdType.ASSIGN_ID) + private String taskId; + + @ApiModelProperty("上级任务id") + @TableField("parent_task_id") + private String parentTaskId; + + @ApiModelProperty("任务组id") + @TableField("task_group_id") + private String taskGroupId; + + @ApiModelProperty("项目任务名称") + @TableField("task_name") + private String taskName; + + @ApiModelProperty("项目任务编号") + @TableField("task_code") + private String taskCode; + + @ApiModelProperty("任务负责人id") + @TableField("main_user_id") + private String mainUserId; + + @ApiModelProperty("任务参与人id,逗号分隔") + @TableField("user_ids") + private String userIds; + + @ApiModelProperty("计划开始时间") + @TableField("plan_start_date") + private LocalDate planStartDate; + + @ApiModelProperty("计划结束时间") + @TableField("plan_end_date") + private LocalDate planEndDate; + + @ApiModelProperty("实际开始时间") + @TableField("actual_start_date") + private LocalDate actualStartDate; + + @ApiModelProperty("实际结束时间") + @TableField("actual_end_date") + private LocalDate actualEndDate; + + @ApiModelProperty("任务状态,0未开始,1进行中,2已结束") + @TableField("status") + private Integer status; + + @ApiModelProperty("是否逾期,默认未逾期") + @TableField("overdue_status") + private Integer overdueStatus; + + @ApiModelProperty("备注") + @TableField("remark") + private String remark; + + @ApiModelProperty("项目id") + @TableField("project_id") + private String projectId; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/entity/ProjectTaskGroupEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/ProjectTaskGroupEntity.java new file mode 100644 index 0000000..7987168 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/ProjectTaskGroupEntity.java @@ -0,0 +1,41 @@ +package com.dite.znpt.domain.entity; + +import java.time.LocalDateTime; +import java.io.Serial; +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.*; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.alibaba.excel.annotation.ExcelProperty; + +/** + * @author huise23 + * @date 2025/06/24 17:06 + * @Description: 项目任务组信息表实体类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("project_task_group") +@ApiModel(value="ProjectTaskGroupEntity对象", description="项目任务组信息表") +public class ProjectTaskGroupEntity extends AuditableEntity implements Serializable { + + @Serial + private static final long serialVersionUID = -86904406809616523L; + + @ApiModelProperty("id") + @TableId(value = "group_id", type = IdType.ASSIGN_ID) + private String groupId; + + @ApiModelProperty("项目任务组名") + @TableField("group_name") + private String groupName; + + @ApiModelProperty("项目id") + @TableField("project_id") + private String projectId; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/entity/RoleEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/RoleEntity.java new file mode 100644 index 0000000..cf47658 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/RoleEntity.java @@ -0,0 +1,67 @@ +package com.dite.znpt.domain.entity; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/5/15 23:33 + * @Description: + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("role") +@ApiModel(value="RoleEntity对象", description="角色信息表") +public class RoleEntity extends AuditableEntity implements Serializable { + + @Serial + private static final long serialVersionUID = -561827154209083475L; + + @ExcelProperty("角色id") + @ApiModelProperty("角色id") + @TableId(value = "role_id", type = IdType.ASSIGN_UUID) + private String roleId; + + @ExcelProperty("角色名称") + @ApiModelProperty("角色名称") + @TableField("role_name") + private String roleName; + + @ExcelProperty("角色编码") + @ApiModelProperty("角色编码") + @TableField("role_code") + private String roleCode; + + @ExcelProperty("角色权限字符") + @ApiModelProperty("角色权限字符") + @TableField("role_key") + private String roleKey; + + @ExcelProperty("0正常1禁用") + @ApiModelProperty("0正常1禁用") + @TableField("status") + private Integer status; + + + @ExcelProperty("备注") + @ApiModelProperty("备注") + @TableField("remark") + private String remark; + + @ExcelProperty("删除标志(0代表存在 1代表删除)") + @ApiModelProperty("删除标志(0代表存在 1代表删除)") + @TableField("del_flag") + private String delFlag; + +} diff --git a/core/src/main/java/com/dite/znpt/domain/entity/RoleMenuEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/RoleMenuEntity.java new file mode 100644 index 0000000..914fcdd --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/RoleMenuEntity.java @@ -0,0 +1,38 @@ +package com.dite.znpt.domain.entity; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/5/15 23:33 + * @Description: + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("role_menu") +@ApiModel(value="RoleMenuEntity对象", description="角色和菜单关联表") +public class RoleMenuEntity extends AuditableEntity implements Serializable { + + @Serial + private static final long serialVersionUID = -795955361477553526L; + + @ApiModelProperty("角色id") + @TableField("role_id") + private String roleId; + + @ApiModelProperty("菜单id") + @TableField("menu_id") + private String menuId; +} diff --git a/core/src/main/java/com/dite/znpt/domain/entity/TConstructionEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/TConstructionEntity.java new file mode 100644 index 0000000..405016d --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/TConstructionEntity.java @@ -0,0 +1,85 @@ +package com.dite.znpt.domain.entity; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author sakura + * @date 2025/04/10 13:35 + * @Description: 施工信息表实体类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("t_construction") +@ApiModel(value="TConstructionEntity对象", description="施工信息表") +public class TConstructionEntity extends AuditableEntity implements Serializable { + + private static final long serialVersionUID = 295094962841990277L; + + @ExcelProperty("施工id") + @ApiModelProperty("施工id") + @TableId(value = "construction_id", type = IdType.ASSIGN_UUID) + private String constructionId; + + @ExcelProperty("项目id") + @ApiModelProperty("项目id") + @TableField("project_id") + private String projectId; + + @ExcelProperty("机组id") + @ApiModelProperty("机组id") + @TableField("turbine_id") + private String turbineId; + + @ExcelProperty("作业开始时间") + @ApiModelProperty("作业开始时间") + @TableField("start_time") + private LocalDateTime startTime; + + @ExcelProperty("作业结束时间") + @ApiModelProperty("作业结束时间") + @TableField("end_time") + private LocalDateTime endTime; + + @ExcelProperty("温度(℃)") + @ApiModelProperty("温度(℃)") + @TableField("temperature") + private Double temperature; + + @ExcelProperty("风速(m/s)") + @ApiModelProperty("风速(m/s)") + @TableField("wind_speed") + private Double windSpeed; + + @ExcelProperty("采集图片数量") + @ApiModelProperty("采集图片数量") + @TableField("image_count") + private Integer imageCount; + + @ExcelProperty("天气id") + @ApiModelProperty("天气id") + @TableField("weather_code") + private String weatherCode; + + @ExcelProperty("施工状态") + @ApiModelProperty("施工状态") + @TableField("status_id") + private String statusId; + + @ExcelProperty("当前时间") + @ApiModelProperty("当前时间") + @TableField("created_at") + private LocalDateTime createdAt; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/entity/TurbineEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/TurbineEntity.java new file mode 100644 index 0000000..4be4628 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/TurbineEntity.java @@ -0,0 +1,69 @@ +package com.dite.znpt.domain.entity; + +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.*; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.alibaba.excel.annotation.ExcelProperty; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 机组-项目关联表实体类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("turbine") +@ApiModel(value="TurbineEntity对象", description="机组-项目关联表") +public class TurbineEntity extends AuditableEntity implements Serializable { + + private static final long serialVersionUID = -46471985197840891L; + + @ExcelProperty("机组号") + @ApiModelProperty("机组号") + @TableId(value = "turbine_id", type = IdType.ASSIGN_UUID) + private String turbineId; + + @ExcelProperty("项目id") + @ApiModelProperty("项目id") + @TableField("project_id") + private String projectId; + + @ExcelProperty("机组名称") + @ApiModelProperty("机组名称") + @TableField("turbine_name") + private String turbineName; + + @ExcelProperty("机组编码") + @ApiModelProperty("机组编码") + @TableField("turbine_code") + private String turbineCode; + + @ExcelProperty("机组描述") + @ApiModelProperty("机组描述") + @TableField("turbine_desc") + private String turbineDesc; + + @ExcelProperty("机组厂商") + @ApiModelProperty("机组厂商") + @TableField("turbine_manufacturer") + private String turbineManufacturer; + + @ExcelProperty("机组型号") + @ApiModelProperty("机组型号") + @TableField("turbine_model") + private String turbineModel; + + @ApiModelProperty("封面图") + @TableField("turbine_cover_url") + private String turbineCoverUrl; + + @ApiModelProperty("状态:0待施工,1施工中,2已完工,3已审核,4已验收") + @TableField("status") + private Integer status; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/entity/UserEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/UserEntity.java new file mode 100644 index 0000000..bb6cf0a --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/UserEntity.java @@ -0,0 +1,152 @@ +package com.dite.znpt.domain.entity; + +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; + +import com.baomidou.mybatisplus.annotation.*; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.alibaba.excel.annotation.ExcelProperty; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 人员信息表实体类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("user") +@ApiModel(value="UserEntity对象", description="用户信息表") +public class UserEntity extends AuditableEntity implements Serializable { + + private static final long serialVersionUID = -62273861742734411L; + + @ExcelProperty("用户名") + @ApiModelProperty("用户名") + @TableId(value = "user_id", type = IdType.ASSIGN_UUID) + private String userId; + + @ExcelProperty("账号") + @ApiModelProperty("账号") + @TableField("account") + private String account; + + @ExcelProperty("头像地址") + @ApiModelProperty("头像地址") + @TableField("avatar") + private String avatar; + + @ExcelProperty("密码") + @ApiModelProperty("密码") + @TableField("password") + private String password; + + @ExcelProperty("是否默认密码") + @ApiModelProperty("是否默认密码") + @TableField("is_default_password") + private Boolean isDefaultPassword; + + @ExcelProperty("加密盐") + @ApiModelProperty("加密盐") + @TableField("salt") + private String salt; + + @ExcelProperty("0正常1禁用") + @ApiModelProperty("0正常1禁用") + @TableField("status") + private Integer status; + + @ExcelProperty("姓名") + @ApiModelProperty("姓名") + @TableField("name") + private String name; + + @ExcelProperty("用户编码") + @ApiModelProperty("用户编码") + @TableField("user_code") + private String userCode; + + @ExcelProperty("用户类型") + @ApiModelProperty("用户类型") + @TableField("user_type") + private String userType; + + @ExcelProperty("用户状态") + @ApiModelProperty("用户状态") + @TableField("user_status") + private String userStatus; + + @ApiModelProperty("所属部门") + @TableField("dept_id") + private String deptId; + + @ExcelProperty("身份证") + @ApiModelProperty("身份证") + @TableField("identity_card") + private String identityCard; + + @ExcelProperty("性别") + @ApiModelProperty("性别") + @TableField("gender") + private String gender; + + @ExcelProperty("手机号码") + @ApiModelProperty("手机号码") + @TableField("mobile") + private String mobile; + + @ExcelProperty("邮箱") + @ApiModelProperty("邮箱") + @TableField("email") + private String email; + + @ExcelProperty("入职日期") + @ApiModelProperty("入职日期") + @TableField("hiredate") + private LocalDate hiredate; + + @ExcelProperty("出生日期") + @ApiModelProperty("出生日期") + @TableField("birthdate") + private LocalDate birthdate; + + @ExcelProperty("学历") + @ApiModelProperty("学历") + @TableField("education") + private String education; + + @ExcelProperty("专业") + @ApiModelProperty("专业") + @TableField("major_field") + private String majorField; + + @ExcelProperty("工作方向") + @ApiModelProperty("工作方向") + @TableField("work_field") + private String workField; + + @ExcelProperty("最后登录ip") + @ApiModelProperty("最后登录ip") + @TableField("last_login_ip") + private String lastLoginIp; + + @ExcelProperty("最后登录时间") + @ApiModelProperty("最后登录时间") + @TableField("last_login_time") + private LocalDateTime lastLoginTime; + + @ExcelProperty("密码修改时间") + @ApiModelProperty("密码修改时间") + @TableField("password_update_time") + private LocalDateTime passwordUpdateTime; + + @ExcelProperty("删除标志(0代表存在 ,1代表删除)") + @ApiModelProperty("删除标志(0代表存在 ,1代表删除)") + @TableField("del_flag") + private String delFlag; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/entity/UserPostEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/UserPostEntity.java new file mode 100644 index 0000000..a32e5ff --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/UserPostEntity.java @@ -0,0 +1,35 @@ +package com.dite.znpt.domain.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/5/15 23:33 + * @Description: + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("user_post") +@ApiModel(value="UserPostEntity对象", description="用户和岗位信息表") +public class UserPostEntity extends AuditableEntity implements Serializable { + + @Serial + private static final long serialVersionUID = -4046474045225600954L; + + @ApiModelProperty("用户id") + @TableField("user_id") + private String userId; + + @ApiModelProperty("岗位id") + @TableField("post_id") + private String postId; +} diff --git a/core/src/main/java/com/dite/znpt/domain/entity/UserRoleEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/UserRoleEntity.java new file mode 100644 index 0000000..86bbbd6 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/UserRoleEntity.java @@ -0,0 +1,35 @@ +package com.dite.znpt.domain.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/5/15 23:33 + * @Description: + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("user_role") +@ApiModel(value="UserRoleEntity对象", description="用户和角色信息表") +public class UserRoleEntity extends AuditableEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 1078827043026958140L; + + @ApiModelProperty("用户id") + @TableField("user_id") + private String userId; + + @ApiModelProperty("角色id") + @TableField("role_id") + private String roleId; +} diff --git a/core/src/main/java/com/dite/znpt/domain/entity/VideoFileInfoEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/VideoFileInfoEntity.java new file mode 100644 index 0000000..8b6a9d5 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/VideoFileInfoEntity.java @@ -0,0 +1,75 @@ +package com.dite.znpt.domain.entity; + +import java.io.Serial; +import java.time.LocalDateTime; +import java.io.Serializable; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.baomidou.mybatisplus.annotation.*; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.alibaba.excel.annotation.ExcelProperty; + +/** + * @author huise23 + * @date 2025/06/09 09:44 + * @Description: 视频文件信息表实体类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("video_file_info") +@ApiModel(value="VideoFileInfoEntity对象", description="视频文件信息表") +public class VideoFileInfoEntity extends AuditableEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 306867911204598834L; + + @ExcelProperty("id") + @ApiModelProperty("id") + @TableId(value = "id", type = IdType.ASSIGN_ID) + private String id; + + @ExcelProperty("部件id") + @ApiModelProperty(value = "部件id",required = true) + @TableField("part_id") + private String partId; + + @ExcelProperty("测试点") + @ApiModelProperty("测试点") + @TableField("test_point") + private String testPoint; + + @ExcelProperty("作业人员id") + @ApiModelProperty("作业人员id") + @TableField("worker_user_id") + private String workerUserId; + + @ExcelProperty("拍摄时间") + @ApiModelProperty("拍摄时间") + @TableField("shooting_time") + private LocalDateTime shootingTime; + + @ExcelProperty("拍摄地点") + @ApiModelProperty("拍摄地点") + @TableField("location") + private String location; + + @ExcelProperty("是否合格,默认合格1") + @ApiModelProperty("是否合格,默认合格1") + @TableField("qualified") + private Integer qualified; + + @ExcelProperty("是否已抓帧,默认未抓帧0") + @ApiModelProperty("是否已抓帧,默认未抓帧0") + @TableField("frame_capture") + private Integer frameCapture; + + @ExcelProperty("文件保存路径") + @ApiModelProperty("文件保存路径") + @TableField("file_path") + private String filePath; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/entity/WeatherTypeEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/WeatherTypeEntity.java new file mode 100644 index 0000000..623653b --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/WeatherTypeEntity.java @@ -0,0 +1,42 @@ +package com.dite.znpt.domain.entity; + +import java.math.BigDecimal; +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.*; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.alibaba.excel.annotation.ExcelProperty; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 天气类型表实体类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("weather_type") +@ApiModel(value="WeatherTypeEntity对象", description="天气类型表") +public class WeatherTypeEntity extends AuditableEntity implements Serializable { + + private static final long serialVersionUID = -74787545166894805L; + + @ExcelProperty("天气类型id") + @ApiModelProperty("天气类型id") + @TableId(value = "weather_code", type = IdType.ASSIGN_UUID) + private String weatherCode; + + @ExcelProperty("天气类型中文描述") + @ApiModelProperty("天气类型中文描述") + @TableField("chinese_name") + private String chineseName; + + @ExcelProperty("对施工进度的影响系数") + @ApiModelProperty("对施工进度的影响系数") + @TableField("impact_factor") + private BigDecimal impactFactor; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/entity/WorkShiftEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/WorkShiftEntity.java new file mode 100644 index 0000000..6f784ad --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/WorkShiftEntity.java @@ -0,0 +1,85 @@ +package com.dite.znpt.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalTime; + +/** + * @author Bear.G + * @date 2025/6/30/周一 10:08 + * @description + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("work_shift") +@ApiModel(value="WorkShitEntity对象", description="班次信息") +public class WorkShiftEntity extends AuditableEntity implements Serializable { + @Serial + private static final long serialVersionUID = 1912356282767651959L; + + @ApiModelProperty("班次id") + @TableId(value = "work_shift_id", type = IdType.ASSIGN_UUID) + private String workShiftId; + + @ApiModelProperty("班次名称") + @TableField("work_shift_name") + private String workShiftName; + + @ApiModelProperty("上班时间") + @TableField("work_time_start") + private LocalTime workTimeStart; + + @ApiModelProperty("迟到豁免时间,单位分钟") + @TableField("late_time_offset") + private Integer lateTimeOffset; + + @ApiModelProperty("迟到时间临界值,单位分钟") + @TableField("late_time_limit") + private Integer lateTimeLimit; + + @ApiModelProperty("下班时间") + @TableField("work_time_end") + private LocalTime workTimeEnd; + + @ApiModelProperty("早退豁免时间,单位分钟") + @TableField("early_time_offset") + private Integer earlyTimeOffset; + + @ApiModelProperty("早退时间临界值,单位分钟") + @TableField("early_time_limit") + private Integer earlyTimeLimit; + + @ApiModelProperty("休息时间开始") + @TableField("rest_time_start") + private LocalTime restTimeStart; + + @ApiModelProperty("休息时间结束") + @TableField("rest_time_end") + private LocalTime restTimeEnd; + + @ApiModelProperty("工作时间长") + @TableField("work_time") + private Integer workTime; + + @ApiModelProperty("状态,0-已发布,1-未发布") + @TableField("status") + private String status; + + @ApiModelProperty("备注") + @TableField("remark") + private String remark; + + @ApiModelProperty("删除标志(0代表存在 1代表删除)") + @TableField("del_flag") + private String delFlag; +} diff --git a/core/src/main/java/com/dite/znpt/domain/entity/job/DefectDTO.java b/core/src/main/java/com/dite/znpt/domain/entity/job/DefectDTO.java new file mode 100644 index 0000000..d1460bb --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/job/DefectDTO.java @@ -0,0 +1,58 @@ +package com.dite.znpt.domain.entity.job; + +import com.dite.znpt.annotations.MatchType; +import com.dite.znpt.annotations.QueryCondition; +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +@Deprecated +public class DefectDTO { + + @ApiModelProperty(value = "缺陷详情", example = "缺陷详情", notes = "缺陷详情") + @QueryCondition(func = MatchType.like) + private String content; + + @ApiModelProperty(value = "缺陷图片", example = "123.png", notes = "缺陷图片") + @QueryCondition(func = MatchType.like) + @JsonIgnore + private String flawUrl; + + @ApiModelProperty(value = "封面图片", example = "123.png", notes = "封面图片") + @QueryCondition(func = MatchType.like) + private String coverUrl; + + @ApiModelProperty(value = "缺陷类型编码", example = "A123", notes = "缺陷类型编码") + @QueryCondition(func = MatchType.like) + private String defectTypeCode; + + @ApiModelProperty(value = "缺陷位置1", example = "GG1", notes = "缺陷位置1") + @QueryCondition(func = MatchType.like) + private String defectLocation1; + + @ApiModelProperty(value = "缺陷位置1尺寸", example = "1.5", notes = "缺陷位置1尺寸") + @QueryCondition(func = MatchType.like) + private String defectLocation1Size; + + @ApiModelProperty(value = "缺陷位置2", example = "GG1", notes = "缺陷位置2") + @QueryCondition(func = MatchType.like) + private String defectLocation2; + + @ApiModelProperty(value = "缺陷尺寸", example = "10", notes = "缺陷尺寸") + @QueryCondition(func = MatchType.like) + private String defectSize; + + @ApiModelProperty(value = "缺陷尺寸2", example = "10", notes = "缺陷尺寸2") + @QueryCondition(func = MatchType.like) + private String defectSize2; + + @ApiModelProperty(value = "缺陷等级编码", example = "aa", notes = "缺陷等级编码") + @QueryCondition(func = MatchType.equal) + private String criticalityLevelCode; + + @ApiModelProperty(value = "缺陷图片,多个逗号隔开", example = "[https://123.png]", notes = "缺陷图片,多个逗号隔开") + private List flawUrlList; +} diff --git a/core/src/main/java/com/dite/znpt/domain/entity/job/JobAntiThunderWork.java b/core/src/main/java/com/dite/znpt/domain/entity/job/JobAntiThunderWork.java new file mode 100644 index 0000000..8d7bc99 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/job/JobAntiThunderWork.java @@ -0,0 +1,2212 @@ +package com.dite.znpt.domain.entity.job; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; +import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.annotations.MatchType; +import com.dite.znpt.annotations.QueryCondition; +import com.dite.znpt.domain.AuditableEntity; +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + * @author huise23 + * @date 2023/2/16 22:50 + * @description: 项目中指定机组各人员防雷工作内容 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("gaea_job_anti_thunder_work") +@ApiModel(value="JobAntiThunderWork对象", description="防雷工作内容表") +public class JobAntiThunderWork extends AuditableEntity implements Serializable { + + @ApiModelProperty(value = "id", example = "78979879375", notes = "id") + @TableId(value = "id", type = IdType.ASSIGN_UUID) + private String Id; + + @ApiModelProperty(value = "岗位id", example = "78979879375", notes = "岗位id") + @QueryCondition(func = MatchType.like) + private String jobId; + + @ApiModelProperty(value = "状态", example = "0草稿 1已提交 2组长提交 3项目经理审批通过", notes = "状态") + @QueryCondition(func = MatchType.equal) + private String status; + + @ApiModelProperty(value = "安全员审批状态", example = "0未审批 1已审批", notes = "安全员审批状态") + @QueryCondition(func = MatchType.equal) + private String safetyOfficerStatus; + + @ApiModelProperty(value = "质量员审批状态", example = "0未审批 1已审批", notes = "质量员审批状态") + @QueryCondition(func = MatchType.equal) + private String qualityOfficerStatus; + + @ApiModelProperty(value = "施工人员", example = "施工人员", notes = "施工人员") + @QueryCondition(func = MatchType.like) + @TableField(exist = false) + private String constructionPersonnel; + + @ApiModelProperty(value = "具体岗位", example = "具体岗位", notes = "具体岗位") + @QueryCondition(func = MatchType.equal) + @TableField(exist = false) + private String jobCode; + + @ApiModelProperty(value = "扩展字段", example = "", notes = "扩展字段", hidden = true) + + @JsonIgnore + private String extData; + + public void postLoad() { + JobAntiThunderWork obj = JSONUtil.toBean(extData, this.getClass()); + BeanUtil.copyProperties(obj, this, CopyOptions.create().setOverride(false).setEditable(this.getClass())); + this.extData = extData; + } + + public void preSave() { + this.extData = JSONUtil.toJsonStr(this); + } + + + + + + + + + + + + + + + @ApiModelProperty(value = "安全交底及安全风险点照片", example = "https://123.png,https://456.png", notes = "安全交底及安全风险点照片") + @TableField(exist = false) + private String safetyRiskPointImages; + + @ApiModelProperty(value = "无人化装备工作描述", example = "工作描述工作描述", notes = "无人化装备工作描述") + @TableField(exist = false) + private String noManJobDesc; + + @ApiModelProperty(value = "无人化装备操作照片", example = "https://123.png,https://456.png", notes = "安全交底及安全风险点照片") + @TableField(exist = false) + private String noManImages; + + @ApiModelProperty(value = "无人化装备工作地点描述", example = "工作地点描述工作地点描述", notes = "无人化装备工作地点描述") + @TableField(exist = false) + private String noManJobAddressDesc; + + @ApiModelProperty(value = "无人化装备工作地点照片", example = "https://123.png,https://456.png", notes = "无人化装备工作地点照片") + @TableField(exist = false) + private String noManJobAddressImages; + + @ApiModelProperty(value = "无人化装备安全管控描述", example = "安全管控描述安全管控描述", notes = "无人化装备安全管控描述") + @TableField(exist = false) + private String noManSecurityControlDesc; + + @ApiModelProperty(value = "无人化装备安全管控照片", example = "https://123.png,https://456.png", notes = "无人化装备安全管控照片") + @TableField(exist = false) + private String noManSecurityControlImages; + + @ApiModelProperty(value = "无人化装备工作时间", example = "2022-01-22 10:00:00", notes = "无人化装备工作时间") + @TableField(exist = false) + private String noManWorkTime; + + @ApiModelProperty(value = "无人化装备 叶片数量", example = "工作描述工作描述", notes = "无人化装备 叶片数量") + @TableField(exist = false) + private String noManJobLeafCount; + + @ApiModelProperty(value = "无人化装备工作描述1", example = "工作描述工作描述", notes = "无人化装备工作描述1") + @TableField(exist = false) + private String noManJobDesc1; + + @ApiModelProperty(value = "无人化装备操作照片-叶片1", example = "https://123.png,https://456.png", notes = "安全交底及安全风险点照片1") + @TableField(exist = false) + private String noManImages1; + + @ApiModelProperty(value = "无人化装备工作描述2", example = "工作描述工作描述", notes = "无人化装备工作描述2") + @TableField(exist = false) + private String noManJobDesc2; + + @ApiModelProperty(value = "无人化装备操作照片-叶片2", example = "https://123.png,https://456.png", notes = "安全交底及安全风险点照片2") + @TableField(exist = false) + private String noManImages2; + + @ApiModelProperty(value = "无人化装备工作描述3", example = "工作描述工作描述", notes = "无人化装备工作描述3") + @TableField(exist = false) + private String noManJobDesc3; + + @ApiModelProperty(value = "无人化装备操作照片-叶片3", example = "https://123.png,https://456.png", notes = "安全交底及安全风险点照片3") + @TableField(exist = false) + private String noManImages3; + + @ApiModelProperty(value = "无人化防雷工作描述1", example = "工作描述工作描述", notes = "无人化防雷工作描述1") + @TableField(exist = false) + private String noManAntiThunderDesc1; + + @ApiModelProperty(value = "无人化防雷 叶片数量", example = "工作描述工作描述", notes = "无人化防雷 叶片数量") + @TableField(exist = false) + private String noManAntiThunderLeafCount; + + @ApiModelProperty(value = "无人化防雷工作地点描述", example = "工作地点描述工作地点描述", notes = "无人化防雷工作地点描述") + @TableField(exist = false) + private String noManAntiThunderJobAddressDesc; + + @ApiModelProperty(value = "无人化防雷工作地点照片", example = "https://123.png,https://456.png", notes = "无人化防雷工作地点照片") + @TableField(exist = false) + private String noManAntiThunderJobAddressImages; + + @ApiModelProperty(value = "无人化防雷安全管控描述", example = "安全管控描述安全管控描述", notes = "无人化防雷安全管控描述") + @TableField(exist = false) + private String noManAntiThunderSecurityControlDesc; + + @ApiModelProperty(value = "无人化防雷安全管控照片", example = "https://123.png,https://456.png", notes = "无人化防雷安全管控照片") + @TableField(exist = false) + private String noManAntiThunderSecurityControlImages; + + @ApiModelProperty(value = "无人化防雷工作时间", example = "2022-01-22 10:00:00", notes = "无人化防雷工作时间") + @TableField(exist = false) + private String noManAntiThunderWorkTime; + + @ApiModelProperty(value = "无人化防雷操作照片-叶片1", example = "https://123.png,https://456.png", notes = "安全交底及安全风险点照片1") + @TableField(exist = false) + private String noManAntiThunderImages1; + + @ApiModelProperty(value = "无人化防雷工作描述2", example = "工作描述工作描述", notes = "无人化防雷工作描述2") + @TableField(exist = false) + private String noManAntiThunderDesc2; + + @ApiModelProperty(value = "无人化防雷操作照片-叶片2", example = "https://123.png,https://456.png", notes = "安全交底及安全风险点照片2") + @TableField(exist = false) + private String noManAntiThunderImages2; + + @ApiModelProperty(value = "无人化防雷工作描述3", example = "工作描述工作描述", notes = "无人化防雷工作描述3") + @TableField(exist = false) + private String noManAntiThunderDesc3; + + @ApiModelProperty(value = "无人化防雷操作照片-叶片3", example = "https://123.png,https://456.png", notes = "安全交底及安全风险点照片3") + @TableField(exist = false) + private String noManAntiThunderImages3; + + @ApiModelProperty(value = "司机工作描述", example = "工作描述工作描述", notes = "司机工作描述") + @TableField(exist = false) + private String driverJobDesc; + + @ApiModelProperty(value = "司机照片", example = "https://123.png,https://456.png", notes = "司机照片") + @TableField(exist = false) + private String driverImages; + + @ApiModelProperty(value = "司机工作地点描述", example = "工作地点描述工作地点描述", notes = "司机工作地点描述") + @TableField(exist = false) + private String driverJobAddressDesc; + + @ApiModelProperty(value = "司机工作地点照片", example = "https://123.png,https://456.png", notes = "司机工作地点照片") + @TableField(exist = false) + private String driverJobAddressImages; + + @ApiModelProperty(value = "司机安全管控描述", example = "安全管控描述安全管控描述", notes = "司机安全管控描述") + @TableField(exist = false) + private String driverSecurityControlDesc; + + @ApiModelProperty(value = "司机安全管控照片", example = "https://123.png,https://456.png", notes = "司机安全管控照片") + @TableField(exist = false) + private String driverSecurityControlImages; + + @ApiModelProperty(value = "司机工作时间", example = "2022-01-22 10:00:00", notes = "司机工作时间") + @TableField(exist = false) + private String driverWorkTime; + + @ApiModelProperty(value = "地勤工作描述", example = "工作描述工作描述", notes = "地勤工作描述") + @TableField(exist = false) + private String groundServiceJobDesc; + + @ApiModelProperty(value = "地勤照片", example = "https://123.png,https://456.png", notes = "地勤照片") + @TableField(exist = false) + private String groundServiceImages; + + @ApiModelProperty(value = "地勤工作地点描述", example = "工作地点描述工作地点描述", notes = "地勤工作地点描述") + @TableField(exist = false) + private String groundServiceJobAddressDesc; + + @ApiModelProperty(value = "地勤工作地点照片", example = "https://123.png,https://456.png", notes = "地勤工作地点照片") + @TableField(exist = false) + private String groundServiceJobAddressImages; + + @ApiModelProperty(value = "地勤安全管控描述", example = "安全管控描述安全管控描述", notes = "地勤安全管控描述") + @TableField(exist = false) + private String groundServiceSecurityControlDesc; + + @ApiModelProperty(value = "地勤安全管控照片", example = "https://123.png,https://456.png", notes = "地勤安全管控照片") + @TableField(exist = false) + private String groundServiceSecurityControlImages; + + @ApiModelProperty(value = "地勤工作时间", example = "2022-01-22 10:00:00", notes = "地勤工作时间") + @TableField(exist = false) + private String groundServiceWorkTime; + + @ApiModelProperty(value = "检测员工作描述", example = "工作描述工作描述", notes = "检测员工作描述") + @TableField(exist = false) + private String ascendingJobDesc; + + @ApiModelProperty(value = "登高等级", example = "1一级 2二级 3三级 4四级 5五级", notes = "登高等级") + @QueryCondition(func = MatchType.like) + private String ascendingLevel; + + @ApiModelProperty(value = "检测员工作地点描述", example = "工作地点描述工作地点描述", notes = "检测员工作地点描述") + @TableField(exist = false) + private String ascendingJobAddressDesc; + + @ApiModelProperty(value = "检测员工作地点照片", example = "https://123.png,https://456.png", notes = "检测员工作地点照片") + @TableField(exist = false) + private String ascendingJobAddressImages; + + @ApiModelProperty(value = "检测员安全管控描述", example = "安全管控描述安全管控描述", notes = "检测员安全管控描述") + @TableField(exist = false) + private String ascendingSecurityControlDesc; + + @ApiModelProperty(value = "检测员安全管控照片", example = "https://123.png,https://456.png", notes = "检测员安全管控照片") + @TableField(exist = false) + private String ascendingSecurityControlImages; + + @ApiModelProperty(value = "检测员工作时间", example = "2022-01-22 10:00:00", notes = "检测员工作时间") + @TableField(exist = false) + private String ascendingWorkTime; + + @ApiModelProperty(value = "抄表工作地点描述", example = "工作地点描述工作地点描述", notes = "抄表工作地点描述") + @TableField(exist = false) + private String meterReadingJobAddressDesc; + + @ApiModelProperty(value = "抄表工作地点照片", example = "https://123.png,https://456.png", notes = "抄表工作地点照片") + @TableField(exist = false) + private String meterReadingJobAddressImages; + + @ApiModelProperty(value = "抄表安全管控描述", example = "安全管控描述安全管控描述", notes = "抄表安全管控描述") + @TableField(exist = false) + private String meterReadingSecurityControlDesc; + + @ApiModelProperty(value = "抄表安全管控照片", example = "https://123.png,https://456.png", notes = "抄表安全管控照片") + @TableField(exist = false) + private String meterReadingSecurityControlImages; + + @ApiModelProperty(value = "抄表工作时间", example = "2022-01-22 10:00:00", notes = "抄表工作时间") + @TableField(exist = false) + private String meterReadingWorkTime; + + @ApiModelProperty(value = "接地网照片", example = "https://123.png,https://456.png", notes = "接地网照片") + @TableField(exist = false) + private String groundingGridImages; + + @ApiModelProperty(value = "导线阻值1", example = "1.23", notes = "导线阻值1") + @TableField(exist = false) + private String wireResistanceValue1; + + @ApiModelProperty(value = "导线阻值1 是否不导通", example = "0导通,1不导通,默认导通", notes = "导线阻值1 是否不导通") + @TableField(exist = false) + private String wireResistanceValue1BreakOver; + + @ApiModelProperty(value = "导线阻值2", example = "1.23", notes = "导线阻值2") + @TableField(exist = false) + private String wireResistanceValue2; + + @ApiModelProperty(value = "导线阻值2 是否不导通", example = "0导通,1不导通,默认导通", notes = "导线阻值2 是否不导通") + @TableField(exist = false) + private String wireResistanceValue2BreakOver; + + @ApiModelProperty(value = "导线阻值1照片", example = "https://123.png,https://456.png", notes = "导线阻值1照片") + @TableField(exist = false) + private String wireResistanceImages1; + + @ApiModelProperty(value = "导线阻值2照片", example = "https://123.png,https://456.png", notes = "导线阻值2照片") + @TableField(exist = false) + private String wireResistanceImages2; + + @ApiModelProperty(value = "检测员风机SPD防雷模块照片", example = "https://123.png,https://456.png", notes = "检测员风机SPD防雷模块照片") + @TableField(exist = false) + private String flyqjcsdg_0_Images; + + @ApiModelProperty(value = "检测员风机SPD防雷模块描述", example = "风机SPD防雷模块描述风机SPD防雷模块架避雷针描述", notes = "检测员风机SPD防雷模块描述") + @TableField(exist = false) + private String flyqjcsdg_0_Desc; + + @ApiModelProperty(value = "检测员箱变SPD防雷模块照片", example = "https://123.png,https://456.png", notes = "检测员箱变SPD防雷模块照片") + @TableField(exist = false) + private String flyqjcsdg_1_Images; + + @ApiModelProperty(value = "检测员箱变SPD防雷模块描述", example = "箱变SPD防雷模块描述箱变SPD防雷模块架避雷针描述", notes = "检测员箱变SPD防雷模块描述") + @TableField(exist = false) + private String flyqjcsdg_1_Desc; + + @ApiModelProperty(value = "检测员塔底变流柜SPD防雷模块照片", example = "https://123.png,https://456.png", notes = "检测员塔底变流柜SPD防雷模块照片") + @TableField(exist = false) + private String flyqjcsdg_2_Images; + + @ApiModelProperty(value = "检测员塔底变流柜SPD防雷模块描述", example = "塔底变流柜SPD防雷模块描述塔底变流柜SPD防雷模块架避雷针描述", notes = "检测员塔底变流柜SPD防雷模块描述") + @TableField(exist = false) + private String flyqjcsdg_2_Desc; + + @ApiModelProperty(value = "检测员机舱控制柜SPD防雷模块照片", example = "https://123.png,https://456.png", notes = "检测员机舱控制柜SPD防雷模块照片") + @TableField(exist = false) + private String flyqjcsdg_3_Images; + + @ApiModelProperty(value = "检测员机舱控制柜SPD防雷模块描述", example = "机舱控制柜SPD防雷模块描述机舱控制柜SPD防雷模块架避雷针描述", notes = "检测员机舱控制柜SPD防雷模块描述") + @TableField(exist = false) + private String flyqjcsdg_3_Desc; + + @ApiModelProperty(value = "检测员机组连同附属箱变基础接地电阻(附属杆塔)照片", example = "https://123.png,https://456.png", notes = "检测员机组连同附属箱变基础接地电阻(附属杆塔)照片") + @TableField(exist = false) + private String jddzcsdg_0_Images; + + @ApiModelProperty(value = "检测员机组连同附属箱变基础接地电阻(附属杆塔)描述", example = "机组连同附属箱变基础接地电阻(附属杆塔)描述机组连同附属箱变基础接地电阻(附属杆塔)架避雷针描述", notes = "检测员机组连同附属箱变基础接地电阻(附属杆塔)描述") + @TableField(exist = false) + private String jddzcsdg_0_Desc; + + @ApiModelProperty(value = "检测员机组连同附属箱变基础接地电阻(箱变)照片", example = "https://123.png,https://456.png", notes = "检测员机组连同附属箱变基础接地电阻(箱变)照片") + @TableField(exist = false) + private String jddzcsd1_1_Images; + + @ApiModelProperty(value = "检测员机组连同附属箱变基础接地电阻(箱变)描述", example = "机组连同附属箱变基础接地电阻(箱变)描述机组连同附属箱变基础接地电阻(箱变)架避雷针描述", notes = "检测员机组连同附属箱变基础接地电阻(箱变)描述") + @TableField(exist = false) + private String jddzcsd1_1_Desc; + + @ApiModelProperty(value = "检测员机组连同附属箱变基础接地电阻(风机基础)照片", example = "https://123.png,https://456.png", notes = "检测员机组连同附属箱变基础接地电阻(风机基础)照片") + @TableField(exist = false) + private String jddzcsdg_2_Images; + + @ApiModelProperty(value = "检测员机组连同附属箱变基础接地电阻(风机基础)描述", example = "机组连同附属箱变基础接地电阻(风机基础)描述机组连同附属箱变基础接地电阻(风机基础)架避雷针描述", notes = "检测员机组连同附属箱变基础接地电阻(风机基础)描述") + @TableField(exist = false) + private String jddzcsdg_2_Desc; + + @ApiModelProperty(value = "检测员气象架避雷针照片", example = "https://123.png,https://456.png", notes = "检测员气象架避雷针照片") + @TableField(exist = false) + private String ddwcsdg_0_Images; + + @ApiModelProperty(value = "检测员气象架避雷针描述", example = "气象架避雷针描述气象架避雷针架避雷针描述", notes = "检测员气象架避雷针描述") + @TableField(exist = false) + private String ddwcsdg_0_Desc; + + @ApiModelProperty(value = "检测员机舱罩照片", example = "https://123.png,https://456.png", notes = "检测员机舱罩照片") + @TableField(exist = false) + private String ddwcsdg_1_Images; + + @ApiModelProperty(value = "检测员机舱罩描述", example = "机舱罩描述机舱罩架避雷针描述", notes = "检测员机舱罩描述") + @TableField(exist = false) + private String ddwcsdg_1_Desc; + + @ApiModelProperty(value = "检测员发电机照片", example = "https://123.png,https://456.png", notes = "检测员发电机照片") + @TableField(exist = false) + private String ddwcsdg_2_Images; + + @ApiModelProperty(value = "检测员发电机描述", example = "发电机描述发电机架避雷针描述", notes = "检测员发电机描述") + @TableField(exist = false) + private String ddwcsdg_2_Desc; + + @ApiModelProperty(value = "检测员齿轮箱照片", example = "https://123.png,https://456.png", notes = "检测员齿轮箱照片") + @TableField(exist = false) + private String ddwcsdg_3_Images; + + @ApiModelProperty(value = "检测员齿轮箱描述", example = "齿轮箱描述齿轮箱架避雷针描述", notes = "检测员齿轮箱描述") + @TableField(exist = false) + private String ddwcsdg_3_Desc; + + @ApiModelProperty(value = "检测员叶轮碳刷照片", example = "https://123.png,https://456.png", notes = "检测员叶轮碳刷照片") + @TableField(exist = false) + private String ddwcsdg_4_Images; + + @ApiModelProperty(value = "检测员叶轮碳刷描述", example = "叶轮碳刷描述叶轮碳刷架避雷针描述", notes = "检测员叶轮碳刷描述") + @TableField(exist = false) + private String ddwcsdg_4_Desc; + + @ApiModelProperty(value = "检测员叶根1照片", example = "https://123.png,https://456.png", notes = "检测员叶根1照片") + @TableField(exist = false) + private String ddwcsdg_5_Images; + + @ApiModelProperty(value = "检测员叶根1描述", example = "叶根1描述叶根1架避雷针描述", notes = "检测员叶根1描述") + @TableField(exist = false) + private String ddwcsdg_5_Desc; + + @ApiModelProperty(value = "检测员叶根2照片", example = "https://123.png,https://456.png", notes = "检测员叶根2照片") + @TableField(exist = false) + private String ddwcsdg_6_Images; + + @ApiModelProperty(value = "检测员叶根2描述", example = "叶根2描述叶根2架避雷针描述", notes = "检测员叶根2描述") + @TableField(exist = false) + private String ddwcsdg_6_Desc; + + @ApiModelProperty(value = "检测员叶根3照片", example = "https://123.png,https://456.png", notes = "检测员叶根3照片") + @TableField(exist = false) + private String ddwcsdg_7_Images; + + @ApiModelProperty(value = "检测员叶根3描述", example = "叶根3描述叶根3架避雷针描述", notes = "检测员叶根3描述") + @TableField(exist = false) + private String ddwcsdg_7_Desc; + + @ApiModelProperty(value = "检测员轮毂变桨控制柜照片", example = "https://123.png,https://456.png", notes = "检测员轮毂变桨控制柜照片") + @TableField(exist = false) + private String ddwcsdg_8_Images; + + @ApiModelProperty(value = "检测员轮毂变桨控制柜描述", example = "轮毂变桨控制柜描述轮毂变桨控制柜架避雷针描述", notes = "检测员轮毂变桨控制柜描述") + @TableField(exist = false) + private String ddwcsdg_8_Desc; + + @ApiModelProperty(value = "检测员风电机组机舱控制柜照片", example = "https://123.png,https://456.png", notes = "检测员风电机组机舱控制柜照片") + @TableField(exist = false) + private String ddwcsdg_9_Images; + + @ApiModelProperty(value = "检测员风电机组机舱控制柜描述", example = "风电机组机舱控制柜描述风电机组机舱控制柜架避雷针描述", notes = "检测员风电机组机舱控制柜描述") + @TableField(exist = false) + private String ddwcsdg_9_Desc; + + @ApiModelProperty(value = "检测员风电机组塔底主控柜照片", example = "https://123.png,https://456.png", notes = "检测员风电机组塔底主控柜照片") + @TableField(exist = false) + private String ddwcsdg_10_Images; + + @ApiModelProperty(value = "检测员风电机组塔底主控柜描述", example = "风电机组塔底主控柜描述风电机组塔底主控柜架避雷针描述", notes = "检测员风电机组塔底主控柜描述") + @TableField(exist = false) + private String ddwcsdg_10_Desc; + + @ApiModelProperty(value = "检测员风电机组塔底变流柜照片", example = "https://123.png,https://456.png", notes = "检测员风电机组塔底变流柜照片") + @TableField(exist = false) + private String ddwcsdg_11_Images; + + @ApiModelProperty(value = "检测员风电机组塔底变流柜描述", example = "风电机组塔底变流柜描述风电机组塔底变流柜架避雷针描述", notes = "检测员风电机组塔底变流柜描述") + @TableField(exist = false) + private String ddwcsdg_11_Desc; + + @ApiModelProperty(value = "检测员风电机组水冷控制柜照片", example = "https://123.png,https://456.png", notes = "检测员风电机组水冷控制柜照片") + @TableField(exist = false) + private String ddwcsdg_12_Images; + + @ApiModelProperty(value = "检测员风电机组水冷控制柜描述", example = "风电机组水冷控制柜描述风电机组水冷控制柜架避雷针描述", notes = "检测员风电机组水冷控制柜描述") + @TableField(exist = false) + private String ddwcsdg_12_Desc; + + @ApiModelProperty(value = "检测员叶片1照片", example = "https://123.png,https://456.png", notes = "检测员叶片1照片") + @TableField(exist = false) + private String ddwcsdg_13_Images; + + @ApiModelProperty(value = "检测员叶片1描述", example = "叶片1描述叶片1架避雷针描述", notes = "检测员叶片1描述") + @TableField(exist = false) + private String ddwcsdg_13_Desc; + + @ApiModelProperty(value = "检测员叶片2照片", example = "https://123.png,https://456.png", notes = "检测员叶片2照片") + @TableField(exist = false) + private String ddwcsdg_14_Images; + + @ApiModelProperty(value = "检测员叶片2描述", example = "叶片2描述叶片2架避雷针描述", notes = "检测员叶片2描述") + @TableField(exist = false) + private String ddwcsdg_14_Desc; + + @ApiModelProperty(value = "检测员叶片3照片", example = "https://123.png,https://456.png", notes = "检测员叶片3照片") + @TableField(exist = false) + private String ddwcsdg_15_Images; + + @ApiModelProperty(value = "检测员叶片3描述", example = "叶片3描述叶片3架避雷针描述", notes = "检测员叶片3描述") + @TableField(exist = false) + private String ddwcsdg_15_Desc; + + @ApiModelProperty(value = "检测员轮毂内叶片1根部至塔底接地环照片", example = "https://123.png,https://456.png", notes = "检测员轮毂内叶片1根部至塔底接地环照片") + @TableField(exist = false) + private String fjyltddzcsdg_0_Images; + + @ApiModelProperty(value = "检测员轮毂内叶片1根部至塔底接地环描述", example = "轮毂内叶片1根部至塔底接地环描述轮毂内叶片1根部至塔底接地环架避雷针描述", notes = "检测员轮毂内叶片1根部至塔底接地环描述") + @TableField(exist = false) + private String fjyltddzcsdg_0_Desc; + + @ApiModelProperty(value = "检测员轮毂内叶片2根部至塔底接地环照片", example = "https://123.png,https://456.png", notes = "检测员轮毂内叶片2根部至塔底接地环照片") + @TableField(exist = false) + private String fjyltddzcsdg_1_Images; + + @ApiModelProperty(value = "检测员轮毂内叶片2根部至塔底接地环描述", example = "轮毂内叶片2根部至塔底接地环描述轮毂内叶片2根部至塔底接地环架避雷针描述", notes = "检测员轮毂内叶片2根部至塔底接地环描述") + @TableField(exist = false) + private String fjyltddzcsdg_1_Desc; + + @ApiModelProperty(value = "检测员轮毂内叶片3根部至塔底接地环照片", example = "https://123.png,https://456.png", notes = "检测员轮毂内叶片3根部至塔底接地环照片") + @TableField(exist = false) + private String fjyltddzcsdg_2_Images; + + @ApiModelProperty(value = "检测员轮毂内叶片3根部至塔底接地环描述", example = "轮毂内叶片3根部至塔底接地环描述轮毂内叶片3根部至塔底接地环架避雷针描述", notes = "检测员轮毂内叶片3根部至塔底接地环描述") + @TableField(exist = false) + private String fjyltddzcsdg_2_Desc; + + @ApiModelProperty(value = "检测员叶片1叶尖至塔底接地环照片", example = "https://123.png,https://456.png", notes = "检测员叶片1叶尖至塔底接地环照片") + @TableField(exist = false) + private String fjyltddzcsdg_3_Images; + + @ApiModelProperty(value = "检测员叶片1叶尖至塔底接地环描述", example = "叶片1叶尖至塔底接地环描述叶片1叶尖至塔底接地环架避雷针描述", notes = "检测员叶片1叶尖至塔底接地环描述") + @TableField(exist = false) + private String fjyltddzcsdg_3_Desc; + + @ApiModelProperty(value = "检测员叶片2叶尖至塔底接地环照片", example = "https://123.png,https://456.png", notes = "检测员叶片2叶尖至塔底接地环照片") + @TableField(exist = false) + private String fjyltddzcsdg_4_Images; + + @ApiModelProperty(value = "检测员叶片2叶尖至塔底接地环描述", example = "叶片2叶尖至塔底接地环描述叶片2叶尖至塔底接地环架避雷针描述", notes = "检测员叶片2叶尖至塔底接地环描述") + @TableField(exist = false) + private String fjyltddzcsdg_4_Desc; + + @ApiModelProperty(value = "检测员叶片3叶尖至塔底接地环照片", example = "https://123.png,https://456.png", notes = "检测员叶片3叶尖至塔底接地环照片") + @TableField(exist = false) + private String fjyltddzcsdg_5_Images; + + @ApiModelProperty(value = "检测员叶片3叶尖至塔底接地环描述", example = "叶片3叶尖至塔底接地环描述叶片3叶尖至塔底接地环架避雷针描述", notes = "检测员叶片3叶尖至塔底接地环描述") + @TableField(exist = false) + private String fjyltddzcsdg_5_Desc; + + @ApiModelProperty(value = "检测员叶片1根部到叶片1叶尖照片", example = "https://123.png,https://456.png", notes = "检测员叶片1根部到叶片1叶尖照片") + @TableField(exist = false) + private String ypfltddzcsdg_0_Images; + + @ApiModelProperty(value = "检测员叶片1根部到叶片1叶尖描述", example = "叶片1根部到叶片1叶尖描述叶片1根部到叶片1叶尖架避雷针描述", notes = "检测员叶片1根部到叶片1叶尖描述") + @TableField(exist = false) + private String ypfltddzcsdg_0_Desc; + + @ApiModelProperty(value = "检测员叶片2根部到叶片2叶尖照片", example = "https://123.png,https://456.png", notes = "检测员叶片2根部到叶片2叶尖照片") + @TableField(exist = false) + private String ypfltddzcsdg_1_Images; + + @ApiModelProperty(value = "检测员叶片2根部到叶片2叶尖描述", example = "叶片2根部到叶片2叶尖描述叶片2根部到叶片2叶尖架避雷针描述", notes = "检测员叶片2根部到叶片2叶尖描述") + @TableField(exist = false) + private String ypfltddzcsdg_1_Desc; + + @ApiModelProperty(value = "检测员叶片3根部到叶片3叶尖照片", example = "https://123.png,https://456.png", notes = "检测员叶片3根部到叶片3叶尖照片") + @TableField(exist = false) + private String ypfltddzcsdg_2_Images; + + @ApiModelProperty(value = "检测员叶片3根部到叶片3叶尖描述", example = "叶片3根部到叶片3叶尖描述叶片3根部到叶片3叶尖架避雷针描述", notes = "检测员叶片3根部到叶片3叶尖描述") + @TableField(exist = false) + private String ypfltddzcsdg_2_Desc; +//----------------------------------------------登高结束---------------------------------------------------------------------------------- + +//----------------------------------------------抄表---------------------------------------------------------------------------------- +//------------------------防雷元器件测试 + @ApiModelProperty(value = "抄表风机SPD防雷模块照片1", example = "https://123.png,https://456.png", notes = "抄表风机SPD防雷模块照片1") + @TableField(exist = false) + private String flyqjcs_0_0_Images; + + @ApiModelProperty(value = "抄表风机SPD防雷模块电流1", example = "0.3", notes = "抄表风机SPD防雷模块电流1") + @TableField(exist = false) + private String flyqjcs_0_0_Value; + + @ApiModelProperty(value = "抄表风机SPD防雷模块照片1", example = "https://123.png,https://456.png", notes = "抄表风机SPD防雷模块照片1") + @TableField(exist = false) + private String flyqjcs_0_1_Images; + + @ApiModelProperty(value = "抄表风机SPD防雷模块电流2", example = "0.3", notes = "抄表风机SPD防雷模块电流2") + @TableField(exist = false) + private String flyqjcs_0_1_Value; + + @ApiModelProperty(value = "抄表风机SPD防雷模块照片2", example = "https://123.png,https://456.png", notes = "抄表风机SPD防雷模块照片2") + @TableField(exist = false) + private String flyqjcs_0_2_Images; + + @ApiModelProperty(value = "抄表风机SPD防雷模块电流2", example = "0.3", notes = "抄表风机SPD防雷模块电流2") + @TableField(exist = false) + private String flyqjcs_0_2_Value; + + @ApiModelProperty(value = "抄表风机SPD防雷模块 启动电压异常", example = "0正常,1不正常,默认正常", notes = "抄表风机SPD防雷模块 启动电压异常") + @TableField(exist = false) + private String flyqjcs_0_BreakOver; + + @ApiModelProperty(value = "抄表风机SPD防雷模块 平行数据个数默认1", example = "默认1", notes = "抄表风机SPD防雷模块 平行数据个数默认1") + @TableField(exist = false) + private String flyqjcs_0_Num; + + @ApiModelProperty(value = "抄表风机SPD防雷模块 电流平均值", example = "0.3", notes = "抄表风机SPD防雷模块 电流平均值") + @TableField(exist = false) + private String flyqjcs_0_MeanValue; + + @ApiModelProperty(value = "抄表箱变SPD防雷模块照片1", example = "https://123.png,https://456.png", notes = "抄表箱变SPD防雷模块照片1") + @TableField(exist = false) + private String flyqjcs_1_0_Images; + + @ApiModelProperty(value = "抄表箱变SPD防雷模块电流1", example = "0.3", notes = "抄表箱变SPD防雷模块电流1") + @TableField(exist = false) + private String flyqjcs_1_0_Value; + + @ApiModelProperty(value = "抄表箱变SPD防雷模块照片2", example = "https://123.png,https://456.png", notes = "抄表箱变SPD防雷模块照片2") + @TableField(exist = false) + private String flyqjcs_1_1_Images; + + @ApiModelProperty(value = "抄表箱变SPD防雷模块电流2", example = "0.3", notes = "抄表箱变SPD防雷模块电流2") + @TableField(exist = false) + private String flyqjcs_1_1_Value; + + @ApiModelProperty(value = "抄表箱变SPD防雷模块照片3", example = "https://123.png,https://456.png", notes = "抄表箱变SPD防雷模块照片3") + @TableField(exist = false) + private String flyqjcs_1_2_Images; + + @ApiModelProperty(value = "抄表箱变SPD防雷模块电流3", example = "0.3", notes = "抄表箱变SPD防雷模块电流3") + @TableField(exist = false) + private String flyqjcs_1_2_Value; + + @ApiModelProperty(value = "抄表箱变SPD防雷模块 启动电压异常", example = "0正常,1不正常,默认正常", notes = "抄表箱变SPD防雷模块 启动电压异常") + @TableField(exist = false) + private String flyqjcs_1_BreakOver; + + @ApiModelProperty(value = "抄表箱变SPD防雷模块 平行数据个数默认1", example = "默认1", notes = "抄表箱变SPD防雷模块 平行数据个数默认1") + @TableField(exist = false) + private String flyqjcs_1_Num; + + @ApiModelProperty(value = "抄表箱变SPD防雷模块 电流平均值", example = "0.3", notes = "抄表箱变SPD防雷模块 电流平均值") + @TableField(exist = false) + private String flyqjcs_1_MeanValue; + + @ApiModelProperty(value = "抄表塔底变流柜SPD防雷模块照片1", example = "https://123.png,https://456.png", notes = "抄表塔底变流柜SPD防雷模块照片1") + @TableField(exist = false) + private String flyqjcs_2_0_Images; + + @ApiModelProperty(value = "抄表塔底变流柜SPD防雷模块电流1", example = "0.3", notes = "抄表塔底变流柜SPD防雷模块电流1") + @TableField(exist = false) + private String flyqjcs_2_0_Value; + + @ApiModelProperty(value = "抄表塔底变流柜SPD防雷模块照片2", example = "https://123.png,https://456.png", notes = "抄表塔底变流柜SPD防雷模块照片2") + @TableField(exist = false) + private String flyqjcs_2_1_Images; + + @ApiModelProperty(value = "抄表塔底变流柜SPD防雷模块电流2", example = "0.3", notes = "抄表塔底变流柜SPD防雷模块电流2") + @TableField(exist = false) + private String flyqjcs_2_1_Value; + + @ApiModelProperty(value = "抄表塔底变流柜SPD防雷模块照片3", example = "https://123.png,https://456.png", notes = "抄表塔底变流柜SPD防雷模块照片3") + @TableField(exist = false) + private String flyqjcs_2_2_Images; + + @ApiModelProperty(value = "抄表塔底变流柜SPD防雷模块电流3", example = "0.3", notes = "抄表塔底变流柜SPD防雷模块电流3") + @TableField(exist = false) + private String flyqjcs_2_2_Value; + + @ApiModelProperty(value = "抄表塔底变流柜SPD防雷模块 启动电压异常", example = "0正常,1不正常,默认正常", notes = "抄表塔底变流柜SPD防雷模块 启动电压异常") + @TableField(exist = false) + private String flyqjcs_2_BreakOver; + + @ApiModelProperty(value = "抄表塔底变流柜SPD防雷模块 平行数据个数默认1", example = "默认1", notes = "抄表塔底变流柜SPD防雷模块 平行数据个数默认1") + @TableField(exist = false) + private String flyqjcs_2_Num; + + @ApiModelProperty(value = "抄表塔底变流柜SPD防雷模块 电流平均值", example = "0.3", notes = "抄表塔底变流柜SPD防雷模块 电流平均值") + @TableField(exist = false) + private String flyqjcs_2_MeanValue; + + @ApiModelProperty(value = "抄表机舱控制柜SPD防雷模块照片1", example = "https://123.png,https://456.png", notes = "抄表机舱控制柜SPD防雷模块照片1") + @TableField(exist = false) + private String flyqjcs_3_0_Images; + + @ApiModelProperty(value = "抄表机舱控制柜SPD防雷模块电流1", example = "0.3", notes = "抄表机舱控制柜SPD防雷模块电流1") + @TableField(exist = false) + private String flyqjcs_3_0_Value; + + @ApiModelProperty(value = "抄表机舱控制柜SPD防雷模块照片2", example = "https://123.png,https://456.png", notes = "抄表机舱控制柜SPD防雷模块照片2") + @TableField(exist = false) + private String flyqjcs_3_1_Images; + + @ApiModelProperty(value = "抄表机舱控制柜SPD防雷模块电流2", example = "0.3", notes = "抄表机舱控制柜SPD防雷模块电流2") + @TableField(exist = false) + private String flyqjcs_3_1_Value; + + @ApiModelProperty(value = "抄表机舱控制柜SPD防雷模块照片3", example = "https://123.png,https://456.png", notes = "抄表机舱控制柜SPD防雷模块照片3") + @TableField(exist = false) + private String flyqjcs_3_2_Images; + + @ApiModelProperty(value = "抄表机舱控制柜SPD防雷模块电流3", example = "0.3", notes = "抄表机舱控制柜SPD防雷模块电流3") + @TableField(exist = false) + private String flyqjcs_3_2_Value; + + @ApiModelProperty(value = "抄表机舱控制柜SPD防雷模块 启动电压异常", example = "0正常,1不正常,默认正常", notes = "抄表机舱控制柜SPD防雷模块 启动电压异常") + @TableField(exist = false) + private String flyqjcs_3_BreakOver; + + @ApiModelProperty(value = "抄表机舱控制柜SPD防雷模块 平行数据个数默认1", example = "默认1", notes = "抄表机舱控制柜SPD防雷模块 平行数据个数默认1") + @TableField(exist = false) + private String flyqjcs_3_Num; + + @ApiModelProperty(value = "抄表机舱控制柜SPD防雷模块 电流平均值", example = "0.3", notes = "抄表机舱控制柜SPD防雷模块 电流平均值") + @TableField(exist = false) + private String flyqjcs_3_MeanValue; + + + + + + + +//----------------------接地电阻测试 + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(附属杆塔) 导线阻值照片1", example = "https://123.png,https://456.png", notes = "抄表机组连同附属箱变基础接地电阻(附属杆塔) 导线阻值照片1") + @TableField(exist = false) + private String jddzcs_0_0_Images; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(附属杆塔) 导线阻值1", example = "2.2", notes = "抄表机组连同附属箱变基础接地电阻(附属杆塔) 导线阻值1") + @TableField(exist = false) + private String jddzcs_0_0_Value; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(附属杆塔) 实际电阻值1", example = "2.2", notes = "抄表机组连同附属箱变基础接地电阻(附属杆塔) 实际电阻值1") + @TableField(exist = false) + private String jddzcs_0_0_RealValue; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(附属杆塔) 导线阻值照片2", example = "https://123.png,https://456.png", notes = "抄表机组连同附属箱变基础接地电阻(附属杆塔) 导线阻值照片2") + @TableField(exist = false) + private String jddzcs_0_1_Images; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(附属杆塔) 导线阻值2", example = "2.2", notes = "抄表机组连同附属箱变基础接地电阻(附属杆塔) 导线阻值2") + @TableField(exist = false) + private String jddzcs_0_1_Value; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(附属杆塔) 实际电阻值2", example = "2.2", notes = "抄表机组连同附属箱变基础接地电阻(附属杆塔) 实际电阻值2") + @TableField(exist = false) + private String jddzcs_0_1_RealValue; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(附属杆塔) 导线阻值照片3", example = "https://123.png,https://456.png", notes = "抄表机组连同附属箱变基础接地电阻(附属杆塔) 导线阻值照片3") + @TableField(exist = false) + private String jddzcs_0_2_Images; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(附属杆塔) 导线阻值3", example = "2.2", notes = "抄表机组连同附属箱变基础接地电阻(附属杆塔) 导线阻值3") + @TableField(exist = false) + private String jddzcs_0_2_Value; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(附属杆塔) 实际电阻值3", example = "2.2", notes = "抄表机组连同附属箱变基础接地电阻(附属杆塔) 实际电阻值3") + @TableField(exist = false) + private String jddzcs_0_2_RealValue; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(附属杆塔) 是否不导通", example = "0导通,1不导通,默认导通", notes = "抄表机组连同附属箱变基础接地电阻(附属杆塔) 是否不导通") + @TableField(exist = false) + private String jddzcs_0_BreakOver; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(附属杆塔) 平行数据个数默认1", example = "默认1", notes = "抄表机组连同附属箱变基础接地电阻(附属杆塔) 平行数据个数默认1") + @TableField(exist = false) + private String jddzcs_0_Num; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(附属杆塔) 电阻平均值", example = "0.3", notes = "抄表机组连同附属箱变基础接地电阻(附属杆塔) 电阻平均值") + @TableField(exist = false) + private String jddzcs_0_MeanValue; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(箱变) 导线阻值照片1", example = "https://123.png,https://456.png", notes = "抄表机组连同附属箱变基础接地电阻(箱变) 导线阻值照片1") + @TableField(exist = false) + private String jddzcs_1_0_Images; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(箱变) 导线阻值1", example = "2.2", notes = "抄表机组连同附属箱变基础接地电阻(箱变) 导线阻值1") + @TableField(exist = false) + private String jddzcs_1_0_Value; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(箱变) 实际电阻值1", example = "2.2", notes = "抄表机组连同附属箱变基础接地电阻(箱变) 实际电阻值1") + @TableField(exist = false) + private String jddzcs_1_0_RealValue; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(箱变) 导线阻值照片2", example = "https://123.png,https://456.png", notes = "抄表机组连同附属箱变基础接地电阻(箱变) 导线阻值照片2") + @TableField(exist = false) + private String jddzcs_1_1_Images; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(箱变) 导线阻值2", example = "2.2", notes = "抄表机组连同附属箱变基础接地电阻(箱变) 导线阻值2") + @TableField(exist = false) + private String jddzcs_1_1_Value; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(箱变) 实际电阻值2", example = "2.2", notes = "抄表机组连同附属箱变基础接地电阻(箱变) 实际电阻值2") + @TableField(exist = false) + private String jddzcs_1_1_RealValue; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(箱变) 导线阻值照片3", example = "https://123.png,https://456.png", notes = "抄表机组连同附属箱变基础接地电阻(箱变) 导线阻值照片3") + @TableField(exist = false) + private String jddzcs_1_2_Images; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(箱变) 导线阻值3", example = "2.2", notes = "抄表机组连同附属箱变基础接地电阻(箱变) 导线阻值3") + @TableField(exist = false) + private String jddzcs_1_2_Value; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(箱变) 实际电阻值3", example = "2.2", notes = "抄表机组连同附属箱变基础接地电阻(箱变) 实际电阻值3") + @TableField(exist = false) + private String jddzcs_1_2_RealValue; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(箱变) 是否不导通", example = "0导通,1不导通,默认导通", notes = "抄表机组连同附属箱变基础接地电阻(箱变) 是否不导通") + @TableField(exist = false) + private String jddzcs_1_BreakOver; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(箱变) 平行数据个数默认1", example = "默认1", notes = "抄表机组连同附属箱变基础接地电阻(箱变) 平行数据个数默认1") + @TableField(exist = false) + private String jddzcs_1_Num; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(箱变) 电阻平均值", example = "0.3", notes = "抄表机组连同附属箱变基础接地电阻(箱变) 电阻平均值") + @TableField(exist = false) + private String jddzcs_1_MeanValue; + + + + + + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(风机基础) 导线阻值照片1", example = "https://123.png,https://456.png", notes = "抄表机组连同附属箱变基础接地电阻(风机基础) 导线阻值照片1") + @TableField(exist = false) + private String jddzcs_2_0_Images; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(风机基础) 导线阻值1", example = "2.2", notes = "抄表机组连同附属箱变基础接地电阻(风机基础) 导线阻值1") + @TableField(exist = false) + private String jddzcs_2_0_Value; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(风机基础) 实际电阻值1", example = "2.2", notes = "抄表机组连同附属箱变基础接地电阻(风机基础) 实际电阻值1") + @TableField(exist = false) + private String jddzcs_2_0_RealValue; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(风机基础) 导线阻值照片2", example = "https://123.png,https://456.png", notes = "抄表机组连同附属箱变基础接地电阻(风机基础) 导线阻值照片2") + @TableField(exist = false) + private String jddzcs_2_1_Images; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(风机基础) 导线阻值2", example = "2.2", notes = "抄表机组连同附属箱变基础接地电阻(风机基础) 导线阻值2") + @TableField(exist = false) + private String jddzcs_2_1_Value; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(风机基础) 实际电阻值2", example = "2.2", notes = "抄表机组连同附属箱变基础接地电阻(风机基础) 实际电阻值2") + @TableField(exist = false) + private String jddzcs_2_1_RealValue; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(风机基础) 导线阻值照片3", example = "https://123.png,https://456.png", notes = "抄表机组连同附属箱变基础接地电阻(风机基础) 导线阻值照片3") + @TableField(exist = false) + private String jddzcs_2_2_Images; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(风机基础) 导线阻值3", example = "2.2", notes = "抄表机组连同附属箱变基础接地电阻(风机基础) 导线阻值3") + @TableField(exist = false) + private String jddzcs_2_2_Value; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(风机基础) 实际电阻值3", example = "2.2", notes = "抄表机组连同附属箱变基础接地电阻(风机基础) 实际电阻值3") + @TableField(exist = false) + private String jddzcs_2_2_RealValue; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(风机基础) 是否不导通", example = "0导通,1不导通,默认导通", notes = "抄表机组连同附属箱变基础接地电阻(风机基础) 是否不导通") + @TableField(exist = false) + private String jddzcs_2_BreakOver; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(风机基础) 平行数据个数默认1", example = "默认1", notes = "抄表机组连同附属箱变基础接地电阻(风机基础) 平行数据个数默认1") + @TableField(exist = false) + private String jddzcs_2_Num; + + @ApiModelProperty(value = "抄表机组连同附属箱变基础接地电阻(风机基础) 电阻平均值", example = "0.3", notes = "抄表机组连同附属箱变基础接地电阻(风机基础) 电阻平均值") + @TableField(exist = false) + private String jddzcs_2_MeanValue; + + + + +//----------------------等电位测试(至塔下防雷接地环) + + @ApiModelProperty(value = "抄表气象架避雷针 导线阻值照片1", example = "https://123.png,https://456.png", notes = "抄表气象架避雷针 导线阻值照片1") + @TableField(exist = false) + private String ddwcs_0_0_Images; + + @ApiModelProperty(value = "抄表气象架避雷针 导线阻值1", example = "2.2", notes = "抄表气象架避雷针 导线阻值1") + @TableField(exist = false) + private String ddwcs_0_0_Value; + + @ApiModelProperty(value = "抄表气象架避雷针 实际电阻值1", example = "2.2", notes = "抄表气象架避雷针 实际电阻值1") + @TableField(exist = false) + private String ddwcs_0_0_RealValue; + + @ApiModelProperty(value = "抄表气象架避雷针 导线阻值照片2", example = "https://123.png,https://456.png", notes = "抄表气象架避雷针 导线阻值照片2") + @TableField(exist = false) + private String ddwcs_0_1_Images; + + @ApiModelProperty(value = "抄表气象架避雷针 导线阻值2", example = "2.2", notes = "抄表气象架避雷针 导线阻值2") + @TableField(exist = false) + private String ddwcs_0_1_Value; + + @ApiModelProperty(value = "抄表气象架避雷针 实际电阻值2", example = "2.2", notes = "抄表气象架避雷针 实际电阻值2") + @TableField(exist = false) + private String ddwcs_0_1_RealValue; + + @ApiModelProperty(value = "抄表气象架避雷针 导线阻值照片3", example = "https://123.png,https://456.png", notes = "抄表气象架避雷针 导线阻值照片3") + @TableField(exist = false) + private String ddwcs_0_2_Images; + + @ApiModelProperty(value = "抄表气象架避雷针 导线阻值3", example = "2.2", notes = "抄表气象架避雷针 导线阻值3") + @TableField(exist = false) + private String ddwcs_0_2_Value; + + @ApiModelProperty(value = "抄表气象架避雷针 实际电阻值3", example = "2.2", notes = "抄表气象架避雷针 实际电阻值3") + @TableField(exist = false) + private String ddwcs_0_2_RealValue; + + @ApiModelProperty(value = "抄表气象架避雷针 是否不导通", example = "0导通,1不导通,默认导通", notes = "抄表气象架避雷针 是否不导通") + @TableField(exist = false) + private String ddwcs_0_BreakOver; + + @ApiModelProperty(value = "抄表气象架避雷针 平行数据个数默认1", example = "默认1", notes = "抄表气象架避雷针 平行数据个数默认1") + @TableField(exist = false) + private String ddwcs_0_Num; + + @ApiModelProperty(value = "抄表气象架避雷针 电阻平均值", example = "0.3", notes = "抄表气象架避雷针 电阻平均值") + @TableField(exist = false) + private String ddwcs_0_MeanValue; + + @ApiModelProperty(value = "抄表机舱罩 导线阻值照片1", example = "https://123.png,https://456.png", notes = "抄表机舱罩 导线阻值照片1") + @TableField(exist = false) + private String ddwcs_1_0_Images; + + @ApiModelProperty(value = "抄表机舱罩 导线阻值1", example = "2.2", notes = "抄表机舱罩 导线阻值1") + @TableField(exist = false) + private String ddwcs_1_0_Value; + + @ApiModelProperty(value = "抄表机舱罩 实际电阻值1", example = "2.2", notes = "抄表机舱罩 实际电阻值1") + @TableField(exist = false) + private String ddwcs_1_0_RealValue; + + @ApiModelProperty(value = "抄表机舱罩 导线阻值照片2", example = "https://123.png,https://456.png", notes = "抄表机舱罩 导线阻值照片2") + @TableField(exist = false) + private String ddwcs_1_1_Images; + + @ApiModelProperty(value = "抄表机舱罩 导线阻值2", example = "2.2", notes = "抄表机舱罩 导线阻值2") + @TableField(exist = false) + private String ddwcs_1_1_Value; + + @ApiModelProperty(value = "抄表机舱罩 实际电阻值2", example = "2.2", notes = "抄表机舱罩 实际电阻值2") + @TableField(exist = false) + private String ddwcs_1_1_RealValue; + + @ApiModelProperty(value = "抄表机舱罩 导线阻值照片3", example = "https://123.png,https://456.png", notes = "抄表机舱罩 导线阻值照片3") + @TableField(exist = false) + private String ddwcs_1_2_Images; + + @ApiModelProperty(value = "抄表机舱罩 导线阻值3", example = "2.2", notes = "抄表机舱罩 导线阻值3") + @TableField(exist = false) + private String ddwcs_1_2_Value; + + @ApiModelProperty(value = "抄表机舱罩 实际电阻值3", example = "2.2", notes = "抄表机舱罩 实际电阻值3") + @TableField(exist = false) + private String ddwcs_1_2_RealValue; + + @ApiModelProperty(value = "抄表机舱罩 是否不导通", example = "0导通,1不导通,默认导通", notes = "抄表机舱罩 是否不导通") + @TableField(exist = false) + private String ddwcs_1_BreakOver; + + @ApiModelProperty(value = "抄表机舱罩 平行数据个数默认1", example = "默认1", notes = "抄表机舱罩 平行数据个数默认1") + @TableField(exist = false) + private String ddwcs_1_Num; + + @ApiModelProperty(value = "抄表机舱罩 电阻平均值", example = "0.3", notes = "抄表机舱罩 电阻平均值") + @TableField(exist = false) + private String ddwcs_1_MeanValue; + + @ApiModelProperty(value = "抄表发电机 导线阻值照片1", example = "https://123.png,https://456.png", notes = "抄表发电机 导线阻值照片1") + @TableField(exist = false) + private String ddwcs_2_0_Images; + + @ApiModelProperty(value = "抄表发电机 导线阻值1", example = "2.2", notes = "抄表发电机 导线阻值1") + @TableField(exist = false) + private String ddwcs_2_0_Value; + + @ApiModelProperty(value = "抄表发电机 实际电阻值1", example = "2.2", notes = "抄表发电机 实际电阻值1") + @TableField(exist = false) + private String ddwcs_2_0_RealValue; + + @ApiModelProperty(value = "抄表发电机 导线阻值照片2", example = "https://123.png,https://456.png", notes = "抄表发电机 导线阻值照片2") + @TableField(exist = false) + private String ddwcs_2_1_Images; + + @ApiModelProperty(value = "抄表发电机 导线阻值2", example = "2.2", notes = "抄表发电机 导线阻值2") + @TableField(exist = false) + private String ddwcs_2_1_Value; + + @ApiModelProperty(value = "抄表发电机 实际电阻值2", example = "2.2", notes = "抄表发电机 实际电阻值2") + @TableField(exist = false) + private String ddwcs_2_1_RealValue; + + @ApiModelProperty(value = "抄表发电机 导线阻值照片3", example = "https://123.png,https://456.png", notes = "抄表发电机 导线阻值照片3") + @TableField(exist = false) + private String ddwcs_2_2_Images; + + @ApiModelProperty(value = "抄表发电机 导线阻值3", example = "2.2", notes = "抄表发电机 导线阻值3") + @TableField(exist = false) + private String ddwcs_2_2_Value; + + @ApiModelProperty(value = "抄表发电机 实际电阻值3", example = "2.2", notes = "抄表发电机 实际电阻值3") + @TableField(exist = false) + private String ddwcs_2_2_RealValue; + + @ApiModelProperty(value = "抄表发电机 是否不导通", example = "0导通,1不导通,默认导通", notes = "抄表发电机 是否不导通") + @TableField(exist = false) + private String ddwcs_2_BreakOver; + + @ApiModelProperty(value = "抄表发电机 平行数据个数默认1", example = "默认1", notes = "抄表发电机 平行数据个数默认1") + @TableField(exist = false) + private String ddwcs_2_Num; + + @ApiModelProperty(value = "抄表发电机 电阻平均值", example = "0.3", notes = "抄表发电机 电阻平均值") + @TableField(exist = false) + private String ddwcs_2_MeanValue; + + @ApiModelProperty(value = "抄表齿轮箱 导线阻值照片1", example = "https://123.png,https://456.png", notes = "抄表齿轮箱 导线阻值照片1") + @TableField(exist = false) + private String ddwcs_3_0_Images; + + @ApiModelProperty(value = "抄表齿轮箱 导线阻值1", example = "2.2", notes = "抄表齿轮箱 导线阻值1") + @TableField(exist = false) + private String ddwcs_3_0_Value; + + @ApiModelProperty(value = "抄表齿轮箱 实际电阻值1", example = "2.2", notes = "抄表齿轮箱 实际电阻值1") + @TableField(exist = false) + private String ddwcs_3_0_RealValue; + + @ApiModelProperty(value = "抄表齿轮箱 导线阻值照片2", example = "https://123.png,https://456.png", notes = "抄表齿轮箱 导线阻值照片2") + @TableField(exist = false) + private String ddwcs_3_1_Images; + + @ApiModelProperty(value = "抄表齿轮箱 导线阻值2", example = "2.2", notes = "抄表齿轮箱 导线阻值2") + @TableField(exist = false) + private String ddwcs_3_1_Value; + + @ApiModelProperty(value = "抄表齿轮箱 实际电阻值2", example = "2.2", notes = "抄表齿轮箱 实际电阻值2") + @TableField(exist = false) + private String ddwcs_3_1_RealValue; + + @ApiModelProperty(value = "抄表齿轮箱 导线阻值照片3", example = "https://123.png,https://456.png", notes = "抄表齿轮箱 导线阻值照片3") + @TableField(exist = false) + private String ddwcs_3_2_Images; + + @ApiModelProperty(value = "抄表齿轮箱 导线阻值3", example = "2.2", notes = "抄表齿轮箱 导线阻值3") + @TableField(exist = false) + private String ddwcs_3_2_Value; + + @ApiModelProperty(value = "抄表齿轮箱 实际电阻值3", example = "2.2", notes = "抄表齿轮箱 实际电阻值3") + @TableField(exist = false) + private String ddwcs_3_2_RealValue; + + @ApiModelProperty(value = "抄表齿轮箱 是否不导通", example = "0导通,1不导通,默认导通", notes = "抄表齿轮箱 是否不导通") + @TableField(exist = false) + private String ddwcs_3_BreakOver; + + @ApiModelProperty(value = "抄表齿轮箱 平行数据个数默认1", example = "默认1", notes = "抄表齿轮箱 平行数据个数默认1") + @TableField(exist = false) + private String ddwcs_3_Num; + + @ApiModelProperty(value = "抄表齿轮箱 电阻平均值", example = "0.3", notes = "抄表齿轮箱 电阻平均值") + @TableField(exist = false) + private String ddwcs_3_MeanValue; + + @ApiModelProperty(value = "抄表叶轮碳刷 导线阻值照片1", example = "https://123.png,https://456.png", notes = "抄表叶轮碳刷 导线阻值照片1") + @TableField(exist = false) + private String ddwcs_4_0_Images; + + @ApiModelProperty(value = "抄表叶轮碳刷 导线阻值1", example = "2.2", notes = "抄表叶轮碳刷 导线阻值1") + @TableField(exist = false) + private String ddwcs_4_0_Value; + + @ApiModelProperty(value = "抄表叶轮碳刷 实际电阻值1", example = "2.2", notes = "抄表叶轮碳刷 实际电阻值1") + @TableField(exist = false) + private String ddwcs_4_0_RealValue; + + @ApiModelProperty(value = "抄表叶轮碳刷 导线阻值照片2", example = "https://123.png,https://456.png", notes = "抄表叶轮碳刷 导线阻值照片2") + @TableField(exist = false) + private String ddwcs_4_1_Images; + + @ApiModelProperty(value = "抄表叶轮碳刷 导线阻值2", example = "2.2", notes = "抄表叶轮碳刷 导线阻值2") + @TableField(exist = false) + private String ddwcs_4_1_Value; + + @ApiModelProperty(value = "抄表叶轮碳刷 实际电阻值2", example = "2.2", notes = "抄表叶轮碳刷 实际电阻值2") + @TableField(exist = false) + private String ddwcs_4_1_RealValue; + + @ApiModelProperty(value = "抄表叶轮碳刷 导线阻值照片3", example = "https://123.png,https://456.png", notes = "抄表叶轮碳刷 导线阻值照片3") + @TableField(exist = false) + private String ddwcs_4_2_Images; + + @ApiModelProperty(value = "抄表叶轮碳刷 导线阻值3", example = "2.2", notes = "抄表叶轮碳刷 导线阻值3") + @TableField(exist = false) + private String ddwcs_4_2_Value; + + @ApiModelProperty(value = "抄表叶轮碳刷 实际电阻值3", example = "2.2", notes = "抄表叶轮碳刷 实际电阻值3") + @TableField(exist = false) + private String ddwcs_4_2_RealValue; + + @ApiModelProperty(value = "抄表叶轮碳刷 是否不导通", example = "0导通,1不导通,默认导通", notes = "抄表叶轮碳刷 是否不导通") + @TableField(exist = false) + private String ddwcs_4_BreakOver; + + @ApiModelProperty(value = "抄表叶轮碳刷 平行数据个数默认1", example = "默认1", notes = "抄表叶轮碳刷 平行数据个数默认1") + @TableField(exist = false) + private String ddwcs_4_Num; + + @ApiModelProperty(value = "抄表叶轮碳刷 电阻平均值", example = "0.3", notes = "抄表叶轮碳刷 电阻平均值") + @TableField(exist = false) + private String ddwcs_4_MeanValue; + + @ApiModelProperty(value = "抄表叶根1 导线阻值照片1", example = "https://123.png,https://456.png", notes = "抄表叶根1 导线阻值照片1") + @TableField(exist = false) + private String ddwcs_5_0_Images; + + @ApiModelProperty(value = "抄表叶根1 导线阻值1", example = "2.2", notes = "抄表叶根1 导线阻值1") + @TableField(exist = false) + private String ddwcs_5_0_Value; + + @ApiModelProperty(value = "抄表叶根1 实际电阻值1", example = "2.2", notes = "抄表叶根1 实际电阻值1") + @TableField(exist = false) + private String ddwcs_5_0_RealValue; + + @ApiModelProperty(value = "抄表叶根1 导线阻值照片2", example = "https://123.png,https://456.png", notes = "抄表叶根1 导线阻值照片2") + @TableField(exist = false) + private String ddwcs_5_1_Images; + + @ApiModelProperty(value = "抄表叶根1 导线阻值2", example = "2.2", notes = "抄表叶根1 导线阻值2") + @TableField(exist = false) + private String ddwcs_5_1_Value; + + @ApiModelProperty(value = "抄表叶根1 实际电阻值2", example = "2.2", notes = "抄表叶根1 实际电阻值2") + @TableField(exist = false) + private String ddwcs_5_1_RealValue; + + @ApiModelProperty(value = "抄表叶根1 导线阻值照片3", example = "https://123.png,https://456.png", notes = "抄表叶根1 导线阻值照片3") + @TableField(exist = false) + private String ddwcs_5_2_Images; + + @ApiModelProperty(value = "抄表叶根1 导线阻值3", example = "2.2", notes = "抄表叶根1 导线阻值3") + @TableField(exist = false) + private String ddwcs_5_2_Value; + + @ApiModelProperty(value = "抄表叶根1 实际电阻值3", example = "2.2", notes = "抄表叶根1 实际电阻值3") + @TableField(exist = false) + private String ddwcs_5_2_RealValue; + + @ApiModelProperty(value = "抄表叶根1 是否不导通", example = "0导通,1不导通,默认导通", notes = "抄表叶根1 是否不导通") + @TableField(exist = false) + private String ddwcs_5_BreakOver; + + @ApiModelProperty(value = "抄表叶根1 平行数据个数默认1", example = "默认1", notes = "抄表叶根1 平行数据个数默认1") + @TableField(exist = false) + private String ddwcs_5_Num; + + @ApiModelProperty(value = "抄表叶根1 电阻平均值", example = "0.3", notes = "抄表叶根1 电阻平均值") + @TableField(exist = false) + private String ddwcs_5_MeanValue; + + @ApiModelProperty(value = "抄表叶根2 导线阻值照片1", example = "https://123.png,https://456.png", notes = "抄表叶根2 导线阻值照片1") + @TableField(exist = false) + private String ddwcs_6_0_Images; + + @ApiModelProperty(value = "抄表叶根2 导线阻值1", example = "2.2", notes = "抄表叶根2 导线阻值1") + @TableField(exist = false) + private String ddwcs_6_0_Value; + + @ApiModelProperty(value = "抄表叶根2 实际电阻值1", example = "2.2", notes = "抄表叶根2 实际电阻值1") + @TableField(exist = false) + private String ddwcs_6_0_RealValue; + + @ApiModelProperty(value = "抄表叶根2 导线阻值照片2", example = "https://123.png,https://456.png", notes = "抄表叶根2 导线阻值照片2") + @TableField(exist = false) + private String ddwcs_6_1_Images; + + @ApiModelProperty(value = "抄表叶根2 导线阻值2", example = "2.2", notes = "抄表叶根2 导线阻值2") + @TableField(exist = false) + private String ddwcs_6_1_Value; + + @ApiModelProperty(value = "抄表叶根2 实际电阻值2", example = "2.2", notes = "抄表叶根2 实际电阻值2") + @TableField(exist = false) + private String ddwcs_6_1_RealValue; + + @ApiModelProperty(value = "抄表叶根2 导线阻值照片3", example = "https://123.png,https://456.png", notes = "抄表叶根2 导线阻值照片3") + @TableField(exist = false) + private String ddwcs_6_2_Images; + + @ApiModelProperty(value = "抄表叶根2 导线阻值3", example = "2.2", notes = "抄表叶根2 导线阻值3") + @TableField(exist = false) + private String ddwcs_6_2_Value; + + @ApiModelProperty(value = "抄表叶根2 实际电阻值3", example = "2.2", notes = "抄表叶根2 实际电阻值3") + @TableField(exist = false) + private String ddwcs_6_2_RealValue; + + @ApiModelProperty(value = "抄表叶根2 是否不导通", example = "0导通,1不导通,默认导通", notes = "抄表叶根2 是否不导通") + @TableField(exist = false) + private String ddwcs_6_BreakOver; + + @ApiModelProperty(value = "抄表叶根2 平行数据个数默认1", example = "默认1", notes = "抄表叶根2 平行数据个数默认1") + @TableField(exist = false) + private String ddwcs_6_Num; + + @ApiModelProperty(value = "抄表叶根2 电阻平均值", example = "0.3", notes = "抄表叶根2 电阻平均值") + @TableField(exist = false) + private String ddwcs_6_MeanValue; + + @ApiModelProperty(value = "抄表叶根3 导线阻值照片1", example = "https://123.png,https://456.png", notes = "抄表叶根3 导线阻值照片1") + @TableField(exist = false) + private String ddwcs_7_0_Images; + + @ApiModelProperty(value = "抄表叶根3 导线阻值1", example = "2.2", notes = "抄表叶根3 导线阻值1") + @TableField(exist = false) + private String ddwcs_7_0_Value; + + @ApiModelProperty(value = "抄表叶根3 实际电阻值1", example = "2.2", notes = "抄表叶根3 实际电阻值1") + @TableField(exist = false) + private String ddwcs_7_0_RealValue; + + @ApiModelProperty(value = "抄表叶根3 导线阻值照片2", example = "https://123.png,https://456.png", notes = "抄表叶根3 导线阻值照片2") + @TableField(exist = false) + private String ddwcs_7_1_Images; + + @ApiModelProperty(value = "抄表叶根3 导线阻值2", example = "2.2", notes = "抄表叶根3 导线阻值2") + @TableField(exist = false) + private String ddwcs_7_1_Value; + + @ApiModelProperty(value = "抄表叶根3 实际电阻值2", example = "2.2", notes = "抄表叶根3 实际电阻值2") + @TableField(exist = false) + private String ddwcs_7_1_RealValue; + + @ApiModelProperty(value = "抄表叶根3 导线阻值照片3", example = "https://123.png,https://456.png", notes = "抄表叶根3 导线阻值照片3") + @TableField(exist = false) + private String ddwcs_7_2_Images; + + @ApiModelProperty(value = "抄表叶根3 导线阻值3", example = "2.2", notes = "抄表叶根3 导线阻值3") + @TableField(exist = false) + private String ddwcs_7_2_Value; + + @ApiModelProperty(value = "抄表叶根3 实际电阻值3", example = "2.2", notes = "抄表叶根3 实际电阻值3") + @TableField(exist = false) + private String ddwcs_7_2_RealValue; + + @ApiModelProperty(value = "抄表叶根3 是否不导通", example = "0导通,1不导通,默认导通", notes = "抄表叶根3 是否不导通") + @TableField(exist = false) + private String ddwcs_7_BreakOver; + + @ApiModelProperty(value = "抄表叶根3 平行数据个数默认1", example = "默认1", notes = "抄表叶根3 平行数据个数默认1") + @TableField(exist = false) + private String ddwcs_7_Num; + + @ApiModelProperty(value = "抄表叶根3 电阻平均值", example = "0.3", notes = "抄表叶根3 电阻平均值") + @TableField(exist = false) + private String ddwcs_7_MeanValue; + + @ApiModelProperty(value = "抄表轮毂变桨控制柜 导线阻值照片1", example = "https://123.png,https://456.png", notes = "抄表轮毂变桨控制柜 导线阻值照片1") + @TableField(exist = false) + private String ddwcs_8_0_Images; + + @ApiModelProperty(value = "抄表轮毂变桨控制柜 导线阻值1", example = "2.2", notes = "抄表轮毂变桨控制柜 导线阻值1") + @TableField(exist = false) + private String ddwcs_8_0_Value; + + @ApiModelProperty(value = "抄表轮毂变桨控制柜 实际电阻值1", example = "2.2", notes = "抄表轮毂变桨控制柜 实际电阻值1") + @TableField(exist = false) + private String ddwcs_8_0_RealValue; + + @ApiModelProperty(value = "抄表轮毂变桨控制柜 导线阻值照片2", example = "https://123.png,https://456.png", notes = "抄表轮毂变桨控制柜 导线阻值照片2") + @TableField(exist = false) + private String ddwcs_8_1_Images; + + @ApiModelProperty(value = "抄表轮毂变桨控制柜 导线阻值2", example = "2.2", notes = "抄表轮毂变桨控制柜 导线阻值2") + @TableField(exist = false) + private String ddwcs_8_1_Value; + + @ApiModelProperty(value = "抄表轮毂变桨控制柜 实际电阻值2", example = "2.2", notes = "抄表轮毂变桨控制柜 实际电阻值2") + @TableField(exist = false) + private String ddwcs_8_1_RealValue; + + @ApiModelProperty(value = "抄表轮毂变桨控制柜 导线阻值照片3", example = "https://123.png,https://456.png", notes = "抄表轮毂变桨控制柜 导线阻值照片3") + @TableField(exist = false) + private String ddwcs_8_2_Images; + + @ApiModelProperty(value = "抄表轮毂变桨控制柜 导线阻值3", example = "2.2", notes = "抄表轮毂变桨控制柜 导线阻值3") + @TableField(exist = false) + private String ddwcs_8_2_Value; + + @ApiModelProperty(value = "抄表轮毂变桨控制柜 实际电阻值3", example = "2.2", notes = "抄表轮毂变桨控制柜 实际电阻值3") + @TableField(exist = false) + private String ddwcs_8_2_RealValue; + + @ApiModelProperty(value = "抄表轮毂变桨控制柜 是否不导通", example = "0导通,1不导通,默认导通", notes = "抄表轮毂变桨控制柜 是否不导通") + @TableField(exist = false) + private String ddwcs_8_BreakOver; + + @ApiModelProperty(value = "抄表轮毂变桨控制柜 平行数据个数默认1", example = "默认1", notes = "抄表轮毂变桨控制柜 平行数据个数默认1") + @TableField(exist = false) + private String ddwcs_8_Num; + + @ApiModelProperty(value = "抄表轮毂变桨控制柜 电阻平均值", example = "0.3", notes = "抄表轮毂变桨控制柜 电阻平均值") + @TableField(exist = false) + private String ddwcs_8_MeanValue; + + @ApiModelProperty(value = "抄表风电机组机舱控制柜 导线阻值照片1", example = "https://123.png,https://456.png", notes = "抄表风电机组机舱控制柜 导线阻值照片1") + @TableField(exist = false) + private String ddwcs_9_0_Images; + + @ApiModelProperty(value = "抄表风电机组机舱控制柜 导线阻值1", example = "2.2", notes = "抄表风电机组机舱控制柜 导线阻值1") + @TableField(exist = false) + private String ddwcs_9_0_Value; + + @ApiModelProperty(value = "抄表风电机组机舱控制柜 实际电阻值1", example = "2.2", notes = "抄表风电机组机舱控制柜 实际电阻值1") + @TableField(exist = false) + private String ddwcs_9_0_RealValue; + + @ApiModelProperty(value = "抄表风电机组机舱控制柜 导线阻值照片2", example = "https://123.png,https://456.png", notes = "抄表风电机组机舱控制柜 导线阻值照片2") + @TableField(exist = false) + private String ddwcs_9_1_Images; + + @ApiModelProperty(value = "抄表风电机组机舱控制柜 导线阻值2", example = "2.2", notes = "抄表风电机组机舱控制柜 导线阻值2") + @TableField(exist = false) + private String ddwcs_9_1_Value; + + @ApiModelProperty(value = "抄表风电机组机舱控制柜 实际电阻值2", example = "2.2", notes = "抄表风电机组机舱控制柜 实际电阻值2") + @TableField(exist = false) + private String ddwcs_9_1_RealValue; + + @ApiModelProperty(value = "抄表风电机组机舱控制柜 导线阻值照片3", example = "https://123.png,https://456.png", notes = "抄表风电机组机舱控制柜 导线阻值照片3") + @TableField(exist = false) + private String ddwcs_9_2_Images; + + @ApiModelProperty(value = "抄表风电机组机舱控制柜 导线阻值3", example = "2.2", notes = "抄表风电机组机舱控制柜 导线阻值3") + @TableField(exist = false) + private String ddwcs_9_2_Value; + + @ApiModelProperty(value = "抄表风电机组机舱控制柜 实际电阻值3", example = "2.2", notes = "抄表风电机组机舱控制柜 实际电阻值3") + @TableField(exist = false) + private String ddwcs_9_2_RealValue; + + @ApiModelProperty(value = "抄表风电机组机舱控制柜 是否不导通", example = "0导通,1不导通,默认导通", notes = "抄表风电机组机舱控制柜 是否不导通") + @TableField(exist = false) + private String ddwcs_9_BreakOver; + + @ApiModelProperty(value = "抄表风电机组机舱控制柜 平行数据个数默认1", example = "默认1", notes = "抄表风电机组机舱控制柜 平行数据个数默认1") + @TableField(exist = false) + private String ddwcs_9_Num; + + @ApiModelProperty(value = "抄表风电机组机舱控制柜 电阻平均值", example = "0.3", notes = "抄表风电机组机舱控制柜 电阻平均值") + @TableField(exist = false) + private String ddwcs_9_MeanValue; + + @ApiModelProperty(value = "抄表风电机组塔底主控柜 导线阻值照片1", example = "https://123.png,https://456.png", notes = "抄表风电机组塔底主控柜 导线阻值照片1") + @TableField(exist = false) + private String ddwcs_10_0_Images; + + @ApiModelProperty(value = "抄表风电机组塔底主控柜 导线阻值1", example = "2.2", notes = "抄表风电机组塔底主控柜 导线阻值1") + @TableField(exist = false) + private String ddwcs_10_0_Value; + + @ApiModelProperty(value = "抄表风电机组塔底主控柜 实际电阻值1", example = "2.2", notes = "抄表风电机组塔底主控柜 实际电阻值1") + @TableField(exist = false) + private String ddwcs_10_0_RealValue; + + @ApiModelProperty(value = "抄表风电机组塔底主控柜 导线阻值照片2", example = "https://123.png,https://456.png", notes = "抄表风电机组塔底主控柜 导线阻值照片2") + @TableField(exist = false) + private String ddwcs_10_1_Images; + + @ApiModelProperty(value = "抄表风电机组塔底主控柜 导线阻值2", example = "2.2", notes = "抄表风电机组塔底主控柜 导线阻值2") + @TableField(exist = false) + private String ddwcs_10_1_Value; + + @ApiModelProperty(value = "抄表风电机组塔底主控柜 实际电阻值2", example = "2.2", notes = "抄表风电机组塔底主控柜 实际电阻值2") + @TableField(exist = false) + private String ddwcs_10_1_RealValue; + + @ApiModelProperty(value = "抄表风电机组塔底主控柜 导线阻值照片3", example = "https://123.png,https://456.png", notes = "抄表风电机组塔底主控柜 导线阻值照片3") + @TableField(exist = false) + private String ddwcs_10_2_Images; + + @ApiModelProperty(value = "抄表风电机组塔底主控柜 导线阻值3", example = "2.2", notes = "抄表风电机组塔底主控柜 导线阻值3") + @TableField(exist = false) + private String ddwcs_10_2_Value; + + @ApiModelProperty(value = "抄表风电机组塔底主控柜 实际电阻值3", example = "2.2", notes = "抄表风电机组塔底主控柜 实际电阻值3") + @TableField(exist = false) + private String ddwcs_10_2_RealValue; + + @ApiModelProperty(value = "抄表风电机组塔底主控柜 是否不导通", example = "0导通,1不导通,默认导通", notes = "抄表风电机组塔底主控柜 是否不导通") + @TableField(exist = false) + private String ddwcs_10_BreakOver; + + @ApiModelProperty(value = "抄表风电机组塔底主控柜 平行数据个数默认1", example = "默认1", notes = "抄表风电机组塔底主控柜 平行数据个数默认1") + @TableField(exist = false) + private String ddwcs_10_Num; + + @ApiModelProperty(value = "抄表风电机组塔底主控柜 电阻平均值", example = "0.3", notes = "抄表风电机组塔底主控柜 电阻平均值") + @TableField(exist = false) + private String ddwcs_10_MeanValue; + + @ApiModelProperty(value = "抄表风电机组塔底变流柜 导线阻值照片1", example = "https://123.png,https://456.png", notes = "抄表风电机组塔底变流柜 导线阻值照片1") + @TableField(exist = false) + private String ddwcs_11_0_Images; + + @ApiModelProperty(value = "抄表风电机组塔底变流柜 导线阻值1", example = "2.2", notes = "抄表风电机组塔底变流柜 导线阻值1") + @TableField(exist = false) + private String ddwcs_11_0_Value; + + @ApiModelProperty(value = "抄表风电机组塔底变流柜 实际电阻值1", example = "2.2", notes = "抄表风电机组塔底变流柜 实际电阻值1") + @TableField(exist = false) + private String ddwcs_11_0_RealValue; + + @ApiModelProperty(value = "抄表风电机组塔底变流柜 导线阻值照片2", example = "https://123.png,https://456.png", notes = "抄表风电机组塔底变流柜 导线阻值照片2") + @TableField(exist = false) + private String ddwcs_11_1_Images; + + @ApiModelProperty(value = "抄表风电机组塔底变流柜 导线阻值2", example = "2.2", notes = "抄表风电机组塔底变流柜 导线阻值2") + @TableField(exist = false) + private String ddwcs_11_1_Value; + + @ApiModelProperty(value = "抄表风电机组塔底变流柜 实际电阻值2", example = "2.2", notes = "抄表风电机组塔底变流柜 实际电阻值2") + @TableField(exist = false) + private String ddwcs_11_1_RealValue; + + @ApiModelProperty(value = "抄表风电机组塔底变流柜 导线阻值照片3", example = "https://123.png,https://456.png", notes = "抄表风电机组塔底变流柜 导线阻值照片3") + @TableField(exist = false) + private String ddwcs_11_2_Images; + + @ApiModelProperty(value = "抄表风电机组塔底变流柜 导线阻值3", example = "2.2", notes = "抄表风电机组塔底变流柜 导线阻值3") + @TableField(exist = false) + private String ddwcs_11_2_Value; + + @ApiModelProperty(value = "抄表风电机组塔底变流柜 实际电阻值3", example = "2.2", notes = "抄表风电机组塔底变流柜 实际电阻值3") + @TableField(exist = false) + private String ddwcs_11_2_RealValue; + + @ApiModelProperty(value = "抄表风电机组塔底变流柜 是否不导通", example = "0导通,1不导通,默认导通", notes = "抄表风电机组塔底变流柜 是否不导通") + @TableField(exist = false) + private String ddwcs_11_BreakOver; + + @ApiModelProperty(value = "抄表风电机组塔底变流柜 平行数据个数默认1", example = "默认1", notes = "抄表风电机组塔底变流柜 平行数据个数默认1") + @TableField(exist = false) + private String ddwcs_11_Num; + + @ApiModelProperty(value = "抄表风电机组塔底变流柜 电阻平均值", example = "0.3", notes = "抄表风电机组塔底变流柜 电阻平均值") + @TableField(exist = false) + private String ddwcs_11_MeanValue; + + @ApiModelProperty(value = "抄表风电机组水冷控制柜 导线阻值照片1", example = "https://123.png,https://456.png", notes = "抄表风电机组水冷控制柜 导线阻值照片1") + @TableField(exist = false) + private String ddwcs_12_0_Images; + + @ApiModelProperty(value = "抄表风电机组水冷控制柜 导线阻值1", example = "2.2", notes = "抄表风电机组水冷控制柜 导线阻值1") + @TableField(exist = false) + private String ddwcs_12_0_Value; + + @ApiModelProperty(value = "抄表风电机组水冷控制柜 实际电阻值1", example = "2.2", notes = "抄表风电机组水冷控制柜 实际电阻值1") + @TableField(exist = false) + private String ddwcs_12_0_RealValue; + + @ApiModelProperty(value = "抄表风电机组水冷控制柜 导线阻值照片2", example = "https://123.png,https://456.png", notes = "抄表风电机组水冷控制柜 导线阻值照片2") + @TableField(exist = false) + private String ddwcs_12_1_Images; + + @ApiModelProperty(value = "抄表风电机组水冷控制柜 导线阻值2", example = "2.2", notes = "抄表风电机组水冷控制柜 导线阻值2") + @TableField(exist = false) + private String ddwcs_12_1_Value; + + @ApiModelProperty(value = "抄表风电机组水冷控制柜 实际电阻值2", example = "2.2", notes = "抄表风电机组水冷控制柜 实际电阻值2") + @TableField(exist = false) + private String ddwcs_12_1_RealValue; + + @ApiModelProperty(value = "抄表风电机组水冷控制柜 导线阻值照片3", example = "https://123.png,https://456.png", notes = "抄表风电机组水冷控制柜 导线阻值照片3") + @TableField(exist = false) + private String ddwcs_12_2_Images; + + @ApiModelProperty(value = "抄表风电机组水冷控制柜 导线阻值3", example = "2.2", notes = "抄表风电机组水冷控制柜 导线阻值3") + @TableField(exist = false) + private String ddwcs_12_2_Value; + + @ApiModelProperty(value = "抄表风电机组水冷控制柜 实际电阻值3", example = "2.2", notes = "抄表风电机组水冷控制柜 实际电阻值3") + @TableField(exist = false) + private String ddwcs_12_2_RealValue; + + @ApiModelProperty(value = "抄表风电机组水冷控制柜 是否不导通", example = "0导通,1不导通,默认导通", notes = "抄表风电机组水冷控制柜 是否不导通") + @TableField(exist = false) + private String ddwcs_12_BreakOver; + + @ApiModelProperty(value = "抄表风电机组水冷控制柜 平行数据个数默认1", example = "默认1", notes = "抄表风电机组水冷控制柜 平行数据个数默认1") + @TableField(exist = false) + private String ddwcs_12_Num; + + @ApiModelProperty(value = "抄表风电机组水冷控制柜 电阻平均值", example = "0.3", notes = "抄表风电机组水冷控制柜 电阻平均值") + @TableField(exist = false) + private String ddwcs_12_MeanValue; + + @ApiModelProperty(value = "抄表叶片1 导线阻值照片1", example = "https://123.png,https://456.png", notes = "抄表叶片1 导线阻值照片1") + @TableField(exist = false) + private String ddwcs_13_0_Images; + + @ApiModelProperty(value = "抄表叶片1 导线阻值1", example = "2.2", notes = "抄表叶片1 导线阻值1") + @TableField(exist = false) + private String ddwcs_13_0_Value; + + @ApiModelProperty(value = "抄表叶片1 实际电阻值1", example = "2.2", notes = "抄表叶片1 实际电阻值1") + @TableField(exist = false) + private String ddwcs_13_0_RealValue; + + @ApiModelProperty(value = "抄表叶片1 导线阻值照片2", example = "https://123.png,https://456.png", notes = "抄表叶片1 导线阻值照片2") + @TableField(exist = false) + private String ddwcs_13_1_Images; + + @ApiModelProperty(value = "抄表叶片1 导线阻值2", example = "2.2", notes = "抄表叶片1 导线阻值2") + @TableField(exist = false) + private String ddwcs_13_1_Value; + + @ApiModelProperty(value = "抄表叶片1 实际电阻值2", example = "2.2", notes = "抄表叶片1 实际电阻值2") + @TableField(exist = false) + private String ddwcs_13_1_RealValue; + + @ApiModelProperty(value = "抄表叶片1 导线阻值照片3", example = "https://123.png,https://456.png", notes = "抄表叶片1 导线阻值照片3") + @TableField(exist = false) + private String ddwcs_13_2_Images; + + @ApiModelProperty(value = "抄表叶片1 导线阻值3", example = "2.2", notes = "抄表叶片1 导线阻值3") + @TableField(exist = false) + private String ddwcs_13_2_Value; + + @ApiModelProperty(value = "抄表叶片1 实际电阻值3", example = "2.2", notes = "抄表叶片1 实际电阻值3") + @TableField(exist = false) + private String ddwcs_13_2_RealValue; + + @ApiModelProperty(value = "抄表叶片1 是否不导通", example = "0导通,1不导通,默认导通", notes = "抄表叶片1 是否不导通") + @TableField(exist = false) + private String ddwcs_13_BreakOver; + + @ApiModelProperty(value = "抄表叶片1 平行数据个数默认1", example = "默认1", notes = "抄表叶片1 平行数据个数默认1") + @TableField(exist = false) + private String ddwcs_13_Num; + + @ApiModelProperty(value = "抄表叶片1 电阻平均值", example = "0.3", notes = "抄表叶片1 电阻平均值") + @TableField(exist = false) + private String ddwcs_13_MeanValue; + + @ApiModelProperty(value = "抄表叶片2 导线阻值照片1", example = "https://123.png,https://456.png", notes = "抄表叶片2 导线阻值照片1") + @TableField(exist = false) + private String ddwcs_14_0_Images; + + @ApiModelProperty(value = "抄表叶片2 导线阻值1", example = "2.2", notes = "抄表叶片2 导线阻值1") + @TableField(exist = false) + private String ddwcs_14_0_Value; + + @ApiModelProperty(value = "抄表叶片2 实际电阻值1", example = "2.2", notes = "抄表叶片2 实际电阻值1") + @TableField(exist = false) + private String ddwcs_14_0_RealValue; + + @ApiModelProperty(value = "抄表叶片2 导线阻值照片2", example = "https://123.png,https://456.png", notes = "抄表叶片2 导线阻值照片2") + @TableField(exist = false) + private String ddwcs_14_1_Images; + + @ApiModelProperty(value = "抄表叶片2 导线阻值2", example = "2.2", notes = "抄表叶片2 导线阻值2") + @TableField(exist = false) + private String ddwcs_14_1_Value; + + @ApiModelProperty(value = "抄表叶片2 实际电阻值2", example = "2.2", notes = "抄表叶片2 实际电阻值2") + @TableField(exist = false) + private String ddwcs_14_1_RealValue; + + @ApiModelProperty(value = "抄表叶片2 导线阻值照片3", example = "https://123.png,https://456.png", notes = "抄表叶片2 导线阻值照片3") + @TableField(exist = false) + private String ddwcs_14_2_Images; + + @ApiModelProperty(value = "抄表叶片2 导线阻值3", example = "2.2", notes = "抄表叶片2 导线阻值3") + @TableField(exist = false) + private String ddwcs_14_2_Value; + + @ApiModelProperty(value = "抄表叶片2 实际电阻值3", example = "2.2", notes = "抄表叶片2 实际电阻值3") + @TableField(exist = false) + private String ddwcs_14_2_RealValue; + + @ApiModelProperty(value = "抄表叶片2 是否不导通", example = "0导通,1不导通,默认导通", notes = "抄表叶片2 是否不导通") + @TableField(exist = false) + private String ddwcs_14_BreakOver; + + @ApiModelProperty(value = "抄表叶片2 平行数据个数默认1", example = "默认1", notes = "抄表叶片2 平行数据个数默认1") + @TableField(exist = false) + private String ddwcs_14_Num; + + @ApiModelProperty(value = "抄表叶片1 电阻平均值", example = "0.3", notes = "抄表叶片1 电阻平均值") + @TableField(exist = false) + private String ddwcs_14_MeanValue; + + @ApiModelProperty(value = "抄表叶片3 导线阻值照片1", example = "https://123.png,https://456.png", notes = "抄表叶片3 导线阻值照片1") + @TableField(exist = false) + private String ddwcs_15_0_Images; + + @ApiModelProperty(value = "抄表叶片3 导线阻值1", example = "2.2", notes = "抄表叶片3 导线阻值1") + @TableField(exist = false) + private String ddwcs_15_0_Value; + + @ApiModelProperty(value = "抄表叶片3 实际电阻值1", example = "2.2", notes = "抄表叶片3 实际电阻值1") + @TableField(exist = false) + private String ddwcs_15_0_RealValue; + + @ApiModelProperty(value = "抄表叶片3 导线阻值照片2", example = "https://123.png,https://456.png", notes = "抄表叶片3 导线阻值照片2") + @TableField(exist = false) + private String ddwcs_15_1_Images; + + @ApiModelProperty(value = "抄表叶片3 导线阻值2", example = "2.2", notes = "抄表叶片3 导线阻值2") + @TableField(exist = false) + private String ddwcs_15_1_Value; + + @ApiModelProperty(value = "抄表叶片3 实际电阻值2", example = "2.2", notes = "抄表叶片3 实际电阻值2") + @TableField(exist = false) + private String ddwcs_15_1_RealValue; + + @ApiModelProperty(value = "抄表叶片3 导线阻值照片3", example = "https://123.png,https://456.png", notes = "抄表叶片3 导线阻值照片3") + @TableField(exist = false) + private String ddwcs_15_2_Images; + + @ApiModelProperty(value = "抄表叶片3 导线阻值3", example = "2.2", notes = "抄表叶片3 导线阻值3") + @TableField(exist = false) + private String ddwcs_15_2_Value; + + @ApiModelProperty(value = "抄表叶片3 实际电阻值3", example = "2.2", notes = "抄表叶片3 实际电阻值3") + @TableField(exist = false) + private String ddwcs_15_2_RealValue; + + @ApiModelProperty(value = "抄表叶片3 是否不导通", example = "0导通,1不导通,默认导通", notes = "抄表叶片3 是否不导通") + @TableField(exist = false) + private String ddwcs_15_BreakOver; + + @ApiModelProperty(value = "抄表叶片3 平行数据个数默认1", example = "默认1", notes = "抄表叶片3 平行数据个数默认1") + @TableField(exist = false) + private String ddwcs_15_Num; + + @ApiModelProperty(value = "抄表叶片3 电阻平均值", example = "0.3", notes = "抄表叶片3 电阻平均值") + @TableField(exist = false) + private String ddwcs_15_MeanValue; + + +//---------------------------风机引雷通道电阻测试------------------ + @ApiModelProperty(value = "抄表轮毂内叶片1根部至塔底接地环 导线阻值照片1", example = "https://123.png,https://456.png", notes = "抄表轮毂内叶片1根部至塔底接地环 导线阻值照片1") + @TableField(exist = false) + private String fjyltddzcs_0_0_Images; + + @ApiModelProperty(value = "抄表轮毂内叶片1根部至塔底接地环 导线阻值1", example = "2.2", notes = "抄表轮毂内叶片1根部至塔底接地环 导线阻值1") + @TableField(exist = false) + private String fjyltddzcs_0_0_Value; + + @ApiModelProperty(value = "抄表轮毂内叶片1根部至塔底接地环 实际电阻值1", example = "2.2", notes = "抄表轮毂内叶片1根部至塔底接地环 实际电阻值1") + @TableField(exist = false) + private String fjyltddzcs_0_0_RealValue; + + @ApiModelProperty(value = "抄表轮毂内叶片1根部至塔底接地环 导线阻值照片2", example = "https://123.png,https://456.png", notes = "抄表轮毂内叶片1根部至塔底接地环 导线阻值照片2") + @TableField(exist = false) + private String fjyltddzcs_0_1_Images; + + @ApiModelProperty(value = "抄表轮毂内叶片1根部至塔底接地环 导线阻值2", example = "2.2", notes = "抄表轮毂内叶片1根部至塔底接地环 导线阻值2") + @TableField(exist = false) + private String fjyltddzcs_0_1_Value; + + @ApiModelProperty(value = "抄表轮毂内叶片1根部至塔底接地环 实际电阻值2", example = "2.2", notes = "抄表轮毂内叶片1根部至塔底接地环 实际电阻值2") + @TableField(exist = false) + private String fjyltddzcs_0_1_RealValue; + + @ApiModelProperty(value = "抄表轮毂内叶片1根部至塔底接地环 导线阻值照片3", example = "https://123.png,https://456.png", notes = "抄表轮毂内叶片1根部至塔底接地环 导线阻值照片3") + @TableField(exist = false) + private String fjyltddzcs_0_2_Images; + + @ApiModelProperty(value = "抄表轮毂内叶片1根部至塔底接地环 导线阻值3", example = "2.2", notes = "抄表轮毂内叶片1根部至塔底接地环 导线阻值3") + @TableField(exist = false) + private String fjyltddzcs_0_2_Value; + + @ApiModelProperty(value = "抄表轮毂内叶片1根部至塔底接地环 实际电阻值3", example = "2.2", notes = "抄表轮毂内叶片1根部至塔底接地环 实际电阻值3") + @TableField(exist = false) + private String fjyltddzcs_0_2_RealValue; + + @ApiModelProperty(value = "抄表轮毂内叶片1根部至塔底接地环 是否不导通", example = "0导通,1不导通,默认导通", notes = "抄表轮毂内叶片1根部至塔底接地环 是否不导通") + @TableField(exist = false) + private String fjyltddzcs_0_BreakOver; + + @ApiModelProperty(value = "抄表轮毂内叶片1根部至塔底接地环 平行数据个数默认1", example = "默认1", notes = "抄表轮毂内叶片1根部至塔底接地环 平行数据个数默认1") + @TableField(exist = false) + private String fjyltddzcs_0_Num; + + @ApiModelProperty(value = "抄表轮毂内叶片1根部至塔底接地环 电阻平均值", example = "0.3", notes = "抄表轮毂内叶片1根部至塔底接地环 电阻平均值") + @TableField(exist = false) + private String fjyltddzcs_0_MeanValue; + + @ApiModelProperty(value = "抄表轮毂内叶片1根部至塔底接地环 测试类型", example = "1 无人机测试、2 无人吊篮测试", notes = "抄表轮毂内叶片1根部至塔底接地环 测试类型") + @TableField(exist = false) + private String fjyltddzcs_0_TestType; + + @ApiModelProperty(value = "抄表轮毂内叶片2根部至塔底接地环 导线阻值照片1", example = "https://123.png,https://456.png", notes = "抄表轮毂内叶片2根部至塔底接地环 导线阻值照片1") + @TableField(exist = false) + private String fjyltddzcs_1_0_Images; + + @ApiModelProperty(value = "抄表轮毂内叶片2根部至塔底接地环 导线阻值1", example = "2.2", notes = "抄表轮毂内叶片2根部至塔底接地环 导线阻值1") + @TableField(exist = false) + private String fjyltddzcs_1_0_Value; + + @ApiModelProperty(value = "抄表轮毂内叶片2根部至塔底接地环 实际电阻值1", example = "2.2", notes = "抄表轮毂内叶片2根部至塔底接地环 实际电阻值1") + @TableField(exist = false) + private String fjyltddzcs_1_0_RealValue; + + @ApiModelProperty(value = "抄表轮毂内叶片2根部至塔底接地环 导线阻值照片2", example = "https://123.png,https://456.png", notes = "抄表轮毂内叶片2根部至塔底接地环 导线阻值照片2") + @TableField(exist = false) + private String fjyltddzcs_1_1_Images; + + @ApiModelProperty(value = "抄表轮毂内叶片2根部至塔底接地环 导线阻值2", example = "2.2", notes = "抄表轮毂内叶片2根部至塔底接地环 导线阻值2") + @TableField(exist = false) + private String fjyltddzcs_1_1_Value; + + @ApiModelProperty(value = "抄表轮毂内叶片2根部至塔底接地环 实际电阻值2", example = "2.2", notes = "抄表轮毂内叶片2根部至塔底接地环 实际电阻值2") + @TableField(exist = false) + private String fjyltddzcs_1_1_RealValue; + + @ApiModelProperty(value = "抄表轮毂内叶片2根部至塔底接地环 导线阻值照片3", example = "https://123.png,https://456.png", notes = "抄表轮毂内叶片2根部至塔底接地环 导线阻值照片3") + @TableField(exist = false) + private String fjyltddzcs_1_2_Images; + + @ApiModelProperty(value = "抄表轮毂内叶片2根部至塔底接地环 导线阻值3", example = "2.2", notes = "抄表轮毂内叶片2根部至塔底接地环 导线阻值3") + @TableField(exist = false) + private String fjyltddzcs_1_2_Value; + + @ApiModelProperty(value = "抄表轮毂内叶片2根部至塔底接地环 实际电阻值3", example = "2.2", notes = "抄表轮毂内叶片2根部至塔底接地环 实际电阻值3") + @TableField(exist = false) + private String fjyltddzcs_1_2_RealValue; + + @ApiModelProperty(value = "抄表轮毂内叶片2根部至塔底接地环 是否不导通", example = "0导通,1不导通,默认导通", notes = "抄表轮毂内叶片2根部至塔底接地环 是否不导通") + @TableField(exist = false) + private String fjyltddzcs_1_BreakOver; + + @ApiModelProperty(value = "抄表轮毂内叶片2根部至塔底接地环 平行数据个数默认1", example = "默认1", notes = "抄表轮毂内叶片2根部至塔底接地环 平行数据个数默认1") + @TableField(exist = false) + private String fjyltddzcs_1_Num; + + @ApiModelProperty(value = "抄表轮毂内叶片2根部至塔底接地环 电阻平均值", example = "0.3", notes = "抄表轮毂内叶片2根部至塔底接地环 电阻平均值") + @TableField(exist = false) + private String fjyltddzcs_1_MeanValue; + + @ApiModelProperty(value = "抄表轮毂内叶片2根部至塔底接地环 测试类型", example = "1 无人机测试、2 无人吊篮测试", notes = "抄表轮毂内叶片2根部至塔底接地环 测试类型") + @TableField(exist = false) + private String fjyltddzcs_1_TestType; + + @ApiModelProperty(value = "抄表轮毂内叶片2根部至塔底接地环 导线阻值照片1", example = "https://123.png,https://456.png", notes = "抄表轮毂内叶片2根部至塔底接地环 导线阻值照片1") + @TableField(exist = false) + private String fjyltddzcs_1_Images; + + @ApiModelProperty(value = "抄表轮毂内叶片3根部至塔底接地环 导线阻值1", example = "2.2", notes = "抄表轮毂内叶片3根部至塔底接地环 导线阻值1") + @TableField(exist = false) + private String fjyltddzcs_2_0_Value; + + @ApiModelProperty(value = "抄表轮毂内叶片3根部至塔底接地环 实际电阻值1", example = "2.2", notes = "抄表轮毂内叶片3根部至塔底接地环 实际电阻值1") + @TableField(exist = false) + private String fjyltddzcs_2_0_RealValue; + + @ApiModelProperty(value = "抄表轮毂内叶片3根部至塔底接地环 导线阻值照片1", example = "https://123.png,https://456.png", notes = "抄表轮毂内叶片3根部至塔底接地环 导线阻值照片1") + @TableField(exist = false) + private String fjyltddzcs_2_0_Images; + + @ApiModelProperty(value = "抄表轮毂内叶片3根部至塔底接地环 导线阻值照片2", example = "https://123.png,https://456.png", notes = "抄表轮毂内叶片3根部至塔底接地环 导线阻值照片2") + @TableField(exist = false) + private String fjyltddzcs_2_1_Images; + + @ApiModelProperty(value = "抄表轮毂内叶片3根部至塔底接地环 导线阻值2", example = "2.2", notes = "抄表轮毂内叶片3根部至塔底接地环 导线阻值2") + @TableField(exist = false) + private String fjyltddzcs_2_1_Value; + + @ApiModelProperty(value = "抄表轮毂内叶片3根部至塔底接地环 实际电阻值2", example = "2.2", notes = "抄表轮毂内叶片3根部至塔底接地环 实际电阻值2") + @TableField(exist = false) + private String fjyltddzcs_2_1_RealValue; + + @ApiModelProperty(value = "抄表轮毂内叶片3根部至塔底接地环 导线阻值照片3", example = "https://123.png,https://456.png", notes = "抄表轮毂内叶片3根部至塔底接地环 导线阻值照片3") + @TableField(exist = false) + private String fjyltddzcs_2_2_Images; + + @ApiModelProperty(value = "抄表轮毂内叶片3根部至塔底接地环 导线阻值3", example = "2.2", notes = "抄表轮毂内叶片3根部至塔底接地环 导线阻值3") + @TableField(exist = false) + private String fjyltddzcs_2_2_Value; + + @ApiModelProperty(value = "抄表轮毂内叶片3根部至塔底接地环 实际电阻值3", example = "2.2", notes = "抄表轮毂内叶片3根部至塔底接地环 实际电阻值3") + @TableField(exist = false) + private String fjyltddzcs_2_2_RealValue; + + @ApiModelProperty(value = "抄表轮毂内叶片3根部至塔底接地环 是否不导通", example = "0导通,1不导通,默认导通", notes = "抄表轮毂内叶片3根部至塔底接地环 是否不导通") + @TableField(exist = false) + private String fjyltddzcs_2_BreakOver; + + @ApiModelProperty(value = "抄表轮毂内叶片3根部至塔底接地环 平行数据个数默认1", example = "默认1", notes = "抄表轮毂内叶片3根部至塔底接地环 平行数据个数默认1") + @TableField(exist = false) + private String fjyltddzcs_2_Num; + + @ApiModelProperty(value = "抄表轮毂内叶片3根部至塔底接地环 电阻平均值", example = "0.3", notes = "抄表轮毂内叶片3根部至塔底接地环 电阻平均值") + @TableField(exist = false) + private String fjyltddzcs_2_MeanValue; + + @ApiModelProperty(value = "抄表轮毂内叶片3根部至塔底接地环 测试类型", example = "1 无人机测试、2 无人吊篮测试", notes = "抄表轮毂内叶片3根部至塔底接地环 测试类型") + @TableField(exist = false) + private String fjyltddzcs_2_TestType; + + @ApiModelProperty(value = "叶片1叶尖至塔底接地环 导线阻值照片1", example = "https://123.png,https://456.png", notes = "叶片1叶尖至塔底接地环 导线阻值照片1") + @TableField(exist = false) + private String fjyltddzcs_3_0_Images; + + @ApiModelProperty(value = "叶片1叶尖至塔底接地环 导线阻值1", example = "2.2", notes = "叶片1叶尖至塔底接地环 导线阻值1") + @TableField(exist = false) + private String fjyltddzcs_3_0_Value; + + @ApiModelProperty(value = "叶片1叶尖至塔底接地环 实际电阻值1", example = "2.2", notes = "叶片1叶尖至塔底接地环 实际电阻值1") + @TableField(exist = false) + private String fjyltddzcs_3_0_RealValue; + + @ApiModelProperty(value = "叶片1叶尖至塔底接地环 导线阻值照片2", example = "https://123.png,https://456.png", notes = "叶片1叶尖至塔底接地环 导线阻值照片2") + @TableField(exist = false) + private String fjyltddzcs_3_1_Images; + + @ApiModelProperty(value = "叶片1叶尖至塔底接地环 导线阻值2", example = "2.2", notes = "叶片1叶尖至塔底接地环 导线阻值2") + @TableField(exist = false) + private String fjyltddzcs_3_1_Value; + + @ApiModelProperty(value = "叶片1叶尖至塔底接地环 实际电阻值2", example = "2.2", notes = "叶片1叶尖至塔底接地环 实际电阻值2") + @TableField(exist = false) + private String fjyltddzcs_3_1_RealValue; + + @ApiModelProperty(value = "叶片1叶尖至塔底接地环 导线阻值照片3", example = "https://123.png,https://456.png", notes = "叶片1叶尖至塔底接地环 导线阻值照片3") + @TableField(exist = false) + private String fjyltddzcs_3_2_Images; + + @ApiModelProperty(value = "叶片1叶尖至塔底接地环 导线阻值3", example = "2.2", notes = "叶片1叶尖至塔底接地环 导线阻值3") + @TableField(exist = false) + private String fjyltddzcs_3_2_Value; + + @ApiModelProperty(value = "叶片1叶尖至塔底接地环 实际电阻值3", example = "2.2", notes = "叶片1叶尖至塔底接地环 实际电阻值3") + @TableField(exist = false) + private String fjyltddzcs_3_2_RealValue; + + @ApiModelProperty(value = "叶片1叶尖至塔底接地环 是否不导通", example = "0导通,1不导通,默认导通", notes = "叶片1叶尖至塔底接地环 是否不导通") + @TableField(exist = false) + private String fjyltddzcs_3_BreakOver; + + @ApiModelProperty(value = "叶片1叶尖至塔底接地环 平行数据个数默认1", example = "默认1", notes = "叶片1叶尖至塔底接地环 平行数据个数默认1") + @TableField(exist = false) + private String fjyltddzcs_3_Num; + + @ApiModelProperty(value = "叶片1叶尖至塔底接地环 电阻平均值", example = "0.3", notes = "叶片1叶尖至塔底接地环 电阻平均值") + @TableField(exist = false) + private String fjyltddzcs_3_MeanValue; + + @ApiModelProperty(value = "叶片1叶尖至塔底接地环 测试类型", example = "1 无人机测试、2 无人吊篮测试", notes = "叶片1叶尖至塔底接地环 测试类型") + @TableField(exist = false) + private String fjyltddzcs_3_TestType; + + @ApiModelProperty(value = "叶片2叶尖至塔底接地环 导线阻值照片1", example = "https://123.png,https://456.png", notes = "叶片2叶尖至塔底接地环 导线阻值照片1") + @TableField(exist = false) + private String fjyltddzcs_4_0_Images; + + @ApiModelProperty(value = "叶片2叶尖至塔底接地环 导线阻值1", example = "2.2", notes = "叶片2叶尖至塔底接地环 导线阻值1") + @TableField(exist = false) + private String fjyltddzcs_4_0_Value; + + @ApiModelProperty(value = "叶片2叶尖至塔底接地环 实际电阻值1", example = "2.2", notes = "叶片2叶尖至塔底接地环 实际电阻值1") + @TableField(exist = false) + private String fjyltddzcs_4_0_RealValue; + + @ApiModelProperty(value = "叶片2叶尖至塔底接地环 导线阻值照片2", example = "https://123.png,https://456.png", notes = "叶片2叶尖至塔底接地环 导线阻值照片2") + @TableField(exist = false) + private String fjyltddzcs_4_1_Images; + + @ApiModelProperty(value = "叶片2叶尖至塔底接地环 导线阻值2", example = "2.2", notes = "叶片2叶尖至塔底接地环 导线阻值2") + @TableField(exist = false) + private String fjyltddzcs_4_1_Value; + + @ApiModelProperty(value = "叶片2叶尖至塔底接地环 实际电阻值2", example = "2.2", notes = "叶片2叶尖至塔底接地环 实际电阻值2") + @TableField(exist = false) + private String fjyltddzcs_4_1_RealValue; + + @ApiModelProperty(value = "叶片2叶尖至塔底接地环 导线阻值照片3", example = "https://123.png,https://456.png", notes = "叶片2叶尖至塔底接地环 导线阻值照片3") + @TableField(exist = false) + private String fjyltddzcs_4_2_Images; + + @ApiModelProperty(value = "叶片2叶尖至塔底接地环 导线阻值3", example = "2.2", notes = "叶片2叶尖至塔底接地环 导线阻值3") + @TableField(exist = false) + private String fjyltddzcs_4_2_Value; + + @ApiModelProperty(value = "叶片2叶尖至塔底接地环 实际电阻值3", example = "2.2", notes = "叶片2叶尖至塔底接地环 实际电阻值3") + @TableField(exist = false) + private String fjyltddzcs_4_2_RealValue; + + @ApiModelProperty(value = "叶片2叶尖至塔底接地环 是否不导通", example = "0导通,1不导通,默认导通", notes = "叶片2叶尖至塔底接地环 是否不导通") + @TableField(exist = false) + private String fjyltddzcs_4_BreakOver; + + @ApiModelProperty(value = "叶片2叶尖至塔底接地环 平行数据个数默认1", example = "默认1", notes = "叶片2叶尖至塔底接地环 平行数据个数默认1") + @TableField(exist = false) + private String fjyltddzcs_4_Num; + + @ApiModelProperty(value = "叶片2叶尖至塔底接地环 电阻平均值", example = "0.3", notes = "叶片2叶尖至塔底接地环 电阻平均值") + @TableField(exist = false) + private String fjyltddzcs_4_MeanValue; + + @ApiModelProperty(value = "叶片2叶尖至塔底接地环 测试类型", example = "1 无人机测试、2 无人吊篮测试", notes = "叶片2叶尖至塔底接地环 测试类型") + @TableField(exist = false) + private String fjyltddzcs_4_TestType; + + @ApiModelProperty(value = "叶片3叶尖至塔底接地环 导线阻值照片1", example = "https://123.png,https://456.png", notes = "叶片3叶尖至塔底接地环 导线阻值照片1") + @TableField(exist = false) + private String fjyltddzcs_5_0_Images; + + @ApiModelProperty(value = "叶片3叶尖至塔底接地环 导线阻值1", example = "2.2", notes = "叶片3叶尖至塔底接地环 导线阻值1") + @TableField(exist = false) + private String fjyltddzcs_5_0_Value; + + @ApiModelProperty(value = "叶片3叶尖至塔底接地环 实际电阻值1", example = "2.2", notes = "叶片3叶尖至塔底接地环 实际电阻值1") + @TableField(exist = false) + private String fjyltddzcs_5_0_RealValue; + + @ApiModelProperty(value = "叶片3叶尖至塔底接地环 导线阻值照片2", example = "https://123.png,https://456.png", notes = "叶片3叶尖至塔底接地环 导线阻值照片2") + @TableField(exist = false) + private String fjyltddzcs_5_1_Images; + + @ApiModelProperty(value = "叶片3叶尖至塔底接地环 导线阻值2", example = "2.2", notes = "叶片3叶尖至塔底接地环 导线阻值2") + @TableField(exist = false) + private String fjyltddzcs_5_1_Value; + + @ApiModelProperty(value = "叶片3叶尖至塔底接地环 实际电阻值2", example = "2.2", notes = "叶片3叶尖至塔底接地环 实际电阻值2") + @TableField(exist = false) + private String fjyltddzcs_5_1_RealValue; + + @ApiModelProperty(value = "叶片3叶尖至塔底接地环 导线阻值照片3", example = "https://123.png,https://456.png", notes = "叶片3叶尖至塔底接地环 导线阻值照片3") + @TableField(exist = false) + private String fjyltddzcs_5_2_Images; + + @ApiModelProperty(value = "叶片3叶尖至塔底接地环 导线阻值3", example = "2.2", notes = "叶片3叶尖至塔底接地环 导线阻值3") + @TableField(exist = false) + private String fjyltddzcs_5_2_Value; + + @ApiModelProperty(value = "叶片3叶尖至塔底接地环 实际电阻值3", example = "2.2", notes = "叶片3叶尖至塔底接地环 实际电阻值3") + @TableField(exist = false) + private String fjyltddzcs_5_2_RealValue; + + @ApiModelProperty(value = "叶片3叶尖至塔底接地环 是否不导通", example = "0导通,1不导通,默认导通", notes = "叶片3叶尖至塔底接地环 是否不导通") + @TableField(exist = false) + private String fjyltddzcs_5_BreakOver; + + @ApiModelProperty(value = "叶片3叶尖至塔底接地环 平行数据个数默认1", example = "默认1", notes = "叶片3叶尖至塔底接地环 平行数据个数默认1") + @TableField(exist = false) + private String fjyltddzcs_5_Num; + + @ApiModelProperty(value = "叶片3叶尖至塔底接地环 电阻平均值", example = "0.3", notes = "叶片3叶尖至塔底接地环 电阻平均值") + @TableField(exist = false) + private String fjyltddzcs_5_MeanValue; + + @ApiModelProperty(value = "叶片3叶尖至塔底接地环 测试类型", example = "1 无人机测试、2 无人吊篮测试", notes = "叶片3叶尖至塔底接地环 测试类型") + @TableField(exist = false) + private String fjyltddzcs_5_TestType; + + + +//----------------叶片防雷通道电阻测试----------------- + @ApiModelProperty(value = "抄表叶片1根部到叶片1叶尖 导线阻值照片1", example = "https://123.png,https://456.png", notes = "抄表叶片1根部到叶片1叶尖 导线阻值照片1") + @TableField(exist = false) + private String ypfltddzcs_0_0_Images; + + @ApiModelProperty(value = "抄表叶片1根部到叶片1叶尖 导线阻值1", example = "2.2", notes = "抄表叶片1根部到叶片1叶尖 导线阻值1") + @TableField(exist = false) + private String ypfltddzcs_0_0_Value; + + @ApiModelProperty(value = "抄表叶片1根部到叶片1叶尖 实际电阻值1", example = "2.2", notes = "抄表叶片1根部到叶片1叶尖 实际电阻值1") + @TableField(exist = false) + private String ypfltddzcs_0_0_RealValue; + + @ApiModelProperty(value = "抄表叶片1根部到叶片1叶尖 导线阻值照片2", example = "https://123.png,https://456.png", notes = "抄表叶片1根部到叶片1叶尖 导线阻值照片2") + @TableField(exist = false) + private String ypfltddzcs_0_1_Images; + + @ApiModelProperty(value = "抄表叶片1根部到叶片1叶尖 导线阻值2", example = "2.2", notes = "抄表叶片1根部到叶片1叶尖 导线阻值2") + @TableField(exist = false) + private String ypfltddzcs_0_1_Value; + + @ApiModelProperty(value = "抄表叶片1根部到叶片1叶尖 实际电阻值2", example = "2.2", notes = "抄表叶片1根部到叶片1叶尖 实际电阻值2") + @TableField(exist = false) + private String ypfltddzcs_0_1_RealValue; + + @ApiModelProperty(value = "抄表叶片1根部到叶片1叶尖 导线阻值照片3", example = "https://123.png,https://456.png", notes = "抄表叶片1根部到叶片1叶尖 导线阻值照片3") + @TableField(exist = false) + private String ypfltddzcs_0_2_Images; + + @ApiModelProperty(value = "抄表叶片1根部到叶片1叶尖 导线阻值3", example = "2.2", notes = "抄表叶片1根部到叶片1叶尖 导线阻值3") + @TableField(exist = false) + private String ypfltddzcs_0_2_Value; + + @ApiModelProperty(value = "抄表叶片1根部到叶片1叶尖 实际电阻值3", example = "2.2", notes = "抄表叶片1根部到叶片1叶尖 实际电阻值3") + @TableField(exist = false) + private String ypfltddzcs_0_2_RealValue; + + @ApiModelProperty(value = "抄表叶片1根部到叶片1叶尖 是否不导通", example = "0导通,1不导通,默认导通", notes = "抄表叶片1根部到叶片1叶尖 是否不导通") + @TableField(exist = false) + private String ypfltddzcs_0_BreakOver; + + @ApiModelProperty(value = "抄表叶片1根部到叶片1叶尖 平行数据个数默认1", example = "默认1", notes = "抄表叶片1根部到叶片1叶尖 平行数据个数默认1") + @TableField(exist = false) + private String ypfltddzcs_0_Num; + + @ApiModelProperty(value = "抄表叶片1根部到叶片1叶尖 电阻平均值", example = "0.3", notes = "抄表叶片1根部到叶片1叶尖 电阻平均值") + @TableField(exist = false) + private String ypfltddzcs_0_MeanValue; + + @ApiModelProperty(value = "抄表叶片1根部到叶片1叶尖 测试类型", example = "1 无人机测试、2 无人吊篮测试", notes = "抄表叶片1根部到叶片1叶尖 测试类型") + @TableField(exist = false) + private String ypfltddzcs_0_TestType; + + @ApiModelProperty(value = "抄表叶片2根部到叶片2叶尖 导线阻值照片1", example = "https://123.png,https://456.png", notes = "抄表叶片2根部到叶片2叶尖 导线阻值照片1") + @TableField(exist = false) + private String ypfltddzcs_1_0_Images; + + @ApiModelProperty(value = "抄表叶片2根部到叶片2叶尖 导线阻值1", example = "2.2", notes = "抄表叶片2根部到叶片2叶尖 导线阻值1") + @TableField(exist = false) + private String ypfltddzcs_1_0_Value; + + @ApiModelProperty(value = "抄表叶片2根部到叶片2叶尖 实际电阻值1", example = "2.2", notes = "抄表叶片2根部到叶片2叶尖 实际电阻值1") + @TableField(exist = false) + private String ypfltddzcs_1_0_RealValue; + + @ApiModelProperty(value = "抄表叶片2根部到叶片2叶尖 导线阻值照片2", example = "https://123.png,https://456.png", notes = "抄表叶片2根部到叶片2叶尖 导线阻值照片2") + @TableField(exist = false) + private String ypfltddzcs_1_1_Images; + + @ApiModelProperty(value = "抄表叶片2根部到叶片2叶尖 导线阻值2", example = "2.2", notes = "抄表叶片2根部到叶片2叶尖 导线阻值2") + @TableField(exist = false) + private String ypfltddzcs_1_1_Value; + + @ApiModelProperty(value = "抄表叶片2根部到叶片2叶尖 实际电阻值2", example = "2.2", notes = "抄表叶片2根部到叶片2叶尖 实际电阻值2") + @TableField(exist = false) + private String ypfltddzcs_1_1_RealValue; + + @ApiModelProperty(value = "抄表叶片2根部到叶片2叶尖 导线阻值照片3", example = "https://123.png,https://456.png", notes = "抄表叶片2根部到叶片2叶尖 导线阻值照片3") + @TableField(exist = false) + private String ypfltddzcs_1_2_Images; + + @ApiModelProperty(value = "抄表叶片2根部到叶片2叶尖 导线阻值3", example = "2.2", notes = "抄表叶片2根部到叶片2叶尖 导线阻值3") + @TableField(exist = false) + private String ypfltddzcs_1_2_Value; + + @ApiModelProperty(value = "抄表叶片2根部到叶片2叶尖 实际电阻值3", example = "2.2", notes = "抄表叶片2根部到叶片2叶尖 实际电阻值3") + @TableField(exist = false) + private String ypfltddzcs_1_2_RealValue; + + @ApiModelProperty(value = "抄表叶片2根部到叶片2叶尖 是否不导通", example = "0导通,1不导通,默认导通", notes = "抄表叶片2根部到叶片2叶尖 是否不导通") + @TableField(exist = false) + private String ypfltddzcs_1_BreakOver; + + @ApiModelProperty(value = "抄表叶片2根部到叶片2叶尖 平行数据个数默认1", example = "默认1", notes = "抄表叶片2根部到叶片2叶尖 平行数据个数默认1") + @TableField(exist = false) + private String ypfltddzcs_1_Num; + + @ApiModelProperty(value = "抄表叶片2根部到叶片2叶尖 电阻平均值", example = "0.3", notes = "抄表叶片2根部到叶片2叶尖 电阻平均值") + @TableField(exist = false) + private String ypfltddzcs_1_MeanValue; + + @ApiModelProperty(value = "抄表叶片2根部到叶片2叶尖 测试类型", example = "1 无人机测试、2 无人吊篮测试", notes = "抄表叶片2根部到叶片2叶尖 测试类型") + @TableField(exist = false) + private String ypfltddzcs_1_TestType; + + @ApiModelProperty(value = "抄表叶片3根部到叶片3叶尖 导线阻值照片1", example = "https://123.png,https://456.png", notes = "抄表叶片2根部到叶片2叶尖 导线阻值照片1") + @TableField(exist = false) + private String ypfltddzcs_2_0_Images; + + @ApiModelProperty(value = "抄表叶片3根部到叶片3叶尖 导线阻值1", example = "2.2", notes = "抄表叶片3根部到叶片3叶尖 导线阻值1") + @TableField(exist = false) + private String ypfltddzcs_2_0_Value; + + @ApiModelProperty(value = "抄表叶片3根部到叶片3叶尖 实际电阻值1", example = "2.2", notes = "抄表叶片3根部到叶片3叶尖 实际电阻值1") + @TableField(exist = false) + private String ypfltddzcs_2_0_RealValue; + + @ApiModelProperty(value = "抄表叶片3根部到叶片3叶尖 导线阻值照片2", example = "https://123.png,https://456.png", notes = "抄表叶片3根部到叶片3叶尖 导线阻值照片2") + @TableField(exist = false) + private String ypfltddzcs_2_1_Images; + + @ApiModelProperty(value = "抄表叶片3根部到叶片3叶尖 导线阻值2", example = "2.2", notes = "抄表叶片3根部到叶片3叶尖 导线阻值2") + @TableField(exist = false) + private String ypfltddzcs_2_1_Value; + + @ApiModelProperty(value = "抄表叶片3根部到叶片3叶尖 实际电阻值2", example = "2.2", notes = "抄表叶片3根部到叶片3叶尖 实际电阻值2") + @TableField(exist = false) + private String ypfltddzcs_2_1_RealValue; + + @ApiModelProperty(value = "抄表叶片3根部到叶片3叶尖 导线阻值照片3", example = "https://123.png,https://456.png", notes = "抄表叶片3根部到叶片3叶尖 导线阻值照片3") + @TableField(exist = false) + private String ypfltddzcs_2_2_Images; + + @ApiModelProperty(value = "抄表叶片3根部到叶片3叶尖 导线阻值3", example = "2.2", notes = "抄表叶片3根部到叶片3叶尖 导线阻值3") + @TableField(exist = false) + private String ypfltddzcs_2_2_Value; + + @ApiModelProperty(value = "抄表叶片3根部到叶片3叶尖 实际电阻值3", example = "2.2", notes = "抄表叶片3根部到叶片3叶尖 实际电阻值3") + @TableField(exist = false) + private String ypfltddzcs_2_2_RealValue; + + @ApiModelProperty(value = "抄表叶片3根部到叶片3叶尖 是否不导通", example = "0导通,1不导通,默认导通", notes = "抄表叶片3根部到叶片3叶尖 是否不导通") + @TableField(exist = false) + private String ypfltddzcs_2_BreakOver; + + @ApiModelProperty(value = "抄表叶片3根部到叶片3叶尖 平行数据个数默认1", example = "默认1", notes = "抄表叶片3根部到叶片3叶尖 平行数据个数默认1") + @TableField(exist = false) + private String ypfltddzcs_2_Num; + + @ApiModelProperty(value = "抄表叶片3根部到叶片3叶尖 电阻平均值", example = "0.3", notes = "抄表叶片3根部到叶片3叶尖 电阻平均值") + @TableField(exist = false) + private String ypfltddzcs_2_MeanValue; + + @ApiModelProperty(value = "抄表叶片3根部到叶片3叶尖 测试类型", example = "1 无人机测试、2 无人吊篮测试", notes = "抄表叶片3根部到叶片3叶尖 测试类型") + @TableField(exist = false) + private String ypfltddzcs_2_TestType; + +//--------------------------------------------------抄表结束------------------------------------------------------------------------------ +//3+2*2个导线阻值=7个字段, +//3+2*2个导线阻值照片=7个字段, +//2个规定值=2个字段,只有等电位和风机引雷可以切换 + @ApiModelProperty(value = "接地电阻测试 公用导线阻值照片", example = "https://123.png,https://456.png", notes = "接地电阻测试 公用导线阻值照片") + @TableField(exist = false) + private String jddzcsImages; + + @ApiModelProperty(value = "接地电阻测试 公用导线阻值", example = "2.2", notes = "接地电阻测试 公用导线阻值") + @TableField(exist = false) + private String jddzcsValue; + + @ApiModelProperty(value = "等电位测试(至塔下防雷接地环) 公用导线阻值照片", example = "https://123.png,https://456.png", notes = "等电位测试(至塔下防雷接地环) 公用导线阻值照片") + @TableField(exist = false) + private String ddwcsImages; + + @ApiModelProperty(value = "等电位测试(至塔下防雷接地环) 公用导线阻值", example = "2.2", notes = "等电位测试(至塔下防雷接地环) 公用导线阻值") + @TableField(exist = false) + private String ddwcsValue; + + @ApiModelProperty(value = "等电位测试(至塔下防雷接地环) 规定值", example = "2.2", notes = "等电位测试(至塔下防雷接地环) 规定值") + @TableField(exist = false) + private String ddwcsRatedValue; + + @ApiModelProperty(value = "风机引雷通道电阻测试 公用导线0阻值照片0", example = "https://123.png,https://456.png", notes = "风机引雷通道电阻测试 公用导线0阻值照片0") + @TableField(exist = false) + private String fjyltddzcs_0_Images0; + + @ApiModelProperty(value = "风机引雷通道电阻测试 公用导线0阻值0", example = "2.2", notes = "风机引雷通道电阻测试 公用导线0阻值0") + @TableField(exist = false) + private String fjyltddzcs_0_Value0; + + @ApiModelProperty(value = "风机引雷通道电阻测试 公用导线0阻值照片1", example = "https://123.png,https://456.png", notes = "风机引雷通道电阻测试 公用导线0阻值照片1") + @TableField(exist = false) + private String fjyltddzcs_0_Images1; + + @ApiModelProperty(value = "风机引雷通道电阻测试 公用导线0阻值1", example = "2.2", notes = "风机引雷通道电阻测试 公用导线0阻值1") + @TableField(exist = false) + private String fjyltddzcs_0_Value1; + + @ApiModelProperty(value = "风机引雷通道电阻测试 公用导线1阻值照片0", example = "https://123.png,https://456.png", notes = "风机引雷通道电阻测试 公用导线1阻值照片0") + @TableField(exist = false) + private String fjyltddzcs_1_Images0; + + @ApiModelProperty(value = "风机引雷通道电阻测试 公用导线1阻值0", example = "2.2", notes = "风机引雷通道电阻测试 公用导线1阻值0") + @TableField(exist = false) + private String fjyltddzcs_1_Value0; + + @ApiModelProperty(value = "风机引雷通道电阻测试 公用导线1阻值照片1", example = "https://123.png,https://456.png", notes = "风机引雷通道电阻测试 公用导线1阻值照片1") + @TableField(exist = false) + private String fjyltddzcs_1_Images1; + + @ApiModelProperty(value = "风机引雷通道电阻测试 公用导线1阻值1", example = "2.2", notes = "风机引雷通道电阻测试 公用导线1阻值1") + @TableField(exist = false) + private String fjyltddzcs_1_Value1; + + @ApiModelProperty(value = "风机引雷通道电阻测试 规定值", example = "2.2", notes = "风机引雷通道电阻测试 规定值") + @TableField(exist = false) + private String fjyltddzcsRatedValue; + + @ApiModelProperty(value = "叶片防雷通道电阻测试 公用导线阻值照片", example = "https://123.png,https://456.png", notes = "叶片防雷通道电阻测试 公用导线阻值照片") + @TableField(exist = false) + private String ypfltddzcsImages; + + @ApiModelProperty(value = "叶片防雷通道电阻测试 公用导线阻值", example = "2.2", notes = "叶片防雷通道电阻测试 公用导线阻值") + @TableField(exist = false) + private String ypfltddzcsValue; + +// -------------------公用阻值结束 + + @ApiModelProperty(value = "防雷是否不合格", example = "true", notes = "防雷是否不合格") + private Boolean lightningUnqualified; + +} diff --git a/core/src/main/java/com/dite/znpt/domain/entity/job/JobInWork.java b/core/src/main/java/com/dite/znpt/domain/entity/job/JobInWork.java new file mode 100644 index 0000000..ce7ef23 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/job/JobInWork.java @@ -0,0 +1,131 @@ +package com.dite.znpt.domain.entity.job; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.annotations.MatchType; +import com.dite.znpt.annotations.QueryCondition; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.List; + +/** + * @author wujinsong + * @date 2023/2/16 22:50 + * @description: 项目中指定机组各人员内部工作内容 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("gaea_job_in_work") +public class JobInWork extends AuditableEntity implements Serializable { + + @ApiModelProperty(value = "id", example = "78979879375", notes = "id") + @TableId(value = "id", type = IdType.ASSIGN_UUID) + private String Id; + + @ApiModelProperty(value = "岗位id", example = "78979879375", notes = "岗位id") + @QueryCondition(func = MatchType.like) + private String jobId; + + @ApiModelProperty(value = "安全交底及安全风险点照片", example = "https://123.png,https://456.png", notes = "安全交底及安全风险点照片") + private String safetyRiskPointImages; + + @ApiModelProperty(value = "地勤工作描述", example = "工作描述工作描述", notes = "地勤工作描述") + private String jobDesc; + + @ApiModelProperty(value = "地勤照片", example = "https://123.png,https://456.png", notes = "地勤照片") + private String images; + + @ApiModelProperty(value = "地勤工作地点描述", example = "工作地点描述工作地点描述", notes = "地勤工作地点描述") + private String groundServiceJobAddressDesc; + + @ApiModelProperty(value = "地勤工作地点照片", example = "https://123.png,https://456.png", notes = "地勤工作地点照片") + private String groundServiceJobAddressImages; + + @ApiModelProperty(value = "地勤安全管控描述", example = "安全管控描述安全管控描述", notes = "地勤安全管控描述") + private String groundServiceSecurityControlDesc; + + @ApiModelProperty(value = "地勤安全管控照片", example = "https://123.png,https://456.png", notes = "地勤安全管控照片") + private String groundServiceSecurityControlImages; + + @ApiModelProperty(value = "地勤工作时间", example = "2022-01-22 10:00:00", notes = "地勤工作时间") + private String groundServiceWorkTime; + + @ApiModelProperty(value = "司机工作描述", example = "工作描述工作描述", notes = "司机工作描述") + private String driverJobDesc; + + @ApiModelProperty(value = "司机照片", example = "https://123.png,https://456.png", notes = "司机照片") + private String driverImages; + + @ApiModelProperty(value = "司机工作地点描述", example = "工作地点描述工作地点描述", notes = "司机工作地点描述") + private String driverJobAddressDesc; + + @ApiModelProperty(value = "司机工作地点照片", example = "https://123.png,https://456.png", notes = "司机工作地点照片") + private String driverJobAddressImages; + + @ApiModelProperty(value = "司机安全管控描述", example = "安全管控描述安全管控描述", notes = "司机安全管控描述") + private String driverSecurityControlDesc; + + @ApiModelProperty(value = "司机安全管控照片", example = "https://123.png,https://456.png", notes = "司机安全管控照片") + private String driverSecurityControlImages; + + @ApiModelProperty(value = "司机工作时间", example = "2022-01-22 10:00:00", notes = "司机工作时间") + private String driverWorkTime; + + @ApiModelProperty(value = "登高工作描述", example = "工作描述工作描述", notes = "登高工作描述") + private String ascendingJobDesc; + + @ApiModelProperty(value = "登高照片", example = "工作描述工作描述", notes = "登高照片") + private String ascendingImages; + + @ApiModelProperty(value = "登高工作地点描述", example = "工作地点描述工作地点描述", notes = "登高工作地点描述") + private String ascendingJobAddressDesc; + + @ApiModelProperty(value = "登高工作地点照片", example = "https://123.png,https://456.png", notes = "登高工作地点照片") + private String ascendingJobAddressImages; + + @ApiModelProperty(value = "登高安全管控描述", example = "安全管控描述安全管控描述", notes = "登高安全管控描述") + private String ascendingSecurityControlDesc; + + @ApiModelProperty(value = "登高安全管控照片", example = "https://123.png,https://456.png", notes = "登高安全管控照片") + private String ascendingSecurityControlImages; + + @ApiModelProperty(value = "登高工作时间", example = "2022-01-22 10:00:00", notes = "登高工作时间") + private String ascendingWorkTime; + + @ApiModelProperty(value = "登高等级", example = "1一级 2二级 3三级 4四级 5五级", notes = "登高等级") + @QueryCondition(func = MatchType.like) + private String ascendingLevel; + + @ApiModelProperty(value = "登高部件列表", example = "[]", notes = "登高部件列表") + @TableField(exist = false) + @QueryCondition(func = MatchType.equal) + private List ascendingPartsList; + + @ApiModelProperty(value = "状态", example = "0草稿 1已提交 2组长提交 3项目经理审批通过", notes = "状态") + @QueryCondition(func = MatchType.equal) + private String status; + + @ApiModelProperty(value = "安全员审批状态", example = "0未审批 1已审批", notes = "安全员审批状态") + @QueryCondition(func = MatchType.equal) + private String safetyOfficerStatus; + + @ApiModelProperty(value = "质量员审批状态", example = "0未审批 1已审批", notes = "质量员审批状态") + @QueryCondition(func = MatchType.equal) + private String qualityOfficerStatus; + + @ApiModelProperty(value = "施工人员", example = "施工人员", notes = "施工人员") + @TableField(exist = false) + @QueryCondition(func = MatchType.equal) + private String constructionPersonnel; + + @ApiModelProperty(value = "具体岗位", example = "具体岗位", notes = "具体岗位") + @TableField(exist = false) + @QueryCondition(func = MatchType.equal) + private String jobCode; +} diff --git a/core/src/main/java/com/dite/znpt/domain/entity/job/JobInWorkParts.java b/core/src/main/java/com/dite/znpt/domain/entity/job/JobInWorkParts.java new file mode 100644 index 0000000..9a7f3a5 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/job/JobInWorkParts.java @@ -0,0 +1,128 @@ +package com.dite.znpt.domain.entity.job; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.annotations.MatchType; +import com.dite.znpt.annotations.QueryCondition; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + * @author wujinsong + * @date 2023/2/16 22:50 + * @description: 项目中指定机组各人员内部工作内容 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("gaea_job_in_work_parts") +public class JobInWorkParts extends AuditableEntity implements Serializable { + + @ApiModelProperty(value = "id", example = "78979879375", notes = "id") + @TableId(value = "id", type = IdType.ASSIGN_UUID) + private String Id; + + @ApiModelProperty(value = "岗位id", example = "78979879375", notes = "岗位id") + @QueryCondition(func = MatchType.like) + private String jobId; + + @ApiModelProperty(value = "叶片盖板原照片", example = "https://123.png,https://456.png", notes = "叶片盖板原照片") + private String leafPlateImages; + + @ApiModelProperty(value = "叶片盖板原描述", example = "工作描述工作描述", notes = "叶片盖板原描述") + private String leafPlateDesc; + + @ApiModelProperty(value = "叶片铭牌照片", example = "https://123.png,https://456.png", notes = "叶片铭牌照片") + private String leafDogtagImages; + + @ApiModelProperty(value = "叶片铭牌描述", example = "工作描述工作描述", notes = "叶片铭牌描述") + private String leafDogtagDesc; + + @ApiModelProperty(value = "叶片概况照片", example = "https://123.png,https://456.png", notes = "叶片概况照片") + private String leafProfileImages; + + @ApiModelProperty(value = "叶片概况描述", example = "工作描述工作描述", notes = "叶片概况描述") + private String leafProfileDesc; + + @ApiModelProperty(value = "腹板变形情况照片", example = "https://123.png,https://456.png", notes = "腹板变形情况照片") + private String webDeformationImages; + + @ApiModelProperty(value = "腹板变形情况", example = "0未变形 1有变形", notes = "腹板变形情况") + private String webDeformation; + + @ApiModelProperty(value = "腹板开裂情况照片", example = "https://123.png,https://456.png", notes = "腹板开裂情况照片") + private String webCrazeImages; + + @ApiModelProperty(value = "腹板开裂情况", example = "0未开裂 1有开裂", notes = "腹板开裂情况") + private String webCraze; + + @ApiModelProperty(value = "腹板粘接缝照片", example = "https://123.png,https://456.png", notes = "腹板粘接缝照片") + private String webGluedJointImages; + + @ApiModelProperty(value = "腹板粘接缝开裂情况", example = "0未开裂 1有开裂", notes = "腹板粘接缝开裂情况") + private String webGluedJoint; + + @ApiModelProperty(value = "后缘粘接缝照片", example = "https://123.png,https://456.png", notes = "后缘粘接缝照片") + private String trailingEdgeGluedJointImages; + + @ApiModelProperty(value = "后缘粘接缝开裂情况", example = "0未开裂 1有开裂", notes = "后缘粘接缝开裂情况") + private String trailingEdgeGluedJoint; + + @ApiModelProperty(value = "前缘粘接缝照片", example = "https://123.png,https://456.png", notes = "前缘粘接缝照片") + private String leadingEdgeGluedJointImages; + + @ApiModelProperty(value = "前缘粘接缝开裂情况", example = "0未开裂 1有开裂", notes = "前缘粘接缝开裂情况") + private String leadingEdgeGluedJoint; + + @ApiModelProperty(value = "ps/ss面开裂情况照片", example = "https://123.png,https://456.png", notes = "ps/ss面开裂情况照片") + private String psCrackingImages; + + @ApiModelProperty(value = "ps/ss面开裂情况", example = "0未开裂 1有开裂", notes = "ps/ss面开裂情况") + private String psCracking; + + @ApiModelProperty(value = "ps/ss面褶皱情况照片", example = "https://123.png,https://456.png", notes = "ps/ss面褶皱情况照片") + private String psWrinkleImages; + + @ApiModelProperty(value = "ps/ss面褶皱情况", example = "0无褶皱 1有褶皱", notes = "ps/ss面褶皱情况") + private String psWrinkle; + + @ApiModelProperty(value = "ps/ss面发白情况照片", example = "https://123.png,https://456.png", notes = "ps/ss面发白情况照片") + private String psGrowWhiteImages; + + @ApiModelProperty(value = "ps/ss面发白情况", example = "0无发白 1有发白", notes = "ps/ss面发白情况") + private String psGrowWhite; + + @ApiModelProperty(value = "ps/ss面碳化情况照片", example = "https://123.png,https://456.png", notes = "ps/ss面碳化情况照片") + private String psCarbonizeImages; + + @ApiModelProperty(value = "ps/ss面碳化情况", example = "0无碳化 1有碳化", notes = "ps/ss面碳化情况") + private String psCarbonize; + + @ApiModelProperty(value = "ps/ss面局部透光照片", example = "https://123.png,https://456.png", notes = "ps/ss面局部透光照片") + private String psTransmittingImages; + + @ApiModelProperty(value = "ps/ss面局部透光", example = "0无透光 1有透光", notes = "ps/ss面局部透光") + private String psTransmitting; + + @ApiModelProperty(value = "防雷导线松脱、断开照片", example = "https://123.png,https://456.png", notes = "防雷导线松脱、断开照片") + private String lightningConductorImages; + + @ApiModelProperty(value = "防雷导线松脱、断开", example = "0无异常 1有异常", notes = "防雷导线松脱、断开") + private String lightningConductor; + + @ApiModelProperty(value = "防雷卡遗失情况照片", example = "https://123.png,https://456.png", notes = "防雷卡遗失情况照片") + private String lightningCardLostImages; + + @ApiModelProperty(value = "防雷卡遗失情况", example = "0无异常 1有异常", notes = "防雷卡遗失情况") + private String lightningCardLost; + + @ApiModelProperty(value = "叶片盖板检查后照片", example = "https://123.png,https://456.png", notes = "叶片盖板检查后照片") + private String leafProfileCheckImages; + + @ApiModelProperty(value = "叶片盖板检查后描述", example = "工作描述工作描述", notes = "叶片盖板检查后描述") + private String leafProfileCheckDesc; +} diff --git a/core/src/main/java/com/dite/znpt/domain/entity/job/JobInfo.java b/core/src/main/java/com/dite/znpt/domain/entity/job/JobInfo.java new file mode 100644 index 0000000..689a0d6 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/job/JobInfo.java @@ -0,0 +1,70 @@ +package com.dite.znpt.domain.entity.job; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.annotations.MatchType; +import com.dite.znpt.annotations.QueryCondition; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author wujinsong + * @date 2023/2/16 22:50 + * @description: 项目中指定机组各人员工作岗位 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("gaea_job") +public class JobInfo extends AuditableEntity implements Serializable { + + @ApiModelProperty(value = "id", example = "78979879375", notes = "id") + @TableId(value = "id", type = IdType.ASSIGN_UUID) + private String Id; + + @ApiModelProperty(value = "项目id", example = "78979879375", notes = "项目id") + @QueryCondition(func = MatchType.like) + private String projectId; + + @ApiModelProperty(value = "机组id", example = "78979879375", notes = "机组id") + @QueryCondition(func = MatchType.like) + private String crewId; + + @ApiModelProperty(value = "工作类型", example = "工作类型", notes = "工作类型") + @QueryCondition(func = MatchType.equal) + private String workType; + + @ApiModelProperty(value = "具体岗位", example = "具体岗位", notes = "具体岗位") + @QueryCondition(func = MatchType.equal) + private String jobCode; + + @ApiModelProperty(value = "施工人员", example = "施工人员", notes = "施工人员") + @QueryCondition(func = MatchType.like) + private String constructionPersonnel; + + @ApiModelProperty(value = "施工人员id", example = "施工人员id", notes = "施工人员id") + @QueryCondition(func = MatchType.equal) + private String constructionPersonnelId; + + @ApiModelProperty(value = "状态", example = "0草稿 1已提交 2组长提交 3项目经理审批通过", notes = "状态", hidden = true) + @QueryCondition(func = MatchType.equal) + private String status; + + @ApiModelProperty(value = "安全员审批状态", example = "0未审批 1已审批", notes = "安全员审批状态", hidden = true) + @QueryCondition(func = MatchType.equal) + private String safetyOfficerStatus; + + @ApiModelProperty(value = "质量员审批状态", example = "0未审批 1已审批", notes = "质量员审批状态", hidden = true) + @QueryCondition(func = MatchType.equal) + private String qualityOfficerStatus; + + @ApiModelProperty(value = "提交时间", example = "2023-11-11", notes = "提交时间", hidden = true) + @QueryCondition(func = MatchType.equal) + private Date submitTime; +} diff --git a/core/src/main/java/com/dite/znpt/domain/entity/job/JobOutWork.java b/core/src/main/java/com/dite/znpt/domain/entity/job/JobOutWork.java new file mode 100644 index 0000000..c28424b --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/job/JobOutWork.java @@ -0,0 +1,210 @@ +package com.dite.znpt.domain.entity.job; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.annotations.MatchType; +import com.dite.znpt.annotations.QueryCondition; +import com.dite.znpt.domain.AuditableEntity; +import com.dite.znpt.domain.dto.OutWorkDefectDTO; +import com.dite.znpt.typehandle.ArrayObjectTypeHandler; +import com.dite.znpt.typehandle.OutworkDefectHandler; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.List; + +/** + * @author wujinsong + * @date 2023/2/16 22:50 + * @description: 项目中指定机组各人员外部工作内容 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("gaea_job_out_work") +public class JobOutWork extends AuditableEntity implements Serializable { + + @ApiModelProperty(value = "id", example = "78979879375", notes = "id") + @TableId(value = "id", type = IdType.ASSIGN_UUID) + private String Id; + + @ApiModelProperty(value = "岗位id", example = "78979879375", notes = "岗位id") + @QueryCondition(func = MatchType.like) + private String jobId; + + @ApiModelProperty(value = "安全交底及安全风险点照片", example = "https://123.png,https://456.png", notes = "安全交底及安全风险点照片") + private String safetyRiskPointImages; + + @ApiModelProperty(value = "司机工作描述", example = "工作描述工作描述", notes = "司机工作描述") + private String driverJobDesc; + + @ApiModelProperty(value = "司机照片", example = "https://123.png,https://456.png", notes = "司机照片") + private String driverImages; + + @ApiModelProperty(value = "司机工作地点描述", example = "工作地点描述工作地点描述", notes = "司机工作地点描述") + private String driverJobAddressDesc; + + @ApiModelProperty(value = "司机工作地点照片", example = "https://123.png,https://456.png", notes = "司机工作地点照片") + private String driverJobAddressImages; + + @ApiModelProperty(value = "司机安全管控描述", example = "安全管控描述安全管控描述", notes = "司机安全管控描述") + private String driverSecurityControlDesc; + + @ApiModelProperty(value = "司机安全管控照片", example = "https://123.png,https://456.png", notes = "司机安全管控照片") + private String driverSecurityControlImages; + + @ApiModelProperty(value = "司机工作时间", example = "2022-01-22 10:00:00", notes = "司机工作时间") + private String driverWorkTime; + + @ApiModelProperty(value = "地勤工作描述", example = "工作描述工作描述", notes = "地勤工作描述") + private String groundServiceJobDesc; + + @ApiModelProperty(value = "地勤工作内容照片", example = "https://123.png,https://456.png", notes = "地勤工作内容照片") + private String groundServiceImages; + + @ApiModelProperty(value = "地勤工作地点描述", example = "工作地点描述工作地点描述", notes = "地勤工作地点描述") + private String groundServiceJobAddressDesc; + + @ApiModelProperty(value = "地勤工作地点照片", example = "https://123.png,https://456.png", notes = "地勤工作地点照片") + private String groundServiceJobAddressImages; + + @ApiModelProperty(value = "地勤安全管控描述", example = "安全管控描述安全管控描述", notes = "地勤安全管控描述") + private String groundServiceSecurityControlDesc; + + @ApiModelProperty(value = "地勤安全管控照片", example = "https://123.png,https://456.png", notes = "地勤安全管控照片") + private String groundServiceSecurityControlImages; + + @ApiModelProperty(value = "地勤工作时间", example = "2022-01-22 10:00:00", notes = "地勤工作时间") + private String groundServiceWorkTime; + + @ApiModelProperty(value = "飞手工作描述", example = "工作描述工作描述", notes = "飞手工作描述") + private String jobDesc; + + @ApiModelProperty(value = "飞手工作照片", example = "https://123.png,https://456.png", notes = "飞手工作照片") + private String images; + + @ApiModelProperty(value = "飞手工作地点描述", example = "工作地点描述工作地点描述", notes = "飞手工作地点描述") + private String droneFlyerJobAddressDesc; + + @ApiModelProperty(value = "飞手工作地点照片", example = "https://123.png,https://456.png", notes = "飞手工作地点照片") + private String droneFlyerJobAddressImages; + + @ApiModelProperty(value = "飞手安全管控描述", example = "安全管控描述安全管控描述", notes = "飞手安全管控描述") + private String droneFlyerSecurityControlDesc; + + @ApiModelProperty(value = "飞手安全管控照片", example = "https://123.png,https://456.png", notes = "飞手安全管控照片") + private String droneFlyerSecurityControlImages; + + @ApiModelProperty(value = "飞手工作时间", example = "2022-01-22 10:00:00", notes = "飞手工作时间") + private String droneFlyerWorkTime; + + @ApiModelProperty(value = "飞手施工时间", example = "2022-01-22 10:00:00", notes = "飞手施工时间") + private String droneFlyerConstructionTime; + + @ApiModelProperty(value = "飞手拍摄图片数量", example = "2", notes = "飞手拍摄图片数量") + private String droneFlyerImageCount; + + @ApiModelProperty(value = "飞手拍摄图片质量", example = "10", notes = "飞手拍摄图片质量") + private String droneFlyerImageQuality; + + @ApiModelProperty(value = "飞手部件列表", example = "[]", notes = "部件列表") + @TableField(typeHandler = OutworkDefectHandler.class) + private List droneFlyerPartsList; + + @ApiModelProperty(value = "飞助工作描述", example = "工作描述工作描述", notes = "飞助工作描述") + private String flyAidJobDesc; + + @ApiModelProperty(value = "飞助照片", example = "https://123.png,https://456.png", notes = "飞助照片") + private String flyAidImages; + + @ApiModelProperty(value = "飞助工作地点描述", example = "工作地点描述工作地点描述", notes = "飞助工作地点描述") + private String flyAidJobAddressDesc; + + @ApiModelProperty(value = "飞助工作地点照片", example = "https://123.png,https://456.png", notes = "飞助工作地点照片") + private String flyAidJobAddressImages; + + @ApiModelProperty(value = "飞助安全管控描述", example = "安全管控描述安全管控描述", notes = "飞助安全管控描述") + private String flyAidSecurityControlDesc; + + @ApiModelProperty(value = "飞助安全管控照片", example = "https://123.png,https://456.png", notes = "飞助安全管控照片") + private String flyAidSecurityControlImages; + + @ApiModelProperty(value = "飞助工作时间", example = "2022-01-22 10:00:00", notes = "飞助工作时间") + private String flyAidWorkTime; + + @ApiModelProperty(value = "飞助施工时间", example = "2022-01-22 10:00:00", notes = "飞助施工时间") + private String flyAidConstructionTime; + + @ApiModelProperty(value = "飞助拍摄图片数量", example = "2", notes = "飞助拍摄图片数量") + private String flyAidImageCount; + + @ApiModelProperty(value = "飞助拍摄图片质量", example = "10", notes = "飞助拍摄图片质量") + private String flyAidImageQuality; + + @ApiModelProperty(value = "飞助部件列表", example = "[]", notes = "部件列表") + @TableField(typeHandler = OutworkDefectHandler.class) + private List flyAidPartsList; + + @ApiModelProperty(value = "登高工作描述", example = "工作描述工作描述", notes = "登高工作描述") + private String ascendingJobDesc; + + @ApiModelProperty(value = "登高等级", example = "1一级 2二级 3三级 4四级 5五级", notes = "登高等级") + @QueryCondition(func = MatchType.like) + private String ascendingLevel; + + @ApiModelProperty(value = "登高照片", example = "https://123.png,https://456.png", notes = "登高照片") + private String ascendingImages; + + @ApiModelProperty(value = "登高工作地点描述", example = "工作地点描述工作地点描述", notes = "登高工作地点描述") + private String ascendingJobAddressDesc; + + @ApiModelProperty(value = "登高工作地点照片", example = "https://123.png,https://456.png", notes = "登高工作地点照片") + private String ascendingJobAddressImages; + + @ApiModelProperty(value = "登高安全管控描述", example = "安全管控描述安全管控描述", notes = "登高安全管控描述") + private String ascendingSecurityControlDesc; + + @ApiModelProperty(value = "登高安全管控照片", example = "https://123.png,https://456.png", notes = "登高安全管控照片") + private String ascendingSecurityControlImages; + + @ApiModelProperty(value = "登高工作时间", example = "2022-01-22 10:00:00", notes = "登高工作时间") + private String ascendingWorkTime; + + @ApiModelProperty(value = "登高施工时间", example = "2022-01-22 10:00:00", notes = "登高施工时间") + private String ascendingConstructionTime; + + @ApiModelProperty(value = "登高拍摄图片数量", example = "2", notes = "登高拍摄图片数量") + private String ascendingImageCount; + + @ApiModelProperty(value = "登高拍摄图片质量", example = "10", notes = "登高拍摄图片质量") + private String ascendingImageQuality; + + @ApiModelProperty(value = "登高部件列表", example = "[]", notes = "部件列表") + @TableField(typeHandler = OutworkDefectHandler.class) + private List ascendingPartsList; + + @ApiModelProperty(value = "状态", example = "0草稿 1已提交 2组长提交 3项目经理审批通过", notes = "状态") + @QueryCondition(func = MatchType.equal) + private String status; + + @ApiModelProperty(value = "安全员审批状态", example = "0未审批 1已审批", notes = "安全员审批状态") + @QueryCondition(func = MatchType.equal) + private String safetyOfficerStatus; + + @ApiModelProperty(value = "质量员审批状态", example = "0未审批 1已审批", notes = "质量员审批状态") + @QueryCondition(func = MatchType.equal) + private String qualityOfficerStatus; + + @ApiModelProperty(value = "施工人员", example = "施工人员", notes = "施工人员") + @TableField(exist = false) + @QueryCondition(func = MatchType.equal) + private String constructionPersonnel; + + @ApiModelProperty(value = "具体岗位", example = "具体岗位", notes = "具体岗位") + @TableField(exist = false) + @QueryCondition(func = MatchType.equal) + private String jobCode; +} diff --git a/core/src/main/java/com/dite/znpt/domain/entity/job/JobSummaryWork.java b/core/src/main/java/com/dite/znpt/domain/entity/job/JobSummaryWork.java new file mode 100644 index 0000000..45eb91e --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/job/JobSummaryWork.java @@ -0,0 +1,49 @@ +package com.dite.znpt.domain.entity.job; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.annotations.MatchType; +import com.dite.znpt.annotations.QueryCondition; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + * @author wujinsong + * @date 2023/2/16 22:50 + * @description: 项目中指定机组各人员外部工作内容 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("gaea_job_summary_work") +public class JobSummaryWork extends AuditableEntity implements Serializable { + + @ApiModelProperty(value = "id", example = "78979879375", notes = "id") + @TableId(value = "id", type = IdType.ASSIGN_UUID) + private String Id; + + @ApiModelProperty(value = "岗位id", example = "78979879375", notes = "岗位id") + @QueryCondition(func = MatchType.like) + private String jobId; + + @ApiModelProperty(value = "工作描述", example = "工作描述工作描述", notes = "工作描述") + @QueryCondition(func = MatchType.equal) + private String jobDesc; + + @ApiModelProperty(value = "状态", example = "0草稿 1已提交 2组长提交 3项目经理审批通过", notes = "状态") + @QueryCondition(func = MatchType.equal) + private String status; + + @ApiModelProperty(value = "施工人员", example = "施工人员", notes = "施工人员") + @TableField(exist = false) + private String constructionPersonnel; + + @ApiModelProperty(value = "具体岗位", example = "具体岗位", notes = "具体岗位") + @TableField(exist = false) + private String jobCode; +} diff --git a/core/src/main/java/com/dite/znpt/domain/page/PageDomain.java b/core/src/main/java/com/dite/znpt/domain/page/PageDomain.java new file mode 100644 index 0000000..bcab0d1 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/page/PageDomain.java @@ -0,0 +1,67 @@ +package com.dite.znpt.domain.page; + +import cn.hutool.core.util.BooleanUtil; +import cn.hutool.core.util.StrUtil; +import lombok.Data; + +import java.util.Objects; + +/** + * 分页数据 + * + * @author kyland + */ +@Data +public class PageDomain { + /** + * 当前记录起始索引 + */ + private Integer pageNum; + + /** + * 每页显示记录数 + */ + private Integer pageSize; + + /** + * 排序列 + */ + private String orderByColumn; + + /** + * 排序的方向desc或者asc + */ + private String isAsc = "asc"; + + /** + * 分页参数合理化 + */ + private Boolean reasonable = true; + + public String getOrderBy() { + if (StrUtil.isEmpty(orderByColumn)) { + return ""; + } + return StrUtil.toUnderlineCase(orderByColumn) + " " + isAsc; + } + + public void setIsAsc(String isAsc) { + if (StrUtil.isNotEmpty(isAsc)) { + // 兼容前端排序类型 + if ("ascending".equals(isAsc)) { + isAsc = "asc"; + } else if ("descending".equals(isAsc)) { + isAsc = "desc"; + } + this.isAsc = isAsc; + } + } + + public boolean getReasonable() { + return BooleanUtil.isTrue(reasonable)|| Objects.isNull(reasonable); + } + + public void setReasonable(Boolean reasonable) { + this.reasonable = reasonable; + } +} diff --git a/core/src/main/java/com/dite/znpt/domain/page/TableSupport.java b/core/src/main/java/com/dite/znpt/domain/page/TableSupport.java new file mode 100644 index 0000000..fd07849 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/page/TableSupport.java @@ -0,0 +1,74 @@ +package com.dite.znpt.domain.page; + +import cn.hutool.core.convert.Convert; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; + +/** + * 表格数据处理 + * + * @author kyland + */ +public class TableSupport { + /** + * 当前记录起始索引 + */ + public static final String PAGE_NUM = "pageNum"; + + /** + * 每页显示记录数 + */ + public static final String PAGE_SIZE = "pageSize"; + + /** + * 排序列 + */ + public static final String ORDER_BY_COLUMN = "orderByColumn"; + + /** + * 排序的方向 "desc" 或者 "asc". + */ + public static final String IS_ASC = "isAsc"; + + /** + * 分页参数合理化 + */ + public static final String REASONABLE = "reasonable"; + + /** + * 封装分页对象 + */ + public static PageDomain getPageDomain() { + PageDomain pageDomain = new PageDomain(); + pageDomain.setPageNum(Convert.toInt(getRequest().getParameter(PAGE_NUM), 1)); + pageDomain.setPageSize(Convert.toInt(getRequest().getParameter(PAGE_SIZE), 10)); + pageDomain.setOrderByColumn(getRequest().getParameter(ORDER_BY_COLUMN)); + pageDomain.setIsAsc(getRequest().getParameter(IS_ASC)); + pageDomain.setReasonable(Convert.toBool(getRequest().getParameter(REASONABLE))); + return pageDomain; + } + + public static PageDomain buildPageRequest() { + return getPageDomain(); + } + + public static ServletRequestAttributes getRequestAttributes() { + try { + RequestAttributes attributes = RequestContextHolder.getRequestAttributes(); + return (ServletRequestAttributes)attributes; + } catch (Exception var1) { + return null; + } + } + + public static HttpServletRequest getRequest() { + try { + return getRequestAttributes().getRequest(); + } catch (Exception var1) { + return null; + } + } +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/AppImageResp.java b/core/src/main/java/com/dite/znpt/domain/vo/AppImageResp.java new file mode 100644 index 0000000..9967839 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/AppImageResp.java @@ -0,0 +1,32 @@ +package com.dite.znpt.domain.vo; + +import com.dite.znpt.domain.entity.ImageEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class AppImageResp extends ImageEntity { + + @ApiModelProperty("部件名称") + private String partName; + + @ApiModelProperty("机组号") + private String turbineId; + + @ApiModelProperty("机组名称") + private String turbineName; + + @ApiModelProperty("项目id") + private String projectId; + + @ApiModelProperty("机组名称") + private String projectName; + + @ApiModelProperty("上传用户") + private String uploadUser; + + @ApiModelProperty(name = "图像来源,枚举:ImageSourceEnum") + private String imageSource; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/AppImageToPartReq.java b/core/src/main/java/com/dite/znpt/domain/vo/AppImageToPartReq.java new file mode 100644 index 0000000..b6d0147 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/AppImageToPartReq.java @@ -0,0 +1,53 @@ +package com.dite.znpt.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +@Data +public class AppImageToPartReq { + + @ApiModelProperty(value = "图片路径列表", required = true) + private List imagePaths; + + @ApiModelProperty(value = "部件id", required = true) + private String partId; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty("拍摄时间-起") + private LocalDateTime shootingTimeBegin; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty("拍摄时间-止") + private LocalDateTime shootingTimeEnd; + + @ApiModelProperty("天气,枚举:WeatherEnum") + private String weather; + + @ApiModelProperty("湿度(百分比)") + private Integer humidness; + + @ApiModelProperty("温度-低") + private Double temperatureMin; + + @ApiModelProperty("温度-高") + private Double temperatureMax; + + @ApiModelProperty("风力等级") + private Integer windLevel; + + @ApiModelProperty("拍摄方式,枚举ShootingMethodEnum") + private String shootingMethod; + + @ApiModelProperty("拍摄距离") + private Integer shootingDistance; + + @ApiModelProperty("采集员id") + private String collectorId; + + @ApiModelProperty("采集员姓名") + private String collectorName; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/AttachInfoReq.java b/core/src/main/java/com/dite/znpt/domain/vo/AttachInfoReq.java new file mode 100644 index 0000000..36c6899 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/AttachInfoReq.java @@ -0,0 +1,33 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author huise23 + * @date 2025/06/25 21:59 + * @Description: 附件信息表请求类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="AttachInfo请求对象", description="附件信息表") +public class AttachInfoReq implements Serializable { + + @Serial + private static final long serialVersionUID = -59837569061686176L; + + @ApiModelProperty("自定义路径") + private String userDefinedPath; + + @ApiModelProperty("文件类型") + private String fileType; + + @ApiModelProperty("备注") + private String remark; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/AttachInfoResp.java b/core/src/main/java/com/dite/znpt/domain/vo/AttachInfoResp.java new file mode 100644 index 0000000..f747e2b --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/AttachInfoResp.java @@ -0,0 +1,45 @@ +package com.dite.znpt.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author huise23 + * @date 2025/06/25 21:59 + * @Description: 附件信息表请求类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="AttachInfo响应对象", description="附件信息表") +public class AttachInfoResp implements Serializable { + + @Serial + private static final long serialVersionUID = -59837569061686176L; + + @ApiModelProperty("附件id") + private String attachId; + + @ApiModelProperty("业务id") + private String businessId; + + @ApiModelProperty("附件路径") + private String attachPath; + + @ApiModelProperty("文件类型") + private String fileType; + + @ApiModelProperty("备注") + private String remark; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty + private LocalDateTime createTime; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/AttendanceRecordReq.java b/core/src/main/java/com/dite/znpt/domain/vo/AttendanceRecordReq.java new file mode 100644 index 0000000..e9692f0 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/AttendanceRecordReq.java @@ -0,0 +1,34 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/7/21 21:10 + * @Description: + */ +@Data +@ApiModel("考勤记录请求对象") +public class AttendanceRecordReq implements Serializable { + @Serial + private static final long serialVersionUID = 3567864990724491657L; + + @NotBlank(message = "打卡照片不能为空") + @ApiModelProperty("打卡照片") + private String recordImage; + + @NotBlank(message = "打卡地点不能为空") + @ApiModelProperty("打卡地点,经纬度") + private String recordPosition; + + @ApiModelProperty("打卡地点,中文描述") + private String recordPositionLabel; + + +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/AttendanceRecordResp.java b/core/src/main/java/com/dite/znpt/domain/vo/AttendanceRecordResp.java new file mode 100644 index 0000000..22d250a --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/AttendanceRecordResp.java @@ -0,0 +1,54 @@ +package com.dite.znpt.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * @Author: gaoxiong + * @Date: 2025/7/21 21:11 + * @Description: + */ +@Data +@ApiModel("考勤记录响应对象") +public class AttendanceRecordResp implements Serializable { + @Serial + private static final long serialVersionUID = -4158464225924809958L; + + + @ApiModelProperty("考勤记录id") + private String recordId; + + @ApiModelProperty("考勤人员id") + private String userId; + + @ApiModelProperty("考勤人员") + private String name; + + @ApiModelProperty("记录类型, 0-上班,1-下班,2-无效") + private String recordType; + + @JsonFormat(pattern = "yyyy-MM-dd") + @ApiModelProperty("考勤日期") + private LocalDate attendanceDate; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty("打卡时间") + private LocalDateTime recordTime; + + @ApiModelProperty("打卡照片") + private String recordImage; + + @ApiModelProperty("打卡地点,经纬度") + private String recordPosition; + + @ApiModelProperty("打卡地点,中文描述") + private String recordPositionLabel; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/AudioFileInfoListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/AudioFileInfoListReq.java new file mode 100644 index 0000000..5a2b6cd --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/AudioFileInfoListReq.java @@ -0,0 +1,32 @@ +package com.dite.znpt.domain.vo; + +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.List; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author huise23 + * @date 2025/06/23 13:39 + * @Description: 音频文件信息请求实体 + */ +@Data +@ApiModel("音频文件信息列表请求实体") +public class AudioFileInfoListReq implements Serializable { + + private static final long serialVersionUID = -88739013562163458L; + + @ApiModelProperty("音频文件信息Id") + private String audioId; + + @ApiModelProperty("图片id") + private String imageId; + + @ApiModelProperty("图片ids") + private List imageIds; + +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/AudioFileInfoResp.java b/core/src/main/java/com/dite/znpt/domain/vo/AudioFileInfoResp.java new file mode 100644 index 0000000..28ae794 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/AudioFileInfoResp.java @@ -0,0 +1,32 @@ +package com.dite.znpt.domain.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author huise23 + * @date 2025/06/23 13:39 + * @Description: 音频文件信息响应实体 + */ +@Data +@ApiModel("音频文件信息响应实体") +public class AudioFileInfoResp { + + @ExcelProperty("audioId") + @ApiModelProperty("audioId") + private String audioId; + + @ExcelProperty("图片id") + @ApiModelProperty("图片id") + private String imageId; + + @ExcelProperty("文件保存路径") + @ApiModelProperty("文件保存路径") + private String filePath; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/CertificationListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/CertificationListReq.java new file mode 100644 index 0000000..9c21619 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/CertificationListReq.java @@ -0,0 +1,29 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author Bear.G + * @date 2025/5/27/周二 15:25 + * @description + */ +@Data +@ApiModel("人员资质列表请求实体") +public class CertificationListReq implements Serializable { + @Serial + private static final long serialVersionUID = -2663690591627122279L; + + @ApiModelProperty("姓名") + private String userName; + + @ApiModelProperty("证书名称") + private String certificationName; + + @ApiModelProperty("证书类型") + private String certificationType; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/CertificationReq.java b/core/src/main/java/com/dite/znpt/domain/vo/CertificationReq.java new file mode 100644 index 0000000..2de234b --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/CertificationReq.java @@ -0,0 +1,55 @@ +package com.dite.znpt.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; + +/** + * @author Bear.G + * @date 2025/5/27/周二 15:25 + * @description + */ +@Data +@ApiModel("人员资质请求实体") +public class CertificationReq implements Serializable { + @Serial + private static final long serialVersionUID = 1737569842748352413L; + + @NotBlank(message = "用户id不能为空") + @ApiModelProperty("用户id") + private String userId; + + @NotBlank(message = "证书名称不能为空") + @Size(max = 50, message = "证书名称长度不能超过50") + @ApiModelProperty("证书名称") + private String certificationName; + + @NotBlank(message = "证书编号不能为空") + @Size(max = 50, message = "证书编号长度不能超过50") + @ApiModelProperty("证书编号") + private String certificationCode; + + @NotBlank(message = "证书类型不能为空") + @ApiModelProperty("证书类型") + private String certificationType; + + @JsonFormat(pattern = "yyyy-MM-dd") + @ApiModelProperty("证书有效期-起") + private LocalDate validityDateBegin; + + @JsonFormat(pattern = "yyyy-MM-dd") + @ApiModelProperty("证书有效期-讫") + private LocalDate validityDateEnd; + + @NotBlank(message = "证书图片不能为空") + @ApiModelProperty("证书图片") + private String certificationImage; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/CertificationResp.java b/core/src/main/java/com/dite/znpt/domain/vo/CertificationResp.java new file mode 100644 index 0000000..26b3818 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/CertificationResp.java @@ -0,0 +1,54 @@ +package com.dite.znpt.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; + +/** + * @author Bear.G + * @date 2025/5/27/周二 15:25 + * @description + */ +@Data +@ApiModel("人员资质响应实体") +public class CertificationResp implements Serializable { + @Serial + private static final long serialVersionUID = 4123163394817757998L; + + @ApiModelProperty("证书id") + private String certificationId; + + @ApiModelProperty("用户id") + private String userId; + + @ApiModelProperty("用户姓名") + private String userName; + + @ApiModelProperty("证书编号") + private String certificationCode; + + @ApiModelProperty("证书名称") + private String certificationName; + + @ApiModelProperty("证书类型") + private String certificationType; + + @ApiModelProperty("证书类型描述") + private String certificationTypeLabel; + + @JsonFormat(pattern = "yyyy-MM-dd") + @ApiModelProperty("证书有效期-起") + private LocalDate validityDateBegin; + + @JsonFormat(pattern = "yyyy-MM-dd") + @ApiModelProperty("证书有效期-讫") + private LocalDate validityDateEnd; + + @ApiModelProperty("证书图片") + private String certificationImage; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/CheckSchemeListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/CheckSchemeListReq.java new file mode 100644 index 0000000..514f615 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/CheckSchemeListReq.java @@ -0,0 +1,27 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/7/9 23:35 + * @Description: + */ +@Data +@ApiModel("检查方案列表查询请求实体") +public class CheckSchemeListReq implements Serializable { + + @Serial + private static final long serialVersionUID = 1345082408495150993L; + + @ApiModelProperty("检查方式,枚举CheckMethodEnum") + private List checkMethod; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/CheckSchemeReq.java b/core/src/main/java/com/dite/znpt/domain/vo/CheckSchemeReq.java new file mode 100644 index 0000000..02c0ab2 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/CheckSchemeReq.java @@ -0,0 +1,50 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/7/9 23:35 + * @Description: + */ +@Data +@ApiModel("检查方案请求实体") +public class CheckSchemeReq implements Serializable { + @Serial + private static final long serialVersionUID = 2699725873314667276L; + + @NotBlank(message = "工作内容不能为空") + @Size(max = 1000, message = "工作内容不能超过1000个字") + @ApiModelProperty("工作内容") + private String workContent; + + @NotBlank(message = "人员配置不能为空") + @Size(max = 200, message = "人员配置不能超过200个字") + @ApiModelProperty("人员配置") + private String staffConfig; + + @NotBlank(message = "设备配置不能为空") + @Size(max = 500, message = "设备配置不能超过500个字") + @ApiModelProperty("设备配置") + private String deviceConfig; + + @NotBlank(message = "实施方案不能为空") + @Size(max = 2000, message = "实施方案不能超过2000个字") + @ApiModelProperty("实施方案") + private String constructionScheme; + + @NotBlank(message = "检查方式不能为空") + @ApiModelProperty("检查方式,枚举CheckMethodEnum") + private String checkMethod; + + @Size(max = 500, message = "备注不能超过500个字") + @ApiModelProperty("备注") + private String remark; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/CheckSchemeResp.java b/core/src/main/java/com/dite/znpt/domain/vo/CheckSchemeResp.java new file mode 100644 index 0000000..50e7971 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/CheckSchemeResp.java @@ -0,0 +1,44 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/7/9 23:14 + * @Description: + */ +@Data +@ApiModel("检查方案响应实体") +public class CheckSchemeResp implements Serializable { + @Serial + private static final long serialVersionUID = 2327453920890578467L; + + @ApiModelProperty("方案id") + private String schemeId; + + @ApiModelProperty("工作内容") + private String workContent; + + @ApiModelProperty("人员配置") + private String staffConfig; + + @ApiModelProperty("设备配置") + private String deviceConfig; + + @ApiModelProperty("实施方案") + private String constructionScheme; + + @ApiModelProperty("检查方式,枚举CheckMethodEnum") + private String checkMethod; + + @ApiModelProperty("检查方式描述") + private String checkMethodLabel; + + @ApiModelProperty("备注") + private String remark; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/CombinedDictListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/CombinedDictListReq.java new file mode 100644 index 0000000..69d7add --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/CombinedDictListReq.java @@ -0,0 +1,42 @@ +package com.dite.znpt.domain.vo; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 字典请求实体 + */ +@Data +@ApiModel("字典列表请求实体") +public class CombinedDictListReq implements Serializable { + + private static final long serialVersionUID = -71621812451720363L; + + @ApiModelProperty("查询关键字") + private String keyword; + + @ApiModelProperty("字典Id") + private String dictId; + + @ApiModelProperty("字典类型") + private String dictType; + + @ApiModelProperty("字典名称") + private String dictName; + + @ApiModelProperty("父级id") + private Long parentId; + + @ApiModelProperty("字典排序") + private Integer sortOrder; + + @ApiModelProperty("是否字典终值") + private Boolean finalState; + +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/CombinedDictResp.java b/core/src/main/java/com/dite/znpt/domain/vo/CombinedDictResp.java new file mode 100644 index 0000000..4ab3d92 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/CombinedDictResp.java @@ -0,0 +1,18 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.dite.znpt.domain.entity.CombinedDictEntity; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 字典响应实体 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel("字典响应实体") +public class CombinedDictResp extends CombinedDictEntity { +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ContractImportReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ContractImportReq.java new file mode 100644 index 0000000..3a3d675 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ContractImportReq.java @@ -0,0 +1,77 @@ +package com.dite.znpt.domain.vo; + +import java.math.BigDecimal; +import java.util.Date; +import java.io.Serial; +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.alibaba.excel.annotation.ExcelProperty; + +import com.dite.znpt.util.ValidationGroup; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +/** + * @author huise23 + * @date 2025/07/21 21:13 + * @Description: 合同表导入请求类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="Contract导入请求对象", description="合同表") +public class ContractImportReq implements Serializable { + + @Serial + private static final long serialVersionUID = 416194686656143643L; + + + @ExcelProperty(value = "客户名称") + private String customer; + + @ExcelProperty(value = "合同编号") + private String code; + + @ExcelProperty(value = "项目名称") + private String projectName; + + @ExcelProperty(value = "业务员名称") + private String salespersonName; + + @ExcelProperty(value = "部门名称") + private String departmentName; + + @ExcelProperty(value = "签订日期") + private Date signDate; + + @ExcelProperty(value = "期限") + private String duration; + + @ExcelProperty(value = "类型") + private String type; + + @ExcelProperty(value = "产品或服务") + private String productService; + + @ExcelProperty(value = "付款日期/交付日期") + private Date paymentDate; + + @ExcelProperty(value = "付款地址/交付地址") + private String paymentAddress; + + @ExcelProperty(value = "金额") + private BigDecimal amount; + + @ExcelProperty(value = "收款账号") + private String accountNumber; + + @ExcelProperty(value = "备注") + private String notes; + + @ExcelProperty(value = "合同状态") + private String contractStatus; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ContractListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ContractListReq.java new file mode 100644 index 0000000..ce63a67 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ContractListReq.java @@ -0,0 +1,76 @@ +package com.dite.znpt.domain.vo; + +import java.math.BigDecimal; +import java.util.Date; +import java.io.Serial; +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author huise23 + * @date 2025/07/21 21:13 + * @Description: 合同请求实体 + */ +@Data +@ApiModel("合同列表请求实体") +public class ContractListReq implements Serializable { + + @Serial + private static final long serialVersionUID = 188906332887614727L; + + @ApiModelProperty("查询关键字") + private String keyword; + + @ApiModelProperty("合同Id") + private String contractId; + + @ApiModelProperty("客户名称") + private String customer; + + @ApiModelProperty("合同编号") + private String code; + + @ApiModelProperty("项目id") + private String projectId; + + @ApiModelProperty("业务员id") + private String salespersonId; + + @ApiModelProperty("部门id") + private String departmentId; + + @ApiModelProperty("签订日期") + private Date signDate; + + @ApiModelProperty("期限") + private String duration; + + @ApiModelProperty("类型") + private String type; + + @ApiModelProperty("产品或服务") + private String productService; + + @ApiModelProperty("付款日期/交付日期") + private Date paymentDate; + + @ApiModelProperty("付款地址/交付地址") + private String paymentAddress; + + @ApiModelProperty("金额") + private BigDecimal amount; + + @ApiModelProperty("收款账号") + private String accountNumber; + + @ApiModelProperty("备注") + private String notes; + + @ApiModelProperty("合同状态") + private String contractStatus; + +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ContractReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ContractReq.java new file mode 100644 index 0000000..4f36393 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ContractReq.java @@ -0,0 +1,80 @@ +package com.dite.znpt.domain.vo; + +import java.math.BigDecimal; +import java.util.Date; +import java.io.Serial; +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.alibaba.excel.annotation.ExcelProperty; + +import com.dite.znpt.util.ValidationGroup; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +/** + * @author huise23 + * @date 2025/07/21 21:13 + * @Description: 合同表请求类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="Contract请求对象", description="合同表") +public class ContractReq implements Serializable { + + @Serial + private static final long serialVersionUID = -42338861509205617L; + + @ApiModelProperty("合同id") + private String contractId; + + @ApiModelProperty("客户名称") + private String customer; + + @ApiModelProperty("合同编号") + private String code; + + @ApiModelProperty("项目id") + private String projectId; + + @ApiModelProperty("业务员id") + private String salespersonId; + + @ApiModelProperty("部门id") + private String departmentId; + + @ApiModelProperty("签订日期") + private Date signDate; + + @ApiModelProperty("期限") + private String duration; + + @ApiModelProperty("类型") + private String type; + + @ApiModelProperty("产品或服务") + private String productService; + + @ApiModelProperty("付款日期/交付日期") + private Date paymentDate; + + @ApiModelProperty("付款地址/交付地址") + private String paymentAddress; + + @ApiModelProperty("金额") + private BigDecimal amount; + + @ApiModelProperty("收款账号") + private String accountNumber; + + @ApiModelProperty("备注") + private String notes; + + @ApiModelProperty("合同状态") + private String contractStatus; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ContractResp.java b/core/src/main/java/com/dite/znpt/domain/vo/ContractResp.java new file mode 100644 index 0000000..06da0e6 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ContractResp.java @@ -0,0 +1,39 @@ +package com.dite.znpt.domain.vo; + +import java.math.BigDecimal; +import java.util.Date; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.dite.znpt.domain.entity.ContractEntity; + +/** + * @author huise23 + * @date 2025/07/21 20:29 + * @Description: 合同响应实体 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel("合同响应实体") +public class ContractResp extends ContractEntity { + + @ApiModelProperty("项目名称") + private String projectName; + + @ApiModelProperty("业务员姓名") + private String salespersonName; + + @ApiModelProperty("部门名称") + private String salespersonDeptName; + + @ApiModelProperty("已结算金额") + private BigDecimal settlementAmount; + + @ApiModelProperty("已收款金额") + private BigDecimal receivedAmount; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ContractSettlementImportReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ContractSettlementImportReq.java new file mode 100644 index 0000000..323d208 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ContractSettlementImportReq.java @@ -0,0 +1,74 @@ +package com.dite.znpt.domain.vo; + +import java.math.BigDecimal; +import java.util.Date; +import java.io.Serial; +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.alibaba.excel.annotation.ExcelProperty; + +import com.dite.znpt.util.ValidationGroup; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +/** + * @author huise23 + * @date 2025/07/21 21:13 + * @Description: 合同结算表导入请求类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="ContractSettlement导入请求对象", description="合同结算表") +public class ContractSettlementImportReq implements Serializable { + + @Serial + private static final long serialVersionUID = 148613402074177824L; + + + @ExcelProperty(value = "合同名称(不能为空,长度32以内)") + private String contractName; + + @ExcelProperty(value = "客户/供应商名称") + private String customer; + + @ExcelProperty(value = "合同结算编号") + private String code; + + @ExcelProperty(value = "项目名称") + private String projectName; + + @ExcelProperty(value = "业务员名称") + private String salespersonName; + + @ExcelProperty(value = "部门名称") + private String departmentName; + + @ExcelProperty(value = "账期") + private Date paymentPeriod; + + @ExcelProperty(value = "日期") + private Date paymentDate; + + @ExcelProperty(value = "期限") + private String duration; + + @ExcelProperty(value = "产品或服务") + private String productService; + + @ExcelProperty(value = "金额") + private BigDecimal amount; + + @ExcelProperty(value = "收款账号") + private String accountNumber; + + @ExcelProperty(value = "备注") + private String notes; + + @ExcelProperty(value = "合同结算状态") + private String settlementStatus; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ContractSettlementListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ContractSettlementListReq.java new file mode 100644 index 0000000..9e62e57 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ContractSettlementListReq.java @@ -0,0 +1,73 @@ +package com.dite.znpt.domain.vo; + +import java.math.BigDecimal; +import java.util.Date; +import java.io.Serial; +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author huise23 + * @date 2025/07/21 21:13 + * @Description: 合同结算请求实体 + */ +@Data +@ApiModel("合同结算列表请求实体") +public class ContractSettlementListReq implements Serializable { + + @Serial + private static final long serialVersionUID = -36243842073737072L; + + @ApiModelProperty("查询关键字") + private String keyword; + + @ApiModelProperty("合同结算Id") + private String settlementId; + + @ApiModelProperty("合同id") + private String contractId; + + @ApiModelProperty("客户/供应商名称") + private String customer; + + @ApiModelProperty("合同结算编号") + private String code; + + @ApiModelProperty("项目id") + private String projectId; + + @ApiModelProperty("业务员id") + private String salespersonId; + + @ApiModelProperty("部门id") + private String departmentId; + + @ApiModelProperty("账期") + private Date paymentPeriod; + + @ApiModelProperty("日期") + private Date paymentDate; + + @ApiModelProperty("期限") + private String duration; + + @ApiModelProperty("产品或服务") + private String productService; + + @ApiModelProperty("金额") + private BigDecimal amount; + + @ApiModelProperty("收款账号") + private String accountNumber; + + @ApiModelProperty("备注") + private String notes; + + @ApiModelProperty("合同结算状态") + private String settlementStatus; + +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ContractSettlementReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ContractSettlementReq.java new file mode 100644 index 0000000..f1e5ab1 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ContractSettlementReq.java @@ -0,0 +1,79 @@ +package com.dite.znpt.domain.vo; + +import java.math.BigDecimal; +import java.util.Date; +import java.io.Serial; +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.alibaba.excel.annotation.ExcelProperty; + +import com.dite.znpt.util.ValidationGroup; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +/** + * @author huise23 + * @date 2025/07/21 21:13 + * @Description: 合同结算表请求类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="ContractSettlement请求对象", description="合同结算表") +public class ContractSettlementReq implements Serializable { + + @Serial + private static final long serialVersionUID = -44768849127704946L; + + @ApiModelProperty("合同结算id") + private String settlementId; + + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "合同id不能为空") + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 32, message = "合同id长度不能超过32字符") + @ApiModelProperty("合同id") + private String contractId; + + @ApiModelProperty("客户/供应商名称") + private String customer; + + @ApiModelProperty("合同结算编号") + private String code; + + @ApiModelProperty("项目id") + private String projectId; + + @ApiModelProperty("业务员id") + private String salespersonId; + + @ApiModelProperty("部门id") + private String departmentId; + + @ApiModelProperty("账期") + private Date paymentPeriod; + + @ApiModelProperty("日期") + private Date paymentDate; + + @ApiModelProperty("期限") + private String duration; + + @ApiModelProperty("产品或服务") + private String productService; + + @ApiModelProperty("金额") + private BigDecimal amount; + + @ApiModelProperty("收款账号") + private String accountNumber; + + @ApiModelProperty("备注") + private String notes; + + @ApiModelProperty("合同结算状态") + private String settlementStatus; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ContractSettlementResp.java b/core/src/main/java/com/dite/znpt/domain/vo/ContractSettlementResp.java new file mode 100644 index 0000000..3b1a693 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ContractSettlementResp.java @@ -0,0 +1,20 @@ +package com.dite.znpt.domain.vo; + +import java.math.BigDecimal; +import java.util.Date; +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.dite.znpt.domain.entity.ContractSettlementEntity; + +/** + * @author huise23 + * @date 2025/07/21 21:10 + * @Description: 合同结算响应实体 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel("合同结算响应实体") +public class ContractSettlementResp extends ContractSettlementEntity { +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/DefectListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/DefectListReq.java new file mode 100644 index 0000000..14299d6 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/DefectListReq.java @@ -0,0 +1,41 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 缺陷记录请求实体 + */ +@Data +@Accessors(chain = true) +@ApiModel("缺陷记录列表请求实体") +public class DefectListReq implements Serializable { + + private static final long serialVersionUID = 585419070823466048L; + + @ApiModelProperty("查询关键字") + private String keyword; + + @ApiModelProperty("缺陷id") + private String defectId; + + @ApiModelProperty("机组id") + private String turbineId; + + @ApiModelProperty("部件id") + private String partId; + + @ApiModelProperty("缺陷类型,枚举:DefectTypeEnum") + private String defectType; + + @ApiModelProperty("危重等级,枚举:DefectLevelEnum") + private String defectLevel; + +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/DefectListResp.java b/core/src/main/java/com/dite/znpt/domain/vo/DefectListResp.java new file mode 100644 index 0000000..f7f4114 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/DefectListResp.java @@ -0,0 +1,60 @@ +package com.dite.znpt.domain.vo; + +import com.dite.znpt.domain.bo.Detection; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/4/27 21:23 + * @Description: + */ +@Data +@ApiModel("缺陷记录列表响应实体") +public class DefectListResp implements Serializable { + + @ApiModelProperty("缺陷id") + private String defectId; + + @ApiModelProperty("图片id") + private String imageId; + + @ApiModelProperty("缺陷名称") + private String defectName; + + @ApiModelProperty("缺陷编码") + private String defectCode; + + @ApiModelProperty("部件名称") + private String partName; + + @ApiModelProperty("缺陷类型描述") + private String defectTypeLabel; + + @ApiModelProperty("缺陷类型,枚举DefectTypeEnum") + private String defectType; + + @ApiModelProperty("危重等级描述") + private String defectLevelLabel; + + @ApiModelProperty("危重等级,枚举DefectLevelEnum") + private String defectLevel; + + @ApiModelProperty("缺陷位置") + private String defectPosition; + + @ApiModelProperty("说明") + private String description; + + @ApiModelProperty("维修建议") + private String repairIdea; + + @ApiModelProperty("标注信息") + private String labelInfo; + + @ApiModelProperty("标注信息") + private Detection markInfo; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/DefectMarkReq.java b/core/src/main/java/com/dite/znpt/domain/vo/DefectMarkReq.java new file mode 100644 index 0000000..4cf3c6d --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/DefectMarkReq.java @@ -0,0 +1,38 @@ +package com.dite.znpt.domain.vo; + +import com.dite.znpt.util.ValidationGroup; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +@Data +@ApiModel("缺陷记录列表请求实体") +public class DefectMarkReq implements Serializable { + + @Serial + private static final long serialVersionUID = 585419070823466048L; + + @ApiModelProperty("图片id") + private String imageId; + + @NotBlank(groups = {ValidationGroup.Request.class}, message = "模型id不能为空") + @ApiModelProperty("模型id") + private String modelId; + + @NotNull(groups = {ValidationGroup.Request.class}, message = "模型置信度不能为空") + @Min(value = 0, groups = {ValidationGroup.Request.class}, message = "模型置信度只能在0-100之间") + @Max(value = 100, groups = {ValidationGroup.Request.class}, message = "模型置信度只能在0-100之间") + @ApiModelProperty("置信度") + private float confThreshold; + + @ApiModelProperty("缺陷类型") + private List defectTypeList; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/DefectReq.java b/core/src/main/java/com/dite/znpt/domain/vo/DefectReq.java new file mode 100644 index 0000000..d07b6c0 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/DefectReq.java @@ -0,0 +1,66 @@ +package com.dite.znpt.domain.vo; + +import com.dite.znpt.domain.bo.Detection; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * @Author: gaoxiong + * @Date: 2025/4/27 21:16 + * @Description: + */ +@Data +@ApiModel("缺陷记录请求实体") +public class DefectReq implements Serializable { + + @ApiModelProperty("缺陷编码") + private String defectCode; + + @ApiModelProperty("缺陷名称") + private String defectName; + + @ApiModelProperty("缺陷部位") + private String defectPosition; + + @ApiModelProperty("缺陷类型,枚举DefectTypeEnum") + private String defectType; + + @ApiModelProperty("危重等级,枚举DefectLevelEnum") + private String defectLevel; + + @ApiModelProperty("维修状态,枚举RepairStatusEnum") + private String repairStatus; + + @JsonFormat(pattern = "yyyy-MM-dd") + @ApiModelProperty("检测时间") + private LocalDate detectionDate; + + @ApiModelProperty("来源,枚举:DefectSourceEnum") + private String source; + + @ApiModelProperty("弦向") + private Integer chordwise; + + @ApiModelProperty("轴向") + private Integer axial; + + @ApiModelProperty("标注信息") + private String labelInfo; + + @ApiModelProperty("标注信息") + private Detection markInfo; + + @ApiModelProperty("说明") + private String description; + + @ApiModelProperty("维修建议") + private String repairIdea; + + @ApiModelProperty("附件id") + private String attachId; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/DefectResp.java b/core/src/main/java/com/dite/znpt/domain/vo/DefectResp.java new file mode 100644 index 0000000..e2efbde --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/DefectResp.java @@ -0,0 +1,44 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 缺陷记录响应实体 + */ +@Data +@ApiModel("缺陷记录响应实体") +public class DefectResp extends DefectReq implements Serializable { + + @Serial + private static final long serialVersionUID = 7723957970600470768L; + + @ApiModelProperty("缺陷id") + private String defectId; + + @ApiModelProperty("图像id") + private String imageId; + + @ApiModelProperty("缺陷类型描述") + private String defectTypeLabel; + + @ApiModelProperty("危重等级描述") + private String defectLevelLabel; + + @ApiModelProperty("维修状态描述") + private String repairStatusLabel; + + @ApiModelProperty("来源描述") + private String sourceLabel; + + @ApiModelProperty("缺陷附件路径") + private String attachPath; + +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/DeptReq.java b/core/src/main/java/com/dite/znpt/domain/vo/DeptReq.java new file mode 100644 index 0000000..740b529 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/DeptReq.java @@ -0,0 +1,40 @@ +package com.dite.znpt.domain.vo; + +import com.dite.znpt.util.ValidationGroup; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.io.Serial; +import java.io.Serializable; + +/** + * @author Bear.G + * @date 2025/5/20/周二 9:42 + * @description + */ +@Data +@ApiModel("部门信息请求实体") +public class DeptReq implements Serializable { + @Serial + private static final long serialVersionUID = -8058508810161877848L; + + @ApiModelProperty("父级部门id") + private String parentId; + + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "部门名称不能为空") + @Size(max = 30, groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "部门名称长度不能超过30") + @ApiModelProperty("部门名称") + private String deptName; + + @ApiModelProperty("显示顺序") + private Integer orderNum; + + @ApiModelProperty("负责人id") + private String leaderId; + + @ApiModelProperty("状态") + private Integer status; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/DeptResp.java b/core/src/main/java/com/dite/znpt/domain/vo/DeptResp.java new file mode 100644 index 0000000..ba88d50 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/DeptResp.java @@ -0,0 +1,39 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author Bear.G + * @date 2025/5/20/周二 9:40 + * @description + */ +@Data +@ApiModel("部门信息响应实体") +public class DeptResp implements Serializable { + + @Serial + private static final long serialVersionUID = 6372397386719274915L; + + @ApiModelProperty("部门id") + private String deptId; + + @ApiModelProperty("部门名称") + private String deptName; + + @ApiModelProperty("父级部门id") + private String parentId; + + @ApiModelProperty("部门排序") + private Integer orderNum; + + @ApiModelProperty("部门负责人id") + private String leaderId; + + @ApiModelProperty("部门状态") + private String status; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/DictListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/DictListReq.java new file mode 100644 index 0000000..0387f73 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/DictListReq.java @@ -0,0 +1,41 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author huise23 + * @date 2025/06/30 11:38 + * @Description: 字典请求实体 + */ +@Data +@ApiModel("字典列表请求实体") +public class DictListReq implements Serializable { + + @Serial + private static final long serialVersionUID = 243104747131701229L; + + @ApiModelProperty("字典Id") + private String dictId; + + @ApiModelProperty("字典类型") + private String dictType; + + @ApiModelProperty("字典名称") + private String dictName; + + @ApiModelProperty("父级id") + private Long parentId; + + @ApiModelProperty("字典排序") + private Integer sortOrder; + + @ApiModelProperty("是否字典终值") + private Integer finalState; + +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/DictReq.java b/core/src/main/java/com/dite/znpt/domain/vo/DictReq.java new file mode 100644 index 0000000..2d58bc3 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/DictReq.java @@ -0,0 +1,48 @@ +package com.dite.znpt.domain.vo; + +import com.dite.znpt.util.ValidationGroup; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.io.Serial; +import java.io.Serializable; +/** + * @author huise23 + * @date 2025/06/30 11:38 + * @Description: 字典表请求类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="Dict请求对象", description="字典表") +public class DictReq implements Serializable { + + @Serial + private static final long serialVersionUID = 104440023555693334L; + + @ApiModelProperty("字典id") + private String dictId; + + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "字典类型不能为空") + @Size(max = 20, groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "字典类型长度不能超过20") + @ApiModelProperty("字典类型") + private String dictType; + + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "字典名称不能为空") + @Size(max = 50, groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "字典名称长度不能超过50") + @ApiModelProperty("字典名称") + private String dictName; + + @ApiModelProperty("父级id") + private Long parentId; + + @ApiModelProperty("字典排序") + private Integer sortOrder; + + @ApiModelProperty("是否字典终值") + private Integer finalState; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/DictResp.java b/core/src/main/java/com/dite/znpt/domain/vo/DictResp.java new file mode 100644 index 0000000..b0c14df --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/DictResp.java @@ -0,0 +1,18 @@ +package com.dite.znpt.domain.vo; + +import com.dite.znpt.domain.entity.DictEntity; +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author huise23 + * @date 2025/06/30 11:38 + * @Description: 字典响应实体 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel("字典响应实体") +public class DictResp extends DictEntity { +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/EquipmentListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentListReq.java new file mode 100644 index 0000000..465a86c --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentListReq.java @@ -0,0 +1,29 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author Bear.G + * @date 2025/7/23/周三 17:43 + * @description + */ +@Data +@ApiModel("设备信息列表请求") +public class EquipmentListReq implements Serializable { + @Serial + private static final long serialVersionUID = 2407208576252291143L; + + @ApiModelProperty("设备名称") + private String equipmentName; + + @ApiModelProperty("设备类型") + private String equipmentType; + + @ApiModelProperty("设备状态,0-空闲中,1-使用,3-保养中,4-维修中,5-已报废") + private String equipmentStatus; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/EquipmentReq.java b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentReq.java new file mode 100644 index 0000000..321abe7 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentReq.java @@ -0,0 +1,41 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.io.Serial; +import java.io.Serializable; + +/** + * @author Bear.G + * @date 2025/7/23/周三 17:43 + * @description + */ +@Data +@ApiModel("设备信息请求对象") +public class EquipmentReq implements Serializable { + @Serial + private static final long serialVersionUID = -1065926558169771082L; + + @ApiModelProperty("设备名称") + @NotBlank(message = "设备名称不能为空") + @Size(max = 100, message = "设备名称长度不能超过100个字") + private String equipmentName; + + @ApiModelProperty("设备类型, 枚举:EquipmentTypeEnum") + @NotBlank(message = "设备类型不能为空") + private String equipmentType; + + @ApiModelProperty("设备型号") + @NotBlank(message = "设备型号不能为空") + @Size(max = 50, message = "设备型号长度不能超过50个字") + private String equipmentModel; + + @ApiModelProperty("设备SN") + @NotBlank(message = "设备SN不能为空") + @Size(max = 50, message = "设备SN长度不能超过50个字") + private String equipmentSn; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/EquipmentResp.java b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentResp.java new file mode 100644 index 0000000..850ec8a --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentResp.java @@ -0,0 +1,59 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author Bear.G + * @date 2025/7/23/周三 17:43 + * @description + */ +@Data +@ApiModel("设备信息响应") +public class EquipmentResp implements Serializable { + @Serial + private static final long serialVersionUID = 310447373498622767L; + + @ApiModelProperty("设备ID") + private String equipmentId; + + @ApiModelProperty("设备名称") + private String equipmentName; + + @ApiModelProperty("设备类型") + private String equipmentType; + + @ApiModelProperty("设备类型描述") + private String equipmentTypeLabel; + + @ApiModelProperty("设备型号") + private String equipmentModel; + + @ApiModelProperty("设备SN") + private String equipmentSn; + + @ApiModelProperty("设备状态, 枚举:EquipmentStatusEnum") + private String equipmentStatus; + + @ApiModelProperty("设备状态描述") + private String equipmentStatusLabel; + + @ApiModelProperty("设备使用状态,0-空闲中,1-使用中") + private String useStatus; + + @ApiModelProperty("项目id") + private String projectId; + + @ApiModelProperty("项目名称") + private String projectName; + + @ApiModelProperty("使用人id") + private String userId; + + @ApiModelProperty("使用人") + private String name; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/EquipmentUseRecordListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentUseRecordListReq.java new file mode 100644 index 0000000..6270e90 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentUseRecordListReq.java @@ -0,0 +1,33 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author Bear.G + * @date 2025/7/23/周三 17:44 + * @description + */ +@Data +@ApiModel("设备使用记录列表请求") +public class EquipmentUseRecordListReq implements Serializable { + @Serial + private static final long serialVersionUID = -7403000780666506211L; + + @ApiModelProperty("设备ID") + private String equipmentId; + + @ApiModelProperty("用户ID") + private String userId; + + @ApiModelProperty("项目ID") + private String projectId; + + @ApiModelProperty("备注") + private String remark; + +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/EquipmentUseRecordReq.java b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentUseRecordReq.java new file mode 100644 index 0000000..b1749bb --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentUseRecordReq.java @@ -0,0 +1,34 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.io.Serial; +import java.io.Serializable; + +/** + * @author Bear.G + * @date 2025/7/23/周三 17:44 + * @description + */ +@Data +@ApiModel("设备使用记录请求") +public class EquipmentUseRecordReq implements Serializable { + @Serial + private static final long serialVersionUID = -6615316964696995428L; + + @ApiModelProperty("用户ID") + @NotBlank(message = "用户ID不能为空") + private String userId; + + @ApiModelProperty("项目ID") + @NotBlank(message = "项目ID不能为空") + private String projectId; + + @Size(max = 200, message = "备注长度不能超过200") + @ApiModelProperty("备注") + private String remark; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/EquipmentUseRecordResp.java b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentUseRecordResp.java new file mode 100644 index 0000000..d2589c6 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentUseRecordResp.java @@ -0,0 +1,60 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author Bear.G + * @date 2025/7/23/周三 17:44 + * @description + */ +@Data +@ApiModel("设备使用记录响应") +public class EquipmentUseRecordResp implements Serializable { + @Serial + private static final long serialVersionUID = -6673311877391209692L; + + @ApiModelProperty("记录ID") + private String useRecordId; + + @ApiModelProperty("设备ID") + private String equipmentId; + + @ApiModelProperty("设备名称") + private String equipmentName; + + @ApiModelProperty("设备类型") + private String equipmentType; + + @ApiModelProperty("设备类型描述") + private String equipmentTypeLabel; + + @ApiModelProperty("设备型号") + private String equipmentModel; + + @ApiModelProperty("设备SN") + private String equipmentSn; + + @ApiModelProperty("用户ID") + private String userId; + + @ApiModelProperty("用户姓名") + private String name; + + @ApiModelProperty("项目ID") + private String projectId; + + @ApiModelProperty("项目名称") + private String projectName; + + @ApiModelProperty("操作类型:0-借用,1-归还") + private String operateType; + + @ApiModelProperty("操作时间") + private LocalDateTime operateTime; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ImageCollectInfo.java b/core/src/main/java/com/dite/znpt/domain/vo/ImageCollectInfo.java new file mode 100644 index 0000000..df0237e --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ImageCollectInfo.java @@ -0,0 +1,56 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/4/24 21:16 + * @Description: + */ +@Data +@ApiModel("图像拍摄信息") +public class ImageCollectInfo implements Serializable { + @Serial + private static final long serialVersionUID = 6594307991137605975L; + + @ApiModelProperty("图像采集信息id") + private String collectId; + + @ApiModelProperty("天气,枚举:WeatherEnum") + private String weather; + + @ApiModelProperty("天气描述") + private String weatherLabel; + + @ApiModelProperty("湿度(百分比)") + private Integer humidness; + + @ApiModelProperty("温度") + private String temperature; + + @ApiModelProperty("风力等级") + private Integer windLevel; + + @ApiModelProperty("拍摄方式,枚举ShootingMethodEnum") + private String shootingMethod; + + @ApiModelProperty("拍摄方式描述") + private String shootingMethodLabel; + + @ApiModelProperty("拍摄距离") + private Integer shootingDistance; + + @ApiModelProperty("采集员姓名") + private String collectorName; + + @ApiModelProperty("来源") + private String imageSource; + + @ApiModelProperty("来源描述") + private String imageSourceLabel; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ImageCollectReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ImageCollectReq.java new file mode 100644 index 0000000..68655bf --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ImageCollectReq.java @@ -0,0 +1,74 @@ +package com.dite.znpt.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/4/26 1:11 + * @Description: + */ +@Data +@ApiModel("图像采集信息请求实体") +public class ImageCollectReq implements Serializable { + + @Serial + private static final long serialVersionUID = 8937301872925896770L; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty("拍摄时间-起") + private LocalDateTime shootingTimeBegin; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty("拍摄时间-止") + private LocalDateTime shootingTimeEnd; + + @ApiModelProperty("天气,枚举:WeatherEnum") + private String weather; + + @ApiModelProperty("湿度(百分比)") + private Integer humidness; + + @ApiModelProperty("温度-低") + private Double temperatureMin; + + @ApiModelProperty("温度-高") + private Double temperatureMax; + + @ApiModelProperty("风力等级") + private Integer windLevel; + + @ApiModelProperty("拍摄方式,枚举ShootingMethodEnum") + private String shootingMethod; + + @ApiModelProperty("拍摄距离") + private Integer shootingDistance; + + @ApiModelProperty("采集员id") + private String collectorId; + + @ApiModelProperty("采集员姓名") + private String collectorName; + + @ApiModelProperty("来源") + private String imageSource; + + @ApiModelProperty("图片类型") + private String imageType; + + @ApiModelProperty("图片类型描述") + private String imageTypeLabel; + + @ApiModelProperty("图像信息") + private List imageList; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ImageExifInfo.java b/core/src/main/java/com/dite/znpt/domain/vo/ImageExifInfo.java new file mode 100644 index 0000000..1a0b8aa --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ImageExifInfo.java @@ -0,0 +1,67 @@ +package com.dite.znpt.domain.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @Author: gaoxiong + * @Date: 2025/4/26 23:35 + * @Description: + */ +@Data +@ApiModel("图像Exif信息") +public class ImageExifInfo implements Serializable { + + @ApiModelProperty("图像宽") + private String imageWidth; + + @ApiModelProperty("图像高") + private String imageHeight; + + @ApiModelProperty("图像分辨率") + private String imageResolution; + + @ApiModelProperty("焦距") + private String focalDistance; + + @ApiModelProperty("35毫米焦距") + private String focalDistance35; + + @ApiModelProperty("焦平面X轴分辨率") + @TableField("x_resolution") + private String xResolution; + + @ApiModelProperty("焦平面Y轴分辨率") + @TableField("y_resolution") + private String yResolution; + + @ApiModelProperty("焦平面分辨率单位") + @TableField("resolution_units") + private String resolutionUnits; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty("拍摄时间") + private LocalDateTime shootingTime; + + @ApiModelProperty("相机制造商") + private String cameraManufacturer; + + @ApiModelProperty("相机型号") + private String cameraModel; + + @ApiModelProperty("经度") + private String longitude; + + @ApiModelProperty("纬度") + private String latitude; + + @ApiModelProperty("海拔") + private String altitude; + +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ImageListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ImageListReq.java new file mode 100644 index 0000000..d700d3a --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ImageListReq.java @@ -0,0 +1,36 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author Bear.G + * @date 2025/4/24/周四 14:18 + * @description + */ +@Data +@ApiModel("图像采集信息列表查询实体") +public class ImageListReq implements Serializable { + @Serial + private static final long serialVersionUID = 671014582625089979L; + + @ApiModelProperty("关键字") + private String keyword; + + @ApiModelProperty("机组id") + private String turbineId; + + @ApiModelProperty("部件id") + private String partId; + + @ApiModelProperty("图像类型") + private String[] imageTypes; + + @ApiModelProperty("是否已审核,0未审核,1已审核") + private Boolean reviewState; + +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ImageListResp.java b/core/src/main/java/com/dite/znpt/domain/vo/ImageListResp.java new file mode 100644 index 0000000..cadbfbf --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ImageListResp.java @@ -0,0 +1,109 @@ +package com.dite.znpt.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/4/26 21:07 + * @Description: + */ +@Data +@ApiModel("图像列表信息响应实体") +public class ImageListResp implements Serializable { + + @Serial + private static final long serialVersionUID = 3168482118066685077L; + + @ApiModelProperty("图像id") + private String imageId; + + @ApiModelProperty("图像名称") + private String imageName; + + @ApiModelProperty("图像路径") + private String imagePath; + + @ApiModelProperty("部件id") + private String partId; + + @ApiModelProperty("部件名称") + private String partName; + + @ApiModelProperty("图像分辨率") + private String imageResolution; + + @ApiModelProperty("焦距") + private String focalDistance; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty("拍摄时间") + private LocalDateTime shootingTime; + + @ApiModelProperty("相机制造商") + private String cameraManufacturer; + + @ApiModelProperty("相机型号") + private String cameraModel; + + @ApiModelProperty("GPS") + private String GPS; + + @ApiModelProperty("天气,枚举:WeatherEnum") + private String weather; + + @ApiModelProperty("天气描述") + private String weatherLabel; + + @ApiModelProperty("湿度(百分比)") + private Integer humidness; + + @ApiModelProperty("温度") + private String temperature; + + @ApiModelProperty("风力等级") + private Integer windLevel; + + @ApiModelProperty("拍摄方式,枚举ShootingMethodEnum") + private String shootingMethod; + + @ApiModelProperty("拍摄方式描述") + private String shootingMethodLabel; + + @ApiModelProperty("拍摄距离") + private Integer shootingDistance; + + @ApiModelProperty("采集员姓名") + private String collectorName; + + @ApiModelProperty("来源,枚举ImageSourceEnum") + private String imageSource; + + @ApiModelProperty("来源描述") + private String imageSourceLabel; + + @ApiModelProperty("影像类型,枚举ImageTypeEnum") + private String imageType; + + @ApiModelProperty("影像类型描述") + private String imageTypeLabel; + + @ApiModelProperty("关联图像的音频列表") + private List audioList; + + @ApiModelProperty("预处理后的图片路径") + private String preImagePath; + + @ApiModelProperty("是否已预处理,0未审核,1已审核") + private Boolean preTreatment; + + @ApiModelProperty("项目id") + private String projectId; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ImageReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ImageReq.java new file mode 100644 index 0000000..7a360d1 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ImageReq.java @@ -0,0 +1,44 @@ +package com.dite.znpt.domain.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @Author: gaoxiong + * @Date: 2025/4/26 1:18 + * @Description: + */ +@Data +@ApiModel("图像信息请求实体") +public class ImageReq extends ImageExifInfo implements Serializable { + + @Serial + private static final long serialVersionUID = -1726859254176864573L; + + @ApiModelProperty("图像id") + private String imageId; + + @ApiModelProperty("图像名称") + @TableField("image_name") + private String imageName; + + @ApiModelProperty("图像大小") + private String imageSize; + + @ApiModelProperty("图像分辨率") + private String imageResolution; + + @ApiModelProperty("图片路径") + private String imagePath; + + @ApiModelProperty("GPS") + private String GPS; + +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ImageResp.java b/core/src/main/java/com/dite/znpt/domain/vo/ImageResp.java new file mode 100644 index 0000000..5b32d83 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ImageResp.java @@ -0,0 +1,63 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/4/24/周四 14:16 + * @description + */ +@Data +@ApiModel("图像信息响应实体") +public class ImageResp implements Serializable { + @Serial + private static final long serialVersionUID = -5215414858454232077L; + + @ApiModelProperty("图像id") + private String imageId; + + @ApiModelProperty("图像名称") + private String imageName; + + @ApiModelProperty("图像路径") + private String imagePath; + + @ApiModelProperty("图像大小") + private String imageSize; + + @ApiModelProperty("图像分辨率") + private String imageResolution; + + @ApiModelProperty("图像Exif信息") + private ImageExifInfo imageExifInfo; + + @ApiModelProperty("图像拍摄信息") + private ImageCollectInfo imageCollectInfo; + + @ApiModelProperty("关联图像的音频列表") + private List audioList; + + @ApiModelProperty("是否已审核,0未审核,1已审核") + private Boolean reviewState; + + @ApiModelProperty("影像类型,枚举ImageTypeEnum") + private String imageType; + + @ApiModelProperty("影像类型描述") + private String imageTypeLabel; + + @ApiModelProperty("预处理后的图片路径") + private String preImagePath; + + @ApiModelProperty("是否已预处理,0未审核,1已审核") + private Boolean preTreatment; + + @ApiModelProperty("项目id") + private String projectId; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ImageSimpleReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ImageSimpleReq.java new file mode 100644 index 0000000..8f4e8ce --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ImageSimpleReq.java @@ -0,0 +1,32 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/5/11 22:29 + * @Description: + */ +@Data +@ApiModel("图像简要信息请求实体") +public class ImageSimpleReq implements Serializable { + @Serial + private static final long serialVersionUID = 4813411833253078204L; + + @ApiModelProperty(name = "部件id", required = true) + private String partId; + + @ApiModelProperty(name = "图像来源,枚举:ImageSourceEnum", required = true) + private String imageSource; + + @ApiModelProperty(name = "图像路径", required = true) + private String imagePath; + + @ApiModelProperty("影像类型") + private String imageType; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ImageWorkReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ImageWorkReq.java new file mode 100644 index 0000000..2b02b44 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ImageWorkReq.java @@ -0,0 +1,35 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/5/11 22:29 + * @Description: + */ +@Data +@ApiModel("内部、外部、防雷图像简易请求实体") +public class ImageWorkReq implements Serializable { + @Serial + private static final long serialVersionUID = 4813411833253078204L; + + @ApiModelProperty("上传人") + private String uploadUser; + + @ApiModelProperty("经度") + private String longitude; + + @ApiModelProperty("纬度") + private String latitude; + + @ApiModelProperty("海拔") + private String altitude; + + @ApiModelProperty("部件id") + private String partId; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/InspectionReportCheckInfo.java b/core/src/main/java/com/dite/znpt/domain/vo/InspectionReportCheckInfo.java new file mode 100644 index 0000000..9c825b3 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/InspectionReportCheckInfo.java @@ -0,0 +1,41 @@ +package com.dite.znpt.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; + +/** + * @Author: gaoxiong + * @Date: 2025/7/9 22:23 + * @Description: + */ +@Data +@ApiModel("检查报告检查信息") +public class InspectionReportCheckInfo implements Serializable { + @Serial + private static final long serialVersionUID = 193233798058399831L; + + @JsonFormat(pattern = "yyyy-MM-dd") + @ApiModelProperty("检查日期") + private LocalDate checkDate; + + @ApiModelProperty("检查内容") + private String checkContent; + + @ApiModelProperty("检查方式") + private String checkMethod; + + @ApiModelProperty("检查方式描述") + private String checkMethodLabel; + + @ApiModelProperty("检查人员id,多个人员英文逗号分隔") + private String checkUserId; + + @ApiModelProperty("检查人员") + private String checkUserName; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/InspectionReportListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/InspectionReportListReq.java new file mode 100644 index 0000000..ba0f1cb --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/InspectionReportListReq.java @@ -0,0 +1,43 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author Bear.G + * @date 2025/7/14/周一 15:32 + * @description + */ +@Data +@ApiModel("检查报告列表请求实体") +public class InspectionReportListReq implements Serializable { + @Serial + private static final long serialVersionUID = -8122588121700840604L; + + @ApiModelProperty("主标题") + private String title; + + @ApiModelProperty("副标题") + private String subTile; + + @ApiModelProperty("项目id") + private String projectId; + + @ApiModelProperty("机组id") + private String turbineId; + + @ApiModelProperty("风场名字") + private String farmName; + + @ApiModelProperty("委托单位") + private String client; + + @ApiModelProperty("报告状态") + private String reportStatus; + + +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/InspectionReportListResp.java b/core/src/main/java/com/dite/znpt/domain/vo/InspectionReportListResp.java new file mode 100644 index 0000000..9649be1 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/InspectionReportListResp.java @@ -0,0 +1,62 @@ +package com.dite.znpt.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author Bear.G + * @date 2025/7/14/周一 15:32 + * @description + */ +@Data +@ApiModel("检查报告列表响应实体") +public class InspectionReportListResp implements Serializable { + @Serial + private static final long serialVersionUID = -7652873535955803183L; + + @ApiModelProperty("报告id") + private String reportId; + + @ApiModelProperty("主标题") + private String title; + + @ApiModelProperty("副标题") + private String subTitle; + + @ApiModelProperty("报告编制人员id") + private String reportWriter; + + @ApiModelProperty("报告编制人员") + private String reportWriterName; + + @JsonFormat(pattern = "yyyy-MM-dd") + @ApiModelProperty("报告编制时间") + private LocalDateTime reportWriteTime; + + @ApiModelProperty("项目id") + private String projectId; + + @ApiModelProperty("项目名称") + private String projectName; + + @ApiModelProperty("风场名字") + private String farmName; + + @ApiModelProperty("委托单位") + private String client; + + @ApiModelProperty("机组id") + private String turbineId; + + @ApiModelProperty("机组名称") + private String turbineName; + + @ApiModelProperty("机组编码") + private String turbineCode; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/InspectionReportReportInfo.java b/core/src/main/java/com/dite/znpt/domain/vo/InspectionReportReportInfo.java new file mode 100644 index 0000000..fd12a76 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/InspectionReportReportInfo.java @@ -0,0 +1,65 @@ +package com.dite.znpt.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @Author: gaoxiong + * @Date: 2025/7/9 22:16 + * @Description: + */ +@Data +@ApiModel("检查报告信息") +public class InspectionReportReportInfo implements Serializable { + @Serial + private static final long serialVersionUID = 2416173276374292199L; + + @ApiModelProperty("报告id") + private String reportId; + + @ApiModelProperty("主标题") + private String title; + + @ApiModelProperty("副标题") + private String subTitle; + + @ApiModelProperty("封面") + private String coverImage; + + @ApiModelProperty("报告编制人员id") + private String reportWriter; + + @ApiModelProperty("报告编制人员") + private String reportWriterName; + + @JsonFormat(pattern = "yyyy-MM-dd") + @ApiModelProperty("报告编制时间") + private LocalDateTime reportWriteTime; + + @ApiModelProperty("报告复核人员id") + private String reportReviewer; + + @ApiModelProperty("报告复核人员") + private String reportReviewerName; + + @JsonFormat(pattern = "yyyy-MM-dd") + @ApiModelProperty("报告复核时间") + private LocalDateTime reportReviewTime; + + @ApiModelProperty("报告审核人员id") + private String reportAuditor; + + @ApiModelProperty("报告审核人员") + private String reportAuditName; + + @JsonFormat(pattern = "yyyy-MM-dd") + @ApiModelProperty("报告审核时间") + private LocalDateTime reportAuditTime; + +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/InspectionReportReq.java b/core/src/main/java/com/dite/znpt/domain/vo/InspectionReportReq.java new file mode 100644 index 0000000..4cd1442 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/InspectionReportReq.java @@ -0,0 +1,94 @@ +package com.dite.znpt.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; + +/** + * @Author: gaoxiong + * @Date: 2025/7/9 22:08 + * @Description: + */ +@Data +@ApiModel("检查报告请求实体") +public class InspectionReportReq implements Serializable { + @Serial + private static final long serialVersionUID = 4937399975205847660L; + + @NotBlank(message = "主标题不能为空") + @Size(max = 50, message = "主标题长度不能超过50") + @ApiModelProperty("主标题") + private String title; + + @NotBlank(message = "副标题不能为空") + @Size(max = 50, message = "副标题长度不能超过50") + @ApiModelProperty("副标题") + private String subTitle; + + @ApiModelProperty("封面") + private String coverImage; + + @NotBlank(message = "项目id不能为空") + @ApiModelProperty("项目id") + private String projectId; + + @NotBlank(message = "机组id不能为空") + @ApiModelProperty("机组id") + private String turbineId; + + @NotNull(message = "检查日期不能为空") + @JsonFormat(pattern = "yyyy-MM-dd") + @ApiModelProperty("检查日期") + private LocalDate checkDate; + + @NotBlank(message = "检查内容不能为空") + @ApiModelProperty("检查内容") + private String checkContent; + + @NotBlank(message = "检查内容不能为空") + @ApiModelProperty("检查方式,多个方式英文逗号分隔,枚举:CheckMethodEnum") + private String checkMethod; + + @NotBlank(message = "检查人员不能为空") + @ApiModelProperty("检查人员id,多个人员英文逗号分隔") + private String checkUserId; + + @NotBlank(message = "报告编制人员不能为空") + @ApiModelProperty("报告编制人员id") + private String reportWriter; + + @JsonFormat(pattern = "yyyy-MM-dd") + @NotNull(message = "报告编制时间不能为空") + @ApiModelProperty("报告编制时间") + private LocalDate reportWriteTime; + + @NotBlank(message = "报告复核人员不能为空") + @ApiModelProperty("报告复核人员id") + private String reportReviewer; + + @JsonFormat(pattern = "yyyy-MM-dd") + @NotNull(message = "报告复核时间不能为空") + @ApiModelProperty("报告复核时间") + private LocalDate reportReviewTime; + + @NotBlank(message = "报告审核人员不能为空") + @ApiModelProperty("报告审核人员id") + private String reportAuditor; + + @JsonFormat(pattern = "yyyy-MM-dd") + @NotNull(message = "报告审核时间不能为空") + @ApiModelProperty("报告审核时间") + private LocalDate reportAuditTime; + + @NotBlank(message = "报告状态不能为空") + @ApiModelProperty("报告状态") + private String reportStatus; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/InspectionReportResp.java b/core/src/main/java/com/dite/znpt/domain/vo/InspectionReportResp.java new file mode 100644 index 0000000..d307245 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/InspectionReportResp.java @@ -0,0 +1,41 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/7/9 22:14 + * @Description: + */ +@Data +@Accessors(chain = true) +@ApiModel("检查报告响应实体") +public class InspectionReportResp implements Serializable { + @Serial + private static final long serialVersionUID = -2229157312487991799L; + + @ApiModelProperty("封面信息") + private InspectionReportReportInfo reportInfo; + + @ApiModelProperty("项目信息") + private ProjectResp projectInfo; + + @ApiModelProperty("检查信息") + private InspectionReportCheckInfo checkInfo; + + @ApiModelProperty("机组信息") + private TurbineInfoResp turbineInfo; + + @ApiModelProperty("检查方案") + private List schemeInfoList; + + @ApiModelProperty("缺陷信息") + private List defectInfoList; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/InspectionReportSchemeInfo.java b/core/src/main/java/com/dite/znpt/domain/vo/InspectionReportSchemeInfo.java new file mode 100644 index 0000000..8e6acb5 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/InspectionReportSchemeInfo.java @@ -0,0 +1,40 @@ +package com.dite.znpt.domain.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * @Author: gaoxiong + * @Date: 2025/7/9 22:24 + * @Description: + */ +@Data +@ApiModel("检查报告方案信息") +public class InspectionReportSchemeInfo implements Serializable { + + + @ApiModelProperty("检查日期") + @TableField("check_date") + private LocalDate checkDate; + + @ApiModelProperty("检查位置") + @TableField("check_position") + private String checkPosition; + + @ApiModelProperty("检查内容") + @TableField("check_content") + private String checkContent; + + @ApiModelProperty("检查方式") + @TableField("check_method") + private String checkMethod; + + @ApiModelProperty("检查人员id,多个人员英文逗号分隔") + @TableField("check_user_id") + private String checkUserId; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/InsuranceAttachResp.java b/core/src/main/java/com/dite/znpt/domain/vo/InsuranceAttachResp.java new file mode 100644 index 0000000..1a54623 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/InsuranceAttachResp.java @@ -0,0 +1,57 @@ +package com.dite.znpt.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * @Author: gaoxiong + * @Date: 2025/6/24 23:46 + * @Description: + */ +@Data +@Accessors(chain = true) +@ApiModel("保险附件响应实体") +public class InsuranceAttachResp implements Serializable { + + @Serial + private static final long serialVersionUID = -4902944535128070359L; + + @ApiModelProperty("保险信息id") + private String insuranceInfoId; + + @ApiModelProperty("用户id") + private String userId; + + @ApiModelProperty("用户姓名") + private String name; + + @ApiModelProperty("用户编码") + private String userCode; + + @ApiModelProperty("附件id") + private String attachInfoId; + + @ApiModelProperty("附件路径") + private String attachPath; + + @ApiModelProperty("文件类型") + private String fileType; + + @ApiModelProperty("备注") + private String remark; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty + private LocalDateTime createTime; + + +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/InsuranceCompanyListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/InsuranceCompanyListReq.java new file mode 100644 index 0000000..0765f5e --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/InsuranceCompanyListReq.java @@ -0,0 +1,36 @@ +package com.dite.znpt.domain.vo; + +/** + * @author Bear.G + * @date 2025/6/26/周四 9:39 + * @description + */ + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serial; +import java.io.Serializable; + +@Data +@Accessors(chain = true) +@ApiModel("保险公司列表查询条件") +public class InsuranceCompanyListReq implements Serializable { + + @Serial + private static final long serialVersionUID = -3926269785176954672L; + + @ApiModelProperty("保险公司名称") + private String insuranceCompanyName; + + @ApiModelProperty("联系人") + private String contact; + + @ApiModelProperty("联系人电话") + private String contactPhone; + + @ApiModelProperty("状态,0-合作中,1-终止合作") + private String status; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/InsuranceCompanyReq.java b/core/src/main/java/com/dite/znpt/domain/vo/InsuranceCompanyReq.java new file mode 100644 index 0000000..e1bb5b6 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/InsuranceCompanyReq.java @@ -0,0 +1,44 @@ +package com.dite.znpt.domain.vo; + +import com.dite.znpt.util.ValidationGroup; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Pattern; +import javax.validation.constraints.Size; +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/6/24 23:44 + * @Description: + */ +@Data +@Accessors(chain = true) +@ApiModel("保险公司请求实体") +public class InsuranceCompanyReq implements Serializable { + @Serial + private static final long serialVersionUID = -5949181233497299673L; + + @NotBlank(message = "保险公司不能为空") + @Size(max = 50, message = "保险公司不能超过50个字符") + @ApiModelProperty("保险公司") + private String insuranceCompanyName; + + @NotBlank(message = "联系人不能为空") + @Size(max = 20, message = "联系人不能超过20个字符") + @ApiModelProperty("联系人") + private String contact; + + @NotBlank(message = "联系电话不能为空") + @Pattern(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, regexp ="^$|1\\d{10}$", message = "联系电话格式不正确") + @ApiModelProperty("联系电话") + private String contactPhone; + + @ApiModelProperty("状态,0-合作中,1-终止合作") + private String status; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/InsuranceCompanyResp.java b/core/src/main/java/com/dite/znpt/domain/vo/InsuranceCompanyResp.java new file mode 100644 index 0000000..b005892 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/InsuranceCompanyResp.java @@ -0,0 +1,37 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/6/24 23:46 + * @Description: + */ +@Data +@Accessors(chain = true) +@ApiModel("保险公司响应实体") +public class InsuranceCompanyResp implements Serializable { + @Serial + private static final long serialVersionUID = 7275887907802349727L; + + @ApiModelProperty("保险公司id") + private String insuranceCompanyId; + + @ApiModelProperty("保险公司名称") + private String insuranceCompanyName; + + @ApiModelProperty("联系人") + private String contact; + + @ApiModelProperty("联系人电话") + private String contactPhone; + + @ApiModelProperty("状态,0-合作中,1-终止合作") + private String status; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/InsuranceInfoListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/InsuranceInfoListReq.java new file mode 100644 index 0000000..7d444e5 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/InsuranceInfoListReq.java @@ -0,0 +1,38 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/6/24 23:44 + * @Description: + */ +@Data +@Accessors(chain = true) +@ApiModel("保险信息查询条件") +public class InsuranceInfoListReq implements Serializable { + @Serial + private static final long serialVersionUID = -47047804822030641L; + + @ApiModelProperty("员工姓名") + private String name; + + @ApiModelProperty("员工编号") + private String userCode; + + @ApiModelProperty("保险类型id") + private String insuranceTypeId; + + @ApiModelProperty("保险公司id") + private String insuranceCompanyId; + + @ApiModelProperty("状态,枚举:InsuranceStatusEnum") + private String insuranceStatus; + +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/InsuranceInfoReq.java b/core/src/main/java/com/dite/znpt/domain/vo/InsuranceInfoReq.java new file mode 100644 index 0000000..cc73dd1 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/InsuranceInfoReq.java @@ -0,0 +1,70 @@ +package com.dite.znpt.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; + +/** + * @Author: gaoxiong + * @Date: 2025/6/24 23:44 + * @Description: + */ +@Data +@Accessors(chain = true) +@ApiModel("保险信息请求实体") +public class InsuranceInfoReq implements Serializable { + @Serial + private static final long serialVersionUID = 3352397101804468290L; + + @NotBlank(message = "用户id不能为空") + @ApiModelProperty("用户id") + private String userId; + + @NotBlank(message = "保险类型id不能为空") + @ApiModelProperty("保险类型id") + private String insuranceTypeId; + + @NotBlank(message = "保险公司id不能为空") + @ApiModelProperty("保险公司id") + private String insuranceCompanyId; + + @NotBlank(message = "保单号不能为空") + @ApiModelProperty("保单号") + private String insuranceBillCode; + + @NotBlank(message = "保单号不能为空") + @ApiModelProperty("附件id,调用/attach-info{businessType}方法获取,businessType传值insurance_file,userDefinedPath传值规则:userid + '/' + insuranceBillCode") + private String attachInfoId; + + @JsonFormat(pattern = "yyyy-MM-dd") + @NotNull(message = "生效日期不能为空") + @ApiModelProperty("生效日期") + private LocalDate effectiveDate; + + @JsonFormat(pattern = "yyyy-MM-dd") + @NotNull(message = "失效日期不能为空") + @ApiModelProperty("失效日期") + private LocalDate expireDate; + + @NotNull(message = "保险金额不能为空") + @ApiModelProperty("保险金额,单位元,精确到分") + private BigDecimal insuranceAmount; + + @NotNull(message = "保险保费不能为空") + @ApiModelProperty("保险保费,单位元,精确到分") + private BigDecimal insurancePremium; + + @Size(max = 200, message = "备注不能超过200个字符") + @ApiModelProperty("备注") + private String remark; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/InsuranceInfoResp.java b/core/src/main/java/com/dite/znpt/domain/vo/InsuranceInfoResp.java new file mode 100644 index 0000000..86161b4 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/InsuranceInfoResp.java @@ -0,0 +1,75 @@ +package com.dite.znpt.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; + +/** + * @Author: gaoxiong + * @Date: 2025/6/24 23:46 + * @Description: + */ +@Data +@Accessors(chain = true) +@ApiModel("保险信息响应实体") +public class InsuranceInfoResp implements Serializable { + @Serial + private static final long serialVersionUID = 4703855943894592615L; + + @ApiModelProperty("保险信息id") + private String insuranceInfoId; + + @ApiModelProperty("用户id") + private String userId; + + @ApiModelProperty("用户姓名") + private String name; + + @ApiModelProperty("用户编码") + private String userCode; + + @ApiModelProperty("保险类型id") + private String insuranceTypeId; + + @ApiModelProperty("保险类型名称") + private String insuranceTypeName; + + @ApiModelProperty("保险公司id") + private String insuranceCompanyId; + + @ApiModelProperty("保险公司名称") + private String insuranceCompanyName; + + @ApiModelProperty("保单号") + private String insuranceBillCode; + + @ApiModelProperty("附件id") + private String attachInfoId; + + @ApiModelProperty("附件信息") + private AttachInfoResp attachInfoResp; + + @JsonFormat(pattern = "yyyy-MM-dd") + @ApiModelProperty("生效日期") + private LocalDate effectiveDate; + + @JsonFormat(pattern = "yyyy-MM-dd") + @ApiModelProperty("失效日期") + private LocalDate expireDate; + + @ApiModelProperty("保险金额") + private BigDecimal insuranceAmount; + + @ApiModelProperty("保险保费") + private BigDecimal insurancePremium; + + @ApiModelProperty("备注") + private String remarks; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/InsuranceTypeReq.java b/core/src/main/java/com/dite/znpt/domain/vo/InsuranceTypeReq.java new file mode 100644 index 0000000..3fe3ee4 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/InsuranceTypeReq.java @@ -0,0 +1,33 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/6/24 23:44 + * @Description: + */ +@Data +@Accessors(chain = true) +@ApiModel("保险类型请求实体") +public class InsuranceTypeReq implements Serializable { + @Serial + private static final long serialVersionUID = -47047804822030641L; + + @NotBlank(message = "保险类型名称不能为空") + @Size(max = 50, message = "保险类型名称不能超过50个字符") + @ApiModelProperty("保险类型名称") + private String insuranceTypeName; + + @Size(max = 200, message = "描述信息不能超过200个字符") + @ApiModelProperty("描述信息") + private String description; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/InsuranceTypeResp.java b/core/src/main/java/com/dite/znpt/domain/vo/InsuranceTypeResp.java new file mode 100644 index 0000000..af40c1d --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/InsuranceTypeResp.java @@ -0,0 +1,31 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/6/24 23:46 + * @Description: + */ +@Data +@Accessors(chain = true) +@ApiModel("保险类型响应实体") +public class InsuranceTypeResp implements Serializable { + @Serial + private static final long serialVersionUID = -2745493272695038596L; + + @ApiModelProperty("保险类型id") + private String insuranceTypeId; + + @ApiModelProperty("保险类型名称") + private String insuranceTypeName; + + @ApiModelProperty("描述信息") + private String description; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/LoginReq.java b/core/src/main/java/com/dite/znpt/domain/vo/LoginReq.java new file mode 100644 index 0000000..9de9006 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/LoginReq.java @@ -0,0 +1,30 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.io.Serial; +import java.io.Serializable; + +/** + * @author Bear.G + * @date 2025/5/22/周四 17:36 + * @description + */ +@Data +@ApiModel("登录请求实体") +public class LoginReq implements Serializable { + + @Serial + private static final long serialVersionUID = -1782729268877852765L; + + @NotBlank(message = "账号不能为空") + @ApiModelProperty("账号") + private String account; + + @NotBlank(message = "密码不能为空") + @ApiModelProperty("密码,密文传输,密码加密采用aes(加密模式ECB,填充方式PKCS#7)加密传输,加密密钥产生逻辑:对账号做md5()计算,然后取值8-24位。") + private String password; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/MaintainSuggestionReq.java b/core/src/main/java/com/dite/znpt/domain/vo/MaintainSuggestionReq.java new file mode 100644 index 0000000..0c6b112 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/MaintainSuggestionReq.java @@ -0,0 +1,37 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/7/7 22:25 + * @Description: + */ +@Data +@Accessors(chain = true) +@ApiModel("维修建议请求实体") +public class MaintainSuggestionReq implements Serializable { + @Serial + private static final long serialVersionUID = 6390137746113715095L; + + @NotBlank(message = "建议内容不能为空") + @Size(max = 200, message = "建议内容不能超过200个字符") + @ApiModelProperty("建议内容") + private String suggestionContent; + + @NotBlank(message = "缺陷类型不能为空") + @ApiModelProperty("缺陷类型,枚举:DefectTypeEnum") + private String defectType; + + @NotBlank(message = "缺陷级别不能为空") + @ApiModelProperty("缺陷级别,枚举:DefectLevelEnum") + private String defectLevel; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/MaintainSuggestionResp.java b/core/src/main/java/com/dite/znpt/domain/vo/MaintainSuggestionResp.java new file mode 100644 index 0000000..42b2963 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/MaintainSuggestionResp.java @@ -0,0 +1,40 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/7/7 22:26 + * @Description: + */ +@Data +@Accessors(chain = true) +@ApiModel("维修建议响应实体") +public class MaintainSuggestionResp implements Serializable { + @Serial + private static final long serialVersionUID = -5835303002016693551L; + + @ApiModelProperty("建议id") + private String suggestionId; + + @ApiModelProperty("建议内容") + private String suggestionContent; + + @ApiModelProperty("缺陷类型,枚举:DefectTypeEnum") + private String defectType; + + @ApiModelProperty("缺陷类型描述") + private String defectTypeLabel; + + @ApiModelProperty("缺陷级别,枚举:DefectLevelEnum") + private String defectLevel; + + @ApiModelProperty("缺陷级别描述") + private String defectLevelLabel; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/MenuReq.java b/core/src/main/java/com/dite/znpt/domain/vo/MenuReq.java new file mode 100644 index 0000000..536c502 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/MenuReq.java @@ -0,0 +1,63 @@ +package com.dite.znpt.domain.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.dite.znpt.util.ValidationGroup; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.io.Serial; +import java.io.Serializable; + +/** + * @author Bear.G + * @date 2025/5/21/周三 12:31 + * @description + */ +@Data +@ApiModel("菜单信息请求实体") +public class MenuReq implements Serializable { + @Serial + private static final long serialVersionUID = -7141367511437222477L; + + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "菜单名称不能为空") + @Size(max = 10, message = "菜单名称不能超过10个字符") + @ApiModelProperty("菜单名称") + private String menuName; + + @ApiModelProperty("父级菜单id,父级菜单修改无效") + private String parentId; + + @ApiModelProperty("显示顺序") + private Integer orderNum; + + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 200, message = "路由地址不能超过200个字符") + @ApiModelProperty("路由地址") + private String path; + + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 200, message = "组件地址不能超过200个字符") + @ExcelProperty("组件地址") + @ApiModelProperty("组件地址") + private String component; + + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "菜单类型不能为空") + @ApiModelProperty("菜单类型") + private String menuType; + + @ApiModelProperty("显示状态") + private String visible; + + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 50, message = "备注不能超过50个字符") + @ApiModelProperty("参数") + private String perms; + + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "终端类型不能为空") + @ApiModelProperty("终端类型") + private String terminalType; + + + +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/MenuResp.java b/core/src/main/java/com/dite/znpt/domain/vo/MenuResp.java new file mode 100644 index 0000000..c5ceae2 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/MenuResp.java @@ -0,0 +1,48 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author Bear.G + * @date 2025/5/21/周三 12:31 + * @description + */ +@Data +@ApiModel("菜单信息响应实体") +public class MenuResp implements Serializable { + @Serial + private static final long serialVersionUID = -153724438320680595L; + + @ApiModelProperty("菜单id") + private String menuId; + + @ApiModelProperty("菜单名称") + private String menuName; + + @ApiModelProperty("父级菜单id") + private String parentId; + + @ApiModelProperty("显示顺序") + private String orderNum; + + @ApiModelProperty("路由地址") + private String path; + + @ApiModelProperty("组件地址") + private String component; + + @ApiModelProperty("菜单类型") + private String menuType; + + @ApiModelProperty("显示状态") + private String visible; + + @ApiModelProperty("参数") + private String perms; + +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ModelConfigListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ModelConfigListReq.java new file mode 100644 index 0000000..f42a0c6 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ModelConfigListReq.java @@ -0,0 +1,41 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author huise23 + * @date 2025/07/02 20:57 + * @Description: 请求实体 + */ +@Data +@ApiModel("列表请求实体") +public class ModelConfigListReq implements Serializable { + + @Serial + private static final long serialVersionUID = -41204426418525667L; + + @ApiModelProperty("查询关键字") + private String keyword; + + @ApiModelProperty("Id") + private String modelId; + + @ApiModelProperty("模型名称") + private String modelName; + + @ApiModelProperty("模型路径") + private String modelPath; + + @ApiModelProperty("模型置信度") + private Float confThreshold; + + @ApiModelProperty("非极大抑制") + private Float nmsThreshold; + +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ModelConfigReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ModelConfigReq.java new file mode 100644 index 0000000..7e37655 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ModelConfigReq.java @@ -0,0 +1,50 @@ +package com.dite.znpt.domain.vo; + +import com.dite.znpt.util.ValidationGroup; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.*; +import java.io.Serial; +import java.io.Serializable; + +/** + * @author huise23 + * @date 2025/07/02 20:57 + * @Description: 模型配置表请求类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="ModelConfig请求对象", description="模型配置表") +public class ModelConfigReq implements Serializable { + + @Serial + private static final long serialVersionUID = 930798215980875267L; + + @ApiModelProperty("模型id") + private String modelId; + + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "模型名称不能为空") + @Size(max = 50, groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "模型名称长度不能超过50") + @ApiModelProperty("模型名称") + private String modelName; + + @NotEmpty(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "模型附件不能为空") + @ApiModelProperty("模型附件id") + private String attachId; + + @NotNull(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "模型置信度不能为空") + @Min(value = 0, groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "模型置信度只能在0-100之间") + @Max(value = 100, groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "模型置信度只能在0-100之间") + @ApiModelProperty("模型置信度") + private Float confThreshold; + + @NotNull(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "nms不能为空") + @Min(value = 0, groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "nms只能在0-1之间") + @Max(value = 1, groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "nms只能在0-1之间") + @ApiModelProperty("nms") + private Float nmsThreshold; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ModelConfigResp.java b/core/src/main/java/com/dite/znpt/domain/vo/ModelConfigResp.java new file mode 100644 index 0000000..33d1e20 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ModelConfigResp.java @@ -0,0 +1,18 @@ +package com.dite.znpt.domain.vo; + +import com.dite.znpt.domain.entity.ModelConfigEntity; +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author huise23 + * @date 2025/07/02 20:57 + * @Description: 响应实体 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel("响应实体") +public class ModelConfigResp extends ModelConfigEntity { +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ModifyPasswordReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ModifyPasswordReq.java new file mode 100644 index 0000000..a111b11 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ModifyPasswordReq.java @@ -0,0 +1,34 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.io.Serial; +import java.io.Serializable; + +/** + * @author Bear.G + * @date 2025/5/22/周四 17:36 + * @description + */ +@Data +@ApiModel("修改密码请求实体") +public class ModifyPasswordReq implements Serializable { + + @Serial + private static final long serialVersionUID = -5458522057381605255L; + + @NotBlank(message = "账号不能为空") + @ApiModelProperty("账号") + private String account; + + @NotBlank(message = "旧密码不能为空") + @ApiModelProperty("旧密码,密文传输,密码加密采用aes(加密模式ECB,填充方式PKCS#7)加密传输,加密密钥产生逻辑:对账号做md5()计算,然后取值8-24位。") + private String oldPassword; + + @NotBlank(message = "新密码不能为空") + @ApiModelProperty("新密码,密文传输,密码加密采用aes(加密模式ECB,填充方式PKCS#7)加密传输,加密密钥产生逻辑:对账号做md5()计算,然后取值8-24位。") + private String newPassword; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/OutWorkDefectReq.java b/core/src/main/java/com/dite/znpt/domain/vo/OutWorkDefectReq.java new file mode 100644 index 0000000..4b910e7 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/OutWorkDefectReq.java @@ -0,0 +1,27 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/5/11 21:20 + * @Description: + */ +@Data +@ApiModel("外部工作上报缺陷请求实体") +public class OutWorkDefectReq extends DefectReq implements Serializable { + + @Serial + private static final long serialVersionUID = -9109852601298547208L; + + @ApiModelProperty(name = "图像路径", required = true) + private String imagePath; + + @ApiModelProperty(name = "部件id", required = true) + private String partId; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/PartListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/PartListReq.java new file mode 100644 index 0000000..4de6e88 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/PartListReq.java @@ -0,0 +1,41 @@ +package com.dite.znpt.domain.vo; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 请求实体 + */ +@Data +@Accessors(chain = true) +@ApiModel("部件列表请求实体") +public class PartListReq implements Serializable { + + private static final long serialVersionUID = 118135700439578757L; + + @ApiModelProperty("查询关键字") + private String keyword; + + @ApiModelProperty(name = "projectId", required = true) + private String projectId; + + @ApiModelProperty(name = "turbineId", required = true) + private String turbineId; + + @ApiModelProperty("类型,枚举PartTypeEnum") + private String partType; + + @ApiModelProperty("厂商") + private String partManufacturer; + + @ApiModelProperty("型号") + private String partModel; + +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/PartListResp.java b/core/src/main/java/com/dite/znpt/domain/vo/PartListResp.java new file mode 100644 index 0000000..84bd689 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/PartListResp.java @@ -0,0 +1,48 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/5/7 21:50 + * @Description: + */ +@Data +@ApiModel("部件列表响应实体") +public class PartListResp implements Serializable { + + @Serial + private static final long serialVersionUID = -8081226536055269084L; + + @ApiModelProperty("部件id") + private String partId; + + @ApiModelProperty("项目id") + private String projectId; + + @ApiModelProperty("项目名称") + private String projectName; + + @ApiModelProperty("机组id") + private String turbineId; + + @ApiModelProperty("机组名称") + private String turbineName; + + @ApiModelProperty("名称") + private String partName; + + @ApiModelProperty("编号") + private String partCode; + + @ApiModelProperty("类型,枚举PartTypeEnum") + private String partType; + + @ApiModelProperty("类型,枚举PartTypeEnum") + private String partTypeLabel; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/PartReq.java b/core/src/main/java/com/dite/znpt/domain/vo/PartReq.java new file mode 100644 index 0000000..e916e96 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/PartReq.java @@ -0,0 +1,52 @@ +package com.dite.znpt.domain.vo; + +import com.dite.znpt.util.ValidationGroup; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/5/7 21:51 + * @Description: + */ +@Data +@ApiModel("部件请求实体") +public class PartReq implements Serializable { + + @Serial + private static final long serialVersionUID = -585044340118904985L; + + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "机组id不能为空") + @ApiModelProperty("机组id") + private String turbineId; + + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "部件名称不能为空") + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 50, message = "部件名称长度不能超过50字符") + @ApiModelProperty("部件名称") + private String partName; + + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "部件编号长度不能超过20字符") + @ApiModelProperty("部件编号") + private String partCode; + + @ApiModelProperty("部件类型,枚举PartTypeEnum") + private String partType; + + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 200, message = "部件描述长度不能超过200字符") + @ApiModelProperty("部件描述") + private String partDesc; + + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "部件厂商长度不能超过20字符") + @ApiModelProperty("部件厂商") + private String PartManufacturer; + + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "部件型号长度不能超过20字符") + @ApiModelProperty("部件型号") + private String PartModel; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/PartResp.java b/core/src/main/java/com/dite/znpt/domain/vo/PartResp.java new file mode 100644 index 0000000..5dc70a8 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/PartResp.java @@ -0,0 +1,58 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 响应实体 + */ +@Data +@ApiModel("部件响应实体") +public class PartResp implements Serializable { + + @Serial + private static final long serialVersionUID = -4457194361289992312L; + + @ApiModelProperty("部件id") + private String partId; + + @ApiModelProperty("项目id") + private String projectId; + + @ApiModelProperty("机组") + private String projectName; + + @ApiModelProperty("机组id") + private String turbineId; + + @ApiModelProperty("机组名称") + private String turbineName; + + @ApiModelProperty("名称") + private String partName; + + @ApiModelProperty("编号") + private String partCode; + + @ApiModelProperty("类型,枚举PartTypeEnum") + private String partType; + + @ApiModelProperty("类型描述") + private String partTypeLabel; + + @ApiModelProperty("描述") + private String partDesc; + + @ApiModelProperty("厂商") + private String partManufacturer; + + @ApiModelProperty("型号") + private String partModel; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/PostReq.java b/core/src/main/java/com/dite/znpt/domain/vo/PostReq.java new file mode 100644 index 0000000..754da01 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/PostReq.java @@ -0,0 +1,37 @@ +package com.dite.znpt.domain.vo; + +import com.dite.znpt.util.ValidationGroup; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.io.Serial; +import java.io.Serializable; + +/** + * @author Bear.G + * @date 2025/5/20/周二 9:43 + * @description + */ +@Data +@ApiModel("岗位信息请求实体") +public class PostReq implements Serializable { + @Serial + private static final long serialVersionUID = -149328762675637911L; + + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "岗位名称不能为空") + @Size(max = 30, groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "岗位名称长度不能超过30个字符") + @ApiModelProperty("岗位名称") + private String postName; + + @ApiModelProperty("显示顺序") + private Integer postSort; + + @ApiModelProperty("状态(0正常 1停用)") + private Integer status; + + @ApiModelProperty("备注") + private String remark; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/PostResp.java b/core/src/main/java/com/dite/znpt/domain/vo/PostResp.java new file mode 100644 index 0000000..031e793 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/PostResp.java @@ -0,0 +1,38 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.Size; +import java.io.Serial; +import java.io.Serializable; + +/** + * @author Bear.G + * @date 2025/5/20/周二 9:42 + * @description + */ +@Data +@ApiModel("岗位信息响应实体") +public class PostResp implements Serializable { + @Serial + private static final long serialVersionUID = 8836143545716686582L; + + @ApiModelProperty("岗位id") + private String postId; + + @ApiModelProperty("岗位名称") + private String postName; + + @ApiModelProperty("显示顺序") + private Integer postSort; + + @ApiModelProperty("状态") + private String status; + + @Size(max = 200, message = "备注长度不能超过200个字符") + @ApiModelProperty("备注") + private String remark; + +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoImportReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoImportReq.java new file mode 100644 index 0000000..d674f01 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoImportReq.java @@ -0,0 +1,38 @@ +package com.dite.znpt.domain.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; +/** + * @author huise23 + * @date 2025/07/17 21:58 + * @Description: 项目预算信息表导入请求类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="ProjectBudgetInfo导入请求对象", description="项目预算信息表") +public class ProjectBudgetInfoImportReq implements Serializable { + + @Serial + private static final long serialVersionUID = 580212651388155611L; + + + @ExcelProperty(value = "项目名称") + private String projectName; + + @ExcelProperty(value = "预算名称") + private String budgetName; + + @ExcelProperty(value = "预算类型") + private String budgetType; + + @ExcelProperty(value = "预算金额(万元)") + private Double budgetAmount; + + @ExcelProperty(value = "预算说明") + private String budgetDesc; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoListReq.java new file mode 100644 index 0000000..c557777 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoListReq.java @@ -0,0 +1,44 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author huise23 + * @date 2025/07/17 21:58 + * @Description: 项目预算信息请求实体 + */ +@Data +@ApiModel("项目预算信息列表请求实体") +public class ProjectBudgetInfoListReq implements Serializable { + + @Serial + private static final long serialVersionUID = 539751666379021505L; + + @ApiModelProperty("查询关键字") + private String keyword; + + @ApiModelProperty("项目预算信息Id") + private String budgetId; + + @ApiModelProperty("项目id") + private String projectId; + + @ApiModelProperty("预算名称") + private String budgetName; + + @ApiModelProperty("预算类型") + private String budgetType; + + @ApiModelProperty("预算金额(万元)") + private Double budgetAmount; + + @ApiModelProperty("预算说明") + private String budgetDesc; + +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoListResp.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoListResp.java new file mode 100644 index 0000000..ed6e165 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoListResp.java @@ -0,0 +1,19 @@ +package com.dite.znpt.domain.vo; + +import com.dite.znpt.domain.entity.ProjectBudgetInfoEntity; +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author huise23 + * @date 2025/07/17 21:58 + * @Description: 项目预算信息列表响应实体 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel("项目预算信息列表响应实体") +public class ProjectBudgetInfoListResp extends ProjectBudgetInfoEntity { + +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoReq.java new file mode 100644 index 0000000..7b8dfb3 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoReq.java @@ -0,0 +1,41 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; +/** + * @author huise23 + * @date 2025/07/17 21:58 + * @Description: 项目预算信息表请求类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="ProjectBudgetInfo请求对象", description="项目预算信息表") +public class ProjectBudgetInfoReq implements Serializable { + + @Serial + private static final long serialVersionUID = 778519049897573879L; + + @ApiModelProperty("项目id") + private String projectId; + + @ApiModelProperty("预算名称") + private String budgetName; + + @ApiModelProperty("预算类型") + private String budgetType; + + @ApiModelProperty("预算金额(万元)") + private Double budgetAmount; + + @ApiModelProperty("预算说明") + private String budgetDesc; + + @ApiModelProperty("附件id") + private String attachId; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoResp.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoResp.java new file mode 100644 index 0000000..a442d35 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoResp.java @@ -0,0 +1,22 @@ +package com.dite.znpt.domain.vo; + +import com.dite.znpt.domain.entity.ProjectBudgetInfoEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author huise23 + * @date 2025/07/17 21:58 + * @Description: 项目预算信息响应实体 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel("项目预算信息响应实体") +public class ProjectBudgetInfoResp extends ProjectBudgetInfoEntity { + + @ApiModelProperty("预算类型描述") + private String budgetTypeDesc; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectListReq.java new file mode 100644 index 0000000..a285e33 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectListReq.java @@ -0,0 +1,48 @@ +package com.dite.znpt.domain.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 项目信息请求实体 + */ +@Data +@ApiModel("项目信息列表请求实体") +public class ProjectListReq implements Serializable { + + private static final long serialVersionUID = -74121355744234753L; + + @ApiModelProperty("项目名称") + private String projectName; + + @ApiModelProperty("风场名称") + private String farmName; + + @ApiModelProperty("风场地址") + private String farmAddress; + + @ApiModelProperty("委托单位") + private String client; + + @ApiModelProperty("项目状态,枚举:ProjectStatusEnum") + private String status; + + @ApiModelProperty("项目开始日期") + private LocalDate startDate; + + @ApiModelProperty("项目结束日期") + private LocalDate endDate; + + @ApiModelProperty(value = "用户id", hidden = true) + private String userId; + +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectListResp.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectListResp.java new file mode 100644 index 0000000..f0578ef --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectListResp.java @@ -0,0 +1,105 @@ +package com.dite.znpt.domain.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * @Author: gaoxiong + * @Date: 2025/4/29 21:27 + * @Description: + */ +@Data +@ApiModel("项目信息列表响应实体") +public class ProjectListResp implements Serializable { + @Serial + private static final long serialVersionUID = 2638755916020263971L; + + @ApiModelProperty("项目id") + private String projectId; + + @ApiModelProperty("项目名称") + private String projectName; + + @ApiModelProperty("风场名称") + private String farmName; + + @ApiModelProperty("项目状态,枚举:ProjectStatusEnum") + private int status; + + @ApiModelProperty("项目状态,枚举:ProjectStatusEnum") + private String statusLabel; + + @ApiModelProperty("项目封面") + private String coverUrl; + + @ApiModelProperty("风场地址") + private String farmAddress; + + @ApiModelProperty("委托单位") + private String client; + + @ApiModelProperty("委托单位联系人") + private String clientContact; + + @ApiModelProperty("委托单位联系电话") + private String clientPhone; + + @ApiModelProperty("检查单位") + private String inspectionUnit; + + @ApiModelProperty("检查单位联系人") + private String inspectionContact; + + @ApiModelProperty("检查单位联系电话") + private String inspectionPhone; + + @ApiModelProperty("项目规模") + private String scale; + + @ApiModelProperty("总工期,单位天") + private Integer duration; + + @ApiModelProperty("风机型号") + private String turbineModel; + + @ApiModelProperty("项目经理id") + private String projectManagerId; + + @ApiModelProperty("项目经理") + private String projectManagerName; + + @ApiModelProperty("施工人员id") + private String constructorIds; + + @ApiModelProperty("施工人员") + private String constructorName; + + @ApiModelProperty(value = "开始时间") + private LocalDate startDate; + + @ApiModelProperty(value = "结束时间") + private LocalDate endDate; + + @ApiModelProperty(value = "未开始任务数") + private Integer taskPendingCount; + + @ApiModelProperty(value = "进行中任务数") + private Integer taskProgressCount; + + @ApiModelProperty(value = "已完成任务数") + private Integer taskCompleteCount; + + @ApiModelProperty(value = "总任务数") + private Integer taskCount; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectReq.java new file mode 100644 index 0000000..501ac49 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectReq.java @@ -0,0 +1,108 @@ +package com.dite.znpt.domain.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.dite.znpt.util.ValidationGroup; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; + +/** + * @Author: gaoxiong + * @Date: 2025/4/29 21:28 + * @Description: + */ +@Data +@ApiModel("项目信息请求实体") +public class ProjectReq implements Serializable { + + @Serial + private static final long serialVersionUID = 740685592879189406L; + + @NotBlank(groups = {ValidationGroup.Update.class}, message = "项目id不能为空") + @ApiModelProperty("项目id") + private String projectId; + + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "项目名称不能为空") + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 50, message = "项目名称长度不能超过50字符") + @ApiModelProperty("项目名称") + private String projectName; + + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 200, message = "项目封面述长度不能超过200字符") + @ApiModelProperty("项目封面") + private String coverUrl; + + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "风场名称不能为空") + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 50, message = "风场名称长度不能超过50字符") + @ApiModelProperty("风场名称") + private String farmName; + + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 100, message = "风场名称长度不能超过100字符") + @ApiModelProperty("风场地址") + private String farmAddress; + + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 50, message = "委托单位长度不能超过50字符") + @ApiModelProperty("委托单位") + private String client; + + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "委托单位联系人长度不能超过20字符") + @ApiModelProperty("委托单位联系人") + private String clientContact; + + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "委托单位联系电话长度不能超过20字符") + @ApiModelProperty("委托单位联系电话") + private String clientPhone; + + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "检查单位联系电话长度不能超过20字符") + @ApiModelProperty("检查单位") + private String inspectionUnit; + + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "检查单位联系人长度不能超过20字符") + @ApiModelProperty("检查单位联系人") + private String inspectionContact; + + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "检查单位联系电话长度不能超过20字符") + @ApiModelProperty("检查单位联系电话") + private String inspectionPhone; + + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "项目规模长度不能超过20字符") + @ApiModelProperty("项目规模") + private String scale; + + @ApiModelProperty("总工期,单位天") + private Integer duration; + + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "风机型号不能超过20字符") + @ApiModelProperty("风机型号") + private String turbineModel; + + @ApiModelProperty(value = "施工人员id", notes = "多个用英文逗号隔开") + private String constructorIds; + + @ApiModelProperty("安全员id") + private String auditorId; + + @ApiModelProperty("质量员id") + private String qualityOfficerId; + + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "项目经理id不能为空") + @ApiModelProperty("项目经理id") + private String projectManagerId; + + @ApiModelProperty("施工组长id") + private String constructionTeamLeaderId; + + @ApiModelProperty("状态:0待施工,1施工中,2已完工,3已审核,4已验收") + private int status; + + @ApiModelProperty(value = "开始时间") + private LocalDate startDate; + + @ApiModelProperty(value = "结束时间") + private LocalDate endDate; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectResp.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectResp.java new file mode 100644 index 0000000..826a0f5 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectResp.java @@ -0,0 +1,48 @@ +package com.dite.znpt.domain.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.dite.znpt.domain.entity.ProjectEntity; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 项目信息响应实体 + */ +@Data +@ApiModel("项目信息响应实体") +public class ProjectResp extends ProjectReq implements Serializable { + + @Serial + private static final long serialVersionUID = -1883901559600186726L; + + @ApiModelProperty("施工人员") + private String constructorName; + + @ApiModelProperty("安全员") + private String auditorName; + + @ApiModelProperty("质量员") + private String qualityOfficerName; + + @ApiModelProperty("项目经理") + private String projectManagerName; + + @ApiModelProperty("施工组长") + private String constructionTeamLeaderName; + + @ApiModelProperty("状态:0待施工,1施工中,2已完工,3已审核,4已验收") + private String statusLabel; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskGroupListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskGroupListReq.java new file mode 100644 index 0000000..f338798 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskGroupListReq.java @@ -0,0 +1,36 @@ +package com.dite.znpt.domain.vo; + +import java.time.LocalDateTime; +import java.io.Serial; +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author huise23 + * @date 2025/06/24 17:06 + * @Description: 项目任务组信息请求实体 + */ +@Data +@ApiModel("项目任务组信息列表请求实体") +public class ProjectTaskGroupListReq implements Serializable { + + @Serial + private static final long serialVersionUID = -99072074587210624L; + + @ApiModelProperty("项目任务组信息Id") + private String groupId; + + @ApiModelProperty("项目任务组名") + private String groupName; + + @ApiModelProperty("任务名称/负责人") + private String keyword; + + @ApiModelProperty("项目id") + private String projectId; + +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskGroupReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskGroupReq.java new file mode 100644 index 0000000..a08f226 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskGroupReq.java @@ -0,0 +1,43 @@ +package com.dite.znpt.domain.vo; + +import java.io.Serial; +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.*; +import com.dite.znpt.util.ValidationGroup; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +/** + * @author huise23 + * @date 2025/06/25 17:18 + * @Description: 项目任务组信息表请求类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("project_task_group") +@ApiModel(value="ProjectTaskGroup请求对象", description="项目任务组信息表") +public class ProjectTaskGroupReq implements Serializable { + + @Serial + private static final long serialVersionUID = -57817993612481804L; + + @ApiModelProperty("id") + private String groupId; + + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "项目任务组名不能为空") + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 100, message = "项目任务组名长度不能超过100字符") + @ApiModelProperty("项目任务组名") + private String groupName; + + @NotNull(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "项目id不能为空") + @ApiModelProperty("项目id") + private String projectId; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskGroupResp.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskGroupResp.java new file mode 100644 index 0000000..b7ad031 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskGroupResp.java @@ -0,0 +1,27 @@ +package com.dite.znpt.domain.vo; + +import java.time.LocalDateTime; +import java.util.List; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.dite.znpt.domain.entity.ProjectTaskGroupEntity; + +/** + * @author huise23 + * @date 2025/06/24 16:44 + * @Description: 项目任务组信息响应实体 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel("项目任务组信息响应实体") +public class ProjectTaskGroupResp extends ProjectTaskGroupEntity { + + @ApiModelProperty("任务列表") + private List taskList; + @ApiModelProperty("项目名称") + private String projectName; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskImportReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskImportReq.java new file mode 100644 index 0000000..287973a --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskImportReq.java @@ -0,0 +1,67 @@ +package com.dite.znpt.domain.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; +/** + * @author huise23 + * @date 2025/06/27 14:21 + * @Description: 项目任务信息表导入请求类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="ProjectTask导入请求对象", description="项目任务信息表") +public class ProjectTaskImportReq implements Serializable { + + @Serial + private static final long serialVersionUID = -86440098932860558L; + + + @ExcelProperty(value = "上级任务名称") + private String parentTaskName; + + @ExcelProperty(value = "任务组名称(不能为空,长度32以内)") + private String taskGroupName; + + @ExcelProperty(value = "项目任务名称(不能为空,长度100以内)") + private String taskName; + + @ExcelProperty(value = "项目任务编号(不能为空,长度100以内)") + private String taskCode; + + @ExcelProperty(value = "任务负责人名称(不能为空,长度100以内)") + private String mainUserName; + + @ExcelProperty(value = "任务参与人名称,逗号分隔") + private String userName; + + @ExcelProperty(value = "计划开始时间(不能为空)") + private LocalDate planStartDate; + + @ExcelProperty(value = "计划结束时间(不能为空)") + private LocalDate planEndDate; + + @ExcelProperty(value = "实际开始时间") + private LocalDate actualStartDate; + + @ExcelProperty(value = "实际结束时间") + private LocalDate actualEndDate; + + @ExcelProperty(value = "任务状态(未开始,进行中,已结束)") + private String status; + + @ExcelProperty(value = "是否逾期(已逾期,未逾期)") + private String overdueStatus; + + @ExcelProperty(value = "备注") + private String remark; + + @ApiModelProperty("项目id") + private String projectId; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskListReq.java new file mode 100644 index 0000000..187301c --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskListReq.java @@ -0,0 +1,75 @@ +package com.dite.znpt.domain.vo; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.io.Serial; +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author huise23 + * @date 2025/06/25 17:31 + * @Description: 项目任务信息请求实体 + */ +@Data +@ApiModel("项目任务信息列表请求实体") +public class ProjectTaskListReq implements Serializable { + + @Serial + private static final long serialVersionUID = 971346092554199471L; + + @ApiModelProperty("查询关键字") + private String keyword; + + @ApiModelProperty("项目任务信息Id") + private String taskId; + + @ApiModelProperty("任务组id") + private String taskGroupId; + + @ApiModelProperty("项目任务名称") + private String taskName; + + @ApiModelProperty("项目任务编号") + private String taskCode; + + @ApiModelProperty("任务负责人id") + private String mainUserId; + + @ApiModelProperty("任务参与人id,逗号分隔") + private String userIds; + + @ApiModelProperty("计划开始时间") + private LocalDate planStartDate; + + @ApiModelProperty("计划结束时间") + private LocalDate planEndDate; + + @ApiModelProperty("实际开始时间") + private LocalDate actualStartDate; + + @ApiModelProperty("实际结束时间") + private LocalDate actualEndDate; + + @ApiModelProperty("任务状态,0未开始,1进行中,2已结束") + private Integer status; + + @ApiModelProperty("是否逾期,默认未逾期") + private Integer overdueStatus; + + @ApiModelProperty("任务名称/负责人名称") + private String taskNameOrMainUser; + + @ApiModelProperty(value = "导出?", hidden = true) + private Boolean isExport; + + @ApiModelProperty("项目id") + private String projectId; + + @ApiModelProperty(value = "用户id", hidden = true) + private String userId; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskReq.java new file mode 100644 index 0000000..c4439d1 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskReq.java @@ -0,0 +1,88 @@ +package com.dite.znpt.domain.vo; + +import com.dite.znpt.util.ValidationGroup; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; +import java.util.List; +/** + * @author huise23 + * @date 2025/06/25 21:48 + * @Description: 项目任务信息表请求类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="ProjectTask请求对象", description="项目任务信息表") +public class ProjectTaskReq implements Serializable { + + @Serial + private static final long serialVersionUID = 899180318567127648L; + + @ApiModelProperty("任务id") + private String taskId; + + @ApiModelProperty("上级任务id") + private String parentTaskId; + + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "任务组id不能为空") + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 32, message = "任务组id长度不能超过32字符") + @ApiModelProperty("任务组id") + private String taskGroupId; + + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "项目任务名称不能为空") + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 100, message = "项目任务名称长度不能超过100字符") + @ApiModelProperty("项目任务名称") + private String taskName; + + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "项目任务编号不能为空") + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 100, message = "项目任务编号长度不能超过100字符") + @ApiModelProperty("项目任务编号") + private String taskCode; + + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "任务负责人id不能为空") + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 100, message = "任务负责人id长度不能超过100字符") + @ApiModelProperty("任务负责人id") + private String mainUserId; + + @ApiModelProperty("任务参与人id,逗号分隔") + private String userIds; + + @NotNull(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "计划开始时间不能为空") + @ApiModelProperty("计划开始时间") + private LocalDate planStartDate; + + @NotNull(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "计划结束时间不能为空") + @ApiModelProperty("计划结束时间") + private LocalDate planEndDate; + + @ApiModelProperty("实际开始时间") + private LocalDate actualStartDate; + + @ApiModelProperty("实际结束时间") + private LocalDate actualEndDate; + + @ApiModelProperty("任务状态,0未开始,1进行中,2已结束") + private Integer status; + + @ApiModelProperty("是否逾期,默认未逾期") + private Integer overdueStatus; + + @ApiModelProperty("附件列表") + private List attachFileIds; + + @ApiModelProperty("备注") + private String remark; + + @NotNull(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "项目id不能为空") + @ApiModelProperty("项目id") + private String projectId; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskResp.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskResp.java new file mode 100644 index 0000000..05271f7 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskResp.java @@ -0,0 +1,29 @@ +package com.dite.znpt.domain.vo; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +import com.dite.znpt.domain.entity.AttachInfoEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.dite.znpt.domain.entity.ProjectTaskEntity; + +/** + * @author huise23 + * @date 2025/06/25 21:48 + * @Description: 项目任务信息响应实体 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel("项目任务信息响应实体") +public class ProjectTaskResp extends ProjectTaskEntity { + + @ApiModelProperty("附件列表") + private List attachList; + @ApiModelProperty("项目名称") + private String projectName; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskStartReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskStartReq.java new file mode 100644 index 0000000..e83a1b4 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskStartReq.java @@ -0,0 +1,37 @@ +package com.dite.znpt.domain.vo; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.util.ValidationGroup; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; + +/** + * @author huise23 + * @date 2025/06/25 17:31 + * @Description: 项目任务信息表请求类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="ProjectTask开始/结束任务请求对象", description="项目任务信息表") +public class ProjectTaskStartReq implements Serializable { + + @Serial + private static final long serialVersionUID = 862660085007390976L; + + @ApiModelProperty("任务id") + private String taskId; + + @ApiModelProperty("任务组id") + private String taskGroupId; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/RoleMenuReq.java b/core/src/main/java/com/dite/znpt/domain/vo/RoleMenuReq.java new file mode 100644 index 0000000..84c852a --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/RoleMenuReq.java @@ -0,0 +1,32 @@ +package com.dite.znpt.domain.vo; + +import com.dite.znpt.util.ValidationGroup; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/21/周三 17:33 + * @description + */ +@Data +@ApiModel("角色菜单绑定请求实体") +public class RoleMenuReq implements Serializable { + @Serial + private static final long serialVersionUID = -7759529835730562338L; + + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "角色id不能为空") + @ApiModelProperty(value = "角色id", required = true) + private String roleId; + + @NotEmpty(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "菜单id不能为空") + @ApiModelProperty(value = "菜单id", required = true) + private List menuIds; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/RoleReq.java b/core/src/main/java/com/dite/znpt/domain/vo/RoleReq.java new file mode 100644 index 0000000..62267f9 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/RoleReq.java @@ -0,0 +1,45 @@ +package com.dite.znpt.domain.vo; + +import com.dite.znpt.util.ValidationGroup; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.io.Serial; +import java.io.Serializable; + +/** + * @author Bear.G + * @date 2025/5/21/周三 12:29 + * @description + */ +@Data +@ApiModel("角色信息请求实体") +public class RoleReq implements Serializable { + @Serial + private static final long serialVersionUID = -4581059117664119614L; + + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "角色名称不能为空") + @Size(max = 30, message = "角色名称不能超过30个字符") + @ApiModelProperty("角色名称") + private String roleName; + + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "角色编码不能为空") + @Size(max = 20, message = "角色编码不能超过20个字符") + @ApiModelProperty("角色编码") + private String roleCode; + + @NotBlank(groups = {ValidationGroup.Insert.class}, message = "角色权限字符不能为空") + @Size(groups = {ValidationGroup.Insert.class}, max = 20, message = "角色权限字符不能超过20个字符") + @ApiModelProperty("角色权限字符") + private String roleKey; + + @ApiModelProperty("状态") + private Integer status; + + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 200, message = "备注不能超过200个字符") + @ApiModelProperty("备注") + private String remark; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/RoleResp.java b/core/src/main/java/com/dite/znpt/domain/vo/RoleResp.java new file mode 100644 index 0000000..1bf3278 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/RoleResp.java @@ -0,0 +1,39 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author Bear.G + * @date 2025/5/21/周三 12:26 + * @description + */ +@Data +@ApiModel("角色信息响应实体") +public class RoleResp implements Serializable { + + @Serial + private static final long serialVersionUID = -144489103121775926L; + + @ApiModelProperty("角色id") + private String roleId; + + @ApiModelProperty("角色名称") + private String roleName; + + @ApiModelProperty("角色编码") + private String roleCode; + + @ApiModelProperty("角色权限字符") + private String roleKey; + + @ApiModelProperty("状态") + private String status; + + @ApiModelProperty("备注") + private String remark; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/TConstructionListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/TConstructionListReq.java new file mode 100644 index 0000000..6176d92 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/TConstructionListReq.java @@ -0,0 +1,59 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @author huise23 + * @date 2025/04/24 13:44 + * @Description: 施工信息请求实体 + */ +@Data +@ApiModel("施工信息列表请求实体") +public class TConstructionListReq implements Serializable { + + private static final long serialVersionUID = 790780491672151941L; + + @ApiModelProperty("查询关键字") + private String keyword; + + @ApiModelProperty("施工信息Id") + private String constructionId; + + @ApiModelProperty("项目id") + private String projectId; + + @ApiModelProperty("机组id") + private String turbineId; + + @ApiModelProperty("作业开始时间") + private LocalDateTime startTime; + + @ApiModelProperty("作业结束时间") + private LocalDateTime endTime; + + @ApiModelProperty("温度(℃)") + private BigDecimal temperature; + + @ApiModelProperty("风速(m/s)") + private BigDecimal windSpeed; + + @ApiModelProperty("采集图片数量") + private Integer imageCount; + + @ApiModelProperty("天气id") + private String weatherCode; + + @ApiModelProperty("施工状态") + private String statusId; + + @ApiModelProperty("当前时间") + private LocalDateTime createdAt; + +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/TConstructionReq.java b/core/src/main/java/com/dite/znpt/domain/vo/TConstructionReq.java new file mode 100644 index 0000000..89e196b --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/TConstructionReq.java @@ -0,0 +1,57 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; +/** + * @author huise23 + * @date 2025/07/03 16:25 + * @Description: 施工信息表请求类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="TConstruction请求对象", description="施工信息表") +public class TConstructionReq implements Serializable { + + @Serial + private static final long serialVersionUID = 583631934062856440L; + + @ApiModelProperty("施工id") + private String constructionId; + + @ApiModelProperty("项目id") + private String projectId; + + @ApiModelProperty("机组id") + private String turbineId; + + @ApiModelProperty("作业开始时间") + private LocalDateTime startTime; + + @ApiModelProperty("作业结束时间") + private LocalDateTime endTime; + + @ApiModelProperty("温度(℃)") + private Double temperature; + + @ApiModelProperty("风速(m/s)") + private Double windSpeed; + + @ApiModelProperty("采集图片数量") + private Integer imageCount; + + @ApiModelProperty("天气id") + private String weatherCode; + + @ApiModelProperty("施工状态") + private String statusId; + + @ApiModelProperty("当前时间") + private LocalDateTime createdAt; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/TConstructionResp.java b/core/src/main/java/com/dite/znpt/domain/vo/TConstructionResp.java new file mode 100644 index 0000000..c1b245a --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/TConstructionResp.java @@ -0,0 +1,20 @@ +package com.dite.znpt.domain.vo; + +import java.math.BigDecimal; +import java.util.Date; +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.dite.znpt.domain.entity.TConstructionEntity; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 施工信息响应实体 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel("施工信息响应实体") +public class TConstructionResp extends TConstructionEntity { +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/TurbineInfoResp.java b/core/src/main/java/com/dite/znpt/domain/vo/TurbineInfoResp.java new file mode 100644 index 0000000..4a4a668 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/TurbineInfoResp.java @@ -0,0 +1,25 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/5/7 22:17 + * @Description: + */ +@Data +@ApiModel("机组明细响应实体") +public class TurbineInfoResp extends TurbineResp implements Serializable { + + @Serial + private static final long serialVersionUID = 5493448541358665068L; + + @ApiModelProperty("部件信息") + private List partRespList; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/TurbineListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/TurbineListReq.java new file mode 100644 index 0000000..573c4e9 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/TurbineListReq.java @@ -0,0 +1,36 @@ +package com.dite.znpt.domain.vo; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 机组-项目关联请求实体 + */ +@Data +@ApiModel("机组列表请求实体") +public class TurbineListReq implements Serializable { + + private static final long serialVersionUID = 141552424945497346L; + + @ApiModelProperty(name = "projectId", required = true) + private String projectId; + + @ApiModelProperty("查询关键字") + private String keyword; + + @ApiModelProperty("机组描述") + private String turbineDesc; + + @ApiModelProperty("机组厂商") + private String turbineManufacturer; + + @ApiModelProperty("机组型号") + private String turbineModel; + +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/TurbineListResp.java b/core/src/main/java/com/dite/znpt/domain/vo/TurbineListResp.java new file mode 100644 index 0000000..8c5af4f --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/TurbineListResp.java @@ -0,0 +1,57 @@ +package com.dite.znpt.domain.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.dite.znpt.domain.entity.PartEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.dite.znpt.domain.entity.TurbineEntity; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 机组-项目关联响应实体 + */ +@Data +@ApiModel("机组列表响应实体") +public class TurbineListResp implements Serializable { + + @Serial + private static final long serialVersionUID = 8391079826638511248L; + + @ApiModelProperty("机组号") + private String turbineId; + + @ApiModelProperty("项目id") + private String projectId; + + @ApiModelProperty("项目名称") + private String projectName; + + @ApiModelProperty("机组名称") + private String turbineName; + + @ApiModelProperty("机组编码") + private String turbineCode; + + @ApiModelProperty("机组描述") + private String turbineDesc; + + @ApiModelProperty("机组厂商") + private String turbineManufacturer; + + @ApiModelProperty("机组型号") + private String turbineModel; + + @ApiModelProperty("封面图") + private String turbineCoverUrl; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/TurbineReq.java b/core/src/main/java/com/dite/znpt/domain/vo/TurbineReq.java new file mode 100644 index 0000000..dece98a --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/TurbineReq.java @@ -0,0 +1,56 @@ +package com.dite.znpt.domain.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.dite.znpt.util.ValidationGroup; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/5/7 21:44 + * @Description: + */ +@Data +@ApiModel("机组请求实体") +public class TurbineReq implements Serializable { + + @Serial + private static final long serialVersionUID = 115092978850852080L; + + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "项目id不能为空") + @ApiModelProperty("项目id") + private String projectId; + + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "机组名称不能为空") + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 50, message = "机组名称长度不能超过50字符") + @ApiModelProperty("机组名称") + private String turbineName; + + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "机组编码长度不能超过20字符") + @ApiModelProperty("机组编码") + private String turbineCode; + + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 200, message = "机组描述长度不能超过200字符") + @ApiModelProperty("机组描述") + private String turbineDesc; + + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "机组厂商长度不能超过20字符") + @ApiModelProperty("机组厂商") + private String turbineManufacturer; + + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "机组型号长度不能超过20字符") + @ApiModelProperty("机组型号") + private String turbineModel; + + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 200, message = "机组封面图长度不能超过200字符") + @ApiModelProperty("机组封面图") + private String turbineCoverUrl; + +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/TurbineResp.java b/core/src/main/java/com/dite/znpt/domain/vo/TurbineResp.java new file mode 100644 index 0000000..7e60769 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/TurbineResp.java @@ -0,0 +1,48 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/5/7 21:44 + * @Description: + */ +@Data +@ApiModel("机组响应实体") +public class TurbineResp implements Serializable { + @Serial + private static final long serialVersionUID = -1403719853347580858L; + + @ApiModelProperty("机组id") + private String turbineId; + + @ApiModelProperty("项目id") + private String projectId; + + @ApiModelProperty("项目名称") + private String projectName; + + @ApiModelProperty("机组名称") + private String turbineName; + + @ApiModelProperty("机组编码") + private String turbineCode; + + @ApiModelProperty("机组描述") + private String turbineDesc; + + @ApiModelProperty("机组厂商") + private String turbineManufacturer; + + @ApiModelProperty("机组型号") + private String turbineModel; + + @ApiModelProperty("封面图") + private String turbineCoverUrl; + +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/UserInfo.java b/core/src/main/java/com/dite/znpt/domain/vo/UserInfo.java new file mode 100644 index 0000000..8096927 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/UserInfo.java @@ -0,0 +1,34 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/23/周五 14:54 + * @description + */ +@Data +@ApiModel("用户信息") +public class UserInfo implements Serializable { + + @Serial + private static final long serialVersionUID = 1433874497843073028L; + + @ApiModelProperty("用户信息") + private UserListResp user; + + @ApiModelProperty("部门信息") + private DeptResp dept; + + @ApiModelProperty("岗位信息") + private List posts; + + @ApiModelProperty("角色信息") + private List roles; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/UserListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/UserListReq.java new file mode 100644 index 0000000..bf56563 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/UserListReq.java @@ -0,0 +1,42 @@ +package com.dite.znpt.domain.vo; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 用户信息请求实体 + */ +@Data +@ApiModel("用户信息列表请求实体") +public class UserListReq implements Serializable { + + private static final long serialVersionUID = -10363935468256543L; + + @ApiModelProperty("员工编码") + private String userCode; + + @ApiModelProperty("账号") + private String account; + + @ApiModelProperty("姓名") + private String name; + + @ApiModelProperty("所属部门id") + private String deptId; + + @ApiModelProperty("手机号码") + private String mobile; + + @ApiModelProperty("在职状态,枚举UserStatusEnum") + private String userStatus; + + @ApiModelProperty("员工性质,枚举UserTypeEnum") + private String userType; + +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/UserListResp.java b/core/src/main/java/com/dite/znpt/domain/vo/UserListResp.java new file mode 100644 index 0000000..14383a4 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/UserListResp.java @@ -0,0 +1,69 @@ +package com.dite.znpt.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 用户信息请求实体 + */ +@Data +@ApiModel("用户信息列表响应实体") +public class UserListResp implements Serializable { + + @Serial + private static final long serialVersionUID = -3462421684738077713L; + + @ApiModelProperty("用户id") + private String userId; + + @ApiModelProperty("账号") + private String account; + + @ApiModelProperty("0正常1禁用") + private Integer status; + + @ApiModelProperty("姓名") + private String name; + + @ApiModelProperty("员工编码") + private String userCode; + + @ApiModelProperty("员工性质") + private String userType; + + @ApiModelProperty("员工性质描述") + private String userTypeLabel; + + @ApiModelProperty("在职状态") + private String userStatus; + + @ApiModelProperty("在职状态描述") + private String userStatusLabel; + + @ApiModelProperty("所属部门名称") + private String deptName; + + @ApiModelProperty("角色名称") + private String roleName; + + @ApiModelProperty("岗位名称") + private String postName; + + @ApiModelProperty("手机号码") + private String mobile; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/UserReq.java b/core/src/main/java/com/dite/znpt/domain/vo/UserReq.java new file mode 100644 index 0000000..aec17e3 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/UserReq.java @@ -0,0 +1,96 @@ +package com.dite.znpt.domain.vo; + +import com.dite.znpt.util.ValidationGroup; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.*; +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/5/15 23:14 + * @Description: + */ +@Data +@ApiModel("用户信息请求实体") +public class UserReq implements Serializable { + + @Serial + private static final long serialVersionUID = -5491849652107338027L; + + @NotBlank(message = "账号不能为空") + @Pattern(groups = {ValidationGroup.Insert.class},regexp = "^[a-zA-Z0-9_]{4,20}$", message = "只能包含字母、数字或下划线,长度4-20") + @ApiModelProperty("账号") + private String account; + + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 200, message = "头像地址长度不能超过200字符") + @ApiModelProperty("头像地址") + private String avatar; + + @ApiModelProperty("0正常1禁用") + private Integer status; + + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "姓名长度不能超过20字符") + @ApiModelProperty("姓名") + private String name; + + @NotBlank(message = "员工性质不能为空") + @ApiModelProperty("员工性质") + private String userType; + + @NotBlank(message = "在职状态不能为空") + @ApiModelProperty("在职状态") + private String userStatus; + + @ApiModelProperty("所属部门") + private String deptId; + + @ApiModelProperty("岗位") + private List postIds; + + @ApiModelProperty("角色") + private List roleIds; + + @Pattern(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, regexp = "^$|\\d(?:\\d{15}|\\d{17})$", message = "身份证号码格式不正确") + @ApiModelProperty("身份证") + private String identityCard; + + @ApiModelProperty("性别") + private String gender; + + @Pattern(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, regexp ="^$|1\\d{10}$", message = "手机号码格式不正确") + @ApiModelProperty("手机号码") + private String mobile; + + @Email(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}) + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 50, message = "邮箱长度不能超过50字符") + @ApiModelProperty("邮箱") + private String email; + + @Past(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "入职日期必须是过去的日期") + @JsonFormat(pattern = "yyyy-MM-dd") + @ApiModelProperty("入职日期") + private LocalDate hiredate; + + @Past(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "出生日期必须是过去的日期") + @JsonFormat(pattern = "yyyy-MM-dd") + @ApiModelProperty("出生日期") + private LocalDate birthdate; + + @ApiModelProperty("学历") + private String education; + + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "专业长度不能超过20字符") + @ApiModelProperty("专业") + private String majorField; + + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "工作方向长度不能超过20字符") + @ApiModelProperty("工作方向") + private String workField; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/UserResp.java b/core/src/main/java/com/dite/znpt/domain/vo/UserResp.java new file mode 100644 index 0000000..db10ead --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/UserResp.java @@ -0,0 +1,46 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 用户信息响应实体 + */ +@Data +@ApiModel("用户信息响应实体") +public class UserResp extends UserReq implements Serializable{ + + @Serial + private static final long serialVersionUID = -2831232930040845716L; + + @ApiModelProperty("用户名") + private String userId; + + @ApiModelProperty("所属部门") + private String deptName; + + @ApiModelProperty("岗位,多个岗位英文逗号隔开") + private String postName; + + @ApiModelProperty("角色,多个角色英文逗号隔开") + private String roleName; + + @ApiModelProperty("学历描述") + private String educationLabel; + + @ApiModelProperty("员工性质描述") + private String userTypeLabel; + + @ApiModelProperty("在职状态描述") + private String userStatusLabel; + + + +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/UserRoleReq.java b/core/src/main/java/com/dite/znpt/domain/vo/UserRoleReq.java new file mode 100644 index 0000000..16fc3c0 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/UserRoleReq.java @@ -0,0 +1,34 @@ +package com.dite.znpt.domain.vo; + +import com.dite.znpt.util.ValidationGroup; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/21/周三 17:41 + * @description + */ +@Data +@Accessors(chain = true) +@ApiModel("用户角色绑定请求实体") +public class UserRoleReq implements Serializable { + @Serial + private static final long serialVersionUID = -1334908025320245685L; + + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "用户id不能为空") + @ApiModelProperty("用户id") + private String userId; + + @NotEmpty(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "角色id不能为空") + @ApiModelProperty("角色id") + private List roleIds; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/VideoFileInfoListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/VideoFileInfoListReq.java new file mode 100644 index 0000000..931741c --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/VideoFileInfoListReq.java @@ -0,0 +1,49 @@ +package com.dite.znpt.domain.vo; + +import java.time.LocalDateTime; +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author huise23 + * @date 2025/06/09 09:44 + * @Description: 视频文件信息请求实体 + */ +@Data +@ApiModel("视频文件信息列表请求实体") +public class VideoFileInfoListReq implements Serializable { + + private static final long serialVersionUID = 499752243735301115L; + + @ApiModelProperty("查询关键字") + private String keyword; + + @ApiModelProperty("视频文件信息Id") + private String id; + + @ApiModelProperty("机组id") + private String partId; + + @ApiModelProperty("测试点") + private String testPoint; + + @ApiModelProperty("作业人员id") + private String workerUserId; + + @ApiModelProperty("拍摄时间") + private LocalDateTime shootingTime; + + @ApiModelProperty("拍摄地点") + private String location; + + @ApiModelProperty("是否合格,默认合格1") + private Integer qualified; + + @ApiModelProperty("是否已抓帧,默认未抓帧0") + private Integer frameCapture; + +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/VideoFileInfoReq.java b/core/src/main/java/com/dite/znpt/domain/vo/VideoFileInfoReq.java new file mode 100644 index 0000000..a04b3b9 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/VideoFileInfoReq.java @@ -0,0 +1,43 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotBlank; +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author cuizhibin + * @date 2025/06/23 11:04 + * @description 视频文件信息要求 + */ +@Data +@ApiModel("视频文件请求实体") +public class VideoFileInfoReq implements Serializable { + @Serial + private static final long serialVersionUID = 1737569842748352413L; + + @NotBlank(message = "部件id不能为空") + @ApiModelProperty(value = "部件id",required = true) + private String partId; + + @ApiModelProperty("测试点") + private String testPoint; + + @ApiModelProperty("作业人员id") + private String workerUserId; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty("拍摄时间") + private LocalDateTime shootingTime; + + @ApiModelProperty("拍摄地点") + private String location; + + @ApiModelProperty("是否合格,默认合格1") + private Integer qualified; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/VideoFileInfoResp.java b/core/src/main/java/com/dite/znpt/domain/vo/VideoFileInfoResp.java new file mode 100644 index 0000000..76b7a80 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/VideoFileInfoResp.java @@ -0,0 +1,19 @@ +package com.dite.znpt.domain.vo; + +import java.time.LocalDateTime; +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.dite.znpt.domain.entity.VideoFileInfoEntity; + +/** + * @author huise23 + * @date 2025/06/09 09:45 + * @Description: 视频文件信息响应实体 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel("视频文件信息响应实体") +public class VideoFileInfoResp extends VideoFileInfoEntity { +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/WeatherTypeListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/WeatherTypeListReq.java new file mode 100644 index 0000000..1b52f12 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/WeatherTypeListReq.java @@ -0,0 +1,34 @@ +package com.dite.znpt.domain.vo; + +import java.math.BigDecimal; +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 天气类型请求实体 + */ +@Data +@ApiModel("天气类型列表请求实体") +public class WeatherTypeListReq implements Serializable { + + private static final long serialVersionUID = 902447691868906681L; + + @ApiModelProperty("查询关键字") + private String keyword; + + @ApiModelProperty("天气类型Id") + private String weatherCode; + + @ApiModelProperty("天气类型中文描述") + private String chineseName; + + @ApiModelProperty("对施工进度的影响系数") + private BigDecimal impactFactor; + +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/WeatherTypeResp.java b/core/src/main/java/com/dite/znpt/domain/vo/WeatherTypeResp.java new file mode 100644 index 0000000..d17c5bc --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/WeatherTypeResp.java @@ -0,0 +1,19 @@ +package com.dite.znpt.domain.vo; + +import java.math.BigDecimal; +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.dite.znpt.domain.entity.WeatherTypeEntity; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 天气类型响应实体 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel("天气类型响应实体") +public class WeatherTypeResp extends WeatherTypeEntity { +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/WorkShiftListResp.java b/core/src/main/java/com/dite/znpt/domain/vo/WorkShiftListResp.java new file mode 100644 index 0000000..9f61afd --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/WorkShiftListResp.java @@ -0,0 +1,54 @@ +package com.dite.znpt.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.time.LocalTime; + +/** + * @author Bear.G + * @date 2025/6/30/周一 10:39 + * @description + */ +@Data +@ApiModel("班次信息列表响应实体") +public class WorkShiftListResp implements Serializable { + @Serial + private static final long serialVersionUID = 530703326351692657L; + + @ApiModelProperty("班次id") + private String workShiftId; + + @ApiModelProperty("班次名称") + private String workShiftName; + + @JsonFormat(pattern = "HH:mm") + @ApiModelProperty("上班时间") + private LocalTime workTimeStart; + + @JsonFormat(pattern = "HH:mm") + @ApiModelProperty("下班时间") + private LocalTime workTimeEnd; + + @ApiModelProperty("状态") + private String status; + + @ApiModelProperty("状态描述") + private String statusLabel; + + @ApiModelProperty("创建人id") + private String createBy; + + @ApiModelProperty("创建人名称") + private String createUserName; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty("修改时间") + private LocalDateTime updateTime; + +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/WorkShiftReq.java b/core/src/main/java/com/dite/znpt/domain/vo/WorkShiftReq.java new file mode 100644 index 0000000..763c453 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/WorkShiftReq.java @@ -0,0 +1,59 @@ +package com.dite.znpt.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalTime; + +/** + * @author Bear.G + * @date 2025/6/30/周一 10:39 + * @description + */ +@Data +@ApiModel("班次信息请求实体") +public class WorkShiftReq implements Serializable { + + @Serial + private static final long serialVersionUID = 3008068678585003135L; + + @NotBlank(message = "班次名称不能为空") + @ApiModelProperty("班次名称") + private String workShiftName; + + @NotNull(message = "上班时间不能为空") + @JsonFormat(pattern = "HH:mm") + @ApiModelProperty("上班时间") + private LocalTime workTimeStart; + + @ApiModelProperty("迟到豁免时间,单位分钟") + private Integer lateTimeOffset; + + @ApiModelProperty("迟到时间临界值,单位分钟") + private Integer lateTimeLimit; + + @NotNull(message = "下班时间不能为空") + @JsonFormat(pattern = "HH:mm") + @ApiModelProperty("下班时间") + private LocalTime workTimeEnd; + + @ApiModelProperty("早退豁免时间,单位分钟") + private Integer earlyTimeOffset; + + @ApiModelProperty("早退时间临界值,单位分钟") + private Integer earlyTimeLimit; + + @JsonFormat(pattern = "HH:mm") + @ApiModelProperty("休息时间开始") + private LocalTime restTimeStart; + + @JsonFormat(pattern = "HH:mm") + @ApiModelProperty("休息时间结束") + private LocalTime restTimeEnd; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/WorkShiftResp.java b/core/src/main/java/com/dite/znpt/domain/vo/WorkShiftResp.java new file mode 100644 index 0000000..b50f2c5 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/WorkShiftResp.java @@ -0,0 +1,67 @@ +package com.dite.znpt.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalTime; + +/** + * @author Bear.G + * @date 2025/6/30/周一 10:39 + * @description + */ +@Data +@ApiModel("班次信息响应实体") +public class WorkShiftResp implements Serializable { + @Serial + private static final long serialVersionUID = 7000086760170568103L; + + @ApiModelProperty("班次id") + private String workShiftId; + + @ApiModelProperty("班次名称") + private String workShiftName; + + @JsonFormat(pattern = "HH:mm") + @ApiModelProperty("上班时间") + private LocalTime workTimeStart; + + @ApiModelProperty("迟到豁免时间,单位分钟") + private Integer lateTimeOffset; + + @ApiModelProperty("迟到时间临界值,单位分钟") + private Integer lateTimeLimit; + + @JsonFormat(pattern = "HH:mm") + @ApiModelProperty("下班时间") + private LocalTime workTimeEnd; + + @ApiModelProperty("早退豁免时间,单位分钟") + private Integer earlyTimeOffset; + + @ApiModelProperty("早退时间临界值,单位分钟") + private Integer earlyTimeLimit; + + @JsonFormat(pattern = "HH:mm") + @ApiModelProperty("休息时间开始") + private LocalTime restTimeStart; + + @JsonFormat(pattern = "HH:mm") + @ApiModelProperty("休息时间结束") + private LocalTime restTimeEnd; + + @ApiModelProperty("工作时间长") + private Integer workTime; + + @ApiModelProperty("状态,0-已发布,1-未发布") + private String status; + + @ApiModelProperty("状态,0-已发布,1-未发布") + private String statusLabel; + + +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/WorkbenchInfoResp.java b/core/src/main/java/com/dite/znpt/domain/vo/WorkbenchInfoResp.java new file mode 100644 index 0000000..197e778 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/WorkbenchInfoResp.java @@ -0,0 +1,28 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 工作台信息响应实体 + */ +@Data +@ApiModel("工作台信息响应实体") +public class WorkbenchInfoResp { + + @ApiModelProperty("项目数量") + private long projectCount; + + @ApiModelProperty("进行中任务") + private long progressTaskCount; + + @ApiModelProperty("待审核报告数") + private long approvalReportCount; + + @ApiModelProperty("发现缺陷数") + private long findDefectCount; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/job/req/JobAllContentReq.java b/core/src/main/java/com/dite/znpt/domain/vo/job/req/JobAllContentReq.java new file mode 100644 index 0000000..a508c21 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/job/req/JobAllContentReq.java @@ -0,0 +1,23 @@ +package com.dite.znpt.domain.vo.job.req; + +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author cuizhibin + * @date 2023/10/30 20:38 + * @description jobq + */ +@Data +public class JobAllContentReq extends AuditableEntity implements Serializable { + + @ApiModelProperty(value = "机组id", example = "78979879375", notes = "机组id") + private String crewId; + + @ApiModelProperty(value = "工作类型", example = "工作类型", notes = "工作类型") + private String workType; + +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/job/req/JobAntiThunderWorkReq.java b/core/src/main/java/com/dite/znpt/domain/vo/job/req/JobAntiThunderWorkReq.java new file mode 100644 index 0000000..b91153b --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/job/req/JobAntiThunderWorkReq.java @@ -0,0 +1,13 @@ +package com.dite.znpt.domain.vo.job.req; + +import com.dite.znpt.domain.entity.job.JobAntiThunderWork; +import lombok.Data; + +/** + * @author cuizhibin + * @date 2023/10/30 20:38 + * @description jobq + */ +@Data +public class JobAntiThunderWorkReq extends JobAntiThunderWork { +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/job/req/JobInWorkPartsReq.java b/core/src/main/java/com/dite/znpt/domain/vo/job/req/JobInWorkPartsReq.java new file mode 100644 index 0000000..821f600 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/job/req/JobInWorkPartsReq.java @@ -0,0 +1,13 @@ +package com.dite.znpt.domain.vo.job.req; + +import com.dite.znpt.domain.entity.job.JobInWorkParts; +import lombok.Data; + +/** + * @author wujinsong + * @date 2023/2/17 09:47 + * @description: 部件 + */ +@Data +public class JobInWorkPartsReq extends JobInWorkParts { +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/job/req/JobInWorkReq.java b/core/src/main/java/com/dite/znpt/domain/vo/job/req/JobInWorkReq.java new file mode 100644 index 0000000..d18a3f6 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/job/req/JobInWorkReq.java @@ -0,0 +1,13 @@ +package com.dite.znpt.domain.vo.job.req; + +import com.dite.znpt.domain.entity.job.JobInWork; +import lombok.Data; + +/** + * @author cuizhibin + * @date 2023/10/30 20:38 + * @description jobq + */ +@Data +public class JobInWorkReq extends JobInWork { +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/job/req/JobInfoReq.java b/core/src/main/java/com/dite/znpt/domain/vo/job/req/JobInfoReq.java new file mode 100644 index 0000000..e4e6e47 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/job/req/JobInfoReq.java @@ -0,0 +1,26 @@ +package com.dite.znpt.domain.vo.job.req; + +import com.dite.znpt.domain.entity.job.JobInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * @author cuizhibin + * @date 2023/10/30 20:38 + * @description jobq + */ +@Data +public class JobInfoReq extends JobInfo { + + @ApiModelProperty(value = "提交开始时间", example = "1653764367643", notes = "提交开始时间") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date submitTimeStart; + + @ApiModelProperty(value = "提交结束时间", example = "1653764327643", notes = "提交结束时间") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date submitTimeEnd; + +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/job/req/JobOutWorkReq.java b/core/src/main/java/com/dite/znpt/domain/vo/job/req/JobOutWorkReq.java new file mode 100644 index 0000000..6414138 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/job/req/JobOutWorkReq.java @@ -0,0 +1,13 @@ +package com.dite.znpt.domain.vo.job.req; + +import com.dite.znpt.domain.entity.job.JobOutWork; +import lombok.Data; + +/** + * @author cuizhibin + * @date 2023/10/30 20:38 + * @description jobq + */ +@Data +public class JobOutWorkReq extends JobOutWork { +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/job/req/JobSummaryWorkReq.java b/core/src/main/java/com/dite/znpt/domain/vo/job/req/JobSummaryWorkReq.java new file mode 100644 index 0000000..fe63da3 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/job/req/JobSummaryWorkReq.java @@ -0,0 +1,13 @@ +package com.dite.znpt.domain.vo.job.req; + +import com.dite.znpt.domain.entity.job.JobSummaryWork; +import lombok.Data; + +/** + * @author cuizhibin + * @date 2023/10/30 20:38 + * @description jobq + */ +@Data +public class JobSummaryWorkReq extends JobSummaryWork { +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/job/resp/JobAllContentResp.java b/core/src/main/java/com/dite/znpt/domain/vo/job/resp/JobAllContentResp.java new file mode 100644 index 0000000..c24b737 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/job/resp/JobAllContentResp.java @@ -0,0 +1,35 @@ +package com.dite.znpt.domain.vo.job.resp; + +import com.dite.znpt.domain.entity.job.JobAntiThunderWork; +import com.dite.znpt.domain.entity.job.JobInWork; +import com.dite.znpt.domain.entity.job.JobOutWork; +import com.dite.znpt.domain.entity.job.JobSummaryWork; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author Julio + * @date 2023/2/1 14:36 + * @description 地址 + */ +@Data +public class JobAllContentResp implements Serializable { + + @ApiModelProperty(value = "防雷工作-登高", example = "{}", notes = "防雷工作-登高") + private JobAntiThunderWork work__ascend_height; + @ApiModelProperty(value = "防雷工作-抄表", example = "{}", notes = "防雷工作-抄表") + private JobAntiThunderWork work__meter_reading; + @ApiModelProperty(value = "防雷工作-无人化装备操作", example = "{}", notes = "防雷工作-无人化装备操作") + private JobAntiThunderWork work__unman_operation; + + @ApiModelProperty(value = "内部工作", example = "{}", notes = "内部工作") + private JobInWork jobInWork; + + @ApiModelProperty(value = "外部工作", example = "{}", notes = "外部工作") + private JobOutWork jobOutWork; + + @ApiModelProperty(value = "汇总报告工作", example = "{}", notes = "汇总报告工作") + private JobSummaryWork jobSummaryWork; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/job/resp/JobAntiThunderWorkResp.java b/core/src/main/java/com/dite/znpt/domain/vo/job/resp/JobAntiThunderWorkResp.java new file mode 100644 index 0000000..01f4cef --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/job/resp/JobAntiThunderWorkResp.java @@ -0,0 +1,17 @@ +package com.dite.znpt.domain.vo.job.resp; + +import com.dite.znpt.domain.entity.job.JobAntiThunderWork; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + * @author Julio + * @date 2023/2/1 14:36 + * @description 地址 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class JobAntiThunderWorkResp extends JobAntiThunderWork implements Serializable { +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/job/resp/JobInWorkPartsResp.java b/core/src/main/java/com/dite/znpt/domain/vo/job/resp/JobInWorkPartsResp.java new file mode 100644 index 0000000..e5f48b0 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/job/resp/JobInWorkPartsResp.java @@ -0,0 +1,14 @@ +package com.dite.znpt.domain.vo.job.resp; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author wujinsong + * @date 2023/2/17 09:47 + * @description: 部件 + */ +@Data +public class JobInWorkPartsResp implements Serializable { +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/job/resp/JobInWorkResp.java b/core/src/main/java/com/dite/znpt/domain/vo/job/resp/JobInWorkResp.java new file mode 100644 index 0000000..e4836fe --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/job/resp/JobInWorkResp.java @@ -0,0 +1,17 @@ +package com.dite.znpt.domain.vo.job.resp; + +import com.dite.znpt.domain.entity.job.JobInWork; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + * @author Julio + * @date 2023/2/1 14:36 + * @description 地址 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class JobInWorkResp extends JobInWork implements Serializable { +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/job/resp/JobInfoResp.java b/core/src/main/java/com/dite/znpt/domain/vo/job/resp/JobInfoResp.java new file mode 100644 index 0000000..9a2dbb3 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/job/resp/JobInfoResp.java @@ -0,0 +1,17 @@ +package com.dite.znpt.domain.vo.job.resp; + +import com.dite.znpt.domain.entity.job.JobInfo; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + * @author Julio + * @date 2023/2/1 14:36 + * @description 地址 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class JobInfoResp extends JobInfo implements Serializable { +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/job/resp/JobOutWorkResp.java b/core/src/main/java/com/dite/znpt/domain/vo/job/resp/JobOutWorkResp.java new file mode 100644 index 0000000..48b6f44 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/job/resp/JobOutWorkResp.java @@ -0,0 +1,17 @@ +package com.dite.znpt.domain.vo.job.resp; + +import com.dite.znpt.domain.entity.job.JobOutWork; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + * @author Julio + * @date 2023/2/1 14:36 + * @description 地址 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class JobOutWorkResp extends JobOutWork implements Serializable { +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/job/resp/JobSummaryWorkResp.java b/core/src/main/java/com/dite/znpt/domain/vo/job/resp/JobSummaryWorkResp.java new file mode 100644 index 0000000..964dbe3 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/job/resp/JobSummaryWorkResp.java @@ -0,0 +1,17 @@ +package com.dite.znpt.domain.vo.job.resp; + +import com.dite.znpt.domain.entity.job.JobSummaryWork; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + * @author Julio + * @date 2023/2/1 14:36 + * @description 地址 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class JobSummaryWorkResp extends JobSummaryWork implements Serializable { +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/job/resp/TurbineStatusResp.java b/core/src/main/java/com/dite/znpt/domain/vo/job/resp/TurbineStatusResp.java new file mode 100644 index 0000000..0738403 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/job/resp/TurbineStatusResp.java @@ -0,0 +1,49 @@ +package com.dite.znpt.domain.vo.job.resp; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@ApiModel("机组下各工作类型状态处理类") +public class TurbineStatusResp { + + private String id; + + @ApiModelProperty(value = "内部工作状态, -1不存在,0未开始、1开始施工、2已提交报告、3审核通过", example = "{}", notes = "内部工作状态, -1不存在,0未开始、1开始施工、2已提交报告、3审核通过") + private String antiThunderWorkStatus; + + @ApiModelProperty(value = "外部工作状态, -1不存在,0未开始、1开始施工、2已提交报告、3审核通过", example = "{}", notes = "外部工作状态, -1不存在,0未开始、1开始施工、2已提交报告、3审核通过") + private String inWorkStatus; + + @ApiModelProperty(value = "防雷工作状态, -1不存在,0未开始、1开始施工、2已提交报告、3审核通过", example = "{}", notes = "防雷工作状态, -1不存在,0未开始、1开始施工、2已提交报告、3审核通过") + private String outWorkStatus; + + @ApiModelProperty(value = "数据报告工作状态, -1不存在,0未开始、1开始施工、2已提交报告、3审核通过", example = "{}", notes = "数据报告工作状态, -1不存在,0未开始、1开始施工、2已提交报告、3审核通过") + private String summaryWorkStatus; + + @ApiModelProperty(value = "内部工作安全员审核状态, -1不存在,0未审核、1审核通过", example = "{}", notes = "内部工作安全员审核状态, -1不存在,0未审核、1审核通过") + private String antiThunderWorkSafetyStatus; + + @ApiModelProperty(value = "外部工作安全员审核状态, -1不存在,0未审核、1审核通过", example = "{}", notes = "外部工作安全员审核状态, -1不存在,0未审核、1审核通过") + private String inWorkSafetyStatus; + + @ApiModelProperty(value = "防雷工作安全员审核状态, -1不存在,0未审核、1审核通过", example = "{}", notes = "防雷工作安全员审核状态, -1不存在,0未审核、1审核通过") + private String outWorkSafetyStatus; + + @ApiModelProperty(value = "内部工作质量员审核状态, -1不存在,0未审核、1审核通过", example = "{}", notes = "内部工作质量员审核状态, -1不存在,0未审核、1审核通过") + private String antiThunderWorkQualityStatus; + + @ApiModelProperty(value = "外部工作质量员审核状态, -1不存在,0未审核、1审核通过", example = "{}", notes = "外部工作质量员审核状态, -1不存在,0未审核、1审核通过") + private String inWorkQualityStatus; + + @ApiModelProperty(value = "防雷工作质量员审核状态, -1不存在,0未审核、1审核通过", example = "{}", notes = "防雷工作质量员审核状态, -1不存在,0未审核、1审核通过") + private String outWorkQualityStatus; + + @ApiModelProperty(value = "防雷是否不合格,1不合格,0合格", example = "{}", notes = "防雷是否不合格,1不合格,0合格") + private Boolean lightningUnqualifiedAll; +} diff --git a/core/src/main/java/com/dite/znpt/enums/AttachBusinessTypeEnum.java b/core/src/main/java/com/dite/znpt/enums/AttachBusinessTypeEnum.java new file mode 100644 index 0000000..4e008b3 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/AttachBusinessTypeEnum.java @@ -0,0 +1,54 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/4/24 21:25 + * @Description: + */ +@Getter +public enum AttachBusinessTypeEnum { + PROJECT_TASK("PROJECT_TASK", "项目任务"), + INSURANCE_FILE("insurance", "保险文件"), + MODEL_FILE("model", "模型文件"), + DEFECT_MARK_PIC("defect_mark_pic", "缺陷标注图片"), + REPORT("report", "报告"), + PROJECT_BUDGE("project_budge", "预算文件"), + ; + private final String code; + private final String desc; + + AttachBusinessTypeEnum(String code, String desc){ + this.code = code; + this.desc = desc; + } + + public static AttachBusinessTypeEnum getByCode(String code){ + for (AttachBusinessTypeEnum e : AttachBusinessTypeEnum.values() ) { + if(e.code.equals(code)){ + return e; + } + } + return null; + } + + public static String getDescByCode(String code){ + AttachBusinessTypeEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List listAll(){ + List list = new ArrayList<>(AttachBusinessTypeEnum.values().length); + for (AttachBusinessTypeEnum e : AttachBusinessTypeEnum.values() ) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set(e.code, e.desc); + list.add(jsonObject); + } + return list; + } +} diff --git a/core/src/main/java/com/dite/znpt/enums/BudgeTypeEnum.java b/core/src/main/java/com/dite/znpt/enums/BudgeTypeEnum.java new file mode 100644 index 0000000..123f023 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/BudgeTypeEnum.java @@ -0,0 +1,52 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/5/7 21:22 + * @Description: + */ +@Getter +public enum BudgeTypeEnum { + PROCUREMENT("procurement", "采购"), + ARTIFICIAL("artificial", "人工"), + MANAGEMENT_FEE("managementFee", "管理费"), + ; + + private final String code; + private final String desc; + + BudgeTypeEnum(String code, String desc){ + this.code = code; + this.desc = desc; + } + + public static BudgeTypeEnum getByCode(String code){ + for (BudgeTypeEnum e : BudgeTypeEnum.values() ) { + if(e.code.equals(code)){ + return e; + } + } + return null; + } + + public static String getDescByCode(String code){ + BudgeTypeEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List listAll(){ + List list = new ArrayList<>(BudgeTypeEnum.values().length); + for (BudgeTypeEnum e : BudgeTypeEnum.values() ) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set(e.code, e.desc); + list.add(jsonObject); + } + return list; + } +} diff --git a/core/src/main/java/com/dite/znpt/enums/CertificationEnum.java b/core/src/main/java/com/dite/znpt/enums/CertificationEnum.java new file mode 100644 index 0000000..d08bd2a --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/CertificationEnum.java @@ -0,0 +1,56 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/27/周二 15:33 + * @description + */ +@Getter +public enum CertificationEnum { + + HEIGHT_OPERATION("height-operation", "高处作业"), + LOW_VOLTAGE_OPERATION("low-voltage-operation", "低压电工"), + HIGH_VOLTAGE_OPERATION("high-voltage-operation", "高压电工"), + MARITIME_TRAFFIC_SAFETY("maritime-traffic-safety", "海上交通安全"), + DRIVING_LICENSE("driving-license", "驾驶证"), + LIGHTNING_PROTECTION_DETECTION("lightning-protection-detection", "防雷检测"), + DRONE_DRIVING("drone-driving", "无人机驾驶"); + + private final String code; + private final String desc; + + CertificationEnum(String code, String desc){ + this.code = code; + this.desc = desc; + } + + public static CertificationEnum getByCode(String code){ + for (CertificationEnum e : CertificationEnum.values() ) { + if(e.code.equals(code)){ + return e; + } + } + return null; + } + + public static String getDescByCode(String code){ + CertificationEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List listAll(){ + List list = new ArrayList<>(CertificationEnum.values().length); + for (CertificationEnum e : CertificationEnum.values() ) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set(e.code, e.desc); + list.add(jsonObject); + } + return list; + } +} diff --git a/core/src/main/java/com/dite/znpt/enums/CheckMethodEnum.java b/core/src/main/java/com/dite/znpt/enums/CheckMethodEnum.java new file mode 100644 index 0000000..400332a --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/CheckMethodEnum.java @@ -0,0 +1,52 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/7/9 23:23 + * @Description: + */ +@Getter +public enum CheckMethodEnum { + BLADE_OUTSIDE("blade-outside","叶片外观检查"), + BLADE_INSIDE("blade-inside","叶片内腔检查"), + BLADE_LIGHTNING_PROTECTION("blade-lightning-protection","叶片叶尖防雷导通检测"), + TURBINE_LIGHTNING_PROTECTION("turbine-lightning-protection","风电机组防雷检测"), + ; + private final String code; + private final String desc; + + CheckMethodEnum(String code, String desc){ + this.code = code; + this.desc = desc; + } + + public static CheckMethodEnum getByCode(String code){ + for (CheckMethodEnum e : CheckMethodEnum.values() ) { + if(e.code.equals(code)){ + return e; + } + } + return null; + } + + public static String getDescByCode(String code){ + CheckMethodEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List listAll(){ + List list = new ArrayList<>(CheckMethodEnum.values().length); + for (CheckMethodEnum e : CheckMethodEnum.values() ) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set(e.code, e.desc); + list.add(jsonObject); + } + return list; + } +} diff --git a/core/src/main/java/com/dite/znpt/enums/DefectLevelEnum.java b/core/src/main/java/com/dite/znpt/enums/DefectLevelEnum.java new file mode 100644 index 0000000..713e90f --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/DefectLevelEnum.java @@ -0,0 +1,52 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/4/24 21:44 + * @Description: + */ +@Getter +public enum DefectLevelEnum { + SLIGHT("SLIGHT", "轻微缺陷"), + GENERAL("GENERAL", "一般缺陷"), + SERIOUS("SERIOUS", "比较严重"), + CRITICAL("CRITICAL", "非常严重"); + + private final String code; + private final String desc; + + DefectLevelEnum(String code, String desc){ + this.code = code; + this.desc = desc; + } + + public static DefectLevelEnum getByCode(String code){ + for (DefectLevelEnum e : DefectLevelEnum.values() ) { + if(e.code.equals(code)){ + return e; + } + } + return null; + } + + public static String getDescByCode(String code){ + DefectLevelEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List listAll(){ + List list = new ArrayList<>(DefectLevelEnum.values().length); + for (DefectLevelEnum e : DefectLevelEnum.values() ) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set(e.code, e.desc); + list.add(jsonObject); + } + return list; + } +} diff --git a/core/src/main/java/com/dite/znpt/enums/DefectSourceEnum.java b/core/src/main/java/com/dite/znpt/enums/DefectSourceEnum.java new file mode 100644 index 0000000..92d59b6 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/DefectSourceEnum.java @@ -0,0 +1,51 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/4/27 20:55 + * @Description: + */ +@Getter +public enum DefectSourceEnum { + AI("AI", "智能识别"), + MANUAL("MANUAL", "人工标注"), + OUT_WORK("MANUAL", "外部工作"); + + private final String code; + private final String desc; + + DefectSourceEnum(String code, String desc){ + this.code = code; + this.desc = desc; + } + + public static DefectSourceEnum getByCode(String code){ + for (DefectSourceEnum e : DefectSourceEnum.values() ) { + if(e.code.equals(code)){ + return e; + } + } + return null; + } + + public static String getDescByCode(String code){ + DefectSourceEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List listAll(){ + List list = new ArrayList<>(DefectSourceEnum.values().length); + for (DefectSourceEnum e : DefectSourceEnum.values() ) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set(e.code, e.desc); + list.add(jsonObject); + } + return list; + } +} diff --git a/core/src/main/java/com/dite/znpt/enums/DefectTypeEnum.java b/core/src/main/java/com/dite/znpt/enums/DefectTypeEnum.java new file mode 100644 index 0000000..4ea3f4d --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/DefectTypeEnum.java @@ -0,0 +1,60 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/4/24 21:43 + * @Description: + */ +@Getter +public enum DefectTypeEnum { + BMLW("bmlw", "表面裂纹"), + ABRASION("ABRASION", "合缝磨损"), + LEATHER_BREAKAGE("LEATHER_BREAKAGE", "蒙皮破损"), + FABRIC_BREAKAGE("FABRIC_BREAKAGE", "布层破损"), + PART_BREAKAGE(" PART_BREAKAGE", "局部破损"), + TOTAL_DAMAGE("TOTAL_DAMAGE", "累计损伤"), + LAYER_SHED("LAYER_SHED", "涂层脱落"), + PAINT_SHEDDING("PAINT_SHEDDING", "风损掉漆"), + SURFACE_CRACK("SURFACE_CRACK", "表面裂纹"), + CHORDWISE_CRACK("CHORDWISE_CRACK", "弦向裂纹"), + AXIAL_CRACK("AXIAL_CRACK", "轴向裂纹"), + WRINKLE("WRINKLE", "褶皱"); + + private final String code; + private final String desc; + + DefectTypeEnum(String code, String desc){ + this.code = code; + this.desc = desc; + } + + public static DefectTypeEnum getByCode(String code){ + for (DefectTypeEnum e : DefectTypeEnum.values() ) { + if(e.code.equals(code)){ + return e; + } + } + return null; + } + + public static String getDescByCode(String code){ + DefectTypeEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List listAll(){ + List list = new ArrayList<>(DefectTypeEnum.values().length); + for (DefectTypeEnum e : DefectTypeEnum.values() ) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set(e.code, e.desc); + list.add(jsonObject); + } + return list; + } +} diff --git a/core/src/main/java/com/dite/znpt/enums/EducationEnum.java b/core/src/main/java/com/dite/znpt/enums/EducationEnum.java new file mode 100644 index 0000000..fef6b8a --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/EducationEnum.java @@ -0,0 +1,58 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/5/18 21:57 + * @Description: + */ +@Getter +public enum EducationEnum { + UNKNOWN("unknown","小学"), + PRIMARY_SCHOOL("primary_school","小学"), + MIDDLE_SCHOOL("middle_school","初中"), + HIGH_SCHOOL(" high_school","高中"), + SECONDARY("secondary","中专"), + JUNIOR_COLLEGE("junior_college","大专"), + BACHELOR("bachelor","本科"), + MASTER("master","硕士"), + DOCTOR("doctor","博士"); + + private final String code; + private final String desc; + + EducationEnum(String code, String desc){ + this.code = code; + this.desc = desc; + } + + + public static EducationEnum getByCode(String code){ + for (EducationEnum e : EducationEnum.values() ) { + if(e.code.equals(code)){ + return e; + } + } + return null; + } + + public static String getDescByCode(String code){ + EducationEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List listAll(){ + List list = new ArrayList<>(EducationEnum.values().length); + for (EducationEnum e : EducationEnum.values() ) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set(e.code, e.desc); + list.add(jsonObject); + } + return list; + } +} diff --git a/core/src/main/java/com/dite/znpt/enums/Enums.java b/core/src/main/java/com/dite/znpt/enums/Enums.java new file mode 100644 index 0000000..8a4fcf8 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/Enums.java @@ -0,0 +1,183 @@ +package com.dite.znpt.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author wujinsong + * @date 2021/9/15 3:20 下午 + * @description: 枚举类 + */ +public class Enums { + + @Getter + @AllArgsConstructor + public enum EWorkType { + OutWork("out-work", "外部工作"), + InWork("in-work", "内部工作"), + AntiThunderWork("lightning-protection-work", "防雷工作"), + SummaryWork("summary-report", "数据报告"); + + final String value; + final String name; + + public static EWorkType getByValue(String value) { + for (EWorkType e : EWorkType.values()) { + if (e.value.equals(value)) { + return e; + } + } + return null; + } + } + + @Getter + @AllArgsConstructor + public enum EInWorkType { + GROUND_SERVICE("in-work__ground_service","地勤"), + ASCEND_HEIGHT("in-work__ascend-height","登高"), + DRIVER("in-work__driver","司机"); + + final String value; + final String name; + + public static EInWorkType getByValue(String value) { + for (EInWorkType e : EInWorkType.values()) { + if (e.value.equals(value)) { + return e; + } + } + return null; + } + } + + @Getter + @AllArgsConstructor + public enum EOutWorkType { + DRIVER("out-work__driver","司机"), + FLYAID("out-work__flyaid","飞助"), + DRONE_FLYER("out-work__drone-flyer","飞手"), + ASCEND_HEIGHT("out-work__ascend-height","登高"), + GROUND_SERVICE("out-work__ground_service","地勤"); + + final String value; + final String name; + + public static EOutWorkType getByValue(String value) { + for (EOutWorkType e : EOutWorkType.values()) { + if (e.value.equals(value)) { + return e; + } + } + return null; + } + } + + @Getter + @AllArgsConstructor + public enum EAntiWorkType { + ASCEND_HEIGHT("lightning-protection-work__ascend-height","登高"), + METER_READING("lightning-protection-work__meter_reading","抄表"), + UNMAN_OPERATION("lightning-protection-work__unman_operation","无人化装备操作"), + UNMAN_ANTI_THUNDER("lightning-protection-work__unman_anti_thunder","无人化防雷"), + DRIVER("lightning-protection-work__driver","司机"), + GROUND_SERVICE("lightning-protection-work__ground_service","地勤"); + + final String value; + final String name; + + public static EAntiWorkType getByValue(String value) { + for (EAntiWorkType e : EAntiWorkType.values()) { + if (e.value.equals(value)) { + return e; + } + } + return null; + } + } + + @Getter + @AllArgsConstructor + public enum EReportWorkType { + SUMMARY_REPORT("data-report__summary-report","汇总报告"); + + final String value; + final String name; + } + + @Getter + @AllArgsConstructor + public enum EWorkStatus { + DRAFT("0", "草稿"), + SUBMITTED("1", "已提交"), + LEADER_SUBMITTED("2", "组长提交"), + MANAGER_APPROVAL("3", "项目经理审批通过"); + + final String value; + final String name; + } + + @Getter + @AllArgsConstructor + public enum ECrewWorkStatus { + NON_EXISTS("-1", "不存在"), + NOT_START("0", "未开始"), + START_CONSTRUCTION("1", "开始施工"), + SUBMITTED_REPORT("2", "已提交报告"), + APPROVAL("3", "审核通过"); + + final String value; + final String name; + } + + @Getter + @AllArgsConstructor + public enum ERoleCode { + /** + * 管理员 + */ + Manager(0, "Manager"), + /** + * 项目管理员 + */ + ProjectManager(0, "ProjectManager"), + /** + * 大项目管理员 + */ + SeniorProjectManager(0, "SeniorProjectManager"), + /** + * 安全员 + */ + SafetyOfficer(0, "SafetyOfficer"), + /** + * 质量员 + */ + QualityOfficer(0, "QualityOfficer"), + /** + * 施工人员 + */ + Builder(0, "Builder"), + ; + + final int value; + final String name; + } + + @Getter + @AllArgsConstructor + public enum EAuthStatus { + /** + * 待审核 + */ + PENDING(0, "待审核", "0"), + /** + * 通过 + */ + APPROVAL(1, "通过", "1"); + + final int value; + final String name; + final String val; + } + +} diff --git a/core/src/main/java/com/dite/znpt/enums/EquipmentStatusEnum.java b/core/src/main/java/com/dite/znpt/enums/EquipmentStatusEnum.java new file mode 100644 index 0000000..91e3ac5 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/EquipmentStatusEnum.java @@ -0,0 +1,54 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/7/24/周四 14:35 + * @description + */ +@Getter +public enum EquipmentStatusEnum { + NORMAL("normal","正常"), + REPAIR("repair","维修中"), + MAINTAIN(" maintain","保养中"), + SCRAP("scrap","报废"); + + private final String code; + + private final String desc; + + EquipmentStatusEnum(String code, String desc){ + this.code = code; + this.desc = desc; + } + + + public static EquipmentStatusEnum getByCode(String code){ + for (EquipmentStatusEnum e : EquipmentStatusEnum.values() ) { + if(e.code.equals(code)){ + return e; + } + } + return null; + } + + public static String getDescByCode(String code){ + EquipmentStatusEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List listAll(){ + List list = new ArrayList<>(EquipmentStatusEnum.values().length); + for (EquipmentStatusEnum e : EquipmentStatusEnum.values() ) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set(e.code, e.desc); + list.add(jsonObject); + } + return list; + } +} diff --git a/core/src/main/java/com/dite/znpt/enums/EquipmentTypeEnum.java b/core/src/main/java/com/dite/znpt/enums/EquipmentTypeEnum.java new file mode 100644 index 0000000..1aa9f12 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/EquipmentTypeEnum.java @@ -0,0 +1,54 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/7/24/周四 9:33 + * @description + */ +@Getter +public enum EquipmentTypeEnum { + DETECTION("detection","检测设备"), + MAINTAIN("maintain","维修设备"), + SECURITY("security","安全设备"), + OFFICE(" office","办公设备"), + CAR("car","车辆"); + + private final String code; + private final String desc; + + EquipmentTypeEnum(String code, String desc){ + this.code = code; + this.desc = desc; + } + + + public static EquipmentTypeEnum getByCode(String code){ + for (EquipmentTypeEnum e : EquipmentTypeEnum.values() ) { + if(e.code.equals(code)){ + return e; + } + } + return null; + } + + public static String getDescByCode(String code){ + EquipmentTypeEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List listAll(){ + List list = new ArrayList<>(EquipmentTypeEnum.values().length); + for (EquipmentTypeEnum e : EquipmentTypeEnum.values() ) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set(e.code, e.desc); + list.add(jsonObject); + } + return list; + } +} diff --git a/core/src/main/java/com/dite/znpt/enums/FilePathEnum.java b/core/src/main/java/com/dite/znpt/enums/FilePathEnum.java new file mode 100644 index 0000000..0b21606 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/FilePathEnum.java @@ -0,0 +1,58 @@ +package com.dite.znpt.enums; + +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.extra.spring.SpringUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.core.env.Environment; + +@AllArgsConstructor +public enum FilePathEnum { + + IMAGE("/static/image/", "image"), + IMAGE_TEMP("/static/image/temp/", "image-temp"), + VIDEO("/static/video/", "video"), + AUDIO("/static/audio/", "audio"), + ATTACH("/static/attach/", "attach"); + + @Getter + private final String urlPath; + private final String fileRelativePath; + + /** + * 功能描述:获取文件绝对路径前缀 + * + * @return {@link String } + * @author cuizhibin + * @date 2025/06/23 14:46 + **/ + public String getFileAbsolutePathPrefix() { + return SpringUtil.getBean(Environment.class).getProperty("upload.save-path") + fileRelativePath + FileUtil.FILE_SEPARATOR; + } + + /** + * 功能描述:获取文件绝对路径全路径 + * + * @return {@link String } + * @author cuizhibin + * @date 2025/06/23 14:46 + **/ + public String getFileAbsolutePath(String fileDownPath) { + return FileUtil.normalize(getFileAbsolutePathPrefix() + StrUtil.removePrefix(fileDownPath, urlPath)); + } + + /** + * 功能描述:获取下载路径 + * + * @param absolutePath + * @return {@link String } + * @author cuizhibin + * @date 2025/06/06 09:07 + **/ + public String getFileDownPath(String absolutePath) { + String relativePath = StrUtil.removePrefix(absolutePath, getFileAbsolutePathPrefix()); + return StrUtil.replace(urlPath.concat(relativePath), FileUtil.FILE_SEPARATOR, StrUtil.SLASH); + } + +} diff --git a/core/src/main/java/com/dite/znpt/enums/GenderEnum.java b/core/src/main/java/com/dite/znpt/enums/GenderEnum.java new file mode 100644 index 0000000..11a57bc --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/GenderEnum.java @@ -0,0 +1,51 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/5/18 22:47 + * @Description: + */ +@Getter +public enum GenderEnum { + MALE("male","男"), + FEMALE("female","女"), + UNKNOWN("unknown","未知"); + private final String code; + private final String desc; + + GenderEnum(String code, String desc){ + this.code = code; + this.desc = desc; + } + + + public static GenderEnum getByCode(String code){ + for (GenderEnum e : GenderEnum.values() ) { + if(e.code.equals(code)){ + return e; + } + } + return null; + } + + public static String getDescByCode(String code){ + GenderEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List listAll(){ + List list = new ArrayList<>(GenderEnum.values().length); + for (GenderEnum e : GenderEnum.values() ) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set(e.code, e.desc); + list.add(jsonObject); + } + return list; + } +} diff --git a/core/src/main/java/com/dite/znpt/enums/ImageSourceEnum.java b/core/src/main/java/com/dite/znpt/enums/ImageSourceEnum.java new file mode 100644 index 0000000..c69ee63 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/ImageSourceEnum.java @@ -0,0 +1,52 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/5/11 23:35 + * @Description: + */ +@Getter +public enum ImageSourceEnum { + COLLECT("collect", "图像采集"), + OUT_WORK("out-work", "外部工作"), + IN_WORK("in-work", "内部工作"), + LIGHTNING_PROTECTING_WORK("lightning-protection-work", "防雷工作"); + + private final String code; + private final String desc; + + ImageSourceEnum(String code, String desc){ + this.code = code; + this.desc = desc; + } + + public static ImageSourceEnum getByCode(String code){ + for (ImageSourceEnum e : ImageSourceEnum.values() ) { + if(e.code.equals(code)){ + return e; + } + } + return null; + } + + public static String getDescByCode(String code){ + ImageSourceEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List list(){ + List list = new ArrayList<>(ImageSourceEnum.values().length); + for (ImageSourceEnum e : ImageSourceEnum.values() ) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set(e.code, e.desc); + list.add(jsonObject); + } + return list; + } +} diff --git a/core/src/main/java/com/dite/znpt/enums/ImageTypeEnum.java b/core/src/main/java/com/dite/znpt/enums/ImageTypeEnum.java new file mode 100644 index 0000000..6f629b0 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/ImageTypeEnum.java @@ -0,0 +1,50 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/4/24 21:25 + * @Description: + */ +@Getter +public enum ImageTypeEnum { + DEFECT("DEFECT", "缺陷影像"), + TYPICAL("TYPICAL", "典型影像"), + OTHER("OTHER", "其他影像"); + private final String code; + private final String desc; + + ImageTypeEnum(String code, String desc){ + this.code = code; + this.desc = desc; + } + + public static ImageTypeEnum getByCode(String code){ + for (ImageTypeEnum e : ImageTypeEnum.values() ) { + if(e.code.equals(code)){ + return e; + } + } + return null; + } + + public static String getDescByCode(String code){ + ImageTypeEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List listAll(){ + List list = new ArrayList<>(ImageTypeEnum.values().length); + for (ImageTypeEnum e : ImageTypeEnum.values() ) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set(e.code, e.desc); + list.add(jsonObject); + } + return list; + } +} diff --git a/core/src/main/java/com/dite/znpt/enums/InspectionReportStatusEnum.java b/core/src/main/java/com/dite/znpt/enums/InspectionReportStatusEnum.java new file mode 100644 index 0000000..5d9e517 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/InspectionReportStatusEnum.java @@ -0,0 +1,51 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/6/26/周四 10:49 + * @description + */ +@Getter +public enum InspectionReportStatusEnum { + + PENDING("PENDING","待审核"), + PUBLISH("PUBLISH","已发布"); + + private final String code; + private final String desc; + + InspectionReportStatusEnum(String code, String desc){ + this.code = code; + this.desc = desc; + } + + public static InspectionReportStatusEnum getByCode(String code){ + for (InspectionReportStatusEnum e : InspectionReportStatusEnum.values() ) { + if(e.code.equals(code)){ + return e; + } + } + return null; + } + + public static String getDescByCode(String code){ + InspectionReportStatusEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List listAll(){ + List list = new ArrayList<>(InspectionReportStatusEnum.values().length); + for (InspectionReportStatusEnum e : InspectionReportStatusEnum.values() ) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set(e.code, e.desc); + list.add(jsonObject); + } + return list; + } +} diff --git a/core/src/main/java/com/dite/znpt/enums/InsuranceStatusEnum.java b/core/src/main/java/com/dite/znpt/enums/InsuranceStatusEnum.java new file mode 100644 index 0000000..9c491fb --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/InsuranceStatusEnum.java @@ -0,0 +1,51 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/6/26/周四 10:49 + * @description + */ +@Getter +public enum InsuranceStatusEnum { + + EFFECTIVE("EFFECTIVE","有效"), + EXPIRED("EXPIRED","过期"); + + private final String code; + private final String desc; + + InsuranceStatusEnum(String code, String desc){ + this.code = code; + this.desc = desc; + } + + public static InsuranceStatusEnum getByCode(String code){ + for (InsuranceStatusEnum e : InsuranceStatusEnum.values() ) { + if(e.code.equals(code)){ + return e; + } + } + return null; + } + + public static String getDescByCode(String code){ + InsuranceStatusEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List listAll(){ + List list = new ArrayList<>(InsuranceStatusEnum.values().length); + for (InsuranceStatusEnum e : InsuranceStatusEnum.values() ) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set(e.code, e.desc); + list.add(jsonObject); + } + return list; + } +} diff --git a/core/src/main/java/com/dite/znpt/enums/MenuTypeEnum.java b/core/src/main/java/com/dite/znpt/enums/MenuTypeEnum.java new file mode 100644 index 0000000..a0ce12e --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/MenuTypeEnum.java @@ -0,0 +1,52 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/21/周三 14:44 + * @description + */ +@Getter +public enum MenuTypeEnum { + + CATALOG("catalog", "目录"), + ROUTE("route", "菜单"), + BUTTON("button", "按钮"); + + private final String code; + private final String desc; + + MenuTypeEnum(String code, String desc){ + this.code = code; + this.desc = desc; + } + + public static MenuTypeEnum getByCode(String code){ + for (MenuTypeEnum e : MenuTypeEnum.values() ) { + if(e.code.equals(code)){ + return e; + } + } + return null; + } + + public static String getDescByCode(String code){ + MenuTypeEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List listAll(){ + List list = new ArrayList<>(MenuTypeEnum.values().length); + for (MenuTypeEnum e : MenuTypeEnum.values() ) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set(e.code, e.desc); + list.add(jsonObject); + } + return list; + } +} diff --git a/core/src/main/java/com/dite/znpt/enums/PartTypeEnum.java b/core/src/main/java/com/dite/znpt/enums/PartTypeEnum.java new file mode 100644 index 0000000..3f7d86a --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/PartTypeEnum.java @@ -0,0 +1,53 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/5/7 21:22 + * @Description: + */ +@Getter +public enum PartTypeEnum { + CABIN("CABIN", "机舱"), + VANE_1("VANE-1", "叶片1"), + VANE_2("VANE-2", "叶片2"), + VANE_3("VANE-3", "叶片3"), + TOWER("TOWER", "塔筒"); + + private final String code; + private final String desc; + + PartTypeEnum(String code, String desc){ + this.code = code; + this.desc = desc; + } + + public static PartTypeEnum getByCode(String code){ + for (PartTypeEnum e : PartTypeEnum.values() ) { + if(e.code.equals(code)){ + return e; + } + } + return null; + } + + public static String getDescByCode(String code){ + PartTypeEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List listAll(){ + List list = new ArrayList<>(PartTypeEnum.values().length); + for (PartTypeEnum e : PartTypeEnum.values() ) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set(e.code, e.desc); + list.add(jsonObject); + } + return list; + } +} diff --git a/core/src/main/java/com/dite/znpt/enums/ProjectStatusEnum.java b/core/src/main/java/com/dite/znpt/enums/ProjectStatusEnum.java new file mode 100644 index 0000000..7836468 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/ProjectStatusEnum.java @@ -0,0 +1,50 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/4/29 21:32 + * @Description: + */ +@Getter +@AllArgsConstructor +public enum ProjectStatusEnum { + PENDING(0, "待施工"), + IN_PROGRESS(1, "施工中"), + COMPLETED(2, "已完工"), + AUDITED(3, "已审核"), + ACCEPTED(4, "已验收"); + + private final int code; + private final String desc; + + public static ProjectStatusEnum getByCode(int code){ + for (ProjectStatusEnum e : ProjectStatusEnum.values() ) { + if(e.code == code){ + return e; + } + } + return null; + } + + public static String getDescByCode(int code){ + ProjectStatusEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List listAll(){ + List list = new ArrayList<>(ProjectStatusEnum.values().length); + for (ProjectStatusEnum e : ProjectStatusEnum.values() ) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set(String.valueOf(e.code), e.desc); + list.add(jsonObject); + } + return list; + } +} diff --git a/core/src/main/java/com/dite/znpt/enums/ProjectTaskStateEnum.java b/core/src/main/java/com/dite/znpt/enums/ProjectTaskStateEnum.java new file mode 100644 index 0000000..5ccebb9 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/ProjectTaskStateEnum.java @@ -0,0 +1,48 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/4/29 21:32 + * @Description: + */ +@Getter +@AllArgsConstructor +public enum ProjectTaskStateEnum { + PENDING(0, "未开始"), + IN_PROGRESS(1, "进行中"), + COMPLETED(2, "已完工"); + + private final int code; + private final String desc; + + public static ProjectTaskStateEnum getByCode(int code){ + for (ProjectTaskStateEnum e : ProjectTaskStateEnum.values() ) { + if(e.code == code){ + return e; + } + } + return null; + } + + public static String getDescByCode(int code){ + ProjectTaskStateEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List listAll(){ + List list = new ArrayList<>(ProjectTaskStateEnum.values().length); + for (ProjectTaskStateEnum e : ProjectTaskStateEnum.values() ) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set(String.valueOf(e.code), e.desc); + list.add(jsonObject); + } + return list; + } +} diff --git a/core/src/main/java/com/dite/znpt/enums/ProjectWorkJobEnum.java b/core/src/main/java/com/dite/znpt/enums/ProjectWorkJobEnum.java new file mode 100644 index 0000000..4ed5b1a --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/ProjectWorkJobEnum.java @@ -0,0 +1,66 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/4/29 22:34 + * @Description: + */ +@Getter +public enum ProjectWorkJobEnum { + OUT_WORK_DRONE_FLYER("out-work__drone-flyer", "飞手", ProjectWorkTypeEnum.OUT_WORK), + OUT_WORK_FLYAID("out-work__flyaid", "飞助", ProjectWorkTypeEnum.OUT_WORK), + OUT_WORK_ASCEND_HEIGHT("out-work__ascend-height", "登高", ProjectWorkTypeEnum.OUT_WORK), + OUT_WORK_DRIVER("out-work__driver", "司机", ProjectWorkTypeEnum.OUT_WORK), + OUT_WORK_GROUND_SERVICE("out-work__ground-service", "地勤", ProjectWorkTypeEnum.OUT_WORK), + IN_WORK_ASCEND_HEIGHT("in-work__ascend-height", "登高", ProjectWorkTypeEnum.IN_WORK), + IN_WORK_DRIVER("in-work__driver", "司机", ProjectWorkTypeEnum.IN_WORK), + IN_WORK_GROUND_SERVICE("in-work__ground-service", "地勤", ProjectWorkTypeEnum.IN_WORK), + LIGHTNING_PROTECTING_WORK_METER_READING("lightning-protection-work__meter_reading","抄表",ProjectWorkTypeEnum.LIGHTNING_PROTECTING_WORK), + LIGHTNING_PROTECTING_WORK_UNMAN_OPERATION("lightning-protection-work__unman_operation","无人化装备操作",ProjectWorkTypeEnum.LIGHTNING_PROTECTING_WORK), + LIGHTNING_PROTECTING_WORK_UNMAN_ANTI_THUNDER("lightning-protection-work__unman_anti_thunder","无人机防雷",ProjectWorkTypeEnum.LIGHTNING_PROTECTING_WORK), + LIGHTNING_PROTECTING_WORK_GROUND_SERVICE("lightning-protection-work__ascend-height","登高",ProjectWorkTypeEnum.LIGHTNING_PROTECTING_WORK), + LIGHTNING_PROTECTING_WORK_DRIVER("lightning-protection-work__driver","司机",ProjectWorkTypeEnum.LIGHTNING_PROTECTING_WORK), + LIGHTNING_PROTECTING_SERVICE("lightning-protection-work__ground_service","地勤",ProjectWorkTypeEnum.LIGHTNING_PROTECTING_WORK); + + private String code; + private String desc; + private ProjectWorkTypeEnum projectWorkType; + + private ProjectWorkJobEnum(String code, String desc, ProjectWorkTypeEnum projectWorkType){ + this.code = code; + this.desc = desc; + this.projectWorkType = projectWorkType; + } + + public static ProjectWorkJobEnum getByCode(String code){ + for (ProjectWorkJobEnum e : ProjectWorkJobEnum.values() ) { + if(e.code.equals(code)){ + return e; + } + } + return null; + } + + public static String getDescByCode(String code){ + ProjectWorkJobEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List listByWorkType(String workType){ + List list = new ArrayList<>(ProjectWorkJobEnum.values().length); + for (ProjectWorkJobEnum e : ProjectWorkJobEnum.values() ) { + if(workType.equals(e.projectWorkType.getCode())){ + JSONObject jsonObject = new JSONObject(); + jsonObject.set(e.code, e.desc); + list.add(jsonObject); + } + } + return list; + } +} diff --git a/core/src/main/java/com/dite/znpt/enums/ProjectWorkTypeEnum.java b/core/src/main/java/com/dite/znpt/enums/ProjectWorkTypeEnum.java new file mode 100644 index 0000000..013aa96 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/ProjectWorkTypeEnum.java @@ -0,0 +1,51 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/4/29 22:27 + * @Description: + */ +@Getter +public enum ProjectWorkTypeEnum { + LIGHTNING_PROTECTING_WORK("lightning-protection-work", "防雷工作"), + OUT_WORK("out-work", "外部工作"), + SUMMARY_WORK("summary-report", "汇总报告"), + IN_WORK("in-work", "内部工作"); + private final String code; + private final String desc; + + ProjectWorkTypeEnum(String code, String desc){ + this.code = code; + this.desc = desc; + } + + public static ProjectWorkTypeEnum getByCode(String code){ + for (ProjectWorkTypeEnum e : ProjectWorkTypeEnum.values() ) { + if(e.code.equals(code)){ + return e; + } + } + return null; + } + + public static String getDescByCode(String code){ + ProjectWorkTypeEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List listAll(){ + List list = new ArrayList<>(ProjectWorkTypeEnum.values().length); + for (ProjectWorkTypeEnum e : ProjectWorkTypeEnum.values() ) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set(e.code, e.desc); + list.add(jsonObject); + } + return list; + } +} diff --git a/core/src/main/java/com/dite/znpt/enums/RepairStatusEnum.java b/core/src/main/java/com/dite/znpt/enums/RepairStatusEnum.java new file mode 100644 index 0000000..2be9c6b --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/RepairStatusEnum.java @@ -0,0 +1,51 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/4/27 20:55 + * @Description: + */ +@Getter +public enum RepairStatusEnum { + INCOMPLETE("INCOMPLETE","未维修"), + COMPLETED("COMPLETED","已维修"), + UNKNOWN("UNKNOWN","未知"); + + private final String code; + private final String desc; + + RepairStatusEnum(String code, String desc){ + this.code = code; + this.desc = desc; + } + + public static RepairStatusEnum getByCode(String code){ + for (RepairStatusEnum e : RepairStatusEnum.values() ) { + if(e.code.equals(code)){ + return e; + } + } + return null; + } + + public static String getDescByCode(String code){ + RepairStatusEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List listAll(){ + List list = new ArrayList<>(RepairStatusEnum.values().length); + for (RepairStatusEnum e : RepairStatusEnum.values() ) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set(e.code, e.desc); + list.add(jsonObject); + } + return list; + } +} diff --git a/core/src/main/java/com/dite/znpt/enums/ShootingMethodEnum.java b/core/src/main/java/com/dite/znpt/enums/ShootingMethodEnum.java new file mode 100644 index 0000000..7c74c03 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/ShootingMethodEnum.java @@ -0,0 +1,50 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/4/24 20:43 + * @Description: + */ +@Getter +public enum ShootingMethodEnum { + UAV("UAV", "无人机航拍"), + HANDHELD_CAMERA("HANDHELD_CAMERA", "手持相机拍摄"); + + private final String code; + private final String desc; + + ShootingMethodEnum(String code, String desc){ + this.code = code; + this.desc = desc; + } + + public static ShootingMethodEnum getByCode(String code){ + for (ShootingMethodEnum e : ShootingMethodEnum.values() ) { + if(e.code.equals(code)){ + return e; + } + } + return null; + } + + public static String getDescByCode(String code){ + ShootingMethodEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List listAll(){ + List list = new ArrayList<>(ShootingMethodEnum.values().length); + for (ShootingMethodEnum e : ShootingMethodEnum.values() ) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set(e.code, e.desc); + list.add(jsonObject); + } + return list; + } +} diff --git a/core/src/main/java/com/dite/znpt/enums/TerminalTypeEnum.java b/core/src/main/java/com/dite/znpt/enums/TerminalTypeEnum.java new file mode 100644 index 0000000..70f5d0e --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/TerminalTypeEnum.java @@ -0,0 +1,50 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/6/24 21:53 + * @Description: + */ +@Getter +public enum TerminalTypeEnum { + PC("PC","电脑端"), + APP("APP","移动端"); + + private final String code; + private final String desc; + + TerminalTypeEnum(String code, String desc){ + this.code = code; + this.desc = desc; + } + + public static TerminalTypeEnum getByCode(String code){ + for (TerminalTypeEnum e : TerminalTypeEnum.values() ) { + if(e.code.equals(code)){ + return e; + } + } + return null; + } + + public static String getDescByCode(String code){ + TerminalTypeEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List listAll(){ + List list = new ArrayList<>(TerminalTypeEnum.values().length); + for (TerminalTypeEnum e : TerminalTypeEnum.values() ) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set(e.code, e.desc); + list.add(jsonObject); + } + return list; + } +} diff --git a/core/src/main/java/com/dite/znpt/enums/UserStatusEnum.java b/core/src/main/java/com/dite/znpt/enums/UserStatusEnum.java new file mode 100644 index 0000000..6107111 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/UserStatusEnum.java @@ -0,0 +1,52 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/6/23 22:38 + * @Description: + */ +@Getter +public enum UserStatusEnum { + + EMPLOYED("EMPLOYED", "在职"), + DIMISSION("DIMISSION", "正常离职"), + ABNORMAL_DIMISSION("ABNORMAL_DIMISSION", "非正常离职"); + + private final String code; + private final String desc; + + UserStatusEnum(String code, String desc){ + this.code = code; + this.desc = desc; + } + + public static UserStatusEnum getByCode(String code){ + for (UserStatusEnum e : UserStatusEnum.values() ) { + if(e.code.equals(code)){ + return e; + } + } + return null; + } + + public static String getDescByCode(String code){ + UserStatusEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List listAll(){ + List list = new ArrayList<>(UserStatusEnum.values().length); + for (UserStatusEnum e : UserStatusEnum.values() ) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set(e.code, e.desc); + list.add(jsonObject); + } + return list; + } +} diff --git a/core/src/main/java/com/dite/znpt/enums/UserTypeEnum.java b/core/src/main/java/com/dite/znpt/enums/UserTypeEnum.java new file mode 100644 index 0000000..7d3d17a --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/UserTypeEnum.java @@ -0,0 +1,51 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/6/23 22:38 + * @Description: + */ +@Getter +public enum UserTypeEnum { + + PERMANENT("PERMANENT", "正式工"), + TEMPORARY("TEMPORARY", "临时工"); + + private final String code; + private final String desc; + + UserTypeEnum(String code, String desc){ + this.code = code; + this.desc = desc; + } + + public static UserTypeEnum getByCode(String code){ + for (UserTypeEnum e : UserTypeEnum.values() ) { + if(e.code.equals(code)){ + return e; + } + } + return null; + } + + public static String getDescByCode(String code){ + UserTypeEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List listAll(){ + List list = new ArrayList<>(UserTypeEnum.values().length); + for (UserTypeEnum e : UserTypeEnum.values() ) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set(e.code, e.desc); + list.add(jsonObject); + } + return list; + } +} diff --git a/core/src/main/java/com/dite/znpt/enums/WeatherEnum.java b/core/src/main/java/com/dite/znpt/enums/WeatherEnum.java new file mode 100644 index 0000000..9c2be8c --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/WeatherEnum.java @@ -0,0 +1,71 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/4/24 20:40 + * @Description: + */ +@Getter +public enum WeatherEnum { + + SUNNY("SUNNY","晴天"), + CLOUDY("CLOUDY","多云"), + OVERCAST("OVERCAST","阴天"), + LIGHT_RAIN("LIGHT_RAIN","小雨"), + MODERATE_RAIN("MODERATE_RAIN","中雨"), + HEAVY_RAIN("HEAVY_RAIN","大雨"), + CLOUDBURST("CLOUDBURST","暴雨"), + SHOWER("SHOWER","阵雨"), + THUNDERSHOWER("THUNDERSHOWER","雷阵雨"), + THUNDER("THUNDER","雷电"), + HAIL("HAIL","冰雹"), + LIGHT_FOG("LIGHT_FOG","轻雾"), + FOG("FOG","雾"), + THICK_FOG("THICK_FOG","浓雾"), + HAZE("HAZE","霾"), + SLEET("SLEET","雨夹雪"), + LIGHT_SNOW("LIGHT_SNOW","小雪"), + MODERATE_SNOW("MODERATE_SNOW","中雪"), + HEAVY_SNOW("HEAVY_SNOW","大雪"), + BLIZZARD("BLIZZARD","暴雪"), + FREEZING_RAIN("FREEZING_RAIN","冻雨"); + + private final String code; + private final String desc; + + WeatherEnum(String code, String desc){ + this.code = code; + this.desc = desc; + } + + public static WeatherEnum getByCode(String code){ + for (WeatherEnum e : WeatherEnum.values() ) { + if(e.code.equals(code)){ + return e; + } + } + return null; + } + + public static String getDescByCode(String code){ + WeatherEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List listAll(){ + List list = new ArrayList<>(WeatherEnum.values().length); + for (WeatherEnum e : WeatherEnum.values() ) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set(e.code, e.desc); + list.add(jsonObject); + } + return list; + } + +} diff --git a/core/src/main/java/com/dite/znpt/exception/RestResponseEntityExceptionHandler.java b/core/src/main/java/com/dite/znpt/exception/RestResponseEntityExceptionHandler.java new file mode 100644 index 0000000..4863260 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/exception/RestResponseEntityExceptionHandler.java @@ -0,0 +1,56 @@ +package com.dite.znpt.exception; + +import cn.dev33.satoken.exception.SaTokenException; +import com.dite.znpt.constant.Constants; +import com.dite.znpt.domain.Result; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestController; + +/** + * @description: 全局异常处理 + */ +@ControllerAdvice +@RestController +public class RestResponseEntityExceptionHandler { + private static final Logger logger = LoggerFactory.getLogger(RestResponseEntityExceptionHandler.class); + @ExceptionHandler(SaTokenException.class) + public final Result handlerSaTokenException(SaTokenException e) { + return Result.error("5".concat(String.valueOf(e.getCode())), e.getMessage()); + } + + @ExceptionHandler(Exception.class) + public final Result handler(Exception e) { + logger.error("出现系统异常:{},异常类型:{},详细堆栈:", e.getMessage(), e.getClass(), e); + return Result.error(Constants.SYSTEM_EXCEPTION, Constants.SERVICE_EXCEPTION_MESSAGE); + } + + @ExceptionHandler(ServiceException.class) + public final Result handler(ServiceException e) { + logger.error("出现服务异常:{},异常类型:{},详细堆栈:", e.getMessage(), e.getClass(), e); + return Result.error(Constants.SERVICE_EXCEPTION, e.getMessage()); + } + + /** + * @author wujinsong + * @date 2021/10/9 1:28 下午 + * @description: 数据效验的异常处理 + * @Param [e] + * @Return R + */ + @ExceptionHandler(value = MethodArgumentNotValidException.class) + public Result handleValidException(MethodArgumentNotValidException e) { + logger.error("数据效验出现了异常:{},异常类型:{},详细堆栈:", e.getMessage(), e.getClass(), e); + StringBuilder sb = new StringBuilder(); + BindingResult bindingResult = e.getBindingResult(); + bindingResult.getFieldErrors().forEach((fieldError) -> { + sb.append(fieldError.getField()).append(fieldError.getDefaultMessage()).append(";"); + }); + + return Result.error(Constants.PARAMETER_EXCEPTION, sb.toString()); + } +} diff --git a/core/src/main/java/com/dite/znpt/exception/ServiceException.java b/core/src/main/java/com/dite/znpt/exception/ServiceException.java new file mode 100644 index 0000000..c79d673 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/exception/ServiceException.java @@ -0,0 +1,15 @@ +package com.dite.znpt.exception; + +/** + * @description: 服务异常 + */ +public class ServiceException extends RuntimeException { + private Integer code; + + public ServiceException() { + } + + public ServiceException(String message) { + super(message); + } +} diff --git a/core/src/main/java/com/dite/znpt/mapper/AttendanceRecordMapper.java b/core/src/main/java/com/dite/znpt/mapper/AttendanceRecordMapper.java new file mode 100644 index 0000000..30a0de8 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/AttendanceRecordMapper.java @@ -0,0 +1,12 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.AttendanceRecordEntity; + +/** + * @Author: gaoxiong + * @Date: 2025/7/21 21:19 + * @Description: + */ +public interface AttendanceRecordMapper extends BaseMapper { +} diff --git a/core/src/main/java/com/dite/znpt/mapper/AudioFileInfoMapper.java b/core/src/main/java/com/dite/znpt/mapper/AudioFileInfoMapper.java new file mode 100644 index 0000000..fd1cea5 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/AudioFileInfoMapper.java @@ -0,0 +1,19 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.AudioFileInfoEntity; +import com.dite.znpt.domain.vo.AudioFileInfoListReq; +import com.dite.znpt.domain.vo.AudioFileInfoResp; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/06/23 13:39 + * @Description: 音频文件信息表数据库访问层 + */ +public interface AudioFileInfoMapper extends BaseMapper { + List queryBySelective(AudioFileInfoListReq audioFileInfoReq); +} + diff --git a/core/src/main/java/com/dite/znpt/mapper/CertificationMapper.java b/core/src/main/java/com/dite/znpt/mapper/CertificationMapper.java new file mode 100644 index 0000000..68d46a6 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/CertificationMapper.java @@ -0,0 +1,17 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.CertificationEntity; +import com.dite.znpt.domain.vo.CertificationListReq; +import com.dite.znpt.domain.vo.CertificationResp; + +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/27/周二 15:21 + * @description + */ +public interface CertificationMapper extends BaseMapper { + List selectCertification(CertificationListReq req); +} diff --git a/core/src/main/java/com/dite/znpt/mapper/CheckSchemeMapper.java b/core/src/main/java/com/dite/znpt/mapper/CheckSchemeMapper.java new file mode 100644 index 0000000..33439c8 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/CheckSchemeMapper.java @@ -0,0 +1,12 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.CheckSchemeEntity; + +/** + * @Author: gaoxiong + * @Date: 2025/7/9 23:37 + * @Description: + */ +public interface CheckSchemeMapper extends BaseMapper { +} diff --git a/core/src/main/java/com/dite/znpt/mapper/ContractMapper.java b/core/src/main/java/com/dite/znpt/mapper/ContractMapper.java new file mode 100644 index 0000000..77d1a91 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/ContractMapper.java @@ -0,0 +1,19 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.ContractEntity; +import com.dite.znpt.domain.vo.ContractListReq; +import com.dite.znpt.domain.vo.ContractResp; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/07/21 20:29 + * @Description: 合同表数据库访问层 + */ +public interface ContractMapper extends BaseMapper { + List queryBySelective(ContractListReq contractReq); +} + diff --git a/core/src/main/java/com/dite/znpt/mapper/ContractSettlementMapper.java b/core/src/main/java/com/dite/znpt/mapper/ContractSettlementMapper.java new file mode 100644 index 0000000..c1a4b39 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/ContractSettlementMapper.java @@ -0,0 +1,19 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.ContractSettlementEntity; +import com.dite.znpt.domain.vo.ContractSettlementListReq; +import com.dite.znpt.domain.vo.ContractSettlementResp; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/07/21 21:10 + * @Description: 合同结算表数据库访问层 + */ +public interface ContractSettlementMapper extends BaseMapper { + List queryBySelective(ContractSettlementListReq contractSettlementReq); +} + diff --git a/core/src/main/java/com/dite/znpt/mapper/DefectMapper.java b/core/src/main/java/com/dite/znpt/mapper/DefectMapper.java new file mode 100644 index 0000000..d1ddb14 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/DefectMapper.java @@ -0,0 +1,20 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.DefectEntity; +import com.dite.znpt.domain.vo.DefectListReq; +import com.dite.znpt.domain.vo.DefectListResp; +import com.dite.znpt.domain.vo.DefectResp; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 缺陷记录表数据库访问层 + */ +public interface DefectMapper extends BaseMapper { + List queryBySelective(DefectListReq defectReq); + DefectResp detail(String defectId); +} + diff --git a/core/src/main/java/com/dite/znpt/mapper/DeptMapper.java b/core/src/main/java/com/dite/znpt/mapper/DeptMapper.java new file mode 100644 index 0000000..252b547 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/DeptMapper.java @@ -0,0 +1,32 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.DeptEntity; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/20/周二 10:16 + * @description + */ +public interface DeptMapper extends BaseMapper { + /** + * @Author Bear.G + * @Date 2025/5/20/周二 15:49 + * @description 向上递归查询部门树 + * @param deptName + * @return + **/ + List upwardRecursionSelect(@Param("deptName") String deptName); + + /** + * @Author Bear.G + * @Date 2025/5/20/周二 15:49 + * @description 向下递归查询部门树 + * @param deptId + * @return + **/ + List downwardRecursionSelect(@Param("deptId") String deptId); +} diff --git a/core/src/main/java/com/dite/znpt/mapper/DictMapper.java b/core/src/main/java/com/dite/znpt/mapper/DictMapper.java new file mode 100644 index 0000000..4e071cf --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/DictMapper.java @@ -0,0 +1,18 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.DictEntity; +import com.dite.znpt.domain.vo.DictListReq; +import com.dite.znpt.domain.vo.DictResp; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/06/30 11:38 + * @Description: 字典表数据库访问层 + */ +public interface DictMapper extends BaseMapper { + List queryBySelective(DictListReq dictReq); +} + diff --git a/core/src/main/java/com/dite/znpt/mapper/EquipmentMapper.java b/core/src/main/java/com/dite/znpt/mapper/EquipmentMapper.java new file mode 100644 index 0000000..10ccb80 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/EquipmentMapper.java @@ -0,0 +1,21 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.EquipmentEntity; +import com.dite.znpt.domain.vo.EquipmentListReq; +import com.dite.znpt.domain.vo.EquipmentResp; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author Bear.G + * @date 2025/7/23/周三 17:38 + * @description + */ +public interface EquipmentMapper extends BaseMapper { + + List selectEquipmentResp(@Param("req") EquipmentListReq req); + + EquipmentResp getEquipmentRespByEquipmentId(@Param("equipmentId") String equipmentId); +} diff --git a/core/src/main/java/com/dite/znpt/mapper/EquipmentUseRecordMapper.java b/core/src/main/java/com/dite/znpt/mapper/EquipmentUseRecordMapper.java new file mode 100644 index 0000000..ea8eacc --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/EquipmentUseRecordMapper.java @@ -0,0 +1,20 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.EquipmentUseRecordEntity; +import com.dite.znpt.domain.vo.EquipmentUseRecordListReq; +import com.dite.znpt.domain.vo.EquipmentUseRecordResp; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author Bear.G + * @date 2025/7/23/周三 17:38 + * @description + */ +public interface EquipmentUseRecordMapper extends BaseMapper { + + List selectEquipmentUseRecordResp(@Param("req") EquipmentUseRecordListReq req); + List getEquipmentUseRecordResp(@Param("equipmentId") String equipmentId); +} diff --git a/core/src/main/java/com/dite/znpt/mapper/FileInfoMapper.java b/core/src/main/java/com/dite/znpt/mapper/FileInfoMapper.java new file mode 100644 index 0000000..11947b7 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/FileInfoMapper.java @@ -0,0 +1,13 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.AttachInfoEntity; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 附件信息表数据库访问层 + */ +public interface FileInfoMapper extends BaseMapper { +} + diff --git a/core/src/main/java/com/dite/znpt/mapper/FlowDeployMapper.java b/core/src/main/java/com/dite/znpt/mapper/FlowDeployMapper.java new file mode 100644 index 0000000..02976ca --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/FlowDeployMapper.java @@ -0,0 +1,23 @@ +package com.dite.znpt.mapper; + + +import com.dite.znpt.domain.dto.FlowProcDefDto; + +import java.util.List; + +/** + * 流程定义查询 + * + * @author Tony + * @email + * @date 2022/1/29 5:44 下午 + **/ +public interface FlowDeployMapper { + + /** + * 流程定义列表 + * @param name + * @return + */ + List selectDeployList(String name); +} diff --git a/core/src/main/java/com/dite/znpt/mapper/ImageCollectMapper.java b/core/src/main/java/com/dite/znpt/mapper/ImageCollectMapper.java new file mode 100644 index 0000000..c382df2 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/ImageCollectMapper.java @@ -0,0 +1,13 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.ImageCollectEntity; + +/** + * @Author: gaoxiong + * @Date: 2025/4/24 21:14 + * @Description: + */ +public interface ImageCollectMapper extends BaseMapper { + +} diff --git a/core/src/main/java/com/dite/znpt/mapper/ImageMapper.java b/core/src/main/java/com/dite/znpt/mapper/ImageMapper.java new file mode 100644 index 0000000..5bd57f8 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/ImageMapper.java @@ -0,0 +1,18 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.ImageEntity; +import com.dite.znpt.domain.vo.*; + +import java.util.List; + +/** + * @author Bear.G + * @date 2025/4/24/周四 13:17 + * @description + */ +public interface ImageMapper extends BaseMapper { + List queryImageList(ImageListReq req); + + ImageResp detail(String imageId); +} diff --git a/core/src/main/java/com/dite/znpt/mapper/InspectionReportMapper.java b/core/src/main/java/com/dite/znpt/mapper/InspectionReportMapper.java new file mode 100644 index 0000000..db0d5b6 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/InspectionReportMapper.java @@ -0,0 +1,21 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.InspectionReportEntity; +import com.dite.znpt.domain.vo.InspectionReportListReq; +import com.dite.znpt.domain.vo.InspectionReportListResp; +import com.dite.znpt.domain.vo.InspectionReportResp; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author Bear.G + * @date 2025/7/7/周一 17:34 + * @description + */ +public interface InspectionReportMapper extends BaseMapper { + + List listInspectionReportListResp(@Param("req") InspectionReportListReq req); + InspectionReportResp getInspectionReportResp(@Param("reportId") String reportId); +} diff --git a/core/src/main/java/com/dite/znpt/mapper/InsuranceCompanyMapper.java b/core/src/main/java/com/dite/znpt/mapper/InsuranceCompanyMapper.java new file mode 100644 index 0000000..8035a5b --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/InsuranceCompanyMapper.java @@ -0,0 +1,12 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.InsuranceCompanyEntity; + +/** + * @author Bear.G + * @date 2025/6/26/周四 9:30 + * @description + */ +public interface InsuranceCompanyMapper extends BaseMapper { +} diff --git a/core/src/main/java/com/dite/znpt/mapper/InsuranceInfoMapper.java b/core/src/main/java/com/dite/znpt/mapper/InsuranceInfoMapper.java new file mode 100644 index 0000000..f2cabae --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/InsuranceInfoMapper.java @@ -0,0 +1,12 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.InsuranceInfoEntity; + +/** + * @author Bear.G + * @date 2025/6/26/周四 9:29 + * @description + */ +public interface InsuranceInfoMapper extends BaseMapper { +} diff --git a/core/src/main/java/com/dite/znpt/mapper/InsuranceTypeMapper.java b/core/src/main/java/com/dite/znpt/mapper/InsuranceTypeMapper.java new file mode 100644 index 0000000..a21ddce --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/InsuranceTypeMapper.java @@ -0,0 +1,12 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.InsuranceTypeEntity; + +/** + * @author Bear.G + * @date 2025/6/26/周四 9:29 + * @description + */ +public interface InsuranceTypeMapper extends BaseMapper { +} diff --git a/core/src/main/java/com/dite/znpt/mapper/JobAntiThunderWorkMapper.java b/core/src/main/java/com/dite/znpt/mapper/JobAntiThunderWorkMapper.java new file mode 100644 index 0000000..416df59 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/JobAntiThunderWorkMapper.java @@ -0,0 +1,18 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.job.JobAntiThunderWork; +import com.dite.znpt.domain.vo.job.req.JobAntiThunderWorkReq; +import com.dite.znpt.domain.vo.job.resp.JobAntiThunderWorkResp; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/24 14:52 + * @Description: 表数据库访问层 + */ +public interface JobAntiThunderWorkMapper extends BaseMapper { + List queryBySelective(JobAntiThunderWorkReq jobAntiThunderWorkReq); +} + diff --git a/core/src/main/java/com/dite/znpt/mapper/JobInWorkMapper.java b/core/src/main/java/com/dite/znpt/mapper/JobInWorkMapper.java new file mode 100644 index 0000000..415cb93 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/JobInWorkMapper.java @@ -0,0 +1,18 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.job.JobInWork; +import com.dite.znpt.domain.vo.job.req.JobInWorkReq; +import com.dite.znpt.domain.vo.job.resp.JobInWorkResp; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/24 14:52 + * @Description: 表数据库访问层 + */ +public interface JobInWorkMapper extends BaseMapper { + List queryBySelective(JobInWorkReq gaeaJobInWorkReq); +} + diff --git a/core/src/main/java/com/dite/znpt/mapper/JobInWorkPartsMapper.java b/core/src/main/java/com/dite/znpt/mapper/JobInWorkPartsMapper.java new file mode 100644 index 0000000..29a9305 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/JobInWorkPartsMapper.java @@ -0,0 +1,18 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.job.JobInWorkParts; +import com.dite.znpt.domain.vo.job.req.JobInWorkPartsReq; +import com.dite.znpt.domain.vo.job.resp.JobInWorkPartsResp; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/24 14:52 + * @Description: 表数据库访问层 + */ +public interface JobInWorkPartsMapper extends BaseMapper { + List queryBySelective(JobInWorkPartsReq gaeaJobInWorkPartsReq); +} + diff --git a/core/src/main/java/com/dite/znpt/mapper/JobInfoMapper.java b/core/src/main/java/com/dite/znpt/mapper/JobInfoMapper.java new file mode 100644 index 0000000..3ca0655 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/JobInfoMapper.java @@ -0,0 +1,20 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.job.JobInfo; +import com.dite.znpt.domain.vo.job.req.JobInfoReq; +import com.dite.znpt.domain.vo.job.resp.JobInfoResp; +import com.dite.znpt.domain.vo.job.resp.TurbineStatusResp; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/24 14:52 + * @Description: 表数据库访问层 + */ +public interface JobInfoMapper extends BaseMapper { + List calCrewStatus(@Param("crewIds") List crewIds); +} + diff --git a/core/src/main/java/com/dite/znpt/mapper/JobOutWorkMapper.java b/core/src/main/java/com/dite/znpt/mapper/JobOutWorkMapper.java new file mode 100644 index 0000000..068969e --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/JobOutWorkMapper.java @@ -0,0 +1,19 @@ +package com.dite.znpt.mapper; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.job.JobOutWork; +import com.dite.znpt.domain.vo.job.req.JobOutWorkReq; +import com.dite.znpt.domain.vo.job.resp.JobOutWorkResp; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/24 14:52 + * @Description: 表数据库访问层 + */ +public interface JobOutWorkMapper extends BaseMapper { + List queryBySelective(JobOutWorkReq gaeaJobOutWorkReq); +} + diff --git a/core/src/main/java/com/dite/znpt/mapper/JobSummaryWorkMapper.java b/core/src/main/java/com/dite/znpt/mapper/JobSummaryWorkMapper.java new file mode 100644 index 0000000..a8c1598 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/JobSummaryWorkMapper.java @@ -0,0 +1,18 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.job.JobSummaryWork; +import com.dite.znpt.domain.vo.job.req.JobSummaryWorkReq; +import com.dite.znpt.domain.vo.job.resp.JobSummaryWorkResp; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/24 14:52 + * @Description: 表数据库访问层 + */ +public interface JobSummaryWorkMapper extends BaseMapper { + List queryBySelective(JobSummaryWorkReq gaeaJobSummaryWorkReq); +} + diff --git a/core/src/main/java/com/dite/znpt/mapper/MaintainSuggestionMapper.java b/core/src/main/java/com/dite/znpt/mapper/MaintainSuggestionMapper.java new file mode 100644 index 0000000..ed0e581 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/MaintainSuggestionMapper.java @@ -0,0 +1,13 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.MaintainSuggestionEntity; + +/** + * @Author: gaoxiong + * @Date: 2025/7/7 22:22 + * @Description: + */ +public interface MaintainSuggestionMapper extends BaseMapper { + +} diff --git a/core/src/main/java/com/dite/znpt/mapper/MenuMapper.java b/core/src/main/java/com/dite/znpt/mapper/MenuMapper.java new file mode 100644 index 0000000..be4a879 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/MenuMapper.java @@ -0,0 +1,33 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.DeptEntity; +import com.dite.znpt.domain.entity.MenuEntity; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/21/周三 10:16 + * @description + */ +public interface MenuMapper extends BaseMapper { + /** + * @Author Bear.G + * @Date 2025/5/20/周二 15:49 + * @description 向上递归查询菜单树 + * @param menuName + * @return + **/ + List upwardRecursionSelect(@Param("menuName") String menuName, @Param("terminalType") String terminalType); + + /** + * @Author Bear.G + * @Date 2025/5/20/周二 15:49 + * @description 向下递归查询菜单树 + * @param menuId + * @return + **/ + List downwardRecursionSelect(@Param("menuId") String menuId, @Param("terminalType") String terminalType); +} diff --git a/core/src/main/java/com/dite/znpt/mapper/ModelConfigMapper.java b/core/src/main/java/com/dite/znpt/mapper/ModelConfigMapper.java new file mode 100644 index 0000000..18c04a1 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/ModelConfigMapper.java @@ -0,0 +1,18 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.ModelConfigEntity; +import com.dite.znpt.domain.vo.ModelConfigListReq; +import com.dite.znpt.domain.vo.ModelConfigResp; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/07/02 20:57 + * @Description: 模型配置表数据库访问层 + */ +public interface ModelConfigMapper extends BaseMapper { + List queryBySelective(ModelConfigListReq modelConfigReq); +} + diff --git a/core/src/main/java/com/dite/znpt/mapper/PartMapper.java b/core/src/main/java/com/dite/znpt/mapper/PartMapper.java new file mode 100644 index 0000000..bcbb2cf --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/PartMapper.java @@ -0,0 +1,18 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.PartEntity; +import com.dite.znpt.domain.vo.PartListReq; +import com.dite.znpt.domain.vo.PartListResp; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 部件表数据库访问层 + */ +public interface PartMapper extends BaseMapper { + List queryBySelective(PartListReq partReq); +} + diff --git a/core/src/main/java/com/dite/znpt/mapper/PostMapper.java b/core/src/main/java/com/dite/znpt/mapper/PostMapper.java new file mode 100644 index 0000000..9c2ddb4 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/PostMapper.java @@ -0,0 +1,12 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.PostEntity; + +/** + * @author Bear.G + * @date 2025/5/20/周二 10:16 + * @description + */ +public interface PostMapper extends BaseMapper { +} diff --git a/core/src/main/java/com/dite/znpt/mapper/ProjectBudgetInfoMapper.java b/core/src/main/java/com/dite/znpt/mapper/ProjectBudgetInfoMapper.java new file mode 100644 index 0000000..306663c --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/ProjectBudgetInfoMapper.java @@ -0,0 +1,20 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.ProjectBudgetInfoEntity; +import com.dite.znpt.domain.vo.ProjectBudgetInfoListReq; +import com.dite.znpt.domain.vo.ProjectBudgetInfoListResp; +import com.dite.znpt.domain.vo.ProjectBudgetInfoResp; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/07/17 21:58 + * @Description: 项目预算信息表数据库访问层 + */ +public interface ProjectBudgetInfoMapper extends BaseMapper { + List queryBySelective(ProjectBudgetInfoListReq projectBudgetInfoReq); + List detailByProjectId(String projectId); +} + diff --git a/core/src/main/java/com/dite/znpt/mapper/ProjectMapper.java b/core/src/main/java/com/dite/znpt/mapper/ProjectMapper.java new file mode 100644 index 0000000..c1bebbf --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/ProjectMapper.java @@ -0,0 +1,20 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.ProjectEntity; +import com.dite.znpt.domain.vo.ProjectListReq; +import com.dite.znpt.domain.vo.ProjectListResp; +import com.dite.znpt.domain.vo.ProjectResp; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 项目信息表数据库访问层 + */ +public interface ProjectMapper extends BaseMapper { + List queryBySelective(ProjectListReq projectReq); +} + diff --git a/core/src/main/java/com/dite/znpt/mapper/ProjectTaskGroupMapper.java b/core/src/main/java/com/dite/znpt/mapper/ProjectTaskGroupMapper.java new file mode 100644 index 0000000..fd14acc --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/ProjectTaskGroupMapper.java @@ -0,0 +1,19 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.ProjectTaskGroupEntity; +import com.dite.znpt.domain.vo.ProjectTaskGroupListReq; +import com.dite.znpt.domain.vo.ProjectTaskGroupResp; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/06/24 16:44 + * @Description: 项目任务组信息表数据库访问层 + */ +public interface ProjectTaskGroupMapper extends BaseMapper { + List queryBySelective(ProjectTaskGroupListReq projectTaskGroupReq); +} + diff --git a/core/src/main/java/com/dite/znpt/mapper/ProjectTaskMapper.java b/core/src/main/java/com/dite/znpt/mapper/ProjectTaskMapper.java new file mode 100644 index 0000000..231d82f --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/ProjectTaskMapper.java @@ -0,0 +1,21 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.ProjectTaskEntity; +import com.dite.znpt.domain.vo.ProjectTaskListReq; +import com.dite.znpt.domain.vo.ProjectTaskResp; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/06/24 16:44 + * @Description: 项目任务信息表数据库访问层 + */ +public interface ProjectTaskMapper extends BaseMapper { + List queryBySelective(ProjectTaskListReq projectTaskReq); + + List listAllParents(String taskId); +} + diff --git a/core/src/main/java/com/dite/znpt/mapper/RoleMapper.java b/core/src/main/java/com/dite/znpt/mapper/RoleMapper.java new file mode 100644 index 0000000..d586f11 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/RoleMapper.java @@ -0,0 +1,12 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.RoleEntity; + +/** + * @author Bear.G + * @date 2025/5/21/周三 10:16 + * @description + */ +public interface RoleMapper extends BaseMapper { +} diff --git a/core/src/main/java/com/dite/znpt/mapper/RoleMenuMapper.java b/core/src/main/java/com/dite/znpt/mapper/RoleMenuMapper.java new file mode 100644 index 0000000..8e4e567 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/RoleMenuMapper.java @@ -0,0 +1,12 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.RoleMenuEntity; + +/** + * @author Bear.G + * @date 2025/5/21/周三 10:17 + * @description + */ +public interface RoleMenuMapper extends BaseMapper { +} diff --git a/core/src/main/java/com/dite/znpt/mapper/TConstructionMapper.java b/core/src/main/java/com/dite/znpt/mapper/TConstructionMapper.java new file mode 100644 index 0000000..4a15ec0 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/TConstructionMapper.java @@ -0,0 +1,19 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.TConstructionEntity; +import com.dite.znpt.domain.vo.TConstructionListReq; +import com.dite.znpt.domain.vo.TConstructionResp; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 施工信息表数据库访问层 + */ +public interface TConstructionMapper extends BaseMapper { + List queryBySelective(TConstructionListReq tConstructionReq); +} + diff --git a/core/src/main/java/com/dite/znpt/mapper/TurbineMapper.java b/core/src/main/java/com/dite/znpt/mapper/TurbineMapper.java new file mode 100644 index 0000000..e834f23 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/TurbineMapper.java @@ -0,0 +1,21 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.TurbineEntity; +import com.dite.znpt.domain.vo.TurbineInfoResp; +import com.dite.znpt.domain.vo.TurbineListReq; +import com.dite.znpt.domain.vo.TurbineListResp; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 机组-项目关联表数据库访问层 + */ +public interface TurbineMapper extends BaseMapper { + List queryBySelective(TurbineListReq turbineReq); + List listTurbineInfo(TurbineListReq turbineReq); + TurbineInfoResp getTurbineInfo(String turbineId); +} + diff --git a/core/src/main/java/com/dite/znpt/mapper/UserMapper.java b/core/src/main/java/com/dite/znpt/mapper/UserMapper.java new file mode 100644 index 0000000..ac20a77 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/UserMapper.java @@ -0,0 +1,19 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.UserEntity; +import com.dite.znpt.domain.vo.UserListReq; +import com.dite.znpt.domain.vo.UserListResp; +import com.dite.znpt.domain.vo.UserResp; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 用户信息表数据库访问层 + */ +public interface UserMapper extends BaseMapper { + List queryBySelective(UserListReq req); +} + diff --git a/core/src/main/java/com/dite/znpt/mapper/UserPostMapper.java b/core/src/main/java/com/dite/znpt/mapper/UserPostMapper.java new file mode 100644 index 0000000..92fb7b2 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/UserPostMapper.java @@ -0,0 +1,12 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.UserPostEntity; + +/** + * @author Bear.G + * @date 2025/5/21/周三 10:15 + * @description + */ +public interface UserPostMapper extends BaseMapper { +} diff --git a/core/src/main/java/com/dite/znpt/mapper/UserRoleMapper.java b/core/src/main/java/com/dite/znpt/mapper/UserRoleMapper.java new file mode 100644 index 0000000..8cbb15c --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/UserRoleMapper.java @@ -0,0 +1,12 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.UserRoleEntity; + +/** + * @author Bear.G + * @date 2025/5/21/周三 10:16 + * @description + */ +public interface UserRoleMapper extends BaseMapper { +} diff --git a/core/src/main/java/com/dite/znpt/mapper/VideoFileInfoMapper.java b/core/src/main/java/com/dite/znpt/mapper/VideoFileInfoMapper.java new file mode 100644 index 0000000..f6623cd --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/VideoFileInfoMapper.java @@ -0,0 +1,19 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.VideoFileInfoEntity; +import com.dite.znpt.domain.vo.VideoFileInfoListReq; +import com.dite.znpt.domain.vo.VideoFileInfoResp; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/06/09 09:45 + * @Description: 视频文件信息表数据库访问层 + */ +public interface VideoFileInfoMapper extends BaseMapper { + List queryBySelective(VideoFileInfoListReq videoFileInfoReq); +} + diff --git a/core/src/main/java/com/dite/znpt/mapper/WeatherTypeMapper.java b/core/src/main/java/com/dite/znpt/mapper/WeatherTypeMapper.java new file mode 100644 index 0000000..c9c3045 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/WeatherTypeMapper.java @@ -0,0 +1,19 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.WeatherTypeEntity; +import com.dite.znpt.domain.vo.WeatherTypeListReq; +import com.dite.znpt.domain.vo.WeatherTypeResp; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 天气类型表数据库访问层 + */ +public interface WeatherTypeMapper extends BaseMapper { + List queryBySelective(WeatherTypeListReq weatherTypeReq); +} + diff --git a/core/src/main/java/com/dite/znpt/mapper/WorkShiftMapper.java b/core/src/main/java/com/dite/znpt/mapper/WorkShiftMapper.java new file mode 100644 index 0000000..26e8cf9 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/WorkShiftMapper.java @@ -0,0 +1,12 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.WorkShiftEntity; + +/** + * @author Bear.G + * @date 2025/6/30/周一 10:26 + * @description + */ +public interface WorkShiftMapper extends BaseMapper { +} diff --git a/core/src/main/java/com/dite/znpt/service/AttachInfoService.java b/core/src/main/java/com/dite/znpt/service/AttachInfoService.java new file mode 100644 index 0000000..3c4987f --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/AttachInfoService.java @@ -0,0 +1,65 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.AttachInfoEntity; +import com.dite.znpt.domain.vo.AttachInfoReq; +import com.dite.znpt.enums.AttachBusinessTypeEnum; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 附件信息表服务接口 + */ +public interface AttachInfoService extends IService { + + /** + * 功能描述:查询附件信息列表 + * + * @return {@link List }<{@link AttachInfoEntity }> + * @author huise23 + * @date 2025/04/11 23:17 + **/ + List listByBusinessIds(List businessIds, String businessType); + + /** + * 功能描述:新增附件信息 + * + * @param businessType 业务类型 + * @author huise23 + * @date 2025/04/11 23:17 + **/ + List saveData(String businessType, AttachInfoReq infoReq, MultipartFile[] files); + + + void download(String attachId, HttpServletResponse response) throws Exception; + /** + * 功能描述:删除附件信息 + * + * @author huise23 + * @date 2025/04/11 23:17 + **/ + void deleteByBusinessId(String businessId, AttachBusinessTypeEnum typeEnum); + + void deleteByAttachInfoId(String attachIdInfoId); + + /** + * 功能描述:删除附件信息 + * + * @author huise23 + * @date 2025/04/11 23:17 + **/ + void deleteByBusinessIds(List businessIds, AttachBusinessTypeEnum typeEnum); + + /** + * 功能描述:更新附件关联的业务id + * + * @author huise23 + * @date 2025/04/11 23:17 + **/ + void updateBusinessIdByAttachIds(String businessId, List attachIds, AttachBusinessTypeEnum typeEnum); +} + diff --git a/core/src/main/java/com/dite/znpt/service/AttendanceRecordService.java b/core/src/main/java/com/dite/znpt/service/AttendanceRecordService.java new file mode 100644 index 0000000..99bb6eb --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/AttendanceRecordService.java @@ -0,0 +1,23 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.AttendanceRecordEntity; +import com.dite.znpt.domain.vo.AttendanceRecordReq; +import com.dite.znpt.domain.vo.AttendanceRecordResp; +import io.swagger.models.auth.In; + +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/7/21 21:20 + * @Description: + */ +public interface AttendanceRecordService extends IService { + + void save(AttendanceRecordReq req); + + List listToday(String userId); + + List listMonth(String userId, Integer year, Integer month); +} diff --git a/core/src/main/java/com/dite/znpt/service/AudioFileInfoService.java b/core/src/main/java/com/dite/znpt/service/AudioFileInfoService.java new file mode 100644 index 0000000..4c3234d --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/AudioFileInfoService.java @@ -0,0 +1,68 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.AudioFileInfoEntity; +import com.dite.znpt.domain.vo.AudioFileInfoListReq; +import com.dite.znpt.domain.vo.AudioFileInfoResp; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/06/23 13:39 + * @Description: 音频文件信息表服务接口 + */ +public interface AudioFileInfoService extends IService { + + /** + * 功能描述:查询音频文件信息列表 + * + * @param audioFileInfoReq 音频文件信息 + * @return {@link List }<{@link AudioFileInfoEntity }> + * @author huise23 + * @date 2025/06/23 13:39 + **/ + List selectList(AudioFileInfoListReq audioFileInfoReq); + + /** + * 功能描述:查询单条音频文件信息 + * + * @param audioId 音频文件信息Id + * @return {@link AudioFileInfoResp } + * @author huise23 + * @date 2025/06/23 13:39 + **/ + AudioFileInfoResp selectById(String audioId); + + /** + * 功能描述:查询单条音频文件信息 + * + * @param imageIds 图像id列表 + * @return {@link List } + * @author huise23 + * @date 2025/06/23 13:39 + **/ + List selectByImageIds(List imageIds); + + /** + * 功能描述:删除音频文件信息 + * + * @param audioId 音频文件信息Id + * @author huise23 + * @date 2025/06/23 13:39 + **/ + void deleteById(String audioId); + + /** + * 功能描述:批量上传 + * + * @param imageId 图像id + * @param files 文件 + * @return {@link List }<{@link AudioFileInfoResp }> + * @author cuizhibin + * @date 2025/06/23 13:57 + **/ + List batchUpload(String imageId, MultipartFile[] files); +} + diff --git a/core/src/main/java/com/dite/znpt/service/AuthService.java b/core/src/main/java/com/dite/znpt/service/AuthService.java new file mode 100644 index 0000000..68a972d --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/AuthService.java @@ -0,0 +1,28 @@ +package com.dite.znpt.service; + +import cn.dev33.satoken.stp.SaTokenInfo; +import cn.hutool.core.lang.tree.Tree; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.vo.LoginReq; +import com.dite.znpt.domain.vo.ModifyPasswordReq; +import com.dite.znpt.domain.vo.UserInfo; + +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/23/周五 14:31 + * @description + */ +public interface AuthService { + + Result doLogin(LoginReq req); + + void modifyPassword(ModifyPasswordReq req); + + void doLogout(); + + List> getMenuInfo(String userId); + + UserInfo getUserInfo(String userId); +} diff --git a/core/src/main/java/com/dite/znpt/service/CertificationService.java b/core/src/main/java/com/dite/znpt/service/CertificationService.java new file mode 100644 index 0000000..b777a16 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/CertificationService.java @@ -0,0 +1,24 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.CertificationEntity; +import com.dite.znpt.domain.vo.CertificationListReq; +import com.dite.znpt.domain.vo.CertificationReq; +import com.dite.znpt.domain.vo.CertificationResp; + +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/27/周二 15:22 + * @description + */ +public interface CertificationService extends IService { + + List page(CertificationListReq req); + List list(CertificationListReq req); + CertificationResp detail(String certificationId); + void save(CertificationReq req); + void update(String certificationId, CertificationReq req); + void deleteById(String certificationId); +} diff --git a/core/src/main/java/com/dite/znpt/service/CheckSchemeService.java b/core/src/main/java/com/dite/znpt/service/CheckSchemeService.java new file mode 100644 index 0000000..06274c0 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/CheckSchemeService.java @@ -0,0 +1,23 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.CheckSchemeEntity; +import com.dite.znpt.domain.vo.CheckSchemeReq; +import com.dite.znpt.domain.vo.CheckSchemeResp; + +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/7/9 23:38 + * @Description: + */ +public interface CheckSchemeService extends IService { + List page(List checkMethods); + List list(List checkMethods); + CheckSchemeResp detail(String checkSchemeId); + void save(CheckSchemeReq req); + void update(String checkSchemeId, CheckSchemeReq req); + void deleteById(String checkSchemeId); + +} diff --git a/core/src/main/java/com/dite/znpt/service/ContractService.java b/core/src/main/java/com/dite/znpt/service/ContractService.java new file mode 100644 index 0000000..fcb0f79 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/ContractService.java @@ -0,0 +1,65 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.ContractEntity; +import com.dite.znpt.domain.vo.ContractListReq; +import com.dite.znpt.domain.vo.ContractResp; +import com.dite.znpt.domain.vo.ContractReq; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/07/21 20:29 + * @Description: 合同表服务接口 + */ +public interface ContractService extends IService { + + /** + * 功能描述:查询合同列表 + * + * @param contractReq 合同 + * @return {@link List }<{@link ContractResp }> + * @author huise23 + * @date 2025/07/21 20:29 + **/ + List selectList(ContractListReq contractReq); + + /** + * 功能描述:查询单条合同 + * + * @param contractId 合同Id + * @return {@link ContractResp } + * @author huise23 + * @date 2025/07/21 20:29 + **/ + ContractResp selectById(String contractId); + + /** + * 功能描述:新增合同 + * + * @param contractReq 合同 + * @author huise23 + * @date 2025/07/21 20:29 + **/ + void saveData(ContractReq contractReq); + + /** + * 功能描述:更新合同 + * + * @param contractReq 合同 + * @author huise23 + * @date 2025/07/21 20:29 + **/ + void updateData(ContractReq contractReq); + + /** + * 功能描述:删除合同 + * + * @param contractId 合同Id + * @author huise23 + * @date 2025/07/21 20:29 + **/ + void deleteById(String contractId); +} + diff --git a/core/src/main/java/com/dite/znpt/service/ContractSettlementService.java b/core/src/main/java/com/dite/znpt/service/ContractSettlementService.java new file mode 100644 index 0000000..ecba511 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/ContractSettlementService.java @@ -0,0 +1,47 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.ContractSettlementEntity; +import com.dite.znpt.domain.vo.ContractSettlementListReq; +import com.dite.znpt.domain.vo.ContractSettlementResp; +import com.dite.znpt.domain.vo.ContractSettlementReq; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/07/21 21:10 + * @Description: 合同结算表服务接口 + */ +public interface ContractSettlementService extends IService { + + /** + * 功能描述:查询合同结算列表 + * + * @param contractSettlementReq 合同结算 + * @return {@link List }<{@link ContractSettlementResp }> + * @author huise23 + * @date 2025/07/21 21:10 + **/ + List selectList(ContractSettlementListReq contractSettlementReq); + + /** + * 功能描述:查询单条合同结算 + * + * @param settlementId 合同结算Id + * @return {@link ContractSettlementResp } + * @author huise23 + * @date 2025/07/21 21:10 + **/ + ContractSettlementResp selectById(String settlementId); + + /** + * 功能描述:新增合同结算 + * + * @param contractSettlementReq 合同结算 + * @author huise23 + * @date 2025/07/21 21:10 + **/ + void saveData(ContractSettlementReq contractSettlementReq); +} + diff --git a/core/src/main/java/com/dite/znpt/service/DefectService.java b/core/src/main/java/com/dite/znpt/service/DefectService.java new file mode 100644 index 0000000..c2e9eef --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/DefectService.java @@ -0,0 +1,86 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.DefectEntity; +import com.dite.znpt.domain.vo.*; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 缺陷记录表服务接口 + */ +public interface DefectService extends IService { + + /** + * 功能描述:查询缺陷记录列表 + * + * @param req 缺陷记录 + * @return {@link List }<{@link DefectEntity }> + * @author huise23 + * @date 2025/04/11 23:17 + **/ + List page(DefectListReq req); + + List list(DefectListReq req); + + /** + * 功能描述:查询单条缺陷记录 + * + * @param defectId 缺陷记录Id + * @return {@link DefectResp } + * @author huise23 + * @date 2025/04/11 23:17 + **/ + DefectResp detail(String defectId); + + /** + * 功能描述:新增缺陷记录 + * + * @param imageId 缺陷记录 + * @param req 缺陷记录 + * @author huise23 + * @date 2025/04/11 23:17 + **/ + void save(String imageId, DefectReq req); + + /** + * 功能描述:新增外部工作缺陷记录 + * + * @param list + * @author huise23 + * @date 2025/04/11 23:17 + **/ + List saveOutWorkDefect(List list); + + /** + * 功能描述:更新缺陷记录 + * + * @param defectId 缺陷记录 + * @param req 缺陷记录 + * @author huise23 + * @date 2025/04/11 23:17 + **/ + void update(String defectId, DefectReq req); + + /** + * 功能描述:删除缺陷记录 + * + * @param defectId 缺陷记录Id + * @author huise23 + * @date 2025/04/11 23:17 + **/ + void deleteById(String defectId); + + /** + * 功能描述:缺陷自动检测 + * + * @param markReq 马克请求类 + * @return {@link List }<{@link DefectResp }> + * @author cuizhibin + * @date 2025/07/04 14:53 + **/ + List detect(DefectMarkReq markReq); +} + diff --git a/core/src/main/java/com/dite/znpt/service/DeptService.java b/core/src/main/java/com/dite/znpt/service/DeptService.java new file mode 100644 index 0000000..fa87e6b --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/DeptService.java @@ -0,0 +1,27 @@ +package com.dite.znpt.service; + +import cn.hutool.core.lang.tree.Tree; +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.DeptEntity; +import com.dite.znpt.domain.vo.DeptReq; +import com.dite.znpt.domain.vo.DeptResp; + +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/20/周二 10:14 + * @description + */ +public interface DeptService extends IService { + + List> tree(String deptName); + + DeptResp detail(String deptId); + + void save(DeptReq req); + + void update(String deptId, DeptReq req); + + void deleteById(String deptId); +} diff --git a/core/src/main/java/com/dite/znpt/service/DictService.java b/core/src/main/java/com/dite/znpt/service/DictService.java new file mode 100644 index 0000000..ad952a9 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/DictService.java @@ -0,0 +1,65 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.DictEntity; +import com.dite.znpt.domain.vo.DictListReq; +import com.dite.znpt.domain.vo.DictReq; +import com.dite.znpt.domain.vo.DictResp; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/06/30 11:38 + * @Description: 字典表服务接口 + */ +public interface DictService extends IService { + + /** + * 功能描述:查询字典列表 + * + * @param dictReq 字典 + * @return {@link List }<{@link DictResp }> + * @author huise23 + * @date 2025/06/30 11:38 + **/ + List selectList(DictListReq dictReq); + + /** + * 功能描述:查询单条字典 + * + * @param dictId 字典Id + * @return {@link DictResp } + * @author huise23 + * @date 2025/06/30 11:38 + **/ + DictResp selectById(String dictId); + + /** + * 功能描述:新增字典 + * + * @param dictReq 字典 + * @author huise23 + * @date 2025/06/30 11:38 + **/ + void saveData(DictReq dictReq); + + /** + * 功能描述:更新字典 + * + * @param dictReq 字典 + * @author huise23 + * @date 2025/06/30 11:38 + **/ + void updateData(DictReq dictReq); + + /** + * 功能描述:删除字典 + * + * @param dictId 字典Id + * @author huise23 + * @date 2025/06/30 11:38 + **/ + void deleteById(String dictId); +} + diff --git a/core/src/main/java/com/dite/znpt/service/EquipmentService.java b/core/src/main/java/com/dite/znpt/service/EquipmentService.java new file mode 100644 index 0000000..04d023b --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/EquipmentService.java @@ -0,0 +1,24 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.EquipmentEntity; +import com.dite.znpt.domain.vo.EquipmentListReq; +import com.dite.znpt.domain.vo.EquipmentReq; +import com.dite.znpt.domain.vo.EquipmentResp; +import com.dite.znpt.domain.vo.EquipmentUseRecordReq; + +import java.util.List; + +/** + * @author Bear.G + * @date 2025/7/23/周三 17:39 + * @description + */ +public interface EquipmentService extends IService { + List page(EquipmentListReq req); + List list(EquipmentListReq req); + EquipmentResp detail(String equipmentId); + void save(EquipmentReq req); + void update(String equipmentId, EquipmentReq req); + void deleteById(String equipmentId); +} diff --git a/core/src/main/java/com/dite/znpt/service/EquipmentUseRecordService.java b/core/src/main/java/com/dite/znpt/service/EquipmentUseRecordService.java new file mode 100644 index 0000000..00a5528 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/EquipmentUseRecordService.java @@ -0,0 +1,22 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.EquipmentUseRecordEntity; +import com.dite.znpt.domain.vo.EquipmentUseRecordListReq; +import com.dite.znpt.domain.vo.EquipmentUseRecordReq; +import com.dite.znpt.domain.vo.EquipmentUseRecordResp; + +import java.util.List; + +/** + * @author Bear.G + * @date 2025/7/23/周三 17:40 + * @description + */ +public interface EquipmentUseRecordService extends IService { + List page(EquipmentUseRecordListReq req); + List list(EquipmentUseRecordListReq req); + List detail(String equipmentId); + void borrowEquipment(String equipmentId, EquipmentUseRecordReq req); + void returnEquipment(String userRecordId, EquipmentUseRecordReq req); +} diff --git a/core/src/main/java/com/dite/znpt/service/ImageCollectService.java b/core/src/main/java/com/dite/znpt/service/ImageCollectService.java new file mode 100644 index 0000000..1c961bf --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/ImageCollectService.java @@ -0,0 +1,14 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.ImageCollectEntity; +import com.dite.znpt.domain.vo.ImageCollectReq; + +/** + * @Author: gaoxiong + * @Date: 2025/4/24 21:20 + * @Description: + */ +public interface ImageCollectService extends IService { + void save(String partId, ImageCollectReq req); +} diff --git a/core/src/main/java/com/dite/znpt/service/ImageService.java b/core/src/main/java/com/dite/znpt/service/ImageService.java new file mode 100644 index 0000000..19653c5 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/ImageService.java @@ -0,0 +1,56 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.ImageEntity; +import com.dite.znpt.domain.vo.*; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/4/24/周四 13:14 + * @description + */ +public interface ImageService extends IService { + + List list(ImageListReq req); + + List page(ImageListReq req); + + List batchSaveByImageSimpleReq(List list); + + ImageResp detail(String imageId); + + List batchUploadDefectImage(String partId, String imageSource, ImageCollectReq collectReq, MultipartFile[] files); + + List uploadProjectBatch(String projectId, String imageSource, MultipartFile[] files); + + List batchUploadCommonImage(String imageSource, ImageWorkReq imageWorkReq, MultipartFile[] file) throws IOException; + + void delete(String imageId); + + /** + * 分页列出APP上传的图片,并关联查询机组信息 + * @return {@link List }<{@link AppImageResp }> + */ + List listAppUploadImages(); + + /** + * 功能描述:链接APP上传的图像到部件 + * + * @author cuizhibin + * @date 2025/06/06 09:44 + **/ + void linkAppImagesToPart(AppImageToPartReq partReq); + + /** + * 功能描述:审核图片 + * + * @param imageIds 图片id列表 + * @author cuizhibin + * @date 2025/07/16 15:28 + **/ + void reviewImages(List imageIds); +} diff --git a/core/src/main/java/com/dite/znpt/service/InspectionReportService.java b/core/src/main/java/com/dite/znpt/service/InspectionReportService.java new file mode 100644 index 0000000..7b75565 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/InspectionReportService.java @@ -0,0 +1,41 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.InspectionReportEntity; +import com.dite.znpt.domain.vo.InspectionReportListReq; +import com.dite.znpt.domain.vo.InspectionReportListResp; +import com.dite.znpt.domain.vo.InspectionReportReq; +import com.dite.znpt.domain.vo.InspectionReportResp; + +import java.util.List; + +/** + * @author Bear.G + * @date 2025/7/7/周一 17:42 + * @description + */ +public interface InspectionReportService extends IService { + List page(InspectionReportListReq req); + List list(InspectionReportListReq req); + InspectionReportResp detail(String reportId); + void save(InspectionReportReq req); + void update(String reportId, InspectionReportReq req); + + /** + * 功能描述:报告生成器 + * + * @param turbineId 机组id + * @author cuizhibin + * @date 2025/07/17 10:49 + **/ + void reportGenerator(String turbineId); + + /** + * 功能描述:发布 + * + * @param reportId 报告id + * @author cuizhibin + * @date 2025/07/17 21:25 + **/ + void publish(String reportId); +} diff --git a/core/src/main/java/com/dite/znpt/service/InsuranceCompanyService.java b/core/src/main/java/com/dite/znpt/service/InsuranceCompanyService.java new file mode 100644 index 0000000..220f2a9 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/InsuranceCompanyService.java @@ -0,0 +1,23 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.InsuranceCompanyEntity; +import com.dite.znpt.domain.vo.InsuranceCompanyListReq; +import com.dite.znpt.domain.vo.InsuranceCompanyReq; +import com.dite.znpt.domain.vo.InsuranceCompanyResp; + +import java.util.List; + +/** + * @author Bear.G + * @date 2025/6/26/周四 9:28 + * @description + */ +public interface InsuranceCompanyService extends IService { + List page(InsuranceCompanyListReq req); + List list(InsuranceCompanyListReq req); + InsuranceCompanyResp detail(String insuranceCompanyId); + void save(InsuranceCompanyReq req); + void update(String insuranceCompanyId, InsuranceCompanyReq req); + void deleteById(String insuranceCompanyId); +} diff --git a/core/src/main/java/com/dite/znpt/service/InsuranceInfoService.java b/core/src/main/java/com/dite/znpt/service/InsuranceInfoService.java new file mode 100644 index 0000000..e556a26 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/InsuranceInfoService.java @@ -0,0 +1,27 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.InsuranceInfoEntity; +import com.dite.znpt.domain.vo.InsuranceAttachResp; +import com.dite.znpt.domain.vo.InsuranceInfoListReq; +import com.dite.znpt.domain.vo.InsuranceInfoReq; +import com.dite.znpt.domain.vo.InsuranceInfoResp; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; + +/** + * @author Bear.G + * @date 2025/6/26/周四 9:28 + * @description + */ +public interface InsuranceInfoService extends IService { + List page(InsuranceInfoListReq req); + List list(InsuranceInfoListReq req); + List pageAttach(InsuranceInfoListReq req); + List listAttach(InsuranceInfoListReq req); + InsuranceInfoResp detail(String insuranceInfoId); + void save(InsuranceInfoReq req); + void update(String insuranceInfoId, InsuranceInfoReq req); + void deleteById(String insuranceInfoId); +} diff --git a/core/src/main/java/com/dite/znpt/service/InsuranceTypeService.java b/core/src/main/java/com/dite/znpt/service/InsuranceTypeService.java new file mode 100644 index 0000000..8402d28 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/InsuranceTypeService.java @@ -0,0 +1,23 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.InsuranceTypeEntity; +import com.dite.znpt.domain.vo.InsuranceTypeReq; +import com.dite.znpt.domain.vo.InsuranceTypeResp; + +import java.util.List; + +/** + * @author Bear.G + * @date 2025/6/26/周四 9:28 + * @description + */ +public interface InsuranceTypeService extends IService { + + List page(String insuranceTypeName); + List list(String insuranceTypeName); + InsuranceTypeResp detail(String insuranceTypeId); + void save(InsuranceTypeReq req); + void update(String insuranceTypeId, InsuranceTypeReq req); + void deleteById(String insuranceTypeId); +} diff --git a/core/src/main/java/com/dite/znpt/service/MaintainSuggestionService.java b/core/src/main/java/com/dite/znpt/service/MaintainSuggestionService.java new file mode 100644 index 0000000..af96086 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/MaintainSuggestionService.java @@ -0,0 +1,23 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.MaintainSuggestionEntity; +import com.dite.znpt.domain.vo.MaintainSuggestionReq; +import com.dite.znpt.domain.vo.MaintainSuggestionResp; + +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/7/7 22:24 + * @Description: + */ +public interface MaintainSuggestionService extends IService { + + List page(String defectLevel, String defectType); + List list(String defectLevel, String defectType); + MaintainSuggestionResp detail(String suggestionId); + void save(MaintainSuggestionReq req); + void update(String suggestionId, MaintainSuggestionReq req); + void deleteById(String suggestionId); +} diff --git a/core/src/main/java/com/dite/znpt/service/MenuService.java b/core/src/main/java/com/dite/znpt/service/MenuService.java new file mode 100644 index 0000000..1cfd010 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/MenuService.java @@ -0,0 +1,23 @@ +package com.dite.znpt.service; + +import cn.hutool.core.lang.tree.Tree; +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.MenuEntity; +import com.dite.znpt.domain.vo.MenuReq; +import com.dite.znpt.domain.vo.MenuResp; + +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/21/周三 10:24 + * @description + */ +public interface MenuService extends IService { + + List> tree(String menuName, String terminalType); + MenuResp detail(String menuId); + void save(MenuReq req); + void update(String menuId, MenuReq req); + void deleteById(String menuId); +} diff --git a/core/src/main/java/com/dite/znpt/service/ModelConfigService.java b/core/src/main/java/com/dite/znpt/service/ModelConfigService.java new file mode 100644 index 0000000..1ae7fb5 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/ModelConfigService.java @@ -0,0 +1,65 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.ModelConfigEntity; +import com.dite.znpt.domain.vo.ModelConfigListReq; +import com.dite.znpt.domain.vo.ModelConfigReq; +import com.dite.znpt.domain.vo.ModelConfigResp; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/07/02 20:57 + * @Description: 模型配置表服务接口 + */ +public interface ModelConfigService extends IService { + + /** + * 功能描述:查询列表 + * + * @param modelConfigReq + * @return {@link List }<{@link ModelConfigResp }> + * @author huise23 + * @date 2025/07/02 20:57 + **/ + List selectList(ModelConfigListReq modelConfigReq); + + /** + * 功能描述:查询单条 + * + * @param modelId Id + * @return {@link ModelConfigResp } + * @author huise23 + * @date 2025/07/02 20:57 + **/ + ModelConfigResp selectById(String modelId); + + /** + * 功能描述:新增 + * + * @param modelConfigReq + * @author huise23 + * @date 2025/07/02 20:57 + **/ + void saveData(ModelConfigReq modelConfigReq); + + /** + * 功能描述:更新 + * + * @param modelConfigReq + * @author huise23 + * @date 2025/07/02 20:57 + **/ + void updateData(ModelConfigReq modelConfigReq); + + /** + * 功能描述:删除 + * + * @param modelId Id + * @author huise23 + * @date 2025/07/02 20:57 + **/ + void deleteById(String modelId); +} + diff --git a/core/src/main/java/com/dite/znpt/service/PartService.java b/core/src/main/java/com/dite/znpt/service/PartService.java new file mode 100644 index 0000000..19c72ff --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/PartService.java @@ -0,0 +1,92 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.PartEntity; +import com.dite.znpt.domain.vo.PartListReq; +import com.dite.znpt.domain.vo.PartListResp; +import com.dite.znpt.domain.vo.PartReq; +import com.dite.znpt.domain.vo.PartResp; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 部件表服务接口 + */ +public interface PartService extends IService { + + /** + * 功能描述:分页查询列表 + * + * @param partReq + * @return {@link List }<{@link PartListResp }> + * @author huise23 + * @date 2025/04/11 23:17 + **/ + List page(PartListReq partReq); + + /** + * 功能描述:查询列表 + * + * @param partReq + * @return {@link List }<{@link PartListResp }> + * @author huise23 + * @date 2025/04/11 23:17 + **/ + List list(PartListReq partReq); + + /** + * 功能描述:查询单条 + * + * @param partId Id + * @return {@link PartResp } + * @author huise23 + * @date 2025/04/11 23:17 + **/ + PartResp detail(String partId); + + /** + * 功能描述:新增 + * + * @param req + * @author huise23 + * @date 2025/04/11 23:17 + **/ + void save(PartReq req); + + /** + * 功能描述:更新 + * + * @param req + * @author huise23 + * @date 2025/04/11 23:17 + **/ + void update(String partId, PartReq req); + + /** + * 功能描述:删除 + * + * @param partId Id + * @author huise23 + * @date 2025/04/11 23:17 + **/ + void deleteById(String partId); + + /** + * 功能描述:删除 + * + * @param turbineIds 机组id + * @author huise23 + * @date 2025/04/11 23:17 + **/ + void deleteByTurbineIds(List turbineIds); + + /** + * 查询完整部件信息,包含机组、项目 + * @param partIds + * @return {@link List }<{@link PartResp }> + */ + List listInfos(List partIds); +} + diff --git a/core/src/main/java/com/dite/znpt/service/PostService.java b/core/src/main/java/com/dite/znpt/service/PostService.java new file mode 100644 index 0000000..397c998 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/PostService.java @@ -0,0 +1,28 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.PostEntity; +import com.dite.znpt.domain.vo.PostReq; +import com.dite.znpt.domain.vo.PostResp; + +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/20/周二 10:20 + * @description + */ +public interface PostService extends IService { + + List page(String postName); + + List list(String postName); + + PostResp detail(String postId); + + void save(PostReq req); + + void update(String postId, PostReq req); + + void deleteById(String postId); +} diff --git a/core/src/main/java/com/dite/znpt/service/ProjectBudgetInfoService.java b/core/src/main/java/com/dite/znpt/service/ProjectBudgetInfoService.java new file mode 100644 index 0000000..bddb3c4 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/ProjectBudgetInfoService.java @@ -0,0 +1,48 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.ProjectBudgetInfoEntity; +import com.dite.znpt.domain.vo.ProjectBudgetInfoListReq; +import com.dite.znpt.domain.vo.ProjectBudgetInfoListResp; +import com.dite.znpt.domain.vo.ProjectBudgetInfoReq; +import com.dite.znpt.domain.vo.ProjectBudgetInfoResp; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/07/17 21:58 + * @Description: 项目预算信息表服务接口 + */ +public interface ProjectBudgetInfoService extends IService { + + /** + * 功能描述:查询项目预算信息列表 + * + * @param projectBudgetInfoReq 项目预算信息 + * @return {@link List }<{@link ProjectBudgetInfoListResp }> + * @author huise23 + * @date 2025/07/17 21:58 + **/ + List selectList(ProjectBudgetInfoListReq projectBudgetInfoReq); + + /** + * 功能描述:根据项目id获取项目预算信息列表 + * + * @param projectId 项目id + * @return {@link List }<{@link ProjectBudgetInfoListResp }> + * @author huise23 + * @date 2025/07/17 21:58 + **/ + List detailByProjectId(String projectId); + + /** + * 功能描述:新增项目预算信息 + * + * @param projectBudgetInfoReq 项目预算信息 + * @author huise23 + * @date 2025/07/17 21:58 + **/ + void saveData(List projectBudgetInfoReq); +} + diff --git a/core/src/main/java/com/dite/znpt/service/ProjectService.java b/core/src/main/java/com/dite/znpt/service/ProjectService.java new file mode 100644 index 0000000..2227e32 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/ProjectService.java @@ -0,0 +1,68 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.ProjectEntity; +import com.dite.znpt.domain.vo.ProjectListReq; +import com.dite.znpt.domain.vo.ProjectListResp; +import com.dite.znpt.domain.vo.ProjectReq; +import com.dite.znpt.domain.vo.ProjectResp; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 项目信息表服务接口 + */ +public interface ProjectService extends IService { + + /** + * 功能描述:查询项目信息列表 + * + * @param projectReq 项目信息 + * @return {@link List }<{@link ProjectEntity }> + * @author huise23 + * @date 2025/04/11 23:17 + **/ + List page(ProjectListReq projectReq); + List list(ProjectListReq projectReq); + + /** + * 功能描述:查询单条项目信息 + * + * @param projectId 项目信息Id + * @return {@link ProjectResp } + * @author huise23 + * @date 2025/04/11 23:17 + **/ + ProjectResp detail(String projectId); + + /** + * 功能描述:新增项目信息 + * + * @param req 项目信息 + * @author huise23 + * @date 2025/04/11 23:17 + **/ + void save(ProjectReq req); + + /** + * 功能描述:更新项目信息 + * + * @param projectId 项目id + * @param req 项目信息 + * @author huise23 + * @date 2025/04/11 23:17 + **/ + void update(String projectId, ProjectReq req); + + /** + * 功能描述:删除项目信息 + * + * @param projectId 项目信息Id + * @author huise23 + * @date 2025/04/11 23:17 + **/ + void deleteById(String projectId); +} + diff --git a/core/src/main/java/com/dite/znpt/service/ProjectTaskGroupService.java b/core/src/main/java/com/dite/znpt/service/ProjectTaskGroupService.java new file mode 100644 index 0000000..fac0fa2 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/ProjectTaskGroupService.java @@ -0,0 +1,55 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.ProjectTaskGroupEntity; +import com.dite.znpt.domain.vo.ProjectTaskGroupListReq; +import com.dite.znpt.domain.vo.ProjectTaskGroupResp; +import com.dite.znpt.domain.vo.ProjectTaskGroupReq; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/06/25 17:21 + * @Description: 项目任务组信息表服务接口 + */ +public interface ProjectTaskGroupService extends IService { + + /** + * 功能描述:查询项目任务组信息列表 + * + * @param projectTaskGroupReq 项目任务组信息 + * @return {@link List }<{@link ProjectTaskGroupResp }> + * @author huise23 + * @date 2025/06/25 17:21 + **/ + List selectList(ProjectTaskGroupListReq projectTaskGroupReq); + + /** + * 功能描述:新增项目任务组信息 + * + * @param projectTaskGroupReq 项目任务组信息 + * @author huise23 + * @date 2025/06/25 17:21 + **/ + void saveData(ProjectTaskGroupReq projectTaskGroupReq); + + /** + * 功能描述:更新项目任务组信息 + * + * @param projectTaskGroupReq 项目任务组信息 + * @author huise23 + * @date 2025/06/25 17:21 + **/ + void updateData(ProjectTaskGroupReq projectTaskGroupReq); + + /** + * 功能描述:删除项目任务组信息 + * + * @param groupId 项目任务组信息Id + * @author huise23 + * @date 2025/06/25 17:21 + **/ + void deleteById(String groupId); +} + diff --git a/core/src/main/java/com/dite/znpt/service/ProjectTaskService.java b/core/src/main/java/com/dite/znpt/service/ProjectTaskService.java new file mode 100644 index 0000000..4d47b66 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/ProjectTaskService.java @@ -0,0 +1,93 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.ProjectTaskEntity; +import com.dite.znpt.domain.vo.ProjectTaskListReq; +import com.dite.znpt.domain.vo.ProjectTaskResp; +import com.dite.znpt.domain.vo.ProjectTaskReq; +import com.dite.znpt.domain.vo.ProjectTaskStartReq; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/06/25 17:21 + * @Description: 项目任务信息表服务接口 + */ +public interface ProjectTaskService extends IService { + + /** + * 功能描述:查询项目任务信息列表 + * + * @param projectTaskReq 项目任务信息 + * @return {@link List }<{@link ProjectTaskResp }> + * @author huise23 + * @date 2025/06/25 17:21 + **/ + List selectList(ProjectTaskListReq projectTaskReq); + + /** + * 功能描述:查询单条项目任务信息 + * + * @param taskId 项目任务信息Id + * @return {@link ProjectTaskResp } + * @author huise23 + * @date 2025/06/25 17:21 + **/ + ProjectTaskResp selectById(String taskId); + + /** + * 功能描述:新增项目任务信息 + * + * @param projectTaskReq 项目任务信息 + * @author huise23 + * @date 2025/06/25 17:21 + **/ + void saveData(ProjectTaskReq projectTaskReq); + + /** + * 功能描述:更新项目任务信息 + * + * @param projectTaskReq 项目任务信息 + * @author huise23 + * @date 2025/06/25 17:21 + **/ + void updateData(ProjectTaskReq projectTaskReq); + + /** + * 功能描述:删除项目任务信息 + * + * @param taskId 项目任务信息Id + * @author huise23 + * @date 2025/06/25 17:21 + **/ + void deleteById(String taskId); + + /** + * 功能描述:删除项目任务信息 + * + * @param groupId 项目任务组信息Id + * @author huise23 + * @date 2025/06/25 17:21 + **/ + void deleteByGroupId(String groupId); + + /** + * 功能描述:开始任务/任务组开始任务 + * + * @param taskStartReq 任务启动请求类 + * @author cuizhibin + * @date 2025/06/25 21:16 + **/ + void startTask(ProjectTaskStartReq taskStartReq); + + /** + * 功能描述:结束任务/任务组结束任务 + * + * @param taskStartReq 任务启动请求类 + * @author cuizhibin + * @date 2025/06/25 21:16 + **/ + void endTask(ProjectTaskStartReq taskStartReq); +} + diff --git a/core/src/main/java/com/dite/znpt/service/RoleMenuService.java b/core/src/main/java/com/dite/znpt/service/RoleMenuService.java new file mode 100644 index 0000000..f786b41 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/RoleMenuService.java @@ -0,0 +1,17 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.RoleMenuEntity; +import com.dite.znpt.domain.vo.RoleMenuReq; + +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/21/周三 16:01 + * @description + */ +public interface RoleMenuService extends IService { + + void bindRoleMenu(RoleMenuReq req); +} diff --git a/core/src/main/java/com/dite/znpt/service/RoleService.java b/core/src/main/java/com/dite/znpt/service/RoleService.java new file mode 100644 index 0000000..d4cd45b --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/RoleService.java @@ -0,0 +1,28 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.RoleEntity; +import com.dite.znpt.domain.vo.RoleReq; +import com.dite.znpt.domain.vo.RoleResp; + +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/21/周三 10:24 + * @description + */ +public interface RoleService extends IService { + + List page(String roleName); + + List list(String roleName); + + void save(RoleReq req); + + void update(String roleId, RoleReq req); + + void deleteById(String id); + + RoleResp detail(String roleId); +} diff --git a/core/src/main/java/com/dite/znpt/service/TConstructionService.java b/core/src/main/java/com/dite/znpt/service/TConstructionService.java new file mode 100644 index 0000000..18cb3c5 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/TConstructionService.java @@ -0,0 +1,65 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.TConstructionEntity; +import com.dite.znpt.domain.vo.TConstructionListReq; +import com.dite.znpt.domain.vo.TConstructionReq; +import com.dite.znpt.domain.vo.TConstructionResp; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 施工信息表服务接口 + */ +public interface TConstructionService extends IService { + + /** + * 功能描述:查询施工信息列表 + * + * @param tConstructionReq 施工信息 + * @return {@link List }<{@link TConstructionEntity }> + * @author huise23 + * @date 2025/04/11 23:17 + **/ + List selectList(TConstructionListReq tConstructionReq); + + /** + * 功能描述:查询单条施工信息 + * + * @param constructionId 施工信息Id + * @return {@link TConstructionResp } + * @author huise23 + * @date 2025/04/11 23:17 + **/ + TConstructionResp selectById(String constructionId); + + /** + * 功能描述:新增施工信息 + * + * @param req 施工信息 + * @author huise23 + * @date 2025/04/11 23:17 + **/ + void saveData(TConstructionReq req); + + /** + * 功能描述:更新施工信息 + * + * @param req 施工信息 + * @author huise23 + * @date 2025/04/11 23:17 + **/ + void updateData(TConstructionReq req); + + /** + * 功能描述:删除施工信息 + * + * @param constructionId 施工信息Id + * @author huise23 + * @date 2025/04/11 23:17 + **/ + void deleteById(String constructionId); +} + diff --git a/core/src/main/java/com/dite/znpt/service/TurbineService.java b/core/src/main/java/com/dite/znpt/service/TurbineService.java new file mode 100644 index 0000000..d9ce894 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/TurbineService.java @@ -0,0 +1,112 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.TurbineEntity; +import com.dite.znpt.domain.vo.*; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 机组-项目关联表服务接口 + */ +public interface TurbineService extends IService { + + /** + * 功能描述:分页查询机组列表 + * + * @param req + * @return {@link List }<{@link TurbineListResp }> + * @author huise23 + * @date 2025/04/11 23:17 + **/ + List page(TurbineListReq req); + + /** + * 功能描述:查询机组列表 + * + * @param req + * @return {@link List }<{@link TurbineListResp }> + * @author huise23 + * @date 2025/04/11 23:17 + **/ + List list(TurbineListReq req); + + /** + * 功能描述:查询机组明细列表 + * + * @param req + * @return {@link List }<{@link TurbineInfoResp }> + * @author huise23 + * @date 2025/04/11 23:17 + **/ + List listInfo(TurbineListReq req); + + /** + * 功能描述:查询指定机组详情 + * + * @param turbineId 机组Id + * @return {@link TurbineResp } + * @author huise23 + * @date 2025/04/11 23:17 + **/ + TurbineResp detail(String turbineId); + + /** + * 功能描述:查询指定机组明细内信息 + * + * @param turbineId 机组Id + * @return {@link TurbineListResp } + * @author huise23 + * @date 2025/04/11 23:17 + **/ + TurbineInfoResp info(String turbineId); + + /** + * 功能描述:新增机组 + * + * @param req + * @author huise23 + * @date 2025/04/11 23:17 + **/ + void save(TurbineReq req); + + /** + * 功能描述:更新机组 + * + * @param turbineId + * @param req + * @author huise23 + * @date 2025/04/11 23:17 + **/ + void update(String turbineId, TurbineReq req); + + /** + * 功能描述:删除机组 + * + * @param turbineId 机组Id + * @author huise23 + * @date 2025/04/11 23:17 + **/ + void deleteById(String turbineId); + + /** + * 功能描述:删除机组 + * + * @param projectId 项目id + * @author huise23 + * @date 2025/04/11 23:17 + **/ + void deleteByProjectId(String projectId); + + /** + * 功能描述:更新状态 + * + * @param turbineId 机组id + * @author cuizhibin + * @date 2025/05/12 15:45 + **/ + void updateStatus(String turbineId); +} + diff --git a/core/src/main/java/com/dite/znpt/service/UserPostService.java b/core/src/main/java/com/dite/znpt/service/UserPostService.java new file mode 100644 index 0000000..ea3dcda --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/UserPostService.java @@ -0,0 +1,19 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.PostEntity; +import com.dite.znpt.domain.entity.UserPostEntity; +import com.dite.znpt.domain.vo.PostResp; + +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/21/周三 15:39 + * @description + */ +public interface UserPostService extends IService { + List getPostsByUserId(String userId); + void bindUserPost(String userId, List postIds); + void bindPostUser(String postId, List userIds); +} diff --git a/core/src/main/java/com/dite/znpt/service/UserRoleService.java b/core/src/main/java/com/dite/znpt/service/UserRoleService.java new file mode 100644 index 0000000..c5ab0d8 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/UserRoleService.java @@ -0,0 +1,22 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.UserRoleEntity; +import com.dite.znpt.domain.vo.RoleResp; +import com.dite.znpt.domain.vo.UserRoleReq; + +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/21/周三 15:33 + * @description + */ +public interface UserRoleService extends IService { + + List getRolesByUserId(String userId); + + void bindUserRole(UserRoleReq req); + + void bindRoleUser(String roleId, List userIds); +} diff --git a/core/src/main/java/com/dite/znpt/service/UserService.java b/core/src/main/java/com/dite/znpt/service/UserService.java new file mode 100644 index 0000000..46a1c8d --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/UserService.java @@ -0,0 +1,76 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.UserEntity; +import com.dite.znpt.domain.vo.UserListReq; +import com.dite.znpt.domain.vo.UserListResp; +import com.dite.znpt.domain.vo.UserReq; +import com.dite.znpt.domain.vo.UserResp; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 用户信息表服务接口 + */ +public interface UserService extends IService { + + /** + * 功能描述:分页查询用户信息列表 + * + * @param req 用户信息 + * @return {@link List }<{@link UserResp }> + * @author huise23 + * @date 2025/04/11 23:17 + **/ + List page(UserListReq req); + /** + * 功能描述:查询用户信息列表 + * + * @param req 用户信息 + * @return {@link List }<{@link UserResp }> + * @author huise23 + * @date 2025/04/11 23:17 + **/ + List list(UserListReq req); + + /** + * 功能描述:查询用户信息详情 + * + * @param userId 用户Id + * @return {@link UserResp } + * @author huise23 + * @date 2025/04/11 23:17 + **/ + UserResp detail(String userId); + + /** + * 功能描述:新增用户信息 + * + * @param req 用户信息 + * @author huise23 + * @date 2025/04/11 23:17 + **/ + String save(UserReq req); + + /** + * 功能描述:更新用户信息 + * + * @param userId 用户id + * @param req 用户信息 + * @author huise23 + * @date 2025/04/11 23:17 + **/ + void update(String userId, UserReq req); + + /** + * 功能描述:删除用户信息 + * + * @param userId 用户Id + * @author huise23 + * @date 2025/04/11 23:17 + **/ + void deleteById(String userId); +} + diff --git a/core/src/main/java/com/dite/znpt/service/VideoFileInfoService.java b/core/src/main/java/com/dite/znpt/service/VideoFileInfoService.java new file mode 100644 index 0000000..9fa7047 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/VideoFileInfoService.java @@ -0,0 +1,68 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.VideoFileInfoEntity; +import com.dite.znpt.domain.vo.VideoFileInfoListReq; +import com.dite.znpt.domain.vo.VideoFileInfoReq; +import com.dite.znpt.domain.vo.VideoFileInfoResp; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/06/09 09:45 + * @Description: 视频文件信息表服务接口 + */ +public interface VideoFileInfoService extends IService { + + /** + * 功能描述:查询视频文件信息列表 + * + * @param videoFileInfoReq 视频文件信息 + * @return {@link List }<{@link VideoFileInfoEntity }> + * @author huise23 + * @date 2025/06/09 09:45 + **/ + List selectList(VideoFileInfoListReq videoFileInfoReq); + + /** + * 功能描述:查询单条视频文件信息 + * + * @param id 视频文件信息Id + * @return {@link VideoFileInfoResp } + * @author huise23 + * @date 2025/06/09 09:45 + **/ + VideoFileInfoResp selectById(String id); + + /** + * 功能描述:更新视频文件信息 + * + * @param videoFileInfo 视频文件信息 + * @author huise23 + * @date 2025/06/09 09:45 + **/ + void updateData(VideoFileInfoEntity videoFileInfo); + + /** + * 功能描述:删除视频文件信息 + * + * @param id 视频文件信息Id + * @author huise23 + * @date 2025/06/09 09:45 + **/ + void deleteById(String id); + + /** + * 功能描述:批量上传 + * + * @param infoReq 视频文件信息实体 + * @param files 文件 + * @return + * @author cuizhibin + * @date 2025/06/09 10:14 + */ + List batchUpload(VideoFileInfoReq infoReq, MultipartFile[] files); +} + diff --git a/core/src/main/java/com/dite/znpt/service/WeatherTypeService.java b/core/src/main/java/com/dite/znpt/service/WeatherTypeService.java new file mode 100644 index 0000000..eedc420 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/WeatherTypeService.java @@ -0,0 +1,64 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.WeatherTypeEntity; +import com.dite.znpt.domain.vo.WeatherTypeListReq; +import com.dite.znpt.domain.vo.WeatherTypeResp; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 天气类型表服务接口 + */ +public interface WeatherTypeService extends IService { + + /** + * 功能描述:查询天气类型列表 + * + * @param weatherTypeReq 天气类型 + * @return {@link List }<{@link WeatherTypeEntity }> + * @author huise23 + * @date 2025/04/11 23:17 + **/ + List selectList(WeatherTypeListReq weatherTypeReq); + + /** + * 功能描述:查询单条天气类型 + * + * @param weatherCode 天气类型Id + * @return {@link WeatherTypeResp } + * @author huise23 + * @date 2025/04/11 23:17 + **/ + WeatherTypeResp selectById(String weatherCode); + + /** + * 功能描述:新增天气类型 + * + * @param weatherType 天气类型 + * @author huise23 + * @date 2025/04/11 23:17 + **/ + void saveData(WeatherTypeEntity weatherType); + + /** + * 功能描述:更新天气类型 + * + * @param weatherType 天气类型 + * @author huise23 + * @date 2025/04/11 23:17 + **/ + void updateData(WeatherTypeEntity weatherType); + + /** + * 功能描述:删除天气类型 + * + * @param weatherCode 天气类型Id + * @author huise23 + * @date 2025/04/11 23:17 + **/ + void deleteById(String weatherCode); +} + diff --git a/core/src/main/java/com/dite/znpt/service/WorkShiftService.java b/core/src/main/java/com/dite/znpt/service/WorkShiftService.java new file mode 100644 index 0000000..7e9d7d7 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/WorkShiftService.java @@ -0,0 +1,33 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.WorkShiftEntity; +import com.dite.znpt.domain.vo.WorkShiftListResp; +import com.dite.znpt.domain.vo.WorkShiftReq; +import com.dite.znpt.domain.vo.WorkShiftResp; + +import java.util.List; + +/** + * @author Bear.G + * @date 2025/6/30/周一 10:27 + * @description + */ +public interface WorkShiftService extends IService { + + List page(String workShitName); + + List list(String workShitName); + + WorkShiftResp detail(String workShiftId); + + void save(WorkShiftReq req); + + void update(String workShiftId, WorkShiftReq req); + + void publish(String workShiftId); + + void delete(String workShiftId); + + +} diff --git a/core/src/main/java/com/dite/znpt/service/WorkbenchService.java b/core/src/main/java/com/dite/znpt/service/WorkbenchService.java new file mode 100644 index 0000000..e615915 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/WorkbenchService.java @@ -0,0 +1,15 @@ +package com.dite.znpt.service; + +import com.dite.znpt.domain.vo.WorkbenchInfoResp; + +public interface WorkbenchService { + + /** + * 功能描述:获取工作台信息 + * + * @return {@link WorkbenchInfoResp } + * @author cuizhibin + * @date 2025/07/21 21:27 + **/ + WorkbenchInfoResp getInfo(); +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/AttachInfoServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/AttachInfoServiceImpl.java new file mode 100644 index 0000000..93c77dd --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/AttachInfoServiceImpl.java @@ -0,0 +1,177 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Constants; +import com.dite.znpt.constant.Message; +import com.dite.znpt.domain.entity.AttachInfoEntity; +import com.dite.znpt.domain.vo.AttachInfoReq; +import com.dite.znpt.enums.AttachBusinessTypeEnum; +import com.dite.znpt.enums.FilePathEnum; +import com.dite.znpt.mapper.FileInfoMapper; +import com.dite.znpt.service.AttachInfoService; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.FileInputStream; +import java.io.OutputStream; +import java.net.URLEncoder; +import java.rmi.ServerException; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 附件信息表服务实现类 + */ +@Service +@RequiredArgsConstructor +public class AttachInfoServiceImpl extends ServiceImpl implements AttachInfoService { + + /** + * 功能描述:查询附件信息列表 + * + * @param businessIds 业务ids + * @param businessType 业务类型 + * @return {@link List }<{@link AttachInfoEntity }> + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Override + public List listByBusinessIds(List businessIds, String businessType) { + return lambdaQuery().in(AttachInfoEntity::getBusinessId, businessIds) + .eq(StrUtil.isNotEmpty(businessType), AttachInfoEntity::getBusinessType, businessType) + .list(); + } + + /** + * 功能描述:保存数据 + * + * @param businessType 业务类型 + * @return {@link AttachInfoEntity } + * @author cuizhibin + * @date 2025/06/26 08:53 + **/ + @Override + public List saveData(String businessType, AttachInfoReq infoReq, MultipartFile[] files) { + String temPathPrefix = FilePathEnum.ATTACH.getFileAbsolutePathPrefix().concat(businessType).concat(FileUtil.FILE_SEPARATOR); + if(StrUtil.isNotBlank(infoReq.getUserDefinedPath())){ + temPathPrefix = temPathPrefix.concat(infoReq.getUserDefinedPath()).concat(FileUtil.FILE_SEPARATOR); + } + temPathPrefix = temPathPrefix.concat(DateUtil.today()).concat(FileUtil.FILE_SEPARATOR); + if (!FileUtil.exist(temPathPrefix)) { + FileUtil.mkdir(temPathPrefix); + } + List list = new ArrayList<>(); + for (MultipartFile file : files) { + if (!file.isEmpty()) { + try { + String path = temPathPrefix + file.getOriginalFilename(); + FileUtil.writeBytes(file.getBytes(),path); + AttachInfoEntity attachInfo = AttachInfoEntity.builder() + .attachPath(FilePathEnum.ATTACH.getFileDownPath(path)) + .businessType(businessType) + .fileType(infoReq.getFileType()) + .remark(infoReq.getRemark()) + .build(); + list.add(attachInfo); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + baseMapper.insert(list); + return list.stream().map(AttachInfoEntity::getAttachId).collect(Collectors.toList()); + } + + @Override + public void download(String attachId, HttpServletResponse response) throws Exception { + AttachInfoEntity attachInfo = this.getById(attachId); + if(null == attachInfo || !Constants.DEL_FLAG_0.equals(attachInfo.getDelFlag())){ + throw new ServerException(Message.ATTACH_INFO_IS_NOT_EXIST); + } + String filePath = FilePathEnum.ATTACH.getFileAbsolutePathPrefix().concat(StrUtil.removePrefix(attachInfo.getAttachPath(), FilePathEnum.ATTACH.getUrlPath())); + File file = new File(filePath); + // 检查文件是否存在 + if (!file.exists()) { + throw new ServerException(StrUtil.format(Message.ATTACH_FILE_IS_NOT_EXIST, attachInfo.getAttachPath())); + } + // 设置响应头 + response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); + response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + URLEncoder.encode(file.getName())); + response.setContentLengthLong(file.length()); + // 打开文件输入流并写入响应输出流 + try (FileInputStream fileInputStream = new FileInputStream(file); + OutputStream outputStream = response.getOutputStream()) { + byte[] buffer = new byte[1024]; // 缓冲区大小 + int bytesRead; + // 读取文件并写入输出流 + while ((bytesRead = fileInputStream.read(buffer)) != -1) { + outputStream.write(buffer, 0, bytesRead); + } + outputStream.flush(); + } catch (Exception e) { + e.printStackTrace(); + response.sendError(500, "文件下载失败"); + } + } + + /** + * 功能描述:删除附件信息 + * + * @param businessId 业务id + * @param typeEnum 业务类型 + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Override + public void deleteByBusinessId(String businessId, AttachBusinessTypeEnum typeEnum) { + deleteByBusinessIds(ListUtil.toList(businessId), typeEnum); + } + + @Override + public void deleteByAttachInfoId(String attachIdInfoId) { + this.update(Wrappers.lambdaUpdate(AttachInfoEntity.class).eq(AttachInfoEntity::getAttachId, attachIdInfoId).set(AttachInfoEntity::getDelFlag, Constants.DEL_FLAG_1)); + } + + @Override + public void deleteByBusinessIds(List businessIds, AttachBusinessTypeEnum typeEnum) { + lambdaUpdate().in(AttachInfoEntity::getBusinessId, businessIds) + .eq(AttachInfoEntity::getBusinessType, typeEnum.getCode()) + .set(AttachInfoEntity::getDelFlag, Constants.DEL_FLAG_1).update(); + } + + /** + * 功能描述:更新附件关联的业务id + * + * @param businessId + * @param attachIds + * @author huise23 + * @date 2025/04/11 23:17 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void updateBusinessIdByAttachIds(String businessId, List attachIds, AttachBusinessTypeEnum typeEnum) { + baseMapper.delete(Wrappers.lambdaUpdate().eq(AttachInfoEntity::getBusinessId, businessId) + .eq(AttachInfoEntity::getBusinessType, typeEnum.getCode())); + if (CollUtil.isEmpty(attachIds)) { + return; + } + lambdaUpdate().in(AttachInfoEntity::getAttachId, attachIds) + .eq(AttachInfoEntity::getBusinessType, typeEnum.getCode()) + .set(AttachInfoEntity::getBusinessId, businessId).update(); + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/AttendanceRecordServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/AttendanceRecordServiceImpl.java new file mode 100644 index 0000000..9d9cc8f --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/AttendanceRecordServiceImpl.java @@ -0,0 +1,93 @@ +package com.dite.znpt.service.impl; + +import cn.dev33.satoken.stp.StpUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Constants; +import com.dite.znpt.constant.Message; +import com.dite.znpt.converts.Converts; +import com.dite.znpt.domain.entity.AttendanceRecordEntity; +import com.dite.znpt.domain.entity.UserEntity; +import com.dite.znpt.domain.vo.AttendanceRecordReq; +import com.dite.znpt.domain.vo.AttendanceRecordResp; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.AttendanceRecordMapper; +import com.dite.znpt.service.AttendanceRecordService; +import com.dite.znpt.service.UserService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author: gaoxiong + * @Date: 2025/7/21 21:20 + * @Description: + */ +@Service +public class AttendanceRecordServiceImpl extends ServiceImpl implements AttendanceRecordService { + + @Resource + private UserService userService; + @Transactional(rollbackFor = Exception.class) + @Override + public void save(AttendanceRecordReq req) { + AttendanceRecordEntity entity = Converts.INSTANCE.toAttendanceRecordEntity(req); + entity.setUserId(StpUtil.getLoginId().toString()); + List list = this.list(Wrappers.lambdaQuery() + .eq(AttendanceRecordEntity::getUserId, entity.getUserId()) + .eq(AttendanceRecordEntity::getAttendanceDate, LocalDate.now()) + .orderByAsc(AttendanceRecordEntity::getCreateTime) + ); + if(list.isEmpty()){ + entity.setRecordType("0"); + }else { + entity.setRecordType("1"); + List invalidRecordList = list.stream().filter(record -> "1".equals(record.getRecordType())).collect(Collectors.toList()); + invalidRecordList.forEach(record -> { + record.setRecordType("2"); + }); + this.updateBatchById(invalidRecordList); + } + this.save(entity); + } + + @Override + public List listToday(String userId) { + List list = Converts.INSTANCE.toAttendanceRecordResp( + this.list(Wrappers.lambdaQuery() + .eq(AttendanceRecordEntity::getUserId, userId) + .eq(AttendanceRecordEntity::getAttendanceDate, LocalDate.now()) + .orderByAsc(AttendanceRecordEntity::getCreateTime) + ) + ); + UserEntity user = userService.getById(userId); + list.forEach(resp -> { + resp.setName(user.getName()); + }); + return list; + } + + @Override + public List listMonth(String userId, Integer year, Integer month) { + LocalDate beginDate = LocalDate.of(year, month, 1); + LocalDate endDate = beginDate.plusMonths(1L); + List list = Converts.INSTANCE.toAttendanceRecordResp( + this.list(Wrappers.lambdaQuery() + .eq(AttendanceRecordEntity::getUserId, userId) + .ge(AttendanceRecordEntity::getAttendanceDate, beginDate) + .lt(AttendanceRecordEntity::getAttendanceDate, endDate) + .orderByAsc(AttendanceRecordEntity::getCreateTime) + ) + ); + UserEntity user = userService.getById(userId); + list.forEach(resp -> { + resp.setName(user.getName()); + }); + return list; + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/AudioFileInfoServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/AudioFileInfoServiceImpl.java new file mode 100644 index 0000000..d6714b9 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/AudioFileInfoServiceImpl.java @@ -0,0 +1,126 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.io.FileUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Message; +import com.dite.znpt.domain.entity.AudioFileInfoEntity; +import com.dite.znpt.domain.entity.ImageEntity; +import com.dite.znpt.domain.vo.AudioFileInfoListReq; +import com.dite.znpt.domain.vo.AudioFileInfoResp; +import com.dite.znpt.domain.vo.PartResp; +import com.dite.znpt.enums.FilePathEnum; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.AudioFileInfoMapper; +import com.dite.znpt.mapper.ImageMapper; +import com.dite.znpt.service.AudioFileInfoService; +import com.dite.znpt.service.PartService; +import com.dite.znpt.util.PageUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + * @author huise23 + * @date 2025/06/23 13:39 + * @Description: 音频文件信息表服务实现类 + */ +@Service +@RequiredArgsConstructor +public class AudioFileInfoServiceImpl extends ServiceImpl implements AudioFileInfoService { + + private final PartService partService; + private final ImageMapper imageMapper; + + /** + * 功能描述:查询音频文件信息列表 + * + * @param audioFileInfoReq 音频文件信息信息 + * @return {@link List }<{@link AudioFileInfoEntity }> + * @author huise23 + * @date 2025/06/23 13:39 + **/ + @Override + public List selectList(AudioFileInfoListReq audioFileInfoReq) { + PageUtil.startPage(); + return lambdaQuery() + .eq(Objects.nonNull(audioFileInfoReq.getImageId()), AudioFileInfoEntity::getImageId, audioFileInfoReq.getImageId()) + .in(CollUtil.isNotEmpty(audioFileInfoReq.getImageIds()), AudioFileInfoEntity::getImageId, audioFileInfoReq.getImageIds()) + .eq(Objects.nonNull(audioFileInfoReq.getAudioId()), AudioFileInfoEntity::getAudioId, audioFileInfoReq.getAudioId()).list(); + } + + /** + * 功能描述:查询单条音频文件信息 + * + * @param audioId 音频文件信息Id + * @return {@link AudioFileInfoEntity } + * @author huise23 + * @date 2025/06/23 13:39 + **/ + @Override + public AudioFileInfoResp selectById(String audioId) { + AudioFileInfoListReq req = new AudioFileInfoListReq(); + req.setAudioId(audioId); + List list = baseMapper.queryBySelective(req); + return CollUtil.isNotEmpty(list) ? CollUtil.getFirst(list) : null; + } + + /** + * 功能描述:查询单条音频文件信息 + * + * @param imageIds 图像id列表 + * @return {@link List } + * @author huise23 + * @date 2025/06/23 13:39 + **/ + @Override + public List selectByImageIds(List imageIds) { + AudioFileInfoListReq req = new AudioFileInfoListReq(); + req.setImageIds(imageIds); + return baseMapper.queryBySelective(req); + } + + /** + * 功能描述:删除音频文件信息 + * + * @param audioId 音频文件信息Id + * @author huise23 + * @date 2025/06/23 13:39 + **/ + @Override + public void deleteById(String audioId) { + removeById(audioId); + } + + @Override + public List batchUpload(String imageId, MultipartFile[] files) { + ImageEntity image = imageMapper.selectById(imageId); + if(null == image){ + throw new ServiceException(Message.IMAGE_ID_IS_NOT_EXIST); + } + PartResp partResp = partService.detail(image.getPartId()); + String audioFilePrefix = FilePathEnum.AUDIO.getFileAbsolutePathPrefix() + partResp.getProjectName().concat(FileUtil.FILE_SEPARATOR).concat(partResp.getTurbineName()).concat(FileUtil.FILE_SEPARATOR); + List list = new ArrayList<>(); + for (MultipartFile file : files) { + AudioFileInfoEntity audio = new AudioFileInfoEntity(); + audio.setImageId(imageId); + if (!file.isEmpty()) { + try { + String path = audioFilePrefix + file.getOriginalFilename(); + FileUtil.writeBytes(file.getBytes(),path); + audio.setFilePath(FilePathEnum.AUDIO.getFileDownPath(path)); + list.add(audio); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + baseMapper.insert(list); + return BeanUtil.copyToList(list, AudioFileInfoResp.class); + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/AuthServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/AuthServiceImpl.java new file mode 100644 index 0000000..c375840 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/AuthServiceImpl.java @@ -0,0 +1,168 @@ +package com.dite.znpt.service.impl; + +import cn.dev33.satoken.secure.SaSecureUtil; +import cn.dev33.satoken.stp.SaTokenInfo; +import cn.dev33.satoken.stp.StpUtil; +import cn.dev33.satoken.stp.parameter.SaLoginParameter; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.tree.Tree; +import cn.hutool.core.util.RandomUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.SecureUtil; +import cn.hutool.http.useragent.UserAgent; +import cn.hutool.http.useragent.UserAgentUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.dite.znpt.constant.Constants; +import com.dite.znpt.constant.Message; +import com.dite.znpt.converts.Converts; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.entity.DeptEntity; +import com.dite.znpt.domain.entity.MenuEntity; +import com.dite.znpt.domain.entity.RoleMenuEntity; +import com.dite.znpt.domain.entity.UserEntity; +import com.dite.znpt.domain.vo.LoginReq; +import com.dite.znpt.domain.vo.ModifyPasswordReq; +import com.dite.znpt.domain.vo.RoleResp; +import com.dite.znpt.domain.vo.UserInfo; +import com.dite.znpt.enums.TerminalTypeEnum; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.service.*; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/23/周五 14:31 + * @description + */ +@AllArgsConstructor +@Service +public class AuthServiceImpl implements AuthService { + + private final UserService userService; + + private final UserRoleService userRoleService; + + private final UserPostService userPostService; + + private final MenuService menuService; + + private final RoleMenuService roleMenuService; + + private final DeptService deptService; + + @Override + public Result doLogin(LoginReq req) { + UserEntity user = userService.getOne(Wrappers.lambdaQuery(UserEntity.class).eq(UserEntity::getAccount, req.getAccount()).eq(UserEntity::getDelFlag, Constants.DEL_FLAG_0)); + if(null == user){ + return Result.error(Constants.ACCOUNT_ERROR_EXCEPTION, Constants.ACCOUNT_ERROR_EXCEPTION_MESSAGE); + } + if(!user.getStatus().equals(Constants.STATUS_0)){ + return Result.error(Constants.USER_DISABLE_EXCEPTION, Constants.USER_DISABLE_EXCEPTION_MESSAGE); + } + + String key = SecureUtil.md5(req.getAccount()).substring(8,24); + String password = SecureUtil.aes(key.getBytes()).decryptStr(req.getPassword()); + String pwdCiphertext = SecureUtil.md5(req.getAccount().concat(password).concat(user.getSalt())); + if(!pwdCiphertext.equals(user.getPassword())){ + return Result.error(Constants.PASSWORD_ERROR_EXCEPTION, Constants.PASSWORD_ERROR_EXCEPTION_MESSAGE); + } + + if(user.getIsDefaultPassword()){ + return Result.error(Constants.DEFAULT_PASSWORD_EXCEPTION, Constants.DEFAULT_PASSWORD_EXCEPTION_MESSAGE); + } + ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + HttpServletRequest request = servletRequestAttributes.getRequest(); + UserAgent userAgent = UserAgentUtil.parse(request .getHeader("User-Agent")); + StpUtil.login(user.getUserId(), new SaLoginParameter().setDeviceType(userAgent.isMobile() ? TerminalTypeEnum.APP.getCode() : TerminalTypeEnum.PC.getCode())); + saveSession(user.getUserId()); + return Result.ok(StpUtil.getTokenInfo()); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void modifyPassword(ModifyPasswordReq req) { + if(req.getOldPassword().equals(req.getNewPassword())){ + throw new ServiceException(Message.OLD_PASSWORD_EQUAL_NEW_PASSWORD); + } + UserEntity user = userService.getOne(Wrappers.lambdaQuery(UserEntity.class).eq(UserEntity::getAccount, req.getAccount()).eq(UserEntity::getDelFlag, Constants.DEL_FLAG_0)); + if(null == user){ + throw new ServiceException(Constants.ACCOUNT_ERROR_EXCEPTION_MESSAGE); + } + if(!user.getStatus().equals(Constants.STATUS_0)){ + throw new ServiceException(Constants.USER_DISABLE_EXCEPTION_MESSAGE); + } + String key = SecureUtil.md5(req.getAccount()).substring(8,24); + String oldPassword = SecureUtil.aes(key.getBytes()).decryptStr(req.getOldPassword()); + String pwdCiphertext = SecureUtil.md5(req.getAccount().concat(oldPassword).concat(user.getSalt())); + if(!pwdCiphertext.equals(user.getPassword())){ + throw new ServiceException(Message.OLD_PASSWORD_IS_ERROR); + } + String newPassword = SecureUtil.aes(key.getBytes()).decryptStr(req.getNewPassword()); + String salt = RandomUtil.randomString(req.getAccount(), 4); + user.setSalt(salt); + user.setPassword(SaSecureUtil.md5(req.getAccount().concat(newPassword).concat(salt))); + user.setIsDefaultPassword(Boolean.FALSE); + userService.updateById(user); + + } + + @Override + public void doLogout() { + StpUtil.logout(); + } + + @Override + public List> getMenuInfo(String userId) { + return (List>) StpUtil.getSession().get("menuInfo"); + } + + @Override + public UserInfo getUserInfo(String userId) { + return (UserInfo)StpUtil.getSession().get("userInfo"); + } + + private void saveSession(String userId){ + StpUtil.getSession().set("userInfo", queryUserInfo(userId)); + List> menuInfo = queryMenuInfo(userId); + if(!menuInfo.isEmpty()){ + StpUtil.getSession().set("menuInfo", menuInfo); + } + } + + private UserInfo queryUserInfo(String userId){ + UserInfo userInfo = new UserInfo(); + UserEntity user = userService.getOne(Wrappers.lambdaQuery(UserEntity.class).eq(UserEntity::getUserId, userId).eq(UserEntity::getDelFlag, Constants.DEL_FLAG_0)); + userInfo.setUser(Converts.INSTANCE.toUserListResp(user)); + if(StrUtil.isNotBlank(user.getDeptId())){ + DeptEntity dept = deptService.getOne(Wrappers.lambdaQuery(DeptEntity.class).eq(DeptEntity::getDeptId, user.getDeptId()).eq(DeptEntity::getDelFlag, Constants.DEL_FLAG_0)); + userInfo.setDept(Converts.INSTANCE.toDeptResp(dept)); + } + userInfo.setRoles(userRoleService.getRolesByUserId(userId)); + userInfo.setPosts(userPostService.getPostsByUserId(userId)); + return userInfo; + } + + private List> queryMenuInfo(String userId){ + List roleIds = userRoleService.getRolesByUserId(userId).stream().map(RoleResp::getRoleId).toList(); + if(CollUtil.isEmpty(roleIds)){ + return new ArrayList<>(); + } + List menuIds = roleMenuService.list( + Wrappers.lambdaQuery(RoleMenuEntity.class) + .in(CollUtil.isNotEmpty(roleIds), RoleMenuEntity::getRoleId, roleIds) + ).stream().map(RoleMenuEntity::getMenuId).toList(); + List menuList = menuService.list( + Wrappers.lambdaQuery(MenuEntity.class) + .in(CollUtil.isNotEmpty(menuIds), MenuEntity::getMenuId,menuIds).eq(MenuEntity::getTerminalType, StpUtil.getLoginDeviceType()) + ).stream().filter(menu -> Constants.VISIBLE_0.equals(menu.getVisible())).toList(); + return MenuServiceImpl.buildMenuTree(menuList); + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/CertificationServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/CertificationServiceImpl.java new file mode 100644 index 0000000..bdc4320 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/CertificationServiceImpl.java @@ -0,0 +1,116 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Constants; +import com.dite.znpt.constant.Message; +import com.dite.znpt.converts.Converts; +import com.dite.znpt.domain.entity.CertificationEntity; +import com.dite.znpt.domain.entity.UserEntity; +import com.dite.znpt.domain.vo.CertificationListReq; +import com.dite.znpt.domain.vo.CertificationReq; +import com.dite.znpt.domain.vo.CertificationResp; +import com.dite.znpt.enums.CertificationEnum; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.CertificationMapper; +import com.dite.znpt.service.CertificationService; +import com.dite.znpt.service.UserService; +import com.dite.znpt.util.PageUtil; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/27/周二 15:23 + * @description + */ +@AllArgsConstructor +@Service +public class CertificationServiceImpl extends ServiceImpl implements CertificationService { + + private final UserService userService; + + @Override + public List page(CertificationListReq req) { + PageUtil.startPage(); + return this.list(req); + } + + @Override + public List list(CertificationListReq req) { + List list = this.baseMapper.selectCertification(req); + list.stream().forEach(resp -> { + resp.setCertificationTypeLabel(CertificationEnum.getDescByCode(resp.getCertificationType())); + }); + return list; + } + + @Override + public CertificationResp detail(String certificationId) { + CertificationResp resp = Converts.INSTANCE.toCertificationResp(this.getById(certificationId)); + resp.setCertificationTypeLabel(CertificationEnum.getDescByCode(resp.getCertificationType())); + resp.setUserName(userService.getById(resp.getUserId()).getName()); + return resp; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void save(CertificationReq req) { + this.save(validation(null, req)); + } + + private CertificationEntity validation(String certificationId, CertificationReq req) { + UserEntity user = userService.getById(req.getUserId()); + if(null == user || !Constants.DEL_FLAG_0.equals(user.getDelFlag()) || !Constants.STATUS_0.equals(user.getStatus())){ + throw new ServiceException(Message.USER_ID_NOT_EXIST_OR_ILLEGAL); + } + if(null == CertificationEnum.getByCode(req.getCertificationType())){ + throw new ServiceException(Message.CERTIFICATION_TYPE_ILLEGAL); + } + List userIdTypeList = this.list(Wrappers.lambdaQuery(CertificationEntity.class).eq(CertificationEntity::getCertificationType, req.getCertificationType()).eq(CertificationEntity::getUserId, req.getUserId())); + List codeList = this.list(Wrappers.lambdaQuery(CertificationEntity.class).eq(CertificationEntity::getCertificationCode, req.getCertificationCode())); + if(StrUtil.isBlank(certificationId)){ + if(CollUtil.isNotEmpty(userIdTypeList)){ + throw new ServiceException(StrUtil.format(Message.USER_CERTIFICATION_EXIST, user.getName(), CertificationEnum.getDescByCode(req.getCertificationType()))); + } + if(CollUtil.isNotEmpty(codeList)){ + throw new ServiceException(Message.CERTIFICATION_CODE_EXIST); + } + }else{ + CertificationEntity entity = this.getById(certificationId); + if(null == entity){ + throw new ServiceException(Message.CERTIFICATION_ID_NOT_EXIST); + } + if((!entity.getUserId().equals(req.getUserId()) ||!entity.getCertificationType().equals(req.getCertificationType())) && CollUtil.isNotEmpty(userIdTypeList)){ + throw new ServiceException(StrUtil.format(Message.USER_CERTIFICATION_EXIST, user.getName(), CertificationEnum.getDescByCode(req.getCertificationType()))); + } + if(!entity.getCertificationCode().equals(req.getCertificationCode()) && CollUtil.isNotEmpty(codeList)){ + throw new ServiceException(Message.CERTIFICATION_CODE_EXIST); + } + } + return Converts.INSTANCE.toCertificationEntity(req); + } + + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(String certificationId, CertificationReq req) { + CertificationEntity entity = validation(certificationId, req); + entity.setCertificationId(certificationId); + this.updateById(entity); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(String certificationId) { + if(null == this.getById(certificationId)){ + throw new ServiceException(Message.CERTIFICATION_ID_NOT_EXIST); + } + this.removeById(certificationId); + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/CheckSchemeServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/CheckSchemeServiceImpl.java new file mode 100644 index 0000000..6d5829c --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/CheckSchemeServiceImpl.java @@ -0,0 +1,86 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Constants; +import com.dite.znpt.constant.Message; +import com.dite.znpt.converts.Converts; +import com.dite.znpt.domain.entity.CheckSchemeEntity; +import com.dite.znpt.domain.vo.CheckSchemeReq; +import com.dite.znpt.domain.vo.CheckSchemeResp; +import com.dite.znpt.enums.CheckMethodEnum; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.CheckSchemeMapper; +import com.dite.znpt.service.CheckSchemeService; +import com.dite.znpt.util.PageUtil; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/7/9 23:39 + * @Description: + */ +@Service +public class CheckSchemeServiceImpl extends ServiceImpl implements CheckSchemeService { + + @Override + public List page(List checkMethods) { + PageUtil.startPage(); + return this.list(checkMethods); + } + + @Override + public List list(List checkMethods) { + List result = Converts.INSTANCE.toCheckSchemeResp( + this.list(Wrappers.lambdaQuery(CheckSchemeEntity.class).in(null != checkMethods && !checkMethods.isEmpty(), CheckSchemeEntity::getCheckMethod, checkMethods)) + ); + result.forEach(resp -> { + resp.setCheckMethodLabel(CheckMethodEnum.getDescByCode(resp.getCheckMethod())); + }); + return result; + } + + @Override + public CheckSchemeResp detail(String checkSchemeId) { + CheckSchemeEntity checkScheme = this.getById(checkSchemeId); + if(null == checkScheme || checkScheme.getDelFlag() != Constants.DEL_FLAG_0){ + throw new ServiceException(Message.CHECK_SCHEME_ID_IS_NOT_EXIST); + } + CheckSchemeResp resp = Converts.INSTANCE.toCheckSchemeResp(checkScheme); + resp.setCheckMethodLabel(CheckMethodEnum.getDescByCode(resp.getCheckMethod())); + return resp; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void save(CheckSchemeReq req) { + this.save(Converts.INSTANCE.toCheckSchemeEntity(req)); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(String checkSchemeId, CheckSchemeReq req) { + CheckSchemeEntity checkScheme = this.getById(checkSchemeId); + if(null == checkScheme || checkScheme.getDelFlag() != Constants.DEL_FLAG_0){ + throw new ServiceException(Message.CHECK_SCHEME_ID_IS_NOT_EXIST); + } + CheckSchemeEntity entity = Converts.INSTANCE.toCheckSchemeEntity(req); + entity.setSchemeId(checkSchemeId); + this.updateById(entity); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(String checkSchemeId) { + CheckSchemeEntity checkScheme = this.getById(checkSchemeId); + if(null == checkScheme || checkScheme.getDelFlag() != Constants.DEL_FLAG_0){ + throw new ServiceException(Message.CHECK_SCHEME_ID_IS_NOT_EXIST); + } + checkScheme.setDelFlag(Constants.DEL_FLAG_1); + this.updateById(checkScheme); + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/ContractServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/ContractServiceImpl.java new file mode 100644 index 0000000..3c44205 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/ContractServiceImpl.java @@ -0,0 +1,103 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.domain.entity.ContractEntity; +import com.dite.znpt.domain.vo.ContractListReq; +import com.dite.znpt.domain.vo.ContractResp; +import com.dite.znpt.domain.vo.ContractReq; +import com.dite.znpt.service.ContractService; +import com.dite.znpt.mapper.ContractMapper; +import org.springframework.stereotype.Service; +import cn.hutool.core.collection.CollUtil; +import lombok.RequiredArgsConstructor; +import com.dite.znpt.util.PageUtil; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/07/21 20:29 + * @Description: 合同表服务实现类 + */ +@Service +@RequiredArgsConstructor +public class ContractServiceImpl extends ServiceImpl implements ContractService { + + /** + * 功能描述:查询合同列表 + * + * @param contractReq 合同信息 + * @return {@link List }<{@link ContractResp }> + * @author huise23 + * @date 2025/07/21 20:29 + **/ + @Override + public List selectList(ContractListReq contractReq) { + PageUtil.startPage(); + List contractList= this.baseMapper.queryBySelective(contractReq); + contractList.forEach(resp -> { + + }); + return contractList; + } + + /** + * 功能描述:查询单条合同 + * + * @param contractId 合同Id + * @return {@link ContractResp } + * @author huise23 + * @date 2025/07/21 20:29 + **/ + @Override + public ContractResp selectById(String contractId) { + ContractListReq contractReq = new ContractListReq(); + contractReq.setContractId(contractId); + + List list = selectList(contractReq); + return CollUtil.isNotEmpty(list) ? CollUtil.getFirst(list) : new ContractResp(); + } + + /** + * 功能描述:新增合同 + * + * @param contractReq 合同 + * @author huise23 + * @date 2025/07/21 20:29 + **/ + @Override + public void saveData(ContractReq contractReq) { +// todo 校验 + ContractEntity entity = BeanUtil.copyProperties(contractReq, ContractEntity.class); + save(entity); + } + + /** + * 功能描述:更新合同 + * + * @param contractReq 合同 + * @author huise23 + * @date 2025/07/21 20:29 + **/ + @Override + public void updateData(ContractReq contractReq) { +// todo 校验 + ContractEntity entity = BeanUtil.copyProperties(contractReq, ContractEntity.class); + updateById(entity); + } + + /** + * 功能描述:删除合同 + * + * @param contractId 合同Id + * @author huise23 + * @date 2025/07/21 20:29 + **/ + @Override + public void deleteById(String contractId) { +// todo 校验 + removeById(contractId); + } + +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/ContractSettlementServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/ContractSettlementServiceImpl.java new file mode 100644 index 0000000..23c29c5 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/ContractSettlementServiceImpl.java @@ -0,0 +1,76 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.domain.entity.ContractSettlementEntity; +import com.dite.znpt.domain.vo.ContractSettlementListReq; +import com.dite.znpt.domain.vo.ContractSettlementResp; +import com.dite.znpt.domain.vo.ContractSettlementReq; +import com.dite.znpt.service.ContractSettlementService; +import com.dite.znpt.mapper.ContractSettlementMapper; +import org.springframework.stereotype.Service; +import cn.hutool.core.collection.CollUtil; +import lombok.RequiredArgsConstructor; +import com.dite.znpt.util.PageUtil; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/07/21 21:10 + * @Description: 合同结算表服务实现类 + */ +@Service +@RequiredArgsConstructor +public class ContractSettlementServiceImpl extends ServiceImpl implements ContractSettlementService { + + /** + * 功能描述:查询合同结算列表 + * + * @param contractSettlementReq 合同结算信息 + * @return {@link List }<{@link ContractSettlementResp }> + * @author huise23 + * @date 2025/07/21 21:10 + **/ + @Override + public List selectList(ContractSettlementListReq contractSettlementReq) { + PageUtil.startPage(); + List contractSettlementList= this.baseMapper.queryBySelective(contractSettlementReq); + contractSettlementList.forEach(resp -> { + + }); + return contractSettlementList; + } + + /** + * 功能描述:查询单条合同结算 + * + * @param settlementId 合同结算Id + * @return {@link ContractSettlementResp } + * @author huise23 + * @date 2025/07/21 21:10 + **/ + @Override + public ContractSettlementResp selectById(String settlementId) { + ContractSettlementListReq contractSettlementReq = new ContractSettlementListReq(); + contractSettlementReq.setSettlementId(settlementId); + + List list = selectList(contractSettlementReq); + return CollUtil.isNotEmpty(list) ? CollUtil.getFirst(list) : new ContractSettlementResp(); + } + + /** + * 功能描述:新增合同结算 + * + * @param contractSettlementReq 合同结算 + * @author huise23 + * @date 2025/07/21 21:10 + **/ + @Override + public void saveData(ContractSettlementReq contractSettlementReq) { +// todo 校验 + ContractSettlementEntity entity = BeanUtil.copyProperties(contractSettlementReq, ContractSettlementEntity.class); + save(entity); + } + +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/DefectServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/DefectServiceImpl.java new file mode 100644 index 0000000..f20ee9f --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/DefectServiceImpl.java @@ -0,0 +1,236 @@ +package com.dite.znpt.service.impl; + +import ai.onnxruntime.OrtException; +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Message; +import com.dite.znpt.converts.Converts; +import com.dite.znpt.domain.bo.Detection; +import com.dite.znpt.domain.entity.AttachInfoEntity; +import com.dite.znpt.domain.entity.DefectEntity; +import com.dite.znpt.domain.entity.ImageEntity; +import com.dite.znpt.domain.vo.*; +import com.dite.znpt.enums.*; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.DefectMapper; +import com.dite.znpt.service.AttachInfoService; +import com.dite.znpt.service.DefectService; +import com.dite.znpt.service.ImageService; +import com.dite.znpt.util.PageUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 缺陷记录表服务实现类 + */ +@Service +@RequiredArgsConstructor +public class DefectServiceImpl extends ServiceImpl implements DefectService { + @Resource + private ImageService imageService; + @Autowired + private MultiModelYoloService multiModelYoloService; + @Autowired + private AttachInfoService attachInfoService; + + /** + * 功能描述:查询缺陷记录列表 + * + * @param req 缺陷记录信息 + * @return {@link List }<{@link DefectResp }> + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Override + public List page(DefectListReq req) { + PageUtil.startPage(); + List list = this.list(req); + list.forEach(defect -> { + defect.setMarkInfo(JSONUtil.toBean(defect.getLabelInfo(), Detection.class)); + }); + return list; + } + + @Override + public List list(DefectListReq req) { + List defectList= this.baseMapper.queryBySelective(req); + defectList.forEach(defect -> { + defect.setDefectTypeLabel(DefectTypeEnum.getDescByCode(defect.getDefectType())); + defect.setDefectLevelLabel(DefectLevelEnum.getDescByCode(defect.getDefectLevel())); + defect.setMarkInfo(JSONUtil.toBean(defect.getLabelInfo(), Detection.class)); + }); + return defectList; + } + + /** + * 功能描述:查询单条缺陷记录 + * + * @param defectId 缺陷记录Id + * @return {@link DefectResp } + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Override + public DefectResp detail(String defectId) { + DefectResp defectResp = this.baseMapper.detail(defectId); + defectResp.setDefectTypeLabel(DefectTypeEnum.getDescByCode(defectResp.getDefectType())); + defectResp.setDefectLevel(DefectLevelEnum.getDescByCode(defectResp.getDefectLevel())); + defectResp.setRepairStatusLabel(RepairStatusEnum.getDescByCode(defectResp.getRepairStatus())); + defectResp.setSourceLabel(DefectSourceEnum.getDescByCode(defectResp.getSourceLabel())); + defectResp.setMarkInfo(JSONUtil.toBean(defectResp.getLabelInfo(), Detection.class)); + return defectResp; + } + + /** + * 功能描述:新增缺陷记录 + * + * @param imageId + * @param req + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Transactional(rollbackFor = Exception.class) + @Override + public void save(String imageId, DefectReq req) { + ImageEntity image = imageService.getById(imageId); + if(null == image){ + throw new ServiceException(Message.IMAGE_ID_IS_NOT_EXIST); + } + image.setImageType(ImageTypeEnum.DEFECT.getCode()); + imageService.updateById(image); + DefectEntity defectEntity = Converts.INSTANCE.toDefectEntity(req); + defectEntity.setImageId(imageId); + defectEntity.setLabelInfo(JSONUtil.toJsonStr(req.getMarkInfo())); + attachInfoService.updateBusinessIdByAttachIds(defectEntity.getImageId(), ListUtil.of(req.getAttachId()), AttachBusinessTypeEnum.DEFECT_MARK_PIC); + this.save(defectEntity); + } + + /** + * 功能描述:新增外部工作缺陷记录 + * + * @param list + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Override + public List saveOutWorkDefect(List list) { + List imageSimpleReqList = Converts.INSTANCE.toImageSimpleReq(list); + imageSimpleReqList.forEach(req -> req.setImageType(ImageTypeEnum.DEFECT.getCode())); + List imageEntityList = imageService.batchSaveByImageSimpleReq(imageSimpleReqList); + Map imageMap = imageEntityList.stream().collect(Collectors.toMap(k->k.getPartId().concat(StrUtil.COLON).concat(k.getImagePath()), Function.identity())); + List defectEntityList = new ArrayList<>(); + list.forEach(req -> { + String key = req.getPartId().concat(StrUtil.COLON).concat(req.getImagePath()); + if(imageMap.containsKey(key)){ + DefectEntity defectEntity = Converts.INSTANCE.toDefectEntity(req); + defectEntity.setImageId(imageMap.get(key).getImageId()); + defectEntity.setLabelInfo(JSONUtil.toJsonStr(req.getMarkInfo())); + defectEntityList.add(defectEntity); + } + }); + this.saveBatch(defectEntityList); + return defectEntityList; + } + + /** + * 功能描述:更新缺陷记录 + * + * @param defectId + * @param req + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Transactional(rollbackFor = Exception.class) + @Override + public void update(String defectId, DefectReq req) { + if(null == this.getById(defectId)){ + throw new ServiceException(Message.DEFECT_ID_IS_NOT_EXIST); + } + DefectEntity defectEntity = Converts.INSTANCE.toDefectEntity(req); + defectEntity.setLabelInfo(JSONUtil.toJsonStr(req.getMarkInfo())); + this.updateById(defectEntity); + attachInfoService.updateBusinessIdByAttachIds(defectEntity.getImageId(), ListUtil.of(req.getAttachId()), AttachBusinessTypeEnum.DEFECT_MARK_PIC); + } + + /** + * 功能描述:删除缺陷记录 + * + * @param defectId 缺陷记录Id + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(String defectId) { + this.removeById(defectId); + } + + /** + * 功能描述:缺陷自动检测 + * + * @param markReq 马克请求类 + * @return {@link List }<{@link DefectResp }> + * @author cuizhibin + * @date 2025/07/04 10:55 + **/ + @Override + @Transactional(rollbackFor = Exception.class) + public List detect(DefectMarkReq markReq) { + ImageEntity image = imageService.getById(markReq.getImageId()); + if (Objects.isNull(image)) { + throw new ServiceException(Message.IMAGE_ID_IS_NOT_EXIST); + } + image.setImageType(ImageTypeEnum.DEFECT.getCode()); + imageService.updateById(image); + FilePathEnum pathEnum = image.getImagePath().contains("temp") ? FilePathEnum.IMAGE_TEMP : FilePathEnum.IMAGE; + String inputPath = pathEnum.getFileAbsolutePath(image.getImagePath()); +// 写入attach同层级文件夹下 + String attachPath = FilePathEnum.ATTACH.getUrlPath() + StrUtil.removePrefix(image.getImagePath(), pathEnum.getUrlPath()); + String outputPath = FilePathEnum.ATTACH.getFileAbsolutePath(attachPath); + FileUtil.mkParentDirs(outputPath); + + AttachInfoEntity attachInfo = new AttachInfoEntity(); + attachInfo.setBusinessId(image.getImageId()); + attachInfo.setAttachPath(attachPath); + attachInfo.setBusinessType(AttachBusinessTypeEnum.DEFECT_MARK_PIC.getCode()); + attachInfoService.save(attachInfo); + try { + List detect = multiModelYoloService.detect(markReq.getModelId(), inputPath, outputPath, markReq.getConfThreshold()); + List respList = new ArrayList<>(); + for (Detection detection : detect) { + DefectResp resp = new DefectResp(); + resp.setImageId(markReq.getImageId()); + resp.setDefectType(detection.getLabel()); + resp.setDefectTypeLabel(DefectTypeEnum.getDescByCode(detection.getLabel())); + resp.setDetectionDate(LocalDate.now()); + resp.setSource(DefectSourceEnum.AI.getCode()); + resp.setSourceLabel(DefectSourceEnum.AI.getDesc()); + resp.setMarkInfo(detection); + resp.setRepairStatus(RepairStatusEnum.INCOMPLETE.getCode()); + resp.setRepairStatusLabel(RepairStatusEnum.INCOMPLETE.getDesc()); + resp.setAttachId(attachInfo.getAttachId()); + resp.setAttachPath(attachPath); + respList.add(resp); + } + return respList; + } catch (OrtException e) { + throw new ServiceException(Message.IMAGE_AUTO_MARK_ERROR + e.getMessage()); + } + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/DeptServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/DeptServiceImpl.java new file mode 100644 index 0000000..79df0e3 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/DeptServiceImpl.java @@ -0,0 +1,120 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.lang.tree.Tree; +import cn.hutool.core.lang.tree.TreeNodeConfig; +import cn.hutool.core.lang.tree.TreeUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Constants; +import com.dite.znpt.constant.Message; +import com.dite.znpt.converts.Converts; +import com.dite.znpt.domain.entity.DeptEntity; +import com.dite.znpt.domain.entity.UserEntity; +import com.dite.znpt.domain.vo.DeptReq; +import com.dite.znpt.domain.vo.DeptResp; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.DeptMapper; +import com.dite.znpt.service.DeptService; +import com.dite.znpt.service.UserService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/20/周二 10:14 + * @description + */ +@Service +public class DeptServiceImpl extends ServiceImpl implements DeptService { + + @Resource + private UserService userService; + + @Override + public List> tree(String deptName) { + List deptList = StrUtil.isBlank(deptName) ? this.baseMapper.downwardRecursionSelect(null) : this.baseMapper.upwardRecursionSelect(deptName); + return buildDeptTree(deptList); + } + + public static List> buildDeptTree(List deptList) { + //配置 + TreeNodeConfig treeNodeConfig = new TreeNodeConfig(); + treeNodeConfig.setIdKey("deptId"); + treeNodeConfig.setNameKey("deptName"); + treeNodeConfig.setParentIdKey("parentId"); + treeNodeConfig.setWeightKey("orderNum"); + //转换器 + return TreeUtil.build(deptList, "0", treeNodeConfig, + (treeNode, tree) -> { + tree.setId(treeNode.getDeptId()); + tree.setParentId(treeNode.getParentId()); + tree.setName(treeNode.getDeptName()); + tree.putExtra("status",treeNode.getStatus()); + tree.putExtra("orderNum",treeNode.getOrderNum()); + }); + } + + @Override + public DeptResp detail(String deptId) { + DeptEntity entity = this.getById(deptId); + if (null == entity || !entity.getDelFlag().equals(Constants.DEL_FLAG_0)){ + throw new ServiceException(Message.DEPT_ID_NOT_EXIST); + } + return Converts.INSTANCE.toDeptResp(entity); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void save(DeptReq req) { + this.save(dealDept(req)); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(String deptId, DeptReq req) { + DeptEntity originalEntity = this.getById(deptId); + if (null == originalEntity || !originalEntity.getDelFlag().equals(Constants.DEL_FLAG_0)){ + throw new ServiceException(Message.DEPT_ID_NOT_EXIST); + } + DeptEntity entity = dealDept(req); + entity.setDeptId(deptId); + this.updateById(entity); + } + + private DeptEntity dealDept(DeptReq req){ + DeptEntity entity = Converts.INSTANCE.toDeptEntity(req); + if(StrUtil.isNotBlank(req.getLeaderId())){ + UserEntity user = userService.getById(req.getLeaderId()); + if(null == user || !user.getDelFlag().equals(Constants.DEL_FLAG_0)){ + throw new ServiceException(Message.USER_ID_NOT_EXIST); + } + } + if(StrUtil.isNotBlank(req.getParentId())){ + DeptEntity parent = this.getById(req.getParentId()); + if(null == parent || !parent.getDelFlag().equals(Constants.DEL_FLAG_0)){ + throw new ServiceException(Message.DEPT_PARENT_NOT_EXIST); + } + entity.setAncestors(parent.getAncestors() + StrUtil.COMMA + parent.getDeptId()); + entity.setDeptFullName(parent.getDeptFullName() + StrUtil.SLASH + entity.getDeptName()); + }else{ + entity.setParentId("0"); + entity.setAncestors("0"); + entity.setDeptFullName(req.getDeptName()); + } + return entity; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(String deptId) { + DeptEntity entity = this.getById(deptId); + if (null == entity || !entity.getDelFlag().equals(Constants.DEL_FLAG_0)){ + throw new ServiceException(Message.DEPT_ID_NOT_EXIST); + } + entity.setDelFlag(Constants.DEL_FLAG_1); + this.updateById(entity); + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/DictServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/DictServiceImpl.java new file mode 100644 index 0000000..5acbf79 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/DictServiceImpl.java @@ -0,0 +1,103 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.domain.entity.DictEntity; +import com.dite.znpt.domain.vo.DictListReq; +import com.dite.znpt.domain.vo.DictReq; +import com.dite.znpt.domain.vo.DictResp; +import com.dite.znpt.mapper.DictMapper; +import com.dite.znpt.service.DictService; +import com.dite.znpt.util.PageUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/06/30 11:38 + * @Description: 字典表服务实现类 + */ +@Service +@RequiredArgsConstructor +public class DictServiceImpl extends ServiceImpl implements DictService { + + /** + * 功能描述:查询字典列表 + * + * @param dictReq 字典信息 + * @return {@link List }<{@link DictResp }> + * @author huise23 + * @date 2025/06/30 11:38 + **/ + @Override + public List selectList(DictListReq dictReq) { + PageUtil.startPage(); + List dictList= this.baseMapper.queryBySelective(dictReq); + dictList.forEach(resp -> { + + }); + return dictList; + } + + /** + * 功能描述:查询单条字典 + * + * @param dictId 字典Id + * @return {@link DictResp } + * @author huise23 + * @date 2025/06/30 11:38 + **/ + @Override + public DictResp selectById(String dictId) { + DictListReq dictReq = new DictListReq(); + dictReq.setDictId(dictId); + + List list = selectList(dictReq); + return CollUtil.isNotEmpty(list) ? CollUtil.getFirst(list) : new DictResp(); + } + + /** + * 功能描述:新增字典 + * + * @param dictReq 字典 + * @author huise23 + * @date 2025/06/30 11:38 + **/ + @Override + public void saveData(DictReq dictReq) { +// todo 校验 + DictEntity entity = BeanUtil.copyProperties(dictReq, DictEntity.class); + save(entity); + } + + /** + * 功能描述:更新字典 + * + * @param dictReq 字典 + * @author huise23 + * @date 2025/06/30 11:38 + **/ + @Override + public void updateData(DictReq dictReq) { +// todo 校验 + DictEntity entity = BeanUtil.copyProperties(dictReq, DictEntity.class); + updateById(entity); + } + + /** + * 功能描述:删除字典 + * + * @param dictId 字典Id + * @author huise23 + * @date 2025/06/30 11:38 + **/ + @Override + public void deleteById(String dictId) { +// todo 校验 + removeById(dictId); + } + +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/EquipmentServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/EquipmentServiceImpl.java new file mode 100644 index 0000000..374563e --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/EquipmentServiceImpl.java @@ -0,0 +1,108 @@ +package com.dite.znpt.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Message; +import com.dite.znpt.converts.Converts; +import com.dite.znpt.domain.entity.EquipmentEntity; +import com.dite.znpt.domain.entity.EquipmentUseRecordEntity; +import com.dite.znpt.domain.vo.EquipmentListReq; +import com.dite.znpt.domain.vo.EquipmentReq; +import com.dite.znpt.domain.vo.EquipmentResp; +import com.dite.znpt.domain.vo.EquipmentUseRecordReq; +import com.dite.znpt.enums.EquipmentStatusEnum; +import com.dite.znpt.enums.EquipmentTypeEnum; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.EquipmentMapper; +import com.dite.znpt.service.EquipmentService; +import com.dite.znpt.service.EquipmentUseRecordService; +import com.dite.znpt.service.ProjectService; +import com.dite.znpt.service.UserService; +import com.dite.znpt.util.PageUtil; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/7/23/周三 17:39 + * @description + */ +@Service +public class EquipmentServiceImpl extends ServiceImpl implements EquipmentService { + + @Resource + private EquipmentUseRecordService equipmentUseRecordService; + + @Resource + private UserService userService; + + @Resource + private ProjectService projectService; + + @Override + public List page(EquipmentListReq req) { + PageUtil.startPage(); + return this.list(req); + } + + @Override + public List list(EquipmentListReq req) { + List list = this.baseMapper.selectEquipmentResp(req); + list.forEach(resp -> { + resp.setEquipmentTypeLabel(EquipmentTypeEnum.getDescByCode(resp.getEquipmentType())); + resp.setEquipmentStatusLabel(EquipmentStatusEnum.getDescByCode(resp.getEquipmentStatus())); + }); + return list; + } + + @Override + public EquipmentResp detail(String equipmentId) { + EquipmentResp resp = this.baseMapper.getEquipmentRespByEquipmentId(equipmentId); + resp.setEquipmentTypeLabel(EquipmentTypeEnum.getDescByCode(resp.getEquipmentType())); + resp.setEquipmentStatusLabel(EquipmentStatusEnum.getDescByCode(resp.getEquipmentStatus())); + return resp; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void save(EquipmentReq req) { + EquipmentEntity entity = Converts.INSTANCE.toEquipmentUseRecordEntity(req); + if(null != getByEquipmentSn(entity.getEquipmentSn())){ + throw new ServiceException(Message.EQUIPMENT_SN_EXIST); + } + this.save(entity); + } + + private EquipmentEntity getByEquipmentSn(String equipmentSn){ + return this.getOne(Wrappers.lambdaQuery(EquipmentEntity.class).eq(EquipmentEntity::getEquipmentSn, equipmentSn)); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(String equipmentId, EquipmentReq req) { + EquipmentEntity equipment = this.getById(equipmentId); + if(null == equipment){ + throw new ServiceException(Message.EQUIPMENT_ID_NOT_EXIST); + } + if(!equipment.getEquipmentSn().equals(req.getEquipmentSn()) && null != getByEquipmentSn(req.getEquipmentSn())){ + throw new ServiceException(Message.EQUIPMENT_SN_EXIST); + } + EquipmentEntity entity = Converts.INSTANCE.toEquipmentUseRecordEntity(req); + entity.setEquipmentId(equipmentId); + this.updateById(entity); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(String equipmentId) { + EquipmentEntity equipment = this.getById(equipmentId); + if(null == equipment){ + throw new ServiceException(Message.EQUIPMENT_ID_NOT_EXIST); + } + this.removeById(equipmentId); + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/EquipmentUseRecordServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/EquipmentUseRecordServiceImpl.java new file mode 100644 index 0000000..7ee486c --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/EquipmentUseRecordServiceImpl.java @@ -0,0 +1,137 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.lang.generator.SnowflakeGenerator; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Constants; +import com.dite.znpt.constant.Message; +import com.dite.znpt.converts.Converts; +import com.dite.znpt.domain.entity.EquipmentEntity; +import com.dite.znpt.domain.entity.EquipmentUseRecordEntity; +import com.dite.znpt.domain.entity.ProjectEntity; +import com.dite.znpt.domain.entity.UserEntity; +import com.dite.znpt.domain.vo.EquipmentReq; +import com.dite.znpt.domain.vo.EquipmentUseRecordListReq; +import com.dite.znpt.domain.vo.EquipmentUseRecordReq; +import com.dite.znpt.domain.vo.EquipmentUseRecordResp; +import com.dite.znpt.enums.EquipmentStatusEnum; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.EquipmentUseRecordMapper; +import com.dite.znpt.service.EquipmentService; +import com.dite.znpt.service.EquipmentUseRecordService; +import com.dite.znpt.service.ProjectService; +import com.dite.znpt.service.UserService; +import com.dite.znpt.util.PageUtil; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.List; +import java.util.UUID; + +/** + * @author Bear.G + * @date 2025/7/23/周三 17:40 + * @description + */ +@Service +public class EquipmentUseRecordServiceImpl extends ServiceImpl implements EquipmentUseRecordService { + + @Resource + private EquipmentService equipmentService; + + @Resource + private ProjectService projectService; + + @Resource + private UserService userService; + + @Override + public List page(EquipmentUseRecordListReq req) { + PageUtil.startPage(); + return this.list(req); + } + + @Override + public List list(EquipmentUseRecordListReq req) { + return this.baseMapper.selectEquipmentUseRecordResp(req); + } + + @Override + public List detail(String equipmentId) { + return this.baseMapper.getEquipmentUseRecordResp(equipmentId); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void borrowEquipment(String equipmentId, EquipmentUseRecordReq req) { + EquipmentEntity equipment = equipmentService.getById(equipmentId); + if(null == equipment || !EquipmentStatusEnum.NORMAL.getCode().equals(equipment.getEquipmentStatus())){ + throw new ServiceException(Message.EQUIPMENT_STATUS_ERROR_FORBIDDEN_USE); + } + if("1".equals(equipment.getUseStatus())){ + throw new ServiceException(Message.EQUIPMENT_IS_USED); + } + UserEntity user = userService.getById(req.getUserId()); + if(null == user || !Constants.DEL_FLAG_0.equals(user.getDelFlag())){ + throw new ServiceException(Message.USER_ID_NOT_EXIST); + } + ProjectEntity project = projectService.getById(req.getProjectId()); + if(null == project){ + throw new ServiceException(Message.PROJECT_ID_IS_NOT_EXIST); + } + EquipmentUseRecordEntity equipmentUseRecordEntity = Converts.INSTANCE.toEquipmentUseRecordEntity(req); + equipmentUseRecordEntity.setEquipmentId(equipmentId); + equipmentUseRecordEntity.setOperateTime(LocalDateTime.now()); + equipmentUseRecordEntity.setOperateType("0"); + equipmentUseRecordEntity.setBatchId(new SnowflakeGenerator().next().toString()); + this.save(equipmentUseRecordEntity); + + equipment.setUseStatus("1"); + equipment.setUseRecordId(equipmentUseRecordEntity.getUseRecordId()); + equipmentService.updateById(equipment); + + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void returnEquipment(String userRecordId, EquipmentUseRecordReq req) { + EquipmentUseRecordEntity equipmentUseRecord = this.getById(userRecordId); + if(null == equipmentUseRecord){ + throw new ServiceException(Message.EQUIPMENT_USE_RECORD_ID_NOT_EXIST); + } + EquipmentEntity equipment = equipmentService.getById(equipmentUseRecord.getEquipmentId()); + if(null == equipment){ + throw new ServiceException(Message.EQUIPMENT_ID_NOT_EXIST); + } + if("0".equals(equipment.getUseStatus())){ + throw new ServiceException(Message.EQUIPMENT_IS_RETURN); + } + this.getOneOpt( + Wrappers.lambdaQuery() + .eq(EquipmentUseRecordEntity::getBatchId, equipmentUseRecord.getBatchId()) + .eq(EquipmentUseRecordEntity::getOperateType, "1") + ).ifPresent(equipmentUseRecordEntity -> {throw new ServiceException(Message.EQUIPMENT_IS_RETURN);}); + + UserEntity user = userService.getById(req.getUserId()); + if(null == user || !Constants.DEL_FLAG_0.equals(user.getDelFlag())){ + throw new ServiceException(Message.USER_ID_NOT_EXIST); + } + ProjectEntity project = projectService.getById(req.getProjectId()); + if(null == project){ + throw new ServiceException(Message.PROJECT_ID_IS_NOT_EXIST); + } + EquipmentUseRecordEntity equipmentUseRecordEntity = Converts.INSTANCE.toEquipmentUseRecordEntity(req); + equipmentUseRecordEntity.setEquipmentId(equipmentUseRecord.getEquipmentId()); + equipmentUseRecordEntity.setOperateTime(LocalDateTime.now()); + equipmentUseRecordEntity.setOperateType("1"); + equipmentUseRecordEntity.setBatchId(equipmentUseRecord.getBatchId()); + this.save(equipmentUseRecordEntity); + + equipment.setUseRecordId(null); + equipment.setUseStatus("0"); + equipmentService.updateById(equipment); + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/ImageCollectServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/ImageCollectServiceImpl.java new file mode 100644 index 0000000..1aac248 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/ImageCollectServiceImpl.java @@ -0,0 +1,71 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.io.FileUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Message; +import com.dite.znpt.converts.Converts; +import com.dite.znpt.domain.entity.ImageCollectEntity; +import com.dite.znpt.domain.entity.ImageEntity; +import com.dite.znpt.domain.vo.ImageCollectReq; +import com.dite.znpt.enums.FilePathEnum; +import com.dite.znpt.enums.ImageSourceEnum; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.ImageCollectMapper; +import com.dite.znpt.service.ImageCollectService; +import com.dite.znpt.service.ImageService; +import com.dite.znpt.service.PartService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.io.File; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/4/24 21:20 + * @Description: + */ +@Service +public class ImageCollectServiceImpl extends ServiceImpl implements ImageCollectService { + + @Resource + private ImageService imageService; + + @Resource + private PartService partService; + + @Transactional(rollbackFor = Exception.class) + @Override + public void save(String partId, ImageCollectReq req) { + if(null == partService.getById(partId)){ + throw new ServiceException(Message.PART_ID_IS_NOT_EXIST); + } + if(CollUtil.isEmpty(req.getImageList())){ + throw new ServiceException(Message.IMAGE_IS_EMPTY); + } + ImageCollectEntity imageCollect = Converts.INSTANCE.toImageCollectEntity(req); + this.save(imageCollect); + String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + List imageList = Converts.INSTANCE.toImageEntity(req.getImageList()); + String permPathPrefix = FilePathEnum.IMAGE.getFileAbsolutePathPrefix().concat(ImageSourceEnum.COLLECT.getCode()).concat(FileUtil.FILE_SEPARATOR).concat(partId).concat(FileUtil.FILE_SEPARATOR).concat(dateStr).concat(FileUtil.FILE_SEPARATOR); + imageList.forEach(image -> { + image.setPartId(partId); + image.setCollectId(imageCollect.getCollectId()); + image.setImageType(req.getImageType()); + image.setImageTypeLabel(req.getImageTypeLabel()); + String path = permPathPrefix + image.getImageName(); + String fileAbsolutePath = FilePathEnum.IMAGE_TEMP.getFileAbsolutePath(image.getImagePath()); + File file = FileUtil.file(fileAbsolutePath); + if (file.exists()) { + FileUtil.copy(file, FileUtil.file(path), true); + image.setImagePath(FilePathEnum.IMAGE.getFileDownPath(path)); + FileUtil.del(file); + } + }); + imageService.saveOrUpdateBatch(imageList); + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/ImageServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/ImageServiceImpl.java new file mode 100644 index 0000000..3c7a393 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/ImageServiceImpl.java @@ -0,0 +1,505 @@ +package com.dite.znpt.service.impl; + +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.PathUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Message; +import com.dite.znpt.domain.entity.ImageCollectEntity; +import com.dite.znpt.domain.entity.ImageEntity; +import com.dite.znpt.domain.entity.PartEntity; +import com.dite.znpt.domain.vo.*; +import com.dite.znpt.enums.*; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.ImageMapper; +import com.dite.znpt.service.*; +import com.dite.znpt.util.EXIFUtil; +import com.dite.znpt.util.PageUtil; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.File; +import java.io.IOException; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.nio.file.FileVisitResult; +import java.nio.file.Path; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.function.Function; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +/** + * @author Bear.G + * @date 2025/4/24/周四 13:23 + * @description + */ +@Slf4j +@Service +public class ImageServiceImpl extends ServiceImpl implements ImageService { + + @Resource + private ImageCollectService imageCollectService; + + @Resource + private PartService partService; + @Autowired + private AudioFileInfoService audioFileInfoService; + private ProjectService projectService; + @Autowired + private UserService userService; + + @Override + public List list(ImageListReq req) { + List list = this.baseMapper.queryImageList(req); + if (CollUtil.isNotEmpty(list)) { + Map> audioMap = audioFileInfoService.selectByImageIds(list.stream().map(ImageListResp::getImageId).collect(Collectors.toList())) + .stream().collect(Collectors.groupingBy(AudioFileInfoResp::getImageId)); + list.forEach(resp -> { + resp.setAudioList(BeanUtil.copyToList(audioMap.get(resp.getImageId()), AudioFileInfoResp.class)); + resp.setWeatherLabel(WeatherEnum.getDescByCode(resp.getWeather())); + resp.setShootingMethodLabel(ShootingMethodEnum.getDescByCode(resp.getShootingMethod())); + if (StrUtil.isEmpty(resp.getImageTypeLabel())) { + resp.setImageTypeLabel(ImageTypeEnum.getDescByCode(resp.getImageType())); + } + resp.setImageSourceLabel(ImageSourceEnum.getDescByCode(resp.getImageSource())); + }); + } + return list; + } + + @Override + public List page(ImageListReq req) { + PageUtil.startPage(); + return this.list(req); + } + + @Override + public List batchSaveByImageSimpleReq(List list){ + List imageList = new ArrayList<>(); + List partIds = list.stream().map(ImageSimpleReq::getPartId).collect(Collectors.toList()); + Map partIdMap= partService.listByIds(partIds).stream().collect(Collectors.toMap(PartEntity::getPartId, Function.identity())); + list.forEach(req -> { + if(partIdMap.containsKey(req.getPartId())){ + String path_prefix = FilePathEnum.IMAGE.getFileAbsolutePathPrefix().concat(StrUtil.BACKSLASH).concat(req.getImageSource()).concat(StrUtil.BACKSLASH).concat(req.getPartId()).concat(StrUtil.BACKSLASH); + String temp_path_prefix = FilePathEnum.IMAGE_TEMP.getFileAbsolutePathPrefix().concat(StrUtil.BACKSLASH).concat(req.getImageSource()).concat(StrUtil.BACKSLASH).concat(req.getPartId()).concat(StrUtil.BACKSLASH); + File file = new File(req.getImagePath()); + if(file.exists() && req.getImagePath().contains(temp_path_prefix)){ + ImageEntity entity = new ImageEntity(); + entity.setPartId(req.getPartId()); + String path = path_prefix + StrUtil.removePrefix(req.getImagePath(), temp_path_prefix); + byte[] bytes = FileUtil.readBytes(file); + FileUtil.writeBytes(bytes, path); + FileUtil.del(file); + entity.setImagePath(path); + imageList.add(entity); + } + } + }); + baseMapper.insert(imageList); + return imageList; + } + + @Override + public ImageResp detail(String imageId) { + ImageResp imageResp = this.baseMapper.detail(imageId); + if (null != imageResp) { + List list = audioFileInfoService.selectByImageIds(ListUtil.toList(imageId)); + imageResp.setAudioList(list); + if (null != imageResp.getImageCollectInfo()) { + imageResp.getImageCollectInfo().setWeatherLabel(WeatherEnum.getDescByCode(imageResp.getImageCollectInfo().getWeather())); + imageResp.getImageCollectInfo().setShootingMethodLabel(ShootingMethodEnum.getDescByCode(imageResp.getImageCollectInfo().getShootingMethodLabel())); + imageResp.getImageCollectInfo().setImageSourceLabel(ImageSourceEnum.getDescByCode(imageResp.getImageCollectInfo().getImageSource())); + } + } + return imageResp; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public List batchUploadDefectImage(String partId, String imageSource, ImageCollectReq collectReq, MultipartFile[] files) { + if (StrUtil.isEmpty(imageSource) || Objects.isNull(ImageSourceEnum.getByCode(imageSource))) { + throw new ServiceException(Message.IMAGE_SOURCE_IS_NOT_EXIST); + } + PartResp partResp = partService.detail(partId); + if(null == files || files.length == 0){ + throw new ServiceException(Message.IMAGE_IS_EMPTY); + } + List list = new ArrayList<>(files.length); + File temCategory = new File(FilePathEnum.IMAGE_TEMP.getFileAbsolutePathPrefix()); + if (!temCategory.exists()) { + // 创建完整的目录 + temCategory.mkdirs(); + } + String temPathPrefix = FilePathEnum.IMAGE_TEMP.getFileAbsolutePathPrefix().concat(imageSource).concat(FileUtil.FILE_SEPARATOR).concat(partId).concat(FileUtil.FILE_SEPARATOR); + ImageCollectEntity imageCollect = Optional.ofNullable(BeanUtil.copyProperties(collectReq, ImageCollectEntity.class)).orElse(new ImageCollectEntity()); + imageCollect.setCollectId(IdUtil.simpleUUID()); + imageCollect.setImageSource(imageSource); + List imageList = new ArrayList<>(); + for (MultipartFile file : files) { + ImageEntity imageEntity = new ImageEntity(); + if (!file.isEmpty()) { + try { + String path = temPathPrefix + file.getOriginalFilename(); + FileUtil.writeBytes(file.getBytes(),path); + String fileDownPath = FilePathEnum.IMAGE_TEMP.getFileDownPath(path); + ImageReq imageReq = imageRespBuilder(path, fileDownPath); + imageReq.setImageId(IdUtil.simpleUUID()); + BeanUtil.copyProperties(imageReq, imageEntity); + list.add(imageReq); + imageEntity.setPartId(partId); + imageEntity.setProjectId(partResp.getProjectId()); + imageEntity.setCollectId(imageCollect.getCollectId()); + imageEntity.setImageType(collectReq.getImageType()); + imageEntity.setImageTypeLabel(collectReq.getImageTypeLabel()); + imageList.add(imageEntity); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + imageCollectService.save(imageCollect); + baseMapper.insert(imageList); + return list; + } + + @SneakyThrows + @Override + public List uploadProjectBatch(String projectId, String imageSource, MultipartFile[] files) { + if (Objects.isNull(projectService.getById(projectId))) { + throw new ServiceException(Message.PROJECT_ID_IS_NOT_EXIST); + } + if(null == files || files.length == 0){ + throw new ServiceException(Message.IMAGE_IS_EMPTY); + } + String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + String path_prefix = FilePathEnum.IMAGE.getFileAbsolutePathPrefix().concat(imageSource).concat(FileUtil.FILE_SEPARATOR) + .concat(projectId).concat(FileUtil.FILE_SEPARATOR) + .concat(dateStr).concat(FileUtil.FILE_SEPARATOR); + if (!FileUtil.exist(path_prefix)) { + FileUtil.mkdir(path_prefix); + } + List list = new ArrayList<>(files.length); + List imageList = new ArrayList<>(); + + ImageCollectEntity imageCollect = new ImageCollectEntity(); + imageCollect.setCollectId(IdUtil.simpleUUID()); + imageCollect.setCollectorId(StpUtil.getLoginIdAsString()); + imageCollect.setCollectorName(userService.getById(StpUtil.getLoginIdAsString()).getName()); + for (MultipartFile multipartFile : files) { + String absolutePath = path_prefix + multipartFile.getOriginalFilename(); + FileUtil.writeBytes(multipartFile.getBytes(),absolutePath); + String fileDownPath = FilePathEnum.IMAGE.getFileDownPath(absolutePath); + ImageEntity imageEntity = new ImageEntity(); + try { + ImageReq imageReq = imageRespBuilder(absolutePath, fileDownPath); + BeanUtil.copyProperties(imageReq, imageEntity); + list.add(imageReq); + imageEntity.setProjectId(projectId); + imageEntity.setCollectId(imageCollect.getCollectId()); + imageList.add(imageEntity); + } catch (Exception e) { + e.printStackTrace(); + } + } + imageCollectService.save(imageCollect); + baseMapper.insert(imageList); + return list; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public List batchUploadCommonImage(String imageSource, ImageWorkReq imageWorkReq, MultipartFile[] files) throws IOException { + if(null == files || files.length == 0){ + throw new ServiceException(Message.IMAGE_IS_EMPTY); + } + String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + String path_prefix = FilePathEnum.IMAGE.getFileAbsolutePathPrefix().concat(imageSource).concat(FileUtil.FILE_SEPARATOR).concat(dateStr).concat(FileUtil.FILE_SEPARATOR); + if (Objects.nonNull(imageWorkReq)) { + path_prefix = path_prefix.concat(StrUtil.emptyToDefault(imageWorkReq.getUploadUser(), "默认用户")).concat(FileUtil.FILE_SEPARATOR) + .concat(StrUtil.emptyToDefault(imageWorkReq.getLongitude(), "0")) + .concat(" ").concat(StrUtil.emptyToDefault(imageWorkReq.getLatitude(), "0")) + .concat(" ").concat(StrUtil.emptyToDefault(imageWorkReq.getAltitude(), "0")) + .concat(FileUtil.FILE_SEPARATOR); + } + if (!FileUtil.exist(path_prefix)) { + FileUtil.mkdir(path_prefix); + } + List result = new ArrayList<>(files.length); + for (MultipartFile multipartFile : files) { + String path = path_prefix + multipartFile.getOriginalFilename(); + FileUtil.writeBytes(multipartFile.getBytes(),path); + result.add(FilePathEnum.IMAGE.getFileDownPath(path)); + } + String partId = imageWorkReq.getPartId(); + if (StrUtil.isNotEmpty(partId)) { + ImageCollectEntity imageCollect = new ImageCollectEntity(); + imageCollect.setCollectId(IdUtil.simpleUUID()); + imageCollect.setCollectorName(imageWorkReq.getUploadUser()); + PartResp part = partService.detail(partId); + List imageList = new ArrayList<>(); + result.forEach(path -> { + ImageEntity imageEntity = new ImageEntity(); + String absolutePath = FilePathEnum.IMAGE.getFileAbsolutePath(path); + try { + ImageReq imageReq = imageRespBuilder(absolutePath, path); + BeanUtil.copyProperties(imageReq, imageEntity); + } catch (Exception e) { + log.debug("读取文件信息失败:{}", path); + imageEntity.setImageName(FileUtil.getName(absolutePath)); + BigDecimal imageSize = new BigDecimal(FileUtil.size(FileUtil.file(absolutePath))).divide(new BigDecimal(1024*1024), 4, RoundingMode.HALF_UP); + imageEntity.setImageSize(imageSize.toString().concat("M")); + } + imageEntity.setLongitude(imageWorkReq.getLongitude()); + imageEntity.setLatitude(imageWorkReq.getLatitude()); + imageEntity.setAltitude(imageWorkReq.getAltitude()); + imageEntity.setImagePath(path); + imageEntity.setPartId(partId); + imageEntity.setProjectId(part.getProjectId()); + imageEntity.setCollectId(imageCollect.getCollectId()); + imageList.add(imageEntity); + }); + imageCollectService.save(imageCollect); + baseMapper.insert(imageList); + } + return result; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void delete(String imageId) { + ImageEntity image = this.getById(imageId); + if(null ==image){ + throw new ServiceException(Message.IMAGE_ID_IS_NOT_EXIST); + } + this.removeById(image); + List imageList = this.list(Wrappers.lambdaQuery().eq(ImageEntity::getCollectId, image.getCollectId())); + if(CollUtil.isEmpty(imageList)){ + imageCollectService.removeById(image.getCollectId()); + } + FilePathEnum pathEnum = image.getImagePath().contains("temp") ? FilePathEnum.IMAGE_TEMP : FilePathEnum.IMAGE; + FileUtil.del(pathEnum.getFileAbsolutePath(image.getImagePath())); + FileUtil.del(FilePathEnum.IMAGE.getFileAbsolutePath(image.getPreImagePath())); + } + + private ImageReq imageRespBuilder(String absolutePath, String downloadPath) throws Exception { + ImageReq req = new ImageReq(); + File file = new File(absolutePath); + JSONObject obj = EXIFUtil.printImageTags(file); + req.setCameraManufacturer(obj.getStr("Make")); + req.setCameraModel(obj.getStr("Model")); + req.setImageName(obj.getStr("File Name")); + req.setImagePath(downloadPath); + BigDecimal imageSize = new BigDecimal(extractDigit(obj.getStr("File Size"))).divide(new BigDecimal(1024*1024), 4, RoundingMode.HALF_UP); + req.setImageSize(imageSize.toString().concat("M")); + req.setImageWidth(extractDigit(obj.getStr("Image Width"))); + req.setImageHeight(extractDigit(obj.getStr("Image Height"))); + req.setImageResolution(req.getImageWidth().concat("x").concat(req.getImageHeight())); + req.setFocalDistance35(extractDigit(obj.getStr("Focal Length 35"))); + req.setXResolution(extractDigit(obj.getStr("X Resolution"))); + req.setYResolution(extractDigit(obj.getStr("Y Resolution"))); + req.setResolutionUnits(obj.getStr("Resolution Units")); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy:MM:dd HH:mm:ss"); + if(StrUtil.isNotBlank(obj.getStr("Date/Time Original"))){ + req.setShootingTime(LocalDateTime.parse(obj.getStr("Date/Time Original"), formatter)); + } + req.setFocalDistance(extractDigit(obj.getStr("Focal Length"))); + req.setLatitude(obj.getStr("GPS Latitude")); + req.setLongitude(obj.getStr("GPS Longitude")); + req.setAltitude(extractDigit(obj.getStr("GPS Altitude"))); + if(StrUtil.isNotBlank(req.getLatitude()) && StrUtil.isNotBlank(req.getLongitude()) && StrUtil.isNotBlank(req.getAltitude())){ + String gps = req.getLatitude().concat("°").concat(directionTranslator(obj.getStr("GPS Latitude Ref"))).concat(StrUtil.COMMA) + .concat(req.getLongitude()).concat("°").concat(directionTranslator(obj.getStr("GPS Longitude Ref"))).concat(StrUtil.COMMA) + .concat("海拔").concat(req.getAltitude()).concat("m"); + req.setGPS(gps); + } + return req; + } + + private String directionTranslator(String direction){ + if(direction.equalsIgnoreCase("N")){ + return "北"; + } else if (direction.equalsIgnoreCase("S")) { + return "南"; + } else if (direction.equalsIgnoreCase("E")) { + return "东"; + }else if (direction.equalsIgnoreCase("W")) { + return "西"; + }else { + return "未知"; + } + } + + private static String extractDigit(String str) { + if(StrUtil.isEmpty(str)){ + return null; + } + Pattern pattern = Pattern.compile("\\d+(\\.\\d+)?"); + Matcher matcher = pattern.matcher(str); + if (matcher.find()) { + return matcher.group(); + } else { + return null; + } + } + + @Override + public List listAppUploadImages() { + List filePaths = new ArrayList<>(); + PathUtil.walkFiles(Path.of(FilePathEnum.IMAGE.getFileAbsolutePathPrefix()), new SimpleFileVisitor<>() { + @Override + public FileVisitResult visitFile(Path path, BasicFileAttributes attrs) { + if (path.toFile().isFile()) { + String imageDownPath = FilePathEnum.IMAGE.getFileDownPath(path.toFile().getAbsolutePath()); + List split = StrUtil.split(imageDownPath, StrUtil.SLASH, true, true); +// /static/image/source/date + try { + DateUtil.parseDate(split.get(3)); + filePaths.add(imageDownPath); + } catch (Exception ignore) {} + } + return FileVisitResult.CONTINUE; + } + }); + +// 查询图片关联记录 + List imageList = new ArrayList<>(); + CollUtil.split(filePaths, 1000).forEach(paths -> { + imageList.addAll(lambdaQuery().in(ImageEntity::getImagePath, paths).list()); + }); + Map imageMap = imageList.stream() + .collect(Collectors.toMap(ImageEntity::getImagePath, Function.identity(), (a, b) -> a)); + +// 查询部件信息 + Map partInfoMap = new HashMap<>(); + CollUtil.split(imageList, 1000).forEach(images -> { + List partIds = images.stream().map(ImageEntity::getPartId).collect(Collectors.toList()); + List partList = partService.listInfos(partIds); + partInfoMap.putAll(partList.stream().collect(Collectors.toMap(PartResp::getPartId, Function.identity()))); + }); + +// 将信息写入返回实体 + List respList = new ArrayList<>(); + for (String filePath : filePaths) { + AppImageResp resp = new AppImageResp(); + resp.setImagePath(filePath); + + List split = StrUtil.split(filePath, StrUtil.SLASH, true, true); + + ImageEntity image = imageMap.get(filePath); + if (image != null) { + BeanUtil.copyProperties(image, resp); + PartResp part = partInfoMap.get(image.getPartId()); + if (part != null) { + resp.setPartId(part.getPartId()); + resp.setPartName(part.getPartName()); + resp.setTurbineId(part.getTurbineId()); + resp.setTurbineName(part.getTurbineName()); + resp.setProjectId(part.getProjectId()); + resp.setProjectName(part.getProjectName()); + } + } else { + List gps = StrUtil.split(split.get(5), " "); + if (gps.size() > 1) { + resp.setLongitude(gps.get(0)); + resp.setLatitude(gps.get(1)); + resp.setAltitude(gps.get(2)); + } + } + resp.setUploadUser(split.get(4)); + resp.setImageSource(split.get(2)); + + respList.add(resp); + } + return respList; + } + + /** + * 功能描述:链接APP上传的图像到部件 + * + * @author cuizhibin + * @date 2025/06/06 09:44 + **/ + @Transactional(rollbackFor = Exception.class) + public void linkAppImagesToPart(AppImageToPartReq partReq) { + PartEntity part = partService.getById(partReq.getPartId()); + if (Objects.isNull(part)) { + throw new ServiceException(Message.PART_ID_IS_NOT_EXIST); + } +// 查询图片关联记录 + List imageList = new ArrayList<>(); + CollUtil.split(partReq.getImagePaths(), 1000).forEach(paths -> { + imageList.addAll(lambdaQuery().in(ImageEntity::getImagePath, paths).list()); + }); + partReq.getImagePaths().removeAll(imageList.stream().map(ImageEntity::getImagePath).toList()); + + String collectId = IdUtil.simpleUUID(); + imageList.forEach(imageEntity -> { + imageEntity.setPartId(partReq.getPartId()); + imageEntity.setCollectId(collectId); + }); + baseMapper.updateById(imageList); +// 新增 + List newImageList = new ArrayList<>(); + partReq.getImagePaths().forEach(path -> { + ImageEntity imageEntity = new ImageEntity(); + String absolutePath = FilePathEnum.IMAGE.getFileAbsolutePath(path); + try { + ImageReq imageReq = imageRespBuilder(absolutePath, path); + BeanUtil.copyProperties(imageReq, imageEntity); + } catch (Exception e) { + log.debug("读取文件信息失败:{}", path); + imageEntity.setImageName(FileUtil.getName(absolutePath)); + BigDecimal imageSize = new BigDecimal(FileUtil.size(FileUtil.file(absolutePath))).divide(new BigDecimal(1024*1024), 4, RoundingMode.HALF_UP); + imageEntity.setImageSize(imageSize.toString().concat("M")); + } + if (StrUtil.isEmpty(imageEntity.getLongitude()) || imageEntity.getLongitude().equals("0.0")) { + List split = StrUtil.split(path, StrUtil.SLASH, true, true); + List gps = StrUtil.split(split.get(5), " "); + imageEntity.setLongitude(gps.get(0)); + imageEntity.setLatitude(gps.get(1)); + imageEntity.setAltitude(gps.get(2)); + } + imageEntity.setImagePath(path); + imageEntity.setPartId(partReq.getPartId()); + imageEntity.setCollectId(collectId); + newImageList.add(imageEntity); + }); + imageCollectService.save(BeanUtil.copyProperties(partReq, ImageCollectEntity.class)); + baseMapper.insert(newImageList); + } + + /** + * 功能描述:审核图片 + * + * @param imageIds 图片id列表 + * @author cuizhibin + * @date 2025/07/16 15:28 + **/ + @Override + public void reviewImages(List imageIds) { + if (CollUtil.isEmpty(imageIds)) { + throw new ServiceException(Message.IMAGE_IS_EMPTY); + } + lambdaUpdate().in(ImageEntity::getImageId, imageIds).set(ImageEntity::getReviewState, "1").update(); + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/InspectionReportServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/InspectionReportServiceImpl.java new file mode 100644 index 0000000..9e81bef --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/InspectionReportServiceImpl.java @@ -0,0 +1,201 @@ +package com.dite.znpt.service.impl; + +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.config.ExtUtilConfig; +import com.dite.znpt.constant.Message; +import com.dite.znpt.converts.Converts; +import com.dite.znpt.domain.entity.*; +import com.dite.znpt.domain.vo.*; +import com.dite.znpt.enums.*; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.InspectionReportMapper; +import com.dite.znpt.service.*; +import com.dite.znpt.util.PageUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author Bear.G + * @date 2025/7/7/周一 17:42 + * @description + */ +@Service +@RequiredArgsConstructor +public class InspectionReportServiceImpl extends ServiceImpl implements InspectionReportService { + + @Resource + private ProjectService projectService; + + @Resource + private TurbineService turbineService; + + @Resource + private DefectService defectService; + + @Resource + private CheckSchemeService checkSchemeService; + + + @Resource + private UserService userService; + private final ExtUtilConfig extUtilConfig; + private final AttachInfoService attachInfoService; + + @Override + public List page(InspectionReportListReq req) { + PageUtil.startPage(); + return this.list(req); + } + + @Override + public List list(InspectionReportListReq req) { + return this.baseMapper.listInspectionReportListResp(req); + } + + @Override + public InspectionReportResp detail(String reportId) { + InspectionReportEntity inspectionReport = this.getById(reportId); + if(null == inspectionReport){ + throw new ServiceException(Message.INSPECTION_REPORT_ID_IS_NOT_EXIST); + } + InspectionReportResp result = new InspectionReportResp(); + List userIds = new ArrayList<>(); + InspectionReportReportInfo reportInfo = Converts.INSTANCE.toInspectionReportReportInfo(inspectionReport); + userIds.add(reportInfo.getReportAuditor()); + userIds.add(reportInfo.getReportWriter()); + userIds.add(reportInfo.getReportReviewer()); + ProjectResp projectInfo = projectService.detail(inspectionReport.getProjectId()); + result.setProjectInfo(projectInfo); + TurbineInfoResp turbineInfo = turbineService.info(inspectionReport.getTurbineId()); + result.setTurbineInfo(turbineInfo); + List schemeInfoList = checkSchemeService.list(List.of(inspectionReport.getCheckMethod().split(StrUtil.COMMA))); + result.setSchemeInfoList(schemeInfoList); + InspectionReportCheckInfo checkInfo = Converts.INSTANCE.toInspectionReportCheckInfo(inspectionReport); + userIds.addAll(List.of(checkInfo.getCheckUserId().split(StrUtil.COMMA))); + Map userIdMap = userService.listByIds(userIds).stream().collect(Collectors.toMap(UserEntity::getUserId, Function.identity())); + if(userIdMap.containsKey(reportInfo.getReportAuditor())){ + reportInfo.setReportAuditName(userIdMap.get(reportInfo.getReportAuditor()).getName()); + } + if(userIdMap.containsKey(reportInfo.getReportWriter())){ + reportInfo.setReportWriterName(userIdMap.get(reportInfo.getReportWriter()).getName()); + } + if(userIdMap.containsKey(reportInfo.getReportReviewer())){ + reportInfo.setReportReviewerName(userIdMap.get(reportInfo.getReportReviewer()).getName()); + } + result.setReportInfo(reportInfo); + StringBuilder checkUserName = new StringBuilder(); + Arrays.stream(checkInfo.getCheckUserId().split(StrUtil.COMMA)).forEach(userId ->{ + if(userIdMap.containsKey(userId)){ + checkUserName.append(userIdMap.get(userId).getUserId()).append(StrUtil.COMMA); + } + }); + checkInfo.setCheckUserName(checkUserName.toString()); + checkInfo.setCheckMethodLabel(CheckMethodEnum.getDescByCode(checkInfo.getCheckMethod())); + result.setCheckInfo(checkInfo); + List defectInfoList = defectService.list(new DefectListReq().setTurbineId(inspectionReport.getTurbineId())); + result.setDefectInfoList(defectInfoList); + return result; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void save(InspectionReportReq req) { + this.save(validation(req)); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(String reportId, InspectionReportReq req) { + if(this.getById(reportId) == null){ + throw new ServiceException(Message.INSPECTION_REPORT_ID_IS_NOT_EXIST); + } + InspectionReportEntity entity = validation(req); + entity.setReportId(reportId); + this.updateById(entity); + } + + private InspectionReportEntity validation(InspectionReportReq req){ + ProjectEntity project = projectService.getById(req.getProjectId()); + if(null == project){ + throw new ServiceException(Message.PROJECT_ID_IS_NOT_EXIST); + } + if(ProjectStatusEnum.COMPLETED.getCode() != project.getStatus()){ + throw new ServiceException(StrUtil.format(Message.PROJECT_STATUS_IS_NOT_COMPLETED, project.getProjectName())); + } + TurbineEntity turbine = turbineService.getById(req.getTurbineId()); + if(null == turbine){ + throw new ServiceException(Message.TURBINE_ID_IS_NOT_EXIST); + } + if(ProjectStatusEnum.COMPLETED.getCode() != turbine.getStatus()){ + throw new ServiceException(StrUtil.format(Message.TURBINE_STATUS_IS_NOT_COMPLETED, turbine.getTurbineName())); + } + return Converts.INSTANCE.toInspectionReportEntity(req); + } + /** + * 功能描述:报告生成器 + * + * @param turbineId 机组id + * @author cuizhibin + * @date 2025/07/17 10:49 + **/ + @Override + @Transactional(rollbackFor = Exception.class) + public void reportGenerator(String turbineId) { + TurbineEntity turbine = turbineService.getById(turbineId); + if (Objects.isNull(turbine)) { + throw new ServiceException(Message.TURBINE_ID_IS_NOT_EXIST); + } + String outputDir = FilePathEnum.ATTACH.getFileAbsolutePathPrefix().concat(AttachBusinessTypeEnum.REPORT.getCode()).concat(FileUtil.FILE_SEPARATOR) + .concat(turbineId).concat(FileUtil.FILE_SEPARATOR); + String output = extUtilConfig.reportGenerator(turbineId, outputDir); + log.debug(output); + List list = FileUtil.listFileNames(outputDir); + if (CollUtil.isEmpty(list)) { + throw new ServiceException(Message.REPORT_GENERATOR_ERROR); + } + AttachInfoEntity attachInfo = new AttachInfoEntity(); + attachInfo.setBusinessId(turbineId); + attachInfo.setAttachPath(FilePathEnum.ATTACH.getFileDownPath(outputDir + list.get(0))); + attachInfo.setBusinessType(AttachBusinessTypeEnum.REPORT.getCode()); + attachInfoService.save(attachInfo); + + ProjectEntity project = projectService.getById(turbine.getProjectId()); + InspectionReportEntity inspectionReport = new InspectionReportEntity(); + inspectionReport.setTitle(project.getProjectName() + turbine.getTurbineName()); + inspectionReport.setProjectId(project.getProjectId()); + inspectionReport.setTurbineId(turbineId); + inspectionReport.setReportWriteTime(LocalDateTime.now()); + inspectionReport.setReportStatus(InspectionReportStatusEnum.PENDING.getCode()); + baseMapper.insert(inspectionReport); + } + + /** + * 功能描述:发布 + * + * @param reportId 报告id + * @author cuizhibin + * @date 2025/07/17 21:25 + **/ + @Override + public void publish(String reportId) { + InspectionReportEntity report = getById(reportId); + if (Objects.isNull(report)) { + throw new ServiceException(Message.REPORT_GENERATOR_ERROR); + } + report.setReportStatus(InspectionReportStatusEnum.PUBLISH.getCode()); + report.setReportAuditor(StpUtil.getLoginIdAsString()); + report.setReportAuditTime(LocalDateTime.now()); + baseMapper.updateById(report); + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/InsuranceCompanyServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/InsuranceCompanyServiceImpl.java new file mode 100644 index 0000000..ace29b0 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/InsuranceCompanyServiceImpl.java @@ -0,0 +1,96 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Constants; +import com.dite.znpt.constant.Message; +import com.dite.znpt.converts.Converts; +import com.dite.znpt.domain.entity.InsuranceCompanyEntity; +import com.dite.znpt.domain.vo.InsuranceCompanyListReq; +import com.dite.znpt.domain.vo.InsuranceCompanyReq; +import com.dite.znpt.domain.vo.InsuranceCompanyResp; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.InsuranceCompanyMapper; +import com.dite.znpt.service.InsuranceCompanyService; +import com.dite.znpt.util.PageUtil; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * @author Bear.G + * @date 2025/6/26/周四 9:34 + * @description + */ +@Service +public class InsuranceCompanyServiceImpl extends ServiceImpl implements InsuranceCompanyService { + @Override + public List page(InsuranceCompanyListReq req) { + PageUtil.startPage(); + return this.list(req); + } + + @Override + public List list(InsuranceCompanyListReq req) { + return Converts.INSTANCE.toInsuranceCompanyResp(this.list( + Wrappers.lambdaQuery(InsuranceCompanyEntity.class) + .eq(InsuranceCompanyEntity::getDelFlag, Constants.DEL_FLAG_0) + .like(StrUtil.isNotBlank(req.getInsuranceCompanyName()), InsuranceCompanyEntity::getInsuranceCompanyName, req.getInsuranceCompanyName()) + .like(StrUtil.isNotBlank(req.getContact()), InsuranceCompanyEntity::getContact, req.getContact()) + .like(StrUtil.isNotBlank(req.getContactPhone()), InsuranceCompanyEntity::getContactPhone, req.getContactPhone()) + .eq(StrUtil.isNotBlank(req.getStatus()), InsuranceCompanyEntity::getStatus, req.getStatus()) + )); + } + + @Override + public InsuranceCompanyResp detail(String insuranceCompanyId) { + InsuranceCompanyEntity entity = this.getById(insuranceCompanyId); + if(null == entity || !entity.getDelFlag().equals(Constants.DEL_FLAG_0)){ + throw new ServiceException(Message.INSURANCE_COMPANY_ID_IS_NOT_EXIST); + } + return Converts.INSTANCE.toInsuranceCompanyResp(entity); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void save(InsuranceCompanyReq req) { + this.getOneOpt( + Wrappers.lambdaQuery(InsuranceCompanyEntity.class) + .eq(InsuranceCompanyEntity::getDelFlag, Constants.DEL_FLAG_0) + .eq(InsuranceCompanyEntity::getInsuranceCompanyName, req.getInsuranceCompanyName()) + ).ifPresent(insuranceCompany -> {throw new ServiceException(Message.INSURANCE_COMPANY_NAME_IS_EXIST);}); + this.save(Converts.INSTANCE.toInsuranceCompanyEntity(req)); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(String insuranceCompanyId, InsuranceCompanyReq req) { + InsuranceCompanyEntity insuranceCompany = this.getById(insuranceCompanyId); + if(null == insuranceCompany || !insuranceCompany.getDelFlag().equals(Constants.DEL_FLAG_0)){ + throw new ServiceException(Message.INSURANCE_COMPANY_ID_IS_NOT_EXIST); + } + if(!req.getInsuranceCompanyName().equals(insuranceCompany.getInsuranceCompanyName())){ + this.getOneOpt( + Wrappers.lambdaQuery(InsuranceCompanyEntity.class) + .eq(InsuranceCompanyEntity::getDelFlag, Constants.DEL_FLAG_0) + .eq(InsuranceCompanyEntity::getInsuranceCompanyName, req.getInsuranceCompanyName()) + ).ifPresent(company -> {throw new ServiceException(Message.INSURANCE_COMPANY_NAME_IS_EXIST);}); + } + InsuranceCompanyEntity entity = Converts.INSTANCE.toInsuranceCompanyEntity(req); + entity.setInsuranceCompanyId(insuranceCompanyId); + this.updateById(entity); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(String insuranceCompanyId) { + InsuranceCompanyEntity entity = this.getById(insuranceCompanyId); + if(null == entity || !entity.getDelFlag().equals(Constants.DEL_FLAG_0)){ + throw new ServiceException(Message.INSURANCE_COMPANY_ID_IS_NOT_EXIST); + } + entity.setDelFlag(Constants.DEL_FLAG_1); + this.updateById(entity); + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/InsuranceInfoServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/InsuranceInfoServiceImpl.java new file mode 100644 index 0000000..d8c01f0 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/InsuranceInfoServiceImpl.java @@ -0,0 +1,200 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Constants; +import com.dite.znpt.constant.Message; +import com.dite.znpt.converts.Converts; +import com.dite.znpt.domain.entity.*; +import com.dite.znpt.domain.vo.*; +import com.dite.znpt.enums.AttachBusinessTypeEnum; +import com.dite.znpt.enums.FilePathEnum; +import com.dite.znpt.enums.InsuranceStatusEnum; +import com.dite.znpt.enums.UserStatusEnum; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.InsuranceInfoMapper; +import com.dite.znpt.service.*; +import com.dite.znpt.util.PageUtil; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author Bear.G + * @date 2025/6/26/周四 9:32 + * @description + */ +@Service +public class InsuranceInfoServiceImpl extends ServiceImpl implements InsuranceInfoService { + + @Resource + private InsuranceCompanyService insuranceCompanyService; + + @Resource + private InsuranceTypeService insuranceTypeService; + + @Resource + private UserService userService; + + @Resource + private AttachInfoService attacheInfoService; + + @Override + public List page(InsuranceInfoListReq req) { + PageUtil.startPage(); + return this.list(req); + } + + @Override + public List list(InsuranceInfoListReq req) { + List result = Converts.INSTANCE.toInsuranceInfoResp( + this.list(Wrappers.lambdaQuery(InsuranceInfoEntity.class) + .like(StrUtil.isNotBlank(req.getName()), InsuranceInfoEntity::getName, req.getName()) + .like(StrUtil.isNotBlank(req.getUserCode()), InsuranceInfoEntity::getUserCode, req.getUserCode()) + .eq(StrUtil.isNotBlank(req.getInsuranceTypeId()), InsuranceInfoEntity::getInsuranceTypeId, req.getInsuranceCompanyId()) + .eq(StrUtil.isNotBlank(req.getInsuranceCompanyId()), InsuranceInfoEntity::getInsuranceCompanyId, req.getInsuranceCompanyId()) + .eq(StrUtil.isNotBlank(req.getInsuranceStatus()), InsuranceInfoEntity::getInsuranceStatus, req.getInsuranceStatus()) + )); + return result; + } + + @Override + public List pageAttach(InsuranceInfoListReq req) { + PageUtil.startPage(); + return this.listAttach(req); + } + + @Override + public List listAttach(InsuranceInfoListReq req) { + List result = Converts.INSTANCE.toInsuranceAttachResp( + this.list(Wrappers.lambdaQuery(InsuranceInfoEntity.class) + .like(StrUtil.isNotBlank(req.getName()), InsuranceInfoEntity::getName, req.getName()) + .like(StrUtil.isNotBlank(req.getUserCode()), InsuranceInfoEntity::getUserCode, req.getUserCode()) + .eq(StrUtil.isNotBlank(req.getInsuranceTypeId()), InsuranceInfoEntity::getInsuranceTypeId, req.getInsuranceCompanyId()) + .eq(StrUtil.isNotBlank(req.getInsuranceCompanyId()), InsuranceInfoEntity::getInsuranceCompanyId, req.getInsuranceCompanyId()) + .eq(StrUtil.isNotBlank(req.getInsuranceStatus()), InsuranceInfoEntity::getInsuranceStatus, req.getInsuranceStatus()) + ) + ); + + List attachInfoIds = result.stream().map(InsuranceAttachResp::getAttachInfoId).filter(StrUtil::isNotBlank).toList(); + if(CollUtil.isNotEmpty(attachInfoIds)){ + Map attachIdMap = attacheInfoService.list( + Wrappers.lambdaQuery(AttachInfoEntity.class).in(AttachInfoEntity::getAttachId, attachInfoIds).eq(AttachInfoEntity::getDelFlag, Constants.DEL_FLAG_0) + ).stream().collect(Collectors.toMap(AttachInfoEntity::getAttachId, Function.identity())); + result.forEach(resp -> { + if(StrUtil.isNotBlank(resp.getAttachInfoId()) && attachIdMap.containsKey(resp.getAttachInfoId())){ + resp.setAttachPath(attachIdMap.get(resp.getAttachInfoId()).getAttachPath()); + resp.setCreateTime(attachIdMap.get(resp.getAttachInfoId()).getCreateTime()); + resp.setFileType(attachIdMap.get(resp.getAttachInfoId()).getFileType()); + resp.setRemark(attachIdMap.get(resp.getAttachInfoId()).getRemark()); + } + }); + } + return result; + } + + @Override + public InsuranceInfoResp detail(String insuranceInfoId) { + InsuranceInfoEntity insuranceInfoEntity = this.getById(insuranceInfoId); + if(null == insuranceInfoEntity || !Constants.DEL_FLAG_0.equals(insuranceInfoEntity.getDelFlag())){ + throw new ServiceException(Message.INSURANCE_INFO_ID_IS_NOT_EXIST); + } + InsuranceInfoResp result = Converts.INSTANCE.toInsuranceInfoResp(insuranceInfoEntity); + if(StrUtil.isNotBlank(insuranceInfoEntity.getAttachInfoId())){ + AttachInfoEntity attachInfoEntity = attacheInfoService.getById(insuranceInfoEntity.getAttachInfoId()); + result.setAttachInfoResp(Converts.INSTANCE.toAttacheInfoResp(attachInfoEntity)); + } + return result; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void save(InsuranceInfoReq req) { + InsuranceInfoEntity entity = validation(Converts.INSTANCE.toInsuranceInfoEntity(req)); + this.save(entity); + if(StrUtil.isNotBlank(entity.getAttachInfoId())){ + attacheInfoService.updateBusinessIdByAttachIds(entity.getInsuranceInfoId(), Arrays.asList(entity.getAttachInfoId()), AttachBusinessTypeEnum.INSURANCE_FILE); + } + + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(String insuranceInfoId, InsuranceInfoReq req) { + InsuranceInfoEntity insuranceInfoEntity = this.getById(insuranceInfoId); + if(null == insuranceInfoEntity || !Constants.DEL_FLAG_0.equals(insuranceInfoEntity.getDelFlag())){ + throw new ServiceException(Message.INSURANCE_INFO_ID_IS_NOT_EXIST); + } + InsuranceInfoEntity entity = Converts.INSTANCE.toInsuranceInfoEntity(req); + entity.setInsuranceInfoId(insuranceInfoId); + this.updateById(validation(entity)); + if(StrUtil.isNotBlank(entity.getAttachInfoId())){ + attacheInfoService.updateBusinessIdByAttachIds(entity.getInsuranceInfoId(), Arrays.asList(entity.getAttachInfoId()), AttachBusinessTypeEnum.INSURANCE_FILE); + } + } + + + private InsuranceInfoEntity validation(InsuranceInfoEntity entity) { + UserEntity user = userService.getById(entity.getUserId()); + if(null == user || !Constants.STATUS_0.equals(user.getStatus()) + || !Constants.DEL_FLAG_0.equals(user.getDelFlag()) + || !UserStatusEnum.EMPLOYED.getCode().equals(user.getUserStatus())){ + throw new ServiceException(Message.USER_ID_NOT_EXIST_OR_ILLEGAL); + } + entity.setName(user.getName()); + entity.setUserCode(user.getUserCode()); + InsuranceCompanyEntity company = insuranceCompanyService.getById(entity.getInsuranceCompanyId()); + if(null == company ||!Constants.DEL_FLAG_0.equals(company.getDelFlag())){ + throw new ServiceException(Message.INSURANCE_COMPANY_ID_IS_NOT_EXIST); + } + entity.setInsuranceCompanyName(company.getInsuranceCompanyName()); + InsuranceTypeEntity type = insuranceTypeService.getById(entity.getInsuranceTypeId()); + if(null == type || !Constants.DEL_FLAG_0.equals(type.getDelFlag())){ + throw new ServiceException(Message.INSURANCE_TYPE_ID_IS_NOT_EXIST); + } + entity.setInsuranceTypeName(type.getInsuranceTypeName()); + entity.setInsuranceStatus(entity.getExpireDate().isBefore(LocalDate.now()) ? InsuranceStatusEnum.EXPIRED.getCode() : InsuranceStatusEnum.EFFECTIVE.getCode()); + return entity; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(String insuranceInfoId) { + InsuranceInfoEntity entity = this.getById(insuranceInfoId); + if(null == entity || !Constants.DEL_FLAG_0.equals(entity.getDelFlag())){ + throw new ServiceException(Message.INSURANCE_INFO_ID_IS_NOT_EXIST); + } + entity.setDelFlag(Constants.DEL_FLAG_1); + attacheInfoService.deleteByAttachInfoId(entity.getAttachInfoId()); + this.updateById(entity); + } + + @Transactional(rollbackFor = Exception.class) + @Scheduled(cron = "0 15 0 * * ?") + public void updateInsuranceStatus(){ + List list = this.list( + Wrappers.lambdaQuery(InsuranceInfoEntity.class) + .eq(InsuranceInfoEntity::getInsuranceStatus, InsuranceStatusEnum.EFFECTIVE.getCode()) + .lt(InsuranceInfoEntity::getExpireDate, LocalDate.now()) + ); + list.forEach(entity -> { + entity.setInsuranceStatus(InsuranceStatusEnum.EXPIRED.getCode()); + }); + this.updateBatchById(list); + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/InsuranceTypeServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/InsuranceTypeServiceImpl.java new file mode 100644 index 0000000..ae2a9a8 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/InsuranceTypeServiceImpl.java @@ -0,0 +1,93 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Constants; +import com.dite.znpt.constant.Message; +import com.dite.znpt.converts.Converts; +import com.dite.znpt.domain.entity.InsuranceTypeEntity; +import com.dite.znpt.domain.vo.InsuranceTypeReq; +import com.dite.znpt.domain.vo.InsuranceTypeResp; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.InsuranceTypeMapper; +import com.dite.znpt.service.InsuranceTypeService; +import com.dite.znpt.util.PageUtil; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * @author Bear.G + * @date 2025/6/26/周四 9:32 + * @description + */ +@Service +public class InsuranceTypeServiceImpl extends ServiceImpl implements InsuranceTypeService { + + @Override + public List page(String insuranceTypeName) { + PageUtil.startPage(); + return this.list(insuranceTypeName); + } + + @Override + public List list(String insuranceTypeName) { + return Converts.INSTANCE.toInsuranceTypeResp( + this.list(Wrappers.lambdaQuery(InsuranceTypeEntity.class) + .eq(InsuranceTypeEntity::getDelFlag, Constants.DEL_FLAG_0) + .like(StrUtil.isNotBlank(insuranceTypeName), InsuranceTypeEntity::getInsuranceTypeName, insuranceTypeName)) + ); + } + + @Override + public InsuranceTypeResp detail(String insuranceTypeId) { + InsuranceTypeEntity entity = this.getById(insuranceTypeId); + if(null == entity || !entity.getDelFlag().equals(Constants.DEL_FLAG_0)){ + throw new ServiceException(Message.INSURANCE_TYPE_ID_IS_NOT_EXIST); + } + return Converts.INSTANCE.toInsuranceTypeResp(entity); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void save(InsuranceTypeReq req) { + this.getOneOpt( + Wrappers.lambdaQuery(InsuranceTypeEntity.class) + .eq(InsuranceTypeEntity::getDelFlag, Constants.DEL_FLAG_0) + .eq(InsuranceTypeEntity::getInsuranceTypeName, req.getInsuranceTypeName()) + ).ifPresent( insuranceTypeEntity -> {throw new ServiceException(Message.INSURANCE_TYPE_NAME_IS_EXIST);}); + this.save(Converts.INSTANCE.toInsuranceTypeEntity(req)); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(String insuranceTypeId, InsuranceTypeReq req) { + InsuranceTypeEntity insurance = this.getById(insuranceTypeId); + if(null == insurance || !insurance.getDelFlag().equals(Constants.DEL_FLAG_0)){ + throw new ServiceException(Message.INSURANCE_TYPE_ID_IS_NOT_EXIST); + } + if(!insurance.getInsuranceTypeName().equals(req.getInsuranceTypeName())){ + this.getOneOpt( + Wrappers.lambdaQuery(InsuranceTypeEntity.class) + .eq(InsuranceTypeEntity::getDelFlag, Constants.DEL_FLAG_0) + .eq(InsuranceTypeEntity::getInsuranceTypeName, req.getInsuranceTypeName()) + ).ifPresent( insuranceTypeEntity -> {throw new ServiceException(Message.INSURANCE_TYPE_NAME_IS_EXIST);}); + } + InsuranceTypeEntity entity = Converts.INSTANCE.toInsuranceTypeEntity(req); + entity.setInsuranceTypeId(insuranceTypeId); + this.updateById(entity); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(String insuranceTypeId) { + InsuranceTypeEntity insurance = this.getById(insuranceTypeId); + if(null == insurance || !insurance.getDelFlag().equals(Constants.DEL_FLAG_0)){ + throw new ServiceException(Message.INSURANCE_TYPE_ID_IS_NOT_EXIST); + } + insurance.setDelFlag(Constants.DEL_FLAG_1); + this.updateById(insurance); + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/MaintainSuggestionServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/MaintainSuggestionServiceImpl.java new file mode 100644 index 0000000..4cf5e6d --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/MaintainSuggestionServiceImpl.java @@ -0,0 +1,99 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Message; +import com.dite.znpt.converts.Converts; +import com.dite.znpt.domain.entity.MaintainSuggestionEntity; +import com.dite.znpt.domain.vo.MaintainSuggestionReq; +import com.dite.znpt.domain.vo.MaintainSuggestionResp; +import com.dite.znpt.enums.DefectLevelEnum; +import com.dite.znpt.enums.DefectTypeEnum; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.MaintainSuggestionMapper; +import com.dite.znpt.service.MaintainSuggestionService; +import com.dite.znpt.util.PageUtil; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/7/7 22:25 + * @Description: + */ +@Service +public class MaintainSuggestionServiceImpl extends ServiceImpl implements MaintainSuggestionService { + @Override + public List page(String defectLevel, String defectType) { + PageUtil.startPage(); + return this.list(defectLevel, defectType); + } + + @Override + public List list(String defectLevel, String defectType) { + List result = Converts.INSTANCE.toMaintainSuggestionResp( + this.list(Wrappers.lambdaQuery(MaintainSuggestionEntity.class) + .eq(StrUtil.isNotEmpty(defectLevel), MaintainSuggestionEntity::getDefectLevel, defectLevel) + .eq(StrUtil.isNotEmpty(defectType), MaintainSuggestionEntity::getDefectType, defectType) + )); + result.forEach(resp -> { + resp.setDefectLevelLabel(DefectLevelEnum.getDescByCode(resp.getDefectLevel())); + resp.setDefectTypeLabel(DefectTypeEnum.getDescByCode(resp.getDefectType())); + }); + return result; + } + + @Override + public MaintainSuggestionResp detail(String suggestionId) { + MaintainSuggestionResp result = Converts.INSTANCE.toMaintainSuggestionResp(this.getById(suggestionId)); + result.setDefectLevelLabel(DefectLevelEnum.getDescByCode(result.getDefectLevel())); + result.setDefectTypeLabel(DefectTypeEnum.getDescByCode(result.getDefectType())); + return result; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void save(MaintainSuggestionReq req) { + if(!validDefectLevelAndType(req.getDefectLevel(), req.getDefectType())){ + throw new ServiceException(StrUtil.format(Message.SUGGESTION_LEVEL_TYPE_FORBID_REPEAT, req.getDefectLevel(), req.getDefectType())); + } + this.save(Converts.INSTANCE.toMaintainSuggestionEntity(req)); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(String suggestionId, MaintainSuggestionReq req) { + MaintainSuggestionEntity maintainSuggestion = this.getById(suggestionId); + if(null == maintainSuggestion){ + throw new ServiceException(Message.SUGGESTION_ID_IS_NOT_EXIST); + } + if(!req.getDefectLevel().equals(maintainSuggestion.getDefectLevel()) || !req.getDefectType().equals(maintainSuggestion.getDefectType())){ + if(!validDefectLevelAndType(req.getDefectLevel(), req.getDefectType())){ + throw new ServiceException(StrUtil.format(Message.SUGGESTION_LEVEL_TYPE_FORBID_REPEAT, req.getDefectLevel(), req.getDefectType())); + } + } + MaintainSuggestionEntity entity = Converts.INSTANCE.toMaintainSuggestionEntity(req); + entity.setSuggestionId(suggestionId); + this.updateById(entity); + } + + private Boolean validDefectLevelAndType(String defectLevel, String defectType){ + return this.list( + Wrappers.lambdaQuery(MaintainSuggestionEntity.class) + .eq(MaintainSuggestionEntity::getDefectLevel, defectLevel) + .eq(MaintainSuggestionEntity::getDefectType, defectType) + ).size() == 0 ; + + }; + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(String suggestionId) { + if(null == this.getById(suggestionId)){ + throw new ServiceException(Message.SUGGESTION_ID_IS_NOT_EXIST); + } + this.removeById(suggestionId); + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/MenuServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/MenuServiceImpl.java new file mode 100644 index 0000000..65c93ee --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/MenuServiceImpl.java @@ -0,0 +1,94 @@ +package com.dite.znpt.service.impl; + +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.lang.tree.Tree; +import cn.hutool.core.lang.tree.TreeNodeConfig; +import cn.hutool.core.lang.tree.TreeUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Message; +import com.dite.znpt.converts.Converts; +import com.dite.znpt.domain.entity.MenuEntity; +import com.dite.znpt.domain.vo.MenuReq; +import com.dite.znpt.domain.vo.MenuResp; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.MenuMapper; +import com.dite.znpt.service.MenuService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/21/周三 10:27 + * @description + */ +@Service +public class MenuServiceImpl extends ServiceImpl implements MenuService { + + @Override + public List> tree(String menuName, String terminalType) { + List menuList = StrUtil.isBlank(menuName) ? this.baseMapper.downwardRecursionSelect(null, terminalType) : this.baseMapper.upwardRecursionSelect(menuName, terminalType); + return buildMenuTree(menuList); + } + + public static List> buildMenuTree(List menuList) { + //配置 + TreeNodeConfig treeNodeConfig = new TreeNodeConfig(); + treeNodeConfig.setIdKey("menuId"); + treeNodeConfig.setNameKey("menuName"); + treeNodeConfig.setParentIdKey("parentId"); + treeNodeConfig.setWeightKey("orderNum"); + //转换器 + return TreeUtil.build(menuList, "0", treeNodeConfig, + (treeNode, tree) -> { + tree.setId(treeNode.getMenuId()); + tree.setParentId(treeNode.getParentId()); + tree.setName(treeNode.getMenuName()); + tree.setWeight(treeNode.getOrderNum()); + tree.putExtra("menuType",treeNode.getMenuType()); + tree.putExtra("visible",treeNode.getVisible()); + tree.putExtra("orderNum",treeNode.getOrderNum()); + tree.putExtra("path",treeNode.getPath()); + tree.putExtra("component",treeNode.getComponent()); + tree.putExtra("perms",treeNode.getPerms()); + }); + } + + @Override + public MenuResp detail(String menuId) { + return Converts.INSTANCE.toMenuResp(this.getById(menuId)); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void save(MenuReq req) { + MenuEntity entity = Converts.INSTANCE.toMenuEntity(req); + entity.setParentId(StrUtil.isBlank(req.getParentId()) ? "0" : req.getParentId()); + entity.setVisible(StrUtil.isBlank(req.getVisible()) ? "0" : req.getVisible()); + this.save(entity); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(String menuId, MenuReq req) { + MenuEntity menu = this.getById(menuId); + if(null == menu){ + throw new ServiceException(Message.MENU_ID_NOT_EXIST); + } + MenuEntity entity = Converts.INSTANCE.toMenuEntity(req); + entity.setMenuId(menuId); + entity.setParentId(menu.getParentId()); + if(StrUtil.isBlank(entity.getParentId())){ + entity.setParentId("0"); + } + this.updateById(entity); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(String menuId) { + this.removeById(menuId); + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/ModelConfigServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/ModelConfigServiceImpl.java new file mode 100644 index 0000000..0b70f88 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/ModelConfigServiceImpl.java @@ -0,0 +1,123 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.ListUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.config.YoloModelRegistry; +import com.dite.znpt.domain.entity.AttachInfoEntity; +import com.dite.znpt.domain.entity.ModelConfigEntity; +import com.dite.znpt.domain.vo.ModelConfigListReq; +import com.dite.znpt.domain.vo.ModelConfigReq; +import com.dite.znpt.domain.vo.ModelConfigResp; +import com.dite.znpt.enums.AttachBusinessTypeEnum; +import com.dite.znpt.mapper.ModelConfigMapper; +import com.dite.znpt.service.AttachInfoService; +import com.dite.znpt.service.ModelConfigService; +import com.dite.znpt.util.PageUtil; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/07/02 20:57 + * @Description: 模型配置表服务实现类 + */ +@Service +@RequiredArgsConstructor +public class ModelConfigServiceImpl extends ServiceImpl implements ModelConfigService { + + private final YoloModelRegistry modelRegistry; + private final AttachInfoService attachInfoService; + + /** + * 功能描述:查询列表 + * + * @param modelConfigReq 信息 + * @return {@link List }<{@link ModelConfigResp }> + * @author huise23 + * @date 2025/07/02 20:57 + **/ + @Override + public List selectList(ModelConfigListReq modelConfigReq) { + PageUtil.startPage(); + List modelConfigList= this.baseMapper.queryBySelective(modelConfigReq); + modelConfigList.forEach(resp -> { + + }); + return modelConfigList; + } + + /** + * 功能描述:查询单条 + * + * @param modelId Id + * @return {@link ModelConfigResp } + * @author huise23 + * @date 2025/07/02 20:57 + **/ + @Override + public ModelConfigResp selectById(String modelId) { + ModelConfigListReq modelConfigReq = new ModelConfigListReq(); + modelConfigReq.setModelId(modelId); + + List list = selectList(modelConfigReq); + return CollUtil.isNotEmpty(list) ? CollUtil.getFirst(list) : new ModelConfigResp(); + } + + /** + * 功能描述:新增 + * + * @param modelConfigReq + * @author huise23 + * @date 2025/07/02 20:57 + **/ + @SneakyThrows + @Override + @Transactional(rollbackFor = Exception.class) + public void saveData(ModelConfigReq modelConfigReq) { + ModelConfigEntity entity = BeanUtil.copyProperties(modelConfigReq, ModelConfigEntity.class); + AttachInfoEntity attachInfo = attachInfoService.getById(modelConfigReq.getAttachId()); + entity.setModelPath(attachInfo.getAttachPath()); + save(entity); + attachInfoService.updateBusinessIdByAttachIds(entity.getModelId(), ListUtil.of(modelConfigReq.getAttachId()), AttachBusinessTypeEnum.MODEL_FILE); + modelRegistry.loadModel(entity); + } + + /** + * 功能描述:更新 + * + * @param modelConfigReq + * @author huise23 + * @date 2025/07/02 20:57 + **/ + @SneakyThrows + @Override + @Transactional(rollbackFor = Exception.class) + public void updateData(ModelConfigReq modelConfigReq) { + ModelConfigEntity entity = BeanUtil.copyProperties(modelConfigReq, ModelConfigEntity.class); + AttachInfoEntity attachInfo = attachInfoService.getById(modelConfigReq.getAttachId()); + entity.setModelPath(attachInfo.getAttachPath()); + attachInfoService.updateBusinessIdByAttachIds(entity.getModelId(), ListUtil.of(modelConfigReq.getAttachId()), AttachBusinessTypeEnum.MODEL_FILE); + updateById(entity); + modelRegistry.reloadModel(entity); + } + + /** + * 功能描述:删除 + * + * @param modelId Id + * @author huise23 + * @date 2025/07/02 20:57 + **/ + @Override + public void deleteById(String modelId) { + modelRegistry.unloadModel(modelId); + removeById(modelId); + } + +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/MultiModelYoloService.java b/core/src/main/java/com/dite/znpt/service/impl/MultiModelYoloService.java new file mode 100644 index 0000000..f25f0f9 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/MultiModelYoloService.java @@ -0,0 +1,147 @@ +package com.dite.znpt.service.impl; + +import ai.onnxruntime.OnnxTensor; +import ai.onnxruntime.OrtEnvironment; +import ai.onnxruntime.OrtException; +import ai.onnxruntime.OrtSession; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.StrUtil; +import com.dite.znpt.config.YoloModelRegistry; +import com.dite.znpt.domain.bo.Detection; +import com.dite.znpt.domain.bo.Letterbox; +import com.dite.znpt.domain.bo.ODConfig; +import com.dite.znpt.domain.entity.ModelConfigEntity; +import com.dite.znpt.util.ModelUtil; +import lombok.extern.slf4j.Slf4j; +import org.opencv.core.Mat; +import org.opencv.core.Point; +import org.opencv.core.Scalar; +import org.opencv.imgcodecs.Imgcodecs; +import org.opencv.imgproc.Imgproc; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.io.File; +import java.nio.FloatBuffer; +import java.util.*; + +@Slf4j +@Service +public class MultiModelYoloService { + + @Autowired + private YoloModelRegistry registry; + + public List detect(String modelId, String inputFile, String outputFile, Float confThreshold) throws OrtException { + OrtSession session = registry.getSession(modelId); + YoloModelRegistry.ModelMetadata meta = registry.getMetadata(modelId); + OrtEnvironment environment = registry.getEnvironment(); + ModelConfigEntity modelConfig = registry.getModelConfig(modelId); + confThreshold = (Objects.isNull(confThreshold) ? modelConfig.getConfThreshold() : confThreshold) / 100; + + Mat img = Imgcodecs.imread(inputFile); + Mat image = img.clone(); + Imgproc.cvtColor(image, image, Imgproc.COLOR_BGR2RGB); + + // 在这里先定义下框的粗细、字的大小、字的类型、字的颜色(按比例设置大小粗细比较好一些) + int minDwDh = Math.min(img.width(), img.height()); + int thickness = minDwDh/ ODConfig.lineThicknessRatio; + long start_time = System.currentTimeMillis(); + // 更改 image 尺寸 + Letterbox letterbox = new Letterbox(); + image = letterbox.letterbox(image); + + double ratio = letterbox.getRatio(); + double dw = letterbox.getDw(); + double dh = letterbox.getDh(); + int rows = letterbox.getHeight(); + int cols = letterbox.getWidth(); + int channels = image.channels(); + + // 将Mat对象的像素值赋值给Float[]对象 + float[] pixels = new float[channels * rows * cols]; + for (int i = 0; i < rows; i++) { + for (int j = 0; j < cols; j++) { + double[] pixel = image.get(j,i); + for (int k = 0; k < channels; k++) { + // 这样设置相当于同时做了image.transpose((2, 0, 1))操作 + pixels[rows*cols*k+j*cols+i] = (float) pixel[k]/255.0f; + } + } + } + + // 创建OnnxTensor对象 + long[] shape = { 1L, (long)channels, (long)rows, (long)cols }; + OnnxTensor tensor = OnnxTensor.createTensor(environment, FloatBuffer.wrap(pixels), shape); + HashMap stringOnnxTensorHashMap = new HashMap<>(); + stringOnnxTensorHashMap.put(session.getInputInfo().keySet().iterator().next(), tensor); + + // 运行推理 + OrtSession.Result output = session.run(stringOnnxTensorHashMap); + float[][] outputData = ((float[][][])output.get(0).getValue())[0]; + + outputData = ModelUtil.transposeMatrix(outputData); + Map> class2Bbox = new HashMap<>(); + + for (float[] bbox : outputData) { + float[] conditionalProbabilities = Arrays.copyOfRange(bbox, 4, bbox.length); + int label = ModelUtil.argmax(conditionalProbabilities); + float conf = conditionalProbabilities[label]; + if (conf < confThreshold) continue; + + bbox[4] = conf; + + // xywh to (x1, y1, x2, y2) + ModelUtil.xywh2xyxy(bbox); + + // skip invalid predictions + if (bbox[0] >= bbox[2] || bbox[1] >= bbox[3]) continue; + + class2Bbox.putIfAbsent(label, new ArrayList<>()); + class2Bbox.get(label).add(bbox); + } + + List detections = new ArrayList<>(); + for (Map.Entry> entry : class2Bbox.entrySet()) { + int label = entry.getKey(); + List bboxes = entry.getValue(); + bboxes = ModelUtil.nonMaxSuppression(bboxes, modelConfig.getNmsThreshold()); + for (float[] bbox : bboxes) { + String labelString = meta.getLabels()[label]; + detections.add(new Detection(labelString,entry.getKey(), Arrays.copyOfRange(bbox, 0, 4), bbox[4])); + } + } + +// 打印检测结果并将图片写入指定目录 + for (Detection detection : detections) { + float[] bbox = detection.getBbox(); + log.info(detection.toString()); + // 画框 + Point topLeft = new Point((bbox[0]-dw)/ratio, (bbox[1]-dh)/ratio); + Point bottomRight = new Point((bbox[2]-dw)/ratio, (bbox[3]-dh)/ratio); + Scalar color = new Scalar(meta.getColors().get(detection.getClsId())); + Imgproc.rectangle(img, topLeft, bottomRight, color, thickness); + // 框上写文字 + Point boxNameLoc = new Point((bbox[0]-dw)/ratio, (bbox[1]-dh-2)/ratio-3); + + Imgproc.putText(img, detection.getLabel(), boxNameLoc, Imgproc.FONT_HERSHEY_SIMPLEX, 2.5, color, thickness); + } + log.info("检测{},发现{}处问题,耗时:{} ms.", inputFile, detections.size(), (System.currentTimeMillis() - start_time)); + + // 保存图像到输出目录 + Imgcodecs.imwrite(outputFile, img); + return detections; + } + + public void runFolderDetection(String modelId, String inputFolder, String outputFolder, Float confThreshold) throws Exception { + List fileList = FileUtil.loopFiles(inputFolder, file -> { + String extName = FileUtil.extName(file); + return StrUtil.equalsAnyIgnoreCase(extName, "jpg", "png"); + }); + for (File file : fileList) { + List detections = detect(modelId, file.getAbsolutePath(), outputFolder+ FileUtil.FILE_SEPARATOR+FileUtil.getName(file), confThreshold); + } + } + +} + diff --git a/core/src/main/java/com/dite/znpt/service/impl/PartServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/PartServiceImpl.java new file mode 100644 index 0000000..331a8da --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/PartServiceImpl.java @@ -0,0 +1,186 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Message; +import com.dite.znpt.converts.Converts; +import com.dite.znpt.domain.entity.PartEntity; +import com.dite.znpt.domain.entity.ProjectEntity; +import com.dite.znpt.domain.entity.TurbineEntity; +import com.dite.znpt.domain.vo.PartListReq; +import com.dite.znpt.domain.vo.PartListResp; +import com.dite.znpt.domain.vo.PartReq; +import com.dite.znpt.domain.vo.PartResp; +import com.dite.znpt.enums.PartTypeEnum; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.PartMapper; +import com.dite.znpt.service.PartService; +import com.dite.znpt.service.ProjectService; +import com.dite.znpt.service.TurbineService; +import com.dite.znpt.util.PageUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 部件表服务实现类 + */ +@Service +@RequiredArgsConstructor +public class PartServiceImpl extends ServiceImpl implements PartService { + + @Resource + private ProjectService projectService; + + @Resource + private TurbineService turbineService; + + /** + * 功能描述:分页查询列表 + * + * @param req 信息 + * @return {@link List }<{@link PartListResp }> + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Override + public List page(PartListReq req) { + PageUtil.startPage(); + return this.list(req); + } + + /** + * 功能描述:查询列表 + * + * @param req 信息 + * @return {@link List }<{@link PartListResp }> + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Override + public List list(PartListReq req) { + PageUtil.startPage(); + List list= this.baseMapper.queryBySelective(req); + list.forEach(resp -> { + resp.setPartTypeLabel(PartTypeEnum.getDescByCode(resp.getPartType())); + }); + return list; + } + + /** + * 功能描述:查询单条 + * + * @param partId Id + * @return {@link PartResp } + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Override + public PartResp detail(String partId) { + PartEntity entity = this.baseMapper.selectById(partId); + if(null == entity){ + throw new ServiceException(Message.PART_ID_IS_NOT_EXIST); + } + PartResp resp = Converts.INSTANCE.toPartResp(entity); + if(StrUtil.isNotEmpty(resp.getTurbineId())){ + TurbineEntity turbine = turbineService.getById(resp.getTurbineId()); + if(null != turbine){ + resp.setTurbineName(turbine.getTurbineName()); + if(StrUtil.isNotEmpty(turbine.getProjectId())){ + ProjectEntity project = projectService.getById(turbine.getProjectId()); + if(null != project){ + resp.setProjectId(resp.getProjectId()); + resp.setProjectName(project.getProjectName()); + } + } + } + } + return resp; + } + + /** + * 功能描述:新增 + * + * @param req + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Transactional(rollbackFor = Exception.class) + @Override + public void save(PartReq req) { + PartEntity entity = Converts.INSTANCE.toPartEntity(req); + this.save(entity); + } + + /** + * 功能描述:更新 + * + * @param partId + * @param req + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Transactional(rollbackFor = Exception.class) + @Override + public void update(String partId, PartReq req) { + if(null == this.baseMapper.selectById(partId)){ + throw new ServiceException(Message.PART_ID_IS_NOT_EXIST); + } + PartEntity entity = Converts.INSTANCE.toPartEntity(req); + entity.setPartId(partId); + this.updateById(entity); + } + + /** + * 功能描述:删除 + * + * @param partId Id + * @author huise23 + * @date 2025/04/11 23:17 + **/ + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(String partId) { + removeById(partId); + } + + /** + * 功能描述:删除 + * + * @param turbineIds 机组id + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteByTurbineIds(List turbineIds) { + this.baseMapper.delete(Wrappers.lambdaQuery().in(PartEntity::getTurbineId, turbineIds)); + } + + @Override + public List listInfos(List partIds) { + List list = lambdaQuery().in(PartEntity::getPartId, partIds).list(); + List turbineList = turbineService.lambdaQuery().in(TurbineEntity::getTurbineId, list.stream().map(PartEntity::getTurbineId).collect(Collectors.toList())).list(); + Map turbineMap = turbineList.stream().collect(Collectors.toMap(TurbineEntity::getTurbineId, Function.identity())); + Map projectMap = projectService.lambdaQuery().in(ProjectEntity::getProjectId, turbineList.stream().map(TurbineEntity::getProjectId).collect(Collectors.toList())).list() + .stream().collect(Collectors.toMap(ProjectEntity::getProjectId, Function.identity())); + return BeanUtil.copyToList(list, PartResp.class).stream().peek(resp -> { + TurbineEntity turbineEntity = turbineMap.get(resp.getTurbineId()); + ProjectEntity projectEntity = projectMap.get(turbineEntity.getProjectId()); + resp.setTurbineName(turbineEntity.getTurbineName()); + resp.setProjectId(projectEntity.getProjectId()); + resp.setProjectName(projectEntity.getProjectName()); + }).collect(Collectors.toList()); + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/PostServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/PostServiceImpl.java new file mode 100644 index 0000000..3c55c3b --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/PostServiceImpl.java @@ -0,0 +1,70 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Message; +import com.dite.znpt.converts.Converts; +import com.dite.znpt.domain.entity.PostEntity; +import com.dite.znpt.domain.vo.PostReq; +import com.dite.znpt.domain.vo.PostResp; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.PostMapper; +import com.dite.znpt.service.PostService; +import com.dite.znpt.util.PageUtil; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/20/周二 10:20 + * @description + */ +@Service +public class PostServiceImpl extends ServiceImpl implements PostService { + + @Override + public List page(String postName) { + PageUtil.startPage(); + return this.list(postName); + } + + @Override + public List list(String postName) { + return Converts.INSTANCE.toPostResp(this.list(Wrappers.lambdaQuery(PostEntity.class).like(StrUtil.isNotBlank(postName), PostEntity::getPostName, postName))); + } + + @Override + public PostResp detail(String postId) { + return Converts.INSTANCE.toPostResp(this.getById(postId)); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void save(PostReq req) { + PostEntity entity = Converts.INSTANCE.toPostEntity(req); + this.save(entity); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(String postId, PostReq req) { + if(null == this.getById(postId)){ + throw new ServiceException(Message.POST_ID_NOT_EXIST); + } + PostEntity entity = Converts.INSTANCE.toPostEntity(req); + entity.setPostId(postId); + this.updateById(entity); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(String postId) { + if(null == this.getById(postId)){ + throw new ServiceException(Message.POST_ID_NOT_EXIST); + } + this.removeById(postId); + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/ProjectBudgetInfoServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/ProjectBudgetInfoServiceImpl.java new file mode 100644 index 0000000..0bb4ede --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/ProjectBudgetInfoServiceImpl.java @@ -0,0 +1,92 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.util.IdUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.domain.entity.ProjectBudgetInfoEntity; +import com.dite.znpt.domain.vo.ProjectBudgetInfoListReq; +import com.dite.znpt.domain.vo.ProjectBudgetInfoListResp; +import com.dite.znpt.domain.vo.ProjectBudgetInfoReq; +import com.dite.znpt.domain.vo.ProjectBudgetInfoResp; +import com.dite.znpt.enums.AttachBusinessTypeEnum; +import com.dite.znpt.enums.BudgeTypeEnum; +import com.dite.znpt.mapper.ProjectBudgetInfoMapper; +import com.dite.znpt.service.AttachInfoService; +import com.dite.znpt.service.ProjectBudgetInfoService; +import com.dite.znpt.util.PageUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author huise23 + * @date 2025/07/17 21:58 + * @Description: 项目预算信息表服务实现类 + */ +@Service +@RequiredArgsConstructor +public class ProjectBudgetInfoServiceImpl extends ServiceImpl implements ProjectBudgetInfoService { + + private final AttachInfoService attachInfoService; + + /** + * 功能描述:查询项目预算信息列表 + * + * @param projectBudgetInfoReq 项目预算信息信息 + * @return {@link List }<{@link ProjectBudgetInfoResp }> + * @author huise23 + * @date 2025/07/17 21:58 + **/ + @Override + public List selectList(ProjectBudgetInfoListReq projectBudgetInfoReq) { + PageUtil.startPage(); + List projectBudgetInfoList= this.baseMapper.queryBySelective(projectBudgetInfoReq); + projectBudgetInfoList.forEach(resp -> { + + }); + return projectBudgetInfoList; + } + + /** + * 功能描述:根据项目id获取项目预算信息列表 + * + * @param projectId 项目id + * @return {@link List }<{@link ProjectBudgetInfoListResp }> + * @author huise23 + * @date 2025/07/17 21:58 + **/ + @Override + public List detailByProjectId(String projectId) { + List projectBudgetInfoList= this.baseMapper.detailByProjectId(projectId); + projectBudgetInfoList.forEach(resp -> { + resp.setBudgetTypeDesc(BudgeTypeEnum.getDescByCode(resp.getBudgetType())); + }); + return projectBudgetInfoList; + } + + /** + * 功能描述:新增项目预算信息 + * + * @param projectBudgetInfoReq 项目预算信息 + * @author huise23 + * @date 2025/07/17 21:58 + **/ + @Override + @Transactional(rollbackFor = Exception.class) + public void saveData(List projectBudgetInfoReq) { + List list = new ArrayList<>(); + for (ProjectBudgetInfoReq req : projectBudgetInfoReq) { + ProjectBudgetInfoEntity info = BeanUtil.copyProperties(req, ProjectBudgetInfoEntity.class); + info.setBudgetId(IdUtil.simpleUUID()); + attachInfoService.updateBusinessIdByAttachIds(info.getBudgetId(), ListUtil.of(req.getAttachId()), AttachBusinessTypeEnum.PROJECT_BUDGE); + list.add(info); + } + lambdaUpdate().eq(ProjectBudgetInfoEntity::getProjectId, list.get(0).getProjectId()).remove(); + baseMapper.insert(list); + } + +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/ProjectServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/ProjectServiceImpl.java new file mode 100644 index 0000000..faf5a4a --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/ProjectServiceImpl.java @@ -0,0 +1,164 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Message; +import com.dite.znpt.converts.Converts; +import com.dite.znpt.domain.entity.UserEntity; +import com.dite.znpt.domain.entity.ProjectEntity; +import com.dite.znpt.domain.vo.ProjectListReq; +import com.dite.znpt.domain.vo.ProjectListResp; +import com.dite.znpt.domain.vo.ProjectReq; +import com.dite.znpt.domain.vo.ProjectResp; +import com.dite.znpt.enums.ProjectStatusEnum; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.service.UserService; +import com.dite.znpt.service.ProjectService; +import com.dite.znpt.mapper.ProjectMapper; +import org.springframework.stereotype.Service; +import lombok.RequiredArgsConstructor; +import com.dite.znpt.util.PageUtil; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 项目信息表服务实现类 + */ +@Service +@RequiredArgsConstructor +public class ProjectServiceImpl extends ServiceImpl implements ProjectService { + + @Resource + private UserService userService; + /** + * 功能描述:查询项目信息列表 + * + * @param req 项目信息信息 + * @return {@link List }<{@link ProjectResp }> + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Override + public List page(ProjectListReq req) { + PageUtil.startPage(); + return this.list(req); + } + + @Override + public List list(ProjectListReq req) { + List list= this.baseMapper.queryBySelective(req); + list.forEach(resp -> { + resp.setStatusLabel(ProjectStatusEnum.getDescByCode(resp.getStatus())); + }); + return list; + } + + /** + * 功能描述:查询单条项目信息 + * + * @param projectId 项目信息Id + * @return {@link ProjectResp } + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Override + public ProjectResp detail(String projectId) { + ProjectEntity entity = this.baseMapper.selectById(projectId); + if(entity == null){ + throw new ServiceException(Message.PROJECT_ID_IS_NOT_EXIST); + } + ProjectResp resp = Converts.INSTANCE.toProjectResp(entity); + resp.setStatusLabel(ProjectStatusEnum.getDescByCode(resp.getStatus())); + List userIds = new ArrayList<>(); + if(StrUtil.isNotEmpty(resp.getAuditorId())){ + userIds.add(resp.getAuditorId()); + } + if(StrUtil.isNotEmpty(resp.getQualityOfficerId())){ + userIds.add(resp.getQualityOfficerId()); + } + if(StrUtil.isNotEmpty(resp.getConstructionTeamLeaderId())){ + userIds.add(resp.getConstructionTeamLeaderId()); + } + if(StrUtil.isNotEmpty(resp.getProjectManagerId())){ + userIds.add(resp.getProjectManagerId()); + } + if(StrUtil.isNotEmpty(resp.getConstructorIds())){ + userIds.addAll(StrUtil.split(resp.getConstructorIds(), StrUtil.COMMA).stream().collect(Collectors.toList())); + } + if(CollUtil.isNotEmpty(userIds)){ + Map userIdMap = userService.listByIds(userIds).stream().collect(Collectors.toMap(k->k.getUserId(), Function.identity())); + if(CollUtil.isNotEmpty(userIdMap)){ + StringBuilder constructorName = new StringBuilder(); + resp.setAuditorName(userIdMap.containsKey(resp.getAuditorId()) ? userIdMap.get(resp.getAuditorId()).getName() : null); + resp.setProjectManagerName(userIdMap.containsKey(resp.getProjectManagerId()) ? userIdMap.get(resp.getProjectManagerId()).getName() : null); + resp.setConstructionTeamLeaderName(userIdMap.containsKey(resp.getConstructionTeamLeaderId()) ? userIdMap.get(resp.getConstructionTeamLeaderId()).getName() : null); + resp.setQualityOfficerName(userIdMap.containsKey(resp.getQualityOfficerId()) ? userIdMap.get(resp.getQualityOfficerId()).getName() : null); + Arrays.stream(resp.getConstructorIds().split(StrUtil.COMMA)).forEach(id -> { + if(userIdMap.containsKey(id)){ + constructorName.append(userIdMap.get(id).getName()).append(StrUtil.COMMA); + } + }); + constructorName.deleteCharAt(constructorName.lastIndexOf(StrUtil.COMMA)); + resp.setConstructorName(constructorName.toString()); + } + } + return resp; + } + + /** + * 功能描述:新增项目信息 + * + * @param req 项目信息 + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Transactional(rollbackFor = Exception.class) + @Override + public void save(ProjectReq req) { + ProjectEntity entity = Converts.INSTANCE.toProjectEntity(req); + this.save(entity); + } + + /** + * 功能描述:更新项目信息 + * + * @param projectId 项目信息 + * @param req 项目信息 + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Transactional(rollbackFor = Exception.class) + @Override + public void update(String projectId, ProjectReq req) { + if(null == this.baseMapper.selectById(projectId)){ + throw new ServiceException(Message.PROJECT_ID_IS_NOT_EXIST); + } + ProjectEntity entity = Converts.INSTANCE.toProjectEntity(req); + entity.setProjectId(projectId); + this.updateById(entity); + } + + /** + * 功能描述:删除项目信息 + * + * @param projectId 项目信息Id + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(String projectId) { + removeById(projectId); + } + +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/ProjectTaskGroupServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/ProjectTaskGroupServiceImpl.java new file mode 100644 index 0000000..cd5c531 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/ProjectTaskGroupServiceImpl.java @@ -0,0 +1,95 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.domain.entity.ProjectTaskGroupEntity; +import com.dite.znpt.domain.vo.*; +import com.dite.znpt.service.ProjectTaskGroupService; +import com.dite.znpt.mapper.ProjectTaskGroupMapper; +import com.dite.znpt.service.ProjectTaskService; +import org.springframework.stereotype.Service; +import cn.hutool.core.collection.CollUtil; +import lombok.RequiredArgsConstructor; +import com.dite.znpt.util.PageUtil; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author huise23 + * @date 2025/06/25 17:21 + * @Description: 项目任务组信息表服务实现类 + */ +@Service +@RequiredArgsConstructor +public class ProjectTaskGroupServiceImpl extends ServiceImpl implements ProjectTaskGroupService { + + private final ProjectTaskService projectTaskService; + + /** + * 功能描述:查询项目任务组信息列表 + * + * @param projectTaskGroupReq 项目任务组信息信息 + * @return {@link List }<{@link ProjectTaskGroupResp }> + * @author huise23 + * @date 2025/06/25 17:21 + **/ + @Override + public List selectList(ProjectTaskGroupListReq projectTaskGroupReq) { + PageUtil.startPage(); + List projectTaskGroupList= this.baseMapper.queryBySelective(projectTaskGroupReq); + ProjectTaskListReq listReq = new ProjectTaskListReq(); + listReq.setTaskNameOrMainUser(projectTaskGroupReq.getKeyword()); + Map> taskMap = projectTaskService.selectList(listReq).stream().collect(Collectors.groupingBy(ProjectTaskResp::getTaskGroupId)); + projectTaskGroupList.forEach(resp -> { + resp.setTaskList(taskMap.get(resp.getGroupId())); + }); + return projectTaskGroupList; + } + + /** + * 功能描述:新增项目任务组信息 + * + * @param projectTaskGroupReq 项目任务组信息 + * @author huise23 + * @date 2025/06/25 17:21 + **/ + @Override + public void saveData(ProjectTaskGroupReq projectTaskGroupReq) { +// todo 校验 + ProjectTaskGroupEntity entity = BeanUtil.copyProperties(projectTaskGroupReq, ProjectTaskGroupEntity.class); + save(entity); + } + + /** + * 功能描述:更新项目任务组信息 + * + * @param projectTaskGroupReq 项目任务组信息 + * @author huise23 + * @date 2025/06/25 17:21 + **/ + @Override + public void updateData(ProjectTaskGroupReq projectTaskGroupReq) { +// todo 校验 + ProjectTaskGroupEntity entity = BeanUtil.copyProperties(projectTaskGroupReq, ProjectTaskGroupEntity.class); + updateById(entity); + } + + /** + * 功能描述:删除项目任务组信息 + * + * @param groupId 项目任务组信息Id + * @author huise23 + * @date 2025/06/25 17:21 + **/ + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteById(String groupId) { +// todo 校验 + removeById(groupId); + projectTaskService.deleteByGroupId(groupId); + } + +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/ProjectTaskServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/ProjectTaskServiceImpl.java new file mode 100644 index 0000000..e913698 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/ProjectTaskServiceImpl.java @@ -0,0 +1,269 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.util.BooleanUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Message; +import com.dite.znpt.domain.entity.AttachInfoEntity; +import com.dite.znpt.domain.entity.ProjectTaskEntity; +import com.dite.znpt.domain.vo.ProjectTaskListReq; +import com.dite.znpt.domain.vo.ProjectTaskReq; +import com.dite.znpt.domain.vo.ProjectTaskResp; +import com.dite.znpt.domain.vo.ProjectTaskStartReq; +import com.dite.znpt.enums.AttachBusinessTypeEnum; +import com.dite.znpt.enums.ProjectTaskStateEnum; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.ProjectTaskGroupMapper; +import com.dite.znpt.mapper.ProjectTaskMapper; +import com.dite.znpt.service.AttachInfoService; +import com.dite.znpt.service.ProjectTaskService; +import com.dite.znpt.util.PageUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author huise23 + * @date 2025/06/25 17:21 + * @Description: 项目任务信息表服务实现类 + */ +@Service +@RequiredArgsConstructor +public class ProjectTaskServiceImpl extends ServiceImpl implements ProjectTaskService { + + private final AttachInfoService attachInfoService; + private final ProjectTaskGroupMapper projectTaskGroupMapper; + + /** + * 功能描述:查询项目任务信息列表 + * + * @param projectTaskReq 项目任务信息信息 + * @return {@link List }<{@link ProjectTaskResp }> + * @author huise23 + * @date 2025/06/25 17:21 + **/ + @Override + public List selectList(ProjectTaskListReq projectTaskReq) { + List projectTaskList = this.baseMapper.queryBySelective(projectTaskReq); + Map> attachMap; + if (!BooleanUtil.isTrue(projectTaskReq.getIsExport())) { + attachMap = attachInfoService.listByBusinessIds(projectTaskList.stream().map(ProjectTaskResp::getTaskId).collect(Collectors.toList()), null) + .stream().collect(Collectors.groupingBy(AttachInfoEntity::getBusinessId)); + } else { + attachMap = new HashMap<>(); + } + projectTaskList.forEach(resp -> { + resp.setAttachList(attachMap.get(resp.getTaskId())); + }); + return projectTaskList; + } + + /** + * 功能描述:查询单条项目任务信息 + * + * @param taskId 项目任务信息Id + * @return {@link ProjectTaskResp } + * @author huise23 + * @date 2025/06/25 17:21 + **/ + @Override + public ProjectTaskResp selectById(String taskId) { + ProjectTaskListReq projectTaskReq = new ProjectTaskListReq(); + projectTaskReq.setTaskId(taskId); + + List list = selectList(projectTaskReq); + return CollUtil.isNotEmpty(list) ? CollUtil.getFirst(list) : new ProjectTaskResp(); + } + + /** + * 功能描述:新增项目任务信息 + * + * @param projectTaskReq 项目任务信息 + * @author huise23 + * @date 2025/06/25 17:21 + **/ + @Override + @Transactional(rollbackFor = Exception.class) + public void saveData(ProjectTaskReq projectTaskReq) { + ProjectTaskEntity entity = BeanUtil.copyProperties(projectTaskReq, ProjectTaskEntity.class); + checkTask(projectTaskReq); + save(entity); + attachInfoService.updateBusinessIdByAttachIds(entity.getTaskId(), projectTaskReq.getAttachFileIds(), AttachBusinessTypeEnum.PROJECT_TASK); + } + + /** + * 功能描述:更新项目任务信息 + * + * @param projectTaskReq 项目任务信息 + * @author huise23 + * @date 2025/06/25 17:21 + **/ + @Override + @Transactional(rollbackFor = Exception.class) + public void updateData(ProjectTaskReq projectTaskReq) { + ProjectTaskEntity entity = BeanUtil.copyProperties(projectTaskReq, ProjectTaskEntity.class); + checkTask(projectTaskReq); + updateById(entity); + attachInfoService.updateBusinessIdByAttachIds(projectTaskReq.getTaskId(), projectTaskReq.getAttachFileIds(), AttachBusinessTypeEnum.PROJECT_TASK); + } + + /** + * 功能描述:检查任务 + * + * @param taskReq 任务请求类 + * @author cuizhibin + * @date 2025/06/27 10:53 + **/ + private void checkTask(ProjectTaskReq taskReq) { + if (Objects.isNull(projectTaskGroupMapper.selectById(taskReq.getTaskGroupId()))) { + throw new ServiceException(Message.TASK_GROUP_ID_NOT_EXIST); + } + if (StrUtil.isEmpty(taskReq.getParentTaskId())) { + return; + } + Map taskMap = baseMapper.listAllParents(taskReq.getParentTaskId()).stream().collect(Collectors.toMap(ProjectTaskEntity::getTaskId, Function.identity())); +// 判断是否有循环父级 + if (StrUtil.isNotEmpty(taskReq.getTaskId())) { + if (taskMap.containsKey(taskReq.getTaskId())) { + String parentTaskId = taskReq.getParentTaskId(); + List strList = ListUtil.toList(taskReq.getTaskName()); + do { + ProjectTaskEntity task = taskMap.get(parentTaskId); + parentTaskId = task.getParentTaskId(); + if (StrUtil.isEmpty(parentTaskId)) { + break; + } + strList.add(task.getTaskName()); + } while (StrUtil.isNotEmpty(parentTaskId)); + throw new ServiceException(Message.TASK_IN_CYCLE + CollUtil.join(strList, "--")); + } + } +// 更新父级任务的计划起始/结束时间 + String parentTaskId = taskReq.getParentTaskId(); + LocalDate planStartDate = taskReq.getPlanStartDate(); + LocalDate planEndDate = taskReq.getPlanEndDate(); + Set updateTaskSet = new HashSet<>(); + do { + ProjectTaskEntity task = taskMap.get(parentTaskId); + parentTaskId = task.getParentTaskId(); + if (task.getPlanStartDate().isAfter(planStartDate)) { + task.setPlanStartDate(planStartDate); + updateTaskSet.add(task); + } else { + planStartDate = task.getPlanStartDate(); + } + if (task.getPlanEndDate().isBefore(planEndDate)) { + task.setPlanEndDate(planEndDate); + updateTaskSet.add(task); + } else { + planEndDate = task.getPlanEndDate(); + } + } while (StrUtil.isNotEmpty(parentTaskId)); + baseMapper.updateById(updateTaskSet); + } + + /** + * 功能描述:删除项目任务信息 + * + * @param taskId 项目任务信息Id + * @author huise23 + * @date 2025/06/25 17:21 + **/ + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteById(String taskId) { + removeById(taskId); + attachInfoService.deleteByBusinessId(taskId, AttachBusinessTypeEnum.PROJECT_TASK); + } + + /** + * 功能描述:删除项目任务信息 + * + * @param groupId 项目任务组信息Id + * @author huise23 + * @date 2025/06/25 17:21 + **/ + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteByGroupId(String groupId) { + List list = lambdaQuery().eq(ProjectTaskEntity::getTaskGroupId, groupId).list().stream().map(ProjectTaskEntity::getTaskId).toList(); + attachInfoService.deleteByBusinessIds(list, AttachBusinessTypeEnum.PROJECT_TASK); + baseMapper.deleteByIds(list); + } + + /** + * 功能描述:开始任务/任务组开始任务 + * + * @param taskStartReq 任务启动请求类 + * @author cuizhibin + * @date 2025/06/25 21:16 + **/ + @Override + @Transactional(rollbackFor = Exception.class) + public void startTask(ProjectTaskStartReq taskStartReq) { + if (StrUtil.isBlank(taskStartReq.getTaskId()) && StrUtil.isBlank(taskStartReq.getTaskGroupId())) { + throw new ServiceException(Message.TASK_ID_GROUP_ID_ALL_EMPTY); + } + List list; + if (StrUtil.isNotBlank(taskStartReq.getTaskGroupId())) { + list = lambdaQuery().eq(ProjectTaskEntity::getTaskGroupId, taskStartReq.getTaskGroupId()) + .eq(ProjectTaskEntity::getStatus, ProjectTaskStateEnum.PENDING.getCode()) + .list(); + if (CollUtil.isEmpty(list)) { + return; + } + } else { + list = List.of(getById(taskStartReq.getTaskId())); + if (!list.get(0).getStatus().equals(ProjectTaskStateEnum.PENDING.getCode())) { + throw new ServiceException(Message.TASK_STATUS_NOT_PENDING); + } + } + list.forEach(entity -> { + entity.setStatus(ProjectTaskStateEnum.IN_PROGRESS.getCode()); + entity.setActualStartDate(LocalDate.now()); + }); + baseMapper.updateById(list); + } + + /** + * 功能描述:结束任务/任务组结束任务 + * + * @param taskStartReq 任务启动请求类 + * @author cuizhibin + * @date 2025/06/25 21:16 + **/ + @Override + @Transactional(rollbackFor = Exception.class) + public void endTask(ProjectTaskStartReq taskStartReq) { + if (StrUtil.isBlank(taskStartReq.getTaskId()) && StrUtil.isBlank(taskStartReq.getTaskGroupId())) { + throw new ServiceException(Message.TASK_ID_GROUP_ID_ALL_EMPTY); + } + List list; + if (StrUtil.isNotBlank(taskStartReq.getTaskGroupId())) { + list = lambdaQuery().eq(ProjectTaskEntity::getTaskGroupId, taskStartReq.getTaskGroupId()) + .eq(ProjectTaskEntity::getStatus, ProjectTaskStateEnum.IN_PROGRESS.getCode()) + .list(); + if (CollUtil.isEmpty(list)) { + return; + } + } else { + list = List.of(getById(taskStartReq.getTaskId())); + if (!list.get(0).getStatus().equals(ProjectTaskStateEnum.IN_PROGRESS.getCode())) { + throw new ServiceException(Message.TASK_STATUS_NOT_IN_PROGRESS); + } + } + list.forEach(entity -> { + entity.setStatus(ProjectTaskStateEnum.COMPLETED.getCode()); + entity.setActualStartDate(LocalDate.now()); + }); + baseMapper.updateById(list); + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/RedisService.java b/core/src/main/java/com/dite/znpt/service/impl/RedisService.java new file mode 100644 index 0000000..6145799 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/RedisService.java @@ -0,0 +1,342 @@ +package com.dite.znpt.service.impl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.BoundSetOperations; +import org.springframework.data.redis.core.HashOperations; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ValueOperations; +import org.springframework.stereotype.Component; + +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +/** + * spring redis 工具类 + * + * @author kyland + **/ +@SuppressWarnings(value = {"unchecked", "rawtypes"}) +@Component +public class RedisService { + + @Autowired + public RedisTemplate redisTemplate; + + /** + * 判断 key是否存在 + * + * @param key 键 + * @return true 存在 false不存在 + */ + public Boolean hasKey(String key) + { + return redisTemplate.hasKey(key); + } + + /** + * 判断 key是否存在 + * + * @param key 键 + * @return true 存在 false不存在 + */ + public Boolean hasKey(String key, String hKey) + { + return redisTemplate.opsForHash().hasKey(key, hKey); + } + + /** + * 缓存基本的对象,Integer、String、实体类等 + * + * @param key 缓存的键值 + * @param value 缓存的值 + */ + public void setCacheObject(final String key, final T value) { + redisTemplate.opsForValue().set(key, value); + } + + /** + * 缓存基本的对象,Integer、String、实体类等 + * + * @param key 缓存的键值 + * @param value 缓存的值 + * @param timeout 时间 + * @param timeUnit 时间颗粒度 + */ + public void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit) { + redisTemplate.opsForValue().set(key, value, timeout, timeUnit); + } + + /** + * 设置有效时间 + * + * @param key Redis键 + * @param timeout 超时时间 + * @return true=设置成功;false=设置失败 + */ + public boolean expire(final String key, final long timeout) { + return expire(key, timeout, TimeUnit.SECONDS); + } + + /** + * 设置有效时间 + * + * @param key Redis键 + * @param timeout 超时时间 + * @param unit 时间单位 + * @return true=设置成功;false=设置失败 + */ + public boolean expire(final String key, final long timeout, final TimeUnit unit) { + return redisTemplate.expire(key, timeout, unit); + } + + /** + * 获得缓存的基本对象。 + * + * @param key 缓存键值 + * @return 缓存键值对应的数据 + */ + public T getCacheObject(final String key) { + ValueOperations operation = redisTemplate.opsForValue(); + return operation.get(key); + } + + /** + * 删除单个对象 + * + * @param key + */ + public boolean deleteObject(final String key) { + return redisTemplate.delete(key); + } + + /** + * 删除集合对象 + * + * @param collection 多个对象 + * @return + */ + public long deleteObject(final Collection collection) { + return redisTemplate.delete(collection); + } + + /** + * 重新缓存List数据 + * 如果已经有key 则先删除该key + * + * @param key 缓存的键值 + * @param dataList 待缓存的List数据 + * @return 缓存的对象 + */ + public long resetCacheList(final String key, final List dataList) { + redisTemplate.delete(key); + return setCacheList(key, dataList); + } + + /** + * 缓存List数据 + * + * @param key 缓存的键值 + * @param dataList 待缓存的List数据 + * @return 缓存的对象 + */ + public long setCacheList(final String key, final List dataList) { + Long count = redisTemplate.opsForList().rightPushAll(key, dataList); + return count == null ? 0 : count; + } + + /** + * 获得缓存的list对象 + * + * @param key 缓存的键值 + * @return 缓存键值对应的数据 + */ + public List getCacheList(final String key) { + return redisTemplate.opsForList().range(key, 0, -1); + } + + /** + * 重新缓存Set + * 如果已经有key 则先删除该key + * + * @param key 缓存键值 + * @param dataSet 缓存的数据 + * @return 缓存数据的对象 + */ + public BoundSetOperations resetCacheSet(final String key, final Set dataSet) { + redisTemplate.delete(key); + return setCacheSet(key, dataSet); + } + + /** + * 缓存Set + * + * @param key 缓存键值 + * @param dataSet 缓存的数据 + * @return 缓存数据的对象 + */ + public BoundSetOperations setCacheSet(final String key, final Set dataSet) { + BoundSetOperations setOperation = redisTemplate.boundSetOps(key); + Iterator it = dataSet.iterator(); + while (it.hasNext()) { + setOperation.add(it.next()); + } + return setOperation; + } + + /** + * Set插入值 + * + * @param key 缓存键值 + * @param value 数据 + */ + public Long addCacheSet(String key, Object value) { + return redisTemplate.opsForSet().add(key, value); + } + + /** + * Set移除值 + * + * @param key 关键 + * @param value 价值 + * @return {@link Long} + */ + public Long removeCacheSetValue(String key, Object value) { + return redisTemplate.opsForSet().remove(key, value); + } + + /** + * 判断Set是否包含 sismember + * + * @param key + * @param value + */ + public Boolean containsSetValue(String key, Object value) { + return redisTemplate.opsForSet().isMember(key, value); + } + + /** + * 获得缓存的set + * + * @param key + * @return + */ + public Set getCacheSet(final String key) { + return redisTemplate.opsForSet().members(key); + } + + /** + * 缓存Map + * + * @param key + * @param dataMap + */ + public void setCacheMap(final String key, final Map dataMap) { + if (dataMap != null) { + redisTemplate.opsForHash().putAll(key, dataMap); + } + } + + /** + * 获得缓存的Map + * + * @param key + * @return + */ + public Map getCacheMap(final String key) { + return redisTemplate.opsForHash().entries(key); + } + + /** + * 往Hash中存入数据 + * + * @param key Redis键 + * @param hKey Hash键 + * @param value 值 + */ + public void setCacheMapValue(final String key, final String hKey, final T value) { + redisTemplate.opsForHash().put(key, hKey, value); + } + + /** + * 获取Hash中的数据 + * + * @param key Redis键 + * @param hKey Hash键 + * @return Hash中的对象 + */ + public T getCacheMapValue(final String key, final String hKey) { + HashOperations opsForHash = redisTemplate.opsForHash(); + return opsForHash.get(key, hKey); + } + + /** + * 删除Hash中的数据 + * + * @param key + * @param hKey + */ + public void delCacheMapValue(final String key, final String hKey) { + HashOperations hashOperations = redisTemplate.opsForHash(); + hashOperations.delete(key, hKey); + } + + /** + * 获取多个Hash中的数据 + * + * @param key Redis键 + * @param hKeys Hash键集合 + * @return Hash对象集合 + */ + public List getMultiCacheMapValue(final String key, final Collection hKeys) { + List list = redisTemplate.opsForHash().multiGet(key, hKeys); + return list.stream().filter(Objects::nonNull).collect(Collectors.toList()); + } + + /** + * 获取多个Hash中的数据 + * + * @param key Redis键 + * @return Hash对象集合 + */ + public List getCacheMapValues(final String key) { + return redisTemplate.opsForHash().values(key); + } + + /** + * 获取多个Hash中的数据 + * + * @param keys Redis键集合 + * @return Hash对象集合 + */ + public List getMultiCacheMapValues(Collection keys) { + List list = new ArrayList<>(); + keys.forEach(key->{ + List values = getCacheMapValues(key); + if (null != values && values.size() > 0) { + list.addAll(values); + } + }); + return list; + } + + /** + * 获得键列表 + * + * @param pattern 字符串前缀 + * @return 对象列表 + */ + public Collection keys(final String pattern) { + return redisTemplate.keys(pattern); + } + + /** + * 获取多个数据对象 + * @param keys + * @param + * @return 对象列表 + */ + public List getMultiCacheValue(Collection keys) { + return redisTemplate.opsForValue().multiGet(keys); + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/RoleMenuServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/RoleMenuServiceImpl.java new file mode 100644 index 0000000..b0303d9 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/RoleMenuServiceImpl.java @@ -0,0 +1,59 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Constants; +import com.dite.znpt.constant.Message; +import com.dite.znpt.converts.Converts; +import com.dite.znpt.domain.entity.MenuEntity; +import com.dite.znpt.domain.entity.RoleEntity; +import com.dite.znpt.domain.entity.RoleMenuEntity; +import com.dite.znpt.domain.vo.RoleMenuReq; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.RoleMenuMapper; +import com.dite.znpt.service.MenuService; +import com.dite.znpt.service.RoleMenuService; +import com.dite.znpt.service.RoleService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/21/周三 16:02 + * @description + */ +@Service +public class RoleMenuServiceImpl extends ServiceImpl implements RoleMenuService { + + @Resource + private RoleService roleService; + @Resource + private MenuService menuService; + + @Transactional(rollbackFor = Exception.class) + @Override + public void bindRoleMenu(RoleMenuReq req) { + RoleEntity role = roleService.getById(req.getRoleId()); + if (role == null || !Constants.DEL_FLAG_0.equals(role.getDelFlag())) { + throw new ServiceException(Message.ROLE_ID_NOT_EXIST_OR_ILLEGAL); + } + List menuList = menuService.listByIds(req.getMenuIds()); + if(CollUtil.isEmpty(menuList) || menuList.size() != req.getMenuIds().size()){ + throw new ServiceException(Message.MENU_ID_NOT_EXIST_OR_ILLEGAL); + } + this.remove(Wrappers.lambdaQuery(RoleMenuEntity.class).eq(RoleMenuEntity::getRoleId, req.getRoleId())); + List roleMenuList =new ArrayList<>(req.getMenuIds().size()); + for (String menuId : req.getMenuIds()) { + RoleMenuEntity roleMenu = new RoleMenuEntity(); + roleMenu.setRoleId(req.getRoleId()); + roleMenu.setMenuId(menuId); + roleMenuList.add(roleMenu); + } + this.saveBatch(roleMenuList); + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/RoleServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/RoleServiceImpl.java new file mode 100644 index 0000000..9d8ec2f --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/RoleServiceImpl.java @@ -0,0 +1,92 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Constants; +import com.dite.znpt.constant.Message; +import com.dite.znpt.converts.Converts; +import com.dite.znpt.domain.entity.RoleEntity; +import com.dite.znpt.domain.vo.RoleReq; +import com.dite.znpt.domain.vo.RoleResp; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.RoleMapper; +import com.dite.znpt.service.RoleService; +import com.dite.znpt.util.PageUtil; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/21/周三 10:25 + * @description + */ +@Service +public class RoleServiceImpl extends ServiceImpl implements RoleService { + + @Override + public List page(String roleName) { + PageUtil.startPage(); + return this.list(roleName); + } + + @Override + public List list(String roleName) { + List list = this.list( + Wrappers.lambdaQuery(RoleEntity.class) + .eq(RoleEntity::getDelFlag, Constants.DEL_FLAG_0) + .like(StrUtil.isNotBlank(roleName), RoleEntity::getRoleName, roleName) + ); + return Converts.INSTANCE.toRoleResp(list); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void save(RoleReq req) { + List roles = this.list(Wrappers.lambdaQuery(RoleEntity.class).eq(RoleEntity::getRoleCode, req.getRoleCode()).eq(RoleEntity::getDelFlag, Constants.DEL_FLAG_0)); + if(CollUtil.isNotEmpty(roles)){ + throw new ServiceException(Message.ROLE_CODE_EXIST); + } + RoleEntity entity = Converts.INSTANCE.toRoleEntity(req); + this.save(entity); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(String roleId, RoleReq req) { + RoleEntity role = this.getById(roleId); + if(null == role || !Constants.DEL_FLAG_0.equals(role.getDelFlag())) { + throw new ServiceException(Message.ROLE_ID_NOT_EXIST); + } + if(!role.getRoleCode().equals(req.getRoleCode())){ + List roles = this.list(Wrappers.lambdaQuery(RoleEntity.class).eq(RoleEntity::getRoleCode, req.getRoleCode()).eq(RoleEntity::getDelFlag, Constants.DEL_FLAG_0)); + if(CollUtil.isNotEmpty(roles)){ + throw new ServiceException(Message.ROLE_CODE_EXIST); + } + } + RoleEntity entity = Converts.INSTANCE.toRoleEntity(req); + entity.setRoleId(roleId); + entity.setRoleKey(null); + this.updateById(entity); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(String roleId) { + RoleEntity entity = this.getById(roleId); + if(null == entity || !Constants.DEL_FLAG_0.equals(entity.getDelFlag())) { + throw new ServiceException(Message.ROLE_ID_NOT_EXIST); + } + entity.setDelFlag(Constants.DEL_FLAG_1); + this.updateById(entity); + } + + @Override + public RoleResp detail(String roleId) { + return Converts.INSTANCE.toRoleResp(this.getById(roleId)); + } + +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/TConstructionServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/TConstructionServiceImpl.java new file mode 100644 index 0000000..603f602 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/TConstructionServiceImpl.java @@ -0,0 +1,99 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.domain.entity.TConstructionEntity; +import com.dite.znpt.domain.vo.TConstructionListReq; +import com.dite.znpt.domain.vo.TConstructionReq; +import com.dite.znpt.domain.vo.TConstructionResp; +import com.dite.znpt.mapper.TConstructionMapper; +import com.dite.znpt.service.TConstructionService; +import com.dite.znpt.util.PageUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 施工信息表服务实现类 + */ +@Service +@RequiredArgsConstructor +public class TConstructionServiceImpl extends ServiceImpl implements TConstructionService { + + /** + * 功能描述:查询施工信息列表 + * + * @param tConstructionReq 施工信息信息 + * @return {@link List }<{@link TConstructionResp }> + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Override + public List selectList(TConstructionListReq tConstructionReq) { + PageUtil.startPage(); + List tConstructionList= this.baseMapper.queryBySelective(tConstructionReq); + tConstructionList.forEach(resp -> { + + }); + return tConstructionList; + } + + /** + * 功能描述:查询单条施工信息 + * + * @param constructionId 施工信息Id + * @return {@link TConstructionResp } + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Override + public TConstructionResp selectById(String constructionId) { + TConstructionListReq tConstructionReq = new TConstructionListReq(); + tConstructionReq.setConstructionId(constructionId); + + List list = selectList(tConstructionReq); + return CollUtil.isNotEmpty(list) ? CollUtil.getFirst(list) : new TConstructionResp(); + } + + /** + * 功能描述:新增施工信息 + * + * @param req 施工信息 + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Override + public void saveData(TConstructionReq req) { + save(BeanUtil.copyProperties(req, TConstructionEntity.class)); + } + + /** + * 功能描述:更新施工信息 + * + * @param req 施工信息 + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Override + public void updateData(TConstructionReq req) { + updateById(BeanUtil.copyProperties(req, TConstructionEntity.class)); + } + + /** + * 功能描述:删除施工信息 + * + * @param constructionId 施工信息Id + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Override + public void deleteById(String constructionId) { +// todo 校验 + removeById(constructionId); + } + +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/TurbineServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/TurbineServiceImpl.java new file mode 100644 index 0000000..4daf34f --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/TurbineServiceImpl.java @@ -0,0 +1,284 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Message; +import com.dite.znpt.converts.Converts; +import com.dite.znpt.domain.entity.ProjectEntity; +import com.dite.znpt.domain.entity.TurbineEntity; +import com.dite.znpt.domain.vo.*; +import com.dite.znpt.domain.vo.job.resp.TurbineStatusResp; +import com.dite.znpt.enums.Enums; +import com.dite.znpt.enums.PartTypeEnum; +import com.dite.znpt.enums.ProjectStatusEnum; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.TurbineMapper; +import com.dite.znpt.service.PartService; +import com.dite.znpt.service.ProjectService; +import com.dite.znpt.service.TurbineService; +import com.dite.znpt.service.job.JobService; +import com.dite.znpt.util.PageUtil; +import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 机组-项目关联表服务实现类 + */ +@Service +@RequiredArgsConstructor +public class TurbineServiceImpl extends ServiceImpl implements TurbineService { + + @Resource + private ProjectService projectService; + + @Resource + private PartService partService; + @Autowired + private JobService jobService; + + /** + * 功能描述:分页查询机组列表 + * + * @param req + * @return {@link List }<{@link TurbineListResp }> + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Override + public List page(TurbineListReq req) { + PageUtil.startPage(); + return this.list(req); + } + + /** + * 功能描述:查询机组列表 + * + * @param req + * @return {@link List }<{@link TurbineEntity }> + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Override + public List list(TurbineListReq req) { + List list= this.baseMapper.queryBySelective(req); + return list; + } + + /** + * 功能描述:查询机组明细列表 + * + * @param req + * @return {@link List }<{@link TurbineInfoResp }> + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Override + public List listInfo(TurbineListReq req) { + List list= this.baseMapper.listTurbineInfo(req); + return list; + } + + /** + * 功能描述:查询单条机组 + * + * @param turbineId 机组Id + * @return {@link TurbineResp } + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Override + public TurbineResp detail(String turbineId) { + TurbineEntity entity = this.baseMapper.selectById(turbineId); + TurbineResp resp = Converts.INSTANCE.toTurbineResp(entity); + if(null != resp && StrUtil.isNotEmpty(resp.getProjectId())){ + ProjectEntity project = projectService.getById(resp.getProjectId()); + resp.setProjectName(project.getProjectName()); + } + return resp; + } + + /** + * 功能描述:查询指定机组明细内信息 + * + * @param turbineId 机组Id + * @return {@link TurbineListResp } + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Override + public TurbineInfoResp info(String turbineId) { + TurbineInfoResp result = this.baseMapper.getTurbineInfo(turbineId); + result.getPartRespList().forEach(part -> { + part.setPartTypeLabel(PartTypeEnum.getDescByCode(part.getPartType())); + }); + return result; + } + + /** + * 功能描述:新增机组 + * + * @param req + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Transactional(rollbackFor = Exception.class) + @Override + public void save(TurbineReq req) { + TurbineEntity entity = Converts.INSTANCE.toTurbineEntity(req); + this.save(entity); + } + + /** + * 功能描述:更新机组 + * + * @param turbineId + * @param req + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Transactional(rollbackFor = Exception.class) + @Override + public void update(String turbineId, TurbineReq req) { + if(null == this.baseMapper.selectById(turbineId)){ + throw new ServiceException(Message.TURBINE_ID_IS_NOT_EXIST); + } + TurbineEntity entity = Converts.INSTANCE.toTurbineEntity(req); + entity.setTurbineId(turbineId); + this.updateById(entity); + } + + /** + * 功能描述:删除机组 + * + * @param turbineId 机组-项目关联Id + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(String turbineId) { + removeById(turbineId); + partService.deleteByTurbineIds(Arrays.asList(turbineId)); + } + + /** + * 功能描述:删除机组 + * + * @param projectId 项目id + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteByProjectId(String projectId) { + List turbineList = this.baseMapper.selectList(Wrappers.lambdaQuery().eq(TurbineEntity::getProjectId, projectId)); + List turbineIds = turbineList.stream().map(TurbineEntity::getTurbineId).collect(Collectors.toList()); + this.baseMapper.deleteByIds(turbineIds); + partService.deleteByTurbineIds(turbineIds); + } + + /** + * 功能描述:更新状态 + * + * @param turbineId 机组id + * @author cuizhibin + * @date 2025/05/12 15:45 + **/ + @Override + public void updateStatus(String turbineId) { + if (StringUtils.isEmpty(turbineId)) { + return; + } + TurbineEntity turbine = getById(turbineId); + if (turbine == null) { + return; + } + if (turbine.getStatus() == ProjectStatusEnum.AUDITED.getCode()) { + return; + } + List turbineStatusList = jobService.calCrewStatus(ListUtil.of(turbineId)); + TurbineStatusResp turbineStatusVo = turbineStatusList.get(0); + + List status1 = ListUtil.of(Enums.ECrewWorkStatus.NON_EXISTS.getValue(), Enums.ECrewWorkStatus.NOT_START.getValue()); + List status2 = ListUtil.of(Enums.ECrewWorkStatus.NON_EXISTS.getValue(), Enums.ECrewWorkStatus.START_CONSTRUCTION.getValue()); + List status3 = ListUtil.of(Enums.ECrewWorkStatus.NON_EXISTS.getValue(), Enums.ECrewWorkStatus.SUBMITTED_REPORT.getValue()); + List status4 = ListUtil.of(Enums.ECrewWorkStatus.NON_EXISTS.getValue(), Enums.ECrewWorkStatus.APPROVAL.getValue()); + if (status1.contains(turbineStatusVo.getInWorkStatus()) + && status1.contains(turbineStatusVo.getOutWorkStatus()) + && status1.contains(turbineStatusVo.getAntiThunderWorkStatus()) + && status1.contains(turbineStatusVo.getSummaryWorkStatus())) { +// 未施工 + return; + } + if (status3.contains(turbineStatusVo.getInWorkStatus()) + && status3.contains(turbineStatusVo.getOutWorkStatus()) + && status3.contains(turbineStatusVo.getAntiThunderWorkStatus()) + && status3.contains(turbineStatusVo.getSummaryWorkStatus())) { +// 全部提交已完工 + turbine.setStatus(ProjectStatusEnum.COMPLETED.getCode()); + } else if (status4.contains(turbineStatusVo.getInWorkStatus()) + && status4.contains(turbineStatusVo.getOutWorkStatus()) + && status4.contains(turbineStatusVo.getAntiThunderWorkStatus()) + && status4.contains(turbineStatusVo.getSummaryWorkStatus())) { +// 全部审批已审批 + turbine.setStatus(ProjectStatusEnum.AUDITED.getCode()); + } else if (status2.contains(turbineStatusVo.getInWorkStatus()) + || status2.contains(turbineStatusVo.getOutWorkStatus()) + || status2.contains(turbineStatusVo.getAntiThunderWorkStatus()) + || status2.contains(turbineStatusVo.getSummaryWorkStatus())) { +// 有一个开始则开始 + turbine.setStatus(ProjectStatusEnum.IN_PROGRESS.getCode()); + } + this.updateById(turbine); + // 更新项目状态 + updateProjectStatus(turbine.getProjectId()); + } + + /** + * 功能描述:更新项目状态 + * + * @param projectId 项目id + * @author cuizhibin + * @date 2025/05/12 16:35 + **/ + private void updateProjectStatus(String projectId) { + ProjectEntity project = projectService.getById(projectId); + Integer status = project.getStatus(); + List statusList = this.lambdaQuery().eq(TurbineEntity::getProjectId, projectId).list() + .stream().map(TurbineEntity::getStatus).toList(); +// 有施工中,则是施工中 + if (statusList.contains(ProjectStatusEnum.IN_PROGRESS.getCode())) { + status = ProjectStatusEnum.IN_PROGRESS.getCode(); + } +// 如果机组列表没有状态为 待施工、施工中 的则项目 完工 + if (!statusList.contains(ProjectStatusEnum.PENDING.getCode()) && + !statusList.contains(ProjectStatusEnum.IN_PROGRESS.getCode())) { + status = ProjectStatusEnum.COMPLETED.getCode(); +// 如果机组列表没有状态为 待施工、施工中、已完工 的则项目 已审核 + if (!statusList.contains(ProjectStatusEnum.COMPLETED.getCode())) { + status = ProjectStatusEnum.AUDITED.getCode(); +// 如果机组列表没有状态为 待施工、施工中、已完工、已审核 的则项目 已验收 + if (!statusList.contains(ProjectStatusEnum.AUDITED.getCode())) { + status = ProjectStatusEnum.ACCEPTED.getCode(); + } + } + } + if (!Objects.equals(project.getStatus(), status)) { + project.setStatus(status); + projectService.updateById(project); + } + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/UserPostServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/UserPostServiceImpl.java new file mode 100644 index 0000000..24ad3a7 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/UserPostServiceImpl.java @@ -0,0 +1,91 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Constants; +import com.dite.znpt.constant.Message; +import com.dite.znpt.converts.Converts; +import com.dite.znpt.domain.entity.PostEntity; +import com.dite.znpt.domain.entity.UserEntity; +import com.dite.znpt.domain.entity.UserPostEntity; +import com.dite.znpt.domain.vo.PostResp; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.UserPostMapper; +import com.dite.znpt.service.PostService; +import com.dite.znpt.service.UserPostService; +import com.dite.znpt.service.UserService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/21/周三 15:40 + * @description + */ +@Service +public class UserPostServiceImpl extends ServiceImpl implements UserPostService { + + @Resource + private PostService postService; + @Resource + private UserService userService; + + @Override + public List getPostsByUserId(String userId) { + List postIds = this.list(Wrappers.lambdaQuery(UserPostEntity.class).eq(UserPostEntity::getUserId, userId)).stream().map(UserPostEntity::getPostId).toList(); + if (CollUtil.isEmpty(postIds)) { + return new ArrayList<>(); + } + List posts= postService.listByIds(postIds).stream().filter(post -> Constants.STATUS_1.equals(post.getStatus())).toList(); + return Converts.INSTANCE.toPostResp(posts); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void bindUserPost(String userId, List postIds) { + List postList = postService.listByIds(postIds); + if(CollUtil.isEmpty(postList) || postList.size() != postIds.size()){ + throw new ServiceException(Message.POST_ID_NOT_EXIST_OR_ILLEGAL); + } + UserEntity user = userService.getById(userId); + if(null == user || Constants.DEL_FLAG_1.equals(user.getDelFlag())){ + throw new ServiceException(Message.USER_ID_NOT_EXIST); + } + this.remove(Wrappers.lambdaQuery(UserPostEntity.class).eq(UserPostEntity::getUserId, userId)); + List userPostList = new ArrayList<>(); + postIds.forEach(postId -> { + UserPostEntity userPostEntity = new UserPostEntity(); + userPostEntity.setUserId(userId); + userPostEntity.setPostId(postId); + userPostList.add(userPostEntity); + }); + this.saveBatch(userPostList); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void bindPostUser(String postId, List userIds) { + PostEntity post = postService.getById(postId); + if(null == post || !Constants.STATUS_1.equals(post.getStatus())){ + throw new ServiceException(Message.POST_ID_NOT_EXIST_OR_ILLEGAL); + } + List userList = userService.listByIds(userIds).stream().filter(userEntity -> !Constants.DEL_FLAG_1.equals(userEntity.getDelFlag())).toList(); + if(CollUtil.isEmpty(userList) || userIds.size() != userList.size()){ + throw new ServiceException(Message.USER_ID_NOT_EXIST_OR_ILLEGAL); + } + this.remove(Wrappers.lambdaQuery(UserPostEntity.class).eq(UserPostEntity::getPostId, postId)); + List userPostList = new ArrayList<>(); + userIds.forEach(userId -> { + UserPostEntity userPostEntity = new UserPostEntity(); + userPostEntity.setUserId(userId); + userPostEntity.setPostId(postId); + userPostList.add(userPostEntity); + }); + this.saveBatch(userPostList); + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/UserRoleServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/UserRoleServiceImpl.java new file mode 100644 index 0000000..6b78b37 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/UserRoleServiceImpl.java @@ -0,0 +1,91 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Constants; +import com.dite.znpt.constant.Message; +import com.dite.znpt.converts.Converts; +import com.dite.znpt.domain.entity.RoleEntity; +import com.dite.znpt.domain.entity.UserEntity; +import com.dite.znpt.domain.entity.UserRoleEntity; +import com.dite.znpt.domain.vo.RoleResp; +import com.dite.znpt.domain.vo.UserRoleReq; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.UserRoleMapper; +import com.dite.znpt.service.RoleService; +import com.dite.znpt.service.UserRoleService; +import com.dite.znpt.service.UserService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/21/周三 15:33 + * @description + */ +@Service +public class UserRoleServiceImpl extends ServiceImpl implements UserRoleService { + + @Resource + private UserService userService; + + @Resource + private RoleService roleService; + + @Override + public List getRolesByUserId(String userId) { + List roleIds = this.list(Wrappers.lambdaQuery(UserRoleEntity.class).eq(UserRoleEntity::getUserId, userId)).stream().map(UserRoleEntity::getRoleId).toList(); + if (CollUtil.isEmpty(roleIds)) { + return new ArrayList<>(); + } + List roles = roleService.listByIds(roleIds).stream().filter(role -> Constants.DEL_FLAG_0.equals(role.getDelFlag()) && Constants.STATUS_1.equals(role.getStatus())).toList(); + return Converts.INSTANCE.toRoleResp(roles); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void bindUserRole(UserRoleReq req) { + UserEntity user = userService.getById(req.getUserId()); + if(null == user || !Constants.DEL_FLAG_0.equals(user.getDelFlag())){ + throw new ServiceException(Message.USER_ID_NOT_EXIST_OR_ILLEGAL); + } + List roleList = roleService.listByIds(req.getRoleIds()).stream().filter(role -> Constants.DEL_FLAG_0.equals(role.getDelFlag())).toList(); + if(CollUtil.isEmpty(roleList) || req.getRoleIds().size() != roleList.size()){ + throw new ServiceException(Message.ROLE_ID_NOT_EXIST_OR_ILLEGAL); + } + List userRoleList = new ArrayList<>(); + req.getRoleIds().forEach(roleId -> { + UserRoleEntity userRole = new UserRoleEntity(); + userRole.setUserId(req.getUserId()); + userRole.setRoleId(roleId); + userRoleList.add(userRole); + }); + this.saveBatch(userRoleList); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void bindRoleUser(String roleId, List userIds) { + RoleEntity role = roleService.getById(roleId); + if(role == null || !Constants.DEL_FLAG_0.equals(role.getDelFlag())){ + throw new ServiceException(Message.ROLE_ID_NOT_EXIST_OR_ILLEGAL); + } + List userList = userService.listByIds(userIds).stream().filter(user -> Constants.DEL_FLAG_0.equals(user.getDelFlag())).toList(); + if(CollUtil.isEmpty(userList) || userIds.size()!= userList.size()){ + throw new ServiceException(Message.USER_ID_NOT_EXIST_OR_ILLEGAL); + } + List userRoleList = new ArrayList<>(); + userIds.forEach(userId -> { + UserRoleEntity userRole = new UserRoleEntity(); + userRole.setUserId(userId); + userRole.setRoleId(roleId); + userRoleList.add(userRole); + }); + this.saveBatch(userRoleList); + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/UserServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..7b1bc01 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/UserServiceImpl.java @@ -0,0 +1,257 @@ +package com.dite.znpt.service.impl; + +import cn.dev33.satoken.secure.SaBase64Util; +import cn.dev33.satoken.secure.SaSecureUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.RandomUtil; +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.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Constants; +import com.dite.znpt.constant.Message; +import com.dite.znpt.converts.Converts; +import com.dite.znpt.domain.entity.*; +import com.dite.znpt.domain.vo.*; +import com.dite.znpt.enums.UserStatusEnum; +import com.dite.znpt.enums.UserTypeEnum; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.UserMapper; +import com.dite.znpt.service.*; +import com.dite.znpt.util.PageUtil; +import com.dite.znpt.util.PasswordUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 用户信息表服务实现类 + */ +@Service +@RequiredArgsConstructor +public class UserServiceImpl extends ServiceImpl implements UserService { + + @Value("${password.default-value:Ai3m@123}") + private String defaultPassword; + + @Value("${password.enable-default:true}") + private Boolean enableDefaultPassword; + + private static final String USER_CODE_PREFIX = "YG"; + private static final Integer USER_CODE_LENGTH = 4; + + @Resource + private DeptService deptService; + + @Resource + private PostService postService; + + @Resource + private RoleService roleService; + + @Resource + private UserPostService userPostService; + @Resource + private UserRoleService userRoleService; + + /** + * 功能描述:分页查询用户信息列表 + * + * @param req 用户信息 + * @return {@link List }<{@link UserResp }> + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Override + public List page(UserListReq req) { + PageUtil.startPage(); + return this.list(req); + } + + /** + * 功能描述:查询用户信息列表 + * + * @param req 用户信息 + * @return {@link List }<{@link UserResp }> + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Override + public List list(UserListReq req) { + return this.baseMapper.queryBySelective(req).stream().map(resp -> { + resp.setUserTypeLabel(UserTypeEnum.getDescByCode(resp.getUserType())); + resp.setUserStatusLabel(UserStatusEnum.getDescByCode(resp.getUserStatus())); + return resp; + }).collect(Collectors.toList()); + } + + /** + * 功能描述:查询用户信息详情 + * + * @param userId 用户Id + * @return {@link UserResp } + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Override + public UserResp detail(String userId) { + UserEntity entity = this.getById(userId); + UserResp userResp= Converts.INSTANCE.toUserResp(entity); + if(StrUtil.isNotBlank(userResp.getDeptId())){ + userResp.setUserId(deptService.getById(userResp.getDeptId()).getDeptName()); + } + userResp.setUserTypeLabel(UserTypeEnum.getDescByCode(userResp.getUserType())); + userResp.setUserStatusLabel(UserStatusEnum.getDescByCode(userResp.getUserStatus())); + List userPostList = userPostService.list(Wrappers.lambdaQuery(UserPostEntity.class).eq(UserPostEntity::getUserId, userId)); + if(CollUtil.isNotEmpty(userPostList)){ + String postName = postService.listByIds(userPostList.stream().map(UserPostEntity::getPostId).toList()).stream().map(PostEntity::getPostName).collect(Collectors.joining(StrUtil.COMMA)); + userResp.setPostName(postName); + } + List userRoleList = userRoleService.list(Wrappers.lambdaQuery(UserRoleEntity.class).eq(UserRoleEntity::getUserId, userId)); + if(CollUtil.isNotEmpty(userRoleList)){ + String roleName = roleService.listByIds(userRoleList.stream().map(UserRoleEntity::getRoleId).toList()).stream().map(RoleEntity::getRoleName).collect(Collectors.joining(StrUtil.COMMA)); + userResp.setRoleName(roleName); + } + return userResp; + } + + /** + * 功能描述:新增用户信息 + * + * @param req 用户信息 + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Transactional(rollbackFor = Exception.class) + @Override + public String save(UserReq req) { + UserEntity entity = validate(req, null); + String salt = RandomUtil.randomString(req.getAccount(), 4); + entity.setSalt(salt); + String password = enableDefaultPassword ? defaultPassword : PasswordUtil.generatePassword(); + entity.setPassword(SaSecureUtil.md5(req.getAccount().concat(password).concat(salt))); + entity.setUserCode(userCodeGenerator()); + this.save(entity); + if(CollUtil.isNotEmpty(req.getPostIds())){ + List postIds = postService.listByIds(req.getPostIds()).stream().filter(post -> Constants.STATUS_0.equals(post.getPostId())).map(PostEntity::getPostId).toList(); + if(CollUtil.isNotEmpty(postIds)){ + userPostService.bindUserPost(entity.getUserId(),postIds); + } + } + if(CollUtil.isNotEmpty(req.getRoleIds())){ + List roleIds = roleService.listByIds(req.getRoleIds()).stream().filter(role -> Constants.STATUS_0.equals(role.getStatus())).map(RoleEntity::getRoleId).toList(); + if(CollUtil.isNotEmpty(roleIds)){ + userRoleService.bindUserRole(new UserRoleReq().setUserId(entity.getUserId()).setRoleIds(req.getRoleIds())); + } + } + return SaBase64Util.encode(password); + } + + private String userCodeGenerator(){ + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.select("max(user_code) as userCode"); + List> list = this.baseMapper.selectMaps(queryWrapper); + if(CollUtil.isEmpty(list)){ + return USER_CODE_PREFIX.concat("0001"); + }else { + String maxUserCode = list.get(0).get("userCode").toString(); + String num = maxUserCode.replace(USER_CODE_PREFIX, StrUtil.EMPTY); + Integer nextNum = Integer.parseInt(num) + 1; + if(nextNum.toString().length() < USER_CODE_LENGTH){ + return USER_CODE_PREFIX.concat(StrUtil.fillBefore(nextNum.toString(), '0', USER_CODE_LENGTH)); + }else { + return USER_CODE_PREFIX.concat(nextNum.toString()); + } + } + + } + + + /** + * 功能描述:更新用户信息 + * + * @param userId 用户id + * @param req 用户信息 + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Transactional(rollbackFor = Exception.class) + @Override + public void update(String userId, UserReq req) { + UserEntity originalEntity = this.getById(userId); + if(null == originalEntity || originalEntity.getDelFlag().equals(Constants.DEL_FLAG_1)){ + throw new ServiceException(Message.USER_ID_NOT_EXIST); + } + UserEntity entity = validate(req, originalEntity); + entity.setUserId(userId); + entity.setAccount(null); + if(CollUtil.isNotEmpty(req.getPostIds())){ + userPostService.bindUserPost(userId, req.getPostIds()); + } + this.updateById(entity); + } + + + private UserEntity validate(UserReq req, UserEntity originalEntity){ + if(StrUtil.isNotBlank(req.getDeptId()) && deptService.getById(req.getDeptId()) == null){ + throw new ServiceException(Message.DEPT_ID_NOT_EXIST); + } + LambdaQueryWrapper accountWrapper = Wrappers.lambdaQuery(UserEntity.class).eq(UserEntity::getAccount, req.getAccount()).eq(UserEntity::getDelFlag, Constants.DEL_FLAG_0); + if(this.getOne(accountWrapper) != null && originalEntity == null){ + throw new ServiceException(Message.ACCOUNT_EXIST); + } + if(StrUtil.isNotBlank(req.getMobile())){ + LambdaQueryWrapper mobileWrapper = Wrappers.lambdaQuery(UserEntity.class).eq(UserEntity::getMobile, req.getMobile()).eq(UserEntity::getDelFlag, Constants.DEL_FLAG_0); + List mobileUserList = this.list(mobileWrapper); + if((originalEntity == null && !mobileUserList.isEmpty()) || (originalEntity != null && !originalEntity.getMobile().equals(req.getMobile()) && !mobileUserList.isEmpty())){ + throw new ServiceException(Message.MOBILE_EXIST); + + } + } + if(StrUtil.isNotBlank(req.getEmail())){ + LambdaQueryWrapper emailWrapper = Wrappers.lambdaQuery(UserEntity.class).eq(UserEntity::getEmail, req.getEmail()).eq(UserEntity::getDelFlag, Constants.DEL_FLAG_0); + List emailUserList = this.list(emailWrapper); + if((originalEntity == null && !emailUserList.isEmpty()) || (originalEntity != null && !originalEntity.getEmail().equals(req.getEmail()) && emailUserList.size() > 1)){ + throw new ServiceException(Message.EMAIL_EXIST); + + } + } + if(StrUtil.isNotBlank(req.getIdentityCard())){ + LambdaQueryWrapper identifyCardWrapper = Wrappers.lambdaQuery(UserEntity.class).eq(UserEntity::getIdentityCard, req.getIdentityCard()).eq(UserEntity::getDelFlag, Constants.DEL_FLAG_0); + List identifyCardUserList = this.list(identifyCardWrapper); + if((originalEntity == null && !identifyCardUserList.isEmpty()) || (originalEntity != null && !originalEntity.getIdentityCard().equals(req.getIdentityCard()) && identifyCardUserList.size() > 1)){ + throw new ServiceException(Message.IDENTITY_CARD_EXIST); + } + } + return Converts.INSTANCE.toUserEntity(req); + } + + /** + * 功能描述:删除用户信息 + * + * @param userId 用户Id + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(String userId) { + UserEntity entity = this.getById(userId); + if(null == entity){ + throw new ServiceException(Message.USER_ID_NOT_EXIST); + } + entity.setDelFlag(Constants.DEL_FLAG_1); + this.updateById(entity); + } + + +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/VideoFileInfoServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/VideoFileInfoServiceImpl.java new file mode 100644 index 0000000..b6f7055 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/VideoFileInfoServiceImpl.java @@ -0,0 +1,136 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Message; +import com.dite.znpt.domain.entity.VideoFileInfoEntity; +import com.dite.znpt.domain.vo.VideoFileInfoListReq; +import com.dite.znpt.domain.vo.VideoFileInfoReq; +import com.dite.znpt.domain.vo.VideoFileInfoResp; +import com.dite.znpt.enums.FilePathEnum; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.VideoFileInfoMapper; +import com.dite.znpt.service.PartService; +import com.dite.znpt.service.VideoFileInfoService; +import com.dite.znpt.util.PageUtil; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author huise23 + * @date 2025/06/09 09:45 + * @Description: 视频文件信息表服务实现类 + */ +@Service +@RequiredArgsConstructor +public class VideoFileInfoServiceImpl extends ServiceImpl implements VideoFileInfoService { + + private final PartService partService; + + /** + * 功能描述:查询视频文件信息列表 + * + * @param videoFileInfoReq 视频文件信息信息 + * @return {@link List }<{@link VideoFileInfoResp }> + * @author huise23 + * @date 2025/06/09 09:45 + **/ + @Override + public List selectList(VideoFileInfoListReq videoFileInfoReq) { + PageUtil.startPage(); + List videoFileInfoList = this.baseMapper.queryBySelective(videoFileInfoReq); + videoFileInfoList.forEach(resp -> { + + }); + return videoFileInfoList; + } + + /** + * 功能描述:查询单条视频文件信息 + * + * @param id 视频文件信息Id + * @return {@link VideoFileInfoResp } + * @author huise23 + * @date 2025/06/09 09:45 + **/ + @Override + public VideoFileInfoResp selectById(String id) { + VideoFileInfoListReq videoFileInfoReq = new VideoFileInfoListReq(); + videoFileInfoReq.setId(id); + + List list = selectList(videoFileInfoReq); + return CollUtil.isNotEmpty(list) ? CollUtil.getFirst(list) : new VideoFileInfoResp(); + } + + /** + * 功能描述:更新视频文件信息 + * + * @param videoFileInfo 视频文件信息 + * @author huise23 + * @date 2025/06/09 09:45 + **/ + @Override + public void updateData(VideoFileInfoEntity videoFileInfo) { + updateById(videoFileInfo); + } + + /** + * 功能描述:删除视频文件信息 + * + * @param id 视频文件信息Id + * @author huise23 + * @date 2025/06/09 09:45 + **/ + @Override + public void deleteById(String id) { + removeById(id); + } + + /** + * 功能描述:批量上传 + * + * @param infoReq 视频文件信息实体 + * @param files 文件 + * @return + * @author cuizhibin + * @date 2025/06/09 10:14 + */ + @SneakyThrows + @Override + @Transactional(rollbackFor = Exception.class) + public List batchUpload(VideoFileInfoReq infoReq, MultipartFile[] files) { + if (null == partService.getById(infoReq.getPartId())) { + throw new ServiceException(Message.PART_ID_IS_NOT_EXIST); + } + if (null == files || files.length == 0) { + throw new ServiceException(Message.IMAGE_IS_EMPTY); + } + String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + String path_prefix = FilePathEnum.VIDEO.getFileAbsolutePathPrefix().concat(dateStr).concat(FileUtil.FILE_SEPARATOR); + if (!FileUtil.exist(path_prefix)) { + FileUtil.mkdir(path_prefix); + } + List result = new ArrayList<>(files.length); + for (MultipartFile multipartFile : files) { + VideoFileInfoEntity info = BeanUtil.copyProperties(infoReq, VideoFileInfoEntity.class); + String path = path_prefix + multipartFile.getOriginalFilename(); + FileUtil.writeBytes(multipartFile.getBytes(), path); + info.setFilePath(FilePathEnum.VIDEO.getUrlPath() + StrUtil.removePrefix(path, FilePathEnum.VIDEO.getFileAbsolutePathPrefix()).replace(FileUtil.FILE_SEPARATOR, StrUtil.SLASH)); + result.add(info); + } + baseMapper.insert(result); + return result.stream().map(VideoFileInfoEntity::getFilePath).collect(Collectors.toList()); + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/WeatherTypeServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/WeatherTypeServiceImpl.java new file mode 100644 index 0000000..d9f7667 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/WeatherTypeServiceImpl.java @@ -0,0 +1,99 @@ +package com.dite.znpt.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.domain.entity.WeatherTypeEntity; +import com.dite.znpt.domain.vo.WeatherTypeListReq; +import com.dite.znpt.domain.vo.WeatherTypeResp; +import com.dite.znpt.service.WeatherTypeService; +import com.dite.znpt.mapper.WeatherTypeMapper; +import org.springframework.stereotype.Service; +import cn.hutool.core.collection.CollUtil; +import lombok.RequiredArgsConstructor; +import com.dite.znpt.util.PageUtil; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 天气类型表服务实现类 + */ +@Service +@RequiredArgsConstructor +public class WeatherTypeServiceImpl extends ServiceImpl implements WeatherTypeService { + + /** + * 功能描述:查询天气类型列表 + * + * @param weatherTypeReq 天气类型信息 + * @return {@link List }<{@link WeatherTypeResp }> + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Override + public List selectList(WeatherTypeListReq weatherTypeReq) { + PageUtil.startPage(); + List weatherTypeList= this.baseMapper.queryBySelective(weatherTypeReq); + weatherTypeList.forEach(resp -> { + + }); + return weatherTypeList; + } + + /** + * 功能描述:查询单条天气类型 + * + * @param weatherCode 天气类型Id + * @return {@link WeatherTypeResp } + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Override + public WeatherTypeResp selectById(String weatherCode) { + WeatherTypeListReq weatherTypeReq = new WeatherTypeListReq(); + weatherTypeReq.setWeatherCode(weatherCode); + + List list = selectList(weatherTypeReq); + return CollUtil.isNotEmpty(list) ? CollUtil.getFirst(list) : new WeatherTypeResp(); + } + + /** + * 功能描述:新增天气类型 + * + * @param weatherType 天气类型 + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Override + public void saveData(WeatherTypeEntity weatherType) { +// todo 校验 + save(weatherType); + } + + /** + * 功能描述:更新天气类型 + * + * @param weatherType 天气类型 + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Override + public void updateData(WeatherTypeEntity weatherType) { +// todo 校验 + updateById(weatherType); + } + + /** + * 功能描述:删除天气类型 + * + * @param weatherCode 天气类型Id + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Override + public void deleteById(String weatherCode) { +// todo 校验 + removeById(weatherCode); + } + +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/WorkShitServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/WorkShitServiceImpl.java new file mode 100644 index 0000000..58ca006 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/WorkShitServiceImpl.java @@ -0,0 +1,157 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Constants; +import com.dite.znpt.constant.Message; +import com.dite.znpt.converts.Converts; +import com.dite.znpt.domain.entity.UserEntity; +import com.dite.znpt.domain.entity.WorkShiftEntity; +import com.dite.znpt.domain.vo.WorkShiftListResp; +import com.dite.znpt.domain.vo.WorkShiftReq; +import com.dite.znpt.domain.vo.WorkShiftResp; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.WorkShiftMapper; +import com.dite.znpt.service.UserService; +import com.dite.znpt.service.WorkShiftService; +import com.dite.znpt.util.PageUtil; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author Bear.G + * @date 2025/6/30/周一 10:28 + * @description + */ +@Service +public class WorkShitServiceImpl extends ServiceImpl implements WorkShiftService { + + @Resource + private UserService userService; + + @Override + public List page(String workShitName) { + PageUtil.startPage(); + return this.list(workShitName); + } + + @Override + public List list(String workShitName) { + List list = this.list(Wrappers.lambdaQuery(WorkShiftEntity.class).eq(WorkShiftEntity::getDelFlag, Constants.DEL_FLAG_0).like(StrUtil.isNotBlank(workShitName), WorkShiftEntity::getWorkShiftName, workShitName)); + List userIds = list.stream().map(WorkShiftEntity::getCreateBy).toList(); + Map userIdMap = !userIds.isEmpty() ? userService.listByIds(userIds).stream().collect(Collectors.toMap(UserEntity::getUserId, Function.identity())): new HashMap<>(); + List result = Converts.INSTANCE.toWorkShiftListResp(list); + result.forEach(workShiftListResp -> { + workShiftListResp.setStatusLabel(Constants.STATUS_UNPUBLISH.equals(workShiftListResp.getStatus()) ? "未发布" : "已发布"); + if(userIdMap.containsKey(workShiftListResp.getCreateBy())){ + workShiftListResp.setCreateUserName(userIdMap.get(workShiftListResp.getCreateBy()).getName()); + } + }); + return result; + } + + @Override + public WorkShiftResp detail(String workShiftId) { + WorkShiftEntity workShift = this.getById(workShiftId); + if(workShift == null || !Constants.DEL_FLAG_0.equals(workShift.getDelFlag())){ + throw new ServiceException(Message.WORK_SHIFT_NOT_EXIST); + } + WorkShiftResp workShiftResp = Converts.INSTANCE.toWorkShiftResp(workShift); + workShiftResp.setStatusLabel(Constants.STATUS_UNPUBLISH.equals(workShiftResp.getStatus()) ? "未发布" : "已发布"); + return workShiftResp; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void save(WorkShiftReq req) { + List list = this.list(Wrappers.lambdaQuery(WorkShiftEntity.class).eq(WorkShiftEntity::getDelFlag, Constants.DEL_FLAG_0).eq(WorkShiftEntity::getWorkShiftName, req.getWorkShiftName())); + if(!list.isEmpty()){ + throw new ServiceException(Message.WORK_SHIFT_NAME_EXIST); + } + WorkShiftEntity entity = validation(req); + entity.setStatus(Constants.STATUS_UNPUBLISH); + this.save(entity); + } + + private WorkShiftEntity validation(WorkShiftReq req) { + if(req.getWorkTimeEnd().isBefore(req.getWorkTimeStart())){ + throw new ServiceException(Message.WORK_TIME_START_CAN_NOT_BEFORE_WORK_TIME_END); + } + int workTime = req.getWorkTimeEnd().toSecondOfDay() - req.getWorkTimeStart().toSecondOfDay() ; + if(req.getRestTimeEnd() != null && req.getRestTimeStart()!= null){ + if(req.getRestTimeEnd().isBefore(req.getRestTimeStart())){ + throw new ServiceException(Message.REST_TIME_START_CAN_NOT_BEFORE_REST_TIME_END); + } + if(!(req.getRestTimeStart().isAfter(req.getWorkTimeStart()) && req.getRestTimeStart().isBefore(req.getWorkTimeEnd()))){ + throw new ServiceException(Message.REST_TIME_START_MUST_BETWEEN_WORK_TIME); + } + if(!(req.getRestTimeEnd().isAfter(req.getWorkTimeStart()) && req.getRestTimeEnd().isBefore(req.getWorkTimeEnd()))){ + throw new ServiceException(Message.REST_TIME_END_MUST_BETWEEN_WORK_TIME); + } + workTime = workTime - (req.getRestTimeEnd().toSecondOfDay() - req.getRestTimeStart().toSecondOfDay()); + }else { + req.setRestTimeEnd(null); + req.setRestTimeEnd(null); + } + if(req.getEarlyTimeLimit() != null && req.getEarlyTimeOffset()!= null && req.getEarlyTimeLimit() <= req.getEarlyTimeOffset()){ + throw new ServiceException(Message.EARLY_TIME_LIMIT_CAN_NOT_BEFORE_EARLY_TIME_OFFSET); + } + if(req.getLateTimeLimit() != null && req.getLateTimeOffset() != null && req.getLateTimeLimit() <= req.getLateTimeOffset()){ + throw new ServiceException(Message.LATE_TIME_LIMIT_CAN_NOT_BEFORE_LATE_TIME_OFFSET); + } + + WorkShiftEntity entity = Converts.INSTANCE.toWorkShiftEntity(req); + entity.setWorkTime(workTime/60); + return entity; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(String workShiftId, WorkShiftReq req) { + WorkShiftEntity workShift = this.getById(workShiftId); + if(workShift == null || !Constants.DEL_FLAG_0.equals(workShift.getDelFlag())){ + throw new ServiceException(Message.WORK_SHIFT_NOT_EXIST); + } + List list = this.list(Wrappers.lambdaQuery(WorkShiftEntity.class).eq(WorkShiftEntity::getDelFlag, Constants.DEL_FLAG_0).eq(WorkShiftEntity::getWorkShiftName, req.getWorkShiftName())); + if(!req.getWorkShiftName().equals(workShift.getWorkShiftName()) && !list.isEmpty()){ + throw new ServiceException(Message.WORK_SHIFT_NAME_EXIST); + } + WorkShiftEntity entity = validation(req); + entity.setWorkShiftId(workShiftId); + this.updateById(entity); + } + + + @Transactional(rollbackFor = Exception.class) + @Override + public void publish(String workShiftId) { + WorkShiftEntity workShift = this.getById(workShiftId); + if(workShift == null || !Constants.DEL_FLAG_0.equals(workShift.getDelFlag())){ + throw new ServiceException(Message.WORK_SHIFT_NOT_EXIST); + } + if(!Constants.STATUS_UNPUBLISH.equals(workShift.getStatus())){ + throw new ServiceException(Message.WORK_SHIFT_IS_NOT_UNPUBLISH); + } + workShift.setStatus(Constants.STATUS_PUBLISH); + this.updateById(workShift); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void delete(String workShiftId) { + WorkShiftEntity workShift = this.getById(workShiftId); + if(workShift == null || !Constants.DEL_FLAG_0.equals(workShift.getDelFlag())){ + throw new ServiceException(Message.WORK_SHIFT_NOT_EXIST); + } + workShift.setDelFlag(Constants.DEL_FLAG_1); + this.updateById(workShift); + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/WorkbenchServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/WorkbenchServiceImpl.java new file mode 100644 index 0000000..de0772a --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/WorkbenchServiceImpl.java @@ -0,0 +1,53 @@ +package com.dite.znpt.service.impl; + +import cn.dev33.satoken.stp.StpUtil; +import com.dite.znpt.domain.entity.DefectEntity; +import com.dite.znpt.domain.entity.InspectionReportEntity; +import com.dite.znpt.domain.entity.ProjectEntity; +import com.dite.znpt.domain.entity.ProjectTaskEntity; +import com.dite.znpt.domain.vo.WorkbenchInfoResp; +import com.dite.znpt.service.*; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Slf4j +@Service +@RequiredArgsConstructor +public class WorkbenchServiceImpl implements WorkbenchService { + private final ProjectService projectService; + private final ProjectTaskService projectTaskService; + private final InspectionReportService inspectionReportService; + private final DefectService defectService; + + @Override + public WorkbenchInfoResp getInfo() { + WorkbenchInfoResp resp = new WorkbenchInfoResp(); + String userId = StpUtil.getLoginIdAsString(); +// 项目数量 + Long projectCount = projectService.lambdaQuery() + .eq(ProjectEntity::getProjectManagerId, userId).or() + .eq(ProjectEntity::getAuditorId, userId).or() + .like(ProjectEntity::getConstructorIds, userId).or() + .eq(ProjectEntity::getQualityOfficerId, userId).or() + .eq(ProjectEntity::getConstructTeamLeaderId, userId) + .count(); + resp.setProjectCount(projectCount); + +// 进行中任务 + Long progressTaskCount = projectTaskService.lambdaQuery() + .eq(ProjectTaskEntity::getMainUserId, userId).or() + .like(ProjectTaskEntity::getUserIds, userId).count(); + resp.setProgressTaskCount(progressTaskCount); + +// 待审核报告数 + Long approvalReportCount = inspectionReportService.lambdaQuery().eq(InspectionReportEntity::getReportAuditor, userId).count(); + resp.setApprovalReportCount(approvalReportCount); + +// 发现缺陷数 + Long findDefectCount = defectService.lambdaQuery() + .eq(DefectEntity::getCreateBy, userId).count(); + resp.setFindDefectCount(findDefectCount); + return resp; + } +} diff --git a/core/src/main/java/com/dite/znpt/service/job/JobAntiThunderWorkService.java b/core/src/main/java/com/dite/znpt/service/job/JobAntiThunderWorkService.java new file mode 100644 index 0000000..ea8fef9 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/job/JobAntiThunderWorkService.java @@ -0,0 +1,41 @@ +package com.dite.znpt.service.job; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.job.JobAntiThunderWork; +import com.dite.znpt.domain.vo.job.req.JobAntiThunderWorkReq; +import com.dite.znpt.domain.vo.job.req.JobInfoReq; + +import java.util.List; + +public interface JobAntiThunderWorkService extends IService { + + JobAntiThunderWork saveInfo(JobAntiThunderWork entity); + + /** + * 功能描述:列表查询 + * + * @param request 请求 + * @return {@link List }<{@link JobAntiThunderWork }> + * @author cuizhibin + * @date 2023/11/02 13:28 + **/ + List list(JobInfoReq request); + /** + * 功能描述:组长提交/项目经理审批 + * + * @param request 请求 + * @author cuizhibin + * @date 2023/11/06 10:32 + **/ + public void submit(JobInfoReq request); + /** + * 功能描述:组长驳回/项目经理驳回 + * + * @param request 请求 + * @author cuizhibin + * @date 2023/11/06 10:32 + **/ + public void reject(JobInfoReq request); + + List listByJobId(JobAntiThunderWorkReq dto); +} diff --git a/core/src/main/java/com/dite/znpt/service/job/JobInWorkPartsService.java b/core/src/main/java/com/dite/znpt/service/job/JobInWorkPartsService.java new file mode 100644 index 0000000..cb557a3 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/job/JobInWorkPartsService.java @@ -0,0 +1,8 @@ +package com.dite.znpt.service.job; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.job.JobAntiThunderWork; +import com.dite.znpt.domain.entity.job.JobInWorkParts; + +public interface JobInWorkPartsService extends IService { +} diff --git a/core/src/main/java/com/dite/znpt/service/job/JobInWorkService.java b/core/src/main/java/com/dite/znpt/service/job/JobInWorkService.java new file mode 100644 index 0000000..c4cb0b8 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/job/JobInWorkService.java @@ -0,0 +1,42 @@ +package com.dite.znpt.service.job; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.job.JobInWork; +import com.dite.znpt.domain.entity.job.JobInWork; +import com.dite.znpt.domain.vo.job.req.JobInWorkReq; +import com.dite.znpt.domain.vo.job.req.JobInfoReq; + +import java.util.List; + +public interface JobInWorkService extends IService { + + JobInWork saveInfo(JobInWork entity); + + /** + * 功能描述:列表查询 + * + * @param request 请求 + * @return {@link List }<{@link JobInWork }> + * @author cuizhibin + * @date 2023/11/02 13:28 + **/ + List list(JobInfoReq request); + /** + * 功能描述:组长提交/项目经理审批 + * + * @param request 请求 + * @author cuizhibin + * @date 2023/11/06 10:32 + **/ + public void submit(JobInfoReq request); + /** + * 功能描述:组长驳回/项目经理驳回 + * + * @param request 请求 + * @author cuizhibin + * @date 2023/11/06 10:32 + **/ + public void reject(JobInfoReq request); + + List listByJobId(JobInWorkReq dto); +} diff --git a/core/src/main/java/com/dite/znpt/service/job/JobOutWorkService.java b/core/src/main/java/com/dite/znpt/service/job/JobOutWorkService.java new file mode 100644 index 0000000..782f101 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/job/JobOutWorkService.java @@ -0,0 +1,41 @@ +package com.dite.znpt.service.job; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.job.JobOutWork; +import com.dite.znpt.domain.vo.job.req.JobInfoReq; +import com.dite.znpt.domain.vo.job.req.JobOutWorkReq; + +import java.util.List; + +public interface JobOutWorkService extends IService { + + JobOutWork saveInfo(JobOutWork entity); + + /** + * 功能描述:列表查询 + * + * @param request 请求 + * @return {@link List }<{@link JobOutWork }> + * @author cuizhibin + * @date 2023/11/02 13:28 + **/ + List list(JobInfoReq request); + /** + * 功能描述:组长提交/项目经理审批 + * + * @param request 请求 + * @author cuizhibin + * @date 2023/11/06 10:32 + **/ + public void submit(JobInfoReq request); + /** + * 功能描述:组长驳回/项目经理驳回 + * + * @param request 请求 + * @author cuizhibin + * @date 2023/11/06 10:32 + **/ + public void reject(JobInfoReq request); + + JobOutWork getByJobId(JobOutWorkReq dto); +} diff --git a/core/src/main/java/com/dite/znpt/service/job/JobService.java b/core/src/main/java/com/dite/znpt/service/job/JobService.java new file mode 100644 index 0000000..5b7a9a8 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/job/JobService.java @@ -0,0 +1,15 @@ +package com.dite.znpt.service.job; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.job.JobInfo; +import com.dite.znpt.domain.vo.job.req.JobInfoReq; +import com.dite.znpt.domain.vo.job.resp.TurbineStatusResp; + +import java.util.List; + +public interface JobService extends IService { + + List page(JobInfoReq jobInfoReq); + + List calCrewStatus(List crewIds); +} diff --git a/core/src/main/java/com/dite/znpt/service/job/JobSummaryWorkService.java b/core/src/main/java/com/dite/znpt/service/job/JobSummaryWorkService.java new file mode 100644 index 0000000..151c9e0 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/job/JobSummaryWorkService.java @@ -0,0 +1,41 @@ +package com.dite.znpt.service.job; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.job.JobSummaryWork; +import com.dite.znpt.domain.vo.job.req.JobInfoReq; +import com.dite.znpt.domain.vo.job.req.JobSummaryWorkReq; + +import java.util.List; + +public interface JobSummaryWorkService extends IService { + + JobSummaryWork saveInfo(JobSummaryWork entity); + + /** + * 功能描述:列表查询 + * + * @param request 请求 + * @return {@link List }<{@link JobSummaryWork }> + * @author cuizhibin + * @date 2023/11/02 13:28 + **/ + List list(JobInfoReq request); + /** + * 功能描述:组长提交/项目经理审批 + * + * @param request 请求 + * @author cuizhibin + * @date 2023/11/06 10:32 + **/ + public void submit(JobInfoReq request); + /** + * 功能描述:组长驳回/项目经理驳回 + * + * @param request 请求 + * @author cuizhibin + * @date 2023/11/06 10:32 + **/ + public void reject(JobInfoReq request); + + List listByJobId(JobSummaryWorkReq dto); +} diff --git a/core/src/main/java/com/dite/znpt/service/job/impl/JobAntiThunderWorkServiceImpl.java b/core/src/main/java/com/dite/znpt/service/job/impl/JobAntiThunderWorkServiceImpl.java new file mode 100644 index 0000000..ae436bf --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/job/impl/JobAntiThunderWorkServiceImpl.java @@ -0,0 +1,173 @@ +package com.dite.znpt.service.job.impl; + +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.context.UserContext; +import com.dite.znpt.domain.QueryWrapperBuilder; +import com.dite.znpt.domain.entity.ProjectEntity; +import com.dite.znpt.domain.entity.job.JobInfo; +import com.dite.znpt.domain.entity.job.JobAntiThunderWork; +import com.dite.znpt.domain.vo.job.req.JobAntiThunderWorkReq; +import com.dite.znpt.domain.vo.job.req.JobInfoReq; +import com.dite.znpt.enums.Enums; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.JobAntiThunderWorkMapper; +import com.dite.znpt.service.ProjectService; +import com.dite.znpt.service.TurbineService; +import com.dite.znpt.service.job.JobAntiThunderWorkService; +import com.dite.znpt.service.job.JobService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.stream.Collectors; + +@Service +@Transactional(rollbackFor = Exception.class) +public class JobAntiThunderWorkServiceImpl extends ServiceImpl implements JobAntiThunderWorkService { + @Autowired + private TurbineService turbineService; + @Autowired + private JobService jobService; + @Autowired + private ProjectService projectService; + + @Override + public JobAntiThunderWork saveInfo(JobAntiThunderWork entity) { + if (StrUtil.isNotBlank(entity.getId())) { + JobAntiThunderWork oldEntity = getById(entity.getId()); + if (!"0".equals(oldEntity.getStatus())) { + throw new ServiceException("内容已提交,不可修改"); + } + } + entity.preSave(); + saveOrUpdate(entity); + JobInfo jobInfo = jobService.getById(entity.getJobId()); + turbineService.updateStatus(jobInfo.getCrewId()); +// 施工人员提交后更新该工作类型状态及提交时间 + if (entity.getStatus().equals(Enums.EWorkStatus.SUBMITTED.getValue())) { + jobInfo.setStatus(Enums.EWorkStatus.SUBMITTED.getValue()); + jobInfo.setSubmitTime(new Date()); + jobService.updateById(jobInfo); + } + return entity; + } + + /** + * 功能描述:列表查询 + * + * @param request 请求 + * @return {@link List }<{@link JobAntiThunderWork }> + * @author cuizhibin + * @date 2023/11/02 13:28 + **/ + @Override + public List list(JobInfoReq request) { + List jobInfoList = jobService.list(QueryWrapperBuilder.build(request)); + if (!jobInfoList.isEmpty()) { + List statusList = ListUtil.of("1", "2", "3"); + if (!Enums.ERoleCode.Builder.getName().equals(UserContext.getRoleCode())) { + statusList = ListUtil.of("2", "3"); + } + List jobIds = jobInfoList.stream().map(JobInfo::getId).collect(Collectors.toList()); + Map jobId2Job = jobInfoList.stream().collect(Collectors.toMap(JobInfo::getId, i -> i)); + List list = lambdaQuery().in(JobAntiThunderWork::getJobId, jobIds).in(JobAntiThunderWork::getStatus, statusList).list(); + list.forEach(work -> { + JobInfo jobInfo = jobId2Job.get(work.getJobId()); + work.setConstructionPersonnel(jobInfo.getConstructionPersonnel()); + work.setJobCode(jobInfo.getJobCode()); + }); + return list; + } + return new ArrayList<>(); + } + + /** + * 功能描述:组长提交/项目经理审批 + * + * @param request 请求 + * @author cuizhibin + * @date 2023/11/06 10:32 + **/ + @Override + public void submit(JobInfoReq request) { + request.setWorkType(Enums.EWorkType.AntiThunderWork.getValue()); + List jobInfoList = jobService.list(QueryWrapperBuilder.build(request)); + if (jobInfoList.isEmpty()) { + throw new ServiceException("未找到数据"); + } +// 这里只会有一条数据 + JobInfo jobInfo = jobInfoList.get(0); + ProjectEntity project = projectService.getById(jobInfo.getProjectId()); + List workList = lambdaQuery().in(JobAntiThunderWork::getJobId, jobInfoList.stream().map(JobInfo::getId).collect(Collectors.toList())).list(); +// 如果是项目经理 + if (Enums.ERoleCode.ProjectManager.getName().equals(UserContext.getRoleCode())) { + if (StrUtil.isNotBlank(project.getAuditorId())) { + Optional any = workList.stream().filter(item -> !Objects.equals(item.getSafetyOfficerStatus(), Enums.EAuthStatus.APPROVAL.getVal())).findAny(); + if (any.isPresent()) { + throw new ServiceException("安全员未审核"); + } + } + if (StrUtil.isNotBlank(project.getQualityOfficerId())) { + Optional any = workList.stream().filter(item -> !Objects.equals(item.getQualityOfficerStatus(), Enums.EAuthStatus.APPROVAL.getVal())).findAny(); + if (any.isPresent()) { + throw new ServiceException("质量员未审核"); + } + } + workList.forEach(item -> item.setStatus(Enums.EWorkStatus.MANAGER_APPROVAL.getValue())); + jobInfo.setStatus(Enums.EWorkStatus.MANAGER_APPROVAL.getValue()); + } else if (Enums.ERoleCode.SafetyOfficer.getName().equals(UserContext.getRoleCode())) { + workList.forEach(item -> item.setSafetyOfficerStatus(Enums.EAuthStatus.APPROVAL.getVal())); + jobInfo.setSafetyOfficerStatus(Enums.EAuthStatus.APPROVAL.getVal()); + } else if (Enums.ERoleCode.QualityOfficer.getName().equals(UserContext.getRoleCode())) { + workList.forEach(item -> item.setQualityOfficerStatus(Enums.EAuthStatus.APPROVAL.getVal())); + jobInfo.setQualityOfficerStatus(Enums.EAuthStatus.APPROVAL.getVal()); + } else if (project.getConstructTeamLeaderId().equals(UserContext.getUserInfo().getUserId())) { + workList.forEach(item -> item.setStatus(Enums.EWorkStatus.LEADER_SUBMITTED.getValue())); + jobInfo.setStatus(Enums.EWorkStatus.LEADER_SUBMITTED.getValue()); + } + updateBatchById(workList); + turbineService.updateStatus(jobInfo.getCrewId()); + jobService.updateById(jobInfo); + } + + /** + * 功能描述:组长驳回/项目经理驳回 + * + * @param request 请求 + * @author cuizhibin + * @date 2023/11/06 10:32 + **/ + @Override + public void reject(JobInfoReq request) { + request.setWorkType(Enums.EWorkType.AntiThunderWork.getValue()); + List jobInfoList = jobService.list(QueryWrapperBuilder.build(request)); + if (jobInfoList.isEmpty()) { + throw new ServiceException("未找到数据"); + } +// 这里只会有一条数据 + JobInfo jobInfo = jobInfoList.get(0); + ProjectEntity project = projectService.getById(jobInfo.getProjectId()); + List workList = lambdaQuery().in(JobAntiThunderWork::getJobId, jobInfoList.stream().map(JobInfo::getId).collect(Collectors.toList())).list(); +// 如果是项目经理 + if (Enums.ERoleCode.ProjectManager.getName().equals(UserContext.getRoleCode())) { + workList.forEach(item -> item.setStatus(Enums.EWorkStatus.SUBMITTED.getValue())); + jobInfo.setStatus(Enums.EWorkStatus.SUBMITTED.getValue()); + } else if (Enums.ERoleCode.SafetyOfficer.getName().equals(UserContext.getRoleCode()) + || Enums.ERoleCode.QualityOfficer.getName().equals(UserContext.getRoleCode()) + || project.getConstructTeamLeaderId().equals(UserContext.getUserInfo().getUserId())) { + workList.forEach(item -> item.setStatus(Enums.EWorkStatus.DRAFT.getValue())); + jobInfo.setStatus(Enums.EWorkStatus.DRAFT.getValue()); + } + updateBatchById(workList); + turbineService.updateStatus(jobInfo.getCrewId()); + jobService.updateById(jobInfo); + } + + @Override + public List listByJobId(JobAntiThunderWorkReq dto) { + return lambdaQuery().eq(JobAntiThunderWork::getJobId, dto.getJobId()).list(); + } +} diff --git a/core/src/main/java/com/dite/znpt/service/job/impl/JobInWorkPartsServiceImpl.java b/core/src/main/java/com/dite/znpt/service/job/impl/JobInWorkPartsServiceImpl.java new file mode 100644 index 0000000..624a2a9 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/job/impl/JobInWorkPartsServiceImpl.java @@ -0,0 +1,21 @@ +package com.dite.znpt.service.job.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.domain.entity.job.JobInWorkParts; +import com.dite.znpt.mapper.JobInWorkPartsMapper; +import com.dite.znpt.service.job.JobInWorkPartsService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * @author wujinsong + * @date 2023/2/17 09:49 + * @description: 部件 + */ +@Service +@Transactional(rollbackFor = Exception.class) +public class JobInWorkPartsServiceImpl extends ServiceImpl implements JobInWorkPartsService { +} diff --git a/core/src/main/java/com/dite/znpt/service/job/impl/JobInWorkServiceImpl.java b/core/src/main/java/com/dite/znpt/service/job/impl/JobInWorkServiceImpl.java new file mode 100644 index 0000000..de18bae --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/job/impl/JobInWorkServiceImpl.java @@ -0,0 +1,192 @@ +package com.dite.znpt.service.job.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.context.UserContext; +import com.dite.znpt.domain.QueryWrapperBuilder; +import com.dite.znpt.domain.entity.ProjectEntity; +import com.dite.znpt.domain.entity.job.*; +import com.dite.znpt.domain.entity.job.JobInWork; +import com.dite.znpt.domain.vo.job.req.JobInWorkReq; +import com.dite.znpt.domain.vo.job.req.JobInfoReq; +import com.dite.znpt.enums.Enums; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.JobInWorkMapper; +import com.dite.znpt.service.ProjectService; +import com.dite.znpt.service.TurbineService; +import com.dite.znpt.service.job.JobInWorkPartsService; +import com.dite.znpt.service.job.JobInWorkService; +import com.dite.znpt.service.job.JobService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Service +@Transactional(rollbackFor = Exception.class) +public class JobInWorkServiceImpl extends ServiceImpl implements JobInWorkService { + @Autowired + private TurbineService turbineService; + @Autowired + private JobService jobService; + @Autowired + private JobInWorkPartsService jobInWorkPartsService; + @Autowired + private ProjectService projectService; + + @Override + public JobInWork saveInfo(JobInWork entity) { + if (StrUtil.isNotBlank(entity.getId())) { + JobInWork oldEntity = this.getById(entity.getId()); + if (!"0".equals(oldEntity.getStatus())) { + throw new ServiceException("内容已提交,不可修改"); + } + } + saveOrUpdate(entity); + if (CollUtil.isNotEmpty(entity.getAscendingPartsList())) { + List idList = entity.getAscendingPartsList().stream().map(JobInWorkParts::getId).filter(StringUtils::isNotEmpty).distinct().collect(Collectors.toList()); + if (CollUtil.isEmpty(idList)) { + jobInWorkPartsService.lambdaUpdate().eq(JobInWorkParts::getJobId, entity.getJobId()).remove(); + } else { + jobInWorkPartsService.lambdaUpdate().eq(JobInWorkParts::getJobId, entity.getJobId()) + .ne(JobInWorkParts::getId, idList).remove(); + } + entity.getAscendingPartsList().forEach(item -> item.setJobId(entity.getJobId())); + jobInWorkPartsService.saveOrUpdateBatch(entity.getAscendingPartsList()); + } else { + jobInWorkPartsService.lambdaUpdate().eq(JobInWorkParts::getJobId, entity.getJobId()).remove(); + } + JobInfo jobInfo = jobService.getById(entity.getJobId()); + turbineService.updateStatus(jobInfo.getCrewId()); +// 施工人员提交后更新该工作类型状态及提交时间 + if (entity.getStatus().equals(Enums.EWorkStatus.SUBMITTED.getValue())) { + jobInfo.setStatus(Enums.EWorkStatus.SUBMITTED.getValue()); + jobInfo.setSubmitTime(new Date()); + jobService.updateById(jobInfo); + } + return entity; + } + + /** + * 功能描述:列表查询 + * + * @param request 请求 + * @return {@link List }<{@link JobInWork }> + * @author cuizhibin + * @date 2023/11/02 13:28 + **/ + public List list(JobInfoReq request) { + List jobList = jobService.list(QueryWrapperBuilder.build(request)); + if (!jobList.isEmpty()) { + List statusList = ListUtil.of("1", "2", "3"); + if (!Enums.ERoleCode.Builder.getName().equals(UserContext.getRoleCode())) { + statusList = ListUtil.of("2", "3"); + } + List jobIds = jobList.stream().map(JobInfo::getId).collect(Collectors.toList()); + Map jobId2Job = jobList.stream().collect(Collectors.toMap(JobInfo::getId, Function.identity())); + List list = lambdaQuery().in(JobInWork::getJobId, jobIds).in(JobInWork::getStatus, statusList).list(); + + list.forEach(work -> { + JobInfo job = jobId2Job.get(work.getJobId()); + work.setConstructionPersonnel(job.getConstructionPersonnel()); + work.setJobCode(job.getJobCode()); + + List workParts = jobInWorkPartsService.lambdaQuery().eq(JobInWorkParts::getJobId, work.getJobId()).list(); + work.setAscendingPartsList(workParts); + }); + return list; + } + return new ArrayList<>(); + } + + /** + * 功能描述:组长提交/项目经理审批 + * + * @param request 请求 + * @author cuizhibin + * @date 2023/11/06 10:32 + **/ + public void submit(JobInfoReq request) { + request.setWorkType(Enums.EWorkType.InWork.getValue()); + List jobList = jobService.list(QueryWrapperBuilder.build(request)); + if (jobList.isEmpty()) { + throw new ServiceException("未找到数据"); + } +// 这里只会有一条数据 + JobInfo jobInfo = jobList.get(0); + ProjectEntity project = projectService.getById(jobInfo.getProjectId()); + List workList = lambdaQuery().in(JobInWork::getJobId, jobList.stream().map(JobInfo::getId).collect(Collectors.toList())).list(); +// 如果是项目经理 + if (Enums.ERoleCode.ProjectManager.getName().equals(UserContext.getRoleCode())) { + if (StrUtil.isNotBlank(project.getAuditorId())) { + Optional any = workList.stream().filter(item -> !Objects.equals(item.getSafetyOfficerStatus(), Enums.EAuthStatus.APPROVAL.getVal())).findAny(); + if (any.isPresent()) { + throw new ServiceException("安全员未审核"); + } + } + if (StrUtil.isNotBlank(project.getQualityOfficerId())) { + Optional any = workList.stream().filter(item -> !Objects.equals(item.getQualityOfficerStatus(), Enums.EAuthStatus.APPROVAL.getVal())).findAny(); + if (any.isPresent()) { + throw new ServiceException("质量员未审核"); + } + } + workList.forEach(item -> item.setStatus(Enums.EWorkStatus.MANAGER_APPROVAL.getValue())); + jobInfo.setStatus(Enums.EWorkStatus.MANAGER_APPROVAL.getValue()); + } else if (Enums.ERoleCode.SafetyOfficer.getName().equals(UserContext.getRoleCode())) { + workList.forEach(item -> item.setSafetyOfficerStatus(Enums.EAuthStatus.APPROVAL.getVal())); + jobInfo.setSafetyOfficerStatus(Enums.EAuthStatus.APPROVAL.getVal()); + } else if (Enums.ERoleCode.QualityOfficer.getName().equals(UserContext.getRoleCode())) { + workList.forEach(item -> item.setQualityOfficerStatus(Enums.EAuthStatus.APPROVAL.getVal())); + jobInfo.setQualityOfficerStatus(Enums.EAuthStatus.APPROVAL.getVal()); + } else if (project.getConstructTeamLeaderId().equals(UserContext.getUserInfo().getUserId())) { + workList.forEach(item -> item.setStatus(Enums.EWorkStatus.LEADER_SUBMITTED.getValue())); + jobInfo.setStatus(Enums.EWorkStatus.LEADER_SUBMITTED.getValue()); + } + updateBatchById(workList); + turbineService.updateStatus(jobInfo.getCrewId()); + jobService.updateById(jobInfo); + } + + /** + * 功能描述:组长驳回/项目经理驳回 + * + * @param request 请求 + * @author cuizhibin + * @date 2023/11/06 10:32 + **/ + public void reject(JobInfoReq request) { + request.setWorkType(Enums.EWorkType.InWork.getValue()); + List jobInfoList = jobService.list(QueryWrapperBuilder.build(request)); + if (jobInfoList.isEmpty()) { + throw new ServiceException("未找到数据"); + } +// 这里只会有一条数据 + JobInfo jobInfo = jobInfoList.get(0); + ProjectEntity project = projectService.getById(jobInfo.getProjectId()); + List workList = lambdaQuery().in(JobInWork::getJobId, jobInfoList.stream().map(JobInfo::getId).collect(Collectors.toList())).list(); +// 如果是项目经理 + if (Enums.ERoleCode.ProjectManager.getName().equals(UserContext.getRoleCode())) { + workList.forEach(item -> item.setStatus(Enums.EWorkStatus.SUBMITTED.getValue())); + jobInfo.setStatus(Enums.EWorkStatus.SUBMITTED.getValue()); + } else if (Enums.ERoleCode.SafetyOfficer.getName().equals(UserContext.getRoleCode()) + || Enums.ERoleCode.QualityOfficer.getName().equals(UserContext.getRoleCode()) + || project.getConstructTeamLeaderId().equals(UserContext.getUserInfo().getUserId())) { + workList.forEach(item -> item.setStatus(Enums.EWorkStatus.DRAFT.getValue())); + jobInfo.setStatus(Enums.EWorkStatus.DRAFT.getValue()); + } + updateBatchById(workList); + turbineService.updateStatus(jobInfo.getCrewId()); + jobService.updateById(jobInfo); + } + + @Override + public List listByJobId(JobInWorkReq dto) { + return lambdaQuery().eq(JobInWork::getJobId, dto.getJobId()).list(); + } +} diff --git a/core/src/main/java/com/dite/znpt/service/job/impl/JobOutWorkServiceImpl.java b/core/src/main/java/com/dite/znpt/service/job/impl/JobOutWorkServiceImpl.java new file mode 100644 index 0000000..652a2e9 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/job/impl/JobOutWorkServiceImpl.java @@ -0,0 +1,294 @@ +package com.dite.znpt.service.job.impl; + +import java.util.ArrayList; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.lang.Dict; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.context.UserContext; +import com.dite.znpt.domain.QueryWrapperBuilder; +import com.dite.znpt.domain.dto.OutWorkDefectDTO; +import com.dite.znpt.domain.entity.PartEntity; +import com.dite.znpt.domain.entity.ProjectEntity; +import com.dite.znpt.domain.entity.job.DefectDTO; +import com.dite.znpt.domain.entity.job.JobInfo; +import com.dite.znpt.domain.entity.job.JobOutWork; +import com.dite.znpt.domain.vo.OutWorkDefectReq; +import com.dite.znpt.domain.vo.job.req.JobInfoReq; +import com.dite.znpt.domain.vo.job.req.JobOutWorkReq; +import com.dite.znpt.enums.DefectSourceEnum; +import com.dite.znpt.enums.Enums; +import com.dite.znpt.enums.PartTypeEnum; +import com.dite.znpt.enums.RepairStatusEnum; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.JobOutWorkMapper; +import com.dite.znpt.service.*; +import com.dite.znpt.service.job.JobOutWorkService; +import com.dite.znpt.service.job.JobService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Service +@Transactional(rollbackFor = Exception.class) +public class JobOutWorkServiceImpl extends ServiceImpl implements JobOutWorkService { + @Autowired + private TurbineService turbineService; + @Autowired + private PartService partService; + @Autowired + private JobService jobService; + @Autowired + private ProjectService projectService; + @Autowired + private DefectService defectService; + + /** + * 旧版系统是直接使用在部件表中使用工作id关联,新版:外部工作:使用部件编码关联,若无则写入第一个部件,内部工作(暂时沿用gaea_job_in_work_parts表):使用叶片编码关联,若无,写入第一个叶片 + * + * @param entity + * @return + */ + @Override + public JobOutWork saveInfo(JobOutWork entity) { + if (StrUtil.isNotBlank(entity.getId())) { + JobOutWork oldEntity = this.getById(entity.getId()); + if (!"0".equals(oldEntity.getStatus())) { + throw new ServiceException("内容已提交,不可修改"); + } + } + saveOrUpdate(entity); + + JobInfo jobInfo = jobService.getById(entity.getJobId()); + turbineService.updateStatus(jobInfo.getCrewId()); +// 施工人员提交后更新该工作类型状态及提交时间 + if (entity.getStatus().equals(Enums.EWorkStatus.SUBMITTED.getValue())) { + jobInfo.setStatus(Enums.EWorkStatus.SUBMITTED.getValue()); + jobInfo.setSubmitTime(new Date()); + jobService.updateById(jobInfo); + } + return entity; + } + + /** + * 功能描述:保存缺陷 + * + * @param jobInfo + * @param defectDTOList 实体 + * @param outWorkId outWorkId + * @param workType 无人机飞行 + * @return + * @author cuizhibin + * @date 2025/04/30 16:37 + */ + private List generateDefectList(JobInfo jobInfo, List defectDTOList, String outWorkId, Enums.EOutWorkType workType) { + List list = new ArrayList<>(); + if (CollUtil.isNotEmpty(defectDTOList)) { + return list; + } + List partList = partService.lambdaQuery() + .eq(PartEntity::getTurbineId, jobInfo.getCrewId()) + .in(PartEntity::getPartCode, defectDTOList.stream().map(OutWorkDefectDTO::getCode).toList()) + .list(); + Map partMap = partList.stream().collect(Collectors.toMap(PartEntity::getPartCode, Function.identity())); + Map turbinePartMap = partList.stream().filter(part -> part.getPartType().equals(PartTypeEnum.VANE_1.getCode())) + .collect(Collectors.toMap(PartEntity::getTurbineId, Function.identity(), (v1, v2) -> v1)); + List newPartList = new ArrayList<>(); + for (OutWorkDefectDTO dto : defectDTOList) { + if (dto.getStatus() != 1) { + continue; + } + PartEntity partEntity = partMap.get(dto.getCode()); +// 若部件不存在,还需要创建部件或查询第一个部件,此处只有叶片的 + if (Objects.isNull(partEntity)) { +// 取第一个部件,若不存在则创建 + partEntity = turbinePartMap.get(jobInfo.getCrewId()); + if (Objects.isNull(partEntity)) { + partEntity = new PartEntity(); + partEntity.setTurbineId(jobInfo.getCrewId()); + partEntity.setPartId(IdUtil.simpleUUID()); + partEntity.setPartName("叶片"); + partEntity.setPartCode(dto.getCode()); + partEntity.setPartType(PartTypeEnum.VANE_1.getCode()); + partEntity.setPartDesc("外部工作自动生成"); + partMap.put(partEntity.getPartCode(), partEntity); + newPartList.add(partEntity); + turbinePartMap.put(jobInfo.getCrewId(), partEntity); + } + } + for (DefectDTO defectDTO : dto.getDefectList()) { + OutWorkDefectReq defectReq = new OutWorkDefectReq(); + defectReq.setDescription(defectDTO.getContent()); + defectReq.setDefectType(defectDTO.getDefectTypeCode()); + defectReq.setDefectLevel(defectDTO.getCriticalityLevelCode()); + if (StrUtil.isNotBlank(defectDTO.getDefectLocation1())) { +// 1叶根或2叶尖 + Dict dict = Dict.of("1", "叶根", "2", "叶尖"); + defectReq.setDefectPosition(StrUtil.format("距{} {}米", dict.getStr(defectDTO.getDefectLocation1()), defectDTO.getDefectLocation1Size())); + } else { +// 1前缘、2后缘、3 PS面、4 SS面 + Dict dict = Dict.of("1", "前缘", "2", "后缘", "3", "PS面", "4", "SS面"); + defectReq.setDefectPosition(dict.getStr(defectDTO.getDefectLocation2())); + + defectReq.setAxial(Integer.valueOf(defectDTO.getDefectSize())); + defectReq.setChordwise(Integer.valueOf(defectDTO.getDefectSize2())); + } + defectReq.setPartId(partEntity.getPartId()); + defectReq.setImagePath(defectDTO.getFlawUrlList().get(0)); + defectReq.setRepairStatus(RepairStatusEnum.UNKNOWN.getCode()); + defectReq.setSource(DefectSourceEnum.OUT_WORK.getCode()); + list.add(defectReq); + } + } + + if (CollUtil.isNotEmpty(newPartList)) { + partService.saveBatch(newPartList); + } + return list; + } + + @Override + public JobOutWork getByJobId(JobOutWorkReq dto) { + List list = lambdaQuery().eq(JobOutWork::getJobId, dto.getJobId()).list(); + if (CollUtil.isEmpty(list)) { + return new JobOutWork(); + } + return list.get(0); + } + + /** + * 功能描述:列表查询 + * + * @param request 请求 + * @return {@link List }<{@link JobOutWork }> + * @author cuizhibin + * @date 2023/11/02 13:28 + **/ + public List list(JobInfoReq request) { + List jobList = jobService.list(QueryWrapperBuilder.build(request)); + if (!jobList.isEmpty()) { + List statusList = ListUtil.of("1", "2", "3"); + if (!Enums.ERoleCode.Builder.getName().equals(UserContext.getRoleCode())) { + statusList = ListUtil.of("2", "3"); + } + List jobIds = jobList.stream().map(JobInfo::getId).collect(Collectors.toList()); + Map jobId2Job = jobList.stream().collect(Collectors.toMap(JobInfo::getId, i -> i)); + List workList = lambdaQuery().in(JobOutWork::getStatus, statusList).in(JobOutWork::getJobId, jobList.stream().map(JobInfo::getId).collect(Collectors.toList())).list(); + workList.forEach(work -> { + JobInfo job = jobId2Job.get(work.getJobId()); + work.setConstructionPersonnel(job.getConstructionPersonnel()); + work.setJobCode(job.getJobCode()); + }); + return workList; + } + return new ArrayList<>(); + } + + /** + * 功能描述:组长提交/项目经理审批 + * + * @param request 请求 + * @author cuizhibin + * @date 2023/11/06 10:32 + **/ + public void submit(JobInfoReq request) { + request.setWorkType(Enums.EWorkType.OutWork.getValue()); + List jobList = jobService.list(QueryWrapperBuilder.build(request)); + if (jobList.isEmpty()) { + throw new ServiceException("未找到数据"); + } +// 这里只会有一条数据 + JobInfo jobInfo = jobList.get(0); + ProjectEntity project = projectService.getById(jobInfo.getProjectId()); + List workList = lambdaQuery().in(JobOutWork::getJobId, jobList.stream().map(JobInfo::getId).collect(Collectors.toList())).list(); +// 如果是项目经理 + if (Enums.ERoleCode.ProjectManager.getName().equals(UserContext.getRoleCode())) { + if (StrUtil.isNotBlank(project.getAuditorId())) { + Optional any = workList.stream().filter(item -> !Objects.equals(item.getSafetyOfficerStatus(), Enums.EAuthStatus.APPROVAL.getVal())).findAny(); + if (any.isPresent()) { + throw new ServiceException("安全员未审核"); + } + } + if (StrUtil.isNotBlank(project.getQualityOfficerId())) { + Optional any = workList.stream().filter(item -> !Objects.equals(item.getQualityOfficerStatus(), Enums.EAuthStatus.APPROVAL.getVal())).findAny(); + if (any.isPresent()) { + throw new ServiceException("质量员未审核"); + } + } + workList.forEach(item -> item.setStatus(Enums.EWorkStatus.MANAGER_APPROVAL.getValue())); + jobInfo.setStatus(Enums.EWorkStatus.MANAGER_APPROVAL.getValue()); + +// 项目经理审批后入缺陷库 + List defectReqList = new ArrayList<>(); + for (JobOutWork work : workList) { +// 飞手部件列表 + if (CollUtil.isNotEmpty(work.getDroneFlyerPartsList())) { + defectReqList.addAll(generateDefectList(jobInfo, work.getDroneFlyerPartsList(), work.getId(), Enums.EOutWorkType.DRONE_FLYER)); + } +// 飞助部件列表 + if (CollUtil.isNotEmpty(work.getFlyAidPartsList())) { + defectReqList.addAll(generateDefectList(jobInfo, work.getFlyAidPartsList(), work.getId(), Enums.EOutWorkType.FLYAID)); + } +// 登高部件列表 + if (CollUtil.isNotEmpty(work.getAscendingPartsList())) { + defectReqList.addAll(generateDefectList(jobInfo, work.getAscendingPartsList(), work.getId(), Enums.EOutWorkType.ASCEND_HEIGHT)); + } + } + if (CollUtil.isNotEmpty(defectReqList)) { + defectService.saveOutWorkDefect(defectReqList); + } + } else if (Enums.ERoleCode.SafetyOfficer.getName().equals(UserContext.getRoleCode())) { + workList.forEach(item -> item.setSafetyOfficerStatus(Enums.EAuthStatus.APPROVAL.getVal())); + jobInfo.setSafetyOfficerStatus(Enums.EAuthStatus.APPROVAL.getVal()); + } else if (Enums.ERoleCode.QualityOfficer.getName().equals(UserContext.getRoleCode())) { + workList.forEach(item -> item.setQualityOfficerStatus(Enums.EAuthStatus.APPROVAL.getVal())); + jobInfo.setQualityOfficerStatus(Enums.EAuthStatus.APPROVAL.getVal()); + } else if (project.getConstructTeamLeaderId().equals(UserContext.getUserInfo().getUserId())) { + workList.forEach(item -> item.setStatus(Enums.EWorkStatus.LEADER_SUBMITTED.getValue())); + jobInfo.setStatus(Enums.EWorkStatus.LEADER_SUBMITTED.getValue()); + } + saveOrUpdateBatch(workList); + turbineService.updateStatus(jobInfo.getCrewId()); + jobService.save(jobInfo); + } + + /** + * 功能描述:组长驳回/项目经理驳回 + * + * @param request 请求 + * @author cuizhibin + * @date 2023/11/06 10:32 + **/ + public void reject(JobInfoReq request) { + request.setWorkType(Enums.EWorkType.OutWork.getValue()); + List jobList = jobService.list(QueryWrapperBuilder.build(request)); + if (jobList.isEmpty()) { + throw new ServiceException("未找到数据"); + } +// 这里只会有一条数据 + JobInfo jobInfo = jobList.get(0); + ProjectEntity project = projectService.getById(jobInfo.getProjectId()); + List workList = lambdaQuery().in(JobOutWork::getJobId, jobList.stream().map(JobInfo::getId).collect(Collectors.toList())).list(); +// 如果是项目经理 + if (Enums.ERoleCode.ProjectManager.getName().equals(UserContext.getRoleCode())) { + workList.forEach(item -> item.setStatus(Enums.EWorkStatus.SUBMITTED.getValue())); + jobInfo.setStatus(Enums.EWorkStatus.SUBMITTED.getValue()); + } else if (Enums.ERoleCode.SafetyOfficer.getName().equals(UserContext.getRoleCode()) + || Enums.ERoleCode.QualityOfficer.getName().equals(UserContext.getRoleCode()) + || project.getConstructTeamLeaderId().equals(UserContext.getUserInfo().getUserId())) { + workList.forEach(item -> item.setStatus(Enums.EWorkStatus.DRAFT.getValue())); + jobInfo.setStatus(Enums.EWorkStatus.DRAFT.getValue()); + } + saveOrUpdateBatch(workList); + turbineService.updateStatus(jobInfo.getCrewId()); + jobService.save(jobInfo); + } + +} diff --git a/core/src/main/java/com/dite/znpt/service/job/impl/JobServiceImpl.java b/core/src/main/java/com/dite/znpt/service/job/impl/JobServiceImpl.java new file mode 100644 index 0000000..fdb19c9 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/job/impl/JobServiceImpl.java @@ -0,0 +1,31 @@ +package com.dite.znpt.service.job.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.domain.entity.job.JobInfo; +import com.dite.znpt.domain.vo.job.req.JobInfoReq; +import com.dite.znpt.domain.vo.job.resp.TurbineStatusResp; +import com.dite.znpt.mapper.JobInfoMapper; +import com.dite.znpt.service.job.JobService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Service +@Transactional(rollbackFor = Exception.class) +public class JobServiceImpl extends ServiceImpl implements JobService { + @Override + public List page(JobInfoReq req) { + return lambdaQuery() + .eq(StrUtil.isNotEmpty(req.getJobCode()), JobInfo::getJobCode, req.getJobCode()) + .eq(StrUtil.isNotEmpty(req.getProjectId()), JobInfo::getProjectId, req.getProjectId()) + .eq(StrUtil.isNotEmpty(req.getCrewId()), JobInfo::getCrewId, req.getCrewId()) + .eq(StrUtil.isNotEmpty(req.getConstructionPersonnelId()), JobInfo::getConstructionPersonnelId, req.getConstructionPersonnelId()) + .list(); + } + + public List calCrewStatus(List crewIds) { + return baseMapper.calCrewStatus(crewIds); + } +} diff --git a/core/src/main/java/com/dite/znpt/service/job/impl/JobSummaryWorkServiceImpl.java b/core/src/main/java/com/dite/znpt/service/job/impl/JobSummaryWorkServiceImpl.java new file mode 100644 index 0000000..2ba436e --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/job/impl/JobSummaryWorkServiceImpl.java @@ -0,0 +1,149 @@ +package com.dite.znpt.service.job.impl; + +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.context.UserContext; +import com.dite.znpt.domain.QueryWrapperBuilder; +import com.dite.znpt.domain.entity.ProjectEntity; +import com.dite.znpt.domain.entity.job.*; +import com.dite.znpt.domain.entity.job.JobSummaryWork; +import com.dite.znpt.domain.vo.job.req.JobInfoReq; +import com.dite.znpt.domain.vo.job.req.JobSummaryWorkReq; +import com.dite.znpt.enums.Enums; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.JobSummaryWorkMapper; +import com.dite.znpt.service.ProjectService; +import com.dite.znpt.service.TurbineService; +import com.dite.znpt.service.job.JobService; +import com.dite.znpt.service.job.JobSummaryWorkService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.stream.Collectors; + +@Service +@Transactional(rollbackFor = Exception.class) +public class JobSummaryWorkServiceImpl extends ServiceImpl implements JobSummaryWorkService { + @Autowired + private TurbineService turbineService; + @Autowired + private JobService jobService; + @Autowired + private ProjectService projectService; + + @Override + public JobSummaryWork saveInfo(JobSummaryWork entity) { + if (StrUtil.isNotBlank(entity.getId())) { + JobSummaryWork oldEntity = this.getById(entity.getId()); + if (!"0".equals(oldEntity.getStatus())) { + throw new ServiceException("内容已提交,不可修改"); + } + } + saveOrUpdate(entity); + JobInfo jobInfo = jobService.getById(entity.getJobId()); + turbineService.updateStatus(jobInfo.getCrewId()); +// 施工人员提交后更新该工作类型状态及提交时间 + if (entity.getStatus().equals(Enums.EWorkStatus.SUBMITTED.getValue())) { + jobInfo.setStatus(Enums.EWorkStatus.SUBMITTED.getValue()); + jobInfo.setSubmitTime(new Date()); + jobService.updateById(jobInfo); + } + return entity; + } + + /** + * 功能描述:列表查询 + * + * @param request 请求 + * @return {@link List }<{@link JobSummaryWork }> + * @author cuizhibin + * @date 2023/11/02 13:28 + **/ + public List list(JobInfoReq request) { + List jobList = jobService.list(QueryWrapperBuilder.build(request)); + if (!jobList.isEmpty()) { + List statusList = ListUtil.of("1", "2", "3"); + if (!Enums.ERoleCode.Builder.getName().equals(UserContext.getRoleCode())) { + statusList = ListUtil.of("2", "3"); + } + List jobIds = jobList.stream().map(JobInfo::getId).collect(Collectors.toList()); + Map jobId2Job = jobList.stream().collect(Collectors.toMap(JobInfo::getId, i -> i)); + List workList = lambdaQuery().in(JobSummaryWork::getStatus, statusList).in(JobSummaryWork::getJobId, jobIds).list(); + workList.forEach(work -> { + JobInfo job = jobId2Job.get(work.getJobId()); + work.setConstructionPersonnel(job.getConstructionPersonnel()); + work.setJobCode(job.getJobCode()); + }); + return workList; + } + return new ArrayList<>(); + } + + /** + * 功能描述:组长提交/项目经理审批 + * + * @param request 请求 + * @author cuizhibin + * @date 2023/11/06 10:32 + **/ + public void submit(JobInfoReq request) { + request.setWorkType(Enums.EWorkType.SummaryWork.getValue()); + List jobList = jobService.list(QueryWrapperBuilder.build(request)); + if (jobList.isEmpty()) { + throw new ServiceException("未找到数据"); + } +// 这里只会有一条数据 + JobInfo jobInfo = jobList.get(0); + ProjectEntity project = projectService.getById(jobInfo.getProjectId()); + List workList = lambdaQuery().in(JobSummaryWork::getJobId, jobList.stream().map(JobInfo::getId).collect(Collectors.toList())).list(); +// 如果是项目经理 + if (Enums.ERoleCode.ProjectManager.getName().equals(UserContext.getRoleCode())) { + workList.forEach(item -> item.setStatus(Enums.EWorkStatus.MANAGER_APPROVAL.getValue())); + jobInfo.setStatus(Enums.EWorkStatus.MANAGER_APPROVAL.getValue()); + } else if (project.getConstructTeamLeaderId().equals(UserContext.getUserInfo().getUserId())) { + workList.forEach(item -> item.setStatus(Enums.EWorkStatus.LEADER_SUBMITTED.getValue())); + jobInfo.setStatus(Enums.EWorkStatus.LEADER_SUBMITTED.getValue()); + } + saveOrUpdateBatch(workList); + turbineService.updateStatus(jobInfo.getCrewId()); + jobService.save(jobInfo); + } + + /** + * 功能描述:组长驳回/项目经理驳回 + * + * @param request 请求 + * @author cuizhibin + * @date 2023/11/06 10:32 + **/ + public void reject(JobInfoReq request) { + request.setWorkType(Enums.EWorkType.SummaryWork.getValue()); + List jobList = jobService.list(QueryWrapperBuilder.build(request)); + if (jobList.isEmpty()) { + throw new ServiceException("未找到数据"); + } +// 这里只会有一条数据 + JobInfo jobInfo = jobList.get(0); + ProjectEntity project = projectService.getById(jobInfo.getProjectId()); + List workList = lambdaQuery().in(JobSummaryWork::getJobId, jobList.stream().map(JobInfo::getId).collect(Collectors.toList())).list(); +// 如果是项目经理 + if (Enums.ERoleCode.ProjectManager.getName().equals(UserContext.getRoleCode())) { + workList.forEach(item -> item.setStatus(Enums.EWorkStatus.SUBMITTED.getValue())); + jobInfo.setStatus(Enums.EWorkStatus.SUBMITTED.getValue()); + } else if (project.getConstructTeamLeaderId().equals(UserContext.getUserInfo().getUserId())) { + workList.forEach(item -> item.setStatus(Enums.EWorkStatus.DRAFT.getValue())); + jobInfo.setStatus(Enums.EWorkStatus.DRAFT.getValue()); + } + saveOrUpdateBatch(workList); + turbineService.updateStatus(jobInfo.getCrewId()); + jobService.save(jobInfo); + } + + @Override + public List listByJobId(JobSummaryWorkReq dto) { + return lambdaQuery().eq(JobSummaryWork::getJobId, dto.getJobId()).list(); + } +} diff --git a/core/src/main/java/com/dite/znpt/typehandle/ArrayObjectTypeHandler.java b/core/src/main/java/com/dite/znpt/typehandle/ArrayObjectTypeHandler.java new file mode 100644 index 0000000..ab00228 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/typehandle/ArrayObjectTypeHandler.java @@ -0,0 +1,37 @@ +package com.dite.znpt.typehandle; + +import com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; + +import java.io.IOException; +import java.util.List; + + +public abstract class ArrayObjectTypeHandler extends AbstractJsonTypeHandler> { + + public ArrayObjectTypeHandler(Class type) { + super(type); + } + + protected abstract TypeReference> typeReference(); + + @Override + public List parse(String json) { + try { + return JacksonTypeHandler.getObjectMapper().readValue(json, typeReference()); + } catch (IOException var3) { + throw new RuntimeException(var3); + } + } + + @Override + public String toJson(List obj) { + try { + return JacksonTypeHandler.getObjectMapper().writeValueAsString(obj); + } catch (JsonProcessingException var3) { + throw new RuntimeException(var3); + } + } +} diff --git a/core/src/main/java/com/dite/znpt/typehandle/OutworkDefectHandler.java b/core/src/main/java/com/dite/znpt/typehandle/OutworkDefectHandler.java new file mode 100644 index 0000000..bad42a8 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/typehandle/OutworkDefectHandler.java @@ -0,0 +1,19 @@ +package com.dite.znpt.typehandle; + + +import com.dite.znpt.domain.dto.OutWorkDefectDTO; +import com.fasterxml.jackson.core.type.TypeReference; + +import java.util.List; + + +public class OutworkDefectHandler extends ArrayObjectTypeHandler { + public OutworkDefectHandler(Class type) { + super(type); + } + + @Override + protected TypeReference> typeReference() { + return new TypeReference<>() {}; + } +} diff --git a/core/src/main/java/com/dite/znpt/util/EXIFUtil.java b/core/src/main/java/com/dite/znpt/util/EXIFUtil.java new file mode 100644 index 0000000..cefab10 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/util/EXIFUtil.java @@ -0,0 +1,68 @@ +package com.dite.znpt.util; + +import cn.hutool.json.JSONObject; +import com.drew.imaging.ImageMetadataReader; +import com.drew.metadata.Directory; +import com.drew.metadata.Metadata; +import com.drew.metadata.Tag; + +import java.io.File; + +/** + * @author Bear.G + * @date 2025/4/24/周四 14:10 + * @description + */ +public class EXIFUtil { + + public static void main(String[] args) throws Exception { + File file = new File("C:\\Users\\Administrator\\Desktop\\水杯.jpg"); + printImageTags(file); + } + /** + * 读取照片里面的信息 + */ + public static JSONObject printImageTags(File file) throws Exception { + Metadata metadata = ImageMetadataReader.readMetadata(file); + JSONObject jsonObject = new JSONObject(); + String lat = ""; + String log = ""; + for (Directory directory : metadata.getDirectories()) { + for (Tag tag : directory.getTags()) { + // 标签名 + String tagName = tag.getTagName(); + // 标签信息 + String desc = tag.getDescription(); + System.out.println(tagName + "=" + desc); + switch (tagName) { + // 经度 + case "GPS Longitude": + lat = pointToLatlong(desc); + jsonObject.put(tagName, lat); + break; + // 纬度 + case "GPS Latitude": + log = pointToLatlong(desc); + jsonObject.put(tagName, log); + break; + default: + jsonObject.put(tagName, desc); + break; + } + } + } + return jsonObject; + } + + /*** + * 经纬度坐标格式转换(* °转十进制格式) + * @param point + */ + public static String pointToLatlong(String point) { + Double du = Double.parseDouble(point.substring(0, point.indexOf("°")).trim()); + Double fen = Double.parseDouble(point.substring(point.indexOf("°") + 1, point.indexOf("'")).trim()); + Double miao = Double.parseDouble(point.substring(point.indexOf("'") + 1, point.indexOf("\"")).trim()); + Double duStr = du + fen / 60 + miao / 60 / 60; + return duStr.toString(); + } +} diff --git a/core/src/main/java/com/dite/znpt/util/ModelUtil.java b/core/src/main/java/com/dite/znpt/util/ModelUtil.java new file mode 100644 index 0000000..caec663 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/util/ModelUtil.java @@ -0,0 +1,74 @@ +package com.dite.znpt.util; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; + +public class ModelUtil { + + public static void xywh2xyxy(float[] bbox) { + float x = bbox[0]; + float y = bbox[1]; + float w = bbox[2]; + float h = bbox[3]; + + bbox[0] = x - w * 0.5f; + bbox[1] = y - h * 0.5f; + bbox[2] = x + w * 0.5f; + bbox[3] = y + h * 0.5f; + } + + public static float[][] transposeMatrix(float[][] m) { + float[][] temp = new float[m[0].length][m.length]; + for (int i = 0; i < m.length; i++) + for (int j = 0; j < m[0].length; j++) + temp[j][i] = m[i][j]; + return temp; + } + + //返回最大值的索引 + public static int argmax(float[] a) { + float re = -Float.MAX_VALUE; + int arg = -1; + for (int i = 0; i < a.length; i++) { + if (a[i] >= re) { + re = a[i]; + arg = i; + } + } + return arg; + } + + public static List nonMaxSuppression(List bboxes, float iouThreshold) { + + List bestBboxes = new ArrayList<>(); + + bboxes.sort(Comparator.comparing(a -> a[4])); + + while (!bboxes.isEmpty()) { + float[] bestBbox = bboxes.remove(bboxes.size() - 1); + bestBboxes.add(bestBbox); + bboxes = bboxes.stream().filter(a -> computeIOU(a, bestBbox) < iouThreshold).collect(Collectors.toList()); + } + + return bestBboxes; + } + + public static float computeIOU(float[] box1, float[] box2) { + + float area1 = (box1[2] - box1[0]) * (box1[3] - box1[1]); + float area2 = (box2[2] - box2[0]) * (box2[3] - box2[1]); + + float left = Math.max(box1[0], box2[0]); + float top = Math.max(box1[1], box2[1]); + float right = Math.min(box1[2], box2[2]); + float bottom = Math.min(box1[3], box2[3]); + + float interArea = Math.max(right - left, 0) * Math.max(bottom - top, 0); + float unionArea = area1 + area2 - interArea; + return Math.max(interArea / unionArea, 1e-8f); + + } + +} diff --git a/core/src/main/java/com/dite/znpt/util/PageUtil.java b/core/src/main/java/com/dite/znpt/util/PageUtil.java new file mode 100644 index 0000000..5654106 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/util/PageUtil.java @@ -0,0 +1,25 @@ +package com.dite.znpt.util; + +import com.dite.znpt.domain.page.PageDomain; +import com.dite.znpt.domain.page.TableSupport; +import com.github.pagehelper.PageHelper; + +/** + * @author cuizhibin + */ +public class PageUtil extends PageHelper { + + public static void startPage() { + PageDomain pageDomain = TableSupport.buildPageRequest(); + Integer pageNum = pageDomain.getPageNum(); + Integer pageSize = pageDomain.getPageSize(); + String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy()); + Boolean reasonable = pageDomain.getReasonable(); + PageHelper.startPage(pageNum, pageSize, orderBy).setReasonable(reasonable); + } + + public static void clearPage() { + PageHelper.clearPage(); + } + +} diff --git a/core/src/main/java/com/dite/znpt/util/PasswordUtil.java b/core/src/main/java/com/dite/znpt/util/PasswordUtil.java new file mode 100644 index 0000000..2f02366 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/util/PasswordUtil.java @@ -0,0 +1,54 @@ +package com.dite.znpt.util; + +import java.security.SecureRandom; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Random; + +public class PasswordUtil { + + // 字符集定义 + private static final String UPPER_CASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + private static final String LOWER_CASE = "abcdefghijklmnopqrstuvwxyz"; + private static final String SPECIAL_CHARACTERS = "!@#$%^&*()-_=+[]{}|;:'\",.<>/?"; + private static final String DIGITS = "0123456789"; + + // 安全随机数生成器 + private static final Random RANDOM = new SecureRandom(); + + /** + * 生成随机密码 + * @return 符合要求的随机密码 + */ + public static String generatePassword() { + // 确保密码包含至少一个大写字母、一个小写字母和一个特殊字符 + List passwordChars = new ArrayList<>(); + + // 1. 添加至少一个大写字母 + passwordChars.add(UPPER_CASE.charAt(RANDOM.nextInt(UPPER_CASE.length()))); + + // 2. 添加至少一个小写字母 + passwordChars.add(LOWER_CASE.charAt(RANDOM.nextInt(LOWER_CASE.length()))); + + // 3. 添加至少一个特殊字符 + passwordChars.add(SPECIAL_CHARACTERS.charAt(RANDOM.nextInt(SPECIAL_CHARACTERS.length()))); + + // 4. 生成剩余字符(8位密码已添加3位,还需5位) + String allChars = UPPER_CASE + LOWER_CASE + SPECIAL_CHARACTERS + DIGITS; + for (int i = 0; i < 5; i++) { + passwordChars.add(allChars.charAt(RANDOM.nextInt(allChars.length()))); + } + + // 5. 打乱字符顺序 + Collections.shuffle(passwordChars, RANDOM); + + // 6. 转换为字符串 + StringBuilder password = new StringBuilder(); + for (Character c : passwordChars) { + password.append(c); + } + + return password.toString(); + } +} diff --git a/core/src/main/java/com/dite/znpt/util/SqlUtil.java b/core/src/main/java/com/dite/znpt/util/SqlUtil.java new file mode 100644 index 0000000..52f4c4f --- /dev/null +++ b/core/src/main/java/com/dite/znpt/util/SqlUtil.java @@ -0,0 +1,36 @@ +package com.dite.znpt.util; + +import cn.hutool.core.exceptions.UtilException; +import org.apache.commons.lang3.StringUtils; + +public class SqlUtil { + public static String SQL_REGEX = "select |insert |delete |update |drop |count |exec |chr |mid |master |truncate |char |and |declare "; + public static String SQL_PATTERN = "[a-zA-Z0-9_ ,.]+"; + + public static String escapeOrderBySql(String value) { + if (StringUtils.isNotEmpty(value) && !isValidOrderBySql(value)) { + throw new UtilException("参数不符合规范,不能进行查询"); + } else { + return value; + } + } + + public static boolean isValidOrderBySql(String value) { + return value.matches(SQL_PATTERN); + } + + public static void filterKeyword(String value) { + if (!StringUtils.isEmpty(value)) { + String[] sqlKeywords = StringUtils.split(SQL_REGEX, "\\|"); + int var3 = sqlKeywords.length; + + for(int var4 = 0; var4 < var3; ++var4) { + String sqlKeyword = sqlKeywords[var4]; + if (StringUtils.indexOfIgnoreCase(value, sqlKeyword) > -1) { + throw new UtilException("参数存在SQL注入风险"); + } + } + + } + } +} diff --git a/core/src/main/java/com/dite/znpt/util/ValidationGroup.java b/core/src/main/java/com/dite/znpt/util/ValidationGroup.java new file mode 100644 index 0000000..ea4d3b5 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/util/ValidationGroup.java @@ -0,0 +1,13 @@ +package com.dite.znpt.util; + +/** + * @author Bear.G + * @date 2025/5/19/周一 15:09 + * @description + */ + +public interface ValidationGroup { + interface Insert {} // 增 + interface Update {} // 改 + interface Request {} // 其他类型 +} diff --git a/core/src/main/resources/mapper/AudioFileInfoMapper.xml b/core/src/main/resources/mapper/AudioFileInfoMapper.xml new file mode 100644 index 0000000..6542146 --- /dev/null +++ b/core/src/main/resources/mapper/AudioFileInfoMapper.xml @@ -0,0 +1,30 @@ + + + + + + a.audio_id, a.image_id, a.file_path, a.update_by, + a.create_time, a.create_by, a.update_time + + + + + diff --git a/core/src/main/resources/mapper/CertificationMapper.xml b/core/src/main/resources/mapper/CertificationMapper.xml new file mode 100644 index 0000000..bf41920 --- /dev/null +++ b/core/src/main/resources/mapper/CertificationMapper.xml @@ -0,0 +1,21 @@ + + + + + + \ No newline at end of file diff --git a/core/src/main/resources/mapper/ContractMapper.xml b/core/src/main/resources/mapper/ContractMapper.xml new file mode 100644 index 0000000..dfd83ad --- /dev/null +++ b/core/src/main/resources/mapper/ContractMapper.xml @@ -0,0 +1,74 @@ + + + + + + a.contract_id, a.customer, a.code, a.project_id, + a.salesperson_id, a.department_id, a.sign_date, a.duration, + a.type, a.product_service, a.payment_date, a.payment_address, + a.amount, a.account_number, a.notes, a.contract_status, + a.create_time, a.create_by, a.update_time, a.update_by + + + + + diff --git a/core/src/main/resources/mapper/ContractSettlementMapper.xml b/core/src/main/resources/mapper/ContractSettlementMapper.xml new file mode 100644 index 0000000..f05f488 --- /dev/null +++ b/core/src/main/resources/mapper/ContractSettlementMapper.xml @@ -0,0 +1,69 @@ + + + + + + a.settlement_id, a.contract_id, a.customer, a.code, + a.project_id, a.salesperson_id, a.department_id, a.payment_period, + a.payment_date, a.duration, a.product_service, a.amount, + a.account_number, a.notes, a.settlement_status, a.create_time, + a.create_by, a.update_time, a.update_by + + + + + diff --git a/core/src/main/resources/mapper/DefectMapper.xml b/core/src/main/resources/mapper/DefectMapper.xml new file mode 100644 index 0000000..d79faf0 --- /dev/null +++ b/core/src/main/resources/mapper/DefectMapper.xml @@ -0,0 +1,36 @@ + + + + + + + + + diff --git a/core/src/main/resources/mapper/DeptMapper.xml b/core/src/main/resources/mapper/DeptMapper.xml new file mode 100644 index 0000000..0cfd625 --- /dev/null +++ b/core/src/main/resources/mapper/DeptMapper.xml @@ -0,0 +1,39 @@ + + + + + + + + + + \ No newline at end of file diff --git a/core/src/main/resources/mapper/DictMapper.xml b/core/src/main/resources/mapper/DictMapper.xml new file mode 100644 index 0000000..5c42977 --- /dev/null +++ b/core/src/main/resources/mapper/DictMapper.xml @@ -0,0 +1,37 @@ + + + + + + a.dict_id, a.dict_type, a.dict_name, a.parent_id, + a.sort_order, a.final_state, a.create_time, a.create_by, + a.update_time, a.update_by + + + + + diff --git a/core/src/main/resources/mapper/EquipmentMapper.xml b/core/src/main/resources/mapper/EquipmentMapper.xml new file mode 100644 index 0000000..37e7bbf --- /dev/null +++ b/core/src/main/resources/mapper/EquipmentMapper.xml @@ -0,0 +1,31 @@ + + + + + + \ No newline at end of file diff --git a/core/src/main/resources/mapper/EquipmentUseRecordMapper.xml b/core/src/main/resources/mapper/EquipmentUseRecordMapper.xml new file mode 100644 index 0000000..9b0652b --- /dev/null +++ b/core/src/main/resources/mapper/EquipmentUseRecordMapper.xml @@ -0,0 +1,34 @@ + + + + + + \ No newline at end of file diff --git a/core/src/main/resources/mapper/ImageCollectMapper.xml b/core/src/main/resources/mapper/ImageCollectMapper.xml new file mode 100644 index 0000000..8cc0c0d --- /dev/null +++ b/core/src/main/resources/mapper/ImageCollectMapper.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/core/src/main/resources/mapper/ImageMapper.xml b/core/src/main/resources/mapper/ImageMapper.xml new file mode 100644 index 0000000..2233431 --- /dev/null +++ b/core/src/main/resources/mapper/ImageMapper.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/src/main/resources/mapper/InspectionReportMapper.xml b/core/src/main/resources/mapper/InspectionReportMapper.xml new file mode 100644 index 0000000..a335c61 --- /dev/null +++ b/core/src/main/resources/mapper/InspectionReportMapper.xml @@ -0,0 +1,37 @@ + + + + + + \ No newline at end of file diff --git a/core/src/main/resources/mapper/JobInfoMapper.xml b/core/src/main/resources/mapper/JobInfoMapper.xml new file mode 100644 index 0000000..bd254c2 --- /dev/null +++ b/core/src/main/resources/mapper/JobInfoMapper.xml @@ -0,0 +1,99 @@ + + + + + + a.id, a.construction_personnel, a.construction_personnel_id, a.crew_id, + a.job_code, a.project_id, a.work_type, a.quality_officer_status, + a.safety_officer_status, a.status, a.submit_time, a.create_time, + a.create_by, a.update_time, a.update_by + + + + + diff --git a/core/src/main/resources/mapper/MaintainSuggestionMapper.xml b/core/src/main/resources/mapper/MaintainSuggestionMapper.xml new file mode 100644 index 0000000..597b5f8 --- /dev/null +++ b/core/src/main/resources/mapper/MaintainSuggestionMapper.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/core/src/main/resources/mapper/MenuMapper.xml b/core/src/main/resources/mapper/MenuMapper.xml new file mode 100644 index 0000000..2085e41 --- /dev/null +++ b/core/src/main/resources/mapper/MenuMapper.xml @@ -0,0 +1,39 @@ + + + + + + + + + \ No newline at end of file diff --git a/core/src/main/resources/mapper/ModelConfigMapper.xml b/core/src/main/resources/mapper/ModelConfigMapper.xml new file mode 100644 index 0000000..aac6032 --- /dev/null +++ b/core/src/main/resources/mapper/ModelConfigMapper.xml @@ -0,0 +1,34 @@ + + + + + + a.model_id, a.model_name, a.model_path, a.conf_threshold, + a.nms_threshold, a.update_by, a.create_time, a.create_by, + a.update_time + + + + + diff --git a/core/src/main/resources/mapper/PartMapper.xml b/core/src/main/resources/mapper/PartMapper.xml new file mode 100644 index 0000000..6625bc4 --- /dev/null +++ b/core/src/main/resources/mapper/PartMapper.xml @@ -0,0 +1,34 @@ + + + + + + + + diff --git a/core/src/main/resources/mapper/PostMapper.xml b/core/src/main/resources/mapper/PostMapper.xml new file mode 100644 index 0000000..1230755 --- /dev/null +++ b/core/src/main/resources/mapper/PostMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/core/src/main/resources/mapper/ProjectBudgetInfoMapper.xml b/core/src/main/resources/mapper/ProjectBudgetInfoMapper.xml new file mode 100644 index 0000000..ebb1f6b --- /dev/null +++ b/core/src/main/resources/mapper/ProjectBudgetInfoMapper.xml @@ -0,0 +1,49 @@ + + + + + + a.budget_id, a.project_id, a.budget_name, a.budget_type, + a.budget_amount, a.budget_desc, a.update_by, a.create_time, + a.create_by, a.update_time + + + + + + + diff --git a/core/src/main/resources/mapper/ProjectMapper.xml b/core/src/main/resources/mapper/ProjectMapper.xml new file mode 100644 index 0000000..25aabf1 --- /dev/null +++ b/core/src/main/resources/mapper/ProjectMapper.xml @@ -0,0 +1,56 @@ + + + + + + diff --git a/core/src/main/resources/mapper/ProjectTaskGroupMapper.xml b/core/src/main/resources/mapper/ProjectTaskGroupMapper.xml new file mode 100644 index 0000000..c18ba46 --- /dev/null +++ b/core/src/main/resources/mapper/ProjectTaskGroupMapper.xml @@ -0,0 +1,28 @@ + + + + + + a.group_id, a.group_name, a.update_by, a.create_time, + a.create_by, a.update_time + + + + + diff --git a/core/src/main/resources/mapper/ProjectTaskMapper.xml b/core/src/main/resources/mapper/ProjectTaskMapper.xml new file mode 100644 index 0000000..1a79c17 --- /dev/null +++ b/core/src/main/resources/mapper/ProjectTaskMapper.xml @@ -0,0 +1,84 @@ + + + + + + a.task_id, a.task_group_id, a.task_name, a.task_code, + a.main_user_id, a.user_ids, a.plan_start_date, a.plan_end_date, + a.actual_start_date, a.actual_end_date, a.status, a.overdue_status, + a.update_by, a.create_time, a.create_by, a.update_time + + + + + + + diff --git a/core/src/main/resources/mapper/RoleMapper.xml b/core/src/main/resources/mapper/RoleMapper.xml new file mode 100644 index 0000000..01a753e --- /dev/null +++ b/core/src/main/resources/mapper/RoleMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/core/src/main/resources/mapper/RoleMenuMapper.xml b/core/src/main/resources/mapper/RoleMenuMapper.xml new file mode 100644 index 0000000..de52249 --- /dev/null +++ b/core/src/main/resources/mapper/RoleMenuMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/core/src/main/resources/mapper/TConstructionMapper.xml b/core/src/main/resources/mapper/TConstructionMapper.xml new file mode 100644 index 0000000..a70371f --- /dev/null +++ b/core/src/main/resources/mapper/TConstructionMapper.xml @@ -0,0 +1,55 @@ + + + + + + a.construction_id, a.project_id, a.turbine_id, a.start_time, + a.end_time, a.temperature, a.wind_speed, a.image_count, + a.weather_code, a.status_id, a.created_at + + + + + diff --git a/core/src/main/resources/mapper/TurbineMapper.xml b/core/src/main/resources/mapper/TurbineMapper.xml new file mode 100644 index 0000000..5d9c927 --- /dev/null +++ b/core/src/main/resources/mapper/TurbineMapper.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/src/main/resources/mapper/UserMapper.xml b/core/src/main/resources/mapper/UserMapper.xml new file mode 100644 index 0000000..d61f50d --- /dev/null +++ b/core/src/main/resources/mapper/UserMapper.xml @@ -0,0 +1,45 @@ + + + + + + a.user_id, a.name, a.role_type, a.company_id, + a.password, a.status + + + + + diff --git a/core/src/main/resources/mapper/UserPostMapper.xml b/core/src/main/resources/mapper/UserPostMapper.xml new file mode 100644 index 0000000..71fd551 --- /dev/null +++ b/core/src/main/resources/mapper/UserPostMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/core/src/main/resources/mapper/UserRoleMapper.xml b/core/src/main/resources/mapper/UserRoleMapper.xml new file mode 100644 index 0000000..6cec1d3 --- /dev/null +++ b/core/src/main/resources/mapper/UserRoleMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/core/src/main/resources/mapper/VideoFileInfoMapper.xml b/core/src/main/resources/mapper/VideoFileInfoMapper.xml new file mode 100644 index 0000000..a87b0ed --- /dev/null +++ b/core/src/main/resources/mapper/VideoFileInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + a.id, a.part_id, a.test_point, a.worker_user_id, + a.shooting_time, a.location, a.qualified, a.frame_capture, + a.file_path, a.update_by, a.create_time, a.create_by, + a.update_time + + + + + diff --git a/core/src/main/resources/mapper/WeatherTypeMapper.xml b/core/src/main/resources/mapper/WeatherTypeMapper.xml new file mode 100644 index 0000000..5524109 --- /dev/null +++ b/core/src/main/resources/mapper/WeatherTypeMapper.xml @@ -0,0 +1,29 @@ + + + + + + a.weather_code, a.chinese_name, a.impact_factor + + + + + diff --git a/core/src/main/resources/mapper/WorkShiftMapper.xml b/core/src/main/resources/mapper/WorkShiftMapper.xml new file mode 100644 index 0000000..57ed61a --- /dev/null +++ b/core/src/main/resources/mapper/WorkShiftMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/flowable/.mvn/wrapper/maven-wrapper.properties b/flowable/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..2f94e61 --- /dev/null +++ b/flowable/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,19 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +wrapperVersion=3.3.2 +distributionType=only-script +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.10/apache-maven-3.9.10-bin.zip diff --git a/flowable/pom.xml b/flowable/pom.xml new file mode 100644 index 0000000..edd8467 --- /dev/null +++ b/flowable/pom.xml @@ -0,0 +1,67 @@ + + + 4.0.0 + + com.dite.znpt + parent + 1.0.0-SNAPSHOT + + + flowable + 1.0.0-SNAPSHOT + + + + com.dite.znpt + core + 1.0.0-SNAPSHOT + + + + + com.fasterxml.jackson.core + jackson-databind + + + + + com.alibaba.fastjson2 + fastjson2 + 2.0.53 + + + org.flowable + flowable-spring-boot-starter + 6.8.0 + + + + org.flowable + flowable-spring-security + + + + + + + com.googlecode.aviator + aviator + 5.3.3 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + 17 + 17 + + + + + + diff --git a/flowable/src/main/java/com/dite/znpt/flowable/common/constant/ProcessConstants.java b/flowable/src/main/java/com/dite/znpt/flowable/common/constant/ProcessConstants.java new file mode 100644 index 0000000..987da6a --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/common/constant/ProcessConstants.java @@ -0,0 +1,80 @@ +package com.dite.znpt.flowable.common.constant; + +/** + * 流程常量信息 + * + * @author Tony + * @date 2021/4/17 22:46 + */ +public class ProcessConstants { + + /** + * 动态数据 + */ + public static final String DYNAMIC = "dynamic"; + + /** + * 固定任务接收 + */ + public static final String FIXED = "fixed"; + + /** + * 单个审批人 + */ + public static final String ASSIGNEE = "assignee"; + + + /** + * 候选人 + */ + public static final String CANDIDATE_USERS = "candidateUsers"; + + + /** + * 审批组 + */ + public static final String CANDIDATE_GROUPS = "candidateGroups"; + + /** + * 单个审批人 + */ + public static final String PROCESS_APPROVAL = "approval"; + + /** + * 会签人员 + */ + public static final String PROCESS_MULTI_INSTANCE_USER = "userList"; + + /** + * nameapace + */ + public static final String NAMASPASE = "http://flowable.org/bpmn"; + + /** + * 会签节点 + */ + public static final String PROCESS_MULTI_INSTANCE = "multiInstance"; + + /** + * 自定义属性 dataType + */ + public static final String PROCESS_CUSTOM_DATA_TYPE = "dataType"; + + /** + * 自定义属性 userType + */ + public static final String PROCESS_CUSTOM_USER_TYPE = "userType"; + + /** + * 初始化人员 + */ + public static final String PROCESS_INITIATOR = "INITIATOR"; + + + /** + * 流程跳过 + */ + public static final String FLOWABLE_SKIP_EXPRESSION_ENABLED = "_FLOWABLE_SKIP_EXPRESSION_ENABLED"; + + +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/common/enums/FlowComment.java b/flowable/src/main/java/com/dite/znpt/flowable/common/enums/FlowComment.java new file mode 100644 index 0000000..225b865 --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/common/enums/FlowComment.java @@ -0,0 +1,43 @@ +package com.dite.znpt.flowable.common.enums; + +/** + * 流程意见类型 + * + * @author Tony + * @date 2021/4/19 + */ +public enum FlowComment { + + /** + * 说明 + */ + NORMAL("1", "正常意见"), + REBACK("2", "退回意见"), + REJECT("3", "驳回意见"), + DELEGATE("4", "委派意见"), + ASSIGN("5", "转办意见"), + STOP("6", "终止流程"); + + /** + * 类型 + */ + private final String type; + + /** + * 说明 + */ + private final String remark; + + FlowComment(String type, String remark) { + this.type = type; + this.remark = remark; + } + + public String getType() { + return type; + } + + public String getRemark() { + return remark; + } +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/common/expand/el/BaseEl.java b/flowable/src/main/java/com/dite/znpt/flowable/common/expand/el/BaseEl.java new file mode 100644 index 0000000..df934f2 --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/common/expand/el/BaseEl.java @@ -0,0 +1,12 @@ +package com.dite.znpt.flowable.common.expand.el; + +/** + * 扩展表达式 + * + * @author Tony + * @date 2023-03-04 09:10 + */ +public interface BaseEl { + +} + diff --git a/flowable/src/main/java/com/dite/znpt/flowable/common/expand/el/FlowEl.java b/flowable/src/main/java/com/dite/znpt/flowable/common/expand/el/FlowEl.java new file mode 100644 index 0000000..a4f8e46 --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/common/expand/el/FlowEl.java @@ -0,0 +1,26 @@ +package com.dite.znpt.flowable.common.expand.el; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 扩展表达式 + * + * @author Tony + * @date 2023-03-04 12:10 + */ +@Component +@Slf4j +public class FlowEl implements BaseEl { + + public String findDeptLeader(String name){ + log.info("开始查询表达式变量值,getName"); + return name; + } + + public String getName(String name){ + log.info("开始查询表达式变量值,getName"); + return name; + } +} + diff --git a/flowable/src/main/java/com/dite/znpt/flowable/config/FlowableConfig.java b/flowable/src/main/java/com/dite/znpt/flowable/config/FlowableConfig.java new file mode 100644 index 0000000..a8988fc --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/config/FlowableConfig.java @@ -0,0 +1,23 @@ +package com.dite.znpt.flowable.config; + +import org.flowable.engine.impl.db.DbIdGenerator; +import org.flowable.spring.SpringProcessEngineConfiguration; +import org.flowable.spring.boot.EngineConfigurationConfigurer; +import org.springframework.context.annotation.Configuration; + +/** + * 扩展流程配置 + * @author Tony + * @date 2022-12-26 10:24 + */ +@Configuration +public class FlowableConfig implements EngineConfigurationConfigurer { + @Override + public void configure(SpringProcessEngineConfiguration engineConfiguration) { + engineConfiguration.setActivityFontName("宋体"); + engineConfiguration.setLabelFontName("宋体"); + engineConfiguration.setAnnotationFontName("宋体"); + engineConfiguration.setIdGenerator(new DbIdGenerator()); + } + +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/config/MyDefaultProcessDiagramCanvas.java b/flowable/src/main/java/com/dite/znpt/flowable/config/MyDefaultProcessDiagramCanvas.java new file mode 100644 index 0000000..19496f4 --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/config/MyDefaultProcessDiagramCanvas.java @@ -0,0 +1,95 @@ +package com.dite.znpt.flowable.config;//package com.ruoyi.flowable.config; +// +//import com.sun.prism.paint.Color; +//import org.flowable.bpmn.model.AssociationDirection; +//import org.flowable.image.impl.DefaultProcessDiagramCanvas; +// +//import java.awt.*; +//import java.awt.geom.Line2D; +//import java.awt.geom.RoundRectangle2D; +// +///** +// * @author Tony +// * @date 2021-04-03 +// */ +//public class MyDefaultProcessDiagramCanvas extends DefaultProcessDiagramCanvas { +// //设置高亮线的颜色 这里我设置成绿色 +// protected static Color HIGHLIGHT_SEQUENCEFLOW_COLOR = Color.GREEN; +// +// public MyDefaultProcessDiagramCanvas(int width, int height, int minX, int minY, String imageType, String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader) { +// super(width, height, minX, minY, imageType, activityFontName, labelFontName, annotationFontName, customClassLoader); +// } +// +// public MyDefaultProcessDiagramCanvas(int width, int height, int minX, int minY, String imageType) { +// super(width, height, minX, minY, imageType); +// } +// +// +// /** +// * 画线颜色设置 +// */ +// @Override +// public void drawConnection(int[] xPoints, int[] yPoints, boolean conditional, boolean isDefault, String connectionType, +// AssociationDirection associationDirection, boolean highLighted, double scaleFactor) { +// +// Paint originalPaint = g.getPaint(); +// Stroke originalStroke = g.getStroke(); +// +// g.setPaint(CONNECTION_COLOR); +// if (connectionType.equals("association")) { +// g.setStroke(ASSOCIATION_STROKE); +// } else if (highLighted) { +// //设置线的颜色 +// g.setPaint(originalPaint); +// g.setStroke(HIGHLIGHT_FLOW_STROKE); +// } +// +// for (int i = 1; i < xPoints.length; i++) { +// Integer sourceX = xPoints[i - 1]; +// Integer sourceY = yPoints[i - 1]; +// Integer targetX = xPoints[i]; +// Integer targetY = yPoints[i]; +// Line2D.Double line = new Line2D.Double(sourceX, sourceY, targetX, targetY); +// g.draw(line); +// } +// +// if (isDefault) { +// Line2D.Double line = new Line2D.Double(xPoints[0], yPoints[0], xPoints[1], yPoints[1]); +// drawDefaultSequenceFlowIndicator(line, scaleFactor); +// } +// +// if (conditional) { +// Line2D.Double line = new Line2D.Double(xPoints[0], yPoints[0], xPoints[1], yPoints[1]); +// drawConditionalSequenceFlowIndicator(line, scaleFactor); +// } +// +// if (associationDirection == AssociationDirection.ONE || associationDirection == AssociationDirection.BOTH) { +// Line2D.Double line = new Line2D.Double(xPoints[xPoints.length - 2], yPoints[xPoints.length - 2], xPoints[xPoints.length - 1], yPoints[xPoints.length - 1]); +// drawArrowHead(line, scaleFactor); +// } +// if (associationDirection == AssociationDirection.BOTH) { +// Line2D.Double line = new Line2D.Double(xPoints[1], yPoints[1], xPoints[0], yPoints[0]); +// drawArrowHead(line, scaleFactor); +// } +// g.setPaint(originalPaint); +// g.setStroke(originalStroke); +// } +// +// /** +// * 高亮节点设置 +// */ +// @Override +// public void drawHighLight(int x, int y, int width, int height) { +// Paint originalPaint = g.getPaint(); +// Stroke originalStroke = g.getStroke(); +// //设置高亮节点的颜色 +// g.setPaint(HIGHLIGHT_COLOR); +// g.setStroke(THICK_TASK_BORDER_STROKE); +// +// RoundRectangle2D rect = new RoundRectangle2D.Double(x, y, width, height, 20, 20); +// g.draw(rect); +// +// g.setPaint(originalPaint); +// g.setStroke(originalStroke); +// } +//} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/controller/FlowDefinitionController.java b/flowable/src/main/java/com/dite/znpt/flowable/controller/FlowDefinitionController.java new file mode 100644 index 0000000..9235ad6 --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/controller/FlowDefinitionController.java @@ -0,0 +1,200 @@ +package com.dite.znpt.flowable.controller; + + +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.dto.FlowProcDefDto; +import com.dite.znpt.flowable.domain.entity.SysExpression; +import com.dite.znpt.domain.vo.RoleResp; +import com.dite.znpt.domain.vo.UserListReq; +import com.dite.znpt.domain.vo.UserListResp; +import com.dite.znpt.flowable.domain.dto.FlowSaveXmlVo; +import com.dite.znpt.flowable.service.IFlowDefinitionService; +import com.dite.znpt.flowable.service.ISysExpressionService; +import com.dite.znpt.service.RoleService; +import com.dite.znpt.service.UserService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.imageio.ImageIO; +import javax.servlet.http.HttpServletResponse; +import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.Map; + +/** + *

+ * 工作流程定义 + *

+ * + * @author Tony + * @date 2021-04-03 + */ +@Slf4j +@Api(tags = "流程定义") +@RestController +@RequestMapping("/flowable/definition") +public class FlowDefinitionController { + + @Resource + private IFlowDefinitionService flowDefinitionService; + @Resource + private UserService userService; + @Resource + private RoleService roleService; + + @Resource + private ISysExpressionService sysExpressionService; + + @GetMapping(value = "/list") + @ApiOperation(value = "流程定义列表", response = FlowProcDefDto.class) + public Result list(@ApiParam(value = "当前页码", required = true) @RequestParam Integer pageNum, + @ApiParam(value = "每页条数", required = true) @RequestParam Integer pageSize, + @ApiParam(value = "流程名称", required = false) @RequestParam(required = false) String name) { + return Result.ok(flowDefinitionService.list(name, pageNum, pageSize)); + } + + + @ApiOperation(value = "导入流程文件", notes = "上传bpmn20的xml文件") + @PostMapping("/import") + public Result importFile(@RequestParam(required = false) String name, + @RequestParam(required = false) String category, + MultipartFile file) { + InputStream in = null; + try { + in = file.getInputStream(); + flowDefinitionService.importFile(name, category, in); + } catch (Exception e) { + log.error("导入失败:", e); + return Result.ok(e.getMessage()); + } finally { + try { + if (in != null) { + in.close(); + } + } catch (IOException e) { + log.error("关闭输入流出错", e); + } + } + + return Result.ok("导入成功"); + } + + + @ApiOperation(value = "读取xml文件") + @GetMapping("/readXml/{deployId}") + public Result readXml(@ApiParam(value = "流程定义id") @PathVariable(value = "deployId") String deployId) { + try { + return flowDefinitionService.readXml(deployId); + } catch (Exception e) { + return Result.error("加载xml文件异常"); + } + + } + + @ApiOperation(value = "读取图片文件") + @GetMapping("/readImage/{deployId}") + public void readImage(@ApiParam(value = "流程定义id") @PathVariable(value = "deployId") String deployId, HttpServletResponse response) { + OutputStream os = null; + BufferedImage image = null; + try { + image = ImageIO.read(flowDefinitionService.readImage(deployId)); + response.setContentType("image/png"); + os = response.getOutputStream(); + if (image != null) { + ImageIO.write(image, "png", os); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (os != null) { + os.flush(); + os.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + } + + + @ApiOperation(value = "保存流程设计器内的xml文件") + @PostMapping("/save") + public Result save(@RequestBody FlowSaveXmlVo vo) { + InputStream in = null; + try { + in = new ByteArrayInputStream(vo.getXml().getBytes(StandardCharsets.UTF_8)); + flowDefinitionService.importFile(vo.getName(), vo.getCategory(), in); + } catch (Exception e) { + log.error("导入失败:", e); + return Result.error(e.getMessage()); + } finally { + try { + if (in != null) { + in.close(); + } + } catch (IOException e) { + log.error("关闭输入流出错", e); + } + } + + return Result.ok("导入成功"); + } + + @ApiOperation(value = "发起流程") + @PostMapping("/start/{procDefId}") + public Result start(@ApiParam(value = "流程定义id") @PathVariable(value = "procDefId") String procDefId, + @ApiParam(value = "变量集合,json对象") @RequestBody Map variables) { + return flowDefinitionService.startProcessInstanceById(procDefId, variables); + } + + @ApiOperation(value = "激活或挂起流程定义") + @PutMapping(value = "/updateState") + public Result updateState(@ApiParam(value = "1:激活,2:挂起", required = true) @RequestParam Integer state, + @ApiParam(value = "流程部署ID", required = true) @RequestParam String deployId) { + flowDefinitionService.updateState(state, deployId); + return Result.ok(); + } + + @ApiOperation(value = "删除流程") + @DeleteMapping(value = "/{deployIds}") + public Result delete(@PathVariable String[] deployIds) { + for (String deployId : deployIds) { + flowDefinitionService.delete(deployId); + } + return Result.ok(); + } + + @ApiOperation(value = "指定流程办理人员列表") + @GetMapping("/userList") + public Result userList(UserListReq req) { + List list = userService.list(req); + return Result.ok(list); + } + + @ApiOperation(value = "指定流程办理组列表") + @GetMapping("/roleList") + public Result roleList(String roleName) { + List list = roleService.list(roleName); + return Result.ok(list); + } + + @ApiOperation(value = "指定流程达式列表") + @GetMapping("/expList") + public Result expList(SysExpression sysExpression) { + List list = sysExpressionService.selectSysExpressionList(sysExpression); + return Result.ok(list); + } + +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/controller/FlowInstanceController.java b/flowable/src/main/java/com/dite/znpt/flowable/controller/FlowInstanceController.java new file mode 100644 index 0000000..19411b6 --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/controller/FlowInstanceController.java @@ -0,0 +1,62 @@ +package com.dite.znpt.flowable.controller; + +import com.dite.znpt.domain.Result; +import com.dite.znpt.flowable.domain.vo.FlowTaskVo; +import com.dite.znpt.flowable.service.IFlowInstanceService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + *

工作流流程实例管理

+ * + * @author Tony + * @date 2021-04-03 + */ +@Slf4j +@Api(tags = "工作流流程实例管理") +@RestController +@RequestMapping("/flowable/instance") +public class FlowInstanceController { + + @Autowired + private IFlowInstanceService flowInstanceService; + + @ApiOperation(value = "根据流程定义id启动流程实例") + @PostMapping("/startBy/{procDefId}") + public Result startById(@ApiParam(value = "流程定义id") @PathVariable(value = "procDefId") String procDefId, + @ApiParam(value = "变量集合,json对象") @RequestBody Map variables) { + return flowInstanceService.startProcessInstanceById(procDefId, variables); + + } + + @ApiOperation(value = "激活或挂起流程实例") + @PostMapping(value = "/updateState") + public Result updateState(@ApiParam(value = "1:激活,2:挂起", required = true) @RequestParam Integer state, + @ApiParam(value = "流程实例ID", required = true) @RequestParam String instanceId) { + flowInstanceService.updateState(state,instanceId); + return Result.ok(); + } + + @ApiOperation("结束流程实例") + @PostMapping(value = "/stopProcessInstance") + public Result stopProcessInstance(@RequestBody FlowTaskVo flowTaskVo) { + flowInstanceService.stopProcessInstance(flowTaskVo); + return Result.ok(); + } + + @ApiOperation(value = "删除流程实例") + @DeleteMapping(value = "/delete/{instanceIds}") + public Result delete(@ApiParam(value = "流程实例ID", required = true) @PathVariable String[] instanceIds, + @ApiParam(value = "删除原因") @RequestParam(required = false) String deleteReason) { + for (String instanceId : instanceIds) { + flowInstanceService.delete(instanceId,deleteReason); + } + return Result.ok(); + } +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/controller/FlowTaskController.java b/flowable/src/main/java/com/dite/znpt/flowable/controller/FlowTaskController.java new file mode 100644 index 0000000..f313b43 --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/controller/FlowTaskController.java @@ -0,0 +1,267 @@ +package com.dite.znpt.flowable.controller; + +import com.dite.znpt.domain.Result; +import com.dite.znpt.flowable.domain.dto.FlowTaskDto; +import com.dite.znpt.flowable.domain.vo.FlowQueryVo; +import com.dite.znpt.flowable.domain.vo.FlowTaskVo; +import com.dite.znpt.flowable.service.IFlowTaskService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.imageio.ImageIO; +import javax.servlet.http.HttpServletResponse; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +/** + *

工作流任务管理

+ * + * @author Tony + * @date 2021-04-03 + */ +@Slf4j +@Api(tags = "工作流流程任务管理") +@RestController +@RequestMapping("/flowable/task") +public class FlowTaskController { + + @Autowired + private IFlowTaskService flowTaskService; + + @ApiOperation(value = "我发起的流程", response = FlowTaskDto.class) + @GetMapping(value = "/myProcess") + public Result myProcess(FlowQueryVo queryVo) { + return flowTaskService.myProcess(queryVo); + } + + @ApiOperation(value = "取消申请", response = FlowTaskDto.class) + @PostMapping(value = "/stopProcess") + public Result stopProcess(@RequestBody FlowTaskVo flowTaskVo) { + return flowTaskService.stopProcess(flowTaskVo); + } + + @ApiOperation(value = "撤回流程", response = FlowTaskDto.class) + @PostMapping(value = "/revokeProcess") + public Result revokeProcess(@RequestBody FlowTaskVo flowTaskVo) { + return flowTaskService.revokeProcess(flowTaskVo); + } + + @ApiOperation(value = "获取待办列表", response = FlowTaskDto.class) + @GetMapping(value = "/todoList") + public Result todoList(FlowQueryVo queryVo) { + return flowTaskService.todoList(queryVo); + } + + @ApiOperation(value = "获取已办任务", response = FlowTaskDto.class) + @GetMapping(value = "/finishedList") + public Result finishedList(FlowQueryVo queryVo) { + return flowTaskService.finishedList(queryVo); + } + + + @ApiOperation(value = "流程历史流转记录", response = FlowTaskDto.class) + @GetMapping(value = "/flowRecord") + public Result flowRecord(String procInsId, String deployId) { + return flowTaskService.flowRecord(procInsId, deployId); + } + + @ApiOperation(value = "根据任务ID查询挂载的表单信息") + @GetMapping(value = "/getTaskForm") + public Result getTaskForm(String taskId) { + return flowTaskService.getTaskForm(taskId); + } + + + @ApiOperation(value = "流程初始化表单", response = FlowTaskDto.class) + @GetMapping(value = "/flowFormData") + public Result flowFormData(String deployId) { + return flowTaskService.flowFormData(deployId); + } + + @ApiOperation(value = "获取流程变量", response = FlowTaskDto.class) + @GetMapping(value = "/processVariables/{taskId}") + public Result processVariables(@ApiParam(value = "流程任务Id") @PathVariable(value = "taskId") String taskId) { + return flowTaskService.processVariables(taskId); + } + + @ApiOperation(value = "审批任务") + @PostMapping(value = "/complete") + public Result complete(@RequestBody FlowTaskVo flowTaskVo) { + return flowTaskService.complete(flowTaskVo); + } + + @PostMapping(value = "/reject") + public Result taskReject(@RequestBody FlowTaskVo flowTaskVo) { + flowTaskService.taskReject(flowTaskVo); + return Result.ok(); + } + + @ApiOperation(value = "退回任务") + @PostMapping(value = "/return") + public Result taskReturn(@RequestBody FlowTaskVo flowTaskVo) { + flowTaskService.taskReturn(flowTaskVo); + return Result.ok(); + } + + @ApiOperation(value = "获取所有可回退的节点") + @PostMapping(value = "/returnList") + public Result findReturnTaskList(@RequestBody FlowTaskVo flowTaskVo) { + return flowTaskService.findReturnTaskList(flowTaskVo); + } + + @ApiOperation(value = "删除任务") + @DeleteMapping(value = "/delete") + public Result delete(@RequestBody FlowTaskVo flowTaskVo) { + flowTaskService.deleteTask(flowTaskVo); + return Result.ok(); + } + + @ApiOperation(value = "认领/签收任务") + @PostMapping(value = "/claim") + public Result claim(@RequestBody FlowTaskVo flowTaskVo) { + flowTaskService.claim(flowTaskVo); + return Result.ok(); + } + + @ApiOperation(value = "取消认领/签收任务") + @PostMapping(value = "/unClaim") + public Result unClaim(@RequestBody FlowTaskVo flowTaskVo) { + flowTaskService.unClaim(flowTaskVo); + return Result.ok(); + } + + @ApiOperation(value = "委派任务") + @PostMapping(value = "/delegateTask") + public Result delegate(@RequestBody FlowTaskVo flowTaskVo) { + flowTaskService.delegateTask(flowTaskVo); + return Result.ok(); + } + + @ApiOperation(value = "任务归还") + @PostMapping(value = "/resolveTask") + public Result resolveTask(@RequestBody FlowTaskVo flowTaskVo) { + flowTaskService.resolveTask(flowTaskVo); + return Result.ok(); + } + + @ApiOperation(value = "转办任务") + @PostMapping(value = "/assignTask") + public Result assign(@RequestBody FlowTaskVo flowTaskVo) { + flowTaskService.assignTask(flowTaskVo); + return Result.ok(); + } + + @PostMapping(value = "/addMultiInstanceExecution") + @ApiOperation(value = "多实例加签") + public Result addMultiInstanceExecution(@RequestBody FlowTaskVo flowTaskVo) { + flowTaskService.addMultiInstanceExecution(flowTaskVo); + return Result.ok("加签成功"); + } + + @PostMapping(value = "/deleteMultiInstanceExecution") + @ApiOperation(value = "多实例减签") + public Result deleteMultiInstanceExecution(@RequestBody FlowTaskVo flowTaskVo) { + flowTaskService.deleteMultiInstanceExecution(flowTaskVo); + return Result.ok("减签成功"); + } + + @ApiOperation(value = "获取下一节点") + @PostMapping(value = "/nextFlowNode") + public Result getNextFlowNode(@RequestBody FlowTaskVo flowTaskVo) { + return flowTaskService.getNextFlowNode(flowTaskVo); + } + + @ApiOperation(value = "流程发起时获取下一节点") + @PostMapping(value = "/nextFlowNodeByStart") + public Result getNextFlowNodeByStart(@RequestBody FlowTaskVo flowTaskVo) { + return flowTaskService.getNextFlowNodeByStart(flowTaskVo); + } + + /** + * 生成流程图 + * + * @param processId 任务ID + */ + @GetMapping("/diagram/{processId}") + public void genProcessDiagram(HttpServletResponse response, + @PathVariable("processId") String processId) { + InputStream inputStream = flowTaskService.diagram(processId); + OutputStream os = null; + BufferedImage image = null; + try { + image = ImageIO.read(inputStream); + response.setContentType("image/png"); + os = response.getOutputStream(); + if (image != null) { + ImageIO.write(image, "png", os); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (os != null) { + os.flush(); + os.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + /** + * 获取流程执行节点 + * + * @param procInsId 流程实例编号 + * @param procInsId 任务执行编号 + */ + @GetMapping("/flowViewer/{procInsId}/{executionId}") + public Result getFlowViewer(@PathVariable("procInsId") String procInsId, + @PathVariable("executionId") String executionId) { + return flowTaskService.getFlowViewer(procInsId, executionId); + } + + /** + * 流程节点信息 + * + * @param procInsId 流程实例id + * @return + */ + @GetMapping("/flowXmlAndNode") + public Result flowXmlAndNode(@RequestParam(value = "procInsId", required = false) String procInsId, + @RequestParam(value = "deployId", required = false) String deployId) { + return flowTaskService.flowXmlAndNode(procInsId, deployId); + } + + /** + * 流程节点表单 + * + * @param taskId 流程任务编号 + * @return + */ + @GetMapping("/flowTaskForm") + public Result flowTaskForm(@RequestParam(value = "taskId", required = false) String taskId) throws Exception { + return flowTaskService.flowTaskForm(taskId); + } + + + /** + * 流程节点信息 + * + * @param procInsId 流程实例编号 + * @param elementId 流程节点编号 + * @return + */ + @GetMapping("/flowTaskInfo") + public Result flowTaskInfo(@RequestParam(value = "procInsId") String procInsId, + @RequestParam(value = "elementId") String elementId){ + return flowTaskService.flowTaskInfo(procInsId,elementId); + } + +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/controller/SysExpressionController.java b/flowable/src/main/java/com/dite/znpt/flowable/controller/SysExpressionController.java new file mode 100644 index 0000000..05b9b38 --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/controller/SysExpressionController.java @@ -0,0 +1,91 @@ +package com.dite.znpt.flowable.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; + +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.flowable.domain.entity.SysExpression; +import com.dite.znpt.flowable.service.ISysExpressionService; +import com.dite.znpt.util.PageUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 流程达式Controller + * + * @author ruoyi + * @date 2022-12-12 + */ +@RestController +@RequestMapping("/system/expression") +public class SysExpressionController +{ + @Autowired + private ISysExpressionService sysExpressionService; + + /** + * 查询流程达式列表 + */ + @GetMapping("/list") + public PageResult list(SysExpression sysExpression) + { + PageUtil.startPage(); + List list = sysExpressionService.selectSysExpressionList(sysExpression); + return PageResult.ok(list); + } + + /** + * 导出流程达式列表 + */ + @PostMapping("/export") + public void export(HttpServletResponse response, SysExpression sysExpression){ + //TODO +// List list = sysExpressionService.selectSysExpressionList(sysExpression); +// ExcelUtil util = new ExcelUtil(SysExpression.class); +// util.exportExcel(response, list, "流程达式数据"); + } + + /** + * 获取流程达式详细信息 + */ + @GetMapping(value = "/{id}") + public Result getInfo(@PathVariable("id") Long id) + { + return Result.ok(sysExpressionService.selectSysExpressionById(id)); + } + + /** + * 新增流程达式 + */ + @PostMapping + public Result add(@RequestBody SysExpression sysExpression) + { + return Result.ok(sysExpressionService.insertSysExpression(sysExpression)); + } + + /** + * 修改流程达式 + */ + @PutMapping + public Result edit(@RequestBody SysExpression sysExpression) + { + return Result.ok(sysExpressionService.updateSysExpression(sysExpression)); + } + + /** + * 删除流程达式 + */ + @DeleteMapping("/{ids}") + public Result remove(@PathVariable Long[] ids) + { + return Result.ok(sysExpressionService.deleteSysExpressionByIds(ids)); + } +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/controller/SysFormController.java b/flowable/src/main/java/com/dite/znpt/flowable/controller/SysFormController.java new file mode 100644 index 0000000..9a52ee4 --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/controller/SysFormController.java @@ -0,0 +1,104 @@ +package com.dite.znpt.flowable.controller; + +import java.util.List; + + +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.flowable.domain.entity.SysDeployForm; +import com.dite.znpt.flowable.domain.entity.SysForm; +import com.dite.znpt.flowable.service.ISysDeployFormService; +import com.dite.znpt.flowable.service.ISysFormService; +import com.dite.znpt.util.PageUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 流程表单Controller + * + * @author Tony + * @date 2021-04-03 + */ +@RestController +@RequestMapping("/flowable/form") +public class SysFormController { + @Autowired + private ISysFormService SysFormService; + + @Autowired + private ISysDeployFormService sysDeployFormService; + + /** + * 查询流程表单列表 + */ + @GetMapping("/list") + public PageResult list(SysForm sysForm) { + PageUtil.startPage(); + List list = SysFormService.selectSysFormList(sysForm); + return PageResult.ok(list); + } + + @GetMapping("/formList") + public Result formList(SysForm sysForm) { + List list = SysFormService.selectSysFormList(sysForm); + return Result.ok(list); + } + /** + * 导出流程表单列表 + */ + @GetMapping("/export") + public void export(SysForm sysForm) { + // TODO +// List list = SysFormService.selectSysFormList(sysForm); +// ExcelUtil util = new ExcelUtil(SysForm.class); +// util.exportExcel(list, "form"); + } + + /** + * 获取流程表单详细信息 + */ + @GetMapping(value = "/{formId}") + public Result getInfo(@PathVariable("formId") Long formId) { + return Result.ok(SysFormService.selectSysFormById(formId)); + } + + /** + * 新增流程表单 + */ + @PostMapping + public Result add(@RequestBody SysForm sysForm) { + return Result.ok(SysFormService.insertSysForm(sysForm)); + } + + /** + * 修改流程表单 + */ + @PutMapping + public Result edit(@RequestBody SysForm sysForm) { + return Result.ok(SysFormService.updateSysForm(sysForm)); + } + + /** + * 删除流程表单 + */ + @DeleteMapping("/{formIds}") + public Result remove(@PathVariable Long[] formIds) { + return Result.ok(SysFormService.deleteSysFormByIds(formIds)); + } + + + /** + * 挂载流程表单 + */ + @PostMapping("/addDeployForm") + public Result addDeployForm(@RequestBody SysDeployForm sysDeployForm) { + return Result.ok(sysDeployFormService.insertSysDeployForm(sysDeployForm)); + } +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/controller/SysListenerController.java b/flowable/src/main/java/com/dite/znpt/flowable/controller/SysListenerController.java new file mode 100644 index 0000000..35464be --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/controller/SysListenerController.java @@ -0,0 +1,92 @@ +package com.dite.znpt.flowable.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; + +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.flowable.domain.entity.SysListener; +import com.dite.znpt.flowable.service.ISysListenerService; +import com.dite.znpt.util.PageUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 流程监听Controller + * + * @author Tony + * @date 2022-12-25 + */ +@RestController +@RequestMapping("/system/listener") +public class SysListenerController +{ + @Autowired + private ISysListenerService sysListenerService; + + /** + * 查询流程监听列表 + */ + @GetMapping("/list") + public PageResult list(SysListener sysListener) + { + PageUtil.startPage(); + List list = sysListenerService.selectSysListenerList(sysListener); + return PageResult.ok(list); + } + + /** + * 导出流程监听列表 + */ + @PostMapping("/export") + public void export(HttpServletResponse response, SysListener sysListener) + { + //TODO +// List list = sysListenerService.selectSysListenerList(sysListener); +// ExcelUtil util = new ExcelUtil(SysListener.class); +// util.exportExcel(response, list, "流程监听数据"); + } + + /** + * 获取流程监听详细信息 + */ + @GetMapping(value = "/{id}") + public Result getInfo(@PathVariable("id") Long id) + { + return Result.ok(sysListenerService.selectSysListenerById(id)); + } + + /** + * 新增流程监听 + */ + @PostMapping + public Result add(@RequestBody SysListener sysListener) + { + return Result.ok(sysListenerService.insertSysListener(sysListener)); + } + + /** + * 修改流程监听 + */ + @PutMapping + public Result edit(@RequestBody SysListener sysListener) + { + return Result.ok(sysListenerService.updateSysListener(sysListener)); + } + + /** + * 删除流程监听 + */ + @DeleteMapping("/{ids}") + public Result remove(@PathVariable Long[] ids) + { + return Result.ok(sysListenerService.deleteSysListenerByIds(ids)); + } +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/domain/dto/FlowCommentDto.java b/flowable/src/main/java/com/dite/znpt/flowable/domain/dto/FlowCommentDto.java new file mode 100644 index 0000000..e138e49 --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/domain/dto/FlowCommentDto.java @@ -0,0 +1,25 @@ +package com.dite.znpt.flowable.domain.dto; + +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author Tony + * @date 2021/3/28 15:50 + */ +@Data +@Builder +public class FlowCommentDto implements Serializable { + + /** + * 意见类别 0 正常意见 1 退回意见 2 驳回意见 + */ + private String type; + + /** + * 意见内容 + */ + private String comment; +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/domain/dto/FlowFromFieldDTO.java b/flowable/src/main/java/com/dite/znpt/flowable/domain/dto/FlowFromFieldDTO.java new file mode 100644 index 0000000..cc0ba8c --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/domain/dto/FlowFromFieldDTO.java @@ -0,0 +1,15 @@ +package com.dite.znpt.flowable.domain.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author Tony + * @date 2021/3/31 23:20 + */ +@Data +public class FlowFromFieldDTO implements Serializable { + + private Object fields; +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/domain/dto/FlowNextDto.java b/flowable/src/main/java/com/dite/znpt/flowable/domain/dto/FlowNextDto.java new file mode 100644 index 0000000..6f184cc --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/domain/dto/FlowNextDto.java @@ -0,0 +1,30 @@ +package com.dite.znpt.flowable.domain.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 动态人员、组 + * @author Tony + * @date 2021/4/17 22:59 + */ +@Data +public class FlowNextDto implements Serializable { + + /** + * 审批人类型 + */ + private String type; + + /** + * 是否需要动态指定任务审批人 + */ + private String dataType; + + /** + * 流程变量 + */ + private String vars; + +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/domain/dto/FlowSaveXmlVo.java b/flowable/src/main/java/com/dite/znpt/flowable/domain/dto/FlowSaveXmlVo.java new file mode 100644 index 0000000..a5dfff2 --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/domain/dto/FlowSaveXmlVo.java @@ -0,0 +1,28 @@ +package com.dite.znpt.flowable.domain.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author Tony + * @date 2021/3/28 19:48 + */ +@Data +public class FlowSaveXmlVo implements Serializable { + + /** + * 流程名称 + */ + private String name; + + /** + * 流程分类 + */ + private String category; + + /** + * xml 文件 + */ + private String xml; +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/domain/dto/FlowTaskDto.java b/flowable/src/main/java/com/dite/znpt/flowable/domain/dto/FlowTaskDto.java new file mode 100644 index 0000000..da21000 --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/domain/dto/FlowTaskDto.java @@ -0,0 +1,102 @@ +package com.dite.znpt.flowable.domain.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

工作流任务

+ * + * @author Tony + * @date 2021-04-03 + */ +@Getter +@Setter +@ApiModel("工作流任务相关-返回参数") +public class FlowTaskDto implements Serializable { + + @ApiModelProperty("任务编号") + private String taskId; + + @ApiModelProperty("任务执行编号") + private String executionId; + + @ApiModelProperty("任务名称") + private String taskName; + + @ApiModelProperty("任务Key") + private String taskDefKey; + + @ApiModelProperty("任务执行人Id") + private String assigneeId; + + @ApiModelProperty("部门名称") + private String deptName; + + @ApiModelProperty("流程发起人部门名称") + private String startDeptName; + + @ApiModelProperty("任务执行人名称") + private String assigneeName; + @ApiModelProperty("任务执行人部门") + private String assigneeDeptName;; + + @ApiModelProperty("流程发起人Id") + private String startUserId; + + @ApiModelProperty("流程发起人名称") + private String startUserName; + + @ApiModelProperty("流程类型") + private String category; + + @ApiModelProperty("流程变量信息") + private Object variables; + + @ApiModelProperty("局部变量信息") + private Object taskLocalVars; + + @ApiModelProperty("流程部署编号") + private String deployId; + + @ApiModelProperty("流程ID") + private String procDefId; + + @ApiModelProperty("流程key") + private String procDefKey; + + @ApiModelProperty("流程定义名称") + private String procDefName; + + @ApiModelProperty("流程定义内置使用版本") + private int procDefVersion; + + @ApiModelProperty("流程实例ID") + private String procInsId; + + @ApiModelProperty("历史流程实例ID") + private String hisProcInsId; + + @ApiModelProperty("任务耗时") + private String duration; + + @ApiModelProperty("任务意见") + private FlowCommentDto comment; + + @ApiModelProperty("候选执行人") + private String candidate; + + @ApiModelProperty("任务创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + @ApiModelProperty("任务完成时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date finishTime; + +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/domain/dto/FlowViewerDto.java b/flowable/src/main/java/com/dite/znpt/flowable/domain/dto/FlowViewerDto.java new file mode 100644 index 0000000..9568799 --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/domain/dto/FlowViewerDto.java @@ -0,0 +1,23 @@ +package com.dite.znpt.flowable.domain.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author Tony + * @date 2021/4/21 20:55 + */ +@Data +public class FlowViewerDto implements Serializable { + + /** + * 流程key + */ + private String key; + + /** + * 是否完成(已经审批) + */ + private boolean completed; +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/domain/entity/SysDeployForm.java b/flowable/src/main/java/com/dite/znpt/flowable/domain/entity/SysDeployForm.java new file mode 100644 index 0000000..666ad64 --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/domain/entity/SysDeployForm.java @@ -0,0 +1,51 @@ +package com.dite.znpt.flowable.domain.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 流程实例关联表单对象 sys_instance_form + * + * @author Tony + * @date 2021-03-30 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sys_deploy_form") +@ApiModel(value="SysDeployForm对象", description="流程实例关联表单") +public class SysDeployForm implements Serializable { + + @Serial + private static final long serialVersionUID = 1229567797120051612L; + + @ApiModelProperty("主键") + @TableId(value = "id") + private Long id; + + @ApiModelProperty("表单主键") + @TableField("form_id") + private Long formId; + + @ApiModelProperty("流程定义主键") + @TableField("deploy_id") + private String deployId; + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("formId", getFormId()) + .append("deployId", getDeployId()) + .toString(); + } +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/domain/entity/SysExpression.java b/flowable/src/main/java/com/dite/znpt/flowable/domain/entity/SysExpression.java new file mode 100644 index 0000000..6747f42 --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/domain/entity/SysExpression.java @@ -0,0 +1,73 @@ +package com.dite.znpt.flowable.domain.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 流程达式对象 sys_expression + * + * @author ruoyi + * @date 2022-12-12 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sys_expression") +@ApiModel(value="SysExpression对象", description="流程表达式") +public class SysExpression extends AuditableEntity implements Serializable { + + @Serial + private static final long serialVersionUID = -6620158503098718552L; + /** 表单主键 */ + @TableId(value = "id") + private Long id; + + /** 表达式名称 */ + @ApiModelProperty(name = "表达式名称") + @TableField("name") + private String name; + + /** 表达式内容 */ + @ApiModelProperty(name = "表达式内容") + @TableField("expression") + private String expression; + /** 表达式类型 */ + @ApiModelProperty(name = "表达式类型") + @TableField("data_type") + private String dataType; + + /** 状态 */ + @ApiModelProperty(name = "状态") + @TableField("status") + private Integer status; + + @ApiModelProperty(name = "备注") + @TableField("remark") + private String remark; + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("name", getName()) + .append("expression", getExpression()) + .append("dataType", getDataType()) + .append("createTime", getCreateTime()) + .append("updateTime", getUpdateTime()) + .append("createBy", getCreateBy()) + .append("updateBy", getUpdateBy()) + .append("status", getStatus()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/domain/entity/SysForm.java b/flowable/src/main/java/com/dite/znpt/flowable/domain/entity/SysForm.java new file mode 100644 index 0000000..404cb1e --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/domain/entity/SysForm.java @@ -0,0 +1,63 @@ +package com.dite.znpt.flowable.domain.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 流程表单对象 sys_task_form + * + * @author Tony + * @date 2021-03-30 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sys_form") +@ApiModel(value="SysForm对象", description="流程表单") +public class SysForm extends AuditableEntity implements Serializable { + @Serial + private static final long serialVersionUID = 4305516082701611447L; + + /** 表单主键 */ + @TableId(value = "form_id") + @ApiModelProperty(name = "表单主键") + private Long formId; + + /** 表单名称 */ + @ApiModelProperty(name = "表单名称") + @TableField("form_name") + private String formName; + + /** 表单内容 */ + @ApiModelProperty(name = "表单内容") + @TableField("form_content") + private String formContent; + + @ApiModelProperty(name = "备注") + @TableField("remark") + private String remark; + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("formId", getFormId()) + .append("formName", getFormName()) + .append("formContent", getFormContent()) + .append("createTime", getCreateTime()) + .append("updateTime", getUpdateTime()) + .append("createBy", getCreateBy()) + .append("updateBy", getUpdateBy()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/domain/entity/SysListener.java b/flowable/src/main/java/com/dite/znpt/flowable/domain/entity/SysListener.java new file mode 100644 index 0000000..7ca2c52 --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/domain/entity/SysListener.java @@ -0,0 +1,87 @@ +package com.dite.znpt.flowable.domain.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 流程监听对象 sys_listener + * + * @author Tony + * @date 2022-12-25 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sys_listener") +@ApiModel(value="SysListener对象", description="流程监听") +public class SysListener extends AuditableEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 3933601576294703106L; + + /** 表单主键 */ + @ApiModelProperty(name = "表单主键") + @TableId(value = "id") + private Long id; + + /** 名称 */ + @ApiModelProperty(name = "名称") + @TableField("name") + private String name; + + /** 监听类型 */ + @TableField("type") + @ApiModelProperty(name = "监听类型") + private String type; + + /** 事件类型 */ + @ApiModelProperty(name = "事件类型") + @TableField("event_type") + private String eventType; + + /** 值类型 */ + @ApiModelProperty(name = "值类型") + @TableField("value_type") + private String valueType; + + /** 执行内容 */ + @ApiModelProperty(name = "执行内容") + @TableField("value") + private String value; + + /** 状态 */ + @ApiModelProperty(name = "状态") + @TableField("status") + private Integer status; + + @ApiModelProperty(name = "备注") + @TableField("remark") + private String remark; + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("name", getName()) + .append("type", getType()) + .append("eventType", getEventType()) + .append("valueType", getValueType()) + .append("value", getValue()) + .append("createTime", getCreateTime()) + .append("updateTime", getUpdateTime()) + .append("createBy", getCreateBy()) + .append("updateBy", getUpdateBy()) + .append("status", getStatus()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/domain/vo/FlowQueryVo.java b/flowable/src/main/java/com/dite/znpt/flowable/domain/vo/FlowQueryVo.java new file mode 100644 index 0000000..a0e8384 --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/domain/vo/FlowQueryVo.java @@ -0,0 +1,36 @@ +package com.dite.znpt.flowable.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +/** + *

流程任务

+ * + * @author Tony + * @date 2021-04-03 + */ +@Data +@ApiModel("工作流任务相关--请求参数") +public class FlowQueryVo { + + @ApiModelProperty("流程名称") + private String name; + + @ApiModelProperty("开始时间") + private String startTime; + + @ApiModelProperty("结束时间") + private String endTime; + + @ApiModelProperty("当前页码") + private Integer pageNum; + + @ApiModelProperty("每页条数") + private Integer pageSize; + + +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/domain/vo/FlowTaskVo.java b/flowable/src/main/java/com/dite/znpt/flowable/domain/vo/FlowTaskVo.java new file mode 100644 index 0000000..4579e8c --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/domain/vo/FlowTaskVo.java @@ -0,0 +1,56 @@ +package com.dite.znpt.flowable.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +/** + *

流程任务

+ * + * @author Tony + * @date 2021-04-03 + */ +@Data +@ApiModel("工作流任务相关--请求参数") +public class FlowTaskVo { + + @ApiModelProperty("任务Id") + private String taskId; + + @ApiModelProperty("用户Id") + private String userId; + + @ApiModelProperty("任务意见") + private String comment; + + @ApiModelProperty("流程实例Id") + private String instanceId; + + @ApiModelProperty("节点") + private String targetKey; + + private String deploymentId; + @ApiModelProperty("流程环节定义ID") + private String defId; + + @ApiModelProperty("子执行流ID") + private String currentChildExecutionId; + + @ApiModelProperty("子执行流是否已执行") + private Boolean flag; + + @ApiModelProperty("流程变量信息") + private Map variables; + + @ApiModelProperty("审批人") + private String assignee; + + @ApiModelProperty("候选人") + private List candidateUsers; + + @ApiModelProperty("审批组") + private List candidateGroups; +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/domain/vo/ReturnTaskNodeVo.java b/flowable/src/main/java/com/dite/znpt/flowable/domain/vo/ReturnTaskNodeVo.java new file mode 100644 index 0000000..645648e --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/domain/vo/ReturnTaskNodeVo.java @@ -0,0 +1,26 @@ +package com.dite.znpt.flowable.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +/** + *

可退回节点

+ * + * @author tony + * @date 2022-04-23 11:01:52 + */ +@Data +@ApiModel("可退回节点") +public class ReturnTaskNodeVo { + + @ApiModelProperty("任务Id") + private String id; + + @ApiModelProperty("用户Id") + private String name; + +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/factory/FlowServiceFactory.java b/flowable/src/main/java/com/dite/znpt/flowable/factory/FlowServiceFactory.java new file mode 100644 index 0000000..9ba5683 --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/factory/FlowServiceFactory.java @@ -0,0 +1,41 @@ +package com.dite.znpt.flowable.factory; + +import lombok.Getter; +import org.flowable.engine.*; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * flowable 引擎注入封装 + * @author Tony + * @date 2021-04-03 + */ +@Component +@Getter +public class FlowServiceFactory { + + @Resource + protected RepositoryService repositoryService; + + @Resource + protected RuntimeService runtimeService; + + @Resource + protected IdentityService identityService; + + @Resource + protected TaskService taskService; + + @Resource + protected HistoryService historyService; + + @Resource + protected ManagementService managementService; + + @Qualifier("processEngine") + @Resource + protected ProcessEngine processEngine; + +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/flow/CustomProcessDiagramCanvas.java b/flowable/src/main/java/com/dite/znpt/flowable/flow/CustomProcessDiagramCanvas.java new file mode 100644 index 0000000..8321d9f --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/flow/CustomProcessDiagramCanvas.java @@ -0,0 +1,370 @@ +package com.dite.znpt.flowable.flow; + +import org.flowable.bpmn.model.AssociationDirection; +import org.flowable.bpmn.model.GraphicInfo; +import org.flowable.image.impl.DefaultProcessDiagramCanvas; +import org.flowable.image.util.ReflectUtil; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.font.FontRenderContext; +import java.awt.font.LineBreakMeasurer; +import java.awt.font.TextAttribute; +import java.awt.font.TextLayout; +import java.awt.geom.Ellipse2D; +import java.awt.geom.Rectangle2D; +import java.awt.geom.RoundRectangle2D; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.text.AttributedCharacterIterator; +import java.text.AttributedString; + +/** + * @author Tony + * @date 2021/4/4 23:58 + */ +public class CustomProcessDiagramCanvas extends DefaultProcessDiagramCanvas { + //定义走过流程连线颜色为绿色 + protected static Color HIGHLIGHT_SequenceFlow_COLOR = Color.GREEN; + //设置未走过流程的连接线颜色 + protected static Color CONNECTION_COLOR = Color.BLACK; + //设置flows连接线字体颜色red + protected static Color LABEL_COLOR = new Color(0, 0, 0); + //高亮显示task框颜色 + protected static Color HIGHLIGHT_COLOR = Color.GREEN; + protected static Color HIGHLIGHT_COLOR1 = Color.RED; + + public CustomProcessDiagramCanvas(int width, int height, int minX, int minY, String imageType, String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader) { + super(width, height, minX, minY, imageType, activityFontName, labelFontName, annotationFontName, customClassLoader); + this.initialize(imageType); + } + + /** + * 重写绘制连线的方式,设置绘制颜色 + * @param xPoints + * @param yPoints + * @param conditional + * @param isDefault + * @param connectionType + * @param associationDirection + * @param highLighted + * @param scaleFactor + */ + @Override + public void drawConnection(int[] xPoints, int[] yPoints, boolean conditional, boolean isDefault, String connectionType, AssociationDirection associationDirection, boolean highLighted, double scaleFactor) { + Paint originalPaint = this.g.getPaint(); + Stroke originalStroke = this.g.getStroke(); + this.g.setPaint(CONNECTION_COLOR); + if (connectionType.equals("association")) { + this.g.setStroke(ASSOCIATION_STROKE); + } else if (highLighted) { + this.g.setPaint(HIGHLIGHT_SequenceFlow_COLOR); + this.g.setStroke(HIGHLIGHT_FLOW_STROKE); + } + + for (int i = 1; i < xPoints.length; ++i) { + Integer sourceX = xPoints[i - 1]; + Integer sourceY = yPoints[i - 1]; + Integer targetX = xPoints[i]; + Integer targetY = yPoints[i]; + java.awt.geom.Line2D.Double line = new java.awt.geom.Line2D.Double((double) sourceX, (double) sourceY, (double) targetX, (double) targetY); + this.g.draw(line); + } + + java.awt.geom.Line2D.Double line; + if (isDefault) { + line = new java.awt.geom.Line2D.Double((double) xPoints[0], (double) yPoints[0], (double) xPoints[1], (double) yPoints[1]); + this.drawDefaultSequenceFlowIndicator(line, scaleFactor); + } + + if (conditional) { + line = new java.awt.geom.Line2D.Double((double) xPoints[0], (double) yPoints[0], (double) xPoints[1], (double) yPoints[1]); + this.drawConditionalSequenceFlowIndicator(line, scaleFactor); + } + + if (associationDirection.equals(AssociationDirection.ONE) || associationDirection.equals(AssociationDirection.BOTH)) { + line = new java.awt.geom.Line2D.Double((double) xPoints[xPoints.length - 2], (double) yPoints[xPoints.length - 2], (double) xPoints[xPoints.length - 1], (double) yPoints[xPoints.length - 1]); + this.drawArrowHead(line, scaleFactor); + } + + if (associationDirection.equals(AssociationDirection.BOTH)) { + line = new java.awt.geom.Line2D.Double((double) xPoints[1], (double) yPoints[1], (double) xPoints[0], (double) yPoints[0]); + this.drawArrowHead(line, scaleFactor); + } + + this.g.setPaint(originalPaint); + this.g.setStroke(originalStroke); + } + + /** + * 设置字体大小图标颜色 + * @param imageType + */ + @Override + public void initialize(String imageType) { + if ("png".equalsIgnoreCase(imageType)) { + this.processDiagram = new BufferedImage(this.canvasWidth, this.canvasHeight, 2); + } else { + this.processDiagram = new BufferedImage(this.canvasWidth, this.canvasHeight, 1); + } + + this.g = this.processDiagram.createGraphics(); + if (!"png".equalsIgnoreCase(imageType)) { + this.g.setBackground(new Color(255, 255, 255, 0)); + this.g.clearRect(0, 0, this.canvasWidth, this.canvasHeight); + } + + this.g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + //修改图标颜色,修改图标字体大小 + this.g.setPaint(Color.black); + Font font = new Font(this.activityFontName, 10, 14); + this.g.setFont(font); + this.fontMetrics = this.g.getFontMetrics(); + //修改连接线字体大小 + LABEL_FONT = new Font(this.labelFontName, 10, 15); + ANNOTATION_FONT = new Font(this.annotationFontName, 0, 11); + + try { + USERTASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/userTask.png", this.customClassLoader)); + SCRIPTTASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/scriptTask.png", this.customClassLoader)); + SERVICETASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/serviceTask.png", this.customClassLoader)); + RECEIVETASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/receiveTask.png", this.customClassLoader)); + SENDTASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/sendTask.png", this.customClassLoader)); + MANUALTASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/manualTask.png", this.customClassLoader)); + BUSINESS_RULE_TASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/businessRuleTask.png", this.customClassLoader)); + SHELL_TASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/shellTask.png", this.customClassLoader)); + DMN_TASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/dmnTask.png", this.customClassLoader)); + CAMEL_TASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/camelTask.png", this.customClassLoader)); + MULE_TASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/muleTask.png", this.customClassLoader)); + HTTP_TASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/httpTask.png", this.customClassLoader)); + TIMER_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/timer.png", this.customClassLoader)); + COMPENSATE_THROW_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/compensate-throw.png", this.customClassLoader)); + COMPENSATE_CATCH_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/compensate.png", this.customClassLoader)); + ERROR_THROW_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/error-throw.png", this.customClassLoader)); + ERROR_CATCH_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/error.png", this.customClassLoader)); + MESSAGE_THROW_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/message-throw.png", this.customClassLoader)); + MESSAGE_CATCH_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/message.png", this.customClassLoader)); + SIGNAL_THROW_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/signal-throw.png", this.customClassLoader)); + SIGNAL_CATCH_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/signal.png", this.customClassLoader)); + } catch (IOException var4) { + LOGGER.warn("Could not load image for process diagram creation: {}", var4.getMessage()); + } + + } + + /** + * 设置连接线字体 + * @param text + * @param graphicInfo + * @param centered + */ + @Override + public void drawLabel(String text, GraphicInfo graphicInfo, boolean centered) { + float interline = 1.0f; + + // text + if (text != null && text.length() > 0) { + Paint originalPaint = g.getPaint(); + Font originalFont = g.getFont(); + + g.setPaint(LABEL_COLOR); + g.setFont(LABEL_FONT); + + int wrapWidth = 100; + int textY = (int) graphicInfo.getY(); + + // TODO: use drawMultilineText() + AttributedString as = new AttributedString(text); + as.addAttribute(TextAttribute.FOREGROUND, g.getPaint()); + as.addAttribute(TextAttribute.FONT, g.getFont()); + AttributedCharacterIterator aci = as.getIterator(); + FontRenderContext frc = new FontRenderContext(null, true, false); + LineBreakMeasurer lbm = new LineBreakMeasurer(aci, frc); + + while (lbm.getPosition() < text.length()) { + TextLayout tl = lbm.nextLayout(wrapWidth); + textY += tl.getAscent(); + + Rectangle2D bb = tl.getBounds(); + double tX = graphicInfo.getX(); + + if (centered) { + tX += (int) (graphicInfo.getWidth() / 2 - bb.getWidth() / 2); + } + tl.draw(g, (float) tX, textY); + textY += tl.getDescent() + tl.getLeading() + (interline - 1.0f) * tl.getAscent(); + } + + // restore originals + g.setFont(originalFont); + g.setPaint(originalPaint); + } + } + + /** + * 高亮显示task框完成的 + * @param x + * @param y + * @param width + * @param height + */ + @Override + public void drawHighLight(int x, int y, int width, int height) { + Paint originalPaint = g.getPaint(); + Stroke originalStroke = g.getStroke(); + + g.setPaint(HIGHLIGHT_COLOR); + g.setStroke(THICK_TASK_BORDER_STROKE); + + RoundRectangle2D rect = new RoundRectangle2D.Double(x, y, width, height, 20, 20); + g.draw(rect); + + g.setPaint(originalPaint); + g.setStroke(originalStroke); + } + + /** + * 自定义task框当前的位置 + * @param x + * @param y + * @param width + * @param height + */ + public void drawHighLightNow(int x, int y, int width, int height) { + Paint originalPaint = g.getPaint(); + Stroke originalStroke = g.getStroke(); + + g.setPaint(HIGHLIGHT_COLOR1); + g.setStroke(THICK_TASK_BORDER_STROKE); + + RoundRectangle2D rect = new RoundRectangle2D.Double(x, y, width, height, 20, 20); + g.draw(rect); + + g.setPaint(originalPaint); + g.setStroke(originalStroke); + } + + /** + * 自定义结束节点 + * @param x + * @param y + * @param width + * @param height + */ + public void drawHighLightEnd(int x, int y, int width, int height) { + Paint originalPaint = g.getPaint(); + Stroke originalStroke = g.getStroke(); + + g.setPaint(HIGHLIGHT_COLOR); + g.setStroke(THICK_TASK_BORDER_STROKE); + + RoundRectangle2D rect = new RoundRectangle2D.Double(x, y, width, height, 20, 20); + g.draw(rect); + + g.setPaint(originalPaint); + g.setStroke(originalStroke); + } + + /** + * task框自定义文字 + * @param name + * @param graphicInfo + * @param thickBorder + * @param scaleFactor + */ + @Override + protected void drawTask(String name, GraphicInfo graphicInfo, boolean thickBorder, double scaleFactor) { + + Paint originalPaint = g.getPaint(); + int x = (int) graphicInfo.getX(); + int y = (int) graphicInfo.getY(); + int width = (int) graphicInfo.getWidth(); + int height = (int) graphicInfo.getHeight(); + + // Create a new gradient paint for every task box, gradient depends on x and y and is not relative + g.setPaint(TASK_BOX_COLOR); + + int arcR = 6; + if (thickBorder) { + arcR = 3; + } + + // shape + RoundRectangle2D rect = new RoundRectangle2D.Double(x, y, width, height, arcR, arcR); + g.fill(rect); + g.setPaint(TASK_BORDER_COLOR); + + if (thickBorder) { + Stroke originalStroke = g.getStroke(); + g.setStroke(THICK_TASK_BORDER_STROKE); + g.draw(rect); + g.setStroke(originalStroke); + } else { + g.draw(rect); + } + + g.setPaint(originalPaint); + // text + if (scaleFactor == 1.0 && name != null && name.length() > 0) { + int boxWidth = width - (2 * TEXT_PADDING); + int boxHeight = height - 16 - ICON_PADDING - ICON_PADDING - MARKER_WIDTH - 2 - 2; + int boxX = x + width / 2 - boxWidth / 2; + int boxY = y + height / 2 - boxHeight / 2 + ICON_PADDING + ICON_PADDING - 2 - 2; + + drawMultilineCentredText(name, boxX, boxY, boxWidth, boxHeight); + } + } + + protected static Color EVENT_COLOR = new Color(255, 255, 255); + + /** + * 重写开始事件 + * @param graphicInfo + * @param image + * @param scaleFactor + */ + @Override + public void drawStartEvent(GraphicInfo graphicInfo, BufferedImage image, double scaleFactor) { + Paint originalPaint = g.getPaint(); + g.setPaint(EVENT_COLOR); + Ellipse2D circle = new Ellipse2D.Double(graphicInfo.getX(), graphicInfo.getY(), + graphicInfo.getWidth(), graphicInfo.getHeight()); + g.fill(circle); + g.setPaint(EVENT_BORDER_COLOR); + g.draw(circle); + g.setPaint(originalPaint); + if (image != null) { + // calculate coordinates to center image + int imageX = (int) Math.round(graphicInfo.getX() + (graphicInfo.getWidth() / 2) - (image.getWidth() / (2 * scaleFactor))); + int imageY = (int) Math.round(graphicInfo.getY() + (graphicInfo.getHeight() / 2) - (image.getHeight() / (2 * scaleFactor))); + g.drawImage(image, imageX, imageY, + (int) (image.getWidth() / scaleFactor), (int) (image.getHeight() / scaleFactor), null); + } + + } + + /** + * 重写结束事件 + * @param graphicInfo + * @param scaleFactor + */ + @Override + public void drawNoneEndEvent(GraphicInfo graphicInfo, double scaleFactor) { + Paint originalPaint = g.getPaint(); + Stroke originalStroke = g.getStroke(); + g.setPaint(EVENT_COLOR); + Ellipse2D circle = new Ellipse2D.Double(graphicInfo.getX(), graphicInfo.getY(), + graphicInfo.getWidth(), graphicInfo.getHeight()); + g.fill(circle); + g.setPaint(EVENT_BORDER_COLOR); +// g.setPaint(HIGHLIGHT_COLOR); + if (scaleFactor == 1.0) { + g.setStroke(END_EVENT_STROKE); + } else { + g.setStroke(new BasicStroke(2.0f)); + } + g.draw(circle); + g.setStroke(originalStroke); + g.setPaint(originalPaint); + } +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/flow/CustomProcessDiagramGenerator.java b/flowable/src/main/java/com/dite/znpt/flowable/flow/CustomProcessDiagramGenerator.java new file mode 100644 index 0000000..8844341 --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/flow/CustomProcessDiagramGenerator.java @@ -0,0 +1,404 @@ +package com.dite.znpt.flowable.flow; + + +import org.flowable.bpmn.model.Process; +import org.flowable.bpmn.model.*; +import org.flowable.image.impl.DefaultProcessDiagramCanvas; +import org.flowable.image.impl.DefaultProcessDiagramGenerator; + +import java.util.Iterator; +import java.util.List; + +/** + * @author Tony + * @date 2021/4/5 0:31 + */ +public class CustomProcessDiagramGenerator extends DefaultProcessDiagramGenerator { + @Override + protected DefaultProcessDiagramCanvas generateProcessDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, List highLightedFlows, String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader, double scaleFactor, boolean drawSequenceFlowNameWithNoLabelDI) { + this.prepareBpmnModel(bpmnModel); + DefaultProcessDiagramCanvas processDiagramCanvas = initProcessDiagramCanvas(bpmnModel, imageType, activityFontName, labelFontName, annotationFontName, customClassLoader); + Iterator var13 = bpmnModel.getPools().iterator(); + + while (var13.hasNext()) { + Pool process = (Pool) var13.next(); + GraphicInfo subProcesses = bpmnModel.getGraphicInfo(process.getId()); + processDiagramCanvas.drawPoolOrLane(process.getName(), subProcesses, scaleFactor); + } + + var13 = bpmnModel.getProcesses().iterator(); + + Process process1; + Iterator subProcesses1; + while (var13.hasNext()) { + process1 = (Process) var13.next(); + subProcesses1 = process1.getLanes().iterator(); + + while (subProcesses1.hasNext()) { + Lane artifact = (Lane) subProcesses1.next(); + GraphicInfo subProcess = bpmnModel.getGraphicInfo(artifact.getId()); + processDiagramCanvas.drawPoolOrLane(artifact.getName(), subProcess, scaleFactor); + } + } + + var13 = bpmnModel.getProcesses().iterator(); + + while (var13.hasNext()) { + process1 = (Process) var13.next(); + subProcesses1 = process1.findFlowElementsOfType(FlowNode.class).iterator(); + + while (subProcesses1.hasNext()) { + FlowNode artifact1 = (FlowNode) subProcesses1.next(); + if (!this.isPartOfCollapsedSubProcess(artifact1, bpmnModel)) { + this.drawActivity(processDiagramCanvas, bpmnModel, artifact1, highLightedActivities, highLightedFlows, scaleFactor, Boolean.valueOf(drawSequenceFlowNameWithNoLabelDI)); + } + } + } + + var13 = bpmnModel.getProcesses().iterator(); + + label75: + while (true) { + List subProcesses2; + do { + if (!var13.hasNext()) { + return processDiagramCanvas; + } + + process1 = (Process) var13.next(); + subProcesses1 = process1.getArtifacts().iterator(); + + while (subProcesses1.hasNext()) { + Artifact artifact2 = (Artifact) subProcesses1.next(); + this.drawArtifact(processDiagramCanvas, bpmnModel, artifact2); + } + + subProcesses2 = process1.findFlowElementsOfType(SubProcess.class, true); + } while (subProcesses2 == null); + + Iterator artifact3 = subProcesses2.iterator(); + + while (true) { + GraphicInfo graphicInfo; + SubProcess subProcess1; + do { + do { + if (!artifact3.hasNext()) { + continue label75; + } + + subProcess1 = (SubProcess) artifact3.next(); + graphicInfo = bpmnModel.getGraphicInfo(subProcess1.getId()); + } while (graphicInfo != null && graphicInfo.getExpanded() != null && !graphicInfo.getExpanded().booleanValue()); + } while (this.isPartOfCollapsedSubProcess(subProcess1, bpmnModel)); + + Iterator var19 = subProcess1.getArtifacts().iterator(); + + while (var19.hasNext()) { + Artifact subProcessArtifact = (Artifact) var19.next(); + this.drawArtifact(processDiagramCanvas, bpmnModel, subProcessArtifact); + } + } + } + } + + protected static DefaultProcessDiagramCanvas initProcessDiagramCanvas(BpmnModel bpmnModel, String imageType, String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader) { + double minX = 1.7976931348623157E308D; + double maxX = 0.0D; + double minY = 1.7976931348623157E308D; + double maxY = 0.0D; + + GraphicInfo nrOfLanes; + for (Iterator flowNodes = bpmnModel.getPools().iterator(); flowNodes.hasNext(); maxY = nrOfLanes.getY() + nrOfLanes.getHeight()) { + Pool artifacts = (Pool) flowNodes.next(); + nrOfLanes = bpmnModel.getGraphicInfo(artifacts.getId()); + minX = nrOfLanes.getX(); + maxX = nrOfLanes.getX() + nrOfLanes.getWidth(); + minY = nrOfLanes.getY(); + } + + List var23 = gatherAllFlowNodes(bpmnModel); + Iterator var24 = var23.iterator(); + + label155: + while (var24.hasNext()) { + FlowNode var26 = (FlowNode) var24.next(); + GraphicInfo artifact = bpmnModel.getGraphicInfo(var26.getId()); + if (artifact.getX() + artifact.getWidth() > maxX) { + maxX = artifact.getX() + artifact.getWidth(); + } + + if (artifact.getX() < minX) { + minX = artifact.getX(); + } + + if (artifact.getY() + artifact.getHeight() > maxY) { + maxY = artifact.getY() + artifact.getHeight(); + } + + if (artifact.getY() < minY) { + minY = artifact.getY(); + } + + Iterator process = var26.getOutgoingFlows().iterator(); + + while (true) { + List l; + do { + if (!process.hasNext()) { + continue label155; + } + + SequenceFlow graphicInfoList = (SequenceFlow) process.next(); + l = bpmnModel.getFlowLocationGraphicInfo(graphicInfoList.getId()); + } while (l == null); + + Iterator graphicInfo = l.iterator(); + + while (graphicInfo.hasNext()) { + GraphicInfo graphicInfo1 = (GraphicInfo) graphicInfo.next(); + if (graphicInfo1.getX() > maxX) { + maxX = graphicInfo1.getX(); + } + + if (graphicInfo1.getX() < minX) { + minX = graphicInfo1.getX(); + } + + if (graphicInfo1.getY() > maxY) { + maxY = graphicInfo1.getY(); + } + + if (graphicInfo1.getY() < minY) { + minY = graphicInfo1.getY(); + } + } + } + } + + List var25 = gatherAllArtifacts(bpmnModel); + Iterator var27 = var25.iterator(); + + GraphicInfo var37; + while (var27.hasNext()) { + Artifact var29 = (Artifact) var27.next(); + GraphicInfo var31 = bpmnModel.getGraphicInfo(var29.getId()); + if (var31 != null) { + if (var31.getX() + var31.getWidth() > maxX) { + maxX = var31.getX() + var31.getWidth(); + } + + if (var31.getX() < minX) { + minX = var31.getX(); + } + + if (var31.getY() + var31.getHeight() > maxY) { + maxY = var31.getY() + var31.getHeight(); + } + + if (var31.getY() < minY) { + minY = var31.getY(); + } + } + + List var33 = bpmnModel.getFlowLocationGraphicInfo(var29.getId()); + if (var33 != null) { + Iterator var35 = var33.iterator(); + + while (var35.hasNext()) { + var37 = (GraphicInfo) var35.next(); + if (var37.getX() > maxX) { + maxX = var37.getX(); + } + + if (var37.getX() < minX) { + minX = var37.getX(); + } + + if (var37.getY() > maxY) { + maxY = var37.getY(); + } + + if (var37.getY() < minY) { + minY = var37.getY(); + } + } + } + } + + int var28 = 0; + Iterator var30 = bpmnModel.getProcesses().iterator(); + + while (var30.hasNext()) { + Process var32 = (Process) var30.next(); + Iterator var34 = var32.getLanes().iterator(); + + while (var34.hasNext()) { + Lane var36 = (Lane) var34.next(); + ++var28; + var37 = bpmnModel.getGraphicInfo(var36.getId()); + if (var37.getX() + var37.getWidth() > maxX) { + maxX = var37.getX() + var37.getWidth(); + } + + if (var37.getX() < minX) { + minX = var37.getX(); + } + + if (var37.getY() + var37.getHeight() > maxY) { + maxY = var37.getY() + var37.getHeight(); + } + + if (var37.getY() < minY) { + minY = var37.getY(); + } + } + } + + if (var23.isEmpty() && bpmnModel.getPools().isEmpty() && var28 == 0) { + minX = 0.0D; + minY = 0.0D; + } + + return new CustomProcessDiagramCanvas((int) maxX + 10, (int) maxY + 10, (int) minX, (int) minY, imageType, activityFontName, labelFontName, annotationFontName, customClassLoader); + } + + + private static void drawHighLight(DefaultProcessDiagramCanvas processDiagramCanvas, GraphicInfo graphicInfo) { + processDiagramCanvas.drawHighLight((int) graphicInfo.getX(), (int) graphicInfo.getY(), (int) graphicInfo.getWidth(), (int) graphicInfo.getHeight()); + + } + + private static void drawHighLightNow(CustomProcessDiagramCanvas processDiagramCanvas, GraphicInfo graphicInfo) { + processDiagramCanvas.drawHighLightNow((int) graphicInfo.getX(), (int) graphicInfo.getY(), (int) graphicInfo.getWidth(), (int) graphicInfo.getHeight()); + + } + + private static void drawHighLightEnd(CustomProcessDiagramCanvas processDiagramCanvas, GraphicInfo graphicInfo) { + processDiagramCanvas.drawHighLightEnd((int) graphicInfo.getX(), (int) graphicInfo.getY(), (int) graphicInfo.getWidth(), (int) graphicInfo.getHeight()); + + } + + @Override + protected void drawActivity(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, + FlowNode flowNode, List highLightedActivities, List highLightedFlows, double scaleFactor, Boolean drawSequenceFlowNameWithNoLabelDI) { + + ActivityDrawInstruction drawInstruction = activityDrawInstructions.get(flowNode.getClass()); + if (drawInstruction != null) { + + drawInstruction.draw(processDiagramCanvas, bpmnModel, flowNode); + + // Gather info on the multi instance marker + boolean multiInstanceSequential = false; + boolean multiInstanceParallel = false; + boolean collapsed = false; + if (flowNode instanceof Activity) { + Activity activity = (Activity) flowNode; + MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics = activity.getLoopCharacteristics(); + if (multiInstanceLoopCharacteristics != null) { + multiInstanceSequential = multiInstanceLoopCharacteristics.isSequential(); + multiInstanceParallel = !multiInstanceSequential; + } + } + + // Gather info on the collapsed marker + GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); + if (flowNode instanceof SubProcess) { + collapsed = graphicInfo.getExpanded() != null && !graphicInfo.getExpanded(); + } else if (flowNode instanceof CallActivity) { + collapsed = true; + } + + if (scaleFactor == 1.0) { + // Actually draw the markers + processDiagramCanvas.drawActivityMarkers((int) graphicInfo.getX(), (int) graphicInfo.getY(), (int) graphicInfo.getWidth(), (int) graphicInfo.getHeight(), + multiInstanceSequential, multiInstanceParallel, collapsed); + } + + // Draw highlighted activities + if (highLightedActivities.contains(flowNode.getId())) { + + if (highLightedActivities.get(highLightedActivities.size() - 1).equals(flowNode.getId()) + && !"endenv".equals(flowNode.getId())) { + if ((flowNode.getId().contains("Event_"))) { + drawHighLightEnd((CustomProcessDiagramCanvas) processDiagramCanvas, bpmnModel.getGraphicInfo(flowNode.getId())); + } else { + drawHighLightNow((CustomProcessDiagramCanvas) processDiagramCanvas, bpmnModel.getGraphicInfo(flowNode.getId())); + } + } else { + drawHighLight(processDiagramCanvas, bpmnModel.getGraphicInfo(flowNode.getId())); + } + + + } + + } + + // Outgoing transitions of activity + for (SequenceFlow sequenceFlow : flowNode.getOutgoingFlows()) { + boolean highLighted = (highLightedFlows.contains(sequenceFlow.getId())); + String defaultFlow = null; + if (flowNode instanceof Activity) { + defaultFlow = ((Activity) flowNode).getDefaultFlow(); + } else if (flowNode instanceof Gateway) { + defaultFlow = ((Gateway) flowNode).getDefaultFlow(); + } + + boolean isDefault = false; + if (defaultFlow != null && defaultFlow.equalsIgnoreCase(sequenceFlow.getId())) { + isDefault = true; + } + boolean drawConditionalIndicator = sequenceFlow.getConditionExpression() != null && !(flowNode instanceof Gateway); + + String sourceRef = sequenceFlow.getSourceRef(); + String targetRef = sequenceFlow.getTargetRef(); + FlowElement sourceElement = bpmnModel.getFlowElement(sourceRef); + FlowElement targetElement = bpmnModel.getFlowElement(targetRef); + List graphicInfoList = bpmnModel.getFlowLocationGraphicInfo(sequenceFlow.getId()); + if (graphicInfoList != null && graphicInfoList.size() > 0) { + graphicInfoList = connectionPerfectionizer(processDiagramCanvas, bpmnModel, sourceElement, targetElement, graphicInfoList); + int xPoints[] = new int[graphicInfoList.size()]; + int yPoints[] = new int[graphicInfoList.size()]; + + for (int i = 1; i < graphicInfoList.size(); i++) { + GraphicInfo graphicInfo = graphicInfoList.get(i); + GraphicInfo previousGraphicInfo = graphicInfoList.get(i - 1); + + if (i == 1) { + xPoints[0] = (int) previousGraphicInfo.getX(); + yPoints[0] = (int) previousGraphicInfo.getY(); + } + xPoints[i] = (int) graphicInfo.getX(); + yPoints[i] = (int) graphicInfo.getY(); + + } + + processDiagramCanvas.drawSequenceflow(xPoints, yPoints, drawConditionalIndicator, isDefault, highLighted, scaleFactor); + + + // Draw sequenceflow label + GraphicInfo labelGraphicInfo = bpmnModel.getLabelGraphicInfo(sequenceFlow.getId()); + if (labelGraphicInfo != null) { + processDiagramCanvas.drawLabel(sequenceFlow.getName(), labelGraphicInfo, false); + } else { + if (drawSequenceFlowNameWithNoLabelDI) { + GraphicInfo lineCenter = getLineCenter(graphicInfoList); + processDiagramCanvas.drawLabel(sequenceFlow.getName(), lineCenter, false); + } + + } + } + } + + // Nested elements + if (flowNode instanceof FlowElementsContainer) { + for (FlowElement nestedFlowElement : ((FlowElementsContainer) flowNode).getFlowElements()) { + if (nestedFlowElement instanceof FlowNode && !isPartOfCollapsedSubProcess(nestedFlowElement, bpmnModel)) { + drawActivity(processDiagramCanvas, bpmnModel, (FlowNode) nestedFlowElement, + highLightedActivities, highLightedFlows, scaleFactor, drawSequenceFlowNameWithNoLabelDI); + } + } + } + } +} + diff --git a/flowable/src/main/java/com/dite/znpt/flowable/flow/FindNextNodeUtil.java b/flowable/src/main/java/com/dite/znpt/flowable/flow/FindNextNodeUtil.java new file mode 100644 index 0000000..d31362f --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/flow/FindNextNodeUtil.java @@ -0,0 +1,266 @@ +package com.dite.znpt.flowable.flow; + +import com.googlecode.aviator.AviatorEvaluator; +import com.googlecode.aviator.Expression; +//import com.greenpineyu.fel.FelEngine; +//import com.greenpineyu.fel.FelEngineImpl; +//import com.greenpineyu.fel.context.FelContext; +//import org.apache.commons.jexl2.JexlContext; +//import org.apache.commons.jexl2.JexlEngine; +//import org.apache.commons.jexl2.MapContext; +//import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.Process; +import org.flowable.bpmn.model.*; +import org.flowable.engine.RepositoryService; +import org.flowable.engine.repository.ProcessDefinition; + +import java.util.*; + +/** + * @author Tony + * @date 2021/4/19 20:51 + */ +public class FindNextNodeUtil { + + /** + * 获取下一步骤的用户任务 + * + * @param repositoryService + * @param map + * @return + */ + public static List getNextUserTasks(RepositoryService repositoryService, org.flowable.task.api.Task task, Map map) { + List data = new ArrayList<>(); + ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(task.getProcessDefinitionId()).singleResult(); + BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinition.getId()); + Process mainProcess = bpmnModel.getMainProcess(); + Collection flowElements = mainProcess.getFlowElements(); + String key = task.getTaskDefinitionKey(); + FlowElement flowElement = bpmnModel.getFlowElement(key); + next(flowElements, flowElement, map, data); + return data; + } + + /** + * 启动流程时获取下一步骤的用户任务 + * + * @param repositoryService + * @param map + * @return + */ + public static List getNextUserTasksByStart(RepositoryService repositoryService, ProcessDefinition processDefinition, Map map) { + List data = new ArrayList<>(); + BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinition.getId()); + Process mainProcess = bpmnModel.getMainProcess(); + Collection flowElements = mainProcess.getFlowElements(); + String key = null; + // 找到开始节点 并获取唯一key + for (FlowElement flowElement : flowElements) { + if (flowElement instanceof StartEvent) { + key = flowElement.getId(); + break; + } + } + FlowElement flowElement = bpmnModel.getFlowElement(key); + List sequenceFlows = ((StartEvent)flowElement).getOutgoingFlows(); + // 获取出口连线, 此时从开始节点往后,只能是一个出口 + if (!sequenceFlows.isEmpty()) { + SequenceFlow sequenceFlow = sequenceFlows.get(0); + FlowElement targetFlowElement = sequenceFlow.getTargetFlowElement(); + next(flowElements, targetFlowElement, map, data); + } + return data; + } + + + /** + * 查找下一节点 + * + * @param flowElements + * @param flowElement + * @param map + * @param nextUser + */ + public static void next(Collection flowElements, FlowElement flowElement, Map map, List nextUser) { + //如果是结束节点 + if (flowElement instanceof EndEvent) { + //如果是子任务的结束节点 + if (getSubProcess(flowElements, flowElement) != null) { + flowElement = getSubProcess(flowElements, flowElement); + } + } + //获取Task的出线信息--可以拥有多个 + List outGoingFlows = null; + if (flowElement instanceof Task) { + outGoingFlows = ((Task) flowElement).getOutgoingFlows(); + } else if (flowElement instanceof Gateway) { + outGoingFlows = ((Gateway) flowElement).getOutgoingFlows(); + } else if (flowElement instanceof StartEvent) { + outGoingFlows = ((StartEvent) flowElement).getOutgoingFlows(); + } else if (flowElement instanceof SubProcess) { + outGoingFlows = ((SubProcess) flowElement).getOutgoingFlows(); + } else if (flowElement instanceof CallActivity) { + outGoingFlows = ((CallActivity) flowElement).getOutgoingFlows(); + } + if (outGoingFlows != null && outGoingFlows.size() > 0) { + //遍历所有的出线--找到可以正确执行的那一条 + for (SequenceFlow sequenceFlow : outGoingFlows) { + //1.有表达式,且为true + //2.无表达式 + String expression = sequenceFlow.getConditionExpression(); + if (expression == null || + expressionResult(map, expression.substring(expression.lastIndexOf("{") + 1, expression.lastIndexOf("}")))) { + //出线的下一节点 + String nextFlowElementID = sequenceFlow.getTargetRef(); + if (checkSubProcess(nextFlowElementID, flowElements, nextUser)) { + continue; + } + + //查询下一节点的信息 + FlowElement nextFlowElement = getFlowElementById(nextFlowElementID, flowElements); + //调用流程 + if (nextFlowElement instanceof CallActivity) { + CallActivity ca = (CallActivity) nextFlowElement; + if (ca.getLoopCharacteristics() != null) { + UserTask userTask = new UserTask(); + userTask.setId(ca.getId()); + + userTask.setId(ca.getId()); + userTask.setLoopCharacteristics(ca.getLoopCharacteristics()); + userTask.setName(ca.getName()); + nextUser.add(userTask); + } + next(flowElements, nextFlowElement, map, nextUser); + } + //用户任务 + if (nextFlowElement instanceof UserTask) { + nextUser.add((UserTask) nextFlowElement); + } + //排他网关 + else if (nextFlowElement instanceof ExclusiveGateway) { + next(flowElements, nextFlowElement, map, nextUser); + } + //并行网关 + else if (nextFlowElement instanceof ParallelGateway) { + next(flowElements, nextFlowElement, map, nextUser); + } + //接收任务 + else if (nextFlowElement instanceof ReceiveTask) { + next(flowElements, nextFlowElement, map, nextUser); + } + //服务任务 + else if (nextFlowElement instanceof ServiceTask) { + next(flowElements, nextFlowElement, map, nextUser); + } + //子任务的起点 + else if (nextFlowElement instanceof StartEvent) { + next(flowElements, nextFlowElement, map, nextUser); + } + //结束节点 + else if (nextFlowElement instanceof EndEvent) { + next(flowElements, nextFlowElement, map, nextUser); + } + } + } + } + } + + /** + * 判断是否是多实例子流程并且需要设置集合类型变量 + */ + public static boolean checkSubProcess(String id, Collection flowElements, List nextUser) { + for (FlowElement flowElement1 : flowElements) { + if (flowElement1 instanceof SubProcess && flowElement1.getId().equals(id)) { + + SubProcess sp = (SubProcess) flowElement1; + if (sp.getLoopCharacteristics() != null) { +// String inputDataItem = sp.getLoopCharacteristics().getInputDataItem(); + UserTask userTask = new UserTask(); + userTask.setId(sp.getId()); + userTask.setLoopCharacteristics(sp.getLoopCharacteristics()); + userTask.setName(sp.getName()); + nextUser.add(userTask); + return true; + } + } + } + + return false; + + } + + /** + * 查询一个节点的是否子任务中的节点,如果是,返回子任务 + * + * @param flowElements 全流程的节点集合 + * @param flowElement 当前节点 + * @return + */ + public static FlowElement getSubProcess(Collection flowElements, FlowElement flowElement) { + for (FlowElement flowElement1 : flowElements) { + if (flowElement1 instanceof SubProcess) { + for (FlowElement flowElement2 : ((SubProcess) flowElement1).getFlowElements()) { + if (flowElement.equals(flowElement2)) { + return flowElement1; + } + } + } + } + return null; + } + + + /** + * 根据ID查询流程节点对象, 如果是子任务,则返回子任务的开始节点 + * + * @param Id 节点ID + * @param flowElements 流程节点集合 + * @return + */ + public static FlowElement getFlowElementById(String Id, Collection flowElements) { + for (FlowElement flowElement : flowElements) { + if (flowElement.getId().equals(Id)) { + //如果是子任务,则查询出子任务的开始节点 + if (flowElement instanceof SubProcess) { + return getStartFlowElement(((SubProcess) flowElement).getFlowElements()); + } + return flowElement; + } + if (flowElement instanceof SubProcess) { + FlowElement flowElement1 = getFlowElementById(Id, ((SubProcess) flowElement).getFlowElements()); + if (flowElement1 != null) { + return flowElement1; + } + } + } + return null; + } + + /** + * 返回流程的开始节点 + * + * @param flowElements 节点集合 + * @description: + */ + public static FlowElement getStartFlowElement(Collection flowElements) { + for (FlowElement flowElement : flowElements) { + if (flowElement instanceof StartEvent) { + return flowElement; + } + } + return null; + } + + /** + * 校验el表达式 + * + * @param map + * @param expression + * @return + */ + public static boolean expressionResult(Map map, String expression) { + Expression exp = AviatorEvaluator.compile(expression); + return (Boolean) exp.execute(map); +// return true; + } +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/flow/FlowableUtils.java b/flowable/src/main/java/com/dite/znpt/flowable/flow/FlowableUtils.java new file mode 100644 index 0000000..742e011 --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/flow/FlowableUtils.java @@ -0,0 +1,702 @@ +package com.dite.znpt.flowable.flow; + +import lombok.extern.slf4j.Slf4j; +import org.flowable.bpmn.model.*; +import org.flowable.engine.RepositoryService; +import org.flowable.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior; +import org.flowable.engine.impl.bpmn.behavior.SequentialMultiInstanceBehavior; +import org.flowable.engine.repository.ProcessDefinition; +import org.flowable.task.api.history.HistoricTaskInstance; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author Tony + * @date 2021-04-03 23:57 + */ +@Slf4j +public class FlowableUtils { + + /** + * 根据节点,获取入口连线 + * + * @param source + * @return + */ + public static List getElementIncomingFlows(FlowElement source) { + List sequenceFlows = null; + if (source instanceof FlowNode) { + sequenceFlows = ((FlowNode) source).getIncomingFlows(); + } else if (source instanceof Gateway) { + sequenceFlows = ((Gateway) source).getIncomingFlows(); + } else if (source instanceof SubProcess) { + sequenceFlows = ((SubProcess) source).getIncomingFlows(); + } else if (source instanceof StartEvent) { + sequenceFlows = ((StartEvent) source).getIncomingFlows(); + } else if (source instanceof EndEvent) { + sequenceFlows = ((EndEvent) source).getIncomingFlows(); + } + return sequenceFlows; + } + + /** + * 根据节点,获取出口连线 + * + * @param source + * @return + */ + public static List getElementOutgoingFlows(FlowElement source) { + List sequenceFlows = null; + if (source instanceof FlowNode) { + sequenceFlows = ((FlowNode) source).getOutgoingFlows(); + } else if (source instanceof Gateway) { + sequenceFlows = ((Gateway) source).getOutgoingFlows(); + } else if (source instanceof SubProcess) { + sequenceFlows = ((SubProcess) source).getOutgoingFlows(); + } else if (source instanceof StartEvent) { + sequenceFlows = ((StartEvent) source).getOutgoingFlows(); + } else if (source instanceof EndEvent) { + sequenceFlows = ((EndEvent) source).getOutgoingFlows(); + } + return sequenceFlows; + } + + /** + * 获取全部节点列表,包含子流程节点 + * + * @param flowElements + * @param allElements + * @return + */ + public static Collection getAllElements(Collection flowElements, Collection allElements) { + allElements = allElements == null ? new ArrayList<>() : allElements; + + for (FlowElement flowElement : flowElements) { + allElements.add(flowElement); + if (flowElement instanceof SubProcess) { + // 继续深入子流程,进一步获取子流程 + allElements = FlowableUtils.getAllElements(((SubProcess) flowElement).getFlowElements(), allElements); + } + } + return allElements; + } + + /** + * 迭代获取父级任务节点列表,向前找 + * + * @param source 起始节点 + * @param hasSequenceFlow 已经经过的连线的 ID,用于判断线路是否重复 + * @param userTaskList 已找到的用户任务节点 + * @return + */ + public static List iteratorFindParentUserTasks(FlowElement source, Set hasSequenceFlow, List userTaskList) { + userTaskList = userTaskList == null ? new ArrayList<>() : userTaskList; + hasSequenceFlow = hasSequenceFlow == null ? new HashSet<>() : hasSequenceFlow; + + // 如果该节点为开始节点,且存在上级子节点,则顺着上级子节点继续迭代 + if (source instanceof StartEvent && source.getSubProcess() != null) { + userTaskList = iteratorFindParentUserTasks(source.getSubProcess(), hasSequenceFlow, userTaskList); + } + + // 根据类型,获取入口连线 + List sequenceFlows = getElementIncomingFlows(source); + + if (sequenceFlows != null) { + // 循环找到目标元素 + for (SequenceFlow sequenceFlow : sequenceFlows) { + // 如果发现连线重复,说明循环了,跳过这个循环 + if (hasSequenceFlow.contains(sequenceFlow.getId())) { + continue; + } + // 添加已经走过的连线 + hasSequenceFlow.add(sequenceFlow.getId()); + // 类型为用户节点,则新增父级节点 + if (sequenceFlow.getSourceFlowElement() instanceof UserTask) { + userTaskList.add((UserTask) sequenceFlow.getSourceFlowElement()); + continue; + } + // 类型为子流程,则添加子流程开始节点出口处相连的节点 + if (sequenceFlow.getSourceFlowElement() instanceof SubProcess) { + // 获取子流程用户任务节点 + List childUserTaskList = findChildProcessUserTasks((StartEvent) ((SubProcess) sequenceFlow.getSourceFlowElement()).getFlowElements().toArray()[0], null, null); + // 如果找到节点,则说明该线路找到节点,不继续向下找,反之继续 + if (childUserTaskList != null && childUserTaskList.size() > 0) { + userTaskList.addAll(childUserTaskList); + continue; + } + } + // 继续迭代 + userTaskList = iteratorFindParentUserTasks(sequenceFlow.getSourceFlowElement(), hasSequenceFlow, userTaskList); + } + } + return userTaskList; + } + + /** + * 根据正在运行的任务节点,迭代获取子级任务节点列表,向后找 + * + * @param source 起始节点(退回节点) + * @param runTaskKeyList 正在运行的任务 Key,用于校验任务节点是否是正在运行的节点 + * @param hasSequenceFlow 已经经过的连线的 ID,用于判断线路是否重复 + * @param userTaskList 需要撤回的用户任务列表 + * @return + */ + public static List iteratorFindChildUserTasks(FlowElement source, List runTaskKeyList, Set hasSequenceFlow, List userTaskList) { + hasSequenceFlow = hasSequenceFlow == null ? new HashSet<>() : hasSequenceFlow; + userTaskList = userTaskList == null ? new ArrayList<>() : userTaskList; + + // 如果该节点为开始节点,且存在上级子节点,则顺着上级子节点继续迭代 + if (source instanceof EndEvent && source.getSubProcess() != null) { + userTaskList = iteratorFindChildUserTasks(source.getSubProcess(), runTaskKeyList, hasSequenceFlow, userTaskList); + } + + // 根据类型,获取出口连线 + List sequenceFlows = getElementOutgoingFlows(source); + + if (sequenceFlows != null) { + // 循环找到目标元素 + for (SequenceFlow sequenceFlow : sequenceFlows) { + // 如果发现连线重复,说明循环了,跳过这个循环 + if (hasSequenceFlow.contains(sequenceFlow.getId())) { + continue; + } + // 添加已经走过的连线 + hasSequenceFlow.add(sequenceFlow.getId()); + // 如果为用户任务类型,且任务节点的 Key 正在运行的任务中存在,添加 + if (sequenceFlow.getTargetFlowElement() instanceof UserTask && runTaskKeyList.contains((sequenceFlow.getTargetFlowElement()).getId())) { + userTaskList.add((UserTask) sequenceFlow.getTargetFlowElement()); + continue; + } + // 如果节点为子流程节点情况,则从节点中的第一个节点开始获取 + if (sequenceFlow.getTargetFlowElement() instanceof SubProcess) { + List childUserTaskList = iteratorFindChildUserTasks((FlowElement) (((SubProcess) sequenceFlow.getTargetFlowElement()).getFlowElements().toArray()[0]), runTaskKeyList, hasSequenceFlow, null); + // 如果找到节点,则说明该线路找到节点,不继续向下找,反之继续 + if (childUserTaskList != null && childUserTaskList.size() > 0) { + userTaskList.addAll(childUserTaskList); + continue; + } + } + // 继续迭代 + userTaskList = iteratorFindChildUserTasks(sequenceFlow.getTargetFlowElement(), runTaskKeyList, hasSequenceFlow, userTaskList); + } + } + return userTaskList; + } + + /** + * 迭代获取子流程用户任务节点 + * + * @param source 起始节点 + * @param hasSequenceFlow 已经经过的连线的 ID,用于判断线路是否重复 + * @param userTaskList 需要撤回的用户任务列表 + * @return + */ + public static List findChildProcessUserTasks(FlowElement source, Set hasSequenceFlow, List userTaskList) { + hasSequenceFlow = hasSequenceFlow == null ? new HashSet<>() : hasSequenceFlow; + userTaskList = userTaskList == null ? new ArrayList<>() : userTaskList; + + // 根据类型,获取出口连线 + List sequenceFlows = getElementOutgoingFlows(source); + + if (sequenceFlows != null) { + // 循环找到目标元素 + for (SequenceFlow sequenceFlow : sequenceFlows) { + // 如果发现连线重复,说明循环了,跳过这个循环 + if (hasSequenceFlow.contains(sequenceFlow.getId())) { + continue; + } + // 添加已经走过的连线 + hasSequenceFlow.add(sequenceFlow.getId()); + // 如果为用户任务类型,且任务节点的 Key 正在运行的任务中存在,添加 + if (sequenceFlow.getTargetFlowElement() instanceof UserTask) { + userTaskList.add((UserTask) sequenceFlow.getTargetFlowElement()); + continue; + } + // 如果节点为子流程节点情况,则从节点中的第一个节点开始获取 + if (sequenceFlow.getTargetFlowElement() instanceof SubProcess) { + List childUserTaskList = findChildProcessUserTasks((FlowElement) (((SubProcess) sequenceFlow.getTargetFlowElement()).getFlowElements().toArray()[0]), hasSequenceFlow, null); + // 如果找到节点,则说明该线路找到节点,不继续向下找,反之继续 + if (childUserTaskList != null && childUserTaskList.size() > 0) { + userTaskList.addAll(childUserTaskList); + continue; + } + } + // 继续迭代 + userTaskList = findChildProcessUserTasks(sequenceFlow.getTargetFlowElement(), hasSequenceFlow, userTaskList); + } + } + return userTaskList; + } + + /** + * 从后向前寻路,获取所有脏线路上的点 + * + * @param source 起始节点 + * @param passRoads 已经经过的点集合 + * @param hasSequenceFlow 已经经过的连线的 ID,用于判断线路是否重复 + * @param targets 目标脏线路终点 + * @param dirtyRoads 确定为脏数据的点,因为不需要重复,因此使用 set 存储 + * @return + */ + public static Set iteratorFindDirtyRoads(FlowElement source, List passRoads, Set hasSequenceFlow, List targets, Set dirtyRoads) { + passRoads = passRoads == null ? new ArrayList<>() : passRoads; + dirtyRoads = dirtyRoads == null ? new HashSet<>() : dirtyRoads; + hasSequenceFlow = hasSequenceFlow == null ? new HashSet<>() : hasSequenceFlow; + + // 如果该节点为开始节点,且存在上级子节点,则顺着上级子节点继续迭代 + if (source instanceof StartEvent && source.getSubProcess() != null) { + dirtyRoads = iteratorFindDirtyRoads(source.getSubProcess(), passRoads, hasSequenceFlow, targets, dirtyRoads); + } + + // 根据类型,获取入口连线 + List sequenceFlows = getElementIncomingFlows(source); + + if (sequenceFlows != null) { + // 循环找到目标元素 + for (SequenceFlow sequenceFlow : sequenceFlows) { + // 如果发现连线重复,说明循环了,跳过这个循环 + if (hasSequenceFlow.contains(sequenceFlow.getId())) { + continue; + } + // 添加已经走过的连线 + hasSequenceFlow.add(sequenceFlow.getId()); + // 新增经过的路线 + passRoads.add(sequenceFlow.getSourceFlowElement().getId()); + // 如果此点为目标点,确定经过的路线为脏线路,添加点到脏线路中,然后找下个连线 + if (targets.contains(sequenceFlow.getSourceFlowElement().getId())) { + dirtyRoads.addAll(passRoads); + continue; + } + // 如果该节点为开始节点,且存在上级子节点,则顺着上级子节点继续迭代 + if (sequenceFlow.getSourceFlowElement() instanceof SubProcess) { + dirtyRoads = findChildProcessAllDirtyRoad((StartEvent) ((SubProcess) sequenceFlow.getSourceFlowElement()).getFlowElements().toArray()[0], null, dirtyRoads); + // 是否存在子流程上,true 是,false 否 + Boolean isInChildProcess = dirtyTargetInChildProcess((StartEvent) ((SubProcess) sequenceFlow.getSourceFlowElement()).getFlowElements().toArray()[0], null, targets, null); + if (isInChildProcess) { + // 已在子流程上找到,该路线结束 + continue; + } + } + // 继续迭代 + dirtyRoads = iteratorFindDirtyRoads(sequenceFlow.getSourceFlowElement(), passRoads, hasSequenceFlow, targets, dirtyRoads); + } + } + return dirtyRoads; + } + + /** + * 迭代获取子流程脏路线 + * 说明,假如回退的点就是子流程,那么也肯定会回退到子流程最初的用户任务节点,因此子流程中的节点全是脏路线 + * + * @param source 起始节点 + * @param hasSequenceFlow 已经经过的连线的 ID,用于判断线路是否重复 + * @param dirtyRoads 确定为脏数据的点,因为不需要重复,因此使用 set 存储 + * @return + */ + public static Set findChildProcessAllDirtyRoad(FlowElement source, Set hasSequenceFlow, Set dirtyRoads) { + hasSequenceFlow = hasSequenceFlow == null ? new HashSet<>() : hasSequenceFlow; + dirtyRoads = dirtyRoads == null ? new HashSet<>() : dirtyRoads; + + // 根据类型,获取出口连线 + List sequenceFlows = getElementOutgoingFlows(source); + + if (sequenceFlows != null) { + // 循环找到目标元素 + for (SequenceFlow sequenceFlow : sequenceFlows) { + // 如果发现连线重复,说明循环了,跳过这个循环 + if (hasSequenceFlow.contains(sequenceFlow.getId())) { + continue; + } + // 添加已经走过的连线 + hasSequenceFlow.add(sequenceFlow.getId()); + // 添加脏路线 + dirtyRoads.add(sequenceFlow.getTargetFlowElement().getId()); + // 如果节点为子流程节点情况,则从节点中的第一个节点开始获取 + if (sequenceFlow.getTargetFlowElement() instanceof SubProcess) { + dirtyRoads = findChildProcessAllDirtyRoad((FlowElement) (((SubProcess) sequenceFlow.getTargetFlowElement()).getFlowElements().toArray()[0]), hasSequenceFlow, dirtyRoads); + } + // 继续迭代 + dirtyRoads = findChildProcessAllDirtyRoad(sequenceFlow.getTargetFlowElement(), hasSequenceFlow, dirtyRoads); + } + } + return dirtyRoads; + } + + /** + * 判断脏路线结束节点是否在子流程上 + * + * @param source 起始节点 + * @param hasSequenceFlow 已经经过的连线的 ID,用于判断线路是否重复 + * @param targets 判断脏路线节点是否存在子流程上,只要存在一个,说明脏路线只到子流程为止 + * @param inChildProcess 是否存在子流程上,true 是,false 否 + * @return + */ + public static Boolean dirtyTargetInChildProcess(FlowElement source, Set hasSequenceFlow, List targets, Boolean inChildProcess) { + hasSequenceFlow = hasSequenceFlow == null ? new HashSet<>() : hasSequenceFlow; + inChildProcess = inChildProcess != null && inChildProcess; + + // 根据类型,获取出口连线 + List sequenceFlows = getElementOutgoingFlows(source); + + if (sequenceFlows != null && !inChildProcess) { + // 循环找到目标元素 + for (SequenceFlow sequenceFlow : sequenceFlows) { + // 如果发现连线重复,说明循环了,跳过这个循环 + if (hasSequenceFlow.contains(sequenceFlow.getId())) { + continue; + } + // 添加已经走过的连线 + hasSequenceFlow.add(sequenceFlow.getId()); + // 如果发现目标点在子流程上存在,说明只到子流程为止 + if (targets.contains(sequenceFlow.getTargetFlowElement().getId())) { + inChildProcess = true; + break; + } + // 如果节点为子流程节点情况,则从节点中的第一个节点开始获取 + if (sequenceFlow.getTargetFlowElement() instanceof SubProcess) { + inChildProcess = dirtyTargetInChildProcess((FlowElement) (((SubProcess) sequenceFlow.getTargetFlowElement()).getFlowElements().toArray()[0]), hasSequenceFlow, targets, inChildProcess); + } + // 继续迭代 + inChildProcess = dirtyTargetInChildProcess(sequenceFlow.getTargetFlowElement(), hasSequenceFlow, targets, inChildProcess); + } + } + return inChildProcess; + } + + /** + * 迭代从后向前扫描,判断目标节点相对于当前节点是否是串行 + * 不存在直接回退到子流程中的情况,但存在从子流程出去到父流程情况 + * + * @param source 起始节点 + * @param isSequential 是否串行 + * @param hasSequenceFlow 已经经过的连线的 ID,用于判断线路是否重复 + * @param targetKsy 目标节点 + * @return + */ + public static Boolean iteratorCheckSequentialReferTarget(FlowElement source, String targetKsy, Set hasSequenceFlow, Boolean isSequential) { + isSequential = isSequential == null || isSequential; + hasSequenceFlow = hasSequenceFlow == null ? new HashSet<>() : hasSequenceFlow; + + // 如果该节点为开始节点,且存在上级子节点,则顺着上级子节点继续迭代 + if (source instanceof StartEvent && source.getSubProcess() != null) { + isSequential = iteratorCheckSequentialReferTarget(source.getSubProcess(), targetKsy, hasSequenceFlow, isSequential); + } + + // 根据类型,获取入口连线 + List sequenceFlows = getElementIncomingFlows(source); + + if (sequenceFlows != null) { + // 循环找到目标元素 + for (SequenceFlow sequenceFlow : sequenceFlows) { + // 如果发现连线重复,说明循环了,跳过这个循环 + if (hasSequenceFlow.contains(sequenceFlow.getId())) { + continue; + } + // 添加已经走过的连线 + hasSequenceFlow.add(sequenceFlow.getId()); + // 如果目标节点已被判断为并行,后面都不需要执行,直接返回 + if (!isSequential) { + break; + } + // 这条线路存在目标节点,这条线路完成,进入下个线路 + if (targetKsy.equals(sequenceFlow.getSourceFlowElement().getId())) { + continue; + } + if (sequenceFlow.getSourceFlowElement() instanceof StartEvent) { + isSequential = false; + break; + } + // 否则就继续迭代 + isSequential = iteratorCheckSequentialReferTarget(sequenceFlow.getSourceFlowElement(), targetKsy, hasSequenceFlow, isSequential); + } + } + return isSequential; + } + + /** + * 从后向前寻路,获取到达节点的所有路线 + * 不存在直接回退到子流程,但是存在回退到父级流程的情况 + * + * @param source 起始节点 + * @param passRoads 已经经过的点集合 + * @param roads 路线 + * @return + */ + public static List> findRoad(FlowElement source, List passRoads, Set hasSequenceFlow, List> roads) { + passRoads = passRoads == null ? new ArrayList<>() : passRoads; + roads = roads == null ? new ArrayList<>() : roads; + hasSequenceFlow = hasSequenceFlow == null ? new HashSet<>() : hasSequenceFlow; + + // 如果该节点为开始节点,且存在上级子节点,则顺着上级子节点继续迭代 + if (source instanceof StartEvent && source.getSubProcess() != null) { + roads = findRoad(source.getSubProcess(), passRoads, hasSequenceFlow, roads); + } + + // 根据类型,获取入口连线 + List sequenceFlows = getElementIncomingFlows(source); + + if (sequenceFlows != null && sequenceFlows.size() != 0) { + for (SequenceFlow sequenceFlow : sequenceFlows) { + // 如果发现连线重复,说明循环了,跳过这个循环 + if (hasSequenceFlow.contains(sequenceFlow.getId())) { + continue; + } + // 添加已经走过的连线 + hasSequenceFlow.add(sequenceFlow.getId()); + // 添加经过路线 + if (sequenceFlow.getSourceFlowElement() instanceof UserTask) { + passRoads.add((UserTask) sequenceFlow.getSourceFlowElement()); + } + // 继续迭代 + roads = findRoad(sequenceFlow.getSourceFlowElement(), passRoads, hasSequenceFlow, roads); + } + } else { + // 添加路线 + roads.add(passRoads); + } + return roads; + } + + /** + * 历史节点数据清洗,清洗掉又回滚导致的脏数据 + * + * @param allElements 全部节点信息 + * @param historicTaskInstanceList 历史任务实例信息,数据采用开始时间升序 + * @return + */ + public static List historicTaskInstanceClean(Collection allElements, List historicTaskInstanceList) { + // 会签节点收集 + List multiTask = new ArrayList<>(); + allElements.forEach(flowElement -> { + if (flowElement instanceof UserTask) { + // 如果该节点的行为为会签行为,说明该节点为会签节点 + if (((UserTask) flowElement).getBehavior() instanceof ParallelMultiInstanceBehavior || ((UserTask) flowElement).getBehavior() instanceof SequentialMultiInstanceBehavior) { + multiTask.add(flowElement.getId()); + } + } + }); + // 循环放入栈,栈 LIFO:后进先出 + Stack stack = new Stack<>(); + historicTaskInstanceList.forEach(stack::push); + // 清洗后的历史任务实例 + List lastHistoricTaskInstanceList = new ArrayList<>(); + // 网关存在可能只走了部分分支情况,且还存在跳转废弃数据以及其他分支数据的干扰,因此需要对历史节点数据进行清洗 + // 临时用户任务 key + StringBuilder userTaskKey = null; + // 临时被删掉的任务 key,存在并行情况 + List deleteKeyList = new ArrayList<>(); + // 临时脏数据线路 + List> dirtyDataLineList = new ArrayList<>(); + // 由某个点跳到会签点,此时出现多个会签实例对应 1 个跳转情况,需要把这些连续脏数据都找到 + // 会签特殊处理下标 + int multiIndex = -1; + // 会签特殊处理 key + StringBuilder multiKey = null; + // 会签特殊处理操作标识 + boolean multiOpera = false; + while (!stack.empty()) { + // 从这里开始 userTaskKey 都还是上个栈的 key + // 是否是脏数据线路上的点 + final boolean[] isDirtyData = {false}; + for (Set oldDirtyDataLine : dirtyDataLineList) { + if (oldDirtyDataLine.contains(stack.peek().getTaskDefinitionKey())) { + isDirtyData[0] = true; + } + } + // 删除原因不为空,说明从这条数据开始回跳或者回退的 + // MI_END:会签完成后,其他未签到节点的删除原因,不在处理范围内 + if (stack.peek().getDeleteReason() != null && !"MI_END".equals(stack.peek().getDeleteReason())) { + // 可以理解为脏线路起点 + String dirtyPoint = ""; + if (stack.peek().getDeleteReason().contains("Change activity to ")) { + dirtyPoint = stack.peek().getDeleteReason().replace("Change activity to ", ""); + } + // 会签回退删除原因有点不同 + if (stack.peek().getDeleteReason().contains("Change parent activity to ")) { + dirtyPoint = stack.peek().getDeleteReason().replace("Change parent activity to ", ""); + } + FlowElement dirtyTask = null; + // 获取变更节点的对应的入口处连线 + // 如果是网关并行回退情况,会变成两条脏数据路线,效果一样 + for (FlowElement flowElement : allElements) { + if (flowElement.getId().equals(stack.peek().getTaskDefinitionKey())) { + dirtyTask = flowElement; + } + } + // 获取脏数据线路 + Set dirtyDataLine = FlowableUtils.iteratorFindDirtyRoads(dirtyTask, null, null, Arrays.asList(dirtyPoint.split(",")), null); + // 自己本身也是脏线路上的点,加进去 + dirtyDataLine.add(stack.peek().getTaskDefinitionKey()); + log.info(stack.peek().getTaskDefinitionKey() + "点脏路线集合:" + dirtyDataLine); + // 是全新的需要添加的脏线路 + boolean isNewDirtyData = true; + for (int i = 0; i < dirtyDataLineList.size(); i++) { + // 如果发现他的上个节点在脏线路内,说明这个点可能是并行的节点,或者连续驳回 + // 这时,都以之前的脏线路节点为标准,只需合并脏线路即可,也就是路线补全 + if (dirtyDataLineList.get(i).contains(userTaskKey.toString())) { + isNewDirtyData = false; + dirtyDataLineList.get(i).addAll(dirtyDataLine); + } + } + // 已确定时全新的脏线路 + if (isNewDirtyData) { + // deleteKey 单一路线驳回到并行,这种同时生成多个新实例记录情况,这时 deleteKey 其实是由多个值组成 + // 按照逻辑,回退后立刻生成的实例记录就是回退的记录 + // 至于驳回所生成的 Key,直接从删除原因中获取,因为存在驳回到并行的情况 + deleteKeyList.add(dirtyPoint + ","); + dirtyDataLineList.add(dirtyDataLine); + } + // 添加后,现在这个点变成脏线路上的点了 + isDirtyData[0] = true; + } + // 如果不是脏线路上的点,说明是有效数据,添加历史实例 Key + if (!isDirtyData[0]) { + lastHistoricTaskInstanceList.add(stack.peek().getTaskDefinitionKey()); + } + // 校验脏线路是否结束 + for (int i = 0; i < deleteKeyList.size(); i++) { + // 如果发现脏数据属于会签,记录下下标与对应 Key,以备后续比对,会签脏数据范畴开始 + if (multiKey == null && multiTask.contains(stack.peek().getTaskDefinitionKey()) + && deleteKeyList.get(i).contains(stack.peek().getTaskDefinitionKey())) { + multiIndex = i; + multiKey = new StringBuilder(stack.peek().getTaskDefinitionKey()); + } + // 会签脏数据处理,节点退回会签清空 + // 如果在会签脏数据范畴中发现 Key改变,说明会签脏数据在上个节点就结束了,可以把会签脏数据删掉 + if (multiKey != null && !multiKey.toString().equals(stack.peek().getTaskDefinitionKey())) { + deleteKeyList.set(multiIndex, deleteKeyList.get(multiIndex).replace(stack.peek().getTaskDefinitionKey() + ",", "")); + multiKey = null; + // 结束进行下校验删除 + multiOpera = true; + } + // 其他脏数据处理 + // 发现该路线最后一条脏数据,说明这条脏数据线路处理完了,删除脏数据信息 + // 脏数据产生的新实例中是否包含这条数据 + if (multiKey == null && deleteKeyList.get(i).contains(stack.peek().getTaskDefinitionKey())) { + // 删除匹配到的部分 + deleteKeyList.set(i, deleteKeyList.get(i).replace(stack.peek().getTaskDefinitionKey() + ",", "")); + } + // 如果每组中的元素都以匹配过,说明脏数据结束 + if ("".equals(deleteKeyList.get(i))) { + // 同时删除脏数据 + deleteKeyList.remove(i); + dirtyDataLineList.remove(i); + break; + } + } + // 会签数据处理需要在循环外处理,否则可能导致溢出 + // 会签的数据肯定是之前放进去的所以理论上不会溢出,但还是校验下 + if (multiOpera && deleteKeyList.size() > multiIndex && "".equals(deleteKeyList.get(multiIndex))) { + // 同时删除脏数据 + deleteKeyList.remove(multiIndex); + dirtyDataLineList.remove(multiIndex); + multiIndex = -1; + multiOpera = false; + } + // pop() 方法与 peek() 方法不同,在返回值的同时,会把值从栈中移除 + // 保存新的 userTaskKey 在下个循环中使用 + userTaskKey = new StringBuilder(stack.pop().getTaskDefinitionKey()); + } + log.info("清洗后的历史节点数据:" + lastHistoricTaskInstanceList); + return lastHistoricTaskInstanceList; + } + + /** + * 从 flowElement 获取 指定名称的 拓展元素 + * + * @param flowElement 元素 + * @param extensionElementName 拓展元素名称 + */ + public static ExtensionElement getExtensionElementFromFlowElementByName(FlowElement flowElement, String extensionElementName) { + + if (flowElement == null) { + return null; + } + Map> extensionElements = flowElement.getExtensionElements(); + for (Map.Entry> stringEntry : extensionElements.entrySet()) { + if (stringEntry.getKey().equals(extensionElementName)) { + for (ExtensionElement extensionElement : stringEntry.getValue()) { + if (extensionElement.getName().equals(extensionElementName)) { + return extensionElement; + } + } + } + } + + return null; + } + + /** + * 获取当前任务节点扩展属性信息 + * + * @param repositoryService + * @param task 当前任务 + * @return 自定义属性列表 + */ + public static List getPropertyElement(RepositoryService repositoryService, org.flowable.task.api.Task task) { + FlowElement flowElement = getCurrentElement(repositoryService, task); + ExtensionElement extensionElement = FlowableUtils.getExtensionElementFromFlowElementByName(flowElement, "properties"); + if (extensionElement == null) { + return Collections.emptyList(); + } + return getPropertyExtensionElementByName(extensionElement, "property"); + } + + /** + * 获取当前任务节点 + * + * @param repositoryService + * @param task + * @return + */ + public static FlowElement getCurrentElement(RepositoryService repositoryService, org.flowable.task.api.Task task) { + ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(task.getProcessDefinitionId()).singleResult(); + BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinition.getId()); + return bpmnModel.getFlowElement(task.getTaskDefinitionKey()); + } + + /** + * 根据属性名获取扩展元素中的扩展属性列表 + * + * @param extensionElement 扩展元素 + * @param attributesName 属性名 + * @return 扩展属性列表 + */ + public static List getPropertyExtensionElementByName(ExtensionElement extensionElement, String attributesName) { + try { + // 获取名称为attributesName的子元素 + return Optional.ofNullable(extensionElement.getChildElements().get(attributesName)) + .orElse(Collections.emptyList()) // 如果子元素不存在则返回空集合,避免null引用 + .stream() + .map(element -> { + // 获取子元素的属性 + Map> attributes = element.getAttributes(); + Object propertyDto = new Object(); + // 获取FlowPropertyDto的所有属性 + Arrays.stream(propertyDto.getClass().getDeclaredFields()) + .forEach(field -> { + field.setAccessible(true); + // 获取属性名称和值 + attributes.getOrDefault(field.getName(), Collections.emptyList()) + .stream() + .findFirst() + .ifPresent(attribute -> { + try { + // 反射设置属性值 + field.set(propertyDto, attribute.getValue()); + } catch (IllegalAccessException e) { + e.printStackTrace(); + // 如果反射设置失败则忽略该属性 + } + }); + }); + return propertyDto; + }).collect(Collectors.toList()); + } catch (Exception e) { + e.printStackTrace(); + return Collections.emptyList(); // 如果发生异常则返回空列表 + } + } + +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/listener/FlowExecutionListener.java b/flowable/src/main/java/com/dite/znpt/flowable/listener/FlowExecutionListener.java new file mode 100644 index 0000000..514833b --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/listener/FlowExecutionListener.java @@ -0,0 +1,36 @@ +package com.dite.znpt.flowable.listener; + +import lombok.extern.slf4j.Slf4j; +import org.flowable.common.engine.api.delegate.Expression; +import org.flowable.engine.delegate.DelegateExecution; +import org.flowable.engine.delegate.ExecutionListener; +import org.springframework.stereotype.Component; + +/** + * 执行监听器 + * + * 执行监听器允许在执行过程中执行Java代码。 + * 执行监听器可以捕获事件的类型: + * 流程实例启动,结束 + * 输出流捕获 + * 获取启动,结束 + * 路由开始,结束 + * 中间事件开始,结束 + * 触发开始事件,触发结束事件 + * + * @author Tony + * @date 2022/12/16 + */ +@Slf4j +@Component +public class FlowExecutionListener implements ExecutionListener { + /** + * 流程设计器添加的参数 + */ + private Expression param; + + @Override + public void notify(DelegateExecution execution) { + log.info("执行监听器:{}", execution); + } +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/listener/FlowTaskListener.java b/flowable/src/main/java/com/dite/znpt/flowable/listener/FlowTaskListener.java new file mode 100644 index 0000000..ec8b89f --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/listener/FlowTaskListener.java @@ -0,0 +1,32 @@ +package com.dite.znpt.flowable.listener; + +import lombok.extern.slf4j.Slf4j; +import org.flowable.engine.delegate.TaskListener; +import org.flowable.task.service.delegate.DelegateTask; +import org.springframework.stereotype.Component; + +/** + * 任务监听器 + * + * create(创建):在任务被创建且所有的任务属性设置完成后才触发 + * assignment(指派):在任务被分配给某个办理人之后触发 + * complete(完成):在配置了监听器的上一个任务完成时触发 + * delete(删除):在任务即将被删除前触发。请注意任务由completeTask正常完成时也会触发 + * + * @author Tony + * @date 2021/4/20 + */ +@Slf4j +@Component +public class FlowTaskListener implements TaskListener{ + + @Override + public void notify(DelegateTask delegateTask) { + + log.info("任务监听器:{}", delegateTask); + // TODO 获取事件类型 delegateTask.getEventName(),可以通过监听器给任务执行人发送相应的通知消息 + + + } + +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/mapper/SysDeployFormMapper.java b/flowable/src/main/java/com/dite/znpt/flowable/mapper/SysDeployFormMapper.java new file mode 100644 index 0000000..b5cc146 --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/mapper/SysDeployFormMapper.java @@ -0,0 +1,73 @@ +package com.dite.znpt.flowable.mapper; + + +import com.dite.znpt.flowable.domain.entity.SysDeployForm; +import com.dite.znpt.flowable.domain.entity.SysForm; + +import java.util.List; + +/** + * 流程实例关联表单Mapper接口 + * + * @author Tony + * @date 2021-03-30 + */ +public interface SysDeployFormMapper +{ + /** + * 查询流程实例关联表单 + * + * @param id 流程实例关联表单ID + * @return 流程实例关联表单 + */ + public SysDeployForm selectSysDeployFormById(Long id); + + /** + * 查询流程实例关联表单列表 + * + * @param SysDeployForm 流程实例关联表单 + * @return 流程实例关联表单集合 + */ + public List selectSysDeployFormList(SysDeployForm SysDeployForm); + + /** + * 新增流程实例关联表单 + * + * @param SysDeployForm 流程实例关联表单 + * @return 结果 + */ + public int insertSysDeployForm(SysDeployForm SysDeployForm); + + /** + * 修改流程实例关联表单 + * + * @param SysDeployForm 流程实例关联表单 + * @return 结果 + */ + public int updateSysDeployForm(SysDeployForm SysDeployForm); + + /** + * 删除流程实例关联表单 + * + * @param id 流程实例关联表单ID + * @return 结果 + */ + public int deleteSysDeployFormById(Long id); + + /** + * 批量删除流程实例关联表单 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteSysDeployFormByIds(Long[] ids); + + + + /** + * 查询流程挂着的表单 + * @param deployId + * @return + */ + SysForm selectSysDeployFormByDeployId(String deployId); +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/mapper/SysExpressionMapper.java b/flowable/src/main/java/com/dite/znpt/flowable/mapper/SysExpressionMapper.java new file mode 100644 index 0000000..8156df3 --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/mapper/SysExpressionMapper.java @@ -0,0 +1,63 @@ +package com.dite.znpt.flowable.mapper; + + +import com.dite.znpt.flowable.domain.entity.SysExpression; + +import java.util.List; + +/** + * 流程达式Mapper接口 + * + * @author ruoyi + * @date 2022-12-12 + */ +public interface SysExpressionMapper +{ + /** + * 查询流程达式 + * + * @param id 流程达式主键 + * @return 流程达式 + */ + public SysExpression selectSysExpressionById(Long id); + + /** + * 查询流程达式列表 + * + * @param sysExpression 流程达式 + * @return 流程达式集合 + */ + public List selectSysExpressionList(SysExpression sysExpression); + + /** + * 新增流程达式 + * + * @param sysExpression 流程达式 + * @return 结果 + */ + public int insertSysExpression(SysExpression sysExpression); + + /** + * 修改流程达式 + * + * @param sysExpression 流程达式 + * @return 结果 + */ + public int updateSysExpression(SysExpression sysExpression); + + /** + * 删除流程达式 + * + * @param id 流程达式主键 + * @return 结果 + */ + public int deleteSysExpressionById(Long id); + + /** + * 批量删除流程达式 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSysExpressionByIds(Long[] ids); +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/mapper/SysFormMapper.java b/flowable/src/main/java/com/dite/znpt/flowable/mapper/SysFormMapper.java new file mode 100644 index 0000000..9ee72ba --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/mapper/SysFormMapper.java @@ -0,0 +1,63 @@ +package com.dite.znpt.flowable.mapper; + + +import com.dite.znpt.flowable.domain.entity.SysForm; + +import java.util.List; + +/** + * 流程表单Mapper接口 + * + * @author Tony + * @date 2021-03-30 + */ +public interface SysFormMapper +{ + /** + * 查询流程表单 + * + * @param formId 流程表单ID + * @return 流程表单 + */ + public SysForm selectSysFormById(Long formId); + + /** + * 查询流程表单列表 + * + * @param sysForm 流程表单 + * @return 流程表单集合 + */ + public List selectSysFormList(SysForm sysForm); + + /** + * 新增流程表单 + * + * @param sysForm 流程表单 + * @return 结果 + */ + public int insertSysForm(SysForm sysForm); + + /** + * 修改流程表单 + * + * @param sysForm 流程表单 + * @return 结果 + */ + public int updateSysForm(SysForm sysForm); + + /** + * 删除流程表单 + * + * @param formId 流程表单ID + * @return 结果 + */ + public int deleteSysFormById(Long formId); + + /** + * 批量删除流程表单 + * + * @param formIds 需要删除的数据ID + * @return 结果 + */ + public int deleteSysFormByIds(Long[] formIds); +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/mapper/SysListenerMapper.java b/flowable/src/main/java/com/dite/znpt/flowable/mapper/SysListenerMapper.java new file mode 100644 index 0000000..10ffe5a --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/mapper/SysListenerMapper.java @@ -0,0 +1,62 @@ +package com.dite.znpt.flowable.mapper; + +import com.dite.znpt.flowable.domain.entity.SysListener; + +import java.util.List; + +/** + * 流程监听Mapper接口 + * + * @author Tony + * @date 2022-12-25 + */ +public interface SysListenerMapper +{ + /** + * 查询流程监听 + * + * @param id 流程监听主键 + * @return 流程监听 + */ + public SysListener selectSysListenerById(Long id); + + /** + * 查询流程监听列表 + * + * @param sysListener 流程监听 + * @return 流程监听集合 + */ + public List selectSysListenerList(SysListener sysListener); + + /** + * 新增流程监听 + * + * @param sysListener 流程监听 + * @return 结果 + */ + public int insertSysListener(SysListener sysListener); + + /** + * 修改流程监听 + * + * @param sysListener 流程监听 + * @return 结果 + */ + public int updateSysListener(SysListener sysListener); + + /** + * 删除流程监听 + * + * @param id 流程监听主键 + * @return 结果 + */ + public int deleteSysListenerById(Long id); + + /** + * 批量删除流程监听 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSysListenerByIds(Long[] ids); +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/service/IFlowDefinitionService.java b/flowable/src/main/java/com/dite/znpt/flowable/service/IFlowDefinitionService.java new file mode 100644 index 0000000..94d22d6 --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/service/IFlowDefinitionService.java @@ -0,0 +1,80 @@ +package com.dite.znpt.flowable.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.dto.FlowProcDefDto; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Map; + +/** + * @author Tony + * @date 2021-04-03 14:41 + */ +public interface IFlowDefinitionService { + + boolean exist(String processDefinitionKey); + + + /** + * 流程定义列表 + * + * @param pageNum 当前页码 + * @param pageSize 每页条数 + * @return 流程定义分页列表数据 + */ + Page list(String name, Integer pageNum, Integer pageSize); + + /** + * 导入流程文件 + * 当每个key的流程第一次部署时,指定版本为1。对其后所有使用相同key的流程定义, + * 部署时版本会在该key当前已部署的最高版本号基础上加1。key参数用于区分流程定义 + * @param name + * @param category + * @param in + */ + void importFile(String name, String category, InputStream in); + + /** + * 读取xml + * @param deployId + * @return + */ + Result readXml(String deployId) throws IOException; + + /** + * 根据流程定义ID启动流程实例 + * + * @param procDefId + * @param variables + * @return + */ + + Result startProcessInstanceById(String procDefId, Map variables); + + + /** + * 激活或挂起流程定义 + * + * @param state 状态 + * @param deployId 流程部署ID + */ + void updateState(Integer state, String deployId); + + + /** + * 删除流程定义 + * + * @param deployId 流程部署ID act_ge_bytearray 表中 deployment_id值 + */ + void delete(String deployId); + + + /** + * 读取图片文件 + * @param deployId + * @return + */ + InputStream readImage(String deployId); +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/service/IFlowInstanceService.java b/flowable/src/main/java/com/dite/znpt/flowable/service/IFlowInstanceService.java new file mode 100644 index 0000000..7bc4b5d --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/service/IFlowInstanceService.java @@ -0,0 +1,53 @@ +package com.dite.znpt.flowable.service; + +import com.dite.znpt.domain.Result; +import com.dite.znpt.flowable.domain.vo.FlowTaskVo; +import org.flowable.engine.history.HistoricProcessInstance; +import java.util.Map; + +/** + * @author Tony + * @date 2021-04-03 14:40 + */ +public interface IFlowInstanceService { + + /** + * 结束流程实例 + * + * @param vo + */ + void stopProcessInstance(FlowTaskVo vo); + + /** + * 激活或挂起流程实例 + * + * @param state 状态 + * @param instanceId 流程实例ID + */ + void updateState(Integer state, String instanceId); + + /** + * 删除流程实例ID + * + * @param instanceId 流程实例ID + * @param deleteReason 删除原因 + */ + void delete(String instanceId, String deleteReason); + + /** + * 根据实例ID查询历史实例数据 + * + * @param processInstanceId + * @return + */ + HistoricProcessInstance getHistoricProcessInstanceById(String processInstanceId); + + /** + * 根据流程定义ID启动流程实例 + * + * @param procDefId 流程定义Id + * @param variables 流程变量 + * @return + */ + Result startProcessInstanceById(String procDefId, Map variables); +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/service/IFlowTaskService.java b/flowable/src/main/java/com/dite/znpt/flowable/service/IFlowTaskService.java new file mode 100644 index 0000000..226845b --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/service/IFlowTaskService.java @@ -0,0 +1,218 @@ +package com.dite.znpt.flowable.service; + +import com.dite.znpt.domain.Result; +import com.dite.znpt.flowable.domain.vo.FlowQueryVo; +import com.dite.znpt.flowable.domain.vo.FlowTaskVo; +import org.flowable.task.api.Task; + +import java.io.InputStream; +import java.util.List; + +/** + * @author Tony + * @date 2021-04-03 14:42 + */ +public interface IFlowTaskService { + + /** + * 审批任务 + * + * @param task 请求实体参数 + */ + Result complete(FlowTaskVo task); + + /** + * 驳回任务 + * + * @param flowTaskVo + */ + void taskReject(FlowTaskVo flowTaskVo); + + + /** + * 退回任务 + * + * @param flowTaskVo 请求实体参数 + */ + void taskReturn(FlowTaskVo flowTaskVo); + + /** + * 获取所有可回退的节点 + * + * @param flowTaskVo + * @return + */ + Result findReturnTaskList(FlowTaskVo flowTaskVo); + + /** + * 删除任务 + * + * @param flowTaskVo 请求实体参数 + */ + void deleteTask(FlowTaskVo flowTaskVo); + + /** + * 认领/签收任务 + * + * @param flowTaskVo 请求实体参数 + */ + void claim(FlowTaskVo flowTaskVo); + + /** + * 取消认领/签收任务 + * + * @param flowTaskVo 请求实体参数 + */ + void unClaim(FlowTaskVo flowTaskVo); + + /** + * 委派任务 + * + * @param flowTaskVo 请求实体参数 + */ + void delegateTask(FlowTaskVo flowTaskVo); + + /** + * 任务归还 + * + * @param flowTaskVo 请求实体参数 + */ + void resolveTask(FlowTaskVo flowTaskVo); + + + /** + * 转办任务 + * + * @param flowTaskVo 请求实体参数 + */ + void assignTask(FlowTaskVo flowTaskVo); + + + /** + * 多实例加签 + * @param flowTaskVo + */ + void addMultiInstanceExecution(FlowTaskVo flowTaskVo); + + /** + * 多实例减签 + * @param flowTaskVo + */ + void deleteMultiInstanceExecution(FlowTaskVo flowTaskVo); + + /** + * 我发起的流程 + * @param queryVo 请求参数 + * @return + */ + Result myProcess(FlowQueryVo queryVo); + + /** + * 取消申请 + * 目前实现方式: 直接将当前流程变更为已完成 + * @param flowTaskVo + * @return + */ + Result stopProcess(FlowTaskVo flowTaskVo); + + /** + * 撤回流程 + * @param flowTaskVo + * @return + */ + Result revokeProcess(FlowTaskVo flowTaskVo); + + + /** + * 代办任务列表 + * + * @param queryVo 请求参数 + * @return + */ + Result todoList(FlowQueryVo queryVo); + + + /** + * 已办任务列表 + * + * @param queryVo 请求参数 + * @return + */ + Result finishedList(FlowQueryVo queryVo); + + /** + * 流程历史流转记录 + * + * @param procInsId 流程实例Id + * @return + */ + Result flowRecord(String procInsId,String deployId); + + /** + * 根据任务ID查询挂载的表单信息 + * + * @param taskId 任务Id + * @return + */ + Result getTaskForm(String taskId); + + /** + * 获取流程过程图 + * @param processId + * @return + */ + InputStream diagram(String processId); + + /** + * 获取流程执行节点 + * @param procInsId + * @return + */ + Result getFlowViewer(String procInsId,String executionId); + + /** + * 获取流程变量 + * @param taskId + * @return + */ + Result processVariables(String taskId); + + /** + * 获取下一节点 + * @param flowTaskVo 任务 + * @return + */ + Result getNextFlowNode(FlowTaskVo flowTaskVo); + + Result getNextFlowNodeByStart(FlowTaskVo flowTaskVo); + + /** + * 流程初始化表单 + * @param deployId + * @return + */ + Result flowFormData(String deployId); + + /** + * 流程节点信息 + * @param procInsId + * @return + */ + Result flowXmlAndNode(String procInsId,String deployId); + + /** + * 流程节点表单 + * @param taskId 流程任务编号 + * @return + */ + Result flowTaskForm(String taskId) throws Exception; + + + /** + * 流程节点信息 + * @param procInsId + * @param elementId + * @return + */ + Result flowTaskInfo(String procInsId, String elementId); +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/service/ISysDeployFormService.java b/flowable/src/main/java/com/dite/znpt/flowable/service/ISysDeployFormService.java new file mode 100644 index 0000000..d10ffee --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/service/ISysDeployFormService.java @@ -0,0 +1,70 @@ +package com.dite.znpt.flowable.service; + +import com.dite.znpt.flowable.domain.entity.SysDeployForm; +import com.dite.znpt.flowable.domain.entity.SysForm; + +import java.util.List; + +/** + * 流程实例关联表单Service接口 + * + * @author Tony + * @date 2021-04-03 + */ +public interface ISysDeployFormService +{ + /** + * 查询流程实例关联表单 + * + * @param id 流程实例关联表单ID + * @return 流程实例关联表单 + */ + public SysDeployForm selectSysDeployFormById(Long id); + + /** + * 查询流程实例关联表单列表 + * + * @param sysDeployForm 流程实例关联表单 + * @return 流程实例关联表单集合 + */ + public List selectSysDeployFormList(SysDeployForm sysDeployForm); + + /** + * 新增流程实例关联表单 + * + * @param sysDeployForm 流程实例关联表单 + * @return 结果 + */ + public int insertSysDeployForm(SysDeployForm sysDeployForm); + + /** + * 修改流程实例关联表单 + * + * @param sysDeployForm 流程实例关联表单 + * @return 结果 + */ + public int updateSysDeployForm(SysDeployForm sysDeployForm); + + /** + * 批量删除流程实例关联表单 + * + * @param ids 需要删除的流程实例关联表单ID + * @return 结果 + */ + public int deleteSysDeployFormByIds(Long[] ids); + + /** + * 删除流程实例关联表单信息 + * + * @param id 流程实例关联表单ID + * @return 结果 + */ + public int deleteSysDeployFormById(Long id); + + /** + * 查询流程挂着的表单 + * @param deployId + * @return + */ + SysForm selectSysDeployFormByDeployId(String deployId); +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/service/ISysExpressionService.java b/flowable/src/main/java/com/dite/znpt/flowable/service/ISysExpressionService.java new file mode 100644 index 0000000..f41fcab --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/service/ISysExpressionService.java @@ -0,0 +1,63 @@ +package com.dite.znpt.flowable.service; + + +import com.dite.znpt.flowable.domain.entity.SysExpression; + +import java.util.List; + +/** + * 流程达式Service接口 + * + * @author ruoyi + * @date 2022-12-12 + */ +public interface ISysExpressionService +{ + /** + * 查询流程达式 + * + * @param id 流程达式主键 + * @return 流程达式 + */ + public SysExpression selectSysExpressionById(Long id); + + /** + * 查询流程达式列表 + * + * @param sysExpression 流程达式 + * @return 流程达式集合 + */ + public List selectSysExpressionList(SysExpression sysExpression); + + /** + * 新增流程达式 + * + * @param sysExpression 流程达式 + * @return 结果 + */ + public int insertSysExpression(SysExpression sysExpression); + + /** + * 修改流程达式 + * + * @param sysExpression 流程达式 + * @return 结果 + */ + public int updateSysExpression(SysExpression sysExpression); + + /** + * 批量删除流程达式 + * + * @param ids 需要删除的流程达式主键集合 + * @return 结果 + */ + public int deleteSysExpressionByIds(Long[] ids); + + /** + * 删除流程达式信息 + * + * @param id 流程达式主键 + * @return 结果 + */ + public int deleteSysExpressionById(Long id); +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/service/ISysFormService.java b/flowable/src/main/java/com/dite/znpt/flowable/service/ISysFormService.java new file mode 100644 index 0000000..8e4ed68 --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/service/ISysFormService.java @@ -0,0 +1,61 @@ +package com.dite.znpt.flowable.service; + +import com.dite.znpt.flowable.domain.entity.SysForm; + +import java.util.List; + +/** + * 表单 + * @author Tony + * @date 2021-04-03 + */ +public interface ISysFormService +{ + /** + * 查询流程表单 + * + * @param formId 流程表单ID + * @return 流程表单 + */ + public SysForm selectSysFormById(Long formId); + + /** + * 查询流程表单列表 + * + * @param sysForm 流程表单 + * @return 流程表单集合 + */ + public List selectSysFormList(SysForm sysForm); + + /** + * 新增流程表单 + * + * @param sysForm 流程表单 + * @return 结果 + */ + public int insertSysForm(SysForm sysForm); + + /** + * 修改流程表单 + * + * @param sysForm 流程表单 + * @return 结果 + */ + public int updateSysForm(SysForm sysForm); + + /** + * 批量删除流程表单 + * + * @param formIds 需要删除的流程表单ID + * @return 结果 + */ + public int deleteSysFormByIds(Long[] formIds); + + /** + * 删除流程表单信息 + * + * @param formId 流程表单ID + * @return 结果 + */ + public int deleteSysFormById(Long formId); +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/service/ISysListenerService.java b/flowable/src/main/java/com/dite/znpt/flowable/service/ISysListenerService.java new file mode 100644 index 0000000..006d41f --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/service/ISysListenerService.java @@ -0,0 +1,63 @@ +package com.dite.znpt.flowable.service; + + +import com.dite.znpt.flowable.domain.entity.SysListener; + +import java.util.List; + +/** + * 流程监听Service接口 + * + * @author Tony + * @date 2022-12-25 + */ +public interface ISysListenerService +{ + /** + * 查询流程监听 + * + * @param id 流程监听主键 + * @return 流程监听 + */ + public SysListener selectSysListenerById(Long id); + + /** + * 查询流程监听列表 + * + * @param sysListener 流程监听 + * @return 流程监听集合 + */ + public List selectSysListenerList(SysListener sysListener); + + /** + * 新增流程监听 + * + * @param sysListener 流程监听 + * @return 结果 + */ + public int insertSysListener(SysListener sysListener); + + /** + * 修改流程监听 + * + * @param sysListener 流程监听 + * @return 结果 + */ + public int updateSysListener(SysListener sysListener); + + /** + * 批量删除流程监听 + * + * @param ids 需要删除的流程监听主键集合 + * @return 结果 + */ + public int deleteSysListenerByIds(Long[] ids); + + /** + * 删除流程监听信息 + * + * @param id 流程监听主键 + * @return 结果 + */ + public int deleteSysListenerById(Long id); +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/service/impl/FlowDefinitionServiceImpl.java b/flowable/src/main/java/com/dite/znpt/flowable/service/impl/FlowDefinitionServiceImpl.java new file mode 100644 index 0000000..b64e696 --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/service/impl/FlowDefinitionServiceImpl.java @@ -0,0 +1,241 @@ +package com.dite.znpt.flowable.service.impl; + +import cn.dev33.satoken.stp.StpUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.dto.FlowProcDefDto; +import com.dite.znpt.flowable.domain.entity.SysForm; +import com.dite.znpt.domain.vo.UserInfo; +import com.dite.znpt.flowable.common.constant.ProcessConstants; +import com.dite.znpt.flowable.common.enums.FlowComment; +import com.dite.znpt.flowable.factory.FlowServiceFactory; +import com.dite.znpt.flowable.service.IFlowDefinitionService; +import com.dite.znpt.flowable.service.ISysDeployFormService; +import com.dite.znpt.mapper.FlowDeployMapper; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.IOUtils; +import org.flowable.bpmn.model.BpmnModel; +import org.flowable.engine.repository.Deployment; +import org.flowable.engine.repository.ProcessDefinition; +import org.flowable.engine.repository.ProcessDefinitionQuery; +import org.flowable.engine.runtime.ProcessInstance; +import org.flowable.image.impl.DefaultProcessDiagramGenerator; +import org.flowable.task.api.Task; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * 流程定义 + * + * @author Tony + * @date 2021-04-03 + */ +@Service +@Slf4j +public class FlowDefinitionServiceImpl extends FlowServiceFactory implements IFlowDefinitionService { + + @Resource + private ISysDeployFormService sysDeployFormService; + + @Resource + private FlowDeployMapper flowDeployMapper; + + private static final String BPMN_FILE_SUFFIX = ".bpmn"; + + @Override + public boolean exist(String processDefinitionKey) { + ProcessDefinitionQuery processDefinitionQuery + = repositoryService.createProcessDefinitionQuery().processDefinitionKey(processDefinitionKey); + long count = processDefinitionQuery.count(); + return count > 0 ? true : false; + } + + + /** + * 流程定义列表 + * + * @param pageNum 当前页码 + * @param pageSize 每页条数 + * @return 流程定义分页列表数据 + */ + @Override + public Page list(String name, Integer pageNum, Integer pageSize) { + Page page = new Page<>(); +// // 流程定义列表数据查询 +// final ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery(); +// if (StringUtils.isNotEmpty(name)) { +// processDefinitionQuery.processDefinitionNameLike(name); +// } +//// processDefinitionQuery.orderByProcessDefinitionKey().asc(); +// page.setTotal(processDefinitionQuery.count()); +// List processDefinitionList = processDefinitionQuery.listPage(pageSize * (pageNum - 1), pageSize); +// +// List dataList = new ArrayList<>(); +// for (ProcessDefinition processDefinition : processDefinitionList) { +// String deploymentId = processDefinition.getDeploymentId(); +// Deployment deployment = repositoryService.createDeploymentQuery().deploymentId(deploymentId).singleResult(); +// FlowProcDefDto reProcDef = new FlowProcDefDto(); +// BeanUtils.copyProperties(processDefinition, reProcDef); +// SysForm sysForm = sysDeployFormService.selectSysDeployFormByDeployId(deploymentId); +// if (Objects.nonNull(sysForm)) { +// reProcDef.setFormName(sysForm.getFormName()); +// reProcDef.setFormId(sysForm.getFormId()); +// } +// // 流程定义时间 +// reProcDef.setDeploymentTime(deployment.getDeploymentTime()); +// dataList.add(reProcDef); +// } + PageHelper.startPage(pageNum, pageSize); + final List dataList = flowDeployMapper.selectDeployList(name); + // 加载挂表单 + for (FlowProcDefDto procDef : dataList) { + SysForm sysForm = sysDeployFormService.selectSysDeployFormByDeployId(procDef.getDeploymentId()); + if (Objects.nonNull(sysForm)) { + procDef.setFormName(sysForm.getFormName()); + procDef.setFormId(sysForm.getFormId()); + } + } + page.setTotal(new PageInfo(dataList).getTotal()); + page.setRecords(dataList); + return page; + } + + + /** + * 导入流程文件 + * + * 当每个key的流程第一次部署时,指定版本为1。对其后所有使用相同key的流程定义, + * 部署时版本会在该key当前已部署的最高版本号基础上加1。key参数用于区分流程定义 + * @param name + * @param category + * @param in + */ + @Override + public void importFile(String name, String category, InputStream in) { + Deployment deploy = repositoryService.createDeployment().addInputStream(name + BPMN_FILE_SUFFIX, in).name(name).category(category).deploy(); + ProcessDefinition definition = repositoryService.createProcessDefinitionQuery().deploymentId(deploy.getId()).singleResult(); + repositoryService.setProcessDefinitionCategory(definition.getId(), category); + + } + + /** + * 读取xml + * + * @param deployId + * @return + */ + @Override + public Result readXml(String deployId) throws IOException { + ProcessDefinition definition = repositoryService.createProcessDefinitionQuery().deploymentId(deployId).singleResult(); + InputStream inputStream = repositoryService.getResourceAsStream(definition.getDeploymentId(), definition.getResourceName()); + String result = IOUtils.toString(inputStream, StandardCharsets.UTF_8.name()); + return Result.okM(result,""); + } + + /** + * 读取xml + * + * @param deployId + * @return + */ + @Override + public InputStream readImage(String deployId) { + ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(deployId).singleResult(); + //获得图片流 + DefaultProcessDiagramGenerator diagramGenerator = new DefaultProcessDiagramGenerator(); + BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinition.getId()); + //输出为图片 + return diagramGenerator.generateDiagram( + bpmnModel, + "png", + Collections.emptyList(), + Collections.emptyList(), + "宋体", + "宋体", + "宋体", + null, + 1.0, + false); + + } + + /** + * 根据流程定义ID启动流程实例 + * + * @param procDefId 流程模板ID + * @param variables 流程变量 + * @return + */ + @Override + public Result startProcessInstanceById(String procDefId, Map variables) { + try { + ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(procDefId) + .latestVersion().singleResult(); + if (Objects.nonNull(processDefinition) && processDefinition.isSuspended()) { + return Result.error("流程已被挂起,请先激活流程"); + } + // 设置流程发起人Id到流程中 + UserInfo userInfo = (UserInfo)StpUtil.getSession().get("userInfo"); + identityService.setAuthenticatedUserId(userInfo.getUser().getUserId()); + variables.put(ProcessConstants.PROCESS_INITIATOR, userInfo.getUser().getUserId()); + + // 流程发起时 跳过发起人节点 + ProcessInstance processInstance = runtimeService.startProcessInstanceById(procDefId, variables); + // 给第一步申请人节点设置任务执行人和意见 + Task task = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).singleResult(); + if (Objects.nonNull(task)) { + taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), FlowComment.NORMAL.getType(), userInfo.getUser().getName() + "发起流程申请"); + taskService.complete(task.getId(), variables); + } + return Result.okM("流程启动成功"); + } catch (Exception e) { + e.printStackTrace(); + return Result.error("流程启动错误"); + } + } + + + /** + * 激活或挂起流程定义 + * + * @param state 状态 + * @param deployId 流程部署ID + */ + @Override + public void updateState(Integer state, String deployId) { + ProcessDefinition procDef = repositoryService.createProcessDefinitionQuery().deploymentId(deployId).singleResult(); + // 激活 + if (state == 1) { + repositoryService.activateProcessDefinitionById(procDef.getId(), true, null); + } + // 挂起 + if (state == 2) { + repositoryService.suspendProcessDefinitionById(procDef.getId(), true, null); + } + } + + + /** + * 删除流程定义 + * + * @param deployId 流程部署ID act_ge_bytearray 表中 deployment_id值 + */ + @Override + public void delete(String deployId) { + // true 允许级联删除 ,不设置会导致数据库外键关联异常 + repositoryService.deleteDeployment(deployId, true); + } + + +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/service/impl/FlowInstanceServiceImpl.java b/flowable/src/main/java/com/dite/znpt/flowable/service/impl/FlowInstanceServiceImpl.java new file mode 100644 index 0000000..c44b24e --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/service/impl/FlowInstanceServiceImpl.java @@ -0,0 +1,119 @@ +package com.dite.znpt.flowable.service.impl; + + +import cn.dev33.satoken.stp.StpUtil; +import com.dite.znpt.domain.Result; +import com.dite.znpt.flowable.domain.vo.FlowTaskVo; +import com.dite.znpt.flowable.factory.FlowServiceFactory; +import com.dite.znpt.flowable.service.IFlowInstanceService; +import lombok.extern.slf4j.Slf4j; +import org.flowable.common.engine.api.FlowableObjectNotFoundException; +import org.flowable.engine.history.HistoricProcessInstance; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Map; +import java.util.Objects; + +/** + *

工作流流程实例管理

+ * + * @author Tony + * @date 2021-04-03 + */ +@Service +@Slf4j +public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlowInstanceService { + + /** + * 结束流程实例 + * + * @param vo + */ + @Override + public void stopProcessInstance(FlowTaskVo vo) { + String taskId = vo.getTaskId(); + + } + + /** + * 激活或挂起流程实例 + * + * @param state 状态 + * @param instanceId 流程实例ID + */ + @Override + public void updateState(Integer state, String instanceId) { + + // 激活 + if (state == 1) { + runtimeService.activateProcessInstanceById(instanceId); + } + // 挂起 + if (state == 2) { + runtimeService.suspendProcessInstanceById(instanceId); + } + } + + /** + * 删除流程实例ID + * + * @param instanceId 流程实例ID + * @param deleteReason 删除原因 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(String instanceId, String deleteReason) { + + // 查询历史数据 + HistoricProcessInstance historicProcessInstance = getHistoricProcessInstanceById(instanceId); + if (historicProcessInstance.getEndTime() != null) { + historyService.deleteHistoricProcessInstance(historicProcessInstance.getId()); + return; + } + // 删除流程实例 + runtimeService.deleteProcessInstance(instanceId, deleteReason); + // 删除历史流程实例 + historyService.deleteHistoricProcessInstance(instanceId); + } + + /** + * 根据实例ID查询历史实例数据 + * + * @param processInstanceId + * @return + */ + @Override + public HistoricProcessInstance getHistoricProcessInstanceById(String processInstanceId) { + HistoricProcessInstance historicProcessInstance = + historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); + if (Objects.isNull(historicProcessInstance)) { + throw new FlowableObjectNotFoundException("流程实例不存在: " + processInstanceId); + } + return historicProcessInstance; + } + + /** + * 根据流程定义ID启动流程实例 + * + * @param procDefId 流程定义Id + * @param variables 流程变量 + * @return + */ + @Override + public Result startProcessInstanceById(String procDefId, Map variables) { + + try { + // 设置流程发起人Id到流程中 + Long userId = Long.valueOf(StpUtil.getLoginId().toString()); +// identityService.setAuthenticatedUserId(userId.toString()); + variables.put("initiator",userId); + variables.put("_FLOWABLE_SKIP_EXPRESSION_ENABLED", true); + runtimeService.startProcessInstanceById(procDefId, variables); + return Result.ok("流程启动成功"); + } catch (Exception e) { + e.printStackTrace(); + return Result.error("流程启动错误"); + } + } +} \ No newline at end of file diff --git a/flowable/src/main/java/com/dite/znpt/flowable/service/impl/FlowTaskServiceImpl.java b/flowable/src/main/java/com/dite/znpt/flowable/service/impl/FlowTaskServiceImpl.java new file mode 100644 index 0000000..042d53a --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/service/impl/FlowTaskServiceImpl.java @@ -0,0 +1,1266 @@ +package com.dite.znpt.flowable.service.impl; + +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.alibaba.fastjson2.TypeReference; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.dite.znpt.domain.Result; +import com.dite.znpt.flowable.domain.entity.SysForm; +import com.dite.znpt.domain.vo.RoleResp; +import com.dite.znpt.domain.vo.UserInfo; +import com.dite.znpt.domain.vo.UserResp; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.flowable.common.constant.ProcessConstants; +import com.dite.znpt.flowable.common.enums.FlowComment; +import com.dite.znpt.flowable.domain.dto.FlowCommentDto; +import com.dite.znpt.flowable.domain.dto.FlowNextDto; +import com.dite.znpt.flowable.domain.dto.FlowTaskDto; +import com.dite.znpt.flowable.domain.dto.FlowViewerDto; +import com.dite.znpt.flowable.domain.vo.FlowQueryVo; +import com.dite.znpt.flowable.domain.vo.FlowTaskVo; +import com.dite.znpt.flowable.factory.FlowServiceFactory; +import com.dite.znpt.flowable.flow.CustomProcessDiagramGenerator; +import com.dite.znpt.flowable.flow.FindNextNodeUtil; +import com.dite.znpt.flowable.flow.FlowableUtils; +import com.dite.znpt.flowable.service.IFlowTaskService; +import com.dite.znpt.flowable.service.ISysDeployFormService; +import com.dite.znpt.flowable.service.ISysFormService; +import com.dite.znpt.service.RoleService; +import com.dite.znpt.service.UserService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.Process; +import org.flowable.bpmn.model.*; +import org.flowable.common.engine.api.FlowableException; +import org.flowable.common.engine.api.FlowableObjectNotFoundException; +import org.flowable.engine.ProcessEngineConfiguration; +import org.flowable.engine.history.HistoricActivityInstance; +import org.flowable.engine.history.HistoricProcessInstance; +import org.flowable.engine.history.HistoricProcessInstanceQuery; +import org.flowable.engine.impl.cmd.AddMultiInstanceExecutionCmd; +import org.flowable.engine.impl.cmd.DeleteMultiInstanceExecutionCmd; +import org.flowable.engine.repository.ProcessDefinition; +import org.flowable.engine.runtime.Execution; +import org.flowable.engine.runtime.ProcessInstance; +import org.flowable.engine.task.Comment; +import org.flowable.identitylink.api.history.HistoricIdentityLink; +import org.flowable.image.ProcessDiagramGenerator; +import org.flowable.task.api.DelegationState; +import org.flowable.task.api.Task; +import org.flowable.task.api.TaskQuery; +import org.flowable.task.api.history.HistoricTaskInstance; +import org.flowable.task.api.history.HistoricTaskInstanceQuery; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.io.InputStream; +import java.lang.reflect.Field; +import java.nio.charset.StandardCharsets; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +/** + * @author Tony + * @date 2021-04-03 + **/ +@Service +@Slf4j +public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTaskService { + @Resource + private ISysDeployFormService sysInstanceFormService; + @Resource + private ISysFormService sysFormService; + @Resource + private UserService userService; + + @Resource + private RoleService roleService; + + /** + * 完成任务 + * + * @param taskVo 请求实体参数 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public Result complete(FlowTaskVo taskVo) { + Task task = taskService.createTaskQuery().taskId(taskVo.getTaskId()).singleResult(); + if (Objects.isNull(task)) { + return Result.error("任务不存在"); + } + if (DelegationState.PENDING.equals(task.getDelegationState())) { + taskService.addComment(taskVo.getTaskId(), taskVo.getInstanceId(), FlowComment.DELEGATE.getType(), taskVo.getComment()); + taskService.resolveTask(taskVo.getTaskId(), taskVo.getVariables()); + } else { + taskService.addComment(taskVo.getTaskId(), taskVo.getInstanceId(), FlowComment.NORMAL.getType(), taskVo.getComment()); + UserInfo userInfo = (UserInfo) StpUtil.getSession().get("userInfo"); + taskService.setAssignee(taskVo.getTaskId(), userInfo.getUser().getUserId()); + taskService.complete(taskVo.getTaskId(), taskVo.getVariables()); + } + return Result.ok(); + } + + /** + * 驳回任务 + * + * @param flowTaskVo + */ + @Override + public void taskReject(FlowTaskVo flowTaskVo) { + if (taskService.createTaskQuery().taskId(flowTaskVo.getTaskId()).singleResult().isSuspended()) { + throw new ServiceException("任务处于挂起状态!"); + } + // 当前任务 task + Task task = taskService.createTaskQuery().taskId(flowTaskVo.getTaskId()).singleResult(); + // 获取流程定义信息 + ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(task.getProcessDefinitionId()).singleResult(); + // 获取所有节点信息 + Process process = repositoryService.getBpmnModel(processDefinition.getId()).getProcesses().get(0); + // 获取全部节点列表,包含子节点 + Collection allElements = FlowableUtils.getAllElements(process.getFlowElements(), null); + // 获取当前任务节点元素 + FlowElement source = null; + if (allElements != null) { + for (FlowElement flowElement : allElements) { + // 类型为用户节点 + if (flowElement.getId().equals(task.getTaskDefinitionKey())) { + // 获取节点信息 + source = flowElement; + } + } + } + + // 目的获取所有跳转到的节点 targetIds + // 获取当前节点的所有父级用户任务节点 + // 深度优先算法思想:延边迭代深入 + List parentUserTaskList = FlowableUtils.iteratorFindParentUserTasks(source, null, null); + if (parentUserTaskList == null || parentUserTaskList.size() == 0) { + throw new ServiceException("当前节点为初始任务节点,不能驳回"); + } + // 获取活动 ID 即节点 Key + List parentUserTaskKeyList = new ArrayList<>(); + parentUserTaskList.forEach(item -> parentUserTaskKeyList.add(item.getId())); + // 获取全部历史节点活动实例,即已经走过的节点历史,数据采用开始时间升序 + List historicTaskInstanceList = historyService.createHistoricTaskInstanceQuery().processInstanceId(task.getProcessInstanceId()).orderByHistoricTaskInstanceStartTime().asc().list(); + // 数据清洗,将回滚导致的脏数据清洗掉 + List lastHistoricTaskInstanceList = FlowableUtils.historicTaskInstanceClean(allElements, historicTaskInstanceList); + // 此时历史任务实例为倒序,获取最后走的节点 + List targetIds = new ArrayList<>(); + // 循环结束标识,遇到当前目标节点的次数 + int number = 0; + StringBuilder parentHistoricTaskKey = new StringBuilder(); + for (String historicTaskInstanceKey : lastHistoricTaskInstanceList) { + // 当会签时候会出现特殊的,连续都是同一个节点历史数据的情况,这种时候跳过 + if (parentHistoricTaskKey.toString().equals(historicTaskInstanceKey)) { + continue; + } + parentHistoricTaskKey = new StringBuilder(historicTaskInstanceKey); + if (historicTaskInstanceKey.equals(task.getTaskDefinitionKey())) { + number++; + } + // 在数据清洗后,历史节点就是唯一一条从起始到当前节点的历史记录,理论上每个点只会出现一次 + // 在流程中如果出现循环,那么每次循环中间的点也只会出现一次,再出现就是下次循环 + // number == 1,第一次遇到当前节点 + // number == 2,第二次遇到,代表最后一次的循环范围 + if (number == 2) { + break; + } + // 如果当前历史节点,属于父级的节点,说明最后一次经过了这个点,需要退回这个点 + if (parentUserTaskKeyList.contains(historicTaskInstanceKey)) { + targetIds.add(historicTaskInstanceKey); + } + } + + + // 目的获取所有需要被跳转的节点 currentIds + // 取其中一个父级任务,因为后续要么存在公共网关,要么就是串行公共线路 + UserTask oneUserTask = parentUserTaskList.get(0); + // 获取所有正常进行的任务节点 Key,这些任务不能直接使用,需要找出其中需要撤回的任务 + List runTaskList = taskService.createTaskQuery().processInstanceId(task.getProcessInstanceId()).list(); + List runTaskKeyList = new ArrayList<>(); + runTaskList.forEach(item -> runTaskKeyList.add(item.getTaskDefinitionKey())); + // 需驳回任务列表 + List currentIds = new ArrayList<>(); + // 通过父级网关的出口连线,结合 runTaskList 比对,获取需要撤回的任务 + List currentUserTaskList = FlowableUtils.iteratorFindChildUserTasks(oneUserTask, runTaskKeyList, null, null); + currentUserTaskList.forEach(item -> currentIds.add(item.getId())); + + + // 规定:并行网关之前节点必须需存在唯一用户任务节点,如果出现多个任务节点,则并行网关节点默认为结束节点,原因为不考虑多对多情况 + if (targetIds.size() > 1 && currentIds.size() > 1) { + throw new ServiceException("任务出现多对多情况,无法撤回"); + } + + // 循环获取那些需要被撤回的节点的ID,用来设置驳回原因 + List currentTaskIds = new ArrayList<>(); + currentIds.forEach(currentId -> runTaskList.forEach(runTask -> { + if (currentId.equals(runTask.getTaskDefinitionKey())) { + currentTaskIds.add(runTask.getId()); + } + })); + // 设置驳回意见 + currentTaskIds.forEach(item -> taskService.addComment(item, task.getProcessInstanceId(), FlowComment.REJECT.getType(), flowTaskVo.getComment())); + + try { + // 如果父级任务多于 1 个,说明当前节点不是并行节点,原因为不考虑多对多情况 + if (targetIds.size() > 1) { + // 1 对 多任务跳转,currentIds 当前节点(1),targetIds 跳转到的节点(多) + runtimeService.createChangeActivityStateBuilder() + .processInstanceId(task.getProcessInstanceId()). + moveSingleActivityIdToActivityIds(currentIds.get(0), targetIds).changeState(); + } + // 如果父级任务只有一个,因此当前任务可能为网关中的任务 + if (targetIds.size() == 1) { + // 1 对 1 或 多 对 1 情况,currentIds 当前要跳转的节点列表(1或多),targetIds.get(0) 跳转到的节点(1) + runtimeService.createChangeActivityStateBuilder() + .processInstanceId(task.getProcessInstanceId()) + .moveActivityIdsToSingleActivityId(currentIds, targetIds.get(0)).changeState(); + } + } catch (FlowableObjectNotFoundException e) { + throw new ServiceException("未找到流程实例,流程可能已发生变化"); + } catch (FlowableException e) { + throw new ServiceException("无法取消或开始活动"); + } + + } + + /** + * 退回任务 + * + * @param flowTaskVo 请求实体参数 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void taskReturn(FlowTaskVo flowTaskVo) { + if (taskService.createTaskQuery().taskId(flowTaskVo.getTaskId()).singleResult().isSuspended()) { + throw new ServiceException("任务处于挂起状态"); + } + // 当前任务 task + Task task = taskService.createTaskQuery().taskId(flowTaskVo.getTaskId()).singleResult(); + // 获取流程定义信息 + ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(task.getProcessDefinitionId()).singleResult(); + // 获取所有节点信息 + Process process = repositoryService.getBpmnModel(processDefinition.getId()).getProcesses().get(0); + // 获取全部节点列表,包含子节点 + Collection allElements = FlowableUtils.getAllElements(process.getFlowElements(), null); + // 获取当前任务节点元素 + FlowElement source = null; + // 获取跳转的节点元素 + FlowElement target = null; + if (allElements != null) { + for (FlowElement flowElement : allElements) { + // 当前任务节点元素 + if (flowElement.getId().equals(task.getTaskDefinitionKey())) { + source = flowElement; + } + // 跳转的节点元素 + if (flowElement.getId().equals(flowTaskVo.getTargetKey())) { + target = flowElement; + } + } + } + + // 从当前节点向前扫描 + // 如果存在路线上不存在目标节点,说明目标节点是在网关上或非同一路线上,不可跳转 + // 否则目标节点相对于当前节点,属于串行 + Boolean isSequential = FlowableUtils.iteratorCheckSequentialReferTarget(source, flowTaskVo.getTargetKey(), null, null); + if (!isSequential) { + throw new ServiceException("当前节点相对于目标节点,不属于串行关系,无法回退"); + } + + + // 获取所有正常进行的任务节点 Key,这些任务不能直接使用,需要找出其中需要撤回的任务 + List runTaskList = taskService.createTaskQuery().processInstanceId(task.getProcessInstanceId()).list(); + List runTaskKeyList = new ArrayList<>(); + runTaskList.forEach(item -> runTaskKeyList.add(item.getTaskDefinitionKey())); + // 需退回任务列表 + List currentIds = new ArrayList<>(); + // 通过父级网关的出口连线,结合 runTaskList 比对,获取需要撤回的任务 + List currentUserTaskList = FlowableUtils.iteratorFindChildUserTasks(target, runTaskKeyList, null, null); + currentUserTaskList.forEach(item -> currentIds.add(item.getId())); + + // 循环获取那些需要被撤回的节点的ID,用来设置驳回原因 + List currentTaskIds = new ArrayList<>(); + currentIds.forEach(currentId -> runTaskList.forEach(runTask -> { + if (currentId.equals(runTask.getTaskDefinitionKey())) { + currentTaskIds.add(runTask.getId()); + } + })); + // 设置回退意见 + currentTaskIds.forEach(currentTaskId -> taskService.addComment(currentTaskId, task.getProcessInstanceId(), FlowComment.REBACK.getType(), flowTaskVo.getComment())); + + try { + // 1 对 1 或 多 对 1 情况,currentIds 当前要跳转的节点列表(1或多),targetKey 跳转到的节点(1) + runtimeService.createChangeActivityStateBuilder() + .processInstanceId(task.getProcessInstanceId()) + .moveActivityIdsToSingleActivityId(currentIds, flowTaskVo.getTargetKey()).changeState(); + } catch (FlowableObjectNotFoundException e) { + throw new ServiceException("未找到流程实例,流程可能已发生变化"); + } catch (FlowableException e) { + throw new ServiceException("无法取消或开始活动"); + } + } + + + /** + * 获取所有可回退的节点 + * + * @param flowTaskVo + * @return + */ + @Override + public Result findReturnTaskList(FlowTaskVo flowTaskVo) { + // 当前任务 task + Task task = taskService.createTaskQuery().taskId(flowTaskVo.getTaskId()).singleResult(); + // 获取流程定义信息 + ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(task.getProcessDefinitionId()).singleResult(); + // 获取所有节点信息,暂不考虑子流程情况 + Process process = repositoryService.getBpmnModel(processDefinition.getId()).getProcesses().get(0); + Collection flowElements = process.getFlowElements(); + // 获取当前任务节点元素 + UserTask source = null; + if (flowElements != null) { + for (FlowElement flowElement : flowElements) { + // 类型为用户节点 + if (flowElement.getId().equals(task.getTaskDefinitionKey())) { + source = (UserTask) flowElement; + } + } + } + // 获取节点的所有路线 + List> roads = FlowableUtils.findRoad(source, null, null, null); + // 可回退的节点列表 + List userTaskList = new ArrayList<>(); + for (List road : roads) { + if (userTaskList.size() == 0) { + // 还没有可回退节点直接添加 + userTaskList = road; + } else { + // 如果已有回退节点,则比对取交集部分 + userTaskList.retainAll(road); + } + } + return Result.ok(userTaskList); + } + + /** + * 删除任务 + * + * @param flowTaskVo 请求实体参数 + */ + @Override + public void deleteTask(FlowTaskVo flowTaskVo) { + // todo 待确认删除任务是物理删除任务 还是逻辑删除,让这个任务直接通过? + taskService.deleteTask(flowTaskVo.getTaskId(), flowTaskVo.getComment()); + } + + /** + * 认领/签收任务 + * 认领以后,这个用户就会成为任务的执行人,任务会从其他成员的任务列表中消失 + * + * @param flowTaskVo 请求实体参数 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void claim(FlowTaskVo flowTaskVo) { + taskService.claim(flowTaskVo.getTaskId(), flowTaskVo.getUserId()); + } + + /** + * 取消认领/签收任务 + * + * @param flowTaskVo 请求实体参数 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void unClaim(FlowTaskVo flowTaskVo) { + taskService.unclaim(flowTaskVo.getTaskId()); + } + + /** + * 委派任务 + * 任务委派只是委派人将当前的任务交给被委派人进行审批,处理任务后又重新回到委派人身上。 + * + * @param flowTaskVo 请求实体参数 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void delegateTask(FlowTaskVo flowTaskVo) { + taskService.delegateTask(flowTaskVo.getTaskId(), flowTaskVo.getAssignee()); + } + + /** + * 任务归还 + * 被委派人完成任务之后,将任务归还委派人 + * + * @param flowTaskVo 请求实体参数 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void resolveTask(FlowTaskVo flowTaskVo) { + taskService.resolveTask(flowTaskVo.getTaskId()); + } + + + /** + * 转办任务 + * 直接将办理人换成别人,这时任务的拥有者不再是转办人 + * + * @param flowTaskVo 请求实体参数 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void assignTask(FlowTaskVo flowTaskVo) { + // 直接转派就可以覆盖掉之前的 + taskService.setAssignee(flowTaskVo.getTaskId(), flowTaskVo.getAssignee()); +// // 删除指派人重新指派 +// taskService.deleteCandidateUser(flowTaskVo.getTaskId(),flowTaskVo.getAssignee()); +// taskService.addCandidateUser(flowTaskVo.getTaskId(),flowTaskVo.getAssignee()); +// // 如果要查询转给他人处理的任务,可以同时将OWNER进行设置: +// taskService.setOwner(flowTaskVo.getTaskId(), flowTaskVo.getAssignee()); + + } + + /** + * 多实例加签 + * act_ru_task、act_ru_identitylink各生成一条记录 + * + * @param flowTaskVo + */ + @Override + public void addMultiInstanceExecution(FlowTaskVo flowTaskVo) { + managementService.executeCommand(new AddMultiInstanceExecutionCmd(flowTaskVo.getDefId(), flowTaskVo.getInstanceId(), flowTaskVo.getVariables())); + } + + /** + * 多实例减签 + * act_ru_task减1、act_ru_identitylink不变 + * + * @param flowTaskVo + */ + @Override + public void deleteMultiInstanceExecution(FlowTaskVo flowTaskVo) { + managementService.executeCommand(new DeleteMultiInstanceExecutionCmd(flowTaskVo.getCurrentChildExecutionId(), flowTaskVo.getFlag())); + } + + /** + * 我发起的流程 + * + * @param queryVo 请求参数 + * @return + */ + @Override + public Result myProcess(FlowQueryVo queryVo) { + Page page = new Page<>(); + UserInfo userInfo = (UserInfo)StpUtil.getSession().get("userInfo"); + HistoricProcessInstanceQuery historicProcessInstanceQuery = historyService.createHistoricProcessInstanceQuery() + .startedBy(userInfo.getUser().getUserId()) + .orderByProcessInstanceStartTime() + .desc(); + List historicProcessInstances = historicProcessInstanceQuery.listPage(queryVo.getPageSize() * (queryVo.getPageNum() - 1), queryVo.getPageSize()); + page.setTotal(historicProcessInstanceQuery.count()); + List flowList = new ArrayList<>(); + for (HistoricProcessInstance hisIns : historicProcessInstances) { + FlowTaskDto flowTask = new FlowTaskDto(); + flowTask.setCreateTime(hisIns.getStartTime()); + flowTask.setFinishTime(hisIns.getEndTime()); + flowTask.setProcInsId(hisIns.getId()); + + // 计算耗时 + if (Objects.nonNull(hisIns.getEndTime())) { + long time = hisIns.getEndTime().getTime() - hisIns.getStartTime().getTime(); + flowTask.setDuration(getDate(time)); + } else { + long time = System.currentTimeMillis() - hisIns.getStartTime().getTime(); + flowTask.setDuration(getDate(time)); + } + // 流程定义信息 + ProcessDefinition pd = repositoryService.createProcessDefinitionQuery() + .processDefinitionId(hisIns.getProcessDefinitionId()) + .singleResult(); + flowTask.setDeployId(pd.getDeploymentId()); + flowTask.setProcDefName(pd.getName()); + flowTask.setProcDefVersion(pd.getVersion()); + flowTask.setCategory(pd.getCategory()); + flowTask.setProcDefVersion(pd.getVersion()); + // 当前所处流程 + List taskList = taskService.createTaskQuery().processInstanceId(hisIns.getId()).list(); + if (CollectionUtils.isNotEmpty(taskList)) { + flowTask.setTaskId(taskList.get(0).getId()); + flowTask.setTaskName(taskList.get(0).getName()); + if (StringUtils.isNotBlank(taskList.get(0).getAssignee())) { + // 当前任务节点办理人信息 + UserResp user = userService.detail(taskList.get(0).getAssignee()); + if (Objects.nonNull(user)) { + flowTask.setAssigneeId(user.getUserId()); + flowTask.setAssigneeName(user.getName()); + flowTask.setAssigneeDeptName(StrUtil.isNotBlank(user.getDeptName()) ? user.getDeptName() : ""); + } + } + } else { + List historicTaskInstance = historyService.createHistoricTaskInstanceQuery().processInstanceId(hisIns.getId()).orderByHistoricTaskInstanceEndTime().desc().list(); + flowTask.setTaskId(historicTaskInstance.get(0).getId()); + flowTask.setTaskName(historicTaskInstance.get(0).getName()); + if (StringUtils.isNotBlank(historicTaskInstance.get(0).getAssignee())) { + // 当前任务节点办理人信息 + UserResp user = userService.detail(historicTaskInstance.get(0).getAssignee()); + if (Objects.nonNull(user)) { + flowTask.setAssigneeId(user.getUserId()); + flowTask.setAssigneeName(user.getName()); + flowTask.setAssigneeDeptName(StrUtil.isNotBlank(user.getDeptName()) ? user.getDeptName() : ""); + } + } + } + flowList.add(flowTask); + } + page.setRecords(flowList); + return Result.ok(page); + } + + /** + * 取消申请 + * 目前实现方式: 直接将当前流程变更为已完成 + * + * @param flowTaskVo + * @return + */ + @Override + public Result stopProcess(FlowTaskVo flowTaskVo) { + List task = taskService.createTaskQuery().processInstanceId(flowTaskVo.getInstanceId()).list(); + if (CollectionUtils.isEmpty(task)) { + throw new ServiceException("流程未启动或已执行完成,取消申请失败"); + } + // 获取当前流程实例 + ProcessInstance processInstance = runtimeService.createProcessInstanceQuery() + .processInstanceId(flowTaskVo.getInstanceId()) + .singleResult(); + BpmnModel bpmnModel = repositoryService.getBpmnModel(processInstance.getProcessDefinitionId()); + if (Objects.nonNull(bpmnModel)) { + Process process = bpmnModel.getMainProcess(); + List endNodes = process.findFlowElementsOfType(EndEvent.class, false); + if (CollectionUtils.isNotEmpty(endNodes)) { + // TODO 取消流程为什么要设置流程发起人? +// SysUser loginUser = SecurityUtils.getLoginUser().getUser(); +// Authentication.setAuthenticatedUserId(loginUser.getUserId().toString()); + +// taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), FlowComment.STOP.getType(), +// StringUtils.isBlank(flowTaskVo.getComment()) ? "取消申请" : flowTaskVo.getComment()); + // 获取当前流程最后一个节点 + String endId = endNodes.get(0).getId(); + List executions = runtimeService.createExecutionQuery() + .parentId(processInstance.getProcessInstanceId()).list(); + List executionIds = new ArrayList<>(); + executions.forEach(execution -> executionIds.add(execution.getId())); + // 变更流程为已结束状态 + runtimeService.createChangeActivityStateBuilder() + .moveExecutionsToSingleActivityId(executionIds, endId).changeState(); + } + } + + return Result.ok(); + } + + /** + * 撤回流程 目前存在错误 + * + * @param flowTaskVo + * @return + */ + @Override + public Result revokeProcess(FlowTaskVo flowTaskVo) { + Task task = taskService.createTaskQuery() + .processInstanceId(flowTaskVo.getInstanceId()) + .singleResult(); + if (task == null) { + throw new ServiceException("流程未启动或已执行完成,无法撤回"); + } + + UserInfo userInfo = (UserInfo)StpUtil.getSession().get("userInfo"); + List htiList = historyService.createHistoricTaskInstanceQuery() + .processInstanceId(task.getProcessInstanceId()) + .orderByTaskCreateTime() + .asc() + .list(); + String myTaskId = null; + for (HistoricTaskInstance hti : htiList) { + if (userInfo.getUser().getUserId().toString().equals(hti.getAssignee())) { + myTaskId = hti.getId(); + break; + } + } + if (null == myTaskId) { + throw new ServiceException("该任务非当前用户提交,无法撤回"); + } + List historicTaskInstanceList = historyService + .createHistoricTaskInstanceQuery() + .processInstanceId(task.getProcessInstanceId()) + .orderByHistoricTaskInstanceStartTime() + .asc() + .list(); + Iterator it = historicTaskInstanceList.iterator(); + //循环节点,获取当前节点的上一节点的key + String tarKey = ""; + while (it.hasNext()) { + HistoricTaskInstance his = it.next(); + if (!task.getTaskDefinitionKey().equals(his.getTaskDefinitionKey())) { + tarKey = his.getTaskDefinitionKey(); + } + } + // 跳转节点 + runtimeService.createChangeActivityStateBuilder() + .processInstanceId(flowTaskVo.getInstanceId()) + .moveActivityIdTo(task.getTaskDefinitionKey(), tarKey) + .changeState(); + + return Result.ok(); + } + + /** + * 代办任务列表 + * + * @param queryVo 请求参数 + * @return + */ + @Override + public Result todoList(FlowQueryVo queryVo) { + Page page = new Page<>(); + // 只查看自己的数据 + UserInfo userInfo = (UserInfo)StpUtil.getSession().get("userInfo"); + TaskQuery taskQuery = taskService.createTaskQuery() + .active() + .includeProcessVariables() + .taskCandidateGroupIn(userInfo.getRoles().stream().map(role -> role.getRoleId().toString()).collect(Collectors.toList())) + .taskCandidateOrAssigned(userInfo.getUser().getUserId().toString()) + .orderByTaskCreateTime().desc(); + +// TODO 传入名称查询不到数据? + if (StringUtils.isNotBlank(queryVo.getName())) { + taskQuery.processDefinitionNameLike(queryVo.getName()); + } + page.setTotal(taskQuery.count()); + List taskList = taskQuery.listPage(queryVo.getPageSize() * (queryVo.getPageNum() - 1), queryVo.getPageSize()); + List flowList = new ArrayList<>(); + for (Task task : taskList) { + FlowTaskDto flowTask = new FlowTaskDto(); + // 当前流程信息 + flowTask.setTaskId(task.getId()); + flowTask.setTaskDefKey(task.getTaskDefinitionKey()); + flowTask.setCreateTime(task.getCreateTime()); + flowTask.setProcDefId(task.getProcessDefinitionId()); + flowTask.setExecutionId(task.getExecutionId()); + flowTask.setTaskName(task.getName()); + // 流程定义信息 + ProcessDefinition pd = repositoryService.createProcessDefinitionQuery() + .processDefinitionId(task.getProcessDefinitionId()) + .singleResult(); + flowTask.setDeployId(pd.getDeploymentId()); + flowTask.setProcDefName(pd.getName()); + flowTask.setProcDefVersion(pd.getVersion()); + flowTask.setProcInsId(task.getProcessInstanceId()); + + // 流程发起人信息 + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() + .processInstanceId(task.getProcessInstanceId()) + .singleResult(); + UserResp startUser = userService.detail(historicProcessInstance.getStartUserId()); + flowTask.setStartUserId(startUser.getUserId().toString()); + flowTask.setStartUserName(startUser.getName()); + flowTask.setStartDeptName(StrUtil.isNotBlank(startUser.getDeptName()) ? startUser.getDeptName() : ""); + flowList.add(flowTask); + } + + page.setRecords(flowList); + return Result.ok(page); + } + + + /** + * 已办任务列表 + * + * @param queryVo 请求参数 + * @return + */ + @Override + public Result finishedList(FlowQueryVo queryVo) { + Page page = new Page<>(); + UserInfo userInfo = (UserInfo)StpUtil.getSession().get("userInfo"); + HistoricTaskInstanceQuery taskInstanceQuery = historyService.createHistoricTaskInstanceQuery() + .includeProcessVariables() + .finished() + .taskAssignee(userInfo.getUser().getUserId().toString()) + .orderByHistoricTaskInstanceEndTime() + .desc(); + List historicTaskInstanceList = taskInstanceQuery.listPage(queryVo.getPageSize() * (queryVo.getPageNum() - 1), queryVo.getPageSize()); + List hisTaskList = new ArrayList<>(); + for (HistoricTaskInstance histTask : historicTaskInstanceList) { + FlowTaskDto flowTask = new FlowTaskDto(); + // 当前流程信息 + flowTask.setTaskId(histTask.getId()); + // 审批人员信息 + flowTask.setCreateTime(histTask.getCreateTime()); + flowTask.setFinishTime(histTask.getEndTime()); + flowTask.setDuration(getDate(histTask.getDurationInMillis())); + flowTask.setProcDefId(histTask.getProcessDefinitionId()); + flowTask.setTaskDefKey(histTask.getTaskDefinitionKey()); + flowTask.setTaskName(histTask.getName()); + + // 流程定义信息 + ProcessDefinition pd = repositoryService.createProcessDefinitionQuery() + .processDefinitionId(histTask.getProcessDefinitionId()) + .singleResult(); + flowTask.setDeployId(pd.getDeploymentId()); + flowTask.setProcDefName(pd.getName()); + flowTask.setProcDefVersion(pd.getVersion()); + flowTask.setProcInsId(histTask.getProcessInstanceId()); + flowTask.setHisProcInsId(histTask.getProcessInstanceId()); + + // 流程发起人信息 + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() + .processInstanceId(histTask.getProcessInstanceId()) + .singleResult(); + UserResp startUser = userService.detail(historicProcessInstance.getStartUserId()); + flowTask.setStartUserId(startUser.getUserId()); + flowTask.setStartUserName(startUser.getName()); + flowTask.setStartDeptName(StrUtil.isNotBlank(startUser.getDeptName()) ? startUser.getDeptName() : ""); + hisTaskList.add(flowTask); + } + page.setTotal(taskInstanceQuery.count()); + page.setRecords(hisTaskList); + return Result.ok(page); + } + + private static Predicate distinctByKey(Function keyExtractor) { + Set seen = ConcurrentHashMap.newKeySet(); + return t -> seen.add(keyExtractor.apply(t)); + } + + /** + * 流程历史流转记录 + * + * @param procInsId 流程实例Id + * @return + */ + @Override + public Result flowRecord(String procInsId, String deployId) { + Map map = new HashMap(); + if (StringUtils.isNotBlank(procInsId)) { + List list = historyService + .createHistoricActivityInstanceQuery() + .processInstanceId(procInsId) + .orderByHistoricActivityInstanceStartTime() + .desc().list(); + List hisFlowList = new ArrayList<>(); + for (HistoricActivityInstance histIns : list) { + // 展示开始节点 +// if ("startEvent".equals(histIns.getActivityType())) { +// FlowTaskDto flowTask = new FlowTaskDto(); +// // 流程发起人信息 +// HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() +// .processInstanceId(histIns.getProcessInstanceId()) +// .singleResult(); +// SysUser startUser = sysUserService.selectUserById(Long.parseLong(historicProcessInstance.getStartUserId())); +// flowTask.setTaskName(startUser.getNickName() + "(" + startUser.getDept().getDeptName() + ")发起申请"); +// flowTask.setFinishTime(histIns.getEndTime()); +// hisFlowList.add(flowTask); +// } else if ("endEvent".equals(histIns.getActivityType())) { +// FlowTaskDto flowTask = new FlowTaskDto(); +// flowTask.setTaskName(StringUtils.isNotBlank(histIns.getActivityName()) ? histIns.getActivityName() : "结束"); +// flowTask.setFinishTime(histIns.getEndTime()); +// hisFlowList.add(flowTask); +// } else + if (StringUtils.isNotBlank(histIns.getTaskId())) { + FlowTaskDto flowTask = new FlowTaskDto(); + flowTask.setTaskId(histIns.getTaskId()); + flowTask.setTaskName(histIns.getActivityName()); + flowTask.setCreateTime(histIns.getStartTime()); + flowTask.setFinishTime(histIns.getEndTime()); + if (StringUtils.isNotBlank(histIns.getAssignee())) { + UserResp sysUser = userService.detail(histIns.getAssignee()); + flowTask.setAssigneeId(sysUser.getUserId()); + flowTask.setAssigneeName(sysUser.getName()); + flowTask.setDeptName(StrUtil.isNotBlank(sysUser.getDeptName()) ? sysUser.getDeptName() : ""); + } + // 展示审批人员 + List linksForTask = historyService.getHistoricIdentityLinksForTask(histIns.getTaskId()); + StringBuilder stringBuilder = new StringBuilder(); + for (HistoricIdentityLink identityLink : linksForTask) { + // 获选人,候选组/角色(多个) + if ("candidate".equals(identityLink.getType())) { + if (StringUtils.isNotBlank(identityLink.getUserId())) { + UserResp sysUser = userService.detail(identityLink.getUserId()); + stringBuilder.append(sysUser.getName()).append(","); + } + if (StringUtils.isNotBlank(identityLink.getGroupId())) { + RoleResp sysRole = roleService.detail(identityLink.getGroupId()); + stringBuilder.append(sysRole.getRoleName()).append(","); + } + } + } + if (StringUtils.isNotBlank(stringBuilder)) { + flowTask.setCandidate(stringBuilder.substring(0, stringBuilder.length() - 1)); + } + + flowTask.setDuration(histIns.getDurationInMillis() == null || histIns.getDurationInMillis() == 0 ? null : getDate(histIns.getDurationInMillis())); + // 获取意见评论内容 + List commentList = taskService.getProcessInstanceComments(histIns.getProcessInstanceId()); + commentList.forEach(comment -> { + if (histIns.getTaskId().equals(comment.getTaskId())) { + flowTask.setComment(FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); + } + }); + hisFlowList.add(flowTask); + } + } + map.put("flowList", hisFlowList); + } + // 第一次申请获取初始化表单 + if (StringUtils.isNotBlank(deployId)) { + SysForm sysForm = sysInstanceFormService.selectSysDeployFormByDeployId(deployId); + if (Objects.isNull(sysForm)) { + return Result.error("请先配置流程表单"); + } + map.put("formData", JSONObject.parseObject(sysForm.getFormContent())); + } + return Result.ok(map); + } + + /** + * 根据任务ID查询挂载的表单信息 + * + * @param taskId 任务Id + * @return + */ + @Override + public Result getTaskForm(String taskId) { + Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); + SysForm sysForm = sysFormService.selectSysFormById(Long.parseLong(task.getFormKey())); + return Result.ok(sysForm.getFormContent()); + } + + /** + * 获取流程过程图 + * + * @param processId + * @return + */ + @Override + public InputStream diagram(String processId) { + String processDefinitionId; + // 获取当前的流程实例 + ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processId).singleResult(); + // 如果流程已经结束,则得到结束节点 + if (Objects.isNull(processInstance)) { + HistoricProcessInstance pi = historyService.createHistoricProcessInstanceQuery().processInstanceId(processId).singleResult(); + + processDefinitionId = pi.getProcessDefinitionId(); + } else {// 如果流程没有结束,则取当前活动节点 + // 根据流程实例ID获得当前处于活动状态的ActivityId合集 + ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processId).singleResult(); + processDefinitionId = pi.getProcessDefinitionId(); + } + + // 获得活动的节点 + List highLightedFlowList = historyService.createHistoricActivityInstanceQuery().processInstanceId(processId).orderByHistoricActivityInstanceStartTime().asc().list(); + + List highLightedFlows = new ArrayList<>(); + List highLightedNodes = new ArrayList<>(); + //高亮线 + for (HistoricActivityInstance tempActivity : highLightedFlowList) { + if ("sequenceFlow".equals(tempActivity.getActivityType())) { + //高亮线 + highLightedFlows.add(tempActivity.getActivityId()); + } else { + //高亮节点 + highLightedNodes.add(tempActivity.getActivityId()); + } + } + + //获取流程图 + BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId); + ProcessEngineConfiguration configuration = processEngine.getProcessEngineConfiguration(); + //获取自定义图片生成器 + ProcessDiagramGenerator diagramGenerator = new CustomProcessDiagramGenerator(); + InputStream in = diagramGenerator.generateDiagram(bpmnModel, "png", highLightedNodes, highLightedFlows, configuration.getActivityFontName(), + configuration.getLabelFontName(), configuration.getAnnotationFontName(), configuration.getClassLoader(), 1.0, true); + return in; + + } + + /** + * 获取流程执行节点 + * + * @param procInsId 流程实例id + * @return + */ + @Override + public Result getFlowViewer(String procInsId, String executionId) { + List flowViewerList = new ArrayList<>(); + FlowViewerDto flowViewerDto; + // 获取任务开始节点(临时处理方式) + List startNodeList = historyService.createHistoricActivityInstanceQuery() + .processInstanceId(procInsId) + .orderByHistoricActivityInstanceStartTime() + .asc().listPage(0, 3); + for (HistoricActivityInstance startInstance : startNodeList) { + if (!"sequenceFlow".equals(startInstance.getActivityType())) { + flowViewerDto = new FlowViewerDto(); + if (!"sequenceFlow".equals(startInstance.getActivityType())) { + flowViewerDto.setKey(startInstance.getActivityId()); + // 根据流程节点处理时间校验改节点是否已完成 + flowViewerDto.setCompleted(!Objects.isNull(startInstance.getEndTime())); + flowViewerList.add(flowViewerDto); + } + } + } + // 历史节点 + List hisActIns = historyService.createHistoricActivityInstanceQuery() + .executionId(executionId) + .orderByHistoricActivityInstanceStartTime() + .asc().list(); + for (HistoricActivityInstance activityInstance : hisActIns) { + if (!"sequenceFlow".equals(activityInstance.getActivityType())) { + flowViewerDto = new FlowViewerDto(); + flowViewerDto.setKey(activityInstance.getActivityId()); + // 根据流程节点处理时间校验改节点是否已完成 + flowViewerDto.setCompleted(!Objects.isNull(activityInstance.getEndTime())); + flowViewerList.add(flowViewerDto); + } + } + return Result.ok(flowViewerList); + } + + /** + * 获取流程变量 + * + * @param taskId + * @return + */ + @Override + public Result processVariables(String taskId) { + // 流程变量 + HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery().includeProcessVariables().finished().taskId(taskId).singleResult(); + if (Objects.nonNull(historicTaskInstance)) { + return Result.ok(historicTaskInstance.getProcessVariables()); + } else { + Map variables = taskService.getVariables(taskId); + return Result.ok(variables); + } + } + + /** + * 审批任务获取下一节点 + * + * @param flowTaskVo 任务 + * @return + */ + @Override + public Result getNextFlowNode(FlowTaskVo flowTaskVo) { + // Step 1. 获取当前节点并找到下一步节点 + Task task = taskService.createTaskQuery().taskId(flowTaskVo.getTaskId()).singleResult(); + if (Objects.isNull(task)) { + return Result.error("任务不存在或已被审批!"); + } + // Step 2. 获取当前流程所有流程变量(网关节点时需要校验表达式) + Map variables = taskService.getVariables(task.getId()); + List nextUserTask = FindNextNodeUtil.getNextUserTasks(repositoryService, task, variables); + if (CollectionUtils.isEmpty(nextUserTask)) { + return Result.ok("流程已完结!"); + } + return getFlowAttribute(nextUserTask); + } + + /** + * 发起流程获取下一节点 + * + * @param flowTaskVo 任务 + * @return + */ + @Override + public Result getNextFlowNodeByStart(FlowTaskVo flowTaskVo) { + // Step 1. 查找流程定义信息 + ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(flowTaskVo.getDeploymentId()).singleResult(); + if (Objects.isNull(processDefinition)) { + return Result.error("流程信息不存在!"); + } + // Step 2. 获取下一任务节点(网关节点时需要校验表达式) + List nextUserTask = FindNextNodeUtil.getNextUserTasksByStart(repositoryService, processDefinition, flowTaskVo.getVariables()); + if (CollectionUtils.isEmpty(nextUserTask)) { + return Result.error("暂未查找到下一任务,请检查流程设计是否正确!"); + } + return getFlowAttribute(nextUserTask); + } + + + /** + * 获取任务节点属性,包含自定义属性等 + * + * @param nextUserTask + */ + private Result getFlowAttribute(List nextUserTask) { + FlowNextDto flowNextDto = new FlowNextDto(); + for (UserTask userTask : nextUserTask) { + MultiInstanceLoopCharacteristics multiInstance = userTask.getLoopCharacteristics(); + // 会签节点 + if (Objects.nonNull(multiInstance)) { + flowNextDto.setVars(multiInstance.getInputDataItem()); + flowNextDto.setType(ProcessConstants.PROCESS_MULTI_INSTANCE); + flowNextDto.setDataType(ProcessConstants.DYNAMIC); + } else { + // 读取自定义节点属性 判断是否是否需要动态指定任务接收人员、组 + String dataType = userTask.getAttributeValue(ProcessConstants.NAMASPASE, ProcessConstants.PROCESS_CUSTOM_DATA_TYPE); + String userType = userTask.getAttributeValue(ProcessConstants.NAMASPASE, ProcessConstants.PROCESS_CUSTOM_USER_TYPE); + flowNextDto.setVars(ProcessConstants.PROCESS_APPROVAL); + flowNextDto.setType(userType); + flowNextDto.setDataType(dataType); + } + } + return Result.ok(flowNextDto); + } + + /** + * 流程初始化表单 + * + * @param deployId + * @return + */ + @Override + public Result flowFormData(String deployId) { + // 第一次申请获取初始化表单 + if (StringUtils.isNotBlank(deployId)) { + SysForm sysForm = sysInstanceFormService.selectSysDeployFormByDeployId(deployId); + if (Objects.isNull(sysForm)) { + return Result.error("请先配置流程表单!"); + } + return Result.ok(JSONObject.parseObject(sysForm.getFormContent())); + } else { + return Result.error("参数错误!"); + } + } + + /** + * 流程节点信息 + * + * @param procInsId + * @return + */ + @Override + public Result flowXmlAndNode(String procInsId, String deployId) { + try { + List flowViewerList = new ArrayList<>(); + // 获取已经完成的节点 + List listFinished = historyService.createHistoricActivityInstanceQuery() + .processInstanceId(procInsId) + .finished() + .list(); + + // 保存已经完成的流程节点编号 + listFinished.forEach(s -> { + FlowViewerDto flowViewerDto = new FlowViewerDto(); + flowViewerDto.setKey(s.getActivityId()); + flowViewerDto.setCompleted(true); + // 退回节点不进行展示 + if (StringUtils.isBlank(s.getDeleteReason())) { + flowViewerList.add(flowViewerDto); + } + }); + + // 获取代办节点 + List listUnFinished = historyService.createHistoricActivityInstanceQuery() + .processInstanceId(procInsId) + .unfinished() + .list(); + + // 保存需要代办的节点编号 + listUnFinished.forEach(s -> { + // 删除已退回节点 + flowViewerList.removeIf(task -> task.getKey().equals(s.getActivityId())); + FlowViewerDto flowViewerDto = new FlowViewerDto(); + flowViewerDto.setKey(s.getActivityId()); + flowViewerDto.setCompleted(false); + flowViewerList.add(flowViewerDto); + }); + Map result = new HashMap(); + // xmlData 数据 + ProcessDefinition definition = repositoryService.createProcessDefinitionQuery().deploymentId(deployId).singleResult(); + InputStream inputStream = repositoryService.getResourceAsStream(definition.getDeploymentId(), definition.getResourceName()); + String xmlData = IOUtils.toString(inputStream, StandardCharsets.UTF_8); + result.put("nodeData", flowViewerList); + result.put("xmlData", xmlData); + return Result.ok(result); + } catch (Exception e) { + return Result.error("高亮历史任务失败"); + } + } + + /** + * 流程节点表单 + * + * @param taskId 流程任务编号 + * @return + */ + @Override + public Result flowTaskForm(String taskId) throws Exception { + Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); + // 流程变量 + Map parameters = new HashMap<>(); + HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery().includeProcessVariables().finished().taskId(taskId).singleResult(); + if (Objects.nonNull(historicTaskInstance)) { + parameters = historicTaskInstance.getProcessVariables(); + } else { + parameters = taskService.getVariables(taskId); + } + JSONObject oldVariables = JSONObject.parseObject(JSON.toJSONString(parameters.get("formJson"))); + List oldFields = JSON.parseObject(JSON.toJSONString(oldVariables.get("widgetList")), new TypeReference>() { + }); + // 设置已填写的表单为禁用状态 + for (JSONObject oldField : oldFields) { + JSONObject options = oldField.getJSONObject("options"); + options.put("disabled", true); + } + // TODO 暂时只处理用户任务上的表单 + if (StringUtils.isNotBlank(task.getFormKey())) { + SysForm sysForm = sysFormService.selectSysFormById(Long.parseLong(task.getFormKey())); + JSONObject data = JSONObject.parseObject(sysForm.getFormContent()); + List newFields = JSON.parseObject(JSON.toJSONString(data.get("widgetList")), new TypeReference>() { + }); + // 表单回显时 加入子表单信息到流程变量中 + for (JSONObject newField : newFields) { + String key = newField.getString("id"); + // 处理图片上传组件回显问题 + if ("picture-upload".equals(newField.getString("type"))) { + parameters.put(key, new ArrayList<>()); + } else { + parameters.put(key, null); + } + } + oldFields.addAll(newFields); + } + oldVariables.put("widgetList", oldFields); + parameters.put("formJson", oldVariables); + return Result.ok(parameters); + } + + /** + * 流程节点信息 + * + * @param procInsId + * @param elementId + * @return + */ + @Override + public Result flowTaskInfo(String procInsId, String elementId) { + List list = historyService.createHistoricActivityInstanceQuery() + .processInstanceId(procInsId) + .activityId(elementId) + .list(); + // 退回任务后有多条数据 只取待办任务进行展示 + list.removeIf(task -> StringUtils.isNotBlank(task.getDeleteReason())); + if (CollectionUtils.isEmpty(list)) { + return Result.ok(); + } + if (list.size() > 1) { + list.removeIf(task -> Objects.nonNull(task.getEndTime())); + } + HistoricActivityInstance histIns = list.get(0); + FlowTaskDto flowTask = new FlowTaskDto(); + flowTask.setTaskId(histIns.getTaskId()); + flowTask.setTaskName(histIns.getActivityName()); + flowTask.setCreateTime(histIns.getStartTime()); + flowTask.setFinishTime(histIns.getEndTime()); + if (StringUtils.isNotBlank(histIns.getAssignee())) { + UserResp sysUser = userService.detail(histIns.getAssignee()); + flowTask.setAssigneeId(sysUser.getUserId()); + flowTask.setAssigneeName(sysUser.getName()); + flowTask.setDeptName(StrUtil.isNotBlank(sysUser.getDeptName()) ? sysUser.getDeptName() : ""); + + } + // 流程变量信息 +// HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery() +// .includeProcessVariables().finished().taskId(histIns.getTaskId()).singleResult(); +// flowTask.setVariables(historicTaskInstance.getProcessVariables()); + + // 展示审批人员 + List linksForTask = historyService.getHistoricIdentityLinksForTask(histIns.getTaskId()); + StringBuilder stringBuilder = new StringBuilder(); + for (HistoricIdentityLink identityLink : linksForTask) { + // 获选人,候选组/角色(多个) + if ("candidate".equals(identityLink.getType())) { + if (StringUtils.isNotBlank(identityLink.getUserId())) { + UserResp sysUser = userService.detail(identityLink.getUserId()); + stringBuilder.append(sysUser.getName()).append(","); + } + if (StringUtils.isNotBlank(identityLink.getGroupId())) { + RoleResp sysRole = roleService.detail(identityLink.getGroupId()); + stringBuilder.append(sysRole.getRoleName()).append(","); + } + } + } + if (StringUtils.isNotBlank(stringBuilder)) { + flowTask.setCandidate(stringBuilder.substring(0, stringBuilder.length() - 1)); + } + + flowTask.setDuration(histIns.getDurationInMillis() == null || histIns.getDurationInMillis() == 0 ? null : getDate(histIns.getDurationInMillis())); + // 获取意见评论内容 + List commentList = taskService.getProcessInstanceComments(histIns.getProcessInstanceId()); + commentList.forEach(comment -> { + if (histIns.getTaskId().equals(comment.getTaskId())) { + flowTask.setComment(FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); + } + }); + return Result.ok(flowTask); + } + + /** + * 将Object类型的数据转化成Map + * + * @param obj + * @return + * @throws Exception + */ + public Map obj2Map(Object obj) throws Exception { + Map map = new HashMap(); + Field[] fields = obj.getClass().getDeclaredFields(); + for (Field field : fields) { + field.setAccessible(true); + map.put(field.getName(), field.get(obj)); + } + return map; + } + + /** + * 流程完成时间处理 + * + * @param ms + * @return + */ + private String getDate(long ms) { + + long day = ms / (24 * 60 * 60 * 1000); + long hour = (ms / (60 * 60 * 1000) - day * 24); + long minute = ((ms / (60 * 1000)) - day * 24 * 60 - hour * 60); + long second = (ms / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - minute * 60); + + if (day > 0) { + return day + "天" + hour + "小时" + minute + "分钟"; + } + if (hour > 0) { + return hour + "小时" + minute + "分钟"; + } + if (minute > 0) { + return minute + "分钟"; + } + if (second > 0) { + return second + "秒"; + } else { + return 0 + "秒"; + } + } +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/service/impl/SysDeployFormServiceImpl.java b/flowable/src/main/java/com/dite/znpt/flowable/service/impl/SysDeployFormServiceImpl.java new file mode 100644 index 0000000..31a2a0a --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/service/impl/SysDeployFormServiceImpl.java @@ -0,0 +1,112 @@ +package com.dite.znpt.flowable.service.impl; + +import java.util.List; +import java.util.Objects; + +import com.dite.znpt.flowable.domain.entity.SysDeployForm; +import com.dite.znpt.flowable.domain.entity.SysForm; +import com.dite.znpt.flowable.service.ISysDeployFormService; +import com.dite.znpt.flowable.mapper.SysDeployFormMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * 流程实例关联表单Service业务层处理 + * + * @author Tony + * @date 2021-04-03 + */ +@Service +public class SysDeployFormServiceImpl implements ISysDeployFormService { + + @Autowired + private SysDeployFormMapper sysDeployFormMapper; + + /** + * 查询流程实例关联表单 + * + * @param id 流程实例关联表单ID + * @return 流程实例关联表单 + */ + @Override + public SysDeployForm selectSysDeployFormById(Long id) + { + return sysDeployFormMapper.selectSysDeployFormById(id); + } + + /** + * 查询流程实例关联表单列表 + * + * @param sysDeployForm 流程实例关联表单 + * @return 流程实例关联表单 + */ + @Override + public List selectSysDeployFormList(SysDeployForm sysDeployForm) + { + return sysDeployFormMapper.selectSysDeployFormList(sysDeployForm); + } + + /** + * 新增流程实例关联表单 + * + * @param sysDeployForm 流程实例关联表单 + * @return 结果 + */ + @Override + public int insertSysDeployForm(SysDeployForm sysDeployForm) + { + SysForm sysForm = sysDeployFormMapper.selectSysDeployFormByDeployId(sysDeployForm.getDeployId()); + if (Objects.isNull(sysForm)) { + return sysDeployFormMapper.insertSysDeployForm(sysDeployForm); + }else { + return 1; + } + } + + /** + * 修改流程实例关联表单 + * + * @param sysDeployForm 流程实例关联表单 + * @return 结果 + */ + @Override + public int updateSysDeployForm(SysDeployForm sysDeployForm) + { + return sysDeployFormMapper.updateSysDeployForm(sysDeployForm); + } + + /** + * 批量删除流程实例关联表单 + * + * @param ids 需要删除的流程实例关联表单ID + * @return 结果 + */ + @Override + public int deleteSysDeployFormByIds(Long[] ids) + { + return sysDeployFormMapper.deleteSysDeployFormByIds(ids); + } + + /** + * 删除流程实例关联表单信息 + * + * @param id 流程实例关联表单ID + * @return 结果 + */ + @Override + public int deleteSysDeployFormById(Long id) + { + return sysDeployFormMapper.deleteSysDeployFormById(id); + } + + /** + * 查询流程挂着的表单 + * + * @param deployId + * @return + */ + @Override + public SysForm selectSysDeployFormByDeployId(String deployId) { + return sysDeployFormMapper.selectSysDeployFormByDeployId(deployId); + } +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/service/impl/SysExpressionServiceImpl.java b/flowable/src/main/java/com/dite/znpt/flowable/service/impl/SysExpressionServiceImpl.java new file mode 100644 index 0000000..546081c --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/service/impl/SysExpressionServiceImpl.java @@ -0,0 +1,97 @@ +package com.dite.znpt.flowable.service.impl; + +import com.dite.znpt.flowable.domain.entity.SysExpression; +import com.dite.znpt.flowable.mapper.SysExpressionMapper; +import com.dite.znpt.flowable.service.ISysExpressionService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * 流程达式Service业务层处理 + * + * @author ruoyi + * @date 2022-12-12 + */ +@Service +public class SysExpressionServiceImpl implements ISysExpressionService +{ + @Autowired + private SysExpressionMapper sysExpressionMapper; + + /** + * 查询流程达式 + * + * @param id 流程达式主键 + * @return 流程达式 + */ + @Override + public SysExpression selectSysExpressionById(Long id) + { + return sysExpressionMapper.selectSysExpressionById(id); + } + + /** + * 查询流程达式列表 + * + * @param sysExpression 流程达式 + * @return 流程达式 + */ + @Override + public List selectSysExpressionList(SysExpression sysExpression) + { + return sysExpressionMapper.selectSysExpressionList(sysExpression); + } + + /** + * 新增流程达式 + * + * @param sysExpression 流程达式 + * @return 结果 + */ + @Override + public int insertSysExpression(SysExpression sysExpression) + { + sysExpression.setCreateTime(LocalDateTime.now()); + return sysExpressionMapper.insertSysExpression(sysExpression); + } + + /** + * 修改流程达式 + * + * @param sysExpression 流程达式 + * @return 结果 + */ + @Override + public int updateSysExpression(SysExpression sysExpression) + { + sysExpression.setUpdateTime(LocalDateTime.now()); + return sysExpressionMapper.updateSysExpression(sysExpression); + } + + /** + * 批量删除流程达式 + * + * @param ids 需要删除的流程达式主键 + * @return 结果 + */ + @Override + public int deleteSysExpressionByIds(Long[] ids) + { + return sysExpressionMapper.deleteSysExpressionByIds(ids); + } + + /** + * 删除流程达式信息 + * + * @param id 流程达式主键 + * @return 结果 + */ + @Override + public int deleteSysExpressionById(Long id) + { + return sysExpressionMapper.deleteSysExpressionById(id); + } +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/service/impl/SysFormServiceImpl.java b/flowable/src/main/java/com/dite/znpt/flowable/service/impl/SysFormServiceImpl.java new file mode 100644 index 0000000..7a3f6ce --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/service/impl/SysFormServiceImpl.java @@ -0,0 +1,97 @@ +package com.dite.znpt.flowable.service.impl; + +import java.time.LocalDateTime; +import java.util.List; + +import com.dite.znpt.flowable.domain.entity.SysForm; +import com.dite.znpt.flowable.service.ISysFormService; +import com.dite.znpt.flowable.mapper.SysFormMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * 流程表单Service业务层处理 + * + * @author Tony + * @date 2021-04-03 + */ +@Service +public class SysFormServiceImpl implements ISysFormService +{ + @Autowired + private SysFormMapper sysFormMapper; + + /** + * 查询流程表单 + * + * @param formId 流程表单ID + * @return 流程表单 + */ + @Override + public SysForm selectSysFormById(Long formId) + { + return sysFormMapper.selectSysFormById(formId); + } + + /** + * 查询流程表单列表 + * + * @param sysForm 流程表单 + * @return 流程表单 + */ + @Override + public List selectSysFormList(SysForm sysForm) + { + return sysFormMapper.selectSysFormList(sysForm); + } + + /** + * 新增流程表单 + * + * @param sysForm 流程表单 + * @return 结果 + */ + @Override + public int insertSysForm(SysForm sysForm) + { + sysForm.setCreateTime(LocalDateTime.now()); + return sysFormMapper.insertSysForm(sysForm); + } + + /** + * 修改流程表单 + * + * @param sysForm 流程表单 + * @return 结果 + */ + @Override + public int updateSysForm(SysForm sysForm) + { + sysForm.setUpdateTime(LocalDateTime.now()); + return sysFormMapper.updateSysForm(sysForm); + } + + /** + * 批量删除流程表单 + * + * @param formIds 需要删除的流程表单ID + * @return 结果 + */ + @Override + public int deleteSysFormByIds(Long[] formIds) + { + return sysFormMapper.deleteSysFormByIds(formIds); + } + + /** + * 删除流程表单信息 + * + * @param formId 流程表单ID + * @return 结果 + */ + @Override + public int deleteSysFormById(Long formId) + { + return sysFormMapper.deleteSysFormById(formId); + } +} diff --git a/flowable/src/main/java/com/dite/znpt/flowable/service/impl/SysListenerServiceImpl.java b/flowable/src/main/java/com/dite/znpt/flowable/service/impl/SysListenerServiceImpl.java new file mode 100644 index 0000000..d8de902 --- /dev/null +++ b/flowable/src/main/java/com/dite/znpt/flowable/service/impl/SysListenerServiceImpl.java @@ -0,0 +1,97 @@ +package com.dite.znpt.flowable.service.impl; + +import com.dite.znpt.flowable.domain.entity.SysListener; +import com.dite.znpt.flowable.mapper.SysListenerMapper; +import com.dite.znpt.flowable.service.ISysListenerService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * 流程监听Service业务层处理 + * + * @author Tony + * @date 2022-12-25 + */ +@Service +public class SysListenerServiceImpl implements ISysListenerService +{ + @Autowired + private SysListenerMapper sysListenerMapper; + + /** + * 查询流程监听 + * + * @param id 流程监听主键 + * @return 流程监听 + */ + @Override + public SysListener selectSysListenerById(Long id) + { + return sysListenerMapper.selectSysListenerById(id); + } + + /** + * 查询流程监听列表 + * + * @param sysListener 流程监听 + * @return 流程监听 + */ + @Override + public List selectSysListenerList(SysListener sysListener) + { + return sysListenerMapper.selectSysListenerList(sysListener); + } + + /** + * 新增流程监听 + * + * @param sysListener 流程监听 + * @return 结果 + */ + @Override + public int insertSysListener(SysListener sysListener) + { + sysListener.setCreateTime(LocalDateTime.now()); + return sysListenerMapper.insertSysListener(sysListener); + } + + /** + * 修改流程监听 + * + * @param sysListener 流程监听 + * @return 结果 + */ + @Override + public int updateSysListener(SysListener sysListener) + { + sysListener.setUpdateTime(LocalDateTime.now()); + return sysListenerMapper.updateSysListener(sysListener); + } + + /** + * 批量删除流程监听 + * + * @param ids 需要删除的流程监听主键 + * @return 结果 + */ + @Override + public int deleteSysListenerByIds(Long[] ids) + { + return sysListenerMapper.deleteSysListenerByIds(ids); + } + + /** + * 删除流程监听信息 + * + * @param id 流程监听主键 + * @return 结果 + */ + @Override + public int deleteSysListenerById(Long id) + { + return sysListenerMapper.deleteSysListenerById(id); + } +} diff --git a/flowable/src/main/resources/mapper/FlowDeployMapper.xml b/flowable/src/main/resources/mapper/FlowDeployMapper.xml new file mode 100644 index 0000000..e42c58e --- /dev/null +++ b/flowable/src/main/resources/mapper/FlowDeployMapper.xml @@ -0,0 +1,26 @@ + + + + + + diff --git a/flowable/src/main/resources/mapper/SysDeployFormMapper.xml b/flowable/src/main/resources/mapper/SysDeployFormMapper.xml new file mode 100644 index 0000000..9464e6f --- /dev/null +++ b/flowable/src/main/resources/mapper/SysDeployFormMapper.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + select id, form_id, deploy_id from sys_deploy_form + + + + + + + + + + insert into sys_deploy_form + + form_id, + deploy_id, + + + #{formId}, + #{deployId}, + + + + + update sys_deploy_form + + form_id = #{formId}, + deploy_id = #{deployId}, + + where id = #{id} + + + + delete from sys_deploy_form where id = #{id} + + + + delete from sys_deploy_form where id in + + #{id} + + + \ No newline at end of file diff --git a/flowable/src/main/resources/mapper/SysExpressionMapper.xml b/flowable/src/main/resources/mapper/SysExpressionMapper.xml new file mode 100644 index 0000000..dc64db1 --- /dev/null +++ b/flowable/src/main/resources/mapper/SysExpressionMapper.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + select id, name, expression, data_type,create_time, update_time, create_by, update_by, status, remark from sys_expression + + + + + + + + insert into sys_expression + + name, + expression, + data_type, + create_time, + update_time, + create_by, + update_by, + status, + remark, + + + #{name}, + #{expression}, + #{dataType}, + #{createTime}, + #{updateTime}, + #{createBy}, + #{updateBy}, + #{status}, + #{remark}, + + + + + update sys_expression + + name = #{name}, + expression = #{expression}, + data_type = #{dataType}, + create_time = #{createTime}, + update_time = #{updateTime}, + create_by = #{createBy}, + update_by = #{updateBy}, + status = #{status}, + remark = #{remark}, + + where id = #{id} + + + + delete from sys_expression where id = #{id} + + + + delete from sys_expression where id in + + #{id} + + + diff --git a/flowable/src/main/resources/mapper/SysFormMapper.xml b/flowable/src/main/resources/mapper/SysFormMapper.xml new file mode 100644 index 0000000..48d5024 --- /dev/null +++ b/flowable/src/main/resources/mapper/SysFormMapper.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + select form_id, form_name, form_content, create_time, update_time, create_by, update_by, remark from sys_form + + + + + + + + insert into sys_form + + form_name, + form_content, + create_time, + update_time, + create_by, + update_by, + remark, + + + #{formName}, + #{formContent}, + #{createTime}, + #{updateTime}, + #{createBy}, + #{updateBy}, + #{remark}, + + + + + update sys_form + + form_name = #{formName}, + form_content = #{formContent}, + create_time = #{createTime}, + update_time = #{updateTime}, + create_by = #{createBy}, + update_by = #{updateBy}, + remark = #{remark}, + + where form_id = #{formId} + + + + delete from sys_form where form_id = #{formId} + + + + delete from sys_form where form_id in + + #{formId} + + + \ No newline at end of file diff --git a/flowable/src/main/resources/mapper/SysListenerMapper.xml b/flowable/src/main/resources/mapper/SysListenerMapper.xml new file mode 100644 index 0000000..f3c906a --- /dev/null +++ b/flowable/src/main/resources/mapper/SysListenerMapper.xml @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + select id, + name, + type, + event_type, + value_type, + value, + create_time, + update_time, + create_by, + update_by, + status, + remark + from sys_listener + + + + + + + + insert into sys_listener + + name, + type, + event_type, + value_type, + value, + create_time, + update_time, + create_by, + update_by, + status, + remark, + + + #{name}, + #{type}, + #{eventType}, + #{valueType}, + #{value}, + #{createTime}, + #{updateTime}, + #{createBy}, + #{updateBy}, + #{status}, + #{remark}, + + + + + update sys_listener + + name = #{name}, + type = #{type}, + event_type = #{eventType}, + value_type = #{valueType}, + value = #{value}, + create_time = #{createTime}, + update_time = #{updateTime}, + create_by = #{createBy}, + update_by = #{updateBy}, + status = #{status}, + remark = #{remark}, + + where id = #{id} + + + + delete + from sys_listener + where id = #{id} + + + + delete from sys_listener where id in + + #{id} + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..87d23f2 --- /dev/null +++ b/pom.xml @@ -0,0 +1,54 @@ + + + 4.0.0 + + com.dite.znpt + parent + 1.0.0-SNAPSHOT + + + 17 + + + core + sip + web + flowable + + pom + + + + + + org.springframework.boot + spring-boot-starter-parent + 2.7.18 + pom + import + + + + cn.hutool + hutool-all + 5.8.24 + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + 17 + 17 + + + + + + diff --git a/web/pom.xml b/web/pom.xml new file mode 100644 index 0000000..c6d6423 --- /dev/null +++ b/web/pom.xml @@ -0,0 +1,60 @@ + + + 4.0.0 + + com.dite.znpt + parent + 1.0.0-SNAPSHOT + + + web + 1.0.0-SNAPSHOT + jar + + + 17 + 17 + UTF-8 + + + + + com.dite.znpt + sip + 1.0.0-SNAPSHOT + + + com.dite.znpt + core + 1.0.0-SNAPSHOT + + + + + + + + + + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + diff --git a/web/src/main/java/com/dite/znpt/web/DiteApplication.java b/web/src/main/java/com/dite/znpt/web/DiteApplication.java new file mode 100644 index 0000000..0cd3f52 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/DiteApplication.java @@ -0,0 +1,21 @@ +package com.dite.znpt.web; + +import cn.hutool.extra.spring.EnableSpringUtil; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableScheduling; + +@SpringBootApplication +@MapperScan("com.dite.**.mapper") +@ComponentScan(basePackages = {"com.dite"}) +@EnableSpringUtil +@EnableScheduling +public class DiteApplication { + + public static void main(String[] args) { + SpringApplication.run(DiteApplication.class, args); + } + +} diff --git a/web/src/main/java/com/dite/znpt/web/build/DeployController.java b/web/src/main/java/com/dite/znpt/web/build/DeployController.java new file mode 100644 index 0000000..626dbd8 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/build/DeployController.java @@ -0,0 +1,191 @@ +package com.dite.znpt.web.build; + +import cn.hutool.core.util.StrUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; + +@Api(tags = "webhook自动部署") +@RestController +public class DeployController { + + @Value("${deploy.secret}") + private String webhookSecret; + + @Value("${deploy.build-dir}") + private String buildDir; + + private Process deploymentProcess; + private final GiteeSignatureVerifier signatureVerifier = new GiteeSignatureVerifier(); + + @ApiOperation(value = "自动部署", httpMethod = "POST") + @PostMapping("/gitee-webhook") + public ResponseEntity handleWebhook( + @RequestHeader(value = "X-Gitee-Token", required = false) String receivedSignature, + @RequestHeader(value = "X-Gitee-Timestamp", required = false) String timestamp, + @RequestBody String payload) { + + // 0. 基本验证 + if (!StrUtil.isAllNotBlank(receivedSignature, timestamp)) { + return ResponseEntity.status(403).body("签名验证失败"); + } + + // 1. 验证签名 + if (!signatureVerifier.verifySignature(receivedSignature, timestamp, payload, webhookSecret)) { + System.out.println("签名验证失败"); + return ResponseEntity.status(403).body("签名验证失败"); + } + + // 2. 启动部署流程 + startDeployment(); + + return ResponseEntity.ok("部署流程已启动"); + } + + @ApiOperation(value = "gitea自动部署", httpMethod = "POST") + @PostMapping("/gitea-webhook") + public ResponseEntity handleWebhook(@RequestHeader("X-Gitea-Signature") String signature, + @RequestBody(required = false) byte[] body) { + + // 1. 签名校验 + if (!validSignature(body, signature)) { + return ResponseEntity.status(403).body("签名验证失败"); + } + + // 2. 启动部署流程 + startDeployment(); + + return ResponseEntity.ok("部署流程已启动"); + } + + private boolean validSignature(byte[] body, String sigHeader) { + if (sigHeader == null) return false; + try { + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(new SecretKeySpec(webhookSecret.getBytes(StandardCharsets.UTF_8), "HmacSHA256")); + String computed = bytesToHex(mac.doFinal(body)); + return computed.equalsIgnoreCase(sigHeader); // 不区分大小写 + } catch (Exception e) { + return false; + } + } + + private String bytesToHex(byte[] bytes) { + StringBuilder sb = new StringBuilder(); + for (byte b : bytes) sb.append(String.format("%02x", b)); + return sb.toString(); + } + + @ApiOperation(value = "查询自动部署状态", httpMethod = "GET") + @GetMapping("/deployment-status") + public ResponseEntity getDeploymentStatus() { + try { + Path statusFile = Path.of(buildDir, "deployment-status.txt"); + if (!Files.exists(statusFile)) { + return ResponseEntity.ok("尚未开始部署"); + } + + String statusContent = Files.readString(statusFile); + return ResponseEntity.ok(statusContent); + } catch (Exception e) { + return ResponseEntity.status(500).body("状态读取错误: " + e.getMessage()); + } + } + + @ApiOperation(value = "查询自动部署日志", httpMethod = "GET") + @GetMapping("/deployment-log") + public ResponseEntity getDeploymentLog( + @RequestParam(defaultValue = "100") int lines) { + try { + Path logFile = Path.of(buildDir, "deploy.log"); + if (!Files.exists(logFile)) { + return ResponseEntity.ok("无可用日志"); + } + + String logContent; + if (lines > 0) { + logContent = tail(logFile, lines); + } else { + logContent = Files.readString(logFile); + } + + return ResponseEntity.ok("
" + logContent + "
"); + } catch (Exception e) { + return ResponseEntity.status(500).body("日志读取错误: " + e.getMessage()); + } + } + + private synchronized void startDeployment() { + // 防止重复部署 + if (deploymentProcess != null && deploymentProcess.isAlive()) { + return; + } + + try { + // 启动部署脚本 + ProcessBuilder builder = new ProcessBuilder("./deploy.sh"); + builder.directory(new File(buildDir)); + builder.redirectErrorStream(true); + + deploymentProcess = builder.start(); + + // 启动日志监控线程 + new Thread(() -> { + try (BufferedReader reader = new BufferedReader( + new InputStreamReader(deploymentProcess.getInputStream()))) { + + while (deploymentProcess.isAlive()) { + String line = reader.readLine(); + if (line != null) { + System.out.println("[DEPLOY] " + line); + } + } + + int exitCode = deploymentProcess.waitFor(); + System.out.println("部署进程结束,状态码: " + exitCode); + deploymentProcess = null; + + } catch (Exception e) { + System.err.println("部署日志读取错误: " + e.getMessage()); + } + }).start(); + + } catch (Exception e) { + System.err.println("启动部署脚本失败: " + e.getMessage()); + try { + Files.writeString(Path.of(buildDir, "deployment-status.txt"), + "START_FAILED - " + e.getMessage()); + } catch (Exception ex) { + // 忽略 + } + } + } + + private String tail(Path path, int lines) throws IOException { + ProcessBuilder builder = new ProcessBuilder("tail", "-n", String.valueOf(lines), path.toString()); + Process process = builder.start(); + + StringBuilder output = new StringBuilder(); + try (BufferedReader reader = new BufferedReader( + new InputStreamReader(process.getInputStream()))) { + + String line; + while ((line = reader.readLine()) != null) { + output.append(line).append("\n"); + } + } + return output.toString(); + } +} diff --git a/web/src/main/java/com/dite/znpt/web/build/GiteeSignatureVerifier.java b/web/src/main/java/com/dite/znpt/web/build/GiteeSignatureVerifier.java new file mode 100644 index 0000000..e2f6955 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/build/GiteeSignatureVerifier.java @@ -0,0 +1,82 @@ +package com.dite.znpt.web.build; + +import cn.hutool.core.codec.Base64Encoder; +import cn.hutool.core.net.URLEncodeUtil; +import lombok.extern.slf4j.Slf4j; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.nio.charset.StandardCharsets; +import java.time.Instant; + +@Slf4j +public class GiteeSignatureVerifier { + + private static final long MAX_TIME_DIFF = 3600 * 1000; // 1小时(毫秒) + + public boolean verifySignature(String receivedSignature, + String receivedTimestamp, + String payload, + String secret) { + // 1. 验证时间有效性(避免重放攻击) + if (!validateTimestamp(receivedTimestamp)) { + log.debug("时间戳超出允许范围"); + return false; + } + + // 2. 计算期望签名 + String computedSignature = computeSignature( + receivedTimestamp, + payload, + secret + ); + + // 3. 安全比较签名(防止时序攻击) + return constantTimeEquals(receivedSignature, computedSignature); + } + + private boolean validateTimestamp(String timestampStr) { + try { + long timestamp = Long.parseLong(timestampStr); + long currentTime = Instant.now().toEpochMilli(); + return Math.abs(currentTime - timestamp) < MAX_TIME_DIFF; + } catch (NumberFormatException e) { + log.debug("无效的时间戳格式: {}", timestampStr); + return false; + } + } + + private String computeSignature(String timestamp, String payload, String secret) { + try { + // Step 1: HMAC-SHA256(ts + "\n" + secret) + String data = timestamp + "\n" + secret; + Mac hmac = Mac.getInstance("HmacSHA256"); + SecretKeySpec keySpec = new SecretKeySpec( + secret.getBytes(StandardCharsets.UTF_8), + "HmacSHA256" + ); + hmac.init(keySpec); + byte[] rawSignature = hmac.doFinal(data.getBytes(StandardCharsets.UTF_8)); + + // Step 2: Base64 encode + String base64Sig = Base64Encoder.encode(rawSignature); + + // Step 3: URL encode + return URLEncodeUtil.encode(base64Sig); + } catch (Exception e) { + throw new RuntimeException("签名计算失败", e); + } + } + + // 防止时序攻击的安全字符串比较 + private boolean constantTimeEquals(String a, String b) { + if (a == null || b == null || a.length() != b.length()) { + return false; + } + int result = 0; + for (int i = 0; i < a.length(); i++) { + result |= a.charAt(i) ^ b.charAt(i); + } + return result == 0; + } +} diff --git a/web/src/main/java/com/dite/znpt/web/controller/AttachInfoController.java b/web/src/main/java/com/dite/znpt/web/controller/AttachInfoController.java new file mode 100644 index 0000000..921bbb7 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/AttachInfoController.java @@ -0,0 +1,38 @@ +package com.dite.znpt.web.controller; + +import com.dite.znpt.domain.vo.AttachInfoReq; +import com.dite.znpt.service.AttachInfoService; +import com.dite.znpt.domain.Result; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + */ +@Api(tags = "附件信息") +@RestController +@RequestMapping("/attach-info") +public class AttachInfoController { + @Resource + private AttachInfoService attachInfoService; + + @ApiOperation(value = "新增附件信息", httpMethod = "POST") + @PostMapping("/{businessType}") + public Result add(@PathVariable("businessType") String businessType, AttachInfoReq infoReq, @RequestParam("file") MultipartFile file) { + return Result.ok(attachInfoService.saveData(businessType, infoReq, new MultipartFile[]{file}).get(0)); + } + + @ApiOperation(value = "批量新增附件信息", httpMethod = "POST") + @PostMapping("/batch/{businessType}") + public Result> add(@PathVariable("businessType") String businessType, AttachInfoReq infoReq, @RequestParam("files") MultipartFile[] files) { + return Result.ok(attachInfoService.saveData(businessType, infoReq, files)); + } + +} + diff --git a/web/src/main/java/com/dite/znpt/web/controller/AttendanceRecordController.java b/web/src/main/java/com/dite/znpt/web/controller/AttendanceRecordController.java new file mode 100644 index 0000000..844c3bb --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/AttendanceRecordController.java @@ -0,0 +1,49 @@ +package com.dite.znpt.web.controller; + +import cn.dev33.satoken.stp.StpUtil; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.vo.AttendanceRecordReq; +import com.dite.znpt.domain.vo.AttendanceRecordResp; +import com.dite.znpt.service.AttendanceRecordService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/7/21 21:21 + * @Description: + */ +@Api(tags = "考勤记录") +@RestController +@RequestMapping("/attendance-record") +public class AttendanceRecordController { + @Resource + private AttendanceRecordService attendanceRecordService; + + + @ApiOperation(value = "新增考勤记录", httpMethod = "POST") + @PostMapping + public Result add(@Validated @RequestBody AttendanceRecordReq req){ + attendanceRecordService.save(req); + return Result.ok(); + } + + @ApiOperation(value = "查询当天考勤记录", httpMethod = "GET") + @GetMapping("/list-today") + public Result> listToday(){ + String userId = StpUtil.getLoginId().toString(); + return Result.ok(attendanceRecordService.listToday(userId)); + } + + @ApiOperation(value = "按月份查询指定人员考勤记录", httpMethod = "GET") + @GetMapping("/list-month/{year}/{month}") + public Result> listMonth(@PathVariable Integer year, @PathVariable Integer month){ + String userId = StpUtil.getLoginId().toString(); + return Result.ok(attendanceRecordService.listMonth(userId, year, month)); + } +} diff --git a/web/src/main/java/com/dite/znpt/web/controller/AudioController.java b/web/src/main/java/com/dite/znpt/web/controller/AudioController.java new file mode 100644 index 0000000..cad065d --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/AudioController.java @@ -0,0 +1,66 @@ +package com.dite.znpt.web.controller; + + +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.entity.AudioFileInfoEntity; +import com.dite.znpt.domain.vo.*; +import com.dite.znpt.service.AudioFileInfoService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; + +/** + * @author cuizhibin + * @date 2025/06/23 13:39 + * @description 音频控制器 + */ +@Api(tags = "音频信息") +@RestController +@RequestMapping("/audio") +@RequiredArgsConstructor +public class AudioController { + + private final AudioFileInfoService audioFileInfoService; + + @ApiOperation(value = "分页查询音频列表", httpMethod = "GET") + @GetMapping("/page") + public PageResult page(AudioFileInfoListReq req) { + return PageResult.ok(audioFileInfoService.selectList(req)); + } + + @ApiOperation(value = "查询音频列表", httpMethod = "GET") + @GetMapping("/list") + public Result> list(AudioFileInfoListReq req){ + return Result.ok(audioFileInfoService.selectList(req)); + } + + @ApiOperation(value = "查询音频详情", httpMethod = "GET") + @GetMapping("/detail/{audioId}") + public Result detail(@PathVariable String audioId){ + return Result.ok(audioFileInfoService.selectById(audioId)); + } + + @ApiOperation(value = "删除音频", httpMethod = "DELETE") + @DeleteMapping("/{imageId}") + public Result remove(@PathVariable String imageId){ + audioFileInfoService.deleteById(imageId); + return Result.ok(); + } + + @ApiOperation(value = "上传音频", httpMethod = "POST") + @PostMapping("/upload/{imageId}") + public Result uploadBatch(@PathVariable String imageId, @RequestParam("file") MultipartFile file) { + return Result.ok(audioFileInfoService.batchUpload(imageId, new MultipartFile[]{file}).get(0)); + } + + @ApiOperation(value = "批量上传音频", httpMethod = "POST") + @PostMapping("/upload-batch/{imageId}") + public Result> uploadBatch(@PathVariable String imageId, @RequestParam("files") MultipartFile[] files) { + return Result.ok(audioFileInfoService.batchUpload(imageId, files)); + } +} diff --git a/web/src/main/java/com/dite/znpt/web/controller/AuthController.java b/web/src/main/java/com/dite/znpt/web/controller/AuthController.java new file mode 100644 index 0000000..8ea3523 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/AuthController.java @@ -0,0 +1,64 @@ +package com.dite.znpt.web.controller; + +import cn.dev33.satoken.stp.SaTokenInfo; +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.lang.tree.Tree; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.vo.LoginReq; +import com.dite.znpt.domain.vo.ModifyPasswordReq; +import com.dite.znpt.domain.vo.UserInfo; +import com.dite.znpt.service.AuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/19/周一 14:32 + * @description + */ +@Api(tags = "认证相关") +@RestController +@RequestMapping("/auth") +public class AuthController { + + @Resource + private AuthService authService; + + @ApiOperation(value = "登录",httpMethod = "POST", notes = "密码加密采用aes(加密模式ECB,填充方式PKCS#7)加密传输,加密密钥产生逻辑:对账号做md5()计算,然后取值8-24位。demo数据:账号:admin,加密后的密码:Csq+AVwlEzX3r5vfxL7d/g== 账号:tino,加密后的密码:owbegSu4cMJRD4CiWO+WyQ==") + @PostMapping("/login") + public Result login(@Valid @RequestBody LoginReq req) { + return authService.doLogin(req); + } + + @ApiOperation(value = "修改密码", httpMethod = "PUT") + @PutMapping("/modify-password") + public Result modifyPassword(@Valid @RequestBody ModifyPasswordReq req){ + authService.modifyPassword(req); + return Result.ok(); + } + + @GetMapping("/userInfo") + @ApiOperation(value = "获取用户信息",httpMethod = "GET") + public Result userInfo() { + return Result.ok(authService.getUserInfo(StpUtil.getLoginId().toString())); + } + + @GetMapping("/menu") + @ApiOperation(value = "获取菜单",httpMethod = "GET") + public Result>> getMenuInfo() { + return Result.ok(authService.getMenuInfo(StpUtil.getLoginId().toString())); + } + + @ApiOperation(value = "登出",httpMethod = "POST") + @PostMapping("/logout") + public Result logout() { + authService.doLogout(); + return Result.ok(); + } +} diff --git a/web/src/main/java/com/dite/znpt/web/controller/CertificationController.java b/web/src/main/java/com/dite/znpt/web/controller/CertificationController.java new file mode 100644 index 0000000..d2919ce --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/CertificationController.java @@ -0,0 +1,68 @@ +package com.dite.znpt.web.controller; + +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.vo.CertificationListReq; +import com.dite.znpt.domain.vo.CertificationReq; +import com.dite.znpt.domain.vo.CertificationResp; +import com.dite.znpt.service.CertificationService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/27/周二 15:24 + * @description + */ +@Api(tags = "人员资质") +@RestController +@RequestMapping("/certification") +@AllArgsConstructor +public class CertificationController { + + private final CertificationService certificationService; + + @GetMapping("/page") + @ApiOperation(value = "分页查询人员资质信息", httpMethod = "GET") + public PageResult page(CertificationListReq req){ + return PageResult.ok(certificationService.page(req)); + } + + @GetMapping("/list") + @ApiOperation(value = "查询人员资质信息列表", httpMethod = "GET") + public Result> list(CertificationListReq req){ + return Result.ok(certificationService.list(req)); + } + + @GetMapping("/detail/{certificationId}") + @ApiOperation(value = "查询人员资质详情", httpMethod = "GET") + public Result detail(@PathVariable String certificationId){ + return Result.ok(certificationService.detail(certificationId)); + } + + @PostMapping + @ApiOperation(value = "新增人员资质", httpMethod = "POST") + public Result add(@Validated @RequestBody CertificationReq req){ + certificationService.save(req); + return Result.ok(); + } + + @PutMapping("/{certificationId}") + @ApiOperation(value = "修改人员资质信息", httpMethod = "PUT") + public Result update(@PathVariable String certificationId, @Validated @RequestBody CertificationReq req){ + certificationService.update(certificationId, req); + return Result.ok(); + } + + @DeleteMapping("/{certificationId}") + @ApiOperation(value = "删除人员资质信息", httpMethod = "DELETE") + public Result remove(@PathVariable String certificationId){ + certificationService.deleteById(certificationId); + return Result.ok(); + } +} diff --git a/web/src/main/java/com/dite/znpt/web/controller/CheckSchemeController.java b/web/src/main/java/com/dite/znpt/web/controller/CheckSchemeController.java new file mode 100644 index 0000000..0dd4abb --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/CheckSchemeController.java @@ -0,0 +1,65 @@ +package com.dite.znpt.web.controller; + +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.vo.CheckSchemeReq; +import com.dite.znpt.domain.vo.CheckSchemeResp; +import com.dite.znpt.service.CheckSchemeService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/7/9 23:39 + * @Description: + */ +@Api(tags = "检查方案") +@RestController +@RequestMapping("/check-scheme") +public class CheckSchemeController { + @Resource + private CheckSchemeService checkSchemeService; + + @ApiOperation(value = "分页查询检查方案信息", httpMethod = "GET") + @GetMapping("/page") + public PageResult page(@RequestParam(required = false) List checkMethods){ + return PageResult.ok(checkSchemeService.page(checkMethods)); + } + + @ApiOperation(value = "查询检查方案信息列表", httpMethod = "GET") + @GetMapping("/list") + public Result> list(@RequestParam(required = false) List checkMethods){ + return Result.ok(checkSchemeService.list(checkMethods)); + } + + @ApiOperation(value = "查询检查方案详情", httpMethod = "GET") + @GetMapping("/detail/{checkSchemeId}") + public Result detail(@PathVariable String checkSchemeId){ + return Result.ok(checkSchemeService.detail(checkSchemeId)); + } + @ApiOperation(value = "新增检查方案", httpMethod = "POST") + @PostMapping() + public Result add(@Validated @RequestBody CheckSchemeReq req){ + checkSchemeService.save(req); + return Result.ok(); + } + + @ApiOperation(value = "修改检查方案", httpMethod = "PUT") + @PutMapping("/{checkSchemeId}") + public Result update(@PathVariable String checkSchemeId, @Validated @RequestBody CheckSchemeReq req){ + checkSchemeService.update(checkSchemeId, req); + return Result.ok(); + } + + @ApiOperation(value = "删除检查方案", httpMethod = "DELETE") + @DeleteMapping("/{checkSchemeId}") + public Result remove(@PathVariable String checkSchemeId){ + checkSchemeService.deleteById(checkSchemeId); + return Result.ok(); + } +} diff --git a/web/src/main/java/com/dite/znpt/web/controller/CommonController.java b/web/src/main/java/com/dite/znpt/web/controller/CommonController.java new file mode 100644 index 0000000..5371ed3 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/CommonController.java @@ -0,0 +1,179 @@ +package com.dite.znpt.web.controller; + +import com.dite.znpt.constant.Message; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.vo.ImageWorkReq; +import com.dite.znpt.enums.*; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.service.ImageService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.IOException; + +/** + * @Author: gaoxiong + * @Date: 2025/4/29 23:06 + * @Description: + */ +@Api(tags = "公共信息") +@RestController +@RequestMapping("/common") +public class CommonController { + + @Resource + private ImageService imageService; + + @ApiOperation(value = "查询缺陷级别", httpMethod = "GET") + @GetMapping("/list/defect-level") + public Result listDefectLevel(){ + return Result.ok(DefectLevelEnum.listAll()); + } + + @ApiOperation(value = "查询缺陷来源", httpMethod = "GET") + @GetMapping("/list/defect-source") + public Result listDefectSource(){ + return Result.ok(DefectSourceEnum.listAll()); + } + + @ApiOperation(value = "查询缺陷类型", httpMethod = "GET") + @GetMapping("/list/defect-type") + public Result listDefectType(){ + return Result.ok(DefectTypeEnum.listAll()); + } + + @ApiOperation(value = "查询图像类型", httpMethod = "GET") + @GetMapping("/list/image-type") + public Result listImageType(){ + return Result.ok(ImageTypeEnum.listAll()); + } + + @ApiOperation(value = "查询项目状态", httpMethod = "GET") + @GetMapping("/list/project-status") + public Result listProjectStatus(){ + return Result.ok(ProjectStatusEnum.listAll()); + } + + @ApiOperation(value = "查询项目工作岗位", httpMethod = "GET") + @GetMapping("/list/project-work-job/{projectWorkType}") + public Result listProjectWorkJob(@PathVariable String projectWorkType){ + return Result.ok(ProjectWorkJobEnum.listByWorkType(projectWorkType)); + } + + @ApiOperation(value = "查询项目工作类型", httpMethod = "GET") + @GetMapping("/list/project-work-type") + public Result listProjectWorkType(){ + return Result.ok(ProjectWorkTypeEnum.listAll()); + } + + @ApiOperation(value = "查询维修状态", httpMethod = "GET") + @GetMapping("/list/repair-status") + public Result listRepairStatus(){ + return Result.ok(RepairStatusEnum.listAll()); + } + + @ApiOperation(value = "查询拍摄方式", httpMethod = "GET") + @GetMapping("/list/shooting-method") + public Result listShootingMethod(){ + return Result.ok(ShootingMethodEnum.listAll()); + } + + @ApiOperation(value = "查询天气", httpMethod = "GET") + @GetMapping("/list/weather") + public Result listWeather(){ + return Result.ok(WeatherEnum.listAll()); + } + + @ApiOperation(value = "查询通用图片来源", httpMethod = "GET") + @GetMapping("/list/common-image-source") + public Result listCommonImageSource(){ + return Result.ok(ImageSourceEnum.list()); + } + + @ApiOperation(value = "查询学历", httpMethod = "GET") + @GetMapping("/list/education") + public Result listEducation(){ + return Result.ok(EducationEnum.listAll()); + } + + @ApiOperation(value = "查询性别", httpMethod = "GET") + @GetMapping("/list/gender") + public Result listGender(){ + return Result.ok(GenderEnum.listAll()); + } + + @ApiOperation(value = "上传图片-遥控器app使用,已废弃", httpMethod = "POST") + @PostMapping("/upload-image/{imageSource}") + public Result uploadImage(@PathVariable String imageSource, ImageWorkReq workReq, MultipartFile file) throws IOException { + if(null == file){ + throw new ServiceException(Message.IMAGE_IS_EMPTY); + } + return Result.ok(imageService.batchUploadCommonImage(imageSource, workReq, new MultipartFile[]{file}).get(0)); + } + + @ApiOperation(value = "批量上传图片-遥控器app使用,已废弃", httpMethod = "POST") + @PostMapping("/batch-upload-image/{imageSource}") + public Result batchUploadImage(@PathVariable String imageSource, ImageWorkReq workReq, + @RequestParam("file") MultipartFile[] files) throws IOException { + return Result.ok(imageService.batchUploadCommonImage(imageSource, workReq, files)); + } + + @ApiOperation(value = "查询菜单类型", httpMethod = "GET") + @GetMapping("/list/menu-type") + public Result listMenuType(){ + return Result.ok(MenuTypeEnum.listAll()); + } + + @ApiOperation(value = "查询终端类型", httpMethod = "GET") + @GetMapping("/list/terminal-type") + public Result listTerminalType(){ + return Result.ok(TerminalTypeEnum.listAll()); + } + + @ApiOperation(value = "查询在职状态", httpMethod = "GET") + @GetMapping("/list/user-status") + public Result listUserStatus(){ + return Result.ok(UserStatusEnum.listAll()); + } + + @ApiOperation(value = "查询员工性质", httpMethod = "GET") + @GetMapping("/list/user_type") + public Result listUserType(){ + return Result.ok(UserTypeEnum.listAll()); + } + + @ApiOperation(value = "查询保险状态", httpMethod = "GET") + @GetMapping("/list/insurance-status") + public Result listInsuranceStatus(){ + return Result.ok(InsuranceStatusEnum.listAll()); + } + + @ApiOperation(value = "查询附件业务类型", httpMethod = "GET") + @GetMapping("/list/attach-business_type") + public Result listAttachBusinessType(){ + return Result.ok(AttachBusinessTypeEnum.listAll()); + } + + @ApiOperation(value = "查询检查方式", httpMethod = "GET") + @GetMapping("/list/check-method") + public Result listCheckMethod(){ + return Result.ok(CheckMethodEnum.listAll()); + } + + @ApiOperation(value = "查询报告状态", httpMethod = "GET") + @GetMapping("/list/report-status") + public Result listReportStatus(){ + return Result.ok(InspectionReportStatusEnum.listAll()); + } + + @ApiOperation(value = "查询设备类型", httpMethod = "GET") + @GetMapping("/list/equipment-type") + public Result listEquipmentType(){ + return Result.ok(EquipmentTypeEnum.listAll()); + } + + +} diff --git a/web/src/main/java/com/dite/znpt/web/controller/ContractController.java b/web/src/main/java/com/dite/znpt/web/controller/ContractController.java new file mode 100644 index 0000000..ec13cd3 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/ContractController.java @@ -0,0 +1,85 @@ +package com.dite.znpt.web.controller; + + +import com.dite.znpt.constant.Constants; +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.entity.ContractEntity; +import com.dite.znpt.domain.vo.ContractListReq; +import com.dite.znpt.domain.vo.ContractReq; +import com.dite.znpt.domain.vo.ContractResp; +import com.dite.znpt.service.ContractService; +import com.pig4cloud.plugin.excel.annotation.RequestExcel; +import com.pig4cloud.plugin.excel.annotation.ResponseExcel; +import com.pig4cloud.plugin.excel.vo.ErrorMessage; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author huise23 + * @date 2025/07/21 20:29 + */ +@Api(tags = "合同") +@RestController +@RequestMapping("/contract") +public class ContractController { + @Resource + private ContractService contractService; + + @ApiOperation(value = "获取合同列表", httpMethod = "GET") + @GetMapping("/list") + public PageResult list(ContractListReq contractReq) { + return PageResult.ok(contractService.selectList(contractReq)); + } + + @ApiOperation(value = "根据合同Id获取详细信息", httpMethod = "GET") + @GetMapping("/{contractId}") + public Result getInfo(@PathVariable String contractId) { + return Result.ok(contractService.selectById(contractId)); + } + + @ApiOperation(value = "新增合同", httpMethod = "POST") + @PostMapping + public Result add(@RequestBody ContractReq contractReq) { + contractService.saveData(contractReq); + return Result.ok(); + } + + @ApiOperation(value = "修改合同", httpMethod = "PUT") + @PutMapping + public Result edit(@RequestBody ContractReq contractReq) { + contractService.updateData(contractReq); + return Result.ok(); + } + + @ApiOperation(value = "删除合同", httpMethod = "DELETE") + @DeleteMapping("/{contractId}") + public Result remove(@PathVariable String contractId) { + contractService.deleteById(contractId); + return Result.ok(); + } + + @ApiOperation(value = "导出合同", httpMethod = "GET") + @GetMapping("/export") + @ResponseExcel(name = "合同") + public List export(ContractListReq contractReq) { + return contractService.selectList(contractReq); + } + + @ApiOperation(value = "导入合同", httpMethod = "POST") + @PostMapping("/import") + public Result importData(@RequestExcel List dataList, BindingResult bindingResult) { + // JSR 303 校验通用校验获取失败的数据 + List errorMessageList = (List) bindingResult.getTarget(); + if (errorMessageList != null && !errorMessageList.isEmpty()) { + return Result.error(Constants.SERVICE_EXCEPTION, "导入失败"); + } + return Result.okM("导入"+dataList.size()+"条数据"); + } +} + diff --git a/web/src/main/java/com/dite/znpt/web/controller/ContractSettlementController.java b/web/src/main/java/com/dite/znpt/web/controller/ContractSettlementController.java new file mode 100644 index 0000000..6106f7a --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/ContractSettlementController.java @@ -0,0 +1,42 @@ +package com.dite.znpt.web.controller; + + +import com.dite.znpt.constant.Constants; +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.entity.ContractSettlementEntity; +import com.dite.znpt.domain.vo.ContractSettlementListReq; +import com.dite.znpt.domain.vo.ContractSettlementReq; +import com.dite.znpt.domain.vo.ContractSettlementResp; +import com.dite.znpt.service.ContractSettlementService; +import com.pig4cloud.plugin.excel.annotation.RequestExcel; +import com.pig4cloud.plugin.excel.annotation.ResponseExcel; +import com.pig4cloud.plugin.excel.vo.ErrorMessage; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author huise23 + * @date 2025/07/21 21:11 + */ +@Api(tags = "合同结算") +@RestController +@RequestMapping("/contract-settlement") +public class ContractSettlementController { + @Resource + private ContractSettlementService contractSettlementService; + + @ApiOperation(value = "新增合同结算", httpMethod = "POST") + @PostMapping + public Result add(@RequestBody ContractSettlementReq contractSettlementReq) { + contractSettlementService.saveData(contractSettlementReq); + return Result.ok(); + } + +} + diff --git a/web/src/main/java/com/dite/znpt/web/controller/DefectController.java b/web/src/main/java/com/dite/znpt/web/controller/DefectController.java new file mode 100644 index 0000000..91e1f88 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/DefectController.java @@ -0,0 +1,73 @@ +package com.dite.znpt.web.controller; + + +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.vo.*; +import com.dite.znpt.service.DefectService; +import com.dite.znpt.util.ValidationGroup; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + */ +@Api(tags = "缺陷记录") +@RestController +@RequestMapping("/defect") +public class DefectController { + @Resource + private DefectService defectService; + + @ApiOperation(value = "分页查询缺陷记录列表", httpMethod = "GET") + @GetMapping("/page") + public PageResult page(DefectListReq req) { + return PageResult.ok(defectService.page(req)); + } + + @ApiOperation(value = "查询缺陷记录列表", httpMethod = "GET") + @GetMapping("/list") + public Result> list(DefectListReq req) { + return Result.ok(defectService.list(req)); + } + + @ApiOperation(value = "查询缺详细", httpMethod = "GET") + @GetMapping("/detail/{defectId}") + public Result detail(@PathVariable String defectId) { + return Result.ok(defectService.detail(defectId)); + } + + @ApiOperation(value = "新增缺陷记录", httpMethod = "POST") + @PostMapping("/{imageId}") + public Result save(@PathVariable String imageId, @RequestBody DefectReq req) { + defectService.save(imageId, req); + return Result.ok(); + } + + @ApiOperation(value = "修改缺陷记录", httpMethod = "PUT") + @PutMapping("/{defectId}") + public Result edit(@PathVariable String defectId, @RequestBody DefectReq req) { + defectService.update(defectId, req); + return Result.ok(); + } + + @ApiOperation(value = "删除缺陷记录", httpMethod = "DELETE") + @DeleteMapping("/{defectId}") + public Result remove(@PathVariable String defectId) { + defectService.deleteById(defectId); + return Result.ok(); + } + + @ApiOperation(value = "单图自动标注缺陷", httpMethod = "POST") + @PostMapping("/detect") + public Result> runBatch(@Validated(ValidationGroup.Request.class) @RequestBody DefectMarkReq markReq) { + return Result.ok(defectService.detect(markReq)); + } +} + diff --git a/web/src/main/java/com/dite/znpt/web/controller/DeptController.java b/web/src/main/java/com/dite/znpt/web/controller/DeptController.java new file mode 100644 index 0000000..ce774d8 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/DeptController.java @@ -0,0 +1,62 @@ +package com.dite.znpt.web.controller; + +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.vo.DeptReq; +import com.dite.znpt.domain.vo.DeptResp; +import com.dite.znpt.service.DeptService; +import com.dite.znpt.util.ValidationGroup; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/20/周二 10:05 + * @description + */ +@Api(tags = "部门信息") +@RestController +@RequestMapping("/dept") +public class DeptController { + + @Resource + private DeptService deptService; + + @ApiOperation(value = "查询部门树", httpMethod = "GET") + @GetMapping("/tree") + public Result tree (@RequestParam(name = "deptName", required = false) String deptName) { + return Result.ok(deptService.tree(deptName)); + } + + @ApiOperation(value = "查询部门信息详情", httpMethod = "GET") + @GetMapping("/detail/{deptId}") + public Result detail(@PathVariable String deptId) { + return Result.ok(deptService.detail(deptId)); + } + + @ApiOperation(value = "新增部门信息", httpMethod = "POST") + @PostMapping + public Result add(@Validated(ValidationGroup.Insert.class) @RequestBody DeptReq req) { + deptService.save(req); + return Result.ok(); + } + + @ApiOperation(value = "修改部门信息", httpMethod = "PUT") + @PutMapping("/{deptId}") + public Result edit(@PathVariable String deptId, @Validated(ValidationGroup.Update.class) @RequestBody DeptReq req) { + deptService.update(deptId, req); + return Result.ok(); + } + + @ApiOperation(value = "删除部门信息", httpMethod = "DELETE") + @DeleteMapping("/{deptId}") + public Result remove(@PathVariable String deptId) { + deptService.deleteById(deptId); + return Result.ok(); + } +} diff --git a/web/src/main/java/com/dite/znpt/web/controller/DictController.java b/web/src/main/java/com/dite/znpt/web/controller/DictController.java new file mode 100644 index 0000000..082107a --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/DictController.java @@ -0,0 +1,62 @@ +package com.dite.znpt.web.controller; + + +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.vo.DictListReq; +import com.dite.znpt.domain.vo.DictReq; +import com.dite.znpt.domain.vo.DictResp; +import com.dite.znpt.service.DictService; +import com.dite.znpt.util.ValidationGroup; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + * @author huise23 + * @date 2025/06/30 11:39 + */ +@Api(tags = "字典") +@RestController +@RequestMapping("/dict") +public class DictController { + @Resource + private DictService dictService; + + @ApiOperation(value = "获取字典列表", httpMethod = "GET") + @GetMapping("/list") + public PageResult list(DictListReq dictReq) { + return PageResult.ok(dictService.selectList(dictReq)); + } + + @ApiOperation(value = "根据字典Id获取详细信息", httpMethod = "GET") + @GetMapping("/{dictId}") + public Result getInfo(@PathVariable String dictId) { + return Result.ok(dictService.selectById(dictId)); + } + + @ApiOperation(value = "新增字典", httpMethod = "POST") + @PostMapping + public Result add(@Validated(ValidationGroup.Insert.class) @RequestBody DictReq dictReq) { + dictService.saveData(dictReq); + return Result.ok(); + } + + @ApiOperation(value = "修改字典", httpMethod = "PUT") + @PutMapping + public Result edit(@Validated(ValidationGroup.Update.class) @RequestBody DictReq dictReq) { + dictService.updateData(dictReq); + return Result.ok(); + } + + @ApiOperation(value = "删除字典", httpMethod = "DELETE") + @DeleteMapping("/{dictId}") + public Result remove(@PathVariable String dictId) { + dictService.deleteById(dictId); + return Result.ok(); + } +} + diff --git a/web/src/main/java/com/dite/znpt/web/controller/EquipmentController.java b/web/src/main/java/com/dite/znpt/web/controller/EquipmentController.java new file mode 100644 index 0000000..8e79a09 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/EquipmentController.java @@ -0,0 +1,68 @@ +package com.dite.znpt.web.controller; + +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.vo.EquipmentListReq; +import com.dite.znpt.domain.vo.EquipmentReq; +import com.dite.znpt.domain.vo.EquipmentResp; +import com.dite.znpt.service.EquipmentService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/7/23/周三 17:41 + * @description + */ +@Api(tags = "设备信息") +@RestController +@RequestMapping("/equipment") +public class EquipmentController { + + @Resource + private EquipmentService equipmentService; + + @ApiOperation(value = "分页查询设备信息列表", httpMethod = "GET") + @GetMapping("/page") + public PageResult page(EquipmentListReq req) { + return PageResult.ok(equipmentService.page(req)); + } + + @ApiOperation(value = "查询设备信息列表", httpMethod = "GET") + @GetMapping("/list") + public Result> list(EquipmentListReq req) { + return Result.ok(equipmentService.list(req)); + } + + @ApiOperation(value = "查询设备信息详情", httpMethod = "GET") + @GetMapping("/detail/{equipmentId}") + public Result detail(@PathVariable String equipmentId) { + return Result.ok(equipmentService.detail(equipmentId)); + } + + @ApiOperation(value = "新增设备信息", httpMethod = "POST") + @PostMapping + public Result add(@Validated @RequestBody EquipmentReq req){ + equipmentService.save(req); + return Result.ok(); + } + + @ApiOperation(value = "修改设备信息", httpMethod = "PUT") + @PutMapping("/{equipmentId}") + public Result edit(@PathVariable String equipmentId, @Validated @RequestBody EquipmentReq req){ + equipmentService.update(equipmentId, req); + return Result.ok(); + } + + @ApiOperation(value = "删除设备信息", httpMethod = "DELETE") + @DeleteMapping("/{equipmentId}") + public Result remove(@PathVariable String equipmentId){ + equipmentService.deleteById(equipmentId); + return Result.ok(); + } +} diff --git a/web/src/main/java/com/dite/znpt/web/controller/EquipmentUseRecordController.java b/web/src/main/java/com/dite/znpt/web/controller/EquipmentUseRecordController.java new file mode 100644 index 0000000..ed337bc --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/EquipmentUseRecordController.java @@ -0,0 +1,62 @@ +package com.dite.znpt.web.controller; + +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.vo.EquipmentUseRecordListReq; +import com.dite.znpt.domain.vo.EquipmentUseRecordReq; +import com.dite.znpt.domain.vo.EquipmentUseRecordResp; +import com.dite.znpt.service.EquipmentUseRecordService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/7/23/周三 17:41 + * @description + */ +@Api(tags = "设备使用记录") +@RestController +@RequestMapping("/equipment-use-record") +public class EquipmentUseRecordController { + + @Resource + private EquipmentUseRecordService equipmentUseRecordService; + + + @ApiOperation(value = "分页查询设备使用记录列表", httpMethod = "GET") + @GetMapping("/page") + public PageResult page(EquipmentUseRecordListReq req) { + return PageResult.ok(equipmentUseRecordService.page(req)); + } + + @ApiOperation(value = "查询设备使用记录列表", httpMethod = "GET") + @GetMapping("/list") + public Result> list(EquipmentUseRecordListReq req) { + return Result.ok(equipmentUseRecordService.list(req)); + } + + @ApiOperation(value = "查询设备使用记录详情", httpMethod = "GET") + @GetMapping("/detail/{equipmentId}") + public Result> detail(@PathVariable String equipmentId) { + return Result.ok(equipmentUseRecordService.detail(equipmentId)); + } + + @ApiOperation(value = "借用设备", httpMethod = "PUT") + @PutMapping("/borrow/{equipmentId}") + public Result borrowEquipment(@PathVariable String equipmentId, @Validated @RequestBody EquipmentUseRecordReq req){ + equipmentUseRecordService.borrowEquipment(equipmentId,req); + return Result.ok(); + } + + @ApiOperation(value = "归还设备", httpMethod = "PUT") + @PutMapping("/return/{userRecordId}") + public Result returnEquipment(@PathVariable String userRecordId, @Validated @RequestBody EquipmentUseRecordReq req){ + equipmentUseRecordService.returnEquipment(userRecordId, req); + return Result.ok(); + } +} diff --git a/web/src/main/java/com/dite/znpt/web/controller/ImageController.java b/web/src/main/java/com/dite/znpt/web/controller/ImageController.java new file mode 100644 index 0000000..529bd93 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/ImageController.java @@ -0,0 +1,104 @@ +package com.dite.znpt.web.controller; + + +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.vo.*; +import com.dite.znpt.service.ImageCollectService; +import com.dite.znpt.service.ImageService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/4/24/周四 12:46 + * @description + */ +@Api(tags = "图像信息") +@RestController +@RequestMapping("/image") +public class ImageController { + + @Resource + private ImageService imageService; + + @Resource + private ImageCollectService imageCollectService; + + @ApiOperation(value = "分页查询图像列表", httpMethod = "GET") + @GetMapping("/page") + public PageResult page(ImageListReq req) { + return PageResult.ok(imageService.page(req)); + } + + @ApiOperation(value = "查询图像列表", httpMethod = "GET") + @GetMapping("/list") + public Result> list(ImageListReq req){ + return Result.ok(imageService.list(req)); + } + + @ApiOperation(value = "查询图像详情", httpMethod = "GET") + @GetMapping("/detail/{imageId}") + public Result detail(@PathVariable String imageId){ + return Result.ok(imageService.detail(imageId)); + } + + @ApiOperation(value = "批量上传图像", httpMethod = "POST") + @PostMapping("/{imageSource}/upload-batch/{partId}") + public Result> uploadBatch(@PathVariable String imageSource, @PathVariable String partId, ImageCollectReq collectReq, @RequestParam("files") MultipartFile[] files) { + return Result.ok(imageService.batchUploadDefectImage(partId, imageSource, collectReq, files)); + } + + @ApiOperation(value = "手动批量上传文件夹图像到项目", httpMethod = "POST") + @PostMapping("/{projectId}/{imageSource}/upload-batch") + public Result> uploadProjectBatch(@PathVariable String projectId, @PathVariable String imageSource, @RequestParam("files") MultipartFile[] files) { + return Result.ok(imageService.uploadProjectBatch(projectId, imageSource, files)); + } + + @ApiOperation(value = "上传图像", httpMethod = "POST") + @PostMapping("/{imageSource}/upload/{partId}") + public Result uploadOutWork(@PathVariable String imageSource, @PathVariable String partId, ImageCollectReq collectReq, @RequestParam("file") MultipartFile file) { + MultipartFile[] files = {file}; + return Result.ok(imageService.batchUploadDefectImage(partId, imageSource, collectReq, files).get(0)); + } + + @ApiOperation(value = "设置信息", httpMethod = "POST") + @PostMapping("/setting-info/{partId}") + public Result save(@PathVariable String partId, @RequestBody ImageCollectReq req) { + imageCollectService.save(partId, req); + return Result.ok(); + } + + @ApiOperation(value = "删除图像", httpMethod = "DELETE") + @DeleteMapping("/{imageId}") + public Result remove(@PathVariable String imageId){ + imageService.delete(imageId); + return Result.ok(); + } + + @ApiOperation(value = "获取APP上传的图片列表-废弃", httpMethod = "GET") + @GetMapping("/list/app-upload-images") + public Result> listAppUploadImages() throws IOException { + return Result.ok(imageService.listAppUploadImages()); + } + + @ApiOperation(value = "关联APP上传图片到机组-废弃", httpMethod = "POST") + @PostMapping("/linkAppImagesToPart") + public Result linkAppImagesToPart(@RequestBody AppImageToPartReq partReq) { + imageService.linkAppImagesToPart(partReq); + return Result.ok(); + } + + @ApiOperation(value = "审核图片", httpMethod = "POST") + @PostMapping("/reviewImages") + public Result reviewImages(@RequestBody List imageIds) { + imageService.reviewImages(imageIds); + return Result.ok(); + } +} diff --git a/web/src/main/java/com/dite/znpt/web/controller/InspectionReportController.java b/web/src/main/java/com/dite/znpt/web/controller/InspectionReportController.java new file mode 100644 index 0000000..b7d511d --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/InspectionReportController.java @@ -0,0 +1,77 @@ +package com.dite.znpt.web.controller; + +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.vo.InspectionReportListReq; +import com.dite.znpt.domain.vo.InspectionReportListResp; +import com.dite.znpt.domain.vo.InspectionReportReq; +import com.dite.znpt.domain.vo.InspectionReportResp; +import com.dite.znpt.service.InspectionReportService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/7/7/周一 17:43 + * @description + */ +@Api(tags = "检查报告") +@RestController +@RequestMapping("/inspection-report") +public class InspectionReportController { + + @Resource + private InspectionReportService inspectionReportService; + + + @ApiOperation(value = "分页查询检查报告列表", httpMethod = "GET") + @GetMapping("/page") + public PageResult page(InspectionReportListReq req) { + return PageResult.ok(inspectionReportService.page(req)); + } + + @ApiOperation(value = "查询检查报告列表", httpMethod = "GET") + @GetMapping("/list") + public Result> list(InspectionReportListReq req) { + return Result.ok(inspectionReportService.list(req)); + } + + @ApiOperation(value = "查询检查报告详情", httpMethod = "GET") + @GetMapping("/detail/{reportId}") + public Result detail(@PathVariable String reportId) { + return Result.ok(inspectionReportService.detail(reportId)); + } + + @ApiOperation(value = "新增检查报告", httpMethod = "POST") + @PostMapping + public Result add(@Validated @RequestBody InspectionReportReq req) { + inspectionReportService.save(req); + return Result.ok(); + } + + @ApiOperation(value = "修改检查报告", httpMethod = "PUT") + @PostMapping("/{reportId}") + public Result edit(@PathVariable String reportId, @Validated @RequestBody InspectionReportReq req) { + inspectionReportService.update(reportId, req); + return Result.ok(); + } + + @ApiOperation(value = "删除检查报告", httpMethod = "DELETE") + @DeleteMapping("/{reportId}") + public Result delete(@PathVariable String reportId) { + inspectionReportService.removeById(reportId); + return Result.ok(); + } + + @ApiOperation(value = "发布项目机组报告", httpMethod = "POST") + @PutMapping("/publish/{reportId}") + public Result publish(@PathVariable String reportId) { + inspectionReportService.publish(reportId); + return Result.ok(); + } +} diff --git a/web/src/main/java/com/dite/znpt/web/controller/InsuranceCompanyController.java b/web/src/main/java/com/dite/znpt/web/controller/InsuranceCompanyController.java new file mode 100644 index 0000000..b3d70d4 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/InsuranceCompanyController.java @@ -0,0 +1,68 @@ +package com.dite.znpt.web.controller; + +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.vo.InsuranceCompanyListReq; +import com.dite.znpt.domain.vo.InsuranceCompanyReq; +import com.dite.znpt.domain.vo.InsuranceCompanyResp; +import com.dite.znpt.service.InsuranceCompanyService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/6/26/周四 9:10 + * @description + */ +@Api(tags = "保险公司信息") +@RestController +@RequestMapping("/insurance-company") +public class InsuranceCompanyController { + + @Resource + private InsuranceCompanyService insuranceCompanyService; + + @ApiOperation(value = "分页查询保险公司信息列表", httpMethod = "GET") + @GetMapping("/page") + public PageResult page(InsuranceCompanyListReq req) { + return PageResult.ok(insuranceCompanyService.page(req)); + } + + @ApiOperation(value = "查询保险公司信息列表", httpMethod = "GET") + @GetMapping("/list") + public Result> list(InsuranceCompanyListReq req) { + return Result.ok(insuranceCompanyService.list(req)); + } + + @ApiOperation(value = "查询保险公司信息详情", httpMethod = "GET") + @GetMapping("/detail/{insuranceCompanyId}") + public Result detail(@PathVariable String insuranceCompanyId) { + return Result.ok(insuranceCompanyService.detail(insuranceCompanyId)); + } + + @ApiOperation(value = "新增保险公司信息", httpMethod = "POST") + @PostMapping + public Result add(@Valid @RequestBody InsuranceCompanyReq req) { + insuranceCompanyService.save(req); + return Result.ok(); + } + + @ApiOperation(value = "修改保险公司信息", httpMethod = "POST") + @PutMapping("/{insuranceCompanyId}") + public Result edit(@PathVariable String insuranceCompanyId, @Valid @RequestBody InsuranceCompanyReq req) { + insuranceCompanyService.update(insuranceCompanyId, req); + return Result.ok(); + } + + @ApiOperation(value = "删除保险公司信息", httpMethod = "DELETE") + @DeleteMapping("/{insuranceCompanyId}") + public Result remove(@PathVariable String insuranceCompanyId) { + insuranceCompanyService.deleteById(insuranceCompanyId); + return Result.ok(); + } +} diff --git a/web/src/main/java/com/dite/znpt/web/controller/InsuranceInfoController.java b/web/src/main/java/com/dite/znpt/web/controller/InsuranceInfoController.java new file mode 100644 index 0000000..49e74e8 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/InsuranceInfoController.java @@ -0,0 +1,107 @@ +package com.dite.znpt.web.controller; + +import cn.hutool.core.util.StrUtil; +import com.dite.znpt.constant.Message; +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.entity.InsuranceInfoEntity; +import com.dite.znpt.domain.vo.InsuranceAttachResp; +import com.dite.znpt.domain.vo.InsuranceInfoListReq; +import com.dite.znpt.domain.vo.InsuranceInfoReq; +import com.dite.znpt.domain.vo.InsuranceInfoResp; +import com.dite.znpt.service.AttachInfoService; +import com.dite.znpt.service.InsuranceInfoService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.rmi.ServerException; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/6/26/周四 9:09 + * @description + */ +@Api(tags = "保险信息") +@RestController +@RequestMapping("/insurance-info") +public class InsuranceInfoController { + + @Resource + private InsuranceInfoService insuranceInfoService; + + @Resource + private AttachInfoService attachInfoService; + + @ApiOperation(value = "分页查询保险信息列表", httpMethod = "GET") + @GetMapping("/page") + public PageResult page(InsuranceInfoListReq req) { + return PageResult.ok(insuranceInfoService.page(req)); + } + + @ApiOperation(value = "查询保险信息列表", httpMethod = "GET") + @GetMapping("/list") + public Result> list(InsuranceInfoListReq req) { + return Result.ok(insuranceInfoService.list(req)); + } + + @ApiOperation(value = "分页查询保险附件列表", httpMethod = "GET") + @GetMapping("/page-attach") + public PageResult pageAttach(InsuranceInfoListReq req) { + return PageResult.ok(insuranceInfoService.pageAttach(req)); + } + + @ApiOperation(value = "查询保险附件列表", httpMethod = "GET") + @GetMapping("/list-attach") + public Result> listAttach(InsuranceInfoListReq req) { + return Result.ok(insuranceInfoService.listAttach(req)); + } + + @ApiOperation(value = "查询保险信息详情", httpMethod = "GET") + @GetMapping("/detail/{insuranceInfoId}") + public Result detail(@PathVariable String insuranceInfoId) { + return Result.ok(insuranceInfoService.detail(insuranceInfoId)); + } + + @ApiOperation(value = "新增保险信息", httpMethod = "POST") + @PostMapping + public Result add(@Valid @RequestBody InsuranceInfoReq req) { + insuranceInfoService.save(req); + return Result.ok(); + } + + @ApiOperation(value = "修改保险信息", httpMethod = "POST") + @PutMapping("/{insuranceInfoId}") + public Result edit(@PathVariable String insuranceInfoId, @Valid @RequestBody InsuranceInfoReq req) { + insuranceInfoService.update(insuranceInfoId, req); + return Result.ok(); + } + + @ApiOperation(value = "删除保险信息", httpMethod = "DELETE") + @DeleteMapping("/{insuranceInfoId}") + public Result remove(@PathVariable String insuranceInfoId) { + insuranceInfoService.deleteById(insuranceInfoId); + return Result.ok(); + } + + /** + * @param response + * @功能描述 下载文件:将输入流中的数据循环写入到响应输出流中,而不是一次性读取到内存 + */ + @GetMapping("/download-file/{insuranceInfoId}") + public void downloadFile(@PathVariable String insuranceInfoId, HttpServletResponse response) throws Exception { + InsuranceInfoEntity insuranceInfo = insuranceInfoService.getById(insuranceInfoId); + if(null == insuranceInfo){ + throw new ServerException(Message.INSURANCE_INFO_ID_IS_NOT_EXIST); + } + if(StrUtil.isBlank(insuranceInfo.getAttachInfoId())){ + throw new ServerException(Message.INSURANCE_FILE_IS_NOT_EXIST); + } + attachInfoService.download(insuranceInfo.getAttachInfoId(), response); + } +} diff --git a/web/src/main/java/com/dite/znpt/web/controller/InsuranceTypeController.java b/web/src/main/java/com/dite/znpt/web/controller/InsuranceTypeController.java new file mode 100644 index 0000000..baec016 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/InsuranceTypeController.java @@ -0,0 +1,67 @@ +package com.dite.znpt.web.controller; + +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.vo.InsuranceTypeReq; +import com.dite.znpt.domain.vo.InsuranceTypeResp; +import com.dite.znpt.service.InsuranceTypeService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/6/26/周四 9:10 + * @description + */ +@Api(tags = "保险类型类型") +@RestController +@RequestMapping("/insurance-type") +public class InsuranceTypeController { + + @Resource + private InsuranceTypeService insuranceTypeService; + + @ApiOperation(value = "分页查询保险类型列表", httpMethod = "GET") + @GetMapping("/page") + public PageResult page(@RequestParam(required = false) String insuranceTypeName) { + return PageResult.ok(insuranceTypeService.page(insuranceTypeName)); + } + + @ApiOperation(value = "查询保险类型列表", httpMethod = "GET") + @GetMapping("/list") + public Result> list(@RequestParam(required = false) String insuranceTypeName) { + return Result.ok(insuranceTypeService.list(insuranceTypeName)); + } + + @ApiOperation(value = "查询保险类型详情", httpMethod = "GET") + @GetMapping("/detail/{insuranceTypeId}") + public Result detail(@PathVariable String insuranceTypeId) { + return Result.ok(insuranceTypeService.detail(insuranceTypeId)); + } + + @ApiOperation(value = "新增保险类型", httpMethod = "POST") + @PostMapping + public Result add(@Valid @RequestBody InsuranceTypeReq req) { + insuranceTypeService.save(req); + return Result.ok(); + } + + @ApiOperation(value = "修改保险类型", httpMethod = "POST") + @PutMapping("/{insuranceTypeId}") + public Result edit(@PathVariable String insuranceTypeId, @Valid @RequestBody InsuranceTypeReq req) { + insuranceTypeService.update(insuranceTypeId, req); + return Result.ok(); + } + + @ApiOperation(value = "删除保险类型", httpMethod = "DELETE") + @DeleteMapping("/{insuranceTypeId}") + public Result remove(@PathVariable String insuranceTypeId) { + insuranceTypeService.deleteById(insuranceTypeId); + return Result.ok(); + } +} diff --git a/web/src/main/java/com/dite/znpt/web/controller/JobAntiThunderWorkController.java b/web/src/main/java/com/dite/znpt/web/controller/JobAntiThunderWorkController.java new file mode 100644 index 0000000..e20b3fc --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/JobAntiThunderWorkController.java @@ -0,0 +1,70 @@ +package com.dite.znpt.web.controller; + +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.TableData; +import com.dite.znpt.domain.entity.job.JobAntiThunderWork; +import com.dite.znpt.domain.vo.job.req.JobAntiThunderWorkReq; +import com.dite.znpt.domain.vo.job.req.JobInfoReq; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.service.job.JobAntiThunderWorkService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.poi.ss.formula.functions.T; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * @author Julio + * @date 2023/2/1 14:26 + * @description 防雷工作 + */ +@Api(tags = "防雷工作", description = "防雷工作") +@RestController +@RequestMapping("/job-no-man-work") +public class JobAntiThunderWorkController { + + @Autowired + private JobAntiThunderWorkService service; + + @PostMapping(value = "getWorkContent") + @ApiOperation(value = "根据jobId查询岗位内容,未查到返回空对象") + @ResponseBody + public Result getJob(@Valid @RequestBody JobAntiThunderWorkReq dto) throws ServiceException { + List list = this.service.listByJobId(dto); + if (list.isEmpty()) { + return Result.ok(new JobAntiThunderWork()); + } + return Result.ok(list.get(0)); + } + + @PostMapping(value = "save") + @ApiOperation(value = "新增或更新") + public Result save(@Valid @RequestBody JobAntiThunderWork work) { + return Result.okM(this.service.saveInfo(work), "保存成功"); + } + + @PostMapping("/list") + @ApiOperation(value = "查询列表,组长-施工人员") + public Result> list(@RequestBody JobInfoReq request) { + List list = this.service.list(request); + return Result.ok(new TableData<>(list, request.getPage(), request.getPageSize(), list.size())); + } + + @PostMapping("/submit") + @ApiOperation(value = "组长提交/项目经理审批") + public Result> submit(@RequestBody JobInfoReq request) { + this.service.submit(request); + return Result.ok(); + } + + @PostMapping("/reject") + @ApiOperation(value = "组长驳回/项目经理驳回") + public Result> reject(@RequestBody JobInfoReq request) { + this.service.reject(request); + return Result.ok(); + } +} + diff --git a/web/src/main/java/com/dite/znpt/web/controller/JobController.java b/web/src/main/java/com/dite/znpt/web/controller/JobController.java new file mode 100644 index 0000000..9ae1f90 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/JobController.java @@ -0,0 +1,39 @@ +package com.dite.znpt.web.controller; + +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.entity.job.JobInfo; +import com.dite.znpt.domain.vo.job.req.JobInfoReq; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.service.job.JobService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * @author Julio + * @date 2023/2/1 14:26 + * @description 项目-机组-岗位 + */ +@Api(tags = "项目-机组-岗位", description = "项目-机组-岗位") +@RestController +@RequestMapping("/job") +public class JobController { + @Autowired + private JobService jobService; + + @PostMapping(value = "getJob") + @ApiOperation(value = "根据项目-机组-人员id查询岗位信息,未查到返回null") + @ResponseBody + public Result getJobInfo(@Valid @RequestBody JobInfoReq dto) throws ServiceException { + List list = this.jobService.page(dto); + if (list.isEmpty()) { + return Result.ok(); + } + return Result.ok(list.get(0)); + } +} + diff --git a/web/src/main/java/com/dite/znpt/web/controller/JobInWorkController.java b/web/src/main/java/com/dite/znpt/web/controller/JobInWorkController.java new file mode 100644 index 0000000..1a3175c --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/JobInWorkController.java @@ -0,0 +1,70 @@ +package com.dite.znpt.web.controller; + +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.TableData; +import com.dite.znpt.domain.entity.job.JobAntiThunderWork; +import com.dite.znpt.domain.entity.job.JobInWork; +import com.dite.znpt.domain.vo.job.req.JobInWorkReq; +import com.dite.znpt.domain.vo.job.req.JobInfoReq; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.service.job.JobInWorkService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * @author Julio + * @date 2023/2/1 14:26 + * @description 内部工作 + */ +@Api(tags = "内部工作", description = "内部工作") +@RestController +@RequestMapping("/job-in-work") +public class JobInWorkController { + + @Autowired + private JobInWorkService service; + + @PostMapping(value = "getWorkContent") + @ApiOperation(value = "根据jobId查询岗位内容,未查到返回空对象") + @ResponseBody + public Result getJob(@Valid @RequestBody JobInWorkReq dto) throws ServiceException { + List list = this.service.listByJobId(dto); + if (list.isEmpty()) { + return Result.ok(new JobInWork()); + } + return Result.ok(list.get(0)); + } + + @PostMapping(value = "save") + @ApiOperation(value = "新增或更新") + public Result save(@Valid @RequestBody JobInWork work) { + return Result.okM(this.service.saveInfo(work), "保存成功"); + } + + @PostMapping("/list") + @ApiOperation(value = "查询列表,组长-施工人员") + public Result> list(@RequestBody JobInfoReq request) { + List list = this.service.list(request); + return Result.ok(new TableData<>(list, request.getPage(), request.getPageSize(), list.size())); + } + + @PostMapping("/submit") + @ApiOperation(value = "组长提交/项目经理审批") + public Result> submit(@RequestBody JobInfoReq request) { + this.service.submit(request); + return Result.ok(); + } + + @PostMapping("/reject") + @ApiOperation(value = "组长驳回/项目经理驳回") + public Result> reject(@RequestBody JobInfoReq request) { + this.service.reject(request); + return Result.ok(); + } +} + diff --git a/web/src/main/java/com/dite/znpt/web/controller/JobOutWorkController.java b/web/src/main/java/com/dite/znpt/web/controller/JobOutWorkController.java new file mode 100644 index 0000000..6c24d11 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/JobOutWorkController.java @@ -0,0 +1,66 @@ +package com.dite.znpt.web.controller; + +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.TableData; +import com.dite.znpt.domain.entity.job.JobOutWork; +import com.dite.znpt.domain.vo.job.req.JobInfoReq; +import com.dite.znpt.domain.vo.job.req.JobOutWorkReq; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.service.job.JobOutWorkService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * @author Julio + * @date 2023/2/1 14:26 + * @description 外部工作 + */ +@Api(tags = "外部工作", description = "外部工作") +@RestController +@RequestMapping("/job-out-work") +public class JobOutWorkController { + + @Autowired + private JobOutWorkService service; + + @PostMapping(value = "getWorkContent") + @ApiOperation(value = "根据jobId查询岗位内容,未查到返回空对象") + @ResponseBody + public Result getJob(@Valid @RequestBody JobOutWorkReq dto) throws ServiceException { + return Result.ok(this.service.getByJobId(dto)); + } + + @PostMapping(value = "save") + @ApiOperation(value = "新增或更新") + public Result save(@Valid @RequestBody JobOutWork work) { + return Result.okM(this.service.saveInfo(work), "保存成功"); + } + + @PostMapping("/list") + @ApiOperation(value = "查询列表,组长-施工人员") + public Result> list(@RequestBody JobInfoReq request) { + List list = this.service.list(request); + return Result.ok(new TableData<>(list, request.getPage(), request.getPageSize(), list.size())); + } + + @PostMapping("/submit") + @ApiOperation(value = "组长提交/项目经理审批") + public Result> submit(@RequestBody JobInfoReq request) { + this.service.submit(request); + return Result.ok(); + } + + @PostMapping("/reject") + @ApiOperation(value = "组长驳回/项目经理驳回") + public Result> reject(@RequestBody JobInfoReq request) { + this.service.reject(request); + return Result.ok(); + } + +} + diff --git a/web/src/main/java/com/dite/znpt/web/controller/JobSummaryWorkController.java b/web/src/main/java/com/dite/znpt/web/controller/JobSummaryWorkController.java new file mode 100644 index 0000000..5969531 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/JobSummaryWorkController.java @@ -0,0 +1,74 @@ +package com.dite.znpt.web.controller; + +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.TableData; +import com.dite.znpt.domain.entity.job.JobOutWork; +import com.dite.znpt.domain.entity.job.JobSummaryWork; +import com.dite.znpt.domain.vo.job.req.JobInfoReq; +import com.dite.znpt.domain.vo.job.req.JobSummaryWorkReq; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.service.job.JobInWorkService; +import com.dite.znpt.service.job.JobOutWorkService; +import com.dite.znpt.service.job.JobSummaryWorkService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * @author Julio + * @date 2023/2/1 14:26 + * @description 汇总报告 + */ +@Api(tags = "汇总报告", description = "汇总报告") +@RestController +@RequestMapping("/job-summary-work") +public class JobSummaryWorkController { + + @Autowired + private JobSummaryWorkService service; + + @PostMapping(value = "getWorkContent") + @ApiOperation(value = "根据jobId查询岗位内容,未查到返回空对象") + @ResponseBody + public Result getJob(@Valid @RequestBody JobSummaryWorkReq dto) throws ServiceException { + List list = this.service.listByJobId(dto); + if (list.isEmpty()) { + return Result.ok(new JobSummaryWork()); + } + return Result.ok(list.get(0)); + } + + @PostMapping(value = "save") + @ApiOperation(value = "新增或更新") + public Result save(@Valid @RequestBody JobSummaryWork work) { + return Result.okM(this.service.saveInfo(work), "保存成功"); + } + + @PostMapping("/list") + @ApiOperation(value = "查询列表,组长-施工人员") + public Result> list(@RequestBody JobInfoReq request) { + List list = this.service.list(request); + return Result.ok(new TableData<>(list, request.getPage(), request.getPageSize(), list.size())); + } + + @PostMapping("/submit") + @ApiOperation(value = "组长提交/项目经理审批") + public Result> submit(@RequestBody JobInfoReq request) { + this.service.submit(request); + return Result.ok(); + } + + @PostMapping("/reject") + @ApiOperation(value = "组长驳回/项目经理驳回") + public Result> reject(@RequestBody JobInfoReq request) { + this.service.reject(request); + return Result.ok(); + } + +} + diff --git a/web/src/main/java/com/dite/znpt/web/controller/MaintainSuggestionController.java b/web/src/main/java/com/dite/znpt/web/controller/MaintainSuggestionController.java new file mode 100644 index 0000000..cbc0220 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/MaintainSuggestionController.java @@ -0,0 +1,67 @@ +package com.dite.znpt.web.controller; + +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.vo.MaintainSuggestionReq; +import com.dite.znpt.domain.vo.MaintainSuggestionResp; +import com.dite.znpt.service.MaintainSuggestionService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/7/7 22:31 + * @Description: + */ +@Api(tags = "维修建议库") +@RestController +@RequestMapping("/maintain_suggestion") +public class MaintainSuggestionController { + + @Resource + private MaintainSuggestionService maintainSuggestionService; + + @ApiOperation(value = "分页查询维修建议列表", httpMethod = "GET") + @GetMapping("/page") + public PageResult page(@RequestParam(required = false) String defectLevel, @RequestParam(required = false) String defectType){ + return PageResult.ok(maintainSuggestionService.page(defectLevel, defectType)); + } + + @ApiOperation(value = "查询维修建议列表", httpMethod = "GET") + @GetMapping("/list") + public Result> list(@RequestParam(required = false) String defectLevel, @RequestParam(required = false) String defectType){ + return Result.ok(maintainSuggestionService.list(defectLevel, defectType)); + } + + @ApiOperation(value = "查询维修建议详情", httpMethod = "GET") + @GetMapping("/detail/{suggestionId}") + public Result detail(@PathVariable String suggestionId){ + return Result.ok(maintainSuggestionService.detail(suggestionId)); + } + + @ApiOperation(value = "新增维修建议", httpMethod = "POST") + @PostMapping + public Result add(@Validated @RequestBody MaintainSuggestionReq req){ + maintainSuggestionService.save(req); + return Result.ok(); + } + + @ApiOperation(value = "修改维修建议", httpMethod = "PUT") + @PutMapping + public Result edit(@PathVariable String suggestionId, @Validated @RequestBody MaintainSuggestionReq req){ + maintainSuggestionService.update(suggestionId, req); + return Result.ok(); + } + + @ApiOperation(value = "删除维修建议", httpMethod = "DELETE") + @DeleteMapping("/{suggestionId}") + public Result remove(@PathVariable String suggestionId){ + maintainSuggestionService.deleteById(suggestionId); + return Result.ok(); + } +} diff --git a/web/src/main/java/com/dite/znpt/web/controller/MenuController.java b/web/src/main/java/com/dite/znpt/web/controller/MenuController.java new file mode 100644 index 0000000..2620c62 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/MenuController.java @@ -0,0 +1,58 @@ +package com.dite.znpt.web.controller; + +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.vo.MenuReq; +import com.dite.znpt.domain.vo.MenuResp; +import com.dite.znpt.service.MenuService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + * @author Bear.G + * @date 2025/5/21/周三 15:01 + * @description + */ +@Api(tags = "菜单信息") +@RestController +@RequestMapping("/menu") +public class MenuController { + + @Resource + private MenuService menuService; + + @ApiOperation(value = "查询菜单树", httpMethod = "GET") + @GetMapping("/tree") + public Result tree (@RequestParam(name = "menuName", required = false) String menuName, @RequestParam(defaultValue = "PC") String terminalType) { + return Result.ok(menuService.tree(menuName, terminalType)); + } + + @ApiOperation(value = "查询菜单详情", httpMethod = "GET") + @GetMapping("/detail/{menuId}") + public Result detail(@PathVariable String menuId) { + return Result.ok(menuService.detail(menuId)); + } + + @ApiOperation(value = "新增菜单", httpMethod = "POST") + @PostMapping + public Result add(@RequestBody MenuReq req) { + menuService.save(req); + return Result.ok(); + } + + @ApiOperation(value = "修改菜单", httpMethod = "PUT") + @PutMapping("/{menuId}") + public Result update(@PathVariable String menuId, @RequestBody MenuReq req) { + menuService.update(menuId, req); + return Result.ok(); + } + + @ApiOperation(value = "删除菜单", httpMethod = "DELETE") + @DeleteMapping("/{menuId}") + public Result delete(@PathVariable String menuId) { + menuService.deleteById(menuId); + return Result.ok(); + } +} diff --git a/web/src/main/java/com/dite/znpt/web/controller/ModelConfigController.java b/web/src/main/java/com/dite/znpt/web/controller/ModelConfigController.java new file mode 100644 index 0000000..117efbe --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/ModelConfigController.java @@ -0,0 +1,69 @@ +package com.dite.znpt.web.controller; + + +import com.dite.znpt.config.YoloModelRegistry; +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.vo.ModelConfigListReq; +import com.dite.znpt.domain.vo.ModelConfigReq; +import com.dite.znpt.domain.vo.ModelConfigResp; +import com.dite.znpt.service.ModelConfigService; +import com.dite.znpt.service.impl.MultiModelYoloService; +import com.dite.znpt.util.ValidationGroup; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + * @author huise23 + * @date 2025/07/02 21:21 + */ +@Api(tags = "模型配置") +@RestController +@RequestMapping("/model-config") +public class ModelConfigController { + @Resource + private ModelConfigService modelConfigService; + @Resource + private YoloModelRegistry registry; + @Autowired + private MultiModelYoloService multiModelYoloService; + + @ApiOperation(value = "获取列表", httpMethod = "GET") + @GetMapping("/list") + public PageResult list(ModelConfigListReq modelConfigReq) { + return PageResult.ok(modelConfigService.selectList(modelConfigReq)); + } + + @ApiOperation(value = "根据Id获取详细信息", httpMethod = "GET") + @GetMapping("/{modelId}") + public Result getInfo(@PathVariable String modelId) { + return Result.ok(modelConfigService.selectById(modelId)); + } + + @ApiOperation(value = "新增", httpMethod = "POST") + @PostMapping + public Result add(@Validated(ValidationGroup.Insert.class) @RequestBody ModelConfigReq modelConfigReq) { + modelConfigService.saveData(modelConfigReq); + return Result.ok(); + } + + @ApiOperation(value = "修改", httpMethod = "PUT") + @PutMapping + public Result edit(@Validated(ValidationGroup.Update.class) @RequestBody ModelConfigReq modelConfigReq) { + modelConfigService.updateData(modelConfigReq); + return Result.ok(); + } + + @ApiOperation(value = "删除", httpMethod = "DELETE") + @DeleteMapping("/{modelId}") + public Result remove(@PathVariable String modelId) { + modelConfigService.deleteById(modelId); + return Result.ok(); + } +} + diff --git a/web/src/main/java/com/dite/znpt/web/controller/PartController.java b/web/src/main/java/com/dite/znpt/web/controller/PartController.java new file mode 100644 index 0000000..596eee6 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/PartController.java @@ -0,0 +1,94 @@ +package com.dite.znpt.web.controller; + + +import com.dite.znpt.constant.Constants; +import com.dite.znpt.domain.vo.PartListReq; +import com.dite.znpt.domain.vo.PartListResp; +import com.dite.znpt.domain.vo.PartReq; +import com.dite.znpt.domain.vo.PartResp; +import com.dite.znpt.domain.entity.PartEntity; +import com.dite.znpt.service.PartService; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.util.ValidationGroup; +import com.pig4cloud.plugin.excel.annotation.RequestExcel; +import com.pig4cloud.plugin.excel.annotation.ResponseExcel; +import com.pig4cloud.plugin.excel.vo.ErrorMessage; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + */ +@Api(tags = "部件信息") +@RestController +@RequestMapping("/part") +public class PartController { + @Resource + private PartService partService; + + @ApiOperation(value = "分页查询部件信息列表", httpMethod = "GET") + @GetMapping("/page") + public PageResult page(PartListReq partReq) { + return PageResult.ok(partService.page(partReq)); + } + + @ApiOperation(value = "查询部件信息列表", httpMethod = "GET") + @GetMapping("/list") + public Result> list(PartListReq partReq) { + return Result.ok(partService.list(partReq)); + } + + @ApiOperation(value = "查询部件信息详情", httpMethod = "GET") + @GetMapping("/detail/{partId}") + public Result detail(@PathVariable String partId) { + return Result.ok(partService.detail(partId)); + } + + @ApiOperation(value = "新增部件信息", httpMethod = "POST") + @PostMapping + public Result add(@Validated(ValidationGroup.Insert.class) @RequestBody PartReq req) { + partService.save(req); + return Result.ok(); + } + + @ApiOperation(value = "修改部件信息", httpMethod = "PUT") + @PutMapping("/{partId}") + public Result edit(@Validated(ValidationGroup.Update.class) @PathVariable String partId, @RequestBody PartReq req) { + partService.update(partId, req); + return Result.ok(); + } + + @ApiOperation(value = "删除部件信息", httpMethod = "DELETE") + @DeleteMapping("/{partId}") + public Result remove(@PathVariable String partId) { + partService.deleteById(partId); + return Result.ok(); + } + + @ApiOperation(value = "导出部件-需求待明确", httpMethod = "GET") + @GetMapping("/export") + @ResponseExcel(name = "部件") + public List export(PartListReq partReq) { + return partService.list(partReq); + } + + @ApiOperation(value = "导入部件-需求待明确", httpMethod = "POST") + @PostMapping("/import") + public Result importData(@RequestExcel List dataList, BindingResult bindingResult) { + // JSR 303 校验通用校验获取失败的数据 + List errorMessageList = (List) bindingResult.getTarget(); + if (errorMessageList != null && !errorMessageList.isEmpty()) { + return Result.error(Constants.SERVICE_EXCEPTION, "导入失败"); + } + return Result.okM("导入"+dataList.size()+"条数据"); + } +} + diff --git a/web/src/main/java/com/dite/znpt/web/controller/PostController.java b/web/src/main/java/com/dite/znpt/web/controller/PostController.java new file mode 100644 index 0000000..bb88e04 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/PostController.java @@ -0,0 +1,68 @@ +package com.dite.znpt.web.controller; + +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.vo.PostReq; +import com.dite.znpt.domain.vo.PostResp; +import com.dite.znpt.service.PostService; +import com.dite.znpt.util.ValidationGroup; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/20/周二 10:05 + * @description + */ +@Api(tags = "岗位信息") +@RestController +@RequestMapping("/post") +public class PostController { + @Resource + private PostService postService; + + @ApiOperation(value = "分页查询岗位信息列表", httpMethod = "GET") + @GetMapping("/page") + public PageResult page(@RequestParam(value = "postName", required = false) String postName){ + return PageResult.ok(postService.page(postName)); + } + + @ApiOperation(value = "查询岗位信息列表", httpMethod = "GET") + @GetMapping("/list") + public Result> list(@RequestParam(value = "postName", required = false) String postName){ + return Result.ok(postService.list(postName)); + } + + @ApiOperation(value = "查询岗位信息详情", httpMethod = "GET") + @GetMapping("/detail/{postId}") + public Result detail(@PathVariable String postId){ + return Result.ok(postService.detail(postId)); + } + + @ApiOperation(value = "新增岗位信息", httpMethod = "POST") + @PostMapping + public Result add(@Validated(ValidationGroup.Insert.class) @RequestBody PostReq req){ + postService.save(req); + return Result.ok(); + } + + @ApiOperation(value = "修改岗位信息", httpMethod = "PUT") + @PutMapping("/{postId}") + public Result edit(@PathVariable String postId, @Validated(ValidationGroup.Update.class) @RequestBody PostReq req){ + postService.update(postId, req); + return Result.ok(); + } + + @ApiOperation(value = "删除岗位信息", httpMethod = "DELETE") + @DeleteMapping("/{postId}") + public Result remove(@PathVariable String postId){ + postService.deleteById(postId); + return Result.ok(); + } + +} diff --git a/web/src/main/java/com/dite/znpt/web/controller/ProjectBudgetInfoController.java b/web/src/main/java/com/dite/znpt/web/controller/ProjectBudgetInfoController.java new file mode 100644 index 0000000..4a21a96 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/ProjectBudgetInfoController.java @@ -0,0 +1,48 @@ +package com.dite.znpt.web.controller; + + +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.vo.ProjectBudgetInfoListReq; +import com.dite.znpt.domain.vo.ProjectBudgetInfoListResp; +import com.dite.znpt.domain.vo.ProjectBudgetInfoReq; +import com.dite.znpt.domain.vo.ProjectBudgetInfoResp; +import com.dite.znpt.service.ProjectBudgetInfoService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author huise23 + * @date 2025/07/17 21:55 + */ +@Api(tags = "项目预算信息") +@RestController +@RequestMapping("/project-budget-info") +public class ProjectBudgetInfoController { + @Resource + private ProjectBudgetInfoService projectBudgetInfoService; + + @ApiOperation(value = "获取项目预算信息列表", httpMethod = "GET") + @GetMapping("/list") + public PageResult list(ProjectBudgetInfoListReq projectBudgetInfoReq) { + return PageResult.ok(projectBudgetInfoService.selectList(projectBudgetInfoReq)); + } + + @ApiOperation(value = "根据项目id获取项目预算信息列表", httpMethod = "GET") + @GetMapping("/detail/{projectId}") + public PageResult detailByProjectId(@PathVariable String projectId) { + return PageResult.ok(projectBudgetInfoService.detailByProjectId(projectId)); + } + + @ApiOperation(value = "保存项目预算信息", httpMethod = "POST") + @PostMapping + public Result add(@RequestBody List projectBudgetInfoReq) { + projectBudgetInfoService.saveData(projectBudgetInfoReq); + return Result.ok(); + } +} + diff --git a/web/src/main/java/com/dite/znpt/web/controller/ProjectController.java b/web/src/main/java/com/dite/znpt/web/controller/ProjectController.java new file mode 100644 index 0000000..88f58b4 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/ProjectController.java @@ -0,0 +1,104 @@ +package com.dite.znpt.web.controller; + + +import cn.dev33.satoken.stp.StpUtil; +import com.dite.znpt.constant.Constants; +import com.dite.znpt.domain.vo.ProjectListReq; +import com.dite.znpt.domain.vo.ProjectListResp; +import com.dite.znpt.domain.vo.ProjectReq; +import com.dite.znpt.domain.vo.ProjectResp; +import com.dite.znpt.domain.entity.ProjectEntity; +import com.dite.znpt.service.ProjectService; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.util.ValidationGroup; +import com.pig4cloud.plugin.excel.annotation.RequestExcel; +import com.pig4cloud.plugin.excel.annotation.ResponseExcel; +import com.pig4cloud.plugin.excel.vo.ErrorMessage; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + */ +@Api(tags = "项目信息") +@RestController +@RequestMapping("/project") +public class ProjectController { + @Resource + private ProjectService projectService; + + @ApiOperation(value = "分页查询项目信息列表", httpMethod = "GET") + @GetMapping("/page") + public PageResult page(ProjectListReq req) { + return PageResult.ok(projectService.page(req)); + } + + @ApiOperation(value = "查询项目信息列表", httpMethod = "GET") + @GetMapping("/list") + public Result> list(ProjectListReq req) { + return Result.ok(projectService.list(req)); + } + + @ApiOperation(value = "查询项目信息详细信息", httpMethod = "GET") + @GetMapping("/detail/{projectId}") + public Result detail(@PathVariable String projectId) { + return Result.ok(projectService.detail(projectId)); + } + + @ApiOperation(value = "新增项目信息", httpMethod = "POST") + @PostMapping + public Result add(@Validated(ValidationGroup.Insert.class) @RequestBody ProjectReq req) { + projectService.save(req); + return Result.ok(); + } + + @ApiOperation(value = "修改项目信息", httpMethod = "PUT") + @PutMapping("/{projectId}") + public Result edit(@PathVariable String projectId, @Validated(ValidationGroup.Update.class) @RequestBody ProjectReq req) { + projectService.update(projectId, req); + return Result.ok(); + } + + @ApiOperation(value = "删除项目信息", httpMethod = "DELETE") + @DeleteMapping("/{projectId}") + public Result remove(@PathVariable String projectId) { + projectService.deleteById(projectId); + return Result.ok(); + } + + @ApiOperation(value = "导出项目信息-需求待明确", httpMethod = "GET") + @GetMapping("/export") + @ResponseExcel(name = "项目信息") + public List export(ProjectListReq req) { + return null; + } + + @ApiOperation(value = "导入项目信息-需求待明确", httpMethod = "POST") + @PostMapping("/import") + public Result importData(@RequestExcel List dataList, BindingResult bindingResult) { + // JSR 303 校验通用校验获取失败的数据 + List errorMessageList = (List) bindingResult.getTarget(); + if (errorMessageList != null && !errorMessageList.isEmpty()) { + return Result.error(Constants.SERVICE_EXCEPTION, "导入失败"); + } + return Result.okM("导入"+dataList.size()+"条数据"); + } + + @ApiOperation(value = "查询我的项目", httpMethod = "GET") + @GetMapping("/my") + public Result> my() { + ProjectListReq req = new ProjectListReq(); + req.setUserId(StpUtil.getLoginIdAsString()); + return Result.ok(projectService.list(req)); + } + +} + diff --git a/web/src/main/java/com/dite/znpt/web/controller/ProjectTaskController.java b/web/src/main/java/com/dite/znpt/web/controller/ProjectTaskController.java new file mode 100644 index 0000000..0d6db55 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/ProjectTaskController.java @@ -0,0 +1,111 @@ +package com.dite.znpt.web.controller; + + +import cn.dev33.satoken.stp.StpUtil; +import com.dite.znpt.constant.Constants; +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.entity.ProjectTaskEntity; +import com.dite.znpt.domain.vo.*; +import com.dite.znpt.service.ProjectTaskService; +import com.dite.znpt.util.PageUtil; +import com.dite.znpt.util.ValidationGroup; +import com.pig4cloud.plugin.excel.annotation.RequestExcel; +import com.pig4cloud.plugin.excel.annotation.ResponseExcel; +import com.pig4cloud.plugin.excel.vo.ErrorMessage; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author huise23 + * @date 2025/06/25 17:18 + */ +@Api(tags = "项目任务信息") +@RestController +@RequestMapping("/project-task") +public class ProjectTaskController { + @Resource + private ProjectTaskService projectTaskService; + + @ApiOperation(value = "获取项目任务信息列表", httpMethod = "GET") + @GetMapping("/list") + public PageResult list(ProjectTaskListReq projectTaskReq) { + PageUtil.startPage(); + return PageResult.ok(projectTaskService.selectList(projectTaskReq)); + } + + @ApiOperation(value = "根据项目任务信息Id获取详细信息", httpMethod = "GET") + @GetMapping("/{taskId}") + public Result getInfo(@PathVariable String taskId) { + return Result.ok(projectTaskService.selectById(taskId)); + } + + @ApiOperation(value = "新增项目任务信息", httpMethod = "POST") + @PostMapping + public Result add(@Validated(ValidationGroup.Insert.class) @RequestBody ProjectTaskReq projectTaskReq) { + projectTaskService.saveData(projectTaskReq); + return Result.ok(); + } + + @ApiOperation(value = "修改项目任务信息", httpMethod = "PUT") + @PutMapping + public Result edit(@Validated(ValidationGroup.Update.class) @RequestBody ProjectTaskReq projectTaskReq) { + projectTaskService.updateData(projectTaskReq); + return Result.ok(); + } + + @ApiOperation(value = "删除项目任务信息", httpMethod = "DELETE") + @DeleteMapping("/{taskId}") + public Result remove(@PathVariable String taskId) { + projectTaskService.deleteById(taskId); + return Result.ok(); + } + + @ApiOperation(value = "导出项目任务信息", httpMethod = "GET") + @GetMapping("/export") + @ResponseExcel(name = "项目任务信息") + public List export(ProjectTaskListReq projectTaskReq) { + projectTaskReq.setIsExport(true); + return projectTaskService.selectList(projectTaskReq); + } + + @ApiOperation(value = "导入项目任务信息", httpMethod = "POST") + @PostMapping("/import") + public Result importData(@RequestExcel List dataList, BindingResult bindingResult) { + // JSR 303 校验通用校验获取失败的数据 + List errorMessageList = (List) bindingResult.getTarget(); + if (errorMessageList != null && !errorMessageList.isEmpty()) { + return Result.error(Constants.SERVICE_EXCEPTION, "导入失败", errorMessageList); + } + return Result.okM("导入"+dataList.size()+"条数据"); + } + + @ApiOperation(value = "开始任务/任务组开始任务", httpMethod = "PUT") + @PutMapping("/startTask") + public Result startTask(@RequestBody ProjectTaskStartReq taskStartReq) { + projectTaskService.startTask(taskStartReq); + return Result.ok(); + } + + @ApiOperation(value = "结束任务/任务组结束任务", httpMethod = "PUT") + @PutMapping("/endTask") + public Result endTask(@RequestBody ProjectTaskStartReq taskStartReq) { + projectTaskService.endTask(taskStartReq); + return Result.ok(); + } + + @ApiOperation(value = "查询我的任务", httpMethod = "GET") + @GetMapping("/my") + public Result> my() { + ProjectTaskListReq req = new ProjectTaskListReq(); + req.setUserId(StpUtil.getLoginIdAsString()); + return Result.ok(projectTaskService.selectList(req)); + } +} + diff --git a/web/src/main/java/com/dite/znpt/web/controller/ProjectTaskGroupController.java b/web/src/main/java/com/dite/znpt/web/controller/ProjectTaskGroupController.java new file mode 100644 index 0000000..645dd97 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/ProjectTaskGroupController.java @@ -0,0 +1,63 @@ +package com.dite.znpt.web.controller; + + +import com.dite.znpt.constant.Constants; +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.entity.ProjectTaskGroupEntity; +import com.dite.znpt.domain.vo.ProjectTaskGroupListReq; +import com.dite.znpt.domain.vo.ProjectTaskGroupReq; +import com.dite.znpt.domain.vo.ProjectTaskGroupResp; +import com.dite.znpt.service.ProjectTaskGroupService; +import com.dite.znpt.util.ValidationGroup; +import com.pig4cloud.plugin.excel.annotation.RequestExcel; +import com.pig4cloud.plugin.excel.annotation.ResponseExcel; +import com.pig4cloud.plugin.excel.vo.ErrorMessage; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author huise23 + * @date 2025/06/25 17:18 + */ +@Api(tags = "项目任务组信息") +@RestController +@RequestMapping("/project-task-group") +public class ProjectTaskGroupController { + @Resource + private ProjectTaskGroupService projectTaskGroupService; + + @ApiOperation(value = "获取项目任务组信息列表", httpMethod = "GET") + @GetMapping("/list") + public PageResult list(ProjectTaskGroupListReq projectTaskGroupReq) { + return PageResult.ok(projectTaskGroupService.selectList(projectTaskGroupReq)); + } + + @ApiOperation(value = "新增项目任务组信息", httpMethod = "POST") + @PostMapping + public Result add(@Validated(ValidationGroup.Insert.class) @RequestBody ProjectTaskGroupReq projectTaskGroupReq) { + projectTaskGroupService.saveData(projectTaskGroupReq); + return Result.ok(); + } + + @ApiOperation(value = "修改项目任务组信息", httpMethod = "PUT") + @PutMapping + public Result edit(@Validated(ValidationGroup.Update.class) @RequestBody ProjectTaskGroupReq projectTaskGroupReq) { + projectTaskGroupService.updateData(projectTaskGroupReq); + return Result.ok(); + } + + @ApiOperation(value = "删除项目任务组信息", httpMethod = "DELETE") + @DeleteMapping("/{groupId}") + public Result remove(@PathVariable String groupId) { + projectTaskGroupService.deleteById(groupId); + return Result.ok(); + } +} + diff --git a/web/src/main/java/com/dite/znpt/web/controller/RoleController.java b/web/src/main/java/com/dite/znpt/web/controller/RoleController.java new file mode 100644 index 0000000..7c6d42b --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/RoleController.java @@ -0,0 +1,82 @@ +package com.dite.znpt.web.controller; + +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.vo.RoleMenuReq; +import com.dite.znpt.domain.vo.RoleReq; +import com.dite.znpt.domain.vo.RoleResp; +import com.dite.znpt.service.RoleMenuService; +import com.dite.znpt.service.RoleService; +import com.dite.znpt.service.UserRoleService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/21/周三 15:00 + * @description + */ +@Api(tags = "角色信息") +@RestController +@RequestMapping("/role") +public class RoleController { + + @Resource + private RoleService roleService; + + @Resource + private RoleMenuService roleMenuService; + + @ApiOperation(value = "分页查询角色信息列表", httpMethod = "GET") + @GetMapping("/page") + public PageResult page(@RequestParam(value = "roleName", required = false) String roleName){ + return PageResult.ok(roleService.page(roleName)); + } + + @ApiOperation(value = "查询角色信息列表", httpMethod = "GET") + @GetMapping("/list") + public Result> list(@RequestParam(value = "roleName", required = false) String roleName){ + return Result.ok(roleService.list(roleName)); + } + + @ApiOperation(value = "查询角色信息详情", httpMethod = "GET") + @GetMapping("/detail/{roleId}") + public Result detail(@PathVariable String roleId){ + return Result.ok(roleService.detail(roleId)); + } + + @ApiOperation(value = "新增角色信息", httpMethod = "POST") + @PostMapping + public Result add(@RequestBody RoleReq req){ + roleService.save(req); + return Result.ok(); + } + + @ApiOperation(value = "修改角色信息", httpMethod = "PUT") + @PutMapping("/{roleId}") + public Result edit(@PathVariable String roleId, @RequestBody RoleReq req){ + roleService.update(roleId, req); + return Result.ok(); + } + + @ApiOperation(value = "删除角色信息", httpMethod = "DELETE") + @DeleteMapping("/{roleId}") + public Result delete(@PathVariable String roleId){ + roleService.deleteById(roleId); + return Result.ok(); + } + + @ApiOperation(value = "绑定菜单", httpMethod = "PUT") + @PutMapping("/bind-menu") + public Result bindMenu(@Validated @RequestBody RoleMenuReq req){ + roleMenuService.bindRoleMenu(req); + return Result.ok(); + } +} diff --git a/web/src/main/java/com/dite/znpt/web/controller/TConstructionController.java b/web/src/main/java/com/dite/znpt/web/controller/TConstructionController.java new file mode 100644 index 0000000..0be2d88 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/TConstructionController.java @@ -0,0 +1,85 @@ +package com.dite.znpt.web.controller; + + +import com.dite.znpt.constant.Constants; +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.entity.TConstructionEntity; +import com.dite.znpt.domain.vo.TConstructionListReq; +import com.dite.znpt.domain.vo.TConstructionReq; +import com.dite.znpt.domain.vo.TConstructionResp; +import com.dite.znpt.service.TConstructionService; +import com.pig4cloud.plugin.excel.annotation.RequestExcel; +import com.pig4cloud.plugin.excel.annotation.ResponseExcel; +import com.pig4cloud.plugin.excel.vo.ErrorMessage; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author huise23 + * @date 2025/07/03 16:25 + */ +@Api(tags = "施工信息") +@RestController +@RequestMapping("/t-construction") +public class TConstructionController { + @Resource + private TConstructionService tConstructionService; + + @ApiOperation(value = "获取施工信息列表", httpMethod = "GET") + @GetMapping("/list") + public PageResult list(TConstructionListReq tConstructionReq) { + return PageResult.ok(tConstructionService.selectList(tConstructionReq)); + } + + @ApiOperation(value = "根据施工信息Id获取详细信息", httpMethod = "GET") + @GetMapping("/{constructionId}") + public Result getInfo(@PathVariable String constructionId) { + return Result.ok(tConstructionService.selectById(constructionId)); + } + + @ApiOperation(value = "新增施工信息", httpMethod = "POST") + @PostMapping + public Result add(@RequestBody TConstructionReq tConstructionReq) { + tConstructionService.saveData(tConstructionReq); + return Result.ok(); + } + + @ApiOperation(value = "修改施工信息", httpMethod = "PUT") + @PutMapping + public Result edit(@RequestBody TConstructionReq tConstructionReq) { + tConstructionService.updateData(tConstructionReq); + return Result.ok(); + } + + @ApiOperation(value = "删除施工信息", httpMethod = "DELETE") + @DeleteMapping("/{constructionId}") + public Result remove(@PathVariable String constructionId) { + tConstructionService.deleteById(constructionId); + return Result.ok(); + } + + @ApiOperation(value = "导出施工信息", httpMethod = "GET") + @GetMapping("/export") + @ResponseExcel(name = "施工信息") + public List export(TConstructionListReq tConstructionReq) { + return tConstructionService.selectList(tConstructionReq); + } + + @ApiOperation(value = "导入施工信息", httpMethod = "POST") + @PostMapping("/import") + public Result importData(@RequestExcel List dataList, BindingResult bindingResult) { + // JSR 303 校验通用校验获取失败的数据 + List errorMessageList = (List) bindingResult.getTarget(); + if (errorMessageList != null && !errorMessageList.isEmpty()) { + return Result.error(Constants.SERVICE_EXCEPTION, "导入失败"); + } + return Result.okM("导入"+dataList.size()+"条数据"); + } +} + diff --git a/web/src/main/java/com/dite/znpt/web/controller/TurbineController.java b/web/src/main/java/com/dite/znpt/web/controller/TurbineController.java new file mode 100644 index 0000000..13f267f --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/TurbineController.java @@ -0,0 +1,103 @@ +package com.dite.znpt.web.controller; + + +import com.dite.znpt.constant.Constants; +import com.dite.znpt.domain.vo.*; +import com.dite.znpt.domain.entity.TurbineEntity; +import com.dite.znpt.service.TurbineService; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.util.ValidationGroup; +import com.pig4cloud.plugin.excel.annotation.RequestExcel; +import com.pig4cloud.plugin.excel.annotation.ResponseExcel; +import com.pig4cloud.plugin.excel.vo.ErrorMessage; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + */ +@Api(tags = "机组信息") +@RestController +@RequestMapping("/turbine") +public class TurbineController { + @Resource + private TurbineService turbineService; + + @ApiOperation(value = "分页查询机组列表", httpMethod = "GET") + @GetMapping("/page") + public PageResult page(TurbineListReq req) { + return PageResult.ok(turbineService.page(req)); + } + + @ApiOperation(value = "查询机组列表", httpMethod = "GET") + @GetMapping("/list") + public Result> list(TurbineListReq req) { + return Result.ok(turbineService.list(req)); + } + + @ApiOperation(value = "查询机组明细列表", httpMethod = "GET") + @GetMapping("/list/info") + public Result> listInfo( TurbineListReq req) { + return Result.ok(turbineService.listInfo(req)); + } + + @ApiOperation(value = "获取指定机组详情", httpMethod = "GET") + @GetMapping("/detail/{turbineId}") + public Result detail(@PathVariable String turbineId) { + return Result.ok(turbineService.detail(turbineId)); + } + + @ApiOperation(value = "获取指定机组明细详情", httpMethod = "GET") + @GetMapping("/info/{turbineId}") + public Result info(@PathVariable String turbineId) { + return Result.ok(turbineService.info(turbineId)); + } + + @ApiOperation(value = "新增机组", httpMethod = "POST") + @PostMapping + public Result add(@Validated(ValidationGroup.Insert.class) @RequestBody TurbineReq req) { + turbineService.save(req); + return Result.ok(); + } + + @ApiOperation(value = "修改机组", httpMethod = "PUT") + @PutMapping("/{turbineId}") + public Result edit(@PathVariable String turbineId, @Validated(ValidationGroup.Insert.class) @RequestBody TurbineReq req) { + turbineService.update(turbineId, req); + return Result.ok(); + } + + @ApiOperation(value = "删除机组", httpMethod = "DELETE") + @DeleteMapping("/{turbineId}") + public Result remove(@PathVariable String turbineId) { + turbineService.deleteById(turbineId); + return Result.ok(); + } + + @ApiOperation(value = "导出机组-需求待明确", httpMethod = "GET") + @GetMapping("/export") + @ResponseExcel(name = "机组") + public List export(TurbineListReq turbineReq) { + return turbineService.list(turbineReq); + } + + @ApiOperation(value = "导入机组-需求待明确", httpMethod = "POST") + @PostMapping("/import") + public Result importData(@RequestExcel List dataList, BindingResult bindingResult) { + // JSR 303 校验通用校验获取失败的数据 + List errorMessageList = (List) bindingResult.getTarget(); + if (errorMessageList != null && !errorMessageList.isEmpty()) { + return Result.error(Constants.SERVICE_EXCEPTION, "导入失败"); + } + return Result.okM("导入"+dataList.size()+"条数据"); + } +} + diff --git a/web/src/main/java/com/dite/znpt/web/controller/UserController.java b/web/src/main/java/com/dite/znpt/web/controller/UserController.java new file mode 100644 index 0000000..18bde3a --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/UserController.java @@ -0,0 +1,75 @@ +package com.dite.znpt.web.controller; + + +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.vo.*; +import com.dite.znpt.service.UserRoleService; +import com.dite.znpt.service.UserService; +import com.dite.znpt.util.ValidationGroup; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + */ +@Api(tags = "用户信息") +@RestController +@RequestMapping("/user") +public class UserController { + @Resource + private UserService userService; + @Resource + private UserRoleService userRoleService; + + @ApiOperation(value = "分页查询用户信息列表", httpMethod = "GET") + @GetMapping("/page") + public PageResult page(UserListReq req) { + return PageResult.ok(userService.page(req)); + } + + @ApiOperation(value = "查询用户信息列表", httpMethod = "GET") + @GetMapping("/list") + public PageResult list(UserListReq req) { + return PageResult.ok(userService.list(req)); + } + + @ApiOperation(value = "根据用户信息Id获取详细信息", httpMethod = "GET") + @GetMapping("/detail/{userId}") + public Result detail(@PathVariable String userId) { + return Result.ok(userService.detail(userId)); + } + + @ApiOperation(value = "新增用户信息", httpMethod = "POST") + @PostMapping + public Result add(@Validated(ValidationGroup.Insert.class) @RequestBody UserReq req) { + return Result.ok(userService.save(req)); + } + + @ApiOperation(value = "修改用户信息", httpMethod = "PUT") + @PutMapping("/{userId}") + public Result edit(@PathVariable String userId, @Validated(ValidationGroup.Update.class) @RequestBody UserReq req) { + userService.update(userId, req); + return Result.ok(); + } + + @ApiOperation(value = "绑定角色", httpMethod = "PUT") + @PutMapping("/bind-role") + public Result bindRole(@Validated @RequestBody UserRoleReq req){ + userRoleService.bindUserRole(req); + return Result.ok(); + } + + @ApiOperation(value = "删除用户信息", httpMethod = "DELETE") + @DeleteMapping("/{userId}") + public Result remove(@PathVariable String userId) { + userService.deleteById(userId); + return Result.ok(); + } +} + diff --git a/web/src/main/java/com/dite/znpt/web/controller/VideoFileInfoController.java b/web/src/main/java/com/dite/znpt/web/controller/VideoFileInfoController.java new file mode 100644 index 0000000..6826618 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/VideoFileInfoController.java @@ -0,0 +1,63 @@ +package com.dite.znpt.web.controller; + + +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.entity.VideoFileInfoEntity; +import com.dite.znpt.domain.vo.VideoFileInfoListReq; +import com.dite.znpt.domain.vo.VideoFileInfoReq; +import com.dite.znpt.domain.vo.VideoFileInfoResp; +import com.dite.znpt.service.VideoFileInfoService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.IOException; + +/** + * @author huise23 + * @date 2025/06/09 09:42 + */ +@Api(tags = "视频文件信息") +@RestController +@RequestMapping("/video-file-info") +public class VideoFileInfoController { + @Resource + private VideoFileInfoService videoFileInfoService; + + @ApiOperation(value = "获取视频文件信息列表", httpMethod = "GET") + @GetMapping("/list") + public PageResult list(VideoFileInfoListReq videoFileInfoReq) { + return PageResult.ok(videoFileInfoService.selectList(videoFileInfoReq)); + } + + @ApiOperation(value = "根据视频文件信息Id获取详细信息", httpMethod = "GET") + @GetMapping("/{id}") + public Result getInfo(@PathVariable String id) { + return Result.ok(videoFileInfoService.selectById(id)); + } + + @ApiOperation(value = "批量上传视频文件", httpMethod = "POST") + @PostMapping("/batch-upload") + public Result batchUploadImage(VideoFileInfoReq infoReq, + @RequestParam("file") MultipartFile[] files) throws IOException { + return Result.ok(videoFileInfoService.batchUpload(infoReq, files)); + } + + @ApiOperation(value = "修改视频文件信息", httpMethod = "PUT") + @PutMapping + public Result edit(@RequestBody VideoFileInfoEntity videoFileInfo) { + videoFileInfoService.updateData(videoFileInfo); + return Result.ok(); + } + + @ApiOperation(value = "删除视频文件信息", httpMethod = "DELETE") + @DeleteMapping("/{id}") + public Result remove(@PathVariable String id) { + videoFileInfoService.deleteById(id); + return Result.ok(); + } +} + diff --git a/web/src/main/java/com/dite/znpt/web/controller/WeatherTypeController.java b/web/src/main/java/com/dite/znpt/web/controller/WeatherTypeController.java new file mode 100644 index 0000000..c36e6f0 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/WeatherTypeController.java @@ -0,0 +1,84 @@ +package com.dite.znpt.web.controller; + + +import com.dite.znpt.constant.Constants; +import com.dite.znpt.domain.vo.WeatherTypeListReq; +import com.dite.znpt.domain.vo.WeatherTypeResp; +import com.dite.znpt.domain.entity.WeatherTypeEntity; +import com.dite.znpt.service.WeatherTypeService; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.PageResult; +import com.pig4cloud.plugin.excel.annotation.RequestExcel; +import com.pig4cloud.plugin.excel.annotation.ResponseExcel; +import com.pig4cloud.plugin.excel.vo.ErrorMessage; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + */ +@Api(tags = "天气类型") +@RestController +@RequestMapping("/weather-type") +public class WeatherTypeController { + @Resource + private WeatherTypeService weatherTypeService; + + @ApiOperation(value = "获取天气类型列表", httpMethod = "GET") + @GetMapping("/list") + public PageResult list(WeatherTypeListReq weatherTypeReq) { + return PageResult.ok(weatherTypeService.selectList(weatherTypeReq)); + } + + @ApiOperation(value = "根据天气类型Id获取详细信息", httpMethod = "GET") + @GetMapping("/{weatherCode}") + public Result getInfo(@PathVariable String weatherCode) { + return Result.ok(weatherTypeService.selectById(weatherCode)); + } + + @ApiOperation(value = "新增天气类型", httpMethod = "POST") + @PostMapping + public Result add(@RequestBody WeatherTypeEntity weatherType) { + weatherTypeService.saveData(weatherType); + return Result.ok(); + } + + @ApiOperation(value = "修改天气类型", httpMethod = "PUT") + @PutMapping + public Result edit(@RequestBody WeatherTypeEntity weatherType) { + weatherTypeService.updateData(weatherType); + return Result.ok(); + } + + @ApiOperation(value = "删除天气类型", httpMethod = "DELETE") + @DeleteMapping("/{weatherCode}") + public Result remove(@PathVariable String weatherCode) { + weatherTypeService.deleteById(weatherCode); + return Result.ok(); + } + + @ApiOperation(value = "导出天气类型", httpMethod = "GET") + @GetMapping("/export") + @ResponseExcel(name = "天气类型") + public List export(WeatherTypeListReq weatherTypeReq) { + return weatherTypeService.selectList(weatherTypeReq); + } + + @ApiOperation(value = "导入天气类型", httpMethod = "POST") + @PostMapping("/import") + public Result importData(@RequestExcel List dataList, BindingResult bindingResult) { + // JSR 303 校验通用校验获取失败的数据 + List errorMessageList = (List) bindingResult.getTarget(); + if (errorMessageList != null && !errorMessageList.isEmpty()) { + return Result.error(Constants.SERVICE_EXCEPTION, "导入失败"); + } + return Result.okM("导入"+dataList.size()+"条数据"); + } +} + diff --git a/web/src/main/java/com/dite/znpt/web/controller/WorkShiftController.java b/web/src/main/java/com/dite/znpt/web/controller/WorkShiftController.java new file mode 100644 index 0000000..78708b3 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/WorkShiftController.java @@ -0,0 +1,77 @@ +package com.dite.znpt.web.controller; + +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.vo.WorkShiftListResp; +import com.dite.znpt.domain.vo.WorkShiftReq; +import com.dite.znpt.domain.vo.WorkShiftResp; +import com.dite.znpt.service.WorkShiftService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/6/30/周一 10:29 + * @description + */ +@Api(tags = "班次管理") +@RestController +@RequestMapping("/work-shift") +public class WorkShiftController { + + @Resource + private WorkShiftService workShiftService; + + @ApiOperation(value = "分页查询班次信息", httpMethod = "GET") + @GetMapping("/page") + public PageResult page(@RequestParam(required = false) String workShitName) { + return PageResult.ok(workShiftService.page(workShitName)); + } + + @ApiOperation(value = "查询班次信息列表", httpMethod = "GET") + @GetMapping("/list") + public Result> list(@RequestParam(required = false) String workShiftName) { + return Result.ok(workShiftService.list(workShiftName)); + } + + + @ApiOperation(value = "查询班次详情信息", httpMethod = "GET") + @GetMapping("/detail/{workShiftId}") + public Result detail(@PathVariable String workShiftId) { + return Result.ok(workShiftService.detail(workShiftId)); + } + + @ApiOperation(value = "新增班次信息", httpMethod = "POST") + @PostMapping() + public Result add(@Valid @RequestBody WorkShiftReq req){ + workShiftService.save(req); + return Result.ok(); + } + + @ApiOperation(value = "修改班次信息", httpMethod = "PUT") + @PutMapping("/{workShiftId}") + public Result edit(@PathVariable String workShiftId, @Valid @RequestBody WorkShiftReq req){ + workShiftService.update(workShiftId, req); + return Result.ok(); + } + + + @ApiOperation(value = "发布班次信息", httpMethod = "PUT") + @PutMapping("/publish/{workShiftId}") + public Result publish(@PathVariable String workShiftId){ + workShiftService.publish(workShiftId); + return Result.ok(); + } + + @ApiOperation(value = "删除班次信息", httpMethod = "DELETE") + @DeleteMapping("/{workShiftId}") + public Result remove(@PathVariable String workShiftId){ + workShiftService.delete(workShiftId); + return Result.ok(); + } +} diff --git a/web/src/main/java/com/dite/znpt/web/controller/WorkbenchController.java b/web/src/main/java/com/dite/znpt/web/controller/WorkbenchController.java new file mode 100644 index 0000000..9d49f92 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/WorkbenchController.java @@ -0,0 +1,34 @@ +package com.dite.znpt.web.controller; + +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.vo.WeatherTypeListReq; +import com.dite.znpt.domain.vo.WeatherTypeResp; +import com.dite.znpt.domain.vo.WorkbenchInfoResp; +import com.dite.znpt.service.WorkbenchService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + */ +@Api(tags = "工作台") +@RestController +@RequestMapping("/workbench") +@RequiredArgsConstructor +public class WorkbenchController { + + private final WorkbenchService workbenchService; + + @ApiOperation(value = "获取工作台信息", httpMethod = "GET") + @GetMapping("/info") + public Result info() { + return Result.ok(workbenchService.getInfo()); + } + +} diff --git a/web/src/main/resources/application-dev.yml b/web/src/main/resources/application-dev.yml new file mode 100644 index 0000000..1d8c3aa --- /dev/null +++ b/web/src/main/resources/application-dev.yml @@ -0,0 +1,150 @@ +# 开发环境配置 +server: + # 服务器的HTTP端口,默认为8080 + port: 8888 + +# 数据源配置 +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://39.99.201.243:3306/test01?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + username: root + password: BUw8YW6%@^8q + druid: + # 初始连接数 + initialSize: 5 + # 最小连接池数量 + minIdle: 10 + # 最大连接池数量 + maxActive: 50 + # 配置获取连接等待超时的时间 + maxWait: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 300000 + # 配置一个连接在池中最大生存的时间,单位是毫秒 + maxEvictableIdleTimeMillis: 900000 + # 配置检测连接是否有效 + validationQuery: SELECT 1 FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + webStatFilter: + enabled: true + statViewServlet: + enabled: true + # 设置白名单,不填则允许所有访问 + allow: + url-pattern: /druid/* + # 控制台管理用户名和密码 + login-username: iotplatform + login-password: 123456 + filter: + stat: + enabled: true + # 慢SQL记录 + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true + # redis 配置 + redis: + pool: + max-active: 3000 + max-idle: 1000 + max-wait: 3000 + host: 39.99.201.243 + port: 6379 + password: diTeZn@123 + timeout: 3000 + # 0 gaea系统,3 gaea-dev/gaea-test系统,4 znpt开发,5 znpt测试 6 znpt生产 + database: 4 + rabbitmq: + host: 39.99.201.243 + port: 3389 + username: dite + password: diTezN@123 +## MINIO配置 +#minio: +# url: http://10.20.32.11:9000 +# accessKey: minio +# secretKey: minio@321 +# private: +# bucket: pri +# domain: +# prefix: /minio-pri/ +# public: +# bucket: pub +# domain: +# prefix: /minio/ + +############## Sa-Token 配置 (文档: https://sa-token.cc) ############## +sa-token: + # token 名称(同时也是 cookie 名称) + token-name: Authorization + # token 有效期(单位:秒) 默认30天,-1 代表永久有效 + timeout: 2592000 + # token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结 + active-timeout: -1 + # 是否允许同一账号多地同时登录 (为 true 时允许一起登录, 为 false 时新登录挤掉旧登录) + is-concurrent: true + # 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token, 为 false 时每次登录新建一个 token) + is-share: false + # token 风格(默认可取值:uuid、simple-uuid、random-32、random-64、random-128、tik) + token-style: uuid + # 是否输出操作日志 + is-log: true + +sip-config: + name: 信令服务 + ip: 127.0.0.1 + port: 1074 + charset: gb2312 + domain: 3402000000 + id: 34020000002000000001 + password: 123456 + mediaType: mp4 + +zlm-config: + # 流媒体名称 + mediaName: 媒体服务 + # 流媒体服务商 + mediaService: ZLMdia + # 公网ip + publicHost: + # 接口ip + apiHost: 127.0.0.1 + # 接口端口 + apiPort: 8080 + # 密钥 + secretKey: 6Q76ivvVOQDsnnfOSKbtVzcYpbgy4n1G + # 流id前缀 + streamPrefix: + # rtp ip + rtpHost: 127.0.0.1 + # rtp 端口 + rtpPort: 8080 + # 动态端口起始值 + dynamicPortStart: 30150 + # 动态端口结束值 + dynamicPortEnd: 30185 + +upload: +# 此处仅定义总的父路径,细节定义到 FilePathEnum + save-path: D:\Upload\ + +# 部署配置 +deploy: + secret: cRc5888KAo4TxRS4y5iv35GM + build-dir: /home/dtyx/znpt-backend/build + +# 工具路径 +util: + enableImagePreTreatment: false + imagePreTreatmentPath: d:\ + reportGeneratorPath: D:\blade_report_generator.exe + reportGeneratorTemplatePath: D:\muban diff --git a/web/src/main/resources/application.yml b/web/src/main/resources/application.yml new file mode 100644 index 0000000..694c057 --- /dev/null +++ b/web/src/main/resources/application.yml @@ -0,0 +1,30 @@ +# Spring配置 +spring: + # 资源信息 + messages: + # 国际化资源文件路径 + basename: i18n/messages + profiles: + active: dev + # 文件上传 + servlet: + multipart: + # 单个文件大小 + max-file-size: 100MB + # 设置总上传的文件大小 + max-request-size: 200MB + application: + name: znpt + mvc: + pathmatch: + matching-strategy: ant_path_matcher + main: + allow-circular-references: true + allow-bean-definition-overriding: true + +# flowable相关表 +flowable: + # true 会对数据库中所有表进行更新操作。如果表不存在,则自动创建(建议开发时使用) + database-schema-update: false + # 关闭定时任务JOB + async-executor-activate: false \ No newline at end of file diff --git a/web/src/main/resources/logback.xml b/web/src/main/resources/logback.xml new file mode 100644 index 0000000..5f99223 --- /dev/null +++ b/web/src/main/resources/logback.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/sys-info.log + + + + ${log.path}/sys-info.%d{yyyy-MM-dd}.%i.log + + 7 + 10mb + 200mb + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/sys-error.log + + + + ${log.path}/sys-error.%d{yyyy-MM-dd}.%i.log + + 7 + 10mb + 300mb + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + ${log.path}/sys-user.log + + + ${log.path}/sys-user.%d{yyyy-MM-dd}.%i.log + + 7 + 10mb + 500mb + + + ${log.pattern} + + + + + + + + + + + + + + + + + + + + + + +