From e73d3eca4faa520a5e6eee86477377b468d18d7e Mon Sep 17 00:00:00 2001 From: tuyp Date: Fri, 17 Jul 2026 15:39:57 +0800 Subject: [PATCH] 瑞金医院 --- logs/springboot-logback-error.log | 71 ++++++----------------------------------------------------------------- logs/springboot-logback-info.log | 469 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------- logs/springboot-logback/error/2024-08-20-0.log3632128746896100.tmp | 8 ++++---- logs/springboot-logback/info/2025-10-28-0.log.gz | Bin 1937 -> 0 bytes logs/springboot-logback/info/2025-10-29-0.log.gz | Bin 7722 -> 0 bytes logs/springboot-logback/info/2025-10-30-0.log.gz | Bin 14620 -> 0 bytes logs/springboot-logback/info/2025-10-31-0.log.gz | Bin 6006 -> 0 bytes logs/springboot-logback/info/2025-11-03-0.log.gz | Bin 5849 -> 0 bytes logs/springboot-logback/info/2025-11-04-0.log.gz | Bin 1697 -> 0 bytes logs/springboot-logback/info/2025-11-05-0.log.gz | Bin 3512 -> 0 bytes logs/springboot-logback/info/2025-11-06-0.log.gz | Bin 4911 -> 0 bytes pom.xml | 2 +- src/main/java/com/show/MeishuApplication.java | 38 ++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/common/ResponseData.java | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/common/ResponseVO.java | 21 +++++++++++++++++++++ src/main/java/com/show/common/configure/AliyunSmsProperties.java | 28 ++++++++++++++++++++++++++++ src/main/java/com/show/common/configure/MyTomcat.java | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/common/configure/MybatisPlusConfig.java | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/common/configure/PolyvConfig.java | 19 +++++++++++++++++++ src/main/java/com/show/common/configure/QXueYouConfig.java | 18 ++++++++++++++++++ src/main/java/com/show/common/configure/RedisConfig.java | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/common/configure/RemoteProperties.java | 36 ++++++++++++++++++++++++++++++++++++ src/main/java/com/show/common/configure/RenSheConfig.java | 20 ++++++++++++++++++++ src/main/java/com/show/common/configure/RestTemplateConfig.java | 31 +++++++++++++++++++++++++++++++ src/main/java/com/show/common/configure/SubsidyConfig.java | 18 ++++++++++++++++++ src/main/java/com/show/common/configure/SwaggerConfig.java | 42 ++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/common/configure/VODConfig.java | 27 +++++++++++++++++++++++++++ src/main/java/com/show/common/configure/WebConfig.java | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/common/configure/WebLogAspect.java | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/common/configure/WechatConfig.java | 24 ++++++++++++++++++++++++ src/main/java/com/show/common/constant/ApplyType.java | 8 ++++++++ src/main/java/com/show/common/constant/AssigneeType.java | 13 +++++++++++++ src/main/java/com/show/common/constant/AttendanceConstant.java | 29 +++++++++++++++++++++++++++++ src/main/java/com/show/common/constant/BoolFlag.java | 9 +++++++++ src/main/java/com/show/common/constant/Code.java | 33 +++++++++++++++++++++++++++++++++ src/main/java/com/show/common/constant/ConstantUtils.java | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/common/constant/MemberType.java | 11 +++++++++++ src/main/java/com/show/common/constant/Platform.java | 27 +++++++++++++++++++++++++++ src/main/java/com/show/common/constant/Role.java | 10 ++++++++++ src/main/java/com/show/common/constant/SMSTemplate.java | 31 +++++++++++++++++++++++++++++++ src/main/java/com/show/common/constant/ShowStatus.java | 9 +++++++++ src/main/java/com/show/common/constant/SmsCode.java | 22 ++++++++++++++++++++++ src/main/java/com/show/common/constant/SubmitStatus.java | 13 +++++++++++++ src/main/java/com/show/common/constant/TaskType.java | 11 +++++++++++ src/main/java/com/show/common/constant/VodConstant.java | 31 +++++++++++++++++++++++++++++++ src/main/java/com/show/common/constant/WorkflowInstanceStatus.java | 13 +++++++++++++ src/main/java/com/show/common/constant/WorkflowTaskStatus.java | 15 +++++++++++++++ src/main/java/com/show/common/constant/WxConstant.java | 35 +++++++++++++++++++++++++++++++++++ src/main/java/com/show/common/exception/GlobalExceptionHandler.java | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/common/exception/HttpException.java | 45 +++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/common/handler/MetaHandler.java | 26 ++++++++++++++++++++++++++ src/main/java/com/show/common/interceptor/AuthenticationInterceptor.java | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/common/interceptor/LoginRequired.java | 20 ++++++++++++++++++++ src/main/java/com/show/common/interceptor/TimeRequired.java | 10 ++++++++++ src/main/java/com/show/controller/AcademyDictController.java | 40 ++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/controller/AcademyPermissionMappingController.java | 22 ++++++++++++++++++++++ src/main/java/com/show/controller/AcademyPlatformsController.java | 22 ++++++++++++++++++++++ src/main/java/com/show/controller/MemberController.java | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/controller/OssController.java | 239 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/controller/ShowBannersController.java | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/controller/ShowLabelDictController.java | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/controller/ShowMemberContactsController.java | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/controller/ShowWorksController.java | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/controller/SmsVerifyCodeController.java | 22 ++++++++++++++++++++++ src/main/java/com/show/controller/WorkFlowController.java | 29 +++++++++++++++++++++++++++++ src/main/java/com/show/dto/member/CreatorsDTO.java | 16 ++++++++++++++++ src/main/java/com/show/dto/member/MemberWorkGroupDTO.java | 16 ++++++++++++++++ src/main/java/com/show/dto/member/UpdateMemberInfoDTO.java | 16 ++++++++++++++++ src/main/java/com/show/dto/work/FlowNodesDTO.java | 10 ++++++++++ src/main/java/com/show/dto/work/HotSpotWorksDTO.java | 10 ++++++++++ src/main/java/com/show/dto/work/MemberWorksDTO.java | 14 ++++++++++++++ src/main/java/com/show/dto/work/MyWorksDTO.java | 16 ++++++++++++++++ src/main/java/com/show/dto/work/PageWorksDTO.java | 17 +++++++++++++++++ src/main/java/com/show/dto/work/SubmitWorkDTO.java | 14 ++++++++++++++ src/main/java/com/show/dto/work/WorkflowHistory.java | 32 ++++++++++++++++++++++++++++++++ src/main/java/com/show/mapper/AcademyDictMapper.java | 18 ++++++++++++++++++ src/main/java/com/show/mapper/AcademyPermissionMappingMapper.java | 24 ++++++++++++++++++++++++ src/main/java/com/show/mapper/AcademyPlatformsMapper.java | 18 ++++++++++++++++++ src/main/java/com/show/mapper/AcademyRoleDictMapper.java | 27 +++++++++++++++++++++++++++ src/main/java/com/show/mapper/AdministerMapper.java | 31 +++++++++++++++++++++++++++++++ src/main/java/com/show/mapper/MemberMapper.java | 38 ++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/mapper/ShowBannersMapper.java | 18 ++++++++++++++++++ src/main/java/com/show/mapper/ShowLabelDictMapper.java | 18 ++++++++++++++++++ src/main/java/com/show/mapper/ShowMemberContactsMapper.java | 30 ++++++++++++++++++++++++++++++ src/main/java/com/show/mapper/ShowWorkLabelsMapper.java | 18 ++++++++++++++++++ src/main/java/com/show/mapper/ShowWorksMapper.java | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/mapper/SmsVerifyCodeMapper.java | 18 ++++++++++++++++++ src/main/java/com/show/mapper/WorkflowCopyToMapper.java | 18 ++++++++++++++++++ src/main/java/com/show/mapper/WorkflowInstanceMapper.java | 25 +++++++++++++++++++++++++ src/main/java/com/show/mapper/WorkflowNodeMapper.java | 18 ++++++++++++++++++ src/main/java/com/show/mapper/WorkflowTaskMapper.java | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/model/AcademyDictDO.java | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/model/AcademyPermissionMappingDO.java | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/model/AcademyPlatformsDO.java | 44 ++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/model/AcademyRoleDictDO.java | 38 ++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/model/AdministerDO.java | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/model/MemberDO.java | 315 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/model/ShowBannersDO.java | 45 +++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/model/ShowLabelDictDO.java | 33 +++++++++++++++++++++++++++++++++ src/main/java/com/show/model/ShowMemberContactsDO.java | 41 +++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/model/ShowWorkLabelsDO.java | 33 +++++++++++++++++++++++++++++++++ src/main/java/com/show/model/ShowWorksDO.java | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/model/SmsVerifyCodeDO.java | 39 +++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/model/WorkflowCopyToDO.java | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/model/WorkflowInstance.java | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/model/WorkflowNode.java | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/model/WorkflowTask.java | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/service/AcademyDictService.java | 17 +++++++++++++++++ src/main/java/com/show/service/AcademyPermissionMappingService.java | 16 ++++++++++++++++ src/main/java/com/show/service/AcademyPlatformsService.java | 16 ++++++++++++++++ src/main/java/com/show/service/MemberService.java | 37 +++++++++++++++++++++++++++++++++++++ src/main/java/com/show/service/ShowBannersService.java | 27 +++++++++++++++++++++++++++ src/main/java/com/show/service/ShowLabelDictService.java | 25 +++++++++++++++++++++++++ src/main/java/com/show/service/ShowMemberContactsService.java | 25 +++++++++++++++++++++++++ src/main/java/com/show/service/ShowWorkLabelsService.java | 16 ++++++++++++++++ src/main/java/com/show/service/ShowWorksService.java | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/service/SmsVerifyCodeService.java | 16 ++++++++++++++++ src/main/java/com/show/service/WorkflowService.java | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/service/impl/AcademyDictServiceImpl.java | 24 ++++++++++++++++++++++++ src/main/java/com/show/service/impl/AcademyPermissionMappingServiceImpl.java | 20 ++++++++++++++++++++ src/main/java/com/show/service/impl/AcademyPlatformsServiceImpl.java | 20 ++++++++++++++++++++ src/main/java/com/show/service/impl/MemberServiceImpl.java | 234 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/service/impl/ShowBannersServiceImpl.java | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/service/impl/ShowLabelDictServiceImpl.java | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/service/impl/ShowMemberContactsServiceImpl.java | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/service/impl/ShowWorkLabelsServiceImpl.java | 20 ++++++++++++++++++++ src/main/java/com/show/service/impl/ShowWorksServiceImpl.java | 258 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/service/impl/SmsVerifyCodeServiceImpl.java | 20 ++++++++++++++++++++ src/main/java/com/show/service/impl/WorkflowServiceImpl.java | 567 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/ActivityDetectionUtils.java | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/AliyunSmsUtil.java | 211 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/Base64Util.java | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/BaseModel.java | 34 ++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/CodeGenerator.java | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/ConstantUtils.java | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/DateFormatUtil.java | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/DateUtil.java | 374 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/DudaoConstant.java | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/EhCacheUtil.java | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/EncryptString.java | 42 ++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/EncryptUtil.java | 35 +++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/ExcelFormatUtils.java | 19 +++++++++++++++++++ src/main/java/com/show/util/HttpUtil.java | 461 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/IpAddressUtil.java | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/JwtUtil.java | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/Localstorage.java | 31 +++++++++++++++++++++++++++++++ src/main/java/com/show/util/MathUtil.java | 174 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/MongoUtil.java | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/MyBeanUtils.java | 29 +++++++++++++++++++++++++++++ src/main/java/com/show/util/MyStringUtils.java | 30 ++++++++++++++++++++++++++++++ src/main/java/com/show/util/OSSUtils.java | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/PDFUtil.java | 169 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/PageHelper.java | 29 +++++++++++++++++++++++++++++ src/main/java/com/show/util/PolyvUtils.java | 31 +++++++++++++++++++++++++++++++ src/main/java/com/show/util/RandomUtil.java | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/RedisUtil.java | 620 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/RenSheJuConstant.java | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/ResultMode.java | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/SMSUtils.java | 199 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/SecretUtils.java | 158 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/ShehuihuaConstant.java | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/Signature.java | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/TestMain.java | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/VodUtil.java | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/excel/ExcelColumn.java | 14 ++++++++++++++ src/main/java/com/show/util/excel/ExcelColumnUtil.java | 22 ++++++++++++++++++++++ src/main/java/com/show/util/excel/ExcelUtil.java | 505 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/tree/Node.java | 42 ++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/tree/NumberTree.java | 212 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/util/tree/SerialNumber.java | 28 ++++++++++++++++++++++++++++ src/main/java/com/show/vo/administer/NamesVO.java | 12 ++++++++++++ src/main/java/com/show/vo/member/ApplyCenterSummaryVO.java | 14 ++++++++++++++ src/main/java/com/show/vo/member/LoginVO.java | 40 ++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/vo/member/MemberBaseInoVO.java | 19 +++++++++++++++++++ src/main/java/com/show/vo/member/MemberWorkGroupVO.java | 29 +++++++++++++++++++++++++++++ src/main/java/com/show/vo/oss/GetSecretVO.java | 12 ++++++++++++ src/main/java/com/show/vo/oss/UploadFileVO.java | 10 ++++++++++ src/main/java/com/show/vo/work/CopiesVO.java | 14 ++++++++++++++ src/main/java/com/show/vo/work/CopyDetailVO.java | 14 ++++++++++++++ src/main/java/com/show/vo/work/CreatorsVO.java | 24 ++++++++++++++++++++++++ src/main/java/com/show/vo/work/FlowNodesVO.java | 12 ++++++++++++ src/main/java/com/show/vo/work/GetWorkflowHistoryVO.java | 34 ++++++++++++++++++++++++++++++++++ src/main/java/com/show/vo/work/HotSpotWorksVO.java | 14 ++++++++++++++ src/main/java/com/show/vo/work/MyWorksOverviewVO.java | 14 ++++++++++++++ src/main/java/com/show/vo/work/MyWorksVO.java | 37 +++++++++++++++++++++++++++++++++++++ src/main/java/com/show/vo/work/NamesVO.java | 12 ++++++++++++ src/main/java/com/show/vo/work/OneWorkVO.java | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/show/vo/work/PageWorksVO.java | 20 ++++++++++++++++++++ src/main/java/com/subsidy/MeishuApplication.java | 40 ---------------------------------------- src/main/java/com/subsidy/common/ResponseData.java | 54 ------------------------------------------------------ src/main/java/com/subsidy/common/ResponseVO.java | 21 --------------------- src/main/java/com/subsidy/common/configure/AliyunSmsProperties.java | 28 ---------------------------- src/main/java/com/subsidy/common/configure/MyTomcat.java | 89 ----------------------------------------------------------------------------------------- src/main/java/com/subsidy/common/configure/MybatisPlusConfig.java | 54 ------------------------------------------------------ src/main/java/com/subsidy/common/configure/PolyvConfig.java | 19 ------------------- src/main/java/com/subsidy/common/configure/QXueYouConfig.java | 18 ------------------ src/main/java/com/subsidy/common/configure/RedisConfig.java | 122 -------------------------------------------------------------------------------------------------------------------------- src/main/java/com/subsidy/common/configure/RemoteProperties.java | 36 ------------------------------------ src/main/java/com/subsidy/common/configure/RenSheConfig.java | 20 -------------------- src/main/java/com/subsidy/common/configure/RestTemplateConfig.java | 31 ------------------------------- src/main/java/com/subsidy/common/configure/SubsidyConfig.java | 18 ------------------ src/main/java/com/subsidy/common/configure/SwaggerConfig.java | 43 ------------------------------------------- src/main/java/com/subsidy/common/configure/VODConfig.java | 27 --------------------------- src/main/java/com/subsidy/common/configure/WebConfig.java | 78 ------------------------------------------------------------------------------ src/main/java/com/subsidy/common/configure/WebLogAspect.java | 58 ---------------------------------------------------------- src/main/java/com/subsidy/common/configure/WechatConfig.java | 24 ------------------------ src/main/java/com/subsidy/common/constant/AttendanceConstant.java | 29 ----------------------------- src/main/java/com/subsidy/common/constant/Code.java | 33 --------------------------------- src/main/java/com/subsidy/common/constant/CourseNotification.java | 8 -------- src/main/java/com/subsidy/common/constant/MemberType.java | 11 ----------- src/main/java/com/subsidy/common/constant/Platform.java | 27 --------------------------- src/main/java/com/subsidy/common/constant/ProjectReview.java | 29 ----------------------------- src/main/java/com/subsidy/common/constant/ProjectSchedule.java | 15 --------------- src/main/java/com/subsidy/common/constant/ProjectStatus.java | 32 -------------------------------- src/main/java/com/subsidy/common/constant/ProjectTrack.java | 14 -------------- src/main/java/com/subsidy/common/constant/ProjectType.java | 32 -------------------------------- src/main/java/com/subsidy/common/constant/Role.java | 10 ---------- src/main/java/com/subsidy/common/constant/SMSTemplate.java | 31 ------------------------------- src/main/java/com/subsidy/common/constant/SmsCode.java | 24 ------------------------ src/main/java/com/subsidy/common/constant/VodConstant.java | 31 ------------------------------- src/main/java/com/subsidy/common/constant/WxConstant.java | 35 ----------------------------------- src/main/java/com/subsidy/common/exception/GlobalExceptionHandler.java | 119 ----------------------------------------------------------------------------------------------------------------------- src/main/java/com/subsidy/common/exception/HttpException.java | 45 --------------------------------------------- src/main/java/com/subsidy/common/handler/MetaHandler.java | 26 -------------------------- src/main/java/com/subsidy/common/interceptor/AuthenticationInterceptor.java | 107 ----------------------------------------------------------------------------------------------------------- src/main/java/com/subsidy/common/interceptor/LoginRequired.java | 20 -------------------- src/main/java/com/subsidy/common/interceptor/TimeRequired.java | 10 ---------- src/main/java/com/subsidy/controller/AdministerController.java | 22 ---------------------- src/main/java/com/subsidy/mapper/AdministerMapper.java | 18 ------------------ src/main/java/com/subsidy/model/AdministerDO.java | 106 ---------------------------------------------------------------------------------------------------------- src/main/java/com/subsidy/service/AdministerService.java | 16 ---------------- src/main/java/com/subsidy/service/impl/AdministerServiceImpl.java | 20 -------------------- src/main/java/com/subsidy/util/ActivityDetectionUtils.java | 52 ---------------------------------------------------- src/main/java/com/subsidy/util/AliyunSmsUtil.java | 211 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- src/main/java/com/subsidy/util/Base64Util.java | 87 --------------------------------------------------------------------------------------- src/main/java/com/subsidy/util/BaseModel.java | 34 ---------------------------------- src/main/java/com/subsidy/util/CodeGenerator.java | 129 --------------------------------------------------------------------------------------------------------------------------------- src/main/java/com/subsidy/util/ConstantUtils.java | 120 ------------------------------------------------------------------------------------------------------------------------ src/main/java/com/subsidy/util/DateFormatUtil.java | 120 ------------------------------------------------------------------------------------------------------------------------ src/main/java/com/subsidy/util/DudaoConstant.java | 49 ------------------------------------------------- src/main/java/com/subsidy/util/EhCacheUtil.java | 53 ----------------------------------------------------- src/main/java/com/subsidy/util/EncryptString.java | 42 ------------------------------------------ src/main/java/com/subsidy/util/EncryptUtil.java | 35 ----------------------------------- src/main/java/com/subsidy/util/ExcelFormatUtils.java | 19 ------------------- src/main/java/com/subsidy/util/HttpUtil.java | 461 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- src/main/java/com/subsidy/util/IpAddressUtil.java | 92 -------------------------------------------------------------------------------------------- src/main/java/com/subsidy/util/JwtUtil.java | 96 ------------------------------------------------------------------------------------------------ src/main/java/com/subsidy/util/Localstorage.java | 31 ------------------------------- src/main/java/com/subsidy/util/MathUtil.java | 174 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ src/main/java/com/subsidy/util/MongoUtil.java | 52 ---------------------------------------------------- src/main/java/com/subsidy/util/MyBeanUtils.java | 29 ----------------------------- src/main/java/com/subsidy/util/MyStringUtils.java | 30 ------------------------------ src/main/java/com/subsidy/util/OSSUtils.java | 121 ------------------------------------------------------------------------------------------------------------------------- src/main/java/com/subsidy/util/PDFUtil.java | 169 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- src/main/java/com/subsidy/util/PageHelper.java | 30 ------------------------------ src/main/java/com/subsidy/util/PolyvUtils.java | 31 ------------------------------- src/main/java/com/subsidy/util/RandomUtil.java | 83 ----------------------------------------------------------------------------------- src/main/java/com/subsidy/util/RedisUtil.java | 620 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- src/main/java/com/subsidy/util/RenSheJuConstant.java | 69 --------------------------------------------------------------------- src/main/java/com/subsidy/util/ResultMode.java | 56 -------------------------------------------------------- src/main/java/com/subsidy/util/SMSUtils.java | 201 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- src/main/java/com/subsidy/util/SecretUtils.java | 159 --------------------------------------------------------------------------------------------------------------------------------------------------------------- src/main/java/com/subsidy/util/ShehuihuaConstant.java | 66 ------------------------------------------------------------------ src/main/java/com/subsidy/util/Signature.java | 85 ------------------------------------------------------------------------------------- src/main/java/com/subsidy/util/TestMain.java | 124 ---------------------------------------------------------------------------------------------------------------------------- src/main/java/com/subsidy/util/VodUtil.java | 124 ---------------------------------------------------------------------------------------------------------------------------- src/main/java/com/subsidy/util/excel/ExcelColumn.java | 14 -------------- src/main/java/com/subsidy/util/excel/ExcelColumnUtil.java | 22 ---------------------- src/main/java/com/subsidy/util/excel/ExcelUtil.java | 506 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- src/main/java/com/subsidy/util/tree/Node.java | 42 ------------------------------------------ src/main/java/com/subsidy/util/tree/NumberTree.java | 212 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- src/main/java/com/subsidy/util/tree/SerialNumber.java | 28 ---------------------------- src/main/resources/application-dev.properties | 2 +- src/main/resources/application-prod.properties | 5 +++-- src/main/resources/application.properties | 2 +- src/main/resources/code.properties | 76 ++++++---------------------------------------------------------------------- src/main/resources/logback-spring.xml | 10 +++++----- src/main/resources/mapper/AcademyDictMapper.xml | 31 +++++++++++++++++++++++++++++++ src/main/resources/mapper/AcademyPermissionMappingMapper.xml | 21 +++++++++++++++++++++ src/main/resources/mapper/AcademyPlatformsMapper.xml | 24 ++++++++++++++++++++++++ src/main/resources/mapper/AcademyRoleDictMapper.xml | 43 +++++++++++++++++++++++++++++++++++++++++++ src/main/resources/mapper/AdministerMapper.xml | 45 ++++++++++++++------------------------------- src/main/resources/mapper/MemberMapper.xml | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/resources/mapper/ShowBannersMapper.xml | 23 +++++++++++++++++++++++ src/main/resources/mapper/ShowLabelDictMapper.xml | 22 ++++++++++++++++++++++ src/main/resources/mapper/ShowMemberContactsMapper.xml | 32 ++++++++++++++++++++++++++++++++ src/main/resources/mapper/ShowWorkLabelsMapper.xml | 23 +++++++++++++++++++++++ src/main/resources/mapper/ShowWorksMapper.xml | 202 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/resources/mapper/SmsVerifyCodeMapper.xml | 23 +++++++++++++++++++++++ src/main/resources/mapper/WorkflowCopyToMapper.xml | 25 +++++++++++++++++++++++++ src/main/resources/mapper/WorkflowInstanceMapper.xml | 18 ++++++++++++++++++ src/main/resources/mapper/WorkflowNodeMapper.xml | 31 +++++++++++++++++++++++++++++++ src/main/resources/mapper/WorkflowTaskMapper.xml | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/resources/mybatis-plus.properties | 2 +- target/classes/META-INF/spring-configuration-metadata.json | 207 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- target/classes/META-INF/subsidy.kotlin_module | Bin 16 -> 0 bytes target/classes/application-dev.properties | 65 ----------------------------------------------------------------- target/classes/application-prod.properties | 32 -------------------------------- target/classes/application.properties | 61 ------------------------------------------------------------- target/classes/code.properties | 78 ------------------------------------------------------------------------------ target/classes/com/subsidy/MeishuApplication.class | Bin 1093 -> 0 bytes target/classes/com/subsidy/common/ResponseData.class | Bin 3260 -> 0 bytes target/classes/com/subsidy/common/ResponseVO$ResponseVOBuilder.class | Bin 2372 -> 0 bytes target/classes/com/subsidy/common/ResponseVO.class | Bin 3970 -> 0 bytes target/classes/com/subsidy/common/configure/AliyunSmsProperties.class | Bin 4821 -> 0 bytes target/classes/com/subsidy/common/configure/MyTomcat$GwsTomcatConnectionCustomizer.class | Bin 1743 -> 0 bytes target/classes/com/subsidy/common/configure/MyTomcat.class | Bin 3380 -> 0 bytes target/classes/com/subsidy/common/configure/MybatisPlusConfig.class | Bin 1610 -> 0 bytes target/classes/com/subsidy/common/configure/PolyvConfig.class | Bin 2974 -> 0 bytes target/classes/com/subsidy/common/configure/QXueYouConfig.class | Bin 2541 -> 0 bytes target/classes/com/subsidy/common/configure/RedisConfig.class | Bin 5740 -> 0 bytes target/classes/com/subsidy/common/configure/RemoteProperties.class | Bin 1540 -> 0 bytes target/classes/com/subsidy/common/configure/RenSheConfig.class | Bin 2510 -> 0 bytes target/classes/com/subsidy/common/configure/RestTemplateConfig$WxMappingJackson2HttpMessageConverter.class | Bin 1241 -> 0 bytes target/classes/com/subsidy/common/configure/RestTemplateConfig.class | Bin 1092 -> 0 bytes target/classes/com/subsidy/common/configure/SubsidyConfig.class | Bin 2541 -> 0 bytes target/classes/com/subsidy/common/configure/SwaggerConfig.class | Bin 2540 -> 0 bytes target/classes/com/subsidy/common/configure/VODConfig.class | Bin 3944 -> 0 bytes target/classes/com/subsidy/common/configure/WebConfig.class | Bin 4251 -> 0 bytes target/classes/com/subsidy/common/configure/WebLogAspect.class | Bin 1212 -> 0 bytes target/classes/com/subsidy/common/configure/WechatConfig.class | Bin 2998 -> 0 bytes target/classes/com/subsidy/common/constant/AttendanceConstant.class | Bin 860 -> 0 bytes target/classes/com/subsidy/common/constant/Code.class | Bin 2914 -> 0 bytes target/classes/com/subsidy/common/constant/CourseNotification.class | Bin 450 -> 0 bytes target/classes/com/subsidy/common/constant/MemberType.class | Bin 488 -> 0 bytes target/classes/com/subsidy/common/constant/Platform.class | Bin 1007 -> 0 bytes target/classes/com/subsidy/common/constant/ProjectReview.class | Bin 1140 -> 0 bytes target/classes/com/subsidy/common/constant/ProjectSchedule.class | Bin 1070 -> 0 bytes target/classes/com/subsidy/common/constant/ProjectStatus.class | Bin 1550 -> 0 bytes target/classes/com/subsidy/common/constant/ProjectTrack.class | Bin 1075 -> 0 bytes target/classes/com/subsidy/common/constant/ProjectType.class | Bin 706 -> 0 bytes target/classes/com/subsidy/common/constant/Role.class | Bin 416 -> 0 bytes target/classes/com/subsidy/common/constant/SMSTemplate.class | Bin 594 -> 0 bytes target/classes/com/subsidy/common/constant/SmsCode.class | Bin 509 -> 0 bytes target/classes/com/subsidy/common/constant/VodConstant.class | Bin 736 -> 0 bytes target/classes/com/subsidy/common/constant/WxConstant.class | Bin 914 -> 0 bytes target/classes/com/subsidy/common/exception/GlobalExceptionHandler.class | Bin 6919 -> 0 bytes target/classes/com/subsidy/common/exception/HttpException.class | Bin 1225 -> 0 bytes target/classes/com/subsidy/common/handler/MetaHandler.class | Bin 1073 -> 0 bytes target/classes/com/subsidy/common/interceptor/AuthenticationInterceptor.class | Bin 3961 -> 0 bytes target/classes/com/subsidy/common/interceptor/LoginRequired.class | Bin 521 -> 0 bytes target/classes/com/subsidy/common/interceptor/TimeRequired.class | Bin 487 -> 0 bytes target/classes/com/subsidy/controller/AdministerController.class | Bin 597 -> 0 bytes target/classes/com/subsidy/mapper/AdministerMapper.class | Bin 397 -> 0 bytes target/classes/com/subsidy/model/AdministerDO.class | Bin 9528 -> 0 bytes target/classes/com/subsidy/service/AdministerService.class | Bin 322 -> 0 bytes target/classes/com/subsidy/service/impl/AdministerServiceImpl.class | Bin 703 -> 0 bytes target/classes/com/subsidy/util/ActivityDetectionUtils.class | Bin 2816 -> 0 bytes target/classes/com/subsidy/util/AliyunSmsUtil.class | Bin 7265 -> 0 bytes target/classes/com/subsidy/util/Base64Util.class | Bin 2922 -> 0 bytes target/classes/com/subsidy/util/BaseModel.class | Bin 2964 -> 0 bytes target/classes/com/subsidy/util/CodeGenerator$1.class | Bin 535 -> 0 bytes target/classes/com/subsidy/util/CodeGenerator$2.class | Bin 1431 -> 0 bytes target/classes/com/subsidy/util/CodeGenerator.class | Bin 7691 -> 0 bytes target/classes/com/subsidy/util/ConstantUtils.class | Bin 2632 -> 0 bytes target/classes/com/subsidy/util/DateFormatUtil.class | Bin 3494 -> 0 bytes target/classes/com/subsidy/util/DudaoConstant.class | Bin 824 -> 0 bytes target/classes/com/subsidy/util/EhCacheUtil.class | Bin 2139 -> 0 bytes target/classes/com/subsidy/util/EncryptString.class | Bin 1539 -> 0 bytes target/classes/com/subsidy/util/ExcelFormatUtils.class | Bin 1597 -> 0 bytes target/classes/com/subsidy/util/HttpUtil$1.class | Bin 1170 -> 0 bytes target/classes/com/subsidy/util/HttpUtil$2.class | Bin 1165 -> 0 bytes target/classes/com/subsidy/util/HttpUtil$3.class | Bin 1171 -> 0 bytes target/classes/com/subsidy/util/HttpUtil$4.class | Bin 1182 -> 0 bytes target/classes/com/subsidy/util/HttpUtil$DataParse.class | Bin 518 -> 0 bytes target/classes/com/subsidy/util/HttpUtil.class | Bin 11046 -> 0 bytes target/classes/com/subsidy/util/IpAddressUtil.class | Bin 3326 -> 0 bytes target/classes/com/subsidy/util/JwtUtil.class | Bin 3450 -> 0 bytes target/classes/com/subsidy/util/Localstorage.class | Bin 2204 -> 0 bytes target/classes/com/subsidy/util/MathUtil.class | Bin 5361 -> 0 bytes target/classes/com/subsidy/util/MyBeanUtils.class | Bin 1565 -> 0 bytes target/classes/com/subsidy/util/MyStringUtils.class | Bin 1237 -> 0 bytes target/classes/com/subsidy/util/OSSUtils.class | Bin 4462 -> 0 bytes target/classes/com/subsidy/util/PDFUtil.class | Bin 7486 -> 0 bytes target/classes/com/subsidy/util/PageHelper.class | Bin 3418 -> 0 bytes target/classes/com/subsidy/util/PolyvUtils.class | Bin 1504 -> 0 bytes target/classes/com/subsidy/util/RandomUtil.class | Bin 3480 -> 0 bytes target/classes/com/subsidy/util/RedisUtil.class | Bin 14903 -> 0 bytes target/classes/com/subsidy/util/RenSheJuConstant.class | Bin 926 -> 0 bytes target/classes/com/subsidy/util/ResultMode.class | Bin 1273 -> 0 bytes target/classes/com/subsidy/util/SMSUtils.class | Bin 7093 -> 0 bytes target/classes/com/subsidy/util/SecretUtils.class | Bin 4163 -> 0 bytes target/classes/com/subsidy/util/ShehuihuaConstant.class | Bin 1021 -> 0 bytes target/classes/com/subsidy/util/Signature.class | Bin 3538 -> 0 bytes target/classes/com/subsidy/util/TestMain.class | Bin 2946 -> 0 bytes target/classes/com/subsidy/util/VodUtil.class | Bin 5507 -> 0 bytes target/classes/com/subsidy/util/excel/ExcelColumn.class | Bin 534 -> 0 bytes target/classes/com/subsidy/util/excel/ExcelColumnUtil.class | Bin 542 -> 0 bytes target/classes/com/subsidy/util/excel/ExcelUtil.class | Bin 21088 -> 0 bytes target/classes/com/subsidy/util/tree/Node.class | Bin 3629 -> 0 bytes target/classes/com/subsidy/util/tree/NumberTree.class | Bin 8857 -> 0 bytes target/classes/com/subsidy/util/tree/SerialNumber.class | Bin 1193 -> 0 bytes target/classes/ehcache.xml | 44 -------------------------------------------- target/classes/logback-spring.xml | 74 -------------------------------------------------------------------------- target/classes/mapper/AdministerMapper.xml | 37 ------------------------------------- target/classes/mybatis-plus.properties | 12 ------------ target/classes/mybatis.xml | 9 --------- target/classes/templates/controller.java.ftl | 41 ----------------------------------------- target/classes/templates/entity.java.ftl | 156 ------------------------------------------------------------------------------------------------------------------------------------------------------------ target/classes/templates/mapper.java.ftl | 22 ---------------------- target/classes/templates/mapper.xml.ftl | 39 --------------------------------------- target/classes/templates/service.java.ftl | 20 -------------------- target/classes/templates/serviceImpl.java.ftl | 26 -------------------------- target/ecnutracks.jar | Bin 119454676 -> 0 bytes target/ecnutracks.jar.original | Bin 493171 -> 0 bytes target/maven-archiver/pom.properties | 3 --- target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst | 236 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst | 228 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 408 files changed, 12206 insertions(+), 7991 deletions(-) delete mode 100644 logs/springboot-logback/info/2025-10-28-0.log.gz delete mode 100644 logs/springboot-logback/info/2025-10-29-0.log.gz delete mode 100644 logs/springboot-logback/info/2025-10-30-0.log.gz delete mode 100644 logs/springboot-logback/info/2025-10-31-0.log.gz delete mode 100644 logs/springboot-logback/info/2025-11-03-0.log.gz delete mode 100644 logs/springboot-logback/info/2025-11-04-0.log.gz delete mode 100644 logs/springboot-logback/info/2025-11-05-0.log.gz delete mode 100644 logs/springboot-logback/info/2025-11-06-0.log.gz create mode 100644 src/main/java/com/show/MeishuApplication.java create mode 100644 src/main/java/com/show/common/ResponseData.java create mode 100644 src/main/java/com/show/common/ResponseVO.java create mode 100644 src/main/java/com/show/common/configure/AliyunSmsProperties.java create mode 100644 src/main/java/com/show/common/configure/MyTomcat.java create mode 100644 src/main/java/com/show/common/configure/MybatisPlusConfig.java create mode 100644 src/main/java/com/show/common/configure/PolyvConfig.java create mode 100644 src/main/java/com/show/common/configure/QXueYouConfig.java create mode 100644 src/main/java/com/show/common/configure/RedisConfig.java create mode 100644 src/main/java/com/show/common/configure/RemoteProperties.java create mode 100644 src/main/java/com/show/common/configure/RenSheConfig.java create mode 100644 src/main/java/com/show/common/configure/RestTemplateConfig.java create mode 100644 src/main/java/com/show/common/configure/SubsidyConfig.java create mode 100644 src/main/java/com/show/common/configure/SwaggerConfig.java create mode 100644 src/main/java/com/show/common/configure/VODConfig.java create mode 100644 src/main/java/com/show/common/configure/WebConfig.java create mode 100644 src/main/java/com/show/common/configure/WebLogAspect.java create mode 100644 src/main/java/com/show/common/configure/WechatConfig.java create mode 100644 src/main/java/com/show/common/constant/ApplyType.java create mode 100644 src/main/java/com/show/common/constant/AssigneeType.java create mode 100644 src/main/java/com/show/common/constant/AttendanceConstant.java create mode 100644 src/main/java/com/show/common/constant/BoolFlag.java create mode 100644 src/main/java/com/show/common/constant/Code.java create mode 100644 src/main/java/com/show/common/constant/ConstantUtils.java create mode 100644 src/main/java/com/show/common/constant/MemberType.java create mode 100644 src/main/java/com/show/common/constant/Platform.java create mode 100644 src/main/java/com/show/common/constant/Role.java create mode 100644 src/main/java/com/show/common/constant/SMSTemplate.java create mode 100644 src/main/java/com/show/common/constant/ShowStatus.java create mode 100644 src/main/java/com/show/common/constant/SmsCode.java create mode 100644 src/main/java/com/show/common/constant/SubmitStatus.java create mode 100644 src/main/java/com/show/common/constant/TaskType.java create mode 100644 src/main/java/com/show/common/constant/VodConstant.java create mode 100644 src/main/java/com/show/common/constant/WorkflowInstanceStatus.java create mode 100644 src/main/java/com/show/common/constant/WorkflowTaskStatus.java create mode 100644 src/main/java/com/show/common/constant/WxConstant.java create mode 100644 src/main/java/com/show/common/exception/GlobalExceptionHandler.java create mode 100644 src/main/java/com/show/common/exception/HttpException.java create mode 100644 src/main/java/com/show/common/handler/MetaHandler.java create mode 100644 src/main/java/com/show/common/interceptor/AuthenticationInterceptor.java create mode 100644 src/main/java/com/show/common/interceptor/LoginRequired.java create mode 100644 src/main/java/com/show/common/interceptor/TimeRequired.java create mode 100644 src/main/java/com/show/controller/AcademyDictController.java create mode 100644 src/main/java/com/show/controller/AcademyPermissionMappingController.java create mode 100644 src/main/java/com/show/controller/AcademyPlatformsController.java create mode 100644 src/main/java/com/show/controller/MemberController.java create mode 100644 src/main/java/com/show/controller/OssController.java create mode 100644 src/main/java/com/show/controller/ShowBannersController.java create mode 100644 src/main/java/com/show/controller/ShowLabelDictController.java create mode 100644 src/main/java/com/show/controller/ShowMemberContactsController.java create mode 100644 src/main/java/com/show/controller/ShowWorksController.java create mode 100644 src/main/java/com/show/controller/SmsVerifyCodeController.java create mode 100644 src/main/java/com/show/controller/WorkFlowController.java create mode 100644 src/main/java/com/show/dto/member/CreatorsDTO.java create mode 100644 src/main/java/com/show/dto/member/MemberWorkGroupDTO.java create mode 100644 src/main/java/com/show/dto/member/UpdateMemberInfoDTO.java create mode 100644 src/main/java/com/show/dto/work/FlowNodesDTO.java create mode 100644 src/main/java/com/show/dto/work/HotSpotWorksDTO.java create mode 100644 src/main/java/com/show/dto/work/MemberWorksDTO.java create mode 100644 src/main/java/com/show/dto/work/MyWorksDTO.java create mode 100644 src/main/java/com/show/dto/work/PageWorksDTO.java create mode 100644 src/main/java/com/show/dto/work/SubmitWorkDTO.java create mode 100644 src/main/java/com/show/dto/work/WorkflowHistory.java create mode 100644 src/main/java/com/show/mapper/AcademyDictMapper.java create mode 100644 src/main/java/com/show/mapper/AcademyPermissionMappingMapper.java create mode 100644 src/main/java/com/show/mapper/AcademyPlatformsMapper.java create mode 100644 src/main/java/com/show/mapper/AcademyRoleDictMapper.java create mode 100644 src/main/java/com/show/mapper/AdministerMapper.java create mode 100644 src/main/java/com/show/mapper/MemberMapper.java create mode 100644 src/main/java/com/show/mapper/ShowBannersMapper.java create mode 100644 src/main/java/com/show/mapper/ShowLabelDictMapper.java create mode 100644 src/main/java/com/show/mapper/ShowMemberContactsMapper.java create mode 100644 src/main/java/com/show/mapper/ShowWorkLabelsMapper.java create mode 100644 src/main/java/com/show/mapper/ShowWorksMapper.java create mode 100644 src/main/java/com/show/mapper/SmsVerifyCodeMapper.java create mode 100644 src/main/java/com/show/mapper/WorkflowCopyToMapper.java create mode 100644 src/main/java/com/show/mapper/WorkflowInstanceMapper.java create mode 100644 src/main/java/com/show/mapper/WorkflowNodeMapper.java create mode 100644 src/main/java/com/show/mapper/WorkflowTaskMapper.java create mode 100644 src/main/java/com/show/model/AcademyDictDO.java create mode 100644 src/main/java/com/show/model/AcademyPermissionMappingDO.java create mode 100644 src/main/java/com/show/model/AcademyPlatformsDO.java create mode 100644 src/main/java/com/show/model/AcademyRoleDictDO.java create mode 100644 src/main/java/com/show/model/AdministerDO.java create mode 100644 src/main/java/com/show/model/MemberDO.java create mode 100644 src/main/java/com/show/model/ShowBannersDO.java create mode 100644 src/main/java/com/show/model/ShowLabelDictDO.java create mode 100644 src/main/java/com/show/model/ShowMemberContactsDO.java create mode 100644 src/main/java/com/show/model/ShowWorkLabelsDO.java create mode 100644 src/main/java/com/show/model/ShowWorksDO.java create mode 100644 src/main/java/com/show/model/SmsVerifyCodeDO.java create mode 100644 src/main/java/com/show/model/WorkflowCopyToDO.java create mode 100644 src/main/java/com/show/model/WorkflowInstance.java create mode 100644 src/main/java/com/show/model/WorkflowNode.java create mode 100644 src/main/java/com/show/model/WorkflowTask.java create mode 100644 src/main/java/com/show/service/AcademyDictService.java create mode 100644 src/main/java/com/show/service/AcademyPermissionMappingService.java create mode 100644 src/main/java/com/show/service/AcademyPlatformsService.java create mode 100644 src/main/java/com/show/service/MemberService.java create mode 100644 src/main/java/com/show/service/ShowBannersService.java create mode 100644 src/main/java/com/show/service/ShowLabelDictService.java create mode 100644 src/main/java/com/show/service/ShowMemberContactsService.java create mode 100644 src/main/java/com/show/service/ShowWorkLabelsService.java create mode 100644 src/main/java/com/show/service/ShowWorksService.java create mode 100644 src/main/java/com/show/service/SmsVerifyCodeService.java create mode 100644 src/main/java/com/show/service/WorkflowService.java create mode 100644 src/main/java/com/show/service/impl/AcademyDictServiceImpl.java create mode 100644 src/main/java/com/show/service/impl/AcademyPermissionMappingServiceImpl.java create mode 100644 src/main/java/com/show/service/impl/AcademyPlatformsServiceImpl.java create mode 100644 src/main/java/com/show/service/impl/MemberServiceImpl.java create mode 100644 src/main/java/com/show/service/impl/ShowBannersServiceImpl.java create mode 100644 src/main/java/com/show/service/impl/ShowLabelDictServiceImpl.java create mode 100644 src/main/java/com/show/service/impl/ShowMemberContactsServiceImpl.java create mode 100644 src/main/java/com/show/service/impl/ShowWorkLabelsServiceImpl.java create mode 100644 src/main/java/com/show/service/impl/ShowWorksServiceImpl.java create mode 100644 src/main/java/com/show/service/impl/SmsVerifyCodeServiceImpl.java create mode 100644 src/main/java/com/show/service/impl/WorkflowServiceImpl.java create mode 100644 src/main/java/com/show/util/ActivityDetectionUtils.java create mode 100644 src/main/java/com/show/util/AliyunSmsUtil.java create mode 100644 src/main/java/com/show/util/Base64Util.java create mode 100644 src/main/java/com/show/util/BaseModel.java create mode 100644 src/main/java/com/show/util/CodeGenerator.java create mode 100644 src/main/java/com/show/util/ConstantUtils.java create mode 100644 src/main/java/com/show/util/DateFormatUtil.java create mode 100644 src/main/java/com/show/util/DateUtil.java create mode 100644 src/main/java/com/show/util/DudaoConstant.java create mode 100644 src/main/java/com/show/util/EhCacheUtil.java create mode 100644 src/main/java/com/show/util/EncryptString.java create mode 100644 src/main/java/com/show/util/EncryptUtil.java create mode 100644 src/main/java/com/show/util/ExcelFormatUtils.java create mode 100644 src/main/java/com/show/util/HttpUtil.java create mode 100644 src/main/java/com/show/util/IpAddressUtil.java create mode 100644 src/main/java/com/show/util/JwtUtil.java create mode 100644 src/main/java/com/show/util/Localstorage.java create mode 100644 src/main/java/com/show/util/MathUtil.java create mode 100644 src/main/java/com/show/util/MongoUtil.java create mode 100644 src/main/java/com/show/util/MyBeanUtils.java create mode 100644 src/main/java/com/show/util/MyStringUtils.java create mode 100644 src/main/java/com/show/util/OSSUtils.java create mode 100644 src/main/java/com/show/util/PDFUtil.java create mode 100644 src/main/java/com/show/util/PageHelper.java create mode 100644 src/main/java/com/show/util/PolyvUtils.java create mode 100644 src/main/java/com/show/util/RandomUtil.java create mode 100644 src/main/java/com/show/util/RedisUtil.java create mode 100644 src/main/java/com/show/util/RenSheJuConstant.java create mode 100644 src/main/java/com/show/util/ResultMode.java create mode 100644 src/main/java/com/show/util/SMSUtils.java create mode 100644 src/main/java/com/show/util/SecretUtils.java create mode 100644 src/main/java/com/show/util/ShehuihuaConstant.java create mode 100644 src/main/java/com/show/util/Signature.java create mode 100644 src/main/java/com/show/util/TestMain.java create mode 100644 src/main/java/com/show/util/VodUtil.java create mode 100644 src/main/java/com/show/util/excel/ExcelColumn.java create mode 100644 src/main/java/com/show/util/excel/ExcelColumnUtil.java create mode 100644 src/main/java/com/show/util/excel/ExcelUtil.java create mode 100644 src/main/java/com/show/util/tree/Node.java create mode 100644 src/main/java/com/show/util/tree/NumberTree.java create mode 100644 src/main/java/com/show/util/tree/SerialNumber.java create mode 100644 src/main/java/com/show/vo/administer/NamesVO.java create mode 100644 src/main/java/com/show/vo/member/ApplyCenterSummaryVO.java create mode 100644 src/main/java/com/show/vo/member/LoginVO.java create mode 100644 src/main/java/com/show/vo/member/MemberBaseInoVO.java create mode 100644 src/main/java/com/show/vo/member/MemberWorkGroupVO.java create mode 100644 src/main/java/com/show/vo/oss/GetSecretVO.java create mode 100644 src/main/java/com/show/vo/oss/UploadFileVO.java create mode 100644 src/main/java/com/show/vo/work/CopiesVO.java create mode 100644 src/main/java/com/show/vo/work/CopyDetailVO.java create mode 100644 src/main/java/com/show/vo/work/CreatorsVO.java create mode 100644 src/main/java/com/show/vo/work/FlowNodesVO.java create mode 100644 src/main/java/com/show/vo/work/GetWorkflowHistoryVO.java create mode 100644 src/main/java/com/show/vo/work/HotSpotWorksVO.java create mode 100644 src/main/java/com/show/vo/work/MyWorksOverviewVO.java create mode 100644 src/main/java/com/show/vo/work/MyWorksVO.java create mode 100644 src/main/java/com/show/vo/work/NamesVO.java create mode 100644 src/main/java/com/show/vo/work/OneWorkVO.java create mode 100644 src/main/java/com/show/vo/work/PageWorksVO.java delete mode 100644 src/main/java/com/subsidy/MeishuApplication.java delete mode 100644 src/main/java/com/subsidy/common/ResponseData.java delete mode 100644 src/main/java/com/subsidy/common/ResponseVO.java delete mode 100644 src/main/java/com/subsidy/common/configure/AliyunSmsProperties.java delete mode 100644 src/main/java/com/subsidy/common/configure/MyTomcat.java delete mode 100644 src/main/java/com/subsidy/common/configure/MybatisPlusConfig.java delete mode 100644 src/main/java/com/subsidy/common/configure/PolyvConfig.java delete mode 100644 src/main/java/com/subsidy/common/configure/QXueYouConfig.java delete mode 100644 src/main/java/com/subsidy/common/configure/RedisConfig.java delete mode 100644 src/main/java/com/subsidy/common/configure/RemoteProperties.java delete mode 100644 src/main/java/com/subsidy/common/configure/RenSheConfig.java delete mode 100644 src/main/java/com/subsidy/common/configure/RestTemplateConfig.java delete mode 100644 src/main/java/com/subsidy/common/configure/SubsidyConfig.java delete mode 100644 src/main/java/com/subsidy/common/configure/SwaggerConfig.java delete mode 100644 src/main/java/com/subsidy/common/configure/VODConfig.java delete mode 100644 src/main/java/com/subsidy/common/configure/WebConfig.java delete mode 100644 src/main/java/com/subsidy/common/configure/WebLogAspect.java delete mode 100644 src/main/java/com/subsidy/common/configure/WechatConfig.java delete mode 100644 src/main/java/com/subsidy/common/constant/AttendanceConstant.java delete mode 100644 src/main/java/com/subsidy/common/constant/Code.java delete mode 100644 src/main/java/com/subsidy/common/constant/CourseNotification.java delete mode 100644 src/main/java/com/subsidy/common/constant/MemberType.java delete mode 100644 src/main/java/com/subsidy/common/constant/Platform.java delete mode 100644 src/main/java/com/subsidy/common/constant/ProjectReview.java delete mode 100644 src/main/java/com/subsidy/common/constant/ProjectSchedule.java delete mode 100644 src/main/java/com/subsidy/common/constant/ProjectStatus.java delete mode 100644 src/main/java/com/subsidy/common/constant/ProjectTrack.java delete mode 100644 src/main/java/com/subsidy/common/constant/ProjectType.java delete mode 100644 src/main/java/com/subsidy/common/constant/Role.java delete mode 100644 src/main/java/com/subsidy/common/constant/SMSTemplate.java delete mode 100644 src/main/java/com/subsidy/common/constant/SmsCode.java delete mode 100644 src/main/java/com/subsidy/common/constant/VodConstant.java delete mode 100644 src/main/java/com/subsidy/common/constant/WxConstant.java delete mode 100644 src/main/java/com/subsidy/common/exception/GlobalExceptionHandler.java delete mode 100644 src/main/java/com/subsidy/common/exception/HttpException.java delete mode 100644 src/main/java/com/subsidy/common/handler/MetaHandler.java delete mode 100644 src/main/java/com/subsidy/common/interceptor/AuthenticationInterceptor.java delete mode 100644 src/main/java/com/subsidy/common/interceptor/LoginRequired.java delete mode 100644 src/main/java/com/subsidy/common/interceptor/TimeRequired.java delete mode 100644 src/main/java/com/subsidy/controller/AdministerController.java delete mode 100644 src/main/java/com/subsidy/mapper/AdministerMapper.java delete mode 100644 src/main/java/com/subsidy/model/AdministerDO.java delete mode 100644 src/main/java/com/subsidy/service/AdministerService.java delete mode 100644 src/main/java/com/subsidy/service/impl/AdministerServiceImpl.java delete mode 100644 src/main/java/com/subsidy/util/ActivityDetectionUtils.java delete mode 100644 src/main/java/com/subsidy/util/AliyunSmsUtil.java delete mode 100644 src/main/java/com/subsidy/util/Base64Util.java delete mode 100644 src/main/java/com/subsidy/util/BaseModel.java delete mode 100644 src/main/java/com/subsidy/util/CodeGenerator.java delete mode 100644 src/main/java/com/subsidy/util/ConstantUtils.java delete mode 100644 src/main/java/com/subsidy/util/DateFormatUtil.java delete mode 100644 src/main/java/com/subsidy/util/DudaoConstant.java delete mode 100644 src/main/java/com/subsidy/util/EhCacheUtil.java delete mode 100644 src/main/java/com/subsidy/util/EncryptString.java delete mode 100644 src/main/java/com/subsidy/util/EncryptUtil.java delete mode 100644 src/main/java/com/subsidy/util/ExcelFormatUtils.java delete mode 100644 src/main/java/com/subsidy/util/HttpUtil.java delete mode 100644 src/main/java/com/subsidy/util/IpAddressUtil.java delete mode 100644 src/main/java/com/subsidy/util/JwtUtil.java delete mode 100644 src/main/java/com/subsidy/util/Localstorage.java delete mode 100644 src/main/java/com/subsidy/util/MathUtil.java delete mode 100644 src/main/java/com/subsidy/util/MongoUtil.java delete mode 100644 src/main/java/com/subsidy/util/MyBeanUtils.java delete mode 100644 src/main/java/com/subsidy/util/MyStringUtils.java delete mode 100644 src/main/java/com/subsidy/util/OSSUtils.java delete mode 100644 src/main/java/com/subsidy/util/PDFUtil.java delete mode 100644 src/main/java/com/subsidy/util/PageHelper.java delete mode 100644 src/main/java/com/subsidy/util/PolyvUtils.java delete mode 100644 src/main/java/com/subsidy/util/RandomUtil.java delete mode 100644 src/main/java/com/subsidy/util/RedisUtil.java delete mode 100644 src/main/java/com/subsidy/util/RenSheJuConstant.java delete mode 100644 src/main/java/com/subsidy/util/ResultMode.java delete mode 100644 src/main/java/com/subsidy/util/SMSUtils.java delete mode 100644 src/main/java/com/subsidy/util/SecretUtils.java delete mode 100644 src/main/java/com/subsidy/util/ShehuihuaConstant.java delete mode 100644 src/main/java/com/subsidy/util/Signature.java delete mode 100644 src/main/java/com/subsidy/util/TestMain.java delete mode 100644 src/main/java/com/subsidy/util/VodUtil.java delete mode 100644 src/main/java/com/subsidy/util/excel/ExcelColumn.java delete mode 100644 src/main/java/com/subsidy/util/excel/ExcelColumnUtil.java delete mode 100644 src/main/java/com/subsidy/util/excel/ExcelUtil.java delete mode 100644 src/main/java/com/subsidy/util/tree/Node.java delete mode 100644 src/main/java/com/subsidy/util/tree/NumberTree.java delete mode 100644 src/main/java/com/subsidy/util/tree/SerialNumber.java create mode 100644 src/main/resources/mapper/AcademyDictMapper.xml create mode 100644 src/main/resources/mapper/AcademyPermissionMappingMapper.xml create mode 100644 src/main/resources/mapper/AcademyPlatformsMapper.xml create mode 100644 src/main/resources/mapper/AcademyRoleDictMapper.xml create mode 100644 src/main/resources/mapper/MemberMapper.xml create mode 100644 src/main/resources/mapper/ShowBannersMapper.xml create mode 100644 src/main/resources/mapper/ShowLabelDictMapper.xml create mode 100644 src/main/resources/mapper/ShowMemberContactsMapper.xml create mode 100644 src/main/resources/mapper/ShowWorkLabelsMapper.xml create mode 100644 src/main/resources/mapper/ShowWorksMapper.xml create mode 100644 src/main/resources/mapper/SmsVerifyCodeMapper.xml create mode 100644 src/main/resources/mapper/WorkflowCopyToMapper.xml create mode 100644 src/main/resources/mapper/WorkflowInstanceMapper.xml create mode 100644 src/main/resources/mapper/WorkflowNodeMapper.xml create mode 100644 src/main/resources/mapper/WorkflowTaskMapper.xml delete mode 100644 target/classes/META-INF/spring-configuration-metadata.json delete mode 100644 target/classes/META-INF/subsidy.kotlin_module delete mode 100644 target/classes/application-dev.properties delete mode 100644 target/classes/application-prod.properties delete mode 100644 target/classes/application.properties delete mode 100644 target/classes/code.properties delete mode 100644 target/classes/com/subsidy/MeishuApplication.class delete mode 100644 target/classes/com/subsidy/common/ResponseData.class delete mode 100644 target/classes/com/subsidy/common/ResponseVO$ResponseVOBuilder.class delete mode 100644 target/classes/com/subsidy/common/ResponseVO.class delete mode 100644 target/classes/com/subsidy/common/configure/AliyunSmsProperties.class delete mode 100644 target/classes/com/subsidy/common/configure/MyTomcat$GwsTomcatConnectionCustomizer.class delete mode 100644 target/classes/com/subsidy/common/configure/MyTomcat.class delete mode 100644 target/classes/com/subsidy/common/configure/MybatisPlusConfig.class delete mode 100644 target/classes/com/subsidy/common/configure/PolyvConfig.class delete mode 100644 target/classes/com/subsidy/common/configure/QXueYouConfig.class delete mode 100644 target/classes/com/subsidy/common/configure/RedisConfig.class delete mode 100644 target/classes/com/subsidy/common/configure/RemoteProperties.class delete mode 100644 target/classes/com/subsidy/common/configure/RenSheConfig.class delete mode 100644 target/classes/com/subsidy/common/configure/RestTemplateConfig$WxMappingJackson2HttpMessageConverter.class delete mode 100644 target/classes/com/subsidy/common/configure/RestTemplateConfig.class delete mode 100644 target/classes/com/subsidy/common/configure/SubsidyConfig.class delete mode 100644 target/classes/com/subsidy/common/configure/SwaggerConfig.class delete mode 100644 target/classes/com/subsidy/common/configure/VODConfig.class delete mode 100644 target/classes/com/subsidy/common/configure/WebConfig.class delete mode 100644 target/classes/com/subsidy/common/configure/WebLogAspect.class delete mode 100644 target/classes/com/subsidy/common/configure/WechatConfig.class delete mode 100644 target/classes/com/subsidy/common/constant/AttendanceConstant.class delete mode 100644 target/classes/com/subsidy/common/constant/Code.class delete mode 100644 target/classes/com/subsidy/common/constant/CourseNotification.class delete mode 100644 target/classes/com/subsidy/common/constant/MemberType.class delete mode 100644 target/classes/com/subsidy/common/constant/Platform.class delete mode 100644 target/classes/com/subsidy/common/constant/ProjectReview.class delete mode 100644 target/classes/com/subsidy/common/constant/ProjectSchedule.class delete mode 100644 target/classes/com/subsidy/common/constant/ProjectStatus.class delete mode 100644 target/classes/com/subsidy/common/constant/ProjectTrack.class delete mode 100644 target/classes/com/subsidy/common/constant/ProjectType.class delete mode 100644 target/classes/com/subsidy/common/constant/Role.class delete mode 100644 target/classes/com/subsidy/common/constant/SMSTemplate.class delete mode 100644 target/classes/com/subsidy/common/constant/SmsCode.class delete mode 100644 target/classes/com/subsidy/common/constant/VodConstant.class delete mode 100644 target/classes/com/subsidy/common/constant/WxConstant.class delete mode 100644 target/classes/com/subsidy/common/exception/GlobalExceptionHandler.class delete mode 100644 target/classes/com/subsidy/common/exception/HttpException.class delete mode 100644 target/classes/com/subsidy/common/handler/MetaHandler.class delete mode 100644 target/classes/com/subsidy/common/interceptor/AuthenticationInterceptor.class delete mode 100644 target/classes/com/subsidy/common/interceptor/LoginRequired.class delete mode 100644 target/classes/com/subsidy/common/interceptor/TimeRequired.class delete mode 100644 target/classes/com/subsidy/controller/AdministerController.class delete mode 100644 target/classes/com/subsidy/mapper/AdministerMapper.class delete mode 100644 target/classes/com/subsidy/model/AdministerDO.class delete mode 100644 target/classes/com/subsidy/service/AdministerService.class delete mode 100644 target/classes/com/subsidy/service/impl/AdministerServiceImpl.class delete mode 100644 target/classes/com/subsidy/util/ActivityDetectionUtils.class delete mode 100644 target/classes/com/subsidy/util/AliyunSmsUtil.class delete mode 100644 target/classes/com/subsidy/util/Base64Util.class delete mode 100644 target/classes/com/subsidy/util/BaseModel.class delete mode 100644 target/classes/com/subsidy/util/CodeGenerator$1.class delete mode 100644 target/classes/com/subsidy/util/CodeGenerator$2.class delete mode 100644 target/classes/com/subsidy/util/CodeGenerator.class delete mode 100644 target/classes/com/subsidy/util/ConstantUtils.class delete mode 100644 target/classes/com/subsidy/util/DateFormatUtil.class delete mode 100644 target/classes/com/subsidy/util/DudaoConstant.class delete mode 100644 target/classes/com/subsidy/util/EhCacheUtil.class delete mode 100644 target/classes/com/subsidy/util/EncryptString.class delete mode 100644 target/classes/com/subsidy/util/ExcelFormatUtils.class delete mode 100644 target/classes/com/subsidy/util/HttpUtil$1.class delete mode 100644 target/classes/com/subsidy/util/HttpUtil$2.class delete mode 100644 target/classes/com/subsidy/util/HttpUtil$3.class delete mode 100644 target/classes/com/subsidy/util/HttpUtil$4.class delete mode 100644 target/classes/com/subsidy/util/HttpUtil$DataParse.class delete mode 100644 target/classes/com/subsidy/util/HttpUtil.class delete mode 100644 target/classes/com/subsidy/util/IpAddressUtil.class delete mode 100644 target/classes/com/subsidy/util/JwtUtil.class delete mode 100644 target/classes/com/subsidy/util/Localstorage.class delete mode 100644 target/classes/com/subsidy/util/MathUtil.class delete mode 100644 target/classes/com/subsidy/util/MyBeanUtils.class delete mode 100644 target/classes/com/subsidy/util/MyStringUtils.class delete mode 100644 target/classes/com/subsidy/util/OSSUtils.class delete mode 100644 target/classes/com/subsidy/util/PDFUtil.class delete mode 100644 target/classes/com/subsidy/util/PageHelper.class delete mode 100644 target/classes/com/subsidy/util/PolyvUtils.class delete mode 100644 target/classes/com/subsidy/util/RandomUtil.class delete mode 100644 target/classes/com/subsidy/util/RedisUtil.class delete mode 100644 target/classes/com/subsidy/util/RenSheJuConstant.class delete mode 100644 target/classes/com/subsidy/util/ResultMode.class delete mode 100644 target/classes/com/subsidy/util/SMSUtils.class delete mode 100644 target/classes/com/subsidy/util/SecretUtils.class delete mode 100644 target/classes/com/subsidy/util/ShehuihuaConstant.class delete mode 100644 target/classes/com/subsidy/util/Signature.class delete mode 100644 target/classes/com/subsidy/util/TestMain.class delete mode 100644 target/classes/com/subsidy/util/VodUtil.class delete mode 100644 target/classes/com/subsidy/util/excel/ExcelColumn.class delete mode 100644 target/classes/com/subsidy/util/excel/ExcelColumnUtil.class delete mode 100644 target/classes/com/subsidy/util/excel/ExcelUtil.class delete mode 100644 target/classes/com/subsidy/util/tree/Node.class delete mode 100644 target/classes/com/subsidy/util/tree/NumberTree.class delete mode 100644 target/classes/com/subsidy/util/tree/SerialNumber.class delete mode 100644 target/classes/ehcache.xml delete mode 100644 target/classes/logback-spring.xml delete mode 100644 target/classes/mapper/AdministerMapper.xml delete mode 100644 target/classes/mybatis-plus.properties delete mode 100644 target/classes/mybatis.xml delete mode 100644 target/classes/templates/controller.java.ftl delete mode 100644 target/classes/templates/entity.java.ftl delete mode 100644 target/classes/templates/mapper.java.ftl delete mode 100644 target/classes/templates/mapper.xml.ftl delete mode 100644 target/classes/templates/service.java.ftl delete mode 100644 target/classes/templates/serviceImpl.java.ftl delete mode 100644 target/ecnutracks.jar delete mode 100644 target/ecnutracks.jar.original delete mode 100644 target/maven-archiver/pom.properties delete mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst delete mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst diff --git a/logs/springboot-logback-error.log b/logs/springboot-logback-error.log index eb2f046..a231582 100644 --- a/logs/springboot-logback-error.log +++ b/logs/springboot-logback-error.log @@ -1,65 +1,6 @@ -2025-11-25 11:02:10,187 [main] ERROR org.springframework.boot.SpringApplication:822 - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [com/baomidou/mybatisplus/autoconfigure/MybatisPlusAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.subsidy.model.AdministerDO'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.subsidy.model.AdministerDO - at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:627) - at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:607) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1321) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1160) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) - at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:845) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:877) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549) - at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:743) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:390) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:312) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:1214) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:1203) - at com.subsidy.MeishuApplication.main(MeishuApplication.java:22) -Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.subsidy.model.AdministerDO'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.subsidy.model.AdministerDO - at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) - at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:622) - ... 19 common frames omitted -Caused by: org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.subsidy.model.AdministerDO'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.subsidy.model.AdministerDO - at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.buildSqlSessionFactory(MybatisSqlSessionFactoryBean.java:593) - at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.afterPropertiesSet(MybatisSqlSessionFactoryBean.java:429) - at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.getObject(MybatisSqlSessionFactoryBean.java:626) - at com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration.sqlSessionFactory(MybatisPlusAutoConfiguration.java:214) - at com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration$$EnhancerBySpringCGLIB$$613d0b41.CGLIB$sqlSessionFactory$0() - at com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration$$EnhancerBySpringCGLIB$$613d0b41$$FastClassBySpringCGLIB$$bf8a77ff.invoke() - at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244) - at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:363) - at com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration$$EnhancerBySpringCGLIB$$613d0b41.sqlSessionFactory() - at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) - at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.lang.reflect.Method.invoke(Method.java:498) - at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) - ... 20 common frames omitted -Caused by: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.subsidy.model.AdministerDO'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.subsidy.model.AdministerDO - at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:122) - at org.apache.ibatis.builder.xml.XMLMapperBuilder.parse(XMLMapperBuilder.java:94) - at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.buildSqlSessionFactory(MybatisSqlSessionFactoryBean.java:591) - ... 33 common frames omitted -Caused by: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.subsidy.model.AdministerDO'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.subsidy.model.AdministerDO - at org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:118) - at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:262) - at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:253) - at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElements(XMLMapperBuilder.java:245) - at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:118) - ... 35 common frames omitted -Caused by: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.subsidy.model.AdministerDO'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.subsidy.model.AdministerDO - at org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:120) - at org.apache.ibatis.builder.BaseBuilder.resolveAlias(BaseBuilder.java:149) - at org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:116) - ... 39 common frames omitted -Caused by: java.lang.ClassNotFoundException: Cannot find class: com.subsidy.model.AdministerDO - at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:200) - at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:89) - at org.apache.ibatis.io.Resources.classForName(Resources.java:261) - at org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:116) - ... 41 common frames omitted +2025-12-09 13:27:21,225 [http-nio-23510-exec-6] ERROR com.show.common.exception.GlobalExceptionHandler:89 - JSON parse error: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token + at [Source: (PushbackInputStream); line: 1, column: 256] (through reference chain: com.show.dto.work.SubmitWorkDTO["works"]) +2025-12-09 13:28:27,940 [http-nio-23510-exec-7] ERROR com.show.common.exception.GlobalExceptionHandler:89 - JSON parse error: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token + at [Source: (PushbackInputStream); line: 1, column: 194] (through reference chain: com.show.dto.work.SubmitWorkDTO["works"]) +2025-12-09 13:31:19,273 [http-nio-23510-exec-4] ERROR com.show.common.exception.GlobalExceptionHandler:89 - JSON parse error: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token + at [Source: (PushbackInputStream); line: 1, column: 194] (through reference chain: com.show.dto.work.SubmitWorkDTO["works"]) diff --git a/logs/springboot-logback-info.log b/logs/springboot-logback-info.log index a69d5bf..2107ba1 100644 --- a/logs/springboot-logback-info.log +++ b/logs/springboot-logback-info.log @@ -1,93 +1,378 @@ -2025-11-25 11:02:05,245 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:244 - Multiple Spring Data modules found, entering strict repository configuration mode! -2025-11-25 11:02:05,253 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:126 - Bootstrapping Spring Data repositories in DEFAULT mode. -2025-11-25 11:02:05,285 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:182 - Finished Spring Data repository scanning in 20ms. Found 0 repository interfaces. -2025-11-25 11:02:05,382 [main] WARN org.mybatis.spring.mapper.ClassPathMapperScanner:44 - No MyBatis mapper was found in '[com.subsidy.mapper]' package. Please check your configuration. -2025-11-25 11:02:05,599 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$23749ea7] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) -2025-11-25 11:02:05,693 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'redisConfig' of type [com.subsidy.common.configure.RedisConfig$$EnhancerBySpringCGLIB$$233ca9ae] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) -2025-11-25 11:02:06,011 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:90 - Tomcat initialized with port(s): 23504 (http) -2025-11-25 11:02:06,022 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Initializing ProtocolHandler ["http-nio-23504"] -2025-11-25 11:02:06,029 [main] INFO org.apache.catalina.core.StandardService:173 - Starting service [Tomcat] -2025-11-25 11:02:06,029 [main] INFO org.apache.catalina.core.StandardEngine:173 - Starting Servlet engine: [Apache Tomcat/9.0.22] -2025-11-25 11:02:06,035 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - Loaded APR based Apache Tomcat Native library [1.2.37] using APR version [1.7.4]. -2025-11-25 11:02:06,035 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true]. -2025-11-25 11:02:06,035 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true] -2025-11-25 11:02:06,037 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - OpenSSL successfully initialized [OpenSSL 1.1.1u 30 May 2023] -2025-11-25 11:02:06,173 [main] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring embedded WebApplicationContext -2025-11-25 11:02:06,174 [main] INFO org.springframework.web.context.ContextLoader:284 - Root WebApplicationContext: initialization completed in 1695 ms -2025-11-25 11:02:07,686 [main] INFO springfox.documentation.spring.web.PropertySourcedRequestMappingHandlerMapping:69 - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] -2025-11-25 11:02:07,854 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:171 - Initializing ExecutorService 'applicationTaskExecutor' -2025-11-25 11:02:08,016 [main] INFO com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure:56 - Init DruidDataSource -2025-11-25 11:02:10,005 [main] INFO com.alibaba.druid.pool.DruidDataSource:994 - {dataSource-1} inited -2025-11-25 11:02:10,147 [main] WARN org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext:557 - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [com/baomidou/mybatisplus/autoconfigure/MybatisPlusAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.subsidy.model.AdministerDO'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.subsidy.model.AdministerDO -2025-11-25 11:02:10,147 [main] INFO com.alibaba.druid.pool.DruidDataSource:2029 - {dataSource-1} closing ... -2025-11-25 11:02:10,150 [main] INFO com.alibaba.druid.pool.DruidDataSource:2101 - {dataSource-1} closed -2025-11-25 11:02:10,151 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:208 - Shutting down ExecutorService 'applicationTaskExecutor' -2025-11-25 11:02:10,169 [main] INFO org.apache.catalina.core.StandardService:173 - Stopping service [Tomcat] -2025-11-25 11:02:10,178 [main] INFO org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener:136 - +2025-12-15 09:24:48,127 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:244 - Multiple Spring Data modules found, entering strict repository configuration mode! +2025-12-15 09:24:48,135 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:126 - Bootstrapping Spring Data repositories in DEFAULT mode. +2025-12-15 09:24:48,180 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:182 - Finished Spring Data repository scanning in 29ms. Found 0 repository interfaces. +2025-12-15 09:24:48,536 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$cf2efc2f] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-12-15 09:24:48,643 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'redisConfig' of type [com.show.common.configure.RedisConfig$$EnhancerBySpringCGLIB$$82817e2a] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-12-15 09:24:48,959 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:90 - Tomcat initialized with port(s): 23510 (http) +2025-12-15 09:24:48,971 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Initializing ProtocolHandler ["http-nio-23510"] +2025-12-15 09:24:48,977 [main] INFO org.apache.catalina.core.StandardService:173 - Starting service [Tomcat] +2025-12-15 09:24:48,977 [main] INFO org.apache.catalina.core.StandardEngine:173 - Starting Servlet engine: [Apache Tomcat/9.0.22] +2025-12-15 09:24:48,983 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - Loaded APR based Apache Tomcat Native library [1.2.37] using APR version [1.7.4]. +2025-12-15 09:24:48,983 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true]. +2025-12-15 09:24:48,983 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true] +2025-12-15 09:24:48,986 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - OpenSSL successfully initialized [OpenSSL 1.1.1u 30 May 2023] +2025-12-15 09:24:49,126 [main] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring embedded WebApplicationContext +2025-12-15 09:24:49,127 [main] INFO org.springframework.web.context.ContextLoader:284 - Root WebApplicationContext: initialization completed in 2257 ms +2025-12-15 09:24:49,225 [main] INFO com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure:56 - Init DruidDataSource +2025-12-15 09:24:50,296 [main] INFO com.alibaba.druid.pool.DruidDataSource:994 - {dataSource-1} inited +2025-12-15 09:24:53,704 [main] INFO springfox.documentation.spring.web.PropertySourcedRequestMappingHandlerMapping:69 - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2025-12-15 09:24:53,913 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:171 - Initializing ExecutorService 'applicationTaskExecutor' +2025-12-15 09:24:54,930 [main] INFO org.quartz.impl.StdSchedulerFactory:1208 - Using default implementation for ThreadExecutor +2025-12-15 09:24:54,944 [main] INFO org.quartz.core.SchedulerSignalerImpl:61 - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl +2025-12-15 09:24:54,944 [main] INFO org.quartz.core.QuartzScheduler:229 - Quartz Scheduler v.2.3.1 created. +2025-12-15 09:24:54,945 [main] INFO org.quartz.simpl.RAMJobStore:155 - RAMJobStore initialized. +2025-12-15 09:24:54,946 [main] INFO org.quartz.core.QuartzScheduler:294 - Scheduler meta-data: Quartz Scheduler (v2.3.1) 'quartzScheduler' with instanceId 'NON_CLUSTERED' + Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally. + NOT STARTED. + Currently in standby mode. + Number of jobs executed: 0 + Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads. + Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. -Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. -2025-11-25 11:02:10,187 [main] ERROR org.springframework.boot.SpringApplication:822 - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [com/baomidou/mybatisplus/autoconfigure/MybatisPlusAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.subsidy.model.AdministerDO'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.subsidy.model.AdministerDO - at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:627) - at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:607) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1321) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1160) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) - at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:845) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:877) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549) - at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:743) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:390) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:312) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:1214) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:1203) - at com.subsidy.MeishuApplication.main(MeishuApplication.java:22) -Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.subsidy.model.AdministerDO'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.subsidy.model.AdministerDO - at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) - at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:622) - ... 19 common frames omitted -Caused by: org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.subsidy.model.AdministerDO'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.subsidy.model.AdministerDO - at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.buildSqlSessionFactory(MybatisSqlSessionFactoryBean.java:593) - at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.afterPropertiesSet(MybatisSqlSessionFactoryBean.java:429) - at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.getObject(MybatisSqlSessionFactoryBean.java:626) - at com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration.sqlSessionFactory(MybatisPlusAutoConfiguration.java:214) - at com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration$$EnhancerBySpringCGLIB$$613d0b41.CGLIB$sqlSessionFactory$0() - at com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration$$EnhancerBySpringCGLIB$$613d0b41$$FastClassBySpringCGLIB$$bf8a77ff.invoke() - at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244) - at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:363) - at com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration$$EnhancerBySpringCGLIB$$613d0b41.sqlSessionFactory() - at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) - at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.lang.reflect.Method.invoke(Method.java:498) - at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) - ... 20 common frames omitted -Caused by: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.subsidy.model.AdministerDO'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.subsidy.model.AdministerDO - at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:122) - at org.apache.ibatis.builder.xml.XMLMapperBuilder.parse(XMLMapperBuilder.java:94) - at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.buildSqlSessionFactory(MybatisSqlSessionFactoryBean.java:591) - ... 33 common frames omitted -Caused by: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.subsidy.model.AdministerDO'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.subsidy.model.AdministerDO - at org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:118) - at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:262) - at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:253) - at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElements(XMLMapperBuilder.java:245) - at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:118) - ... 35 common frames omitted -Caused by: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.subsidy.model.AdministerDO'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.subsidy.model.AdministerDO - at org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:120) - at org.apache.ibatis.builder.BaseBuilder.resolveAlias(BaseBuilder.java:149) - at org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:116) - ... 39 common frames omitted -Caused by: java.lang.ClassNotFoundException: Cannot find class: com.subsidy.model.AdministerDO - at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:200) - at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:89) - at org.apache.ibatis.io.Resources.classForName(Resources.java:261) - at org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:116) - ... 41 common frames omitted +2025-12-15 09:24:54,946 [main] INFO org.quartz.impl.StdSchedulerFactory:1362 - Quartz scheduler 'quartzScheduler' initialized from an externally provided properties instance. +2025-12-15 09:24:54,946 [main] INFO org.quartz.impl.StdSchedulerFactory:1366 - Quartz scheduler version: 2.3.1 +2025-12-15 09:24:54,947 [main] INFO org.quartz.core.QuartzScheduler:2293 - JobFactory set to: org.springframework.scheduling.quartz.SpringBeanJobFactory@68fc636a +2025-12-15 09:24:54,965 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler:171 - Initializing ExecutorService 'taskScheduler' +2025-12-15 09:24:55,044 [main] INFO springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper:160 - Context refreshed +2025-12-15 09:24:55,069 [main] INFO springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper:163 - Found 1 custom documentation plugin(s) +2025-12-15 09:24:55,106 [main] INFO springfox.documentation.spring.web.scanners.ApiListingReferenceScanner:41 - Scanning for api listing references +2025-12-15 09:24:55,339 [main] INFO org.springframework.scheduling.quartz.SchedulerFactoryBean:726 - Starting Quartz Scheduler now +2025-12-15 09:24:55,340 [main] INFO org.quartz.core.QuartzScheduler:547 - Scheduler quartzScheduler_$_NON_CLUSTERED started. +2025-12-15 09:24:55,351 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Starting ProtocolHandler ["http-nio-23510"] +2025-12-15 09:24:55,383 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:202 - Tomcat started on port(s): 23510 (http) with context path '' +2025-12-15 09:45:41,621 [http-nio-23510-exec-1] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-12-15 09:45:41,621 [http-nio-23510-exec-1] INFO org.springframework.web.servlet.DispatcherServlet:524 - Initializing Servlet 'dispatcherServlet' +2025-12-15 09:45:41,630 [http-nio-23510-exec-1] INFO org.springframework.web.servlet.DispatcherServlet:546 - Completed initialization in 9 ms +2025-12-15 09:58:55,472 [Thread-22] INFO org.quartz.core.QuartzScheduler:585 - Scheduler quartzScheduler_$_NON_CLUSTERED paused. +2025-12-15 09:58:55,472 [Thread-22] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler:208 - Shutting down ExecutorService 'taskScheduler' +2025-12-15 09:58:55,473 [Thread-22] INFO org.springframework.scheduling.quartz.SchedulerFactoryBean:844 - Shutting down Quartz Scheduler +2025-12-15 09:58:55,473 [Thread-22] INFO org.quartz.core.QuartzScheduler:666 - Scheduler quartzScheduler_$_NON_CLUSTERED shutting down. +2025-12-15 09:58:55,473 [Thread-22] INFO org.quartz.core.QuartzScheduler:585 - Scheduler quartzScheduler_$_NON_CLUSTERED paused. +2025-12-15 09:58:55,473 [Thread-22] INFO org.quartz.core.QuartzScheduler:740 - Scheduler quartzScheduler_$_NON_CLUSTERED shutdown complete. +2025-12-15 09:58:55,478 [Thread-22] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:208 - Shutting down ExecutorService 'applicationTaskExecutor' +2025-12-15 09:58:55,496 [Thread-22] INFO com.alibaba.druid.pool.DruidDataSource:2029 - {dataSource-1} closing ... +2025-12-15 09:58:55,498 [Thread-22] INFO com.alibaba.druid.pool.DruidDataSource:2101 - {dataSource-1} closed +2025-12-15 09:59:13,240 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:244 - Multiple Spring Data modules found, entering strict repository configuration mode! +2025-12-15 09:59:13,244 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:126 - Bootstrapping Spring Data repositories in DEFAULT mode. +2025-12-15 09:59:13,287 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:182 - Finished Spring Data repository scanning in 29ms. Found 0 repository interfaces. +2025-12-15 09:59:13,651 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$298240fe] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-12-15 09:59:13,749 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'redisConfig' of type [com.show.common.configure.RedisConfig$$EnhancerBySpringCGLIB$$dcd4c2f9] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-12-15 09:59:14,169 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:90 - Tomcat initialized with port(s): 23510 (http) +2025-12-15 09:59:14,182 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Initializing ProtocolHandler ["http-nio-23510"] +2025-12-15 09:59:14,190 [main] INFO org.apache.catalina.core.StandardService:173 - Starting service [Tomcat] +2025-12-15 09:59:14,191 [main] INFO org.apache.catalina.core.StandardEngine:173 - Starting Servlet engine: [Apache Tomcat/9.0.22] +2025-12-15 09:59:14,197 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - Loaded APR based Apache Tomcat Native library [1.2.37] using APR version [1.7.4]. +2025-12-15 09:59:14,197 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true]. +2025-12-15 09:59:14,197 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true] +2025-12-15 09:59:14,200 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - OpenSSL successfully initialized [OpenSSL 1.1.1u 30 May 2023] +2025-12-15 09:59:14,349 [main] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring embedded WebApplicationContext +2025-12-15 09:59:14,349 [main] INFO org.springframework.web.context.ContextLoader:284 - Root WebApplicationContext: initialization completed in 2039 ms +2025-12-15 09:59:14,463 [main] INFO com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure:56 - Init DruidDataSource +2025-12-15 09:59:15,659 [main] INFO com.alibaba.druid.pool.DruidDataSource:994 - {dataSource-1} inited +2025-12-15 09:59:18,655 [main] INFO springfox.documentation.spring.web.PropertySourcedRequestMappingHandlerMapping:69 - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2025-12-15 09:59:18,819 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:171 - Initializing ExecutorService 'applicationTaskExecutor' +2025-12-15 09:59:19,530 [main] INFO org.quartz.impl.StdSchedulerFactory:1208 - Using default implementation for ThreadExecutor +2025-12-15 09:59:19,540 [main] INFO org.quartz.core.SchedulerSignalerImpl:61 - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl +2025-12-15 09:59:19,541 [main] INFO org.quartz.core.QuartzScheduler:229 - Quartz Scheduler v.2.3.1 created. +2025-12-15 09:59:19,542 [main] INFO org.quartz.simpl.RAMJobStore:155 - RAMJobStore initialized. +2025-12-15 09:59:19,542 [main] INFO org.quartz.core.QuartzScheduler:294 - Scheduler meta-data: Quartz Scheduler (v2.3.1) 'quartzScheduler' with instanceId 'NON_CLUSTERED' + Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally. + NOT STARTED. + Currently in standby mode. + Number of jobs executed: 0 + Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads. + Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. + +2025-12-15 09:59:19,543 [main] INFO org.quartz.impl.StdSchedulerFactory:1362 - Quartz scheduler 'quartzScheduler' initialized from an externally provided properties instance. +2025-12-15 09:59:19,543 [main] INFO org.quartz.impl.StdSchedulerFactory:1366 - Quartz scheduler version: 2.3.1 +2025-12-15 09:59:19,543 [main] INFO org.quartz.core.QuartzScheduler:2293 - JobFactory set to: org.springframework.scheduling.quartz.SpringBeanJobFactory@18301763 +2025-12-15 09:59:19,558 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler:171 - Initializing ExecutorService 'taskScheduler' +2025-12-15 09:59:19,621 [main] INFO springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper:160 - Context refreshed +2025-12-15 09:59:19,639 [main] INFO springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper:163 - Found 1 custom documentation plugin(s) +2025-12-15 09:59:19,671 [main] INFO springfox.documentation.spring.web.scanners.ApiListingReferenceScanner:41 - Scanning for api listing references +2025-12-15 09:59:19,866 [main] INFO org.springframework.scheduling.quartz.SchedulerFactoryBean:726 - Starting Quartz Scheduler now +2025-12-15 09:59:19,867 [main] INFO org.quartz.core.QuartzScheduler:547 - Scheduler quartzScheduler_$_NON_CLUSTERED started. +2025-12-15 09:59:19,877 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Starting ProtocolHandler ["http-nio-23510"] +2025-12-15 09:59:19,898 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:202 - Tomcat started on port(s): 23510 (http) with context path '' +2025-12-15 09:59:20,116 [http-nio-23510-exec-1] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-12-15 09:59:20,116 [http-nio-23510-exec-1] INFO org.springframework.web.servlet.DispatcherServlet:524 - Initializing Servlet 'dispatcherServlet' +2025-12-15 09:59:20,123 [http-nio-23510-exec-1] INFO org.springframework.web.servlet.DispatcherServlet:546 - Completed initialization in 7 ms +2025-12-15 10:24:46,373 [Thread-19] INFO org.quartz.core.QuartzScheduler:585 - Scheduler quartzScheduler_$_NON_CLUSTERED paused. +2025-12-15 10:24:46,391 [Thread-19] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler:208 - Shutting down ExecutorService 'taskScheduler' +2025-12-15 10:24:46,397 [Thread-19] INFO org.springframework.scheduling.quartz.SchedulerFactoryBean:844 - Shutting down Quartz Scheduler +2025-12-15 10:24:46,398 [Thread-19] INFO org.quartz.core.QuartzScheduler:666 - Scheduler quartzScheduler_$_NON_CLUSTERED shutting down. +2025-12-15 10:24:46,398 [Thread-19] INFO org.quartz.core.QuartzScheduler:585 - Scheduler quartzScheduler_$_NON_CLUSTERED paused. +2025-12-15 10:24:46,399 [Thread-19] INFO org.quartz.core.QuartzScheduler:740 - Scheduler quartzScheduler_$_NON_CLUSTERED shutdown complete. +2025-12-15 10:24:46,446 [Thread-19] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:208 - Shutting down ExecutorService 'applicationTaskExecutor' +2025-12-15 10:24:46,515 [Thread-19] INFO com.alibaba.druid.pool.DruidDataSource:2029 - {dataSource-1} closing ... +2025-12-15 10:24:46,542 [Thread-19] INFO com.alibaba.druid.pool.DruidDataSource:2101 - {dataSource-1} closed +2025-12-15 10:24:54,840 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:244 - Multiple Spring Data modules found, entering strict repository configuration mode! +2025-12-15 10:24:54,844 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:126 - Bootstrapping Spring Data repositories in DEFAULT mode. +2025-12-15 10:24:54,885 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:182 - Finished Spring Data repository scanning in 27ms. Found 0 repository interfaces. +2025-12-15 10:24:55,233 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$ae588d75] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-12-15 10:24:55,333 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'redisConfig' of type [com.show.common.configure.RedisConfig$$EnhancerBySpringCGLIB$$61ab0f70] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-12-15 10:24:55,653 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:90 - Tomcat initialized with port(s): 23510 (http) +2025-12-15 10:24:55,666 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Initializing ProtocolHandler ["http-nio-23510"] +2025-12-15 10:24:55,673 [main] INFO org.apache.catalina.core.StandardService:173 - Starting service [Tomcat] +2025-12-15 10:24:55,673 [main] INFO org.apache.catalina.core.StandardEngine:173 - Starting Servlet engine: [Apache Tomcat/9.0.22] +2025-12-15 10:24:55,678 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - Loaded APR based Apache Tomcat Native library [1.2.37] using APR version [1.7.4]. +2025-12-15 10:24:55,678 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true]. +2025-12-15 10:24:55,678 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true] +2025-12-15 10:24:55,681 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - OpenSSL successfully initialized [OpenSSL 1.1.1u 30 May 2023] +2025-12-15 10:24:55,819 [main] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring embedded WebApplicationContext +2025-12-15 10:24:55,820 [main] INFO org.springframework.web.context.ContextLoader:284 - Root WebApplicationContext: initialization completed in 1933 ms +2025-12-15 10:24:55,920 [main] INFO com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure:56 - Init DruidDataSource +2025-12-15 10:24:57,255 [main] INFO com.alibaba.druid.pool.DruidDataSource:994 - {dataSource-1} inited +2025-12-15 10:25:00,524 [main] INFO springfox.documentation.spring.web.PropertySourcedRequestMappingHandlerMapping:69 - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2025-12-15 10:25:00,698 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:171 - Initializing ExecutorService 'applicationTaskExecutor' +2025-12-15 10:25:01,549 [main] INFO org.quartz.impl.StdSchedulerFactory:1208 - Using default implementation for ThreadExecutor +2025-12-15 10:25:01,560 [main] INFO org.quartz.core.SchedulerSignalerImpl:61 - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl +2025-12-15 10:25:01,560 [main] INFO org.quartz.core.QuartzScheduler:229 - Quartz Scheduler v.2.3.1 created. +2025-12-15 10:25:01,561 [main] INFO org.quartz.simpl.RAMJobStore:155 - RAMJobStore initialized. +2025-12-15 10:25:01,562 [main] INFO org.quartz.core.QuartzScheduler:294 - Scheduler meta-data: Quartz Scheduler (v2.3.1) 'quartzScheduler' with instanceId 'NON_CLUSTERED' + Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally. + NOT STARTED. + Currently in standby mode. + Number of jobs executed: 0 + Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads. + Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. + +2025-12-15 10:25:01,562 [main] INFO org.quartz.impl.StdSchedulerFactory:1362 - Quartz scheduler 'quartzScheduler' initialized from an externally provided properties instance. +2025-12-15 10:25:01,562 [main] INFO org.quartz.impl.StdSchedulerFactory:1366 - Quartz scheduler version: 2.3.1 +2025-12-15 10:25:01,563 [main] INFO org.quartz.core.QuartzScheduler:2293 - JobFactory set to: org.springframework.scheduling.quartz.SpringBeanJobFactory@655f92a1 +2025-12-15 10:25:01,579 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler:171 - Initializing ExecutorService 'taskScheduler' +2025-12-15 10:25:01,646 [main] INFO springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper:160 - Context refreshed +2025-12-15 10:25:01,669 [main] INFO springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper:163 - Found 1 custom documentation plugin(s) +2025-12-15 10:25:01,702 [main] INFO springfox.documentation.spring.web.scanners.ApiListingReferenceScanner:41 - Scanning for api listing references +2025-12-15 10:25:01,924 [main] INFO org.springframework.scheduling.quartz.SchedulerFactoryBean:726 - Starting Quartz Scheduler now +2025-12-15 10:25:01,925 [main] INFO org.quartz.core.QuartzScheduler:547 - Scheduler quartzScheduler_$_NON_CLUSTERED started. +2025-12-15 10:25:01,936 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Starting ProtocolHandler ["http-nio-23510"] +2025-12-15 10:25:01,966 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:202 - Tomcat started on port(s): 23510 (http) with context path '' +2025-12-15 10:25:44,669 [http-nio-23510-exec-1] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-12-15 10:25:44,669 [http-nio-23510-exec-1] INFO org.springframework.web.servlet.DispatcherServlet:524 - Initializing Servlet 'dispatcherServlet' +2025-12-15 10:25:44,678 [http-nio-23510-exec-1] INFO org.springframework.web.servlet.DispatcherServlet:546 - Completed initialization in 9 ms +2025-12-15 10:26:13,976 [Thread-21] INFO org.quartz.core.QuartzScheduler:585 - Scheduler quartzScheduler_$_NON_CLUSTERED paused. +2025-12-15 10:26:13,977 [Thread-21] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler:208 - Shutting down ExecutorService 'taskScheduler' +2025-12-15 10:26:13,977 [Thread-21] INFO org.springframework.scheduling.quartz.SchedulerFactoryBean:844 - Shutting down Quartz Scheduler +2025-12-15 10:26:13,977 [Thread-21] INFO org.quartz.core.QuartzScheduler:666 - Scheduler quartzScheduler_$_NON_CLUSTERED shutting down. +2025-12-15 10:26:13,977 [Thread-21] INFO org.quartz.core.QuartzScheduler:585 - Scheduler quartzScheduler_$_NON_CLUSTERED paused. +2025-12-15 10:26:13,978 [Thread-21] INFO org.quartz.core.QuartzScheduler:740 - Scheduler quartzScheduler_$_NON_CLUSTERED shutdown complete. +2025-12-15 10:26:13,984 [Thread-21] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:208 - Shutting down ExecutorService 'applicationTaskExecutor' +2025-12-15 10:26:14,000 [Thread-21] INFO com.alibaba.druid.pool.DruidDataSource:2029 - {dataSource-1} closing ... +2025-12-15 10:26:14,003 [Thread-21] INFO com.alibaba.druid.pool.DruidDataSource:2101 - {dataSource-1} closed +2025-12-15 10:26:20,045 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:244 - Multiple Spring Data modules found, entering strict repository configuration mode! +2025-12-15 10:26:20,050 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:126 - Bootstrapping Spring Data repositories in DEFAULT mode. +2025-12-15 10:26:20,090 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:182 - Finished Spring Data repository scanning in 28ms. Found 0 repository interfaces. +2025-12-15 10:26:20,437 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$6775700f] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-12-15 10:26:20,533 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'redisConfig' of type [com.show.common.configure.RedisConfig$$EnhancerBySpringCGLIB$$1ac7f20a] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-12-15 10:26:20,860 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:90 - Tomcat initialized with port(s): 23510 (http) +2025-12-15 10:26:20,872 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Initializing ProtocolHandler ["http-nio-23510"] +2025-12-15 10:26:20,879 [main] INFO org.apache.catalina.core.StandardService:173 - Starting service [Tomcat] +2025-12-15 10:26:20,879 [main] INFO org.apache.catalina.core.StandardEngine:173 - Starting Servlet engine: [Apache Tomcat/9.0.22] +2025-12-15 10:26:20,884 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - Loaded APR based Apache Tomcat Native library [1.2.37] using APR version [1.7.4]. +2025-12-15 10:26:20,884 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true]. +2025-12-15 10:26:20,884 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true] +2025-12-15 10:26:20,887 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - OpenSSL successfully initialized [OpenSSL 1.1.1u 30 May 2023] +2025-12-15 10:26:21,037 [main] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring embedded WebApplicationContext +2025-12-15 10:26:21,037 [main] INFO org.springframework.web.context.ContextLoader:284 - Root WebApplicationContext: initialization completed in 1898 ms +2025-12-15 10:26:21,140 [main] INFO com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure:56 - Init DruidDataSource +2025-12-15 10:26:22,307 [main] INFO com.alibaba.druid.pool.DruidDataSource:994 - {dataSource-1} inited +2025-12-15 10:26:25,514 [main] INFO springfox.documentation.spring.web.PropertySourcedRequestMappingHandlerMapping:69 - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2025-12-15 10:26:25,684 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:171 - Initializing ExecutorService 'applicationTaskExecutor' +2025-12-15 10:26:26,447 [main] INFO org.quartz.impl.StdSchedulerFactory:1208 - Using default implementation for ThreadExecutor +2025-12-15 10:26:26,457 [main] INFO org.quartz.core.SchedulerSignalerImpl:61 - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl +2025-12-15 10:26:26,457 [main] INFO org.quartz.core.QuartzScheduler:229 - Quartz Scheduler v.2.3.1 created. +2025-12-15 10:26:26,458 [main] INFO org.quartz.simpl.RAMJobStore:155 - RAMJobStore initialized. +2025-12-15 10:26:26,459 [main] INFO org.quartz.core.QuartzScheduler:294 - Scheduler meta-data: Quartz Scheduler (v2.3.1) 'quartzScheduler' with instanceId 'NON_CLUSTERED' + Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally. + NOT STARTED. + Currently in standby mode. + Number of jobs executed: 0 + Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads. + Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. + +2025-12-15 10:26:26,460 [main] INFO org.quartz.impl.StdSchedulerFactory:1362 - Quartz scheduler 'quartzScheduler' initialized from an externally provided properties instance. +2025-12-15 10:26:26,460 [main] INFO org.quartz.impl.StdSchedulerFactory:1366 - Quartz scheduler version: 2.3.1 +2025-12-15 10:26:26,460 [main] INFO org.quartz.core.QuartzScheduler:2293 - JobFactory set to: org.springframework.scheduling.quartz.SpringBeanJobFactory@5ec3689b +2025-12-15 10:26:26,475 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler:171 - Initializing ExecutorService 'taskScheduler' +2025-12-15 10:26:26,538 [main] INFO springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper:160 - Context refreshed +2025-12-15 10:26:26,558 [main] INFO springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper:163 - Found 1 custom documentation plugin(s) +2025-12-15 10:26:26,594 [main] INFO springfox.documentation.spring.web.scanners.ApiListingReferenceScanner:41 - Scanning for api listing references +2025-12-15 10:26:26,805 [main] INFO org.springframework.scheduling.quartz.SchedulerFactoryBean:726 - Starting Quartz Scheduler now +2025-12-15 10:26:26,806 [main] INFO org.quartz.core.QuartzScheduler:547 - Scheduler quartzScheduler_$_NON_CLUSTERED started. +2025-12-15 10:26:26,814 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Starting ProtocolHandler ["http-nio-23510"] +2025-12-15 10:26:26,837 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:202 - Tomcat started on port(s): 23510 (http) with context path '' +2025-12-15 10:28:04,263 [http-nio-23510-exec-1] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-12-15 10:28:04,263 [http-nio-23510-exec-1] INFO org.springframework.web.servlet.DispatcherServlet:524 - Initializing Servlet 'dispatcherServlet' +2025-12-15 10:28:04,269 [http-nio-23510-exec-1] INFO org.springframework.web.servlet.DispatcherServlet:546 - Completed initialization in 6 ms +2025-12-15 14:20:28,824 [Thread-19] INFO org.quartz.core.QuartzScheduler:585 - Scheduler quartzScheduler_$_NON_CLUSTERED paused. +2025-12-15 14:20:28,840 [Thread-19] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler:208 - Shutting down ExecutorService 'taskScheduler' +2025-12-15 14:20:28,845 [Thread-19] INFO org.springframework.scheduling.quartz.SchedulerFactoryBean:844 - Shutting down Quartz Scheduler +2025-12-15 14:20:28,845 [Thread-19] INFO org.quartz.core.QuartzScheduler:666 - Scheduler quartzScheduler_$_NON_CLUSTERED shutting down. +2025-12-15 14:20:28,845 [Thread-19] INFO org.quartz.core.QuartzScheduler:585 - Scheduler quartzScheduler_$_NON_CLUSTERED paused. +2025-12-15 14:20:28,847 [Thread-19] INFO org.quartz.core.QuartzScheduler:740 - Scheduler quartzScheduler_$_NON_CLUSTERED shutdown complete. +2025-12-15 14:20:28,895 [Thread-19] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:208 - Shutting down ExecutorService 'applicationTaskExecutor' +2025-12-15 14:20:28,982 [Thread-19] INFO com.alibaba.druid.pool.DruidDataSource:2029 - {dataSource-1} closing ... +2025-12-15 14:20:28,990 [Thread-19] INFO com.alibaba.druid.pool.DruidDataSource:2101 - {dataSource-1} closed +2025-12-15 14:20:37,155 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:244 - Multiple Spring Data modules found, entering strict repository configuration mode! +2025-12-15 14:20:37,162 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:126 - Bootstrapping Spring Data repositories in DEFAULT mode. +2025-12-15 14:20:37,220 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:182 - Finished Spring Data repository scanning in 37ms. Found 0 repository interfaces. +2025-12-15 14:20:37,681 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$43e98983] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-12-15 14:20:37,813 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'redisConfig' of type [com.show.common.configure.RedisConfig$$EnhancerBySpringCGLIB$$f73c0b7e] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-12-15 14:20:38,199 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:90 - Tomcat initialized with port(s): 23510 (http) +2025-12-15 14:20:38,215 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Initializing ProtocolHandler ["http-nio-23510"] +2025-12-15 14:20:38,223 [main] INFO org.apache.catalina.core.StandardService:173 - Starting service [Tomcat] +2025-12-15 14:20:38,223 [main] INFO org.apache.catalina.core.StandardEngine:173 - Starting Servlet engine: [Apache Tomcat/9.0.22] +2025-12-15 14:20:38,230 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - Loaded APR based Apache Tomcat Native library [1.2.37] using APR version [1.7.4]. +2025-12-15 14:20:38,230 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true]. +2025-12-15 14:20:38,230 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true] +2025-12-15 14:20:38,234 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - OpenSSL successfully initialized [OpenSSL 1.1.1u 30 May 2023] +2025-12-15 14:20:38,384 [main] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring embedded WebApplicationContext +2025-12-15 14:20:38,384 [main] INFO org.springframework.web.context.ContextLoader:284 - Root WebApplicationContext: initialization completed in 2482 ms +2025-12-15 14:20:38,513 [main] INFO com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure:56 - Init DruidDataSource +2025-12-15 14:20:39,647 [main] INFO com.alibaba.druid.pool.DruidDataSource:994 - {dataSource-1} inited +2025-12-15 14:20:42,926 [main] INFO springfox.documentation.spring.web.PropertySourcedRequestMappingHandlerMapping:69 - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2025-12-15 14:20:43,109 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:171 - Initializing ExecutorService 'applicationTaskExecutor' +2025-12-15 14:20:43,931 [main] INFO org.quartz.impl.StdSchedulerFactory:1208 - Using default implementation for ThreadExecutor +2025-12-15 14:20:43,944 [main] INFO org.quartz.core.SchedulerSignalerImpl:61 - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl +2025-12-15 14:20:43,944 [main] INFO org.quartz.core.QuartzScheduler:229 - Quartz Scheduler v.2.3.1 created. +2025-12-15 14:20:43,945 [main] INFO org.quartz.simpl.RAMJobStore:155 - RAMJobStore initialized. +2025-12-15 14:20:43,945 [main] INFO org.quartz.core.QuartzScheduler:294 - Scheduler meta-data: Quartz Scheduler (v2.3.1) 'quartzScheduler' with instanceId 'NON_CLUSTERED' + Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally. + NOT STARTED. + Currently in standby mode. + Number of jobs executed: 0 + Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads. + Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. + +2025-12-15 14:20:43,946 [main] INFO org.quartz.impl.StdSchedulerFactory:1362 - Quartz scheduler 'quartzScheduler' initialized from an externally provided properties instance. +2025-12-15 14:20:43,946 [main] INFO org.quartz.impl.StdSchedulerFactory:1366 - Quartz scheduler version: 2.3.1 +2025-12-15 14:20:43,946 [main] INFO org.quartz.core.QuartzScheduler:2293 - JobFactory set to: org.springframework.scheduling.quartz.SpringBeanJobFactory@1b53e6fc +2025-12-15 14:20:43,961 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler:171 - Initializing ExecutorService 'taskScheduler' +2025-12-15 14:20:44,027 [main] INFO springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper:160 - Context refreshed +2025-12-15 14:20:44,045 [main] INFO springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper:163 - Found 1 custom documentation plugin(s) +2025-12-15 14:20:44,077 [main] INFO springfox.documentation.spring.web.scanners.ApiListingReferenceScanner:41 - Scanning for api listing references +2025-12-15 14:20:44,296 [main] INFO org.springframework.scheduling.quartz.SchedulerFactoryBean:726 - Starting Quartz Scheduler now +2025-12-15 14:20:44,296 [main] INFO org.quartz.core.QuartzScheduler:547 - Scheduler quartzScheduler_$_NON_CLUSTERED started. +2025-12-15 14:20:44,305 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Starting ProtocolHandler ["http-nio-23510"] +2025-12-15 14:20:44,333 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:202 - Tomcat started on port(s): 23510 (http) with context path '' +2025-12-15 14:25:25,108 [http-nio-23510-exec-1] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-12-15 14:25:25,108 [http-nio-23510-exec-1] INFO org.springframework.web.servlet.DispatcherServlet:524 - Initializing Servlet 'dispatcherServlet' +2025-12-15 14:25:25,115 [http-nio-23510-exec-1] INFO org.springframework.web.servlet.DispatcherServlet:546 - Completed initialization in 7 ms +2025-12-15 15:25:02,670 [Thread-22] INFO org.quartz.core.QuartzScheduler:585 - Scheduler quartzScheduler_$_NON_CLUSTERED paused. +2025-12-15 15:25:02,674 [Thread-22] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler:208 - Shutting down ExecutorService 'taskScheduler' +2025-12-15 15:25:02,678 [Thread-22] INFO org.springframework.scheduling.quartz.SchedulerFactoryBean:844 - Shutting down Quartz Scheduler +2025-12-15 15:25:02,678 [Thread-22] INFO org.quartz.core.QuartzScheduler:666 - Scheduler quartzScheduler_$_NON_CLUSTERED shutting down. +2025-12-15 15:25:02,678 [Thread-22] INFO org.quartz.core.QuartzScheduler:585 - Scheduler quartzScheduler_$_NON_CLUSTERED paused. +2025-12-15 15:25:02,679 [Thread-22] INFO org.quartz.core.QuartzScheduler:740 - Scheduler quartzScheduler_$_NON_CLUSTERED shutdown complete. +2025-12-15 15:25:02,701 [Thread-22] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:208 - Shutting down ExecutorService 'applicationTaskExecutor' +2025-12-15 15:25:02,863 [Thread-22] INFO com.alibaba.druid.pool.DruidDataSource:2029 - {dataSource-1} closing ... +2025-12-15 15:25:02,899 [Thread-22] INFO com.alibaba.druid.pool.DruidDataSource:2101 - {dataSource-1} closed +2025-12-15 15:25:10,181 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:244 - Multiple Spring Data modules found, entering strict repository configuration mode! +2025-12-15 15:25:10,186 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:126 - Bootstrapping Spring Data repositories in DEFAULT mode. +2025-12-15 15:25:10,227 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:182 - Finished Spring Data repository scanning in 30ms. Found 0 repository interfaces. +2025-12-15 15:25:10,621 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$890f06eb] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-12-15 15:25:10,723 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'redisConfig' of type [com.show.common.configure.RedisConfig$$EnhancerBySpringCGLIB$$3c6188e6] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-12-15 15:25:11,136 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:90 - Tomcat initialized with port(s): 23510 (http) +2025-12-15 15:25:11,151 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Initializing ProtocolHandler ["http-nio-23510"] +2025-12-15 15:25:11,160 [main] INFO org.apache.catalina.core.StandardService:173 - Starting service [Tomcat] +2025-12-15 15:25:11,161 [main] INFO org.apache.catalina.core.StandardEngine:173 - Starting Servlet engine: [Apache Tomcat/9.0.22] +2025-12-15 15:25:11,168 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - Loaded APR based Apache Tomcat Native library [1.2.37] using APR version [1.7.4]. +2025-12-15 15:25:11,168 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true]. +2025-12-15 15:25:11,168 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true] +2025-12-15 15:25:11,172 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - OpenSSL successfully initialized [OpenSSL 1.1.1u 30 May 2023] +2025-12-15 15:25:11,347 [main] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring embedded WebApplicationContext +2025-12-15 15:25:11,347 [main] INFO org.springframework.web.context.ContextLoader:284 - Root WebApplicationContext: initialization completed in 2200 ms +2025-12-15 15:25:11,481 [main] INFO com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure:56 - Init DruidDataSource +2025-12-15 15:25:12,659 [main] INFO com.alibaba.druid.pool.DruidDataSource:994 - {dataSource-1} inited +2025-12-15 15:25:16,027 [main] INFO springfox.documentation.spring.web.PropertySourcedRequestMappingHandlerMapping:69 - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2025-12-15 15:25:16,233 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:171 - Initializing ExecutorService 'applicationTaskExecutor' +2025-12-15 15:25:16,980 [main] INFO org.quartz.impl.StdSchedulerFactory:1208 - Using default implementation for ThreadExecutor +2025-12-15 15:25:16,991 [main] INFO org.quartz.core.SchedulerSignalerImpl:61 - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl +2025-12-15 15:25:16,991 [main] INFO org.quartz.core.QuartzScheduler:229 - Quartz Scheduler v.2.3.1 created. +2025-12-15 15:25:16,992 [main] INFO org.quartz.simpl.RAMJobStore:155 - RAMJobStore initialized. +2025-12-15 15:25:16,993 [main] INFO org.quartz.core.QuartzScheduler:294 - Scheduler meta-data: Quartz Scheduler (v2.3.1) 'quartzScheduler' with instanceId 'NON_CLUSTERED' + Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally. + NOT STARTED. + Currently in standby mode. + Number of jobs executed: 0 + Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads. + Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. + +2025-12-15 15:25:16,993 [main] INFO org.quartz.impl.StdSchedulerFactory:1362 - Quartz scheduler 'quartzScheduler' initialized from an externally provided properties instance. +2025-12-15 15:25:16,993 [main] INFO org.quartz.impl.StdSchedulerFactory:1366 - Quartz scheduler version: 2.3.1 +2025-12-15 15:25:16,993 [main] INFO org.quartz.core.QuartzScheduler:2293 - JobFactory set to: org.springframework.scheduling.quartz.SpringBeanJobFactory@8ad6d29 +2025-12-15 15:25:17,009 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler:171 - Initializing ExecutorService 'taskScheduler' +2025-12-15 15:25:17,077 [main] INFO springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper:160 - Context refreshed +2025-12-15 15:25:17,099 [main] INFO springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper:163 - Found 1 custom documentation plugin(s) +2025-12-15 15:25:17,133 [main] INFO springfox.documentation.spring.web.scanners.ApiListingReferenceScanner:41 - Scanning for api listing references +2025-12-15 15:25:17,346 [main] INFO org.springframework.scheduling.quartz.SchedulerFactoryBean:726 - Starting Quartz Scheduler now +2025-12-15 15:25:17,346 [main] INFO org.quartz.core.QuartzScheduler:547 - Scheduler quartzScheduler_$_NON_CLUSTERED started. +2025-12-15 15:25:17,360 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Starting ProtocolHandler ["http-nio-23510"] +2025-12-15 15:25:17,385 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:202 - Tomcat started on port(s): 23510 (http) with context path '' +2025-12-15 15:28:18,562 [http-nio-23510-exec-3] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-12-15 15:28:18,562 [http-nio-23510-exec-3] INFO org.springframework.web.servlet.DispatcherServlet:524 - Initializing Servlet 'dispatcherServlet' +2025-12-15 15:28:18,569 [http-nio-23510-exec-3] INFO org.springframework.web.servlet.DispatcherServlet:546 - Completed initialization in 7 ms +2025-12-15 15:34:56,893 [Thread-20] INFO org.quartz.core.QuartzScheduler:585 - Scheduler quartzScheduler_$_NON_CLUSTERED paused. +2025-12-15 15:34:56,894 [Thread-20] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler:208 - Shutting down ExecutorService 'taskScheduler' +2025-12-15 15:34:56,894 [Thread-20] INFO org.springframework.scheduling.quartz.SchedulerFactoryBean:844 - Shutting down Quartz Scheduler +2025-12-15 15:34:56,894 [Thread-20] INFO org.quartz.core.QuartzScheduler:666 - Scheduler quartzScheduler_$_NON_CLUSTERED shutting down. +2025-12-15 15:34:56,894 [Thread-20] INFO org.quartz.core.QuartzScheduler:585 - Scheduler quartzScheduler_$_NON_CLUSTERED paused. +2025-12-15 15:34:56,895 [Thread-20] INFO org.quartz.core.QuartzScheduler:740 - Scheduler quartzScheduler_$_NON_CLUSTERED shutdown complete. +2025-12-15 15:34:56,900 [Thread-20] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:208 - Shutting down ExecutorService 'applicationTaskExecutor' +2025-12-15 15:34:56,916 [Thread-20] INFO com.alibaba.druid.pool.DruidDataSource:2029 - {dataSource-1} closing ... +2025-12-15 15:34:56,919 [Thread-20] INFO com.alibaba.druid.pool.DruidDataSource:2101 - {dataSource-1} closed +2025-12-15 15:35:01,485 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:244 - Multiple Spring Data modules found, entering strict repository configuration mode! +2025-12-15 15:35:01,490 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:126 - Bootstrapping Spring Data repositories in DEFAULT mode. +2025-12-15 15:35:01,539 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:182 - Finished Spring Data repository scanning in 33ms. Found 0 repository interfaces. +2025-12-15 15:35:01,914 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$b3429b5a] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-12-15 15:35:02,013 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'redisConfig' of type [com.show.common.configure.RedisConfig$$EnhancerBySpringCGLIB$$66951d55] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-12-15 15:35:02,349 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:90 - Tomcat initialized with port(s): 23510 (http) +2025-12-15 15:35:02,361 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Initializing ProtocolHandler ["http-nio-23510"] +2025-12-15 15:35:02,368 [main] INFO org.apache.catalina.core.StandardService:173 - Starting service [Tomcat] +2025-12-15 15:35:02,368 [main] INFO org.apache.catalina.core.StandardEngine:173 - Starting Servlet engine: [Apache Tomcat/9.0.22] +2025-12-15 15:35:02,374 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - Loaded APR based Apache Tomcat Native library [1.2.37] using APR version [1.7.4]. +2025-12-15 15:35:02,374 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true]. +2025-12-15 15:35:02,374 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true] +2025-12-15 15:35:02,377 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - OpenSSL successfully initialized [OpenSSL 1.1.1u 30 May 2023] +2025-12-15 15:35:02,523 [main] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring embedded WebApplicationContext +2025-12-15 15:35:02,523 [main] INFO org.springframework.web.context.ContextLoader:284 - Root WebApplicationContext: initialization completed in 1964 ms +2025-12-15 15:35:02,625 [main] INFO com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure:56 - Init DruidDataSource +2025-12-15 15:35:03,829 [main] INFO com.alibaba.druid.pool.DruidDataSource:994 - {dataSource-1} inited +2025-12-15 15:35:07,101 [main] INFO springfox.documentation.spring.web.PropertySourcedRequestMappingHandlerMapping:69 - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2025-12-15 15:35:07,329 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:171 - Initializing ExecutorService 'applicationTaskExecutor' +2025-12-15 15:35:08,163 [main] INFO org.quartz.impl.StdSchedulerFactory:1208 - Using default implementation for ThreadExecutor +2025-12-15 15:35:08,177 [main] INFO org.quartz.core.SchedulerSignalerImpl:61 - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl +2025-12-15 15:35:08,178 [main] INFO org.quartz.core.QuartzScheduler:229 - Quartz Scheduler v.2.3.1 created. +2025-12-15 15:35:08,179 [main] INFO org.quartz.simpl.RAMJobStore:155 - RAMJobStore initialized. +2025-12-15 15:35:08,180 [main] INFO org.quartz.core.QuartzScheduler:294 - Scheduler meta-data: Quartz Scheduler (v2.3.1) 'quartzScheduler' with instanceId 'NON_CLUSTERED' + Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally. + NOT STARTED. + Currently in standby mode. + Number of jobs executed: 0 + Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads. + Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. + +2025-12-15 15:35:08,180 [main] INFO org.quartz.impl.StdSchedulerFactory:1362 - Quartz scheduler 'quartzScheduler' initialized from an externally provided properties instance. +2025-12-15 15:35:08,180 [main] INFO org.quartz.impl.StdSchedulerFactory:1366 - Quartz scheduler version: 2.3.1 +2025-12-15 15:35:08,180 [main] INFO org.quartz.core.QuartzScheduler:2293 - JobFactory set to: org.springframework.scheduling.quartz.SpringBeanJobFactory@38394e76 +2025-12-15 15:35:08,200 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler:171 - Initializing ExecutorService 'taskScheduler' +2025-12-15 15:35:08,291 [main] INFO springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper:160 - Context refreshed +2025-12-15 15:35:08,319 [main] INFO springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper:163 - Found 1 custom documentation plugin(s) +2025-12-15 15:35:08,363 [main] INFO springfox.documentation.spring.web.scanners.ApiListingReferenceScanner:41 - Scanning for api listing references +2025-12-15 15:35:08,660 [main] INFO org.springframework.scheduling.quartz.SchedulerFactoryBean:726 - Starting Quartz Scheduler now +2025-12-15 15:35:08,661 [main] INFO org.quartz.core.QuartzScheduler:547 - Scheduler quartzScheduler_$_NON_CLUSTERED started. +2025-12-15 15:35:08,671 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Starting ProtocolHandler ["http-nio-23510"] +2025-12-15 15:35:08,716 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:202 - Tomcat started on port(s): 23510 (http) with context path '' +2025-12-15 15:47:08,398 [http-nio-23510-exec-2] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-12-15 15:47:08,398 [http-nio-23510-exec-2] INFO org.springframework.web.servlet.DispatcherServlet:524 - Initializing Servlet 'dispatcherServlet' +2025-12-15 15:47:08,404 [http-nio-23510-exec-2] INFO org.springframework.web.servlet.DispatcherServlet:546 - Completed initialization in 6 ms +2025-12-15 15:47:48,043 [Thread-21] INFO org.quartz.core.QuartzScheduler:585 - Scheduler quartzScheduler_$_NON_CLUSTERED paused. +2025-12-15 15:47:48,043 [Thread-21] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler:208 - Shutting down ExecutorService 'taskScheduler' +2025-12-15 15:47:48,043 [Thread-21] INFO org.springframework.scheduling.quartz.SchedulerFactoryBean:844 - Shutting down Quartz Scheduler +2025-12-15 15:47:48,043 [Thread-21] INFO org.quartz.core.QuartzScheduler:666 - Scheduler quartzScheduler_$_NON_CLUSTERED shutting down. +2025-12-15 15:47:48,043 [Thread-21] INFO org.quartz.core.QuartzScheduler:585 - Scheduler quartzScheduler_$_NON_CLUSTERED paused. +2025-12-15 15:47:48,044 [Thread-21] INFO org.quartz.core.QuartzScheduler:740 - Scheduler quartzScheduler_$_NON_CLUSTERED shutdown complete. +2025-12-15 15:47:48,049 [Thread-21] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:208 - Shutting down ExecutorService 'applicationTaskExecutor' +2025-12-15 15:47:48,066 [Thread-21] INFO com.alibaba.druid.pool.DruidDataSource:2029 - {dataSource-1} closing ... +2025-12-15 15:47:48,067 [Thread-21] INFO com.alibaba.druid.pool.DruidDataSource:2101 - {dataSource-1} closed diff --git a/logs/springboot-logback/error/2024-08-20-0.log3632128746896100.tmp b/logs/springboot-logback/error/2024-08-20-0.log3632128746896100.tmp index 8e61424..c35624a 100644 --- a/logs/springboot-logback/error/2024-08-20-0.log3632128746896100.tmp +++ b/logs/springboot-logback/error/2024-08-20-0.log3632128746896100.tmp @@ -28,7 +28,7 @@ org.springframework.jdbc.BadSqlGrammarException: at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212) at com.sun.proxy.$Proxy124.getMemberList(Unknown Source) - at com.subsidy.job.ProjectSalaryNotificationJob.execute(ProjectSalaryNotificationJob.java:71) + at com.show.job.ProjectSalaryNotificationJob.execute(ProjectSalaryNotificationJob.java:71) at org.quartz.core.JobRunShell.run(JobRunShell.java:202) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) Caused by: java.sql.SQLSyntaxErrorException: Unknown column 't.project_id' in 'where clause' @@ -98,7 +98,7 @@ Caused by: org.springframework.jdbc.BadSqlGrammarException: at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212) at com.sun.proxy.$Proxy124.getMemberList(Unknown Source) - at com.subsidy.job.ProjectSalaryNotificationJob.execute(ProjectSalaryNotificationJob.java:71) + at com.show.job.ProjectSalaryNotificationJob.execute(ProjectSalaryNotificationJob.java:71) at org.quartz.core.JobRunShell.run(JobRunShell.java:202) ... 1 common frames omitted Caused by: java.sql.SQLSyntaxErrorException: Unknown column 't.project_id' in 'where clause' @@ -137,7 +137,7 @@ Caused by: java.sql.SQLSyntaxErrorException: Unknown column 't.project_id' in 'w ... 20 common frames omitted 2024-08-20 14:40:05,530 [schedulerFactoryBean_Worker-1] ERROR org.quartz.core.JobRunShell:211 - Job CourseNotificationJob.QWE2024-08-工资发放-2024-08-20 14:40:00 threw an unhandled Exception: java.lang.NullPointerException: null - at com.subsidy.job.ProjectSalaryNotificationJob.execute(ProjectSalaryNotificationJob.java:88) + at com.show.job.ProjectSalaryNotificationJob.execute(ProjectSalaryNotificationJob.java:88) at org.quartz.core.JobRunShell.run(JobRunShell.java:202) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) 2024-08-20 14:40:05,531 [schedulerFactoryBean_Worker-1] ERROR org.quartz.core.ErrorLogger:2407 - Job (CourseNotificationJob.QWE2024-08-工资发放-2024-08-20 14:40:00 threw an exception. @@ -145,6 +145,6 @@ org.quartz.SchedulerException: Job threw an unhandled exception. at org.quartz.core.JobRunShell.run(JobRunShell.java:213) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) Caused by: java.lang.NullPointerException: null - at com.subsidy.job.ProjectSalaryNotificationJob.execute(ProjectSalaryNotificationJob.java:88) + at com.show.job.ProjectSalaryNotificationJob.execute(ProjectSalaryNotificationJob.java:88) at org.quartz.core.JobRunShell.run(JobRunShell.java:202) ... 1 common frames omitted diff --git a/logs/springboot-logback/info/2025-10-28-0.log.gz b/logs/springboot-logback/info/2025-10-28-0.log.gz deleted file mode 100644 index 3bc0198..0000000 Binary files a/logs/springboot-logback/info/2025-10-28-0.log.gz and /dev/null differ diff --git a/logs/springboot-logback/info/2025-10-29-0.log.gz b/logs/springboot-logback/info/2025-10-29-0.log.gz deleted file mode 100644 index bc6ccae..0000000 Binary files a/logs/springboot-logback/info/2025-10-29-0.log.gz and /dev/null differ diff --git a/logs/springboot-logback/info/2025-10-30-0.log.gz b/logs/springboot-logback/info/2025-10-30-0.log.gz deleted file mode 100644 index 6e2916b..0000000 Binary files a/logs/springboot-logback/info/2025-10-30-0.log.gz and /dev/null differ diff --git a/logs/springboot-logback/info/2025-10-31-0.log.gz b/logs/springboot-logback/info/2025-10-31-0.log.gz deleted file mode 100644 index b466a0a..0000000 Binary files a/logs/springboot-logback/info/2025-10-31-0.log.gz and /dev/null differ diff --git a/logs/springboot-logback/info/2025-11-03-0.log.gz b/logs/springboot-logback/info/2025-11-03-0.log.gz deleted file mode 100644 index 0378164..0000000 Binary files a/logs/springboot-logback/info/2025-11-03-0.log.gz and /dev/null differ diff --git a/logs/springboot-logback/info/2025-11-04-0.log.gz b/logs/springboot-logback/info/2025-11-04-0.log.gz deleted file mode 100644 index bb316c6..0000000 Binary files a/logs/springboot-logback/info/2025-11-04-0.log.gz and /dev/null differ diff --git a/logs/springboot-logback/info/2025-11-05-0.log.gz b/logs/springboot-logback/info/2025-11-05-0.log.gz deleted file mode 100644 index 6a12bff..0000000 Binary files a/logs/springboot-logback/info/2025-11-05-0.log.gz and /dev/null differ diff --git a/logs/springboot-logback/info/2025-11-06-0.log.gz b/logs/springboot-logback/info/2025-11-06-0.log.gz deleted file mode 100644 index 453f43f..0000000 Binary files a/logs/springboot-logback/info/2025-11-06-0.log.gz and /dev/null differ diff --git a/pom.xml b/pom.xml index ae7935c..88d5bbb 100644 --- a/pom.xml +++ b/pom.xml @@ -275,7 +275,7 @@ - ecnutracks + show org.springframework.boot diff --git a/src/main/java/com/show/MeishuApplication.java b/src/main/java/com/show/MeishuApplication.java new file mode 100644 index 0000000..e182008 --- /dev/null +++ b/src/main/java/com/show/MeishuApplication.java @@ -0,0 +1,38 @@ +package com.show; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@SpringBootApplication +@MapperScan(basePackages = {"com.show.mapper"}) +@EnableScheduling +@EnableAsync +@EnableTransactionManagement +public class MeishuApplication { + + public static void main(String[] args) { + SpringApplication.run(MeishuApplication.class, args); + } + + //@Bean + //public ServletRegistrationBean druidStatViewServlet() { + // //先配置管理后台的servLet,访问的入口为/druid/ + // ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean( + // new StatViewServlet(), "/druid/*"); + // // IP白名单 (没有配置或者为空,则允许所有访问) + // servletRegistrationBean.addInitParameter("allow", "127.0.0.1"); + // // IP黑名单 (存在共同时,deny优先于allow) + // servletRegistrationBean.addInitParameter("deny", ""); + // servletRegistrationBean.addInitParameter("loginUsername", "admin"); + // servletRegistrationBean.addInitParameter("loginPassword", "yhkl1234"); + // servletRegistrationBean.addInitParameter("resetEnable", "false"); + // return servletRegistrationBean; + //} + +} diff --git a/src/main/java/com/show/common/ResponseData.java b/src/main/java/com/show/common/ResponseData.java new file mode 100644 index 0000000..6839e40 --- /dev/null +++ b/src/main/java/com/show/common/ResponseData.java @@ -0,0 +1,54 @@ +package com.show.common; + +import com.show.common.configure.RemoteProperties; +import lombok.Data; +import org.springframework.boot.context.properties.EnableConfigurationProperties; + +/** + * 返回数据 + * + * @author DengMin + * @date 2019/08/27 13:57 + **/ +@Data +@EnableConfigurationProperties(RemoteProperties.class) +public class ResponseData { + + public static ResponseVO generateCreatedResponse(int code) { + return (ResponseVO) ResponseVO.builder() + .code(code) + .message(RemoteProperties.getMessage(code)) + .build(); + } + + public static ResponseVO generateCreatedResponse(int code, String message) { + return (ResponseVO) ResponseVO.builder() + .code(code) + .message(message) + .build(); + } + + public static ResponseVO generateCreatedResponse(int code, T data) { + return (ResponseVO) ResponseVO.builder() + .code(code) + .message(RemoteProperties.getMessage(code)) + .data(data) + .build(); + } + + public static ResponseVO generateCreatedResponse(int code, String message, T data) { + return (ResponseVO) ResponseVO.builder() + .code(code) + .message(message) + .data(data) + .build(); + } + + public static ResponseVO generateCreatedResponse(int code, String message, String path) { + return (ResponseVO) ResponseVO.builder() + .code(code) + .message(message) + .path(path) + .build(); + } +} \ No newline at end of file diff --git a/src/main/java/com/show/common/ResponseVO.java b/src/main/java/com/show/common/ResponseVO.java new file mode 100644 index 0000000..edca9ad --- /dev/null +++ b/src/main/java/com/show/common/ResponseVO.java @@ -0,0 +1,21 @@ +package com.show.common; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ResponseVO { + + private Integer code; + + private String message; + + private T data; + + private String path; +} \ No newline at end of file diff --git a/src/main/java/com/show/common/configure/AliyunSmsProperties.java b/src/main/java/com/show/common/configure/AliyunSmsProperties.java new file mode 100644 index 0000000..0f05f79 --- /dev/null +++ b/src/main/java/com/show/common/configure/AliyunSmsProperties.java @@ -0,0 +1,28 @@ +package com.show.common.configure; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Data +@Component +@ConfigurationProperties(prefix = "sms") +public class AliyunSmsProperties { + + private String product; + + private String domain; + + private String accessKeyId; + + private String accessKeySecret; + + private String cpcode; + + private String excode; + + private String key; + + private String rcsapi; + +} diff --git a/src/main/java/com/show/common/configure/MyTomcat.java b/src/main/java/com/show/common/configure/MyTomcat.java new file mode 100644 index 0000000..08de92a --- /dev/null +++ b/src/main/java/com/show/common/configure/MyTomcat.java @@ -0,0 +1,89 @@ +package com.show.common.configure; + +import org.apache.catalina.connector.Connector; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer; +import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; +import org.springframework.boot.web.servlet.MultipartConfigFactory; +import org.springframework.boot.web.servlet.server.ServletWebServerFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import javax.servlet.MultipartConfigElement; + +@Configuration +public class MyTomcat { + + + @Value("${spring.server.port}") + private String port; + @Value("${spring.server.acceptorThreadCount}") + private String acceptorThreadCount; + @Value("${spring.server.minSpareThreads}") + private String minSpareThreads; + @Value("${spring.server.maxSpareThreads}") + private String maxSpareThreads; + @Value("${spring.server.maxThreads}") + private String maxThreads; + @Value("${spring.server.maxConnections}") + private String maxConnections; + @Value("${spring.server.protocol}") + private String protocol; + @Value("${spring.server.redirectPort}") + private String redirectPort; + @Value("${spring.server.compression}") + private String compression; + @Value("${spring.server.connectionTimeout}") + private String connectionTimeout; + + @Value("${spring.server.MaxFileSize}") + private String MaxFileSize; + @Value("${spring.server.MaxRequestSize}") + private String MaxRequestSize; + + @Bean + public ServletWebServerFactory servletContainer() { + TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory(); + tomcat.addConnectorCustomizers(new GwsTomcatConnectionCustomizer()); + return tomcat; + } + + @Bean + public MultipartConfigElement multipartConfigElement() { + MultipartConfigFactory factory = new MultipartConfigFactory(); + // 单个数据大小 + factory.setMaxFileSize(MaxFileSize); // KB,MB + /// 总上传数据大小 + factory.setMaxRequestSize(MaxRequestSize); + return factory.createMultipartConfig(); + } + + /** + * + * 默认http连接 + * + * @version + * @author liuyi 2016年7月20日 下午7:59:41 + * + */ + public class GwsTomcatConnectionCustomizer implements TomcatConnectorCustomizer { + + public GwsTomcatConnectionCustomizer() { + } + + @Override + public void customize(Connector connector) { + connector.setPort(Integer.valueOf(port)); + connector.setAttribute("connectionTimeout", connectionTimeout); + connector.setAttribute("acceptorThreadCount", acceptorThreadCount); + connector.setAttribute("minSpareThreads", minSpareThreads); + connector.setAttribute("maxSpareThreads", maxSpareThreads); + connector.setAttribute("maxThreads", maxThreads); + connector.setAttribute("maxConnections", maxConnections); + connector.setAttribute("protocol", protocol); + connector.setAttribute("redirectPort", "redirectPort"); + connector.setAttribute("compression", "compression"); + } + } + +} diff --git a/src/main/java/com/show/common/configure/MybatisPlusConfig.java b/src/main/java/com/show/common/configure/MybatisPlusConfig.java new file mode 100644 index 0000000..5652454 --- /dev/null +++ b/src/main/java/com/show/common/configure/MybatisPlusConfig.java @@ -0,0 +1,54 @@ +package com.show.common.configure; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.core.config.GlobalConfig; +import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; +import com.show.common.handler.MetaHandler; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author: tuyp + * @create: 2020-08-12 12:01 + */ +@Configuration +@ConditionalOnClass(value = {PaginationInterceptor.class}) +public class MybatisPlusConfig { + + /** + * 分页 + * @return + */ + @Bean + public PaginationInterceptor paginationInterceptor(){ + PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); + paginationInterceptor.setDialectType(DbType.MYSQL.getDb()); + return paginationInterceptor; + } +// +// /** +// * 打印 sql +// */ +// @Bean +// public PerformanceInterceptor performanceInterceptor() { +// PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor(); +// //格式化sql语句 +// Properties properties = new Properties(); +// properties.setProperty("format", "false"); +// performanceInterceptor.setProperties(properties); +// return performanceInterceptor; +// } + + /** + * 自动填充功能 + * @return + */ + @Bean + public GlobalConfig globalConfig() { + GlobalConfig globalConfig = new GlobalConfig(); + globalConfig.setMetaObjectHandler(new MetaHandler()); + return globalConfig; + } + +} diff --git a/src/main/java/com/show/common/configure/PolyvConfig.java b/src/main/java/com/show/common/configure/PolyvConfig.java new file mode 100644 index 0000000..97c0915 --- /dev/null +++ b/src/main/java/com/show/common/configure/PolyvConfig.java @@ -0,0 +1,19 @@ +package com.show.common.configure; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Component +@Data +@ConfigurationProperties(prefix = "polyv") +public class PolyvConfig { + + private String userId; + + private String appId; + + private String appSecret; + + private String secretKey; +} diff --git a/src/main/java/com/show/common/configure/QXueYouConfig.java b/src/main/java/com/show/common/configure/QXueYouConfig.java new file mode 100644 index 0000000..fe1a13c --- /dev/null +++ b/src/main/java/com/show/common/configure/QXueYouConfig.java @@ -0,0 +1,18 @@ +package com.show.common.configure; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "qxueyou") +public class QXueYouConfig { + + private String appId; + + private String securityKey; + + private String url; + +} diff --git a/src/main/java/com/show/common/configure/RedisConfig.java b/src/main/java/com/show/common/configure/RedisConfig.java new file mode 100644 index 0000000..03eb735 --- /dev/null +++ b/src/main/java/com/show/common/configure/RedisConfig.java @@ -0,0 +1,122 @@ +package com.show.common.configure; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; +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.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.HashOperations; +import org.springframework.data.redis.core.ListOperations; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.SetOperations; +import org.springframework.data.redis.core.ValueOperations; +import org.springframework.data.redis.core.ZSetOperations; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +@EnableCaching + +/** + *

+ * Redis + *

+ * + * @author DengMin + * @since 2020/12/14 + */ +@Configuration +public class RedisConfig extends CachingConfigurerSupport { + + /** + * retemplate相关配置 + * @param factory + * @return + */ + @Bean + public RedisTemplate redisTemplate(RedisConnectionFactory factory) { + + RedisTemplate template = new RedisTemplate<>(); + // 配置连接工厂 + template.setConnectionFactory(factory); + + //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式) + Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class); + + ObjectMapper om = new ObjectMapper(); + // 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public + om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + // 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常 + om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); + jacksonSeial.setObjectMapper(om); + + // 值采用json序列化 + template.setValueSerializer(jacksonSeial); + //使用StringRedisSerializer来序列化和反序列化redis的key值 + template.setKeySerializer(new StringRedisSerializer()); + + // 设置hash key 和value序列化模式 + template.setHashKeySerializer(new StringRedisSerializer()); + template.setHashValueSerializer(jacksonSeial); + template.afterPropertiesSet(); + + return template; + } + + /** + * 对hash类型的数据操作 + * + * @param redisTemplate + * @return + */ + @Bean + public HashOperations hashOperations(RedisTemplate redisTemplate) { + return redisTemplate.opsForHash(); + } + + /** + * 对redis字符串类型数据操作 + * + * @param redisTemplate + * @return + */ + @Bean + public ValueOperations valueOperations(RedisTemplate redisTemplate) { + return redisTemplate.opsForValue(); + } + + /** + * 对链表类型的数据操作 + * + * @param redisTemplate + * @return + */ + @Bean + public ListOperations listOperations(RedisTemplate redisTemplate) { + return redisTemplate.opsForList(); + } + + /** + * 对无序集合类型的数据操作 + * + * @param redisTemplate + * @return + */ + @Bean + public SetOperations setOperations(RedisTemplate redisTemplate) { + return redisTemplate.opsForSet(); + } + + /** + * 对有序集合类型的数据操作 + * + * @param redisTemplate + * @return + */ + @Bean + public ZSetOperations zSetOperations(RedisTemplate redisTemplate) { + return redisTemplate.opsForZSet(); + } +} \ No newline at end of file diff --git a/src/main/java/com/show/common/configure/RemoteProperties.java b/src/main/java/com/show/common/configure/RemoteProperties.java new file mode 100644 index 0000000..0f240cb --- /dev/null +++ b/src/main/java/com/show/common/configure/RemoteProperties.java @@ -0,0 +1,36 @@ +package com.show.common.configure; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.PropertySource; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +/** + *

+ * 读取状态码 + *

+ * + * @author DengMin + * @date Created in 2020/08/24 + */ +@Component +@ConfigurationProperties(prefix = "meishu") +@PropertySource(value = "classpath:code.properties", encoding = "UTF-8") +public class RemoteProperties { + + private static Map codeMessage = new HashMap<>(); + + public static String getMessage(Integer code) { + return codeMessage.get(code); + } + + public Map getCodeMessage() { + return codeMessage; + } + + public void setCodeMessage(Map codeMessage) { + RemoteProperties.codeMessage = codeMessage; + } +} \ No newline at end of file diff --git a/src/main/java/com/show/common/configure/RenSheConfig.java b/src/main/java/com/show/common/configure/RenSheConfig.java new file mode 100644 index 0000000..ce9d927 --- /dev/null +++ b/src/main/java/com/show/common/configure/RenSheConfig.java @@ -0,0 +1,20 @@ +package com.show.common.configure; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Component +@Data +@ConfigurationProperties(prefix = "renshe") +public class RenSheConfig { + + //接口地址 + private String url; + + //私钥 + private String secretKey; + + //普陀 正式接口 + private String putuo; +} diff --git a/src/main/java/com/show/common/configure/RestTemplateConfig.java b/src/main/java/com/show/common/configure/RestTemplateConfig.java new file mode 100644 index 0000000..cd3b9ed --- /dev/null +++ b/src/main/java/com/show/common/configure/RestTemplateConfig.java @@ -0,0 +1,31 @@ +package com.show.common.configure; + +import org.springframework.context.annotation.Bean; +import org.springframework.http.MediaType; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; + +import java.util.ArrayList; +import java.util.List; + +@Component +public class RestTemplateConfig { + + @Bean + public RestTemplate restTemplate() { + RestTemplate restTemplate = new RestTemplate(); + restTemplate.getMessageConverters().add(new WxMappingJackson2HttpMessageConverter()); + return restTemplate; + } + + public class WxMappingJackson2HttpMessageConverter extends MappingJackson2HttpMessageConverter { + public WxMappingJackson2HttpMessageConverter(){ + List mediaTypes = new ArrayList<>(); + mediaTypes.add(MediaType.TEXT_PLAIN); + mediaTypes.add(MediaType.TEXT_HTML); + setSupportedMediaTypes(mediaTypes); + } + } + +} diff --git a/src/main/java/com/show/common/configure/SubsidyConfig.java b/src/main/java/com/show/common/configure/SubsidyConfig.java new file mode 100644 index 0000000..bdd4334 --- /dev/null +++ b/src/main/java/com/show/common/configure/SubsidyConfig.java @@ -0,0 +1,18 @@ +package com.show.common.configure; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "subsidy") +public class SubsidyConfig { + + private String appId; + + private String securityKey; + + private String url; + +} diff --git a/src/main/java/com/show/common/configure/SwaggerConfig.java b/src/main/java/com/show/common/configure/SwaggerConfig.java new file mode 100644 index 0000000..5df2b75 --- /dev/null +++ b/src/main/java/com/show/common/configure/SwaggerConfig.java @@ -0,0 +1,42 @@ +package com.show.common.configure; + +import org.springframework.beans.factory.annotation.Value; +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.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +@Configuration +@EnableSwagger2 +public class SwaggerConfig { + + @Value("${spring.profiles.active:}") + private String activeProfile; + + + @Bean + public Docket createRestApi() { + + // 判断是否为生产环境 + boolean isProd = "prod".equals(activeProfile); + + return new Docket(DocumentationType.SWAGGER_2) + .enable(!isProd) + .pathMapping("/") + .select() + .apis(RequestHandlerSelectors.basePackage("com.show")) + .paths(PathSelectors.any()) + .build().apiInfo(new ApiInfoBuilder() + .title("共创展厅") + .description("接口文档规范") + .version("1.0") +// .contact(new Contact("啊啊啊啊","www.youkehulian.com","tcp@meishu.com")) +// .license("The Apache License") +// .licenseUrl("http://www.baidu.com") + .build()); + } +} diff --git a/src/main/java/com/show/common/configure/VODConfig.java b/src/main/java/com/show/common/configure/VODConfig.java new file mode 100644 index 0000000..5b12de5 --- /dev/null +++ b/src/main/java/com/show/common/configure/VODConfig.java @@ -0,0 +1,27 @@ +package com.show.common.configure; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @author: tuyp + * @create: 2020-06-01 16:46 + */ +@Component +@Data +@ConfigurationProperties(prefix = "vod") +public class VODConfig { + + private String appId; + + private String secretId; + + private String secretKey; + + private String api; + + private String region; + + private Integer classId; +} diff --git a/src/main/java/com/show/common/configure/WebConfig.java b/src/main/java/com/show/common/configure/WebConfig.java new file mode 100644 index 0000000..05064ed --- /dev/null +++ b/src/main/java/com/show/common/configure/WebConfig.java @@ -0,0 +1,78 @@ +package com.show.common.configure; + + +import com.show.common.interceptor.AuthenticationInterceptor; +import org.springframework.beans.factory.annotation.Autowired; +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; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * @author DengMin + * @date 2020/07/06 + **/ +@Configuration +public class WebConfig implements WebMvcConfigurer { + + @Autowired + private AuthenticationInterceptor authenticationInterceptor; + + /** + * 跨域支持 + * + * @param registry + */ + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**") +// .allowCredentials(true) + .allowedOrigins("*") + .allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS") + .allowedHeaders("*") + .maxAge(3600); + } + + /** + * Swagger + * + * @param registry + */ + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/**").addResourceLocations("classpath:/static/"); + registry.addResourceHandler("swagger-ui.html") + .addResourceLocations("classpath:/META-INF/resources/"); + registry.addResourceHandler("/webjars/**") + .addResourceLocations("classpath:/META-INF/resources/webjars/"); + } + + /** + * 鉴权 + * + * @param registry + */ + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(authenticationInterceptor) + .excludePathPatterns("/static/*") + .addPathPatterns("/**"); + } + + @Bean + public CorsFilter corsFilter() { + CorsConfiguration config = new CorsConfiguration(); + config.setMaxAge(3600L); + config.addAllowedOrigin("*"); + config.addAllowedMethod("*"); + config.addAllowedHeader("*"); + UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource(); + configSource.registerCorsConfiguration("/**", config); + return new CorsFilter(configSource); + } +} \ No newline at end of file diff --git a/src/main/java/com/show/common/configure/WebLogAspect.java b/src/main/java/com/show/common/configure/WebLogAspect.java new file mode 100644 index 0000000..4acf562 --- /dev/null +++ b/src/main/java/com/show/common/configure/WebLogAspect.java @@ -0,0 +1,52 @@ +package com.show.common.configure; + +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +@Aspect +@Component +@Order(1) +public class WebLogAspect { + + private final Logger logger = LoggerFactory.getLogger(WebLogAspect.class); + + @Pointcut("execution(public * com.show.controller.*.*(..))")//切入点描述 这个是controller包的切入点 + public void controllerLog(){}//签名,可以理解成这个切入点的一个名称 + + @Pointcut("execution(public * com.show.controller.*.*(..))") + public void serviceImplLog(){} + + @Before("controllerLog()") //在切入点的方法run之前要干的 + public void logBeforeController(JoinPoint joinPoint) { + + +// RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); + //这个RequestContextHolder是Springmvc提供来获得请求的东西 +// HttpServletRequest request = ((ServletRequestAttributes)requestAttributes).getRequest(); + + // 记录下请求内容 +// logger.info("####requestUrl : " + request.getRequestURL().toString()); +// logger.info("####requestParam : " + Arrays.toString(joinPoint.getArgs())); + + } + +// @Around("serviceImplLog()") +// public Object afterController(ProceedingJoinPoint proceedingJoinPoint) { +// +// Object result = null; +// +// try{ +// result = proceedingJoinPoint.proceed(); +// logger.info("====reulst"+result); +// }catch (Throwable e){ +// MyException myException =(MyException)e; +// throw myException; +// } +// return result; +// } + +} \ No newline at end of file diff --git a/src/main/java/com/show/common/configure/WechatConfig.java b/src/main/java/com/show/common/configure/WechatConfig.java new file mode 100644 index 0000000..35f7b98 --- /dev/null +++ b/src/main/java/com/show/common/configure/WechatConfig.java @@ -0,0 +1,24 @@ +package com.show.common.configure; + + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "wechat") +public class WechatConfig { + + private String appId; + + private String appSecret; + + private String msgUrl; + // + private String templateId; + // + //private String agentId; + + +} diff --git a/src/main/java/com/show/common/constant/ApplyType.java b/src/main/java/com/show/common/constant/ApplyType.java new file mode 100644 index 0000000..2f313e7 --- /dev/null +++ b/src/main/java/com/show/common/constant/ApplyType.java @@ -0,0 +1,8 @@ +package com.show.common.constant; + +public class ApplyType { + + public static final String NEW_SHOW = "新的作品"; + + public static final String UPDATE_SHOW = "作品更新"; +} diff --git a/src/main/java/com/show/common/constant/AssigneeType.java b/src/main/java/com/show/common/constant/AssigneeType.java new file mode 100644 index 0000000..629ab81 --- /dev/null +++ b/src/main/java/com/show/common/constant/AssigneeType.java @@ -0,0 +1,13 @@ +package com.show.common.constant; + +public class AssigneeType { + + public static final String USER = "用户"; + + public static final String ROLE = "角色"; + + public static final String STUDENT = "学生"; + + public static final String TEACHER = "老师"; + +} diff --git a/src/main/java/com/show/common/constant/AttendanceConstant.java b/src/main/java/com/show/common/constant/AttendanceConstant.java new file mode 100644 index 0000000..4a4080b --- /dev/null +++ b/src/main/java/com/show/common/constant/AttendanceConstant.java @@ -0,0 +1,29 @@ +package com.show.common.constant; + +public class AttendanceConstant { + + /** + * 创建预约api + */ + public static final String CREATE_TOPIC_URL = "https://open.api.roomis.com.cn/api/my/booking/spaces/{spaceId}/events"; + + /** + * 考勤api + */ + public static final String GET_ATTENDANCE_URL = "https://open.api.roomis.com.cn/api/attendance/{id}"; + + /** + * 创建人ID + */ + public static Long organizerId = 200000222L; + + /** + * 开始时间 + */ + public static String startTime = "07:00:00"; + + /** + * 结束时间 + */ + public static String endTime = "21:00:00"; +} diff --git a/src/main/java/com/show/common/constant/BoolFlag.java b/src/main/java/com/show/common/constant/BoolFlag.java new file mode 100644 index 0000000..ef8ad9d --- /dev/null +++ b/src/main/java/com/show/common/constant/BoolFlag.java @@ -0,0 +1,9 @@ +package com.show.common.constant; + +public class BoolFlag { + + public static final String SHI = "是"; + + public static final String FOU = "否"; + +} diff --git a/src/main/java/com/show/common/constant/Code.java b/src/main/java/com/show/common/constant/Code.java new file mode 100644 index 0000000..9dc236c --- /dev/null +++ b/src/main/java/com/show/common/constant/Code.java @@ -0,0 +1,33 @@ +package com.show.common.constant; + +import lombok.Getter; + +@Getter +public enum Code { + + USERNAMENOTFOUND(1001, "用户不存在"), + BADCREDENTIALS(1002,"账户或者密码错误"), + ACCOUNTEXPIRED(1003,"账户过期"), + LOCKEDEXCEPTION(1004, "账户已锁定"), + DISABLEDEXCEPTION(1005,"账户已禁用"), + ACCESSDENIED(1006,"无权限访问"), + AUTHENTICATION(1007,"身份验证异常"), + NOHANDLERFOUND(1008,"找不到相应的视图处理器"), + PARAM_INVALID(1009, "参数不合法"), + TOKEN_EXCEPTION(1010, "无效的令牌"), + TOKEN_EXPIRED(1011, "当前账户已在其他设备登录"), + TOKEN_VERIFICATION_FAILED(1013, "令牌验证失败"), + OSS_ERROR(1012, "OSS文件上传异常"), + Network_ERROR(9000, "网络请求失败"), + SERVER_INTERNAL_ERROR(99999, "服务器内部错误"), + ; + + private Integer code; + + private String message; + + Code(Integer code, String message) { + this.code = code; + this.message = message; + } +} diff --git a/src/main/java/com/show/common/constant/ConstantUtils.java b/src/main/java/com/show/common/constant/ConstantUtils.java new file mode 100644 index 0000000..84fb329 --- /dev/null +++ b/src/main/java/com/show/common/constant/ConstantUtils.java @@ -0,0 +1,117 @@ +package com.show.common.constant; + + +/** + * 枚举类 + */ +public class ConstantUtils { + + public static final String DELETE_SUCCESS = "删除成功"; + + public static final String UPLOAD_FAIL = "上传失败"; + + public static final String ADD_SUCCESS = "新增成功"; + + public static final String COMMIT_SUCCESS = "提交成功"; + + public static final String SUCCESS_SEND_OUT = "发送成功"; + + public static final String FAIL_SEND_OUT = "发送失败"; + + public static final String SAVE_SUCCESS = "保存成功"; + + public static final String SHARE_SUCCESS = "共享成功"; + + public static final String SUBMIT_SUCCESS = "提交成功"; + + public static final String SUCCESS_UPDATE = "更新成功"; + + public static final String FAIL_UPDATE = "更新失败"; + + public static final String SET_SUCCESS = "设置成功"; + + public static final String SUCCESS_VERIFY = "验证成功"; + + public static final String FAIL_VERIFY = "验证失败"; + + public static final String COMPANY_NAME = "TeachAI"; + + public static final String ALREADY_DONE = "已完成"; + + public static final String ALREADY_RECOMMEND = "已推荐"; + + public static final String VERIFY_NAME = "有课互联"; + + public static final String NOTICE_NAME = "有课进度通知"; + + public static final String TECH_NAME = "有课互联学习平台"; + + + public static final String SUCCESS_REJECT = "驳回成功"; + + public static final String SUCCESS_CHECK = "审批成功"; + + + + /** + * 短信模板---验证模板 + */ + public static final String TEMPLATE_CODE = "SMS_190945394"; + + /** + * 短信 地域ID + */ + public static final String REGION_ID = "cn-hangzhou"; + + /** + * 短信 RAM账号AccessKey ID + */ + public static final String ACCESS_KEY_ID = "LTAI5tLUBG4B6QxhHrhddc7p"; + + /** + * 短信 RAM账号AccessKey Secret + */ + public static final String SECRET = "eber38QGHZixTQ6bFfrd80kbg67jIP"; + + /** + * 腾讯云点播视频转码模板 + */ + public static final Long TEMPLATE_VOD = 100030L; + + /** + * 手机端token + */ + public static final String MOBILE_TERMINATE = "mobile"; + + public static final String ADMINISTER_TERMINATE = "administer"; + + + /** + * API密钥--微信参数 + */ + public static final String SECRET_ID = "AKIDOcePHvZ2C5VeYHQGSO5aqtlNxJQLqfz2"; + + public static final String SECRET_KEY = "vjHYRmrfDbw0rWxA7oFcj7F8lDPKCm8E"; + + /** + * 图形验证码 + */ + public static final Long CAPTCHAAPP_ID = 2013197365L; + + public static final String APP_SECRET_KEY = "04ABoF0ZVuMje8NP84DE5Sg**"; + + public static final Long BUSINESS_ID = 1L; + + public static final String UTF8 = "UTF-8"; + + /** + * 保利威视 + */ + public static final String POLYV_VIEWLOG_2 = "http://api.polyv.net/live/v1/statistics/{channelId}/viewlog"; + + /** + * 推送人社局图片格式 + */ + public static final String IMAGE_FORMAT = "?x-oss-process=image/auto-orient,1/resize,m_pad,w_500,h_500/quality,Q_100/format,jpg"; + +} diff --git a/src/main/java/com/show/common/constant/MemberType.java b/src/main/java/com/show/common/constant/MemberType.java new file mode 100644 index 0000000..587bbad --- /dev/null +++ b/src/main/java/com/show/common/constant/MemberType.java @@ -0,0 +1,11 @@ +package com.show.common.constant; + +public class MemberType { + + public static final String PRINCIPAL = "团队负责人"; + + public static final String TEAM_MEMBER = "团队成员"; + + public static final String MENTOR = "指导教师"; + +} diff --git a/src/main/java/com/show/common/constant/Platform.java b/src/main/java/com/show/common/constant/Platform.java new file mode 100644 index 0000000..c99b660 --- /dev/null +++ b/src/main/java/com/show/common/constant/Platform.java @@ -0,0 +1,27 @@ +package com.show.common.constant; + +import lombok.Data; + +@Data +public class Platform { + + /* + 学生端 + */ + public static final String student = "student"; + + /* + 院校端 + */ + public static final String school = "school"; + + /* + 中心端 + */ + public static final String center = "center"; + + /* + 评审端 + */ + public static final String review = "review"; +} diff --git a/src/main/java/com/show/common/constant/Role.java b/src/main/java/com/show/common/constant/Role.java new file mode 100644 index 0000000..71a46de --- /dev/null +++ b/src/main/java/com/show/common/constant/Role.java @@ -0,0 +1,10 @@ +package com.show.common.constant; + +public class Role { + + public static final String LEADER = "参赛教师"; + + public static final String MEMBER = "课程团队"; + + +} diff --git a/src/main/java/com/show/common/constant/SMSTemplate.java b/src/main/java/com/show/common/constant/SMSTemplate.java new file mode 100644 index 0000000..3a3ccaa --- /dev/null +++ b/src/main/java/com/show/common/constant/SMSTemplate.java @@ -0,0 +1,31 @@ +package com.show.common.constant; + +public class SMSTemplate { + + /* + 项目进度通知 + */ + public static final String PROJECT_PROGRESS = "2760175"; + + /* + 项目提交通知 + */ + public static final String PROJECT_SUBMIT = "270159"; + + /* + 评审邀请通知 old + */ + public static final String REVIEW_INVITATION_OLD = "2765806"; + + /** + * + */ + public static final String REVIEW_INVITATION_NEW = "2939771"; + + /* + 撤销评审项目通知 + */ + public static final String CANCEL_REVIEW = "229303"; + + +} diff --git a/src/main/java/com/show/common/constant/ShowStatus.java b/src/main/java/com/show/common/constant/ShowStatus.java new file mode 100644 index 0000000..6f3d178 --- /dev/null +++ b/src/main/java/com/show/common/constant/ShowStatus.java @@ -0,0 +1,9 @@ +package com.show.common.constant; + +public class ShowStatus { + + public static final String PUBLISH = "已发布"; + + public static final String HIDDEN = "已隐藏"; + +} diff --git a/src/main/java/com/show/common/constant/SmsCode.java b/src/main/java/com/show/common/constant/SmsCode.java new file mode 100644 index 0000000..aef2e06 --- /dev/null +++ b/src/main/java/com/show/common/constant/SmsCode.java @@ -0,0 +1,22 @@ +package com.show.common.constant; + +public class SmsCode { + + /** + * 平台:student(学生端)、school(院校端)、center(中心端)、review(评审端) + */ + public static final String student = "student"; + + public static final String school = "school"; + + public static final String center = "center"; + + public static final String review = "review"; + + /** + * 行为标识:register(注册标识)、login(登录标识) + */ + public static final String register = "register"; + + public static final String login = "login"; +} diff --git a/src/main/java/com/show/common/constant/SubmitStatus.java b/src/main/java/com/show/common/constant/SubmitStatus.java new file mode 100644 index 0000000..7ff278a --- /dev/null +++ b/src/main/java/com/show/common/constant/SubmitStatus.java @@ -0,0 +1,13 @@ +package com.show.common.constant; + +public class SubmitStatus { + + public static final String TO_REVIEW = "待审核"; + + public static final String PASS = "已通过"; + + public static final String REJECT = "驳回中"; + + public static final String HIDE = "已隐藏"; + +} diff --git a/src/main/java/com/show/common/constant/TaskType.java b/src/main/java/com/show/common/constant/TaskType.java new file mode 100644 index 0000000..f5f4640 --- /dev/null +++ b/src/main/java/com/show/common/constant/TaskType.java @@ -0,0 +1,11 @@ +package com.show.common.constant; + +public class TaskType { + + public static final String COMMIT = "提交"; + + public static final String CHECK = "审批"; + + public static final String REJECT = "驳回"; + +} diff --git a/src/main/java/com/show/common/constant/VodConstant.java b/src/main/java/com/show/common/constant/VodConstant.java new file mode 100644 index 0000000..4590180 --- /dev/null +++ b/src/main/java/com/show/common/constant/VodConstant.java @@ -0,0 +1,31 @@ +package com.show.common.constant; + +import lombok.Getter; + +@Getter +public class VodConstant { + + /* 流量 */ + public final static String FLUX = "Flux"; + + /* 带宽 */ + public final static String BANDWIDTH = "Bandwidth"; + + /* 请求数 */ + public final static String REQUESTS = "Requests"; + + /* 请求命中率 */ + public final static String HITRATE = "Hitrate"; + + /* IP访问次数 */ + public final static String IP_VISITS = "Ip_visits"; + + /* 带宽缓存key */ + public final static String BANDWIDTH_CACHE_KEY = "CDNStatBandwidthCache"; + + /* 流量缓存key */ + public final static String FLUX_CACHE_KEY = "CDNStatFluxCache"; + + /* 自定义缓存名称(ehcache.xml中的自定义规则名称) */ + public final static String CDN_STAT_DETAILS_CACHE_NAME = "CDNStatDetails"; +} diff --git a/src/main/java/com/show/common/constant/WorkflowInstanceStatus.java b/src/main/java/com/show/common/constant/WorkflowInstanceStatus.java new file mode 100644 index 0000000..216b7ed --- /dev/null +++ b/src/main/java/com/show/common/constant/WorkflowInstanceStatus.java @@ -0,0 +1,13 @@ +package com.show.common.constant; + +public class WorkflowInstanceStatus { + + public static final String DOING = "运行中"; + + public static final String DONE = "已完成"; + + public static final String END = "已终止"; + + public static final String REJECTING = "驳回中"; + +} diff --git a/src/main/java/com/show/common/constant/WorkflowTaskStatus.java b/src/main/java/com/show/common/constant/WorkflowTaskStatus.java new file mode 100644 index 0000000..62bcc3e --- /dev/null +++ b/src/main/java/com/show/common/constant/WorkflowTaskStatus.java @@ -0,0 +1,15 @@ +package com.show.common.constant; + +public class WorkflowTaskStatus { + + public static final String TODO = "待审核"; + + public static final String DONE = "已通过"; + + public static final String REJECT = "驳回中"; + + public static final String CANCEL = "已结束"; + + public static final String COMMIT = "已提交"; + +} diff --git a/src/main/java/com/show/common/constant/WxConstant.java b/src/main/java/com/show/common/constant/WxConstant.java new file mode 100644 index 0000000..68dd509 --- /dev/null +++ b/src/main/java/com/show/common/constant/WxConstant.java @@ -0,0 +1,35 @@ +package com.show.common.constant; + +public class WxConstant { + + /** + * app id + */ + public static final String APPID = "wx75ec06e9ce50ef73"; + + /** + * 秘钥 + */ + public static final String SECRENT = "c039d32804278503474dfcf7cb3944b9"; + + /** + * 获取访问用户身份 + */ + public static final String GETUSERINFO = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token={access_token}&code={code}"; + + /** + * 读取成员 + */ + public static final String GET = "https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token={access_token}&userid={userid}"; + + /** + * 获取access_token + */ + public static final String GET_SUITE_TOKEN = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appid}&secret={secret}"; + + + /** + * 扫码登陆回调地址 + */ + public static final String QR_REDIRECT_URL = "http://massadmin.youkehulian.com"; +} diff --git a/src/main/java/com/show/common/exception/GlobalExceptionHandler.java b/src/main/java/com/show/common/exception/GlobalExceptionHandler.java new file mode 100644 index 0000000..68ff01e --- /dev/null +++ b/src/main/java/com/show/common/exception/GlobalExceptionHandler.java @@ -0,0 +1,119 @@ +package com.show.common.exception; + +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.show.common.ResponseData; +import com.show.common.ResponseVO; +import com.show.common.configure.RemoteProperties; +import com.show.common.constant.Code; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.formula.functions.T; +import org.springframework.http.converter.HttpMessageNotReadableException; +import org.springframework.validation.BindException; +import org.springframework.web.HttpRequestMethodNotSupportedException; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.servlet.NoHandlerFoundException; + +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.List; + +/** + * 异常处理 + * @author DengMin + * @date 2020/07/14 + **/ +@Slf4j +@RestControllerAdvice +public class GlobalExceptionHandler { + + /** + * 自定义异常 + * @param e + * @return + */ + @ExceptionHandler(value = HttpException.class) + public ResponseVO handlerException(HttpServletRequest request, HttpException e) { + String message = RemoteProperties.getMessage(e.getCode()); + if(StringUtils.isBlank(message)) { + message = e.getMessage(); + } + String url = request.getRequestURI(); + return ResponseData.generateCreatedResponse(e.getCode(), message, url); + } + + /** + * 404 + * @param request + * @return + */ + @ExceptionHandler(value = NoHandlerFoundException.class) + public ResponseVO NoHandlerFoundException(HttpServletRequest request) { + String url = request.getRequestURI(); + return ResponseData.generateCreatedResponse(Code.NOHANDLERFOUND.getCode(), Code.NOHANDLERFOUND.getMessage(), url); + } + + /** + * 请求方式错误 + * @param request + * @return + */ + @ExceptionHandler(value = HttpRequestMethodNotSupportedException.class) + public ResponseVO HttpRequestMethodNotSupportedException(HttpServletRequest request) { + String url = request.getRequestURI(); + return ResponseData.generateCreatedResponse(Code.NOHANDLERFOUND.getCode(), Code.NOHANDLERFOUND.getMessage(), url); + } + + /** + * 参数不合法 + * @param e + * @return + */ + @ExceptionHandler(MethodArgumentNotValidException.class) + public ResponseVO validateException(MethodArgumentNotValidException e){ + final List errList = new ArrayList<>(); + e.getBindingResult().getAllErrors().stream().forEach(x -> { + errList.add(x.getDefaultMessage()); + }); + return ResponseData.generateCreatedResponse(Code.PARAM_INVALID.getCode(), Code.PARAM_INVALID.getMessage(), errList.toString()); + } + + /** + * JSON 序列化异常 + * @param e + * @return + */ + @ExceptionHandler(HttpMessageNotReadableException.class) + public ResponseVO exceptionHandler(HttpMessageNotReadableException e) { + log.error(e.getMessage()); + return ResponseData.generateCreatedResponse(Code.PARAM_INVALID.getCode(), Code.PARAM_INVALID.getMessage()+":{"+e.getMessage()+"}"); + } + + /** + * 校验异常 + * @param e + * @return + */ + @ExceptionHandler(BindException.class) + public ResponseVO BindException(BindException e){ + final List errList = new ArrayList<>(); + e.getBindingResult().getAllErrors().stream().forEach(x -> { + errList.add(x.getDefaultMessage()); + }); + return ResponseData.generateCreatedResponse(Code.PARAM_INVALID.getCode(), Code.PARAM_INVALID.getMessage(), errList.toString()); + } + + /** + * 服务器内部错误 + * @return + */ + @ExceptionHandler(value = Exception.class) + public ResponseVO serverInternalError(Exception e, HttpServletRequest request) { + String url = request.getRequestURI(); +// log.error("path:"+url); +// log.error("---- error message: ---"+e.toString()); + e.printStackTrace(); + return ResponseData.generateCreatedResponse(Code.SERVER_INTERNAL_ERROR.getCode(), Code.SERVER_INTERNAL_ERROR.getMessage(), url); + } +} \ No newline at end of file diff --git a/src/main/java/com/show/common/exception/HttpException.java b/src/main/java/com/show/common/exception/HttpException.java new file mode 100644 index 0000000..c78d886 --- /dev/null +++ b/src/main/java/com/show/common/exception/HttpException.java @@ -0,0 +1,45 @@ +package com.show.common.exception; + + +import com.show.common.configure.RemoteProperties; + +/** + * 异常处理 + * @author DengMin + * @date 2020/08/12 + **/ +public class HttpException extends RuntimeException{ + + private Integer code; + + private String message; + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public HttpException(Integer code) { + super(RemoteProperties.getMessage(code)); + String message = RemoteProperties.getMessage(code); + this.message = message; + this.code = code; + } + + public HttpException(Integer code, String message) { + this.message = message; + this.code = code; + } +} diff --git a/src/main/java/com/show/common/handler/MetaHandler.java b/src/main/java/com/show/common/handler/MetaHandler.java new file mode 100644 index 0000000..15905c4 --- /dev/null +++ b/src/main/java/com/show/common/handler/MetaHandler.java @@ -0,0 +1,26 @@ +package com.show.common.handler; + +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import org.apache.ibatis.reflection.MetaObject; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +/** + * 填充配置 + * @author DengMin + * @date 2020/07/21 + **/ +@Component +public class MetaHandler implements MetaObjectHandler { + + @Override + public void insertFill(MetaObject metaObject) { + this.setFieldValByName("createDate", LocalDateTime.now(), metaObject); + } + + @Override + public void updateFill(MetaObject metaObject) { + this.setFieldValByName("updateDate", LocalDateTime.now(), metaObject); + } +} diff --git a/src/main/java/com/show/common/interceptor/AuthenticationInterceptor.java b/src/main/java/com/show/common/interceptor/AuthenticationInterceptor.java new file mode 100644 index 0000000..6913b37 --- /dev/null +++ b/src/main/java/com/show/common/interceptor/AuthenticationInterceptor.java @@ -0,0 +1,88 @@ +package com.show.common.interceptor; + +import com.auth0.jwt.interfaces.Claim; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.show.common.exception.HttpException; +import com.show.mapper.MemberMapper; +import com.show.model.MemberDO; +import com.show.util.JwtUtil; +import com.show.util.Localstorage; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.HandlerInterceptor; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.lang.reflect.Method; +import java.util.Calendar; +import java.util.Map; + +/** + *

+ * 鉴权拦截器 + *

+ * + * @author DengMin + * @since 2021/4/14 + */ +@Component +public class AuthenticationInterceptor implements HandlerInterceptor { + + @Autowired + private MemberMapper memberMapper; + + @Override + @CrossOrigin() + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { + // 不需要进行拦截 + if (!(handler instanceof HandlerMethod)) { + return true; + } + + HandlerMethod handlerMethod = (HandlerMethod) handler; + Method method = handlerMethod.getMethod(); + + TimeRequired timeRequired = method.getAnnotation(TimeRequired.class); + if (timeRequired != null) { + Calendar calendar = Calendar.getInstance(); + + int hour = calendar.get(Calendar.HOUR_OF_DAY); + if (hour < 6 || hour >= 23 ) { + throw new HttpException(17001); + } + } + + LoginRequired methodAnnotation = method.getAnnotation(LoginRequired.class); + if (methodAnnotation != null) { + String authorization = request.getHeader("Authorization"); + if (!StringUtils.isBlank(authorization)) { + String token = authorization; + if (authorization.startsWith("Bearer")) { + token = authorization.replace("Bearer ", ""); + } + /*Token不存在*/ + if (token == null || !JwtUtil.verifyToken(token)) { + throw new HttpException(1010); + } + + Map claimMap = JwtUtil.getClaims(token); + if (claimMap != null) { + //String[] role = methodAnnotation.value(); +// String type = claimMap.get("type").asString(); +// if (ConstantUtils.ADMINISTER_TERMINATE.equals(type)) { + MemberDO memberDO = memberMapper.selectById(claimMap.get("id").asLong()); + if (null != memberDO) { + Localstorage.setUser(memberDO); + return true; + } + } else { + throw new HttpException(1010); + } + } + } + return true; + } + +} diff --git a/src/main/java/com/show/common/interceptor/LoginRequired.java b/src/main/java/com/show/common/interceptor/LoginRequired.java new file mode 100644 index 0000000..91a3f10 --- /dev/null +++ b/src/main/java/com/show/common/interceptor/LoginRequired.java @@ -0,0 +1,20 @@ +package com.show.common.interceptor; + +import java.lang.annotation.*; + +/** + *

+ * 自定义验证登陆注解 + *

+ * + * @author DengMin + * @since 2020/12/18 + */ +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Inherited +public @interface LoginRequired { + + String[] value(); +} \ No newline at end of file diff --git a/src/main/java/com/show/common/interceptor/TimeRequired.java b/src/main/java/com/show/common/interceptor/TimeRequired.java new file mode 100644 index 0000000..a8b1c2f --- /dev/null +++ b/src/main/java/com/show/common/interceptor/TimeRequired.java @@ -0,0 +1,10 @@ +package com.show.common.interceptor; + +import java.lang.annotation.*; + +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Inherited +public @interface TimeRequired { +} diff --git a/src/main/java/com/show/controller/AcademyDictController.java b/src/main/java/com/show/controller/AcademyDictController.java new file mode 100644 index 0000000..0acad56 --- /dev/null +++ b/src/main/java/com/show/controller/AcademyDictController.java @@ -0,0 +1,40 @@ +package com.show.controller; + + +import com.show.common.ResponseData; +import com.show.common.ResponseVO; +import com.show.model.AcademyDictDO; +import com.show.service.AcademyDictService; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; +import io.swagger.annotations.Api; + +/** + *

+ * 前端控制器 + *

+ * + * @author Tuyp + * @since 2025-12-15 + */ +@RestController +@Api(tags = "院校字典表") +@RequestMapping("/academyDict") +public class AcademyDictController { + + @Autowired + private AcademyDictService academyDictService; + + @PostMapping("academyDetail") + @ApiOperation("查看院校详情 id") + public ResponseVO academyDetail(@RequestBody AcademyDictDO academyDictDO){ + return ResponseData.generateCreatedResponse(0,academyDictService.academyDetail(academyDictDO)); + } + + +} diff --git a/src/main/java/com/show/controller/AcademyPermissionMappingController.java b/src/main/java/com/show/controller/AcademyPermissionMappingController.java new file mode 100644 index 0000000..7baf081 --- /dev/null +++ b/src/main/java/com/show/controller/AcademyPermissionMappingController.java @@ -0,0 +1,22 @@ +package com.show.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; +import io.swagger.annotations.Api; + +/** + *

+ * 院校权限映射表 前端控制器 + *

+ * + * @author Tuyp + * @since 2025-11-27 + */ +@RestController +@Api(tags = "院校权限映射表") +@RequestMapping("/academy-permission-mapping-do") +public class AcademyPermissionMappingController { + +} diff --git a/src/main/java/com/show/controller/AcademyPlatformsController.java b/src/main/java/com/show/controller/AcademyPlatformsController.java new file mode 100644 index 0000000..dfd4114 --- /dev/null +++ b/src/main/java/com/show/controller/AcademyPlatformsController.java @@ -0,0 +1,22 @@ +package com.show.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; +import io.swagger.annotations.Api; + +/** + *

+ * 前端控制器 + *

+ * + * @author Tuyp + * @since 2025-12-15 + */ +@RestController +@Api(tags = "") +@RequestMapping("/academy-platforms-do") +public class AcademyPlatformsController { + +} diff --git a/src/main/java/com/show/controller/MemberController.java b/src/main/java/com/show/controller/MemberController.java new file mode 100644 index 0000000..bfc82a5 --- /dev/null +++ b/src/main/java/com/show/controller/MemberController.java @@ -0,0 +1,78 @@ +package com.show.controller; + + +import com.show.common.ResponseData; +import com.show.common.ResponseVO; +import com.show.dto.member.MemberWorkGroupDTO; +import com.show.dto.member.UpdateMemberInfoDTO; +import com.show.model.MemberDO; +import com.show.model.ShowWorksDO; +import com.show.service.MemberService; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; +import io.swagger.annotations.Api; + +/** + *

+ * 学生表 前端控制器 + *

+ * + * @author Tuyp + * @since 2025-11-25 + */ +@RestController +@Api(tags = "学生表") +@RequestMapping("/member") +public class MemberController { + + @Autowired + private MemberService memberService; + + @PostMapping("memberPage") + @ApiOperation("学生首页 id 学生id") + public ResponseVO memberPage(@RequestBody MemberDO memberDO){ + return ResponseData.generateCreatedResponse(0,memberService.memberPage(memberDO)); + } + + @PostMapping("login") + @ApiOperation("学生登录 studyNo 学号 idCard 身份证后4位 ") + public ResponseVO login(@RequestBody MemberDO memberDO){ + return ResponseData.generateCreatedResponse(0,memberService.login(memberDO)); + } + + @PostMapping("activeMember") + @ApiOperation("激活创作者账户 id image,aliasName,telephone") + public ResponseVO activeMember(@RequestBody UpdateMemberInfoDTO updateMemberInfoDTO){ + return ResponseData.generateCreatedResponse(0,memberService.activeMember(updateMemberInfoDTO)); + } + + @PostMapping("applyCenterSummary") + @ApiOperation("审批中心数量汇总 memberId") + public ResponseVO applyCenterSummary(@RequestBody ShowWorksDO showWorksDO){ + return ResponseData.generateCreatedResponse(0,memberService.applyCenterSummary(showWorksDO)); + } + + @PostMapping("memberWorkGroup") + @ApiOperation("审批中心-分组 pageNum pageSize memberId applyType") + public ResponseVO memberWorkGroup(@RequestBody MemberWorkGroupDTO memberWorkGroupDTO){ + return ResponseData.generateCreatedResponse(0,memberService.memberWorkGroup(memberWorkGroupDTO)); + } + + @PostMapping("updateMemberInfo") + @ApiOperation("修改个人信息 id image,aliasName,telephone memberContactsDOS [contactMethod imgUrl] ") + public ResponseVO updateMemberInfo(@RequestBody UpdateMemberInfoDTO updateMemberInfoDTO){ + return ResponseData.generateCreatedResponse(0,memberService.updateMemberInfo(updateMemberInfoDTO)); + } + + @PostMapping("sendMsg") + @ApiOperation("发送短信 telephone") + public ResponseVO sendMsg(@RequestBody MemberDO memberDO){ + return ResponseData.generateCreatedResponse(0,memberService.sendMsg(memberDO)); + } + +} diff --git a/src/main/java/com/show/controller/OssController.java b/src/main/java/com/show/controller/OssController.java new file mode 100644 index 0000000..f8a592e --- /dev/null +++ b/src/main/java/com/show/controller/OssController.java @@ -0,0 +1,239 @@ +package com.show.controller; + +import com.aliyun.oss.OSS; +import com.aliyun.oss.OSSClientBuilder; +import com.aliyun.oss.model.*; +import com.show.common.ResponseData; +import com.show.common.ResponseVO; +import com.show.common.exception.HttpException; +import com.show.vo.oss.GetSecretVO; +import com.show.vo.oss.UploadFileVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +@Api(tags = "oss") +@RestController +@RequestMapping("/oss") +public class OssController { + + public static final String keyId = "LTAI5tLUBG4B6QxhHrhddc7p"; + + + public static final String secret = "eber38QGHZixTQ6bFfrd80kbg67jIP"; + + + @Value("${spring.profiles.active}") + private String env; + + @PostMapping("getSecret") + @ApiOperation("oss秘钥") + public ResponseVO getSecret() { + GetSecretVO getSecretVO = new GetSecretVO(); + getSecretVO.setKey(keyId); + getSecretVO.setSecret(secret); + return ResponseData.generateCreatedResponse(0, getSecretVO); + } + + @PostMapping("uploadFile") + @ApiOperation("分片上传") + public ResponseVO fenpian(@RequestParam("file") MultipartFile file) { + + UploadFileVO uploadFileVO = new UploadFileVO(); + + // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。 + String endpoint = "http://oss-cn-beijing.aliyuncs.com"; + // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。 + // 填写Bucket名称,例如examplebucket。 +// String bucketName = "zhongzhi-cms"; + // 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。 + String objectName = System.currentTimeMillis() + "_" + file.getOriginalFilename(); + + // 创建OSSClient实例。 + OSS ossClient = new OSSClientBuilder().build(endpoint, keyId, secret); + + if ("dev".equals(env)) { + env = "ykhl-bigger-test"; + } + if ("prod".equals(env)) { + env = "ykhl-bigger"; + } + + + try { + // 创建InitiateMultipartUploadRequest对象。 + InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(env, objectName); + + // 如果需要在初始化分片时设置请求头,请参考以下示例代码。 + ObjectMetadata metadata = new ObjectMetadata(); + metadata.setContentType(file.getContentType()); + metadata.setContentDisposition("inline"); + + metadata.setHeader("x-oss-force-download", false); + request.setObjectMetadata(metadata); + + // 初始化分片。 + InitiateMultipartUploadResult upresult = ossClient.initiateMultipartUpload(request); + // 返回uploadId,它是分片上传事件的唯一标识。您可以根据该uploadId发起相关的操作,例如取消分片上传、查询分片上传等。 + String uploadId = upresult.getUploadId(); + + // partETags是PartETag的集合。PartETag由分片的ETag和分片号组成。 + List partETags = new ArrayList(); + // 每个分片的大小,用于计算文件有多少个分片。单位为字节。 + final long partSize = 1 * 1024 * 1024L; //1 MB。 + + long fileLength = file.getSize(); + int partCount = (int) (fileLength / partSize); + if (fileLength % partSize != 0) { + partCount++; + } + + // 遍历分片上传。 + for (int i = 0; i < partCount; i++) { + long startPos = i * partSize; + long curPartSize = (i + 1 == partCount) ? (fileLength - startPos) : partSize; + UploadPartRequest uploadPartRequest = new UploadPartRequest(); + uploadPartRequest.setBucketName(env); + uploadPartRequest.setKey(objectName); + uploadPartRequest.setUploadId(uploadId); + // 设置上传的分片流。 + // 以本地文件为例说明如何创建FIleInputstream,并通过InputStream.skip()方法跳过指定数据。 + InputStream instream = file.getInputStream(); + instream.skip(startPos); + uploadPartRequest.setInputStream(instream); + // 设置分片大小。除了最后一个分片没有大小限制,其他的分片最小为100 KB。 + uploadPartRequest.setPartSize(curPartSize); + // 设置分片号。每一个上传的分片都有一个分片号,取值范围是1~10000,如果超出此范围,OSS将返回InvalidArgument错误码。 + uploadPartRequest.setPartNumber(i + 1); + // 每个分片不需要按顺序上传,甚至可以在不同客户端上传,OSS会按照分片号排序组成完整的文件。 + UploadPartResult uploadPartResult = ossClient.uploadPart(uploadPartRequest); + // 每次上传分片之后,OSS的返回结果包含PartETag。PartETag将被保存在partETags中。 + partETags.add(uploadPartResult.getPartETag()); + } + + + // 创建CompleteMultipartUploadRequest对象。 + // 在执行完成分片上传操作时,需要提供所有有效的partETags。OSS收到提交的partETags后,会逐一验证每个分片的有效性。当所有的数据分片验证通过后,OSS将把这些分片组合成一个完整的文件。 + CompleteMultipartUploadRequest completeMultipartUploadRequest = + new CompleteMultipartUploadRequest(env, objectName, uploadId, partETags); + + // 完成分片上传。 + CompleteMultipartUploadResult completeMultipartUploadResult = ossClient.completeMultipartUpload(completeMultipartUploadRequest); + uploadFileVO.setUrl(completeMultipartUploadResult.getLocation()+"?x-oss-process=image/auto-orient,1/quality,q_60"); + } catch (Exception e) { + e.printStackTrace(); +// throw new HttpException(); + } finally { + if (ossClient != null) { + ossClient.shutdown(); + } + } + + return ResponseData.generateCreatedResponse(0, uploadFileVO); + } + + @PostMapping("uploadFile6") + @ApiOperation("分片上传 压缩至60%") + public ResponseVO uploadFile6(@RequestParam("file") MultipartFile file) { + + UploadFileVO uploadFileVO = new UploadFileVO(); + + // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。 + String endpoint = "http://oss-cn-beijing.aliyuncs.com"; + // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。 + // 填写Bucket名称,例如examplebucket。 +// String bucketName = "zhongzhi-cms"; + // 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。 + String objectName = System.currentTimeMillis() + "_" + file.getOriginalFilename(); + + // 创建OSSClient实例。 + OSS ossClient = new OSSClientBuilder().build(endpoint, keyId, secret); + + if ("dev".equals(env)) { + env = "ykhl-bigger-test"; + } + if ("prod".equals(env)) { + env = "ykhl-bigger"; + } + + + try { + // 创建InitiateMultipartUploadRequest对象。 + InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(env, objectName); + + // 如果需要在初始化分片时设置请求头,请参考以下示例代码。 + ObjectMetadata metadata = new ObjectMetadata(); + metadata.setContentType(file.getContentType()); + metadata.setContentDisposition("inline"); + + metadata.setHeader("x-oss-force-download", false); + request.setObjectMetadata(metadata); + + // 初始化分片。 + InitiateMultipartUploadResult upresult = ossClient.initiateMultipartUpload(request); + // 返回uploadId,它是分片上传事件的唯一标识。您可以根据该uploadId发起相关的操作,例如取消分片上传、查询分片上传等。 + String uploadId = upresult.getUploadId(); + + // partETags是PartETag的集合。PartETag由分片的ETag和分片号组成。 + List partETags = new ArrayList(); + // 每个分片的大小,用于计算文件有多少个分片。单位为字节。 + final long partSize = 1 * 1024 * 1024L; //1 MB。 + + long fileLength = file.getSize(); + int partCount = (int) (fileLength / partSize); + if (fileLength % partSize != 0) { + partCount++; + } + + // 遍历分片上传。 + for (int i = 0; i < partCount; i++) { + long startPos = i * partSize; + long curPartSize = (i + 1 == partCount) ? (fileLength - startPos) : partSize; + UploadPartRequest uploadPartRequest = new UploadPartRequest(); + uploadPartRequest.setBucketName(env); + uploadPartRequest.setKey(objectName); + uploadPartRequest.setUploadId(uploadId); + // 设置上传的分片流。 + // 以本地文件为例说明如何创建FIleInputstream,并通过InputStream.skip()方法跳过指定数据。 + InputStream instream = file.getInputStream(); + instream.skip(startPos); + uploadPartRequest.setInputStream(instream); + // 设置分片大小。除了最后一个分片没有大小限制,其他的分片最小为100 KB。 + uploadPartRequest.setPartSize(curPartSize); + // 设置分片号。每一个上传的分片都有一个分片号,取值范围是1~10000,如果超出此范围,OSS将返回InvalidArgument错误码。 + uploadPartRequest.setPartNumber(i + 1); + // 每个分片不需要按顺序上传,甚至可以在不同客户端上传,OSS会按照分片号排序组成完整的文件。 + UploadPartResult uploadPartResult = ossClient.uploadPart(uploadPartRequest); + // 每次上传分片之后,OSS的返回结果包含PartETag。PartETag将被保存在partETags中。 + partETags.add(uploadPartResult.getPartETag()); + } + + + // 创建CompleteMultipartUploadRequest对象。 + // 在执行完成分片上传操作时,需要提供所有有效的partETags。OSS收到提交的partETags后,会逐一验证每个分片的有效性。当所有的数据分片验证通过后,OSS将把这些分片组合成一个完整的文件。 + CompleteMultipartUploadRequest completeMultipartUploadRequest = + new CompleteMultipartUploadRequest(env, objectName, uploadId, partETags); + + // 完成分片上传。 + CompleteMultipartUploadResult completeMultipartUploadResult = ossClient.completeMultipartUpload(completeMultipartUploadRequest); + uploadFileVO.setUrl(completeMultipartUploadResult.getLocation()+"?x-oss-process=image/auto-orient,1/quality,q_60"); + }catch (Exception e) { + e.printStackTrace(); + } finally { + if (ossClient != null) { + ossClient.shutdown(); + } + } + + return ResponseData.generateCreatedResponse(0, uploadFileVO); + } +} diff --git a/src/main/java/com/show/controller/ShowBannersController.java b/src/main/java/com/show/controller/ShowBannersController.java new file mode 100644 index 0000000..421d48a --- /dev/null +++ b/src/main/java/com/show/controller/ShowBannersController.java @@ -0,0 +1,64 @@ +package com.show.controller; + + +import com.show.common.ResponseData; +import com.show.common.ResponseVO; +import com.show.model.ShowBannersDO; +import com.show.service.ShowBannersService; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; +import io.swagger.annotations.Api; + +/** + *

+ * 前端控制器 + *

+ * + * @author Tuyp + * @since 2025-11-25 + */ +@RestController +@Api(tags = "banner") +@RequestMapping("/showBanners") +public class ShowBannersController { + + @Autowired + private ShowBannersService showBannersService; + + @PostMapping("homePageBanners") + @ApiOperation("首页banner academyId") + public ResponseVO homePageBanners(@RequestBody ShowBannersDO showBannersDO){ + return ResponseData.generateCreatedResponse(0,showBannersService.homePageBanners(showBannersDO)); + } + +// @PostMapping("addBanner") +// @ApiOperation("添加banner academyId bannerUrl ") +// public ResponseVO addBanner(@RequestBody ShowBannersDO showBannersDO){ +// return ResponseData.generateCreatedResponse(0,showBannersService.addBanner(showBannersDO)); +// } +// +// @PostMapping("deleteBanner") +// @ApiOperation("删除banner id") +// public ResponseVO deleteBanner(@RequestBody ShowBannersDO showBannersDO){ +// return ResponseData.generateCreatedResponse(0,showBannersService.deleteBanner(showBannersDO)); +// } +// +// @PostMapping("updateBanner") +// @ApiOperation("修改banner id bannerUrl showFlag:是/否 ") +// public ResponseVO updateBanner(@RequestBody ShowBannersDO showBannersDO){ +// return ResponseData.generateCreatedResponse(0,showBannersService.updateBanner(showBannersDO)); +// } + +// @PostMapping("allBanners") +// @ApiOperation("查看所有banner academyId ") +// public ResponseVO allBanners(@RequestBody ShowBannersDO showBannersDO){ +// return ResponseData.generateCreatedResponse(0,showBannersService.allBanners(showBannersDO)); +// } + + +} diff --git a/src/main/java/com/show/controller/ShowLabelDictController.java b/src/main/java/com/show/controller/ShowLabelDictController.java new file mode 100644 index 0000000..731cc70 --- /dev/null +++ b/src/main/java/com/show/controller/ShowLabelDictController.java @@ -0,0 +1,57 @@ +package com.show.controller; + + +import com.show.common.ResponseData; +import com.show.common.ResponseVO; +import com.show.model.ShowLabelDictDO; +import com.show.service.ShowLabelDictService; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; +import io.swagger.annotations.Api; + +/** + *

+ * 前端控制器 + *

+ * + * @author Tuyp + * @since 2025-11-25 + */ +@RestController +@Api(tags = "标签") +@RequestMapping("/showLabelDict") +public class ShowLabelDictController { + + @Autowired + private ShowLabelDictService showLabelDictService; + +// @PostMapping("addLabel") +// @ApiOperation("新建标签 academyId label ") +// public ResponseVO addLabel(@RequestBody ShowLabelDictDO showLabelDictDO){ +// return ResponseData.generateCreatedResponse(0,showLabelDictService.addLabel(showLabelDictDO)); +// } + + @PostMapping("labels") + @ApiOperation("查看所有标签 academyId label ") + public ResponseVO labels(@RequestBody ShowLabelDictDO showLabelDictDO){ + return ResponseData.generateCreatedResponse(0,showLabelDictService.labels(showLabelDictDO)); + } + +// @PostMapping("deleteLabel") +// @ApiOperation("删除标签 id ") +// public ResponseVO deleteLabel(@RequestBody ShowLabelDictDO showLabelDictDO){ +// return ResponseData.generateCreatedResponse(0,showLabelDictService.deleteLabel(showLabelDictDO)); +// } +// +// @PostMapping("updateLabel") +// @ApiOperation("编辑标签 id label") +// public ResponseVO updateLabel(@RequestBody ShowLabelDictDO showLabelDictDO){ +// return ResponseData.generateCreatedResponse(0,showLabelDictService.updateLabel(showLabelDictDO)); +// } + +} diff --git a/src/main/java/com/show/controller/ShowMemberContactsController.java b/src/main/java/com/show/controller/ShowMemberContactsController.java new file mode 100644 index 0000000..949c1d9 --- /dev/null +++ b/src/main/java/com/show/controller/ShowMemberContactsController.java @@ -0,0 +1,57 @@ +package com.show.controller; + + +import com.show.common.ResponseData; +import com.show.common.ResponseVO; +import com.show.model.ShowMemberContactsDO; +import com.show.service.ShowMemberContactsService; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; +import io.swagger.annotations.Api; + +/** + *

+ * 学生联系方式表 前端控制器 + *

+ * + * @author Tuyp + * @since 2025-11-26 + */ +@RestController +@Api(tags = "学生联系方式表") +@RequestMapping("/showMemberContacts") +public class ShowMemberContactsController { + + @Autowired + private ShowMemberContactsService showMemberContactsService; + + @PostMapping("memberContacts") + @ApiOperation("查看学生联系方式 memberId") + public ResponseVO memberContacts(@RequestBody ShowMemberContactsDO showMemberContactsDO){ + return ResponseData.generateCreatedResponse(0,showMemberContactsService.memberContacts(showMemberContactsDO)); + } + + @PostMapping("addContact") + @ApiOperation("添加联系方式 memberId contactMethod imgUrl") + public ResponseVO addContact(@RequestBody ShowMemberContactsDO showMemberContactsDO){ + return ResponseData.generateCreatedResponse(0,showMemberContactsService.addContact(showMemberContactsDO)); + } + + @PostMapping("deleteContact") + @ApiOperation("删除联系方式 id") + public ResponseVO deleteContact(@RequestBody ShowMemberContactsDO showMemberContactsDO){ + return ResponseData.generateCreatedResponse(0,showMemberContactsService.deleteContact(showMemberContactsDO)); + } + + @PostMapping("updateContact") + @ApiOperation("编辑联系方式 id imgUrl") + public ResponseVO updateContact(@RequestBody ShowMemberContactsDO showMemberContactsDO){ + return ResponseData.generateCreatedResponse(0,showMemberContactsService.updateContact(showMemberContactsDO)); + } + +} diff --git a/src/main/java/com/show/controller/ShowWorksController.java b/src/main/java/com/show/controller/ShowWorksController.java new file mode 100644 index 0000000..fd0ce6a --- /dev/null +++ b/src/main/java/com/show/controller/ShowWorksController.java @@ -0,0 +1,111 @@ +package com.show.controller; + + +import com.show.common.ResponseData; +import com.show.common.ResponseVO; +import com.show.dto.member.CreatorsDTO; +import com.show.dto.work.MemberWorksDTO; +import com.show.dto.work.MyWorksDTO; +import com.show.dto.work.PageWorksDTO; +import com.show.dto.work.SubmitWorkDTO; +import com.show.model.MemberDO; +import com.show.model.ShowWorksDO; +import com.show.service.ShowWorksService; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; +import io.swagger.annotations.Api; + +/** + *

+ * 前端控制器 + *

+ * + * @author Tuyp + * @since 2025-11-25 + */ +@RestController +@Api(tags = "展评字典表") +@RequestMapping("/showWorks") +public class ShowWorksController { + + @Autowired + private ShowWorksService showWorksService; + + @PostMapping("hotSpotWorks") + @ApiOperation("首页热点内容 academyId ") + public ResponseVO hotSpotWorks(@RequestBody MemberDO memberDO){ + return ResponseData.generateCreatedResponse(0,showWorksService.hotSpotWorks(memberDO)); + } + + @PostMapping("pageWorks") + @ApiOperation("首页共创作品 pageSize pageNum academyId labelId title") + public ResponseVO pageWorks(@RequestBody PageWorksDTO pageWorksDTO){ + return ResponseData.generateCreatedResponse(0,showWorksService.pageWorks(pageWorksDTO)); + } + + @PostMapping("oneWork") + @ApiOperation("首页查看作品详情 id ") + public ResponseVO oneWork(@RequestBody ShowWorksDO showWorksDO){ + return ResponseData.generateCreatedResponse(0,showWorksService.oneWork(showWorksDO)); + } + + @PostMapping("memberWorks") + @ApiOperation("查看某个人的所有作品(已通过的) memberId pageSize pageNum") + public ResponseVO memberWorks(@RequestBody MemberWorksDTO memberWorksDTO){ + return ResponseData.generateCreatedResponse(0,showWorksService.memberWorks(memberWorksDTO)); + } + + @PostMapping("creators") + @ApiOperation("创作者 academyId aliasName pageSize pageNum") + public ResponseVO creators(@RequestBody CreatorsDTO creatorsDTO){ + return ResponseData.generateCreatedResponse(0,showWorksService.creators(creatorsDTO)); + } + + @PostMapping("myWorks") + @ApiOperation("创作者主页-作品管理 pageSize pageNum memberId submitStatus") + public ResponseVO myWorks(@RequestBody MyWorksDTO myWorksDTO){ + return ResponseData.generateCreatedResponse(0,showWorksService.myWorks(myWorksDTO)); + } + + @PostMapping("myWorksOverview") + @ApiOperation("创作者主页-作品管理-概览 memberId ") + public ResponseVO myWorksOverview(@RequestBody MyWorksDTO myWorksDTO){ + return ResponseData.generateCreatedResponse(0,showWorksService.myWorksOverview(myWorksDTO)); + } + + @PostMapping("hideWork") + @ApiOperation("隐藏作品 id") + public ResponseVO hideWork(@RequestBody ShowWorksDO showWorksDO){ + return ResponseData.generateCreatedResponse(0,showWorksService.hideWork(showWorksDO)); + } + + @PostMapping("showWork") + @ApiOperation("隐藏作品打开 id") + public ResponseVO showWork(@RequestBody ShowWorksDO showWorksDO){ + return ResponseData.generateCreatedResponse(0,showWorksService.showWork(showWorksDO)); + } + + @PostMapping("submitWork") + @ApiOperation("发布作品/驳回后再提交 memberId labelIds[] title workDesc works instanceId") + public ResponseVO submitWork(@RequestBody SubmitWorkDTO submitWorkDTO){ + return ResponseData.generateCreatedResponse(0,showWorksService.submitWork(submitWorkDTO)); + } + +// @PostMapping("updateWork") +// @ApiOperation("编辑作品 id memberId labelIds[] title workDesc works instanceId ") +// public ResponseVO updateWork(@RequestBody SubmitWorkDTO submitWorkDTO){ +// return ResponseData.generateCreatedResponse(0,showWorksService.updateWork(submitWorkDTO)); +// } + + @PostMapping("addViewCnt") + @ApiOperation("添加浏览量 id 作品id") + public ResponseVO addViewCnt(@RequestBody ShowWorksDO showWorksDO){ + return ResponseData.generateCreatedResponse(0,showWorksService.addViewCnt(showWorksDO)); + } + +} diff --git a/src/main/java/com/show/controller/SmsVerifyCodeController.java b/src/main/java/com/show/controller/SmsVerifyCodeController.java new file mode 100644 index 0000000..2f6c305 --- /dev/null +++ b/src/main/java/com/show/controller/SmsVerifyCodeController.java @@ -0,0 +1,22 @@ +package com.show.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; +import io.swagger.annotations.Api; + +/** + *

+ * 短信验证码记录表 前端控制器 + *

+ * + * @author Tuyp + * @since 2025-12-15 + */ +@RestController +@Api(tags = "短信验证码记录表") +@RequestMapping("/sms-verify-code-do") +public class SmsVerifyCodeController { + +} diff --git a/src/main/java/com/show/controller/WorkFlowController.java b/src/main/java/com/show/controller/WorkFlowController.java new file mode 100644 index 0000000..8002440 --- /dev/null +++ b/src/main/java/com/show/controller/WorkFlowController.java @@ -0,0 +1,29 @@ +package com.show.controller; + +import com.show.common.ResponseData; +import com.show.common.ResponseVO; +import com.show.dto.work.WorkflowHistory; +import com.show.service.WorkflowService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/workflow") +@Api(tags = "工作流") +public class WorkFlowController { + + @Autowired + private WorkflowService workflowService; + + @PostMapping("/history") + @ApiOperation("查看某个审批的每个节点审批历史记录 instanceId ") + public ResponseVO getWorkflowHistory(@RequestBody WorkflowHistory workflowHistory) { + return ResponseData.generateCreatedResponse(0,workflowService.getWorkflowHistory(workflowHistory)); + } + +} \ No newline at end of file diff --git a/src/main/java/com/show/dto/member/CreatorsDTO.java b/src/main/java/com/show/dto/member/CreatorsDTO.java new file mode 100644 index 0000000..e151b97 --- /dev/null +++ b/src/main/java/com/show/dto/member/CreatorsDTO.java @@ -0,0 +1,16 @@ +package com.show.dto.member; + +import lombok.Data; + +@Data +public class CreatorsDTO { + + private Long academyId; + + private String aliasName; + + private Integer pageSize; + + private Integer pageNum; + +} diff --git a/src/main/java/com/show/dto/member/MemberWorkGroupDTO.java b/src/main/java/com/show/dto/member/MemberWorkGroupDTO.java new file mode 100644 index 0000000..cea1e3f --- /dev/null +++ b/src/main/java/com/show/dto/member/MemberWorkGroupDTO.java @@ -0,0 +1,16 @@ +package com.show.dto.member; + +import lombok.Data; + +@Data +public class MemberWorkGroupDTO { + + private Integer pageSize; + + private Integer pageNum; + + private Long memberId; + + private String applyType; + +} diff --git a/src/main/java/com/show/dto/member/UpdateMemberInfoDTO.java b/src/main/java/com/show/dto/member/UpdateMemberInfoDTO.java new file mode 100644 index 0000000..1e8531e --- /dev/null +++ b/src/main/java/com/show/dto/member/UpdateMemberInfoDTO.java @@ -0,0 +1,16 @@ +package com.show.dto.member; + +import com.show.model.MemberDO; +import com.show.model.ShowMemberContactsDO; +import lombok.Data; + +import java.util.List; + +@Data +public class UpdateMemberInfoDTO extends MemberDO { + + private List memberContactsDOS; + + private String verifyCode; + +} diff --git a/src/main/java/com/show/dto/work/FlowNodesDTO.java b/src/main/java/com/show/dto/work/FlowNodesDTO.java new file mode 100644 index 0000000..328868e --- /dev/null +++ b/src/main/java/com/show/dto/work/FlowNodesDTO.java @@ -0,0 +1,10 @@ +package com.show.dto.work; + +import lombok.Data; + +@Data +public class FlowNodesDTO { + + private Long mappingId; + +} diff --git a/src/main/java/com/show/dto/work/HotSpotWorksDTO.java b/src/main/java/com/show/dto/work/HotSpotWorksDTO.java new file mode 100644 index 0000000..344ed78 --- /dev/null +++ b/src/main/java/com/show/dto/work/HotSpotWorksDTO.java @@ -0,0 +1,10 @@ +package com.show.dto.work; + +import lombok.Data; + +@Data +public class HotSpotWorksDTO { + + private Long academyId; + +} diff --git a/src/main/java/com/show/dto/work/MemberWorksDTO.java b/src/main/java/com/show/dto/work/MemberWorksDTO.java new file mode 100644 index 0000000..88a45a8 --- /dev/null +++ b/src/main/java/com/show/dto/work/MemberWorksDTO.java @@ -0,0 +1,14 @@ +package com.show.dto.work; + +import lombok.Data; + +@Data +public class MemberWorksDTO { + + private Long memberId; + + private Integer pageSize; + + private Integer pageNum; + +} diff --git a/src/main/java/com/show/dto/work/MyWorksDTO.java b/src/main/java/com/show/dto/work/MyWorksDTO.java new file mode 100644 index 0000000..e3bf64e --- /dev/null +++ b/src/main/java/com/show/dto/work/MyWorksDTO.java @@ -0,0 +1,16 @@ +package com.show.dto.work; + +import lombok.Data; + +@Data +public class MyWorksDTO { + + private Integer pageSize; + + private Integer pageNum; + + private Long memberId; + + private String submitStatus; + +} diff --git a/src/main/java/com/show/dto/work/PageWorksDTO.java b/src/main/java/com/show/dto/work/PageWorksDTO.java new file mode 100644 index 0000000..f1fc8e3 --- /dev/null +++ b/src/main/java/com/show/dto/work/PageWorksDTO.java @@ -0,0 +1,17 @@ +package com.show.dto.work; + +import lombok.Data; + +@Data +public class PageWorksDTO { + + private Integer pageSize; + + private Integer pageNum; + + private Long labelId; + + private Long academyId; + + private String title; +} diff --git a/src/main/java/com/show/dto/work/SubmitWorkDTO.java b/src/main/java/com/show/dto/work/SubmitWorkDTO.java new file mode 100644 index 0000000..d612ab4 --- /dev/null +++ b/src/main/java/com/show/dto/work/SubmitWorkDTO.java @@ -0,0 +1,14 @@ +package com.show.dto.work; + +import com.show.model.ShowWorksDO; +import lombok.Data; + +import java.util.List; + +@Data +public class SubmitWorkDTO extends ShowWorksDO { + + private List labelIds; + + +} diff --git a/src/main/java/com/show/dto/work/WorkflowHistory.java b/src/main/java/com/show/dto/work/WorkflowHistory.java new file mode 100644 index 0000000..fe7ce25 --- /dev/null +++ b/src/main/java/com/show/dto/work/WorkflowHistory.java @@ -0,0 +1,32 @@ +package com.show.dto.work; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.show.util.BaseModel; +import lombok.Data; + +@Data +@TableName("workflow_history") +public class WorkflowHistory extends BaseModel { + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + private Long instanceId; + + private Long nodeId; + + private String nodeKey; + + private String nodeName; + + private Long assignee; + + private String assigneeType; + + private String status; + + private String approveOpinion; + +} \ No newline at end of file diff --git a/src/main/java/com/show/mapper/AcademyDictMapper.java b/src/main/java/com/show/mapper/AcademyDictMapper.java new file mode 100644 index 0000000..f57198c --- /dev/null +++ b/src/main/java/com/show/mapper/AcademyDictMapper.java @@ -0,0 +1,18 @@ +package com.show.mapper; + +import com.show.model.AcademyDictDO; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springframework.stereotype.Repository; + +/** + *

+ * Mapper 接口 + *

+ * + * @author Tuyp + * @since 2025-12-15 + */ + @Repository +public interface AcademyDictMapper extends BaseMapper { + +} diff --git a/src/main/java/com/show/mapper/AcademyPermissionMappingMapper.java b/src/main/java/com/show/mapper/AcademyPermissionMappingMapper.java new file mode 100644 index 0000000..a886bdd --- /dev/null +++ b/src/main/java/com/show/mapper/AcademyPermissionMappingMapper.java @@ -0,0 +1,24 @@ +package com.show.mapper; + +import com.show.model.AcademyPermissionMappingDO; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springframework.stereotype.Repository; + +/** + *

+ * 院校权限映射表 Mapper 接口 + *

+ * + * @author Tuyp + * @since 2025-11-27 + */ + @Repository +public interface AcademyPermissionMappingMapper extends BaseMapper { + + /** + * 院校端对应申请的academy_permission_mapping的id 学生 + * name : 审批项名称 + */ + Long permissionMappingId(Long memberId,String name); + +} diff --git a/src/main/java/com/show/mapper/AcademyPlatformsMapper.java b/src/main/java/com/show/mapper/AcademyPlatformsMapper.java new file mode 100644 index 0000000..b41a5b0 --- /dev/null +++ b/src/main/java/com/show/mapper/AcademyPlatformsMapper.java @@ -0,0 +1,18 @@ +package com.show.mapper; + +import com.show.model.AcademyPlatformsDO; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springframework.stereotype.Repository; + +/** + *

+ * Mapper 接口 + *

+ * + * @author Tuyp + * @since 2025-12-15 + */ + @Repository +public interface AcademyPlatformsMapper extends BaseMapper { + +} diff --git a/src/main/java/com/show/mapper/AcademyRoleDictMapper.java b/src/main/java/com/show/mapper/AcademyRoleDictMapper.java new file mode 100644 index 0000000..33e04b4 --- /dev/null +++ b/src/main/java/com/show/mapper/AcademyRoleDictMapper.java @@ -0,0 +1,27 @@ +package com.show.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.show.model.AcademyRoleDictDO; +import com.show.vo.work.NamesVO; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + *

+ * 角色表 Mapper 接口 + *

+ * + * @author Tuyp + * @since 2024-12-12 + */ +@Repository +public interface AcademyRoleDictMapper extends BaseMapper { + + List roles(Long academyId); + + List checkRoles(Long academyId, String checkRole); + + List rolesName(@Param("roleIds") List roleIds); +} diff --git a/src/main/java/com/show/mapper/AdministerMapper.java b/src/main/java/com/show/mapper/AdministerMapper.java new file mode 100644 index 0000000..8336235 --- /dev/null +++ b/src/main/java/com/show/mapper/AdministerMapper.java @@ -0,0 +1,31 @@ +package com.show.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.show.model.AdministerDO; +import com.show.vo.administer.NamesVO; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + *

+ * 管理平台用户 Mapper 接口 + *

+ * + * @author Tuyp + * @since 2024-02-23 + */ +@Repository +public interface AdministerMapper extends BaseMapper { + + /** + * 获取用户名 + */ + List names(@Param("ids") List ids); + + /** + * 获取用户名 + */ + String administerName(Long id); +} diff --git a/src/main/java/com/show/mapper/MemberMapper.java b/src/main/java/com/show/mapper/MemberMapper.java new file mode 100644 index 0000000..0b66c9d --- /dev/null +++ b/src/main/java/com/show/mapper/MemberMapper.java @@ -0,0 +1,38 @@ +package com.show.mapper; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.show.model.MemberDO; +import com.show.vo.member.LoginVO; +import com.show.vo.member.MemberBaseInoVO; +import com.show.vo.member.MemberWorkGroupVO; +import org.springframework.stereotype.Repository; + +/** + *

+ * 学生表 Mapper 接口 + *

+ * + * @author Tuyp + * @since 2025-11-25 + */ +@Repository +public interface MemberMapper extends BaseMapper { + + /** + * 学员基本信息 + */ + MemberBaseInoVO memberBaseIno(Long id); + + /** + * 登录 + */ + LoginVO login(String studyNo); + + /** + * 审批中心-作品 + */ + IPage memberWorkGroup(IPage page, Long memberId, String applyType); + +} diff --git a/src/main/java/com/show/mapper/ShowBannersMapper.java b/src/main/java/com/show/mapper/ShowBannersMapper.java new file mode 100644 index 0000000..ea0fbb3 --- /dev/null +++ b/src/main/java/com/show/mapper/ShowBannersMapper.java @@ -0,0 +1,18 @@ +package com.show.mapper; + +import com.show.model.ShowBannersDO; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springframework.stereotype.Repository; + +/** + *

+ * Mapper 接口 + *

+ * + * @author Tuyp + * @since 2025-11-25 + */ + @Repository +public interface ShowBannersMapper extends BaseMapper { + +} diff --git a/src/main/java/com/show/mapper/ShowLabelDictMapper.java b/src/main/java/com/show/mapper/ShowLabelDictMapper.java new file mode 100644 index 0000000..5433e47 --- /dev/null +++ b/src/main/java/com/show/mapper/ShowLabelDictMapper.java @@ -0,0 +1,18 @@ +package com.show.mapper; + +import com.show.model.ShowLabelDictDO; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springframework.stereotype.Repository; + +/** + *

+ * Mapper 接口 + *

+ * + * @author Tuyp + * @since 2025-11-25 + */ + @Repository +public interface ShowLabelDictMapper extends BaseMapper { + +} diff --git a/src/main/java/com/show/mapper/ShowMemberContactsMapper.java b/src/main/java/com/show/mapper/ShowMemberContactsMapper.java new file mode 100644 index 0000000..36fc7b7 --- /dev/null +++ b/src/main/java/com/show/mapper/ShowMemberContactsMapper.java @@ -0,0 +1,30 @@ +package com.show.mapper; + +import com.show.model.ShowMemberContactsDO; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + *

+ * 学生联系方式表 Mapper 接口 + *

+ * + * @author Tuyp + * @since 2025-11-26 + */ +@Repository +public interface ShowMemberContactsMapper extends BaseMapper { + + /** + * 现有的联系方式 + */ + List memberCurrentContacts(Long memberId); + + /** + * 需要删除的旧的联系方式 + */ + List deleteIds(Long memberId,List showMemberContactsDOS); + +} diff --git a/src/main/java/com/show/mapper/ShowWorkLabelsMapper.java b/src/main/java/com/show/mapper/ShowWorkLabelsMapper.java new file mode 100644 index 0000000..4d75b11 --- /dev/null +++ b/src/main/java/com/show/mapper/ShowWorkLabelsMapper.java @@ -0,0 +1,18 @@ +package com.show.mapper; + +import com.show.model.ShowWorkLabelsDO; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springframework.stereotype.Repository; + +/** + *

+ * Mapper 接口 + *

+ * + * @author Tuyp + * @since 2025-11-25 + */ + @Repository +public interface ShowWorkLabelsMapper extends BaseMapper { + +} diff --git a/src/main/java/com/show/mapper/ShowWorksMapper.java b/src/main/java/com/show/mapper/ShowWorksMapper.java new file mode 100644 index 0000000..71cda21 --- /dev/null +++ b/src/main/java/com/show/mapper/ShowWorksMapper.java @@ -0,0 +1,73 @@ +package com.show.mapper; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.show.model.ShowLabelDictDO; +import com.show.model.ShowWorksDO; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.show.vo.work.*; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author Tuyp + * @since 2025-11-25 + */ + @Repository +public interface ShowWorksMapper extends BaseMapper { + + /** + * 首页热点作品 + * @return + */ + List hotSpotWorks(Long academyId); + + /** + * 首页作品下拉 + */ + IPage pageWorks(IPage iPage,Long labelId,Long academyId,String title); + + /** + * 查看作品详情 + */ + OneWorkVO oneWork(Long id); + + /** + * 作品对应的标签 + */ + List workLabels(Long workId); + + /** + * 查看某人的作品(已通过) + */ + IPage memberWorks(IPage iPage,Long memberId); + + /** + * 查看某人的作品(已通过) + */ + List memberWorksWithoutPage(Long memberId); + + /** + * 查看某人所有作品 + */ + IPage myWorks(IPage iPage, Long memberId, String submitStatus); + + /** + * 首页创作者 + */ + IPage creators(IPage iPage, Long academyId, String aliasName); + + /** + * 将作品置为已结束 + */ + void finishWork(Long id); + + /** + * 修改作品 + */ + void updateSubmitWork(Long id,String homePage,String works,String workDesc,String newStatus); +} diff --git a/src/main/java/com/show/mapper/SmsVerifyCodeMapper.java b/src/main/java/com/show/mapper/SmsVerifyCodeMapper.java new file mode 100644 index 0000000..990396d --- /dev/null +++ b/src/main/java/com/show/mapper/SmsVerifyCodeMapper.java @@ -0,0 +1,18 @@ +package com.show.mapper; + +import com.show.model.SmsVerifyCodeDO; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springframework.stereotype.Repository; + +/** + *

+ * 短信验证码记录表 Mapper 接口 + *

+ * + * @author Tuyp + * @since 2025-12-15 + */ + @Repository +public interface SmsVerifyCodeMapper extends BaseMapper { + +} diff --git a/src/main/java/com/show/mapper/WorkflowCopyToMapper.java b/src/main/java/com/show/mapper/WorkflowCopyToMapper.java new file mode 100644 index 0000000..f2d466b --- /dev/null +++ b/src/main/java/com/show/mapper/WorkflowCopyToMapper.java @@ -0,0 +1,18 @@ +package com.show.mapper; + +import com.show.model.WorkflowCopyToDO; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springframework.stereotype.Repository; + +/** + *

+ * Mapper 接口 + *

+ * + * @author Tuyp + * @since 2025-11-27 + */ + @Repository +public interface WorkflowCopyToMapper extends BaseMapper { + +} diff --git a/src/main/java/com/show/mapper/WorkflowInstanceMapper.java b/src/main/java/com/show/mapper/WorkflowInstanceMapper.java new file mode 100644 index 0000000..d565b53 --- /dev/null +++ b/src/main/java/com/show/mapper/WorkflowInstanceMapper.java @@ -0,0 +1,25 @@ +package com.show.mapper; + +import com.show.model.WorkflowInstance; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.show.model.WorkflowNode; +import org.springframework.stereotype.Repository; + +/** + *

+ * Mapper 接口 + *

+ * + * @author Tuyp + * @since 2025-11-27 + */ +@Repository +public interface WorkflowInstanceMapper extends BaseMapper { + + /** + * 查看当前工作流所属节点详情1 + */ + WorkflowNode instanceCurrentNode(Long instanceId); + + +} diff --git a/src/main/java/com/show/mapper/WorkflowNodeMapper.java b/src/main/java/com/show/mapper/WorkflowNodeMapper.java new file mode 100644 index 0000000..25f2a39 --- /dev/null +++ b/src/main/java/com/show/mapper/WorkflowNodeMapper.java @@ -0,0 +1,18 @@ +package com.show.mapper; + +import com.show.model.WorkflowNode; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springframework.stereotype.Repository; + +/** + *

+ * Mapper 接口 + *

+ * + * @author Tuyp + * @since 2025-11-27 + */ + @Repository +public interface WorkflowNodeMapper extends BaseMapper { + +} diff --git a/src/main/java/com/show/mapper/WorkflowTaskMapper.java b/src/main/java/com/show/mapper/WorkflowTaskMapper.java new file mode 100644 index 0000000..7bf9539 --- /dev/null +++ b/src/main/java/com/show/mapper/WorkflowTaskMapper.java @@ -0,0 +1,51 @@ +package com.show.mapper; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.show.model.WorkflowTask; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.show.vo.work.GetWorkflowHistoryVO; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author Tuyp + * @since 2025-11-27 + */ +@Repository +public interface WorkflowTaskMapper extends BaseMapper { + + /** + * 查看某人某个待审批的节点某个老师以角色身份可以在几个task里面 + */ + List administerRoleTasks(Long userId, Long instanceId, Long nodeId, Integer role); + + /** + * 查看某个人物某项没有的角色d taskId + */ + List administerNotInRoleTask(Integer role, Long userId, Long instanceId, Long nodeId); + + /** + * 查出学生提交的第一条 + */ + WorkflowTask studentTask(Long instanceId); + + /** + * 将所有待审核的任务置为已结束 + */ + void finishTodoTask(Long instanceId); + + /** + * 将之前的workTask都置为0 + */ + void beforeTaskDone(Long instanceId); + + /** + * 作品更新 + */ + List updatedWorks(Long instanceId); +} diff --git a/src/main/java/com/show/model/AcademyDictDO.java b/src/main/java/com/show/model/AcademyDictDO.java new file mode 100644 index 0000000..50054e4 --- /dev/null +++ b/src/main/java/com/show/model/AcademyDictDO.java @@ -0,0 +1,67 @@ +package com.show.model; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import com.show.util.BaseModel; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author Tuyp + * @since 2025-12-15 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("academy_dict") +public class AcademyDictDO extends BaseModel { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + private String academyName; + + private String shortName; + + private String location; + + private String academyType; + + /** + * 院校代码 + */ + private String academyCode; + + /** + * 院校logo + */ + private String academyLogo; + + /** + * 教师小程序首页封面 + */ + private String teacherLogo; + + /** + * 企业开放状态 + */ + private String companyInfoStatus; + + /** + * 职位封面 + */ + private String positionLogo; + + /** + * 共创展厅logo + */ + private String showLogo; + + +} diff --git a/src/main/java/com/show/model/AcademyPermissionMappingDO.java b/src/main/java/com/show/model/AcademyPermissionMappingDO.java new file mode 100644 index 0000000..ab1d226 --- /dev/null +++ b/src/main/java/com/show/model/AcademyPermissionMappingDO.java @@ -0,0 +1,50 @@ +package com.show.model; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import com.show.util.BaseModel; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * 院校权限映射表 + *

+ * + * @author Tuyp + * @since 2025-11-27 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("academy_permission_mapping") +public class AcademyPermissionMappingDO extends BaseModel { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + private Long academyId; + + private Long permissionId; + + private String workflowFlag; + + /** + * 排序 + */ + private Integer orderNo; + + /** + * 别名 + */ + private String aliasName; + + /** + * 版本号 + */ + private Integer versionCode; + + +} diff --git a/src/main/java/com/show/model/AcademyPlatformsDO.java b/src/main/java/com/show/model/AcademyPlatformsDO.java new file mode 100644 index 0000000..f282ca2 --- /dev/null +++ b/src/main/java/com/show/model/AcademyPlatformsDO.java @@ -0,0 +1,44 @@ +package com.show.model; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import com.show.util.BaseModel; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author Tuyp + * @since 2025-12-15 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("academy_platforms") +public class AcademyPlatformsDO extends BaseModel { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 院校id + */ + private Long academyId; + + /** + * 平台名称 + */ + private String platformName; + + /** + * logo + */ + private String logo; + + +} diff --git a/src/main/java/com/show/model/AcademyRoleDictDO.java b/src/main/java/com/show/model/AcademyRoleDictDO.java new file mode 100644 index 0000000..2e2bd74 --- /dev/null +++ b/src/main/java/com/show/model/AcademyRoleDictDO.java @@ -0,0 +1,38 @@ +package com.show.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.show.util.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * 角色表 + *

+ * + * @author Tuyp + * @since 2024-12-12 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("academy_role_dict") +public class AcademyRoleDictDO extends BaseModel { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + private Long academyId; + + /** + * 角色 + */ + private String role; + + private String roleType; + + +} diff --git a/src/main/java/com/show/model/AdministerDO.java b/src/main/java/com/show/model/AdministerDO.java new file mode 100644 index 0000000..4e2acdd --- /dev/null +++ b/src/main/java/com/show/model/AdministerDO.java @@ -0,0 +1,101 @@ +package com.show.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.show.util.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * 管理平台用户 + *

+ * + * @author Tuyp + * @since 2024-02-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("administer") +public class AdministerDO extends BaseModel { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 手机号 + */ + private String telephone; + + /** + * 账号 + */ + private String accountName; + + /** + * 密码 + */ + private String password; + + /** + * 公司id + */ + private Long companyId; + + /** + * 院校id + */ + private Long academyId; + + /** + * 学院id + */ + private Long collegeId; + + /** + * + */ + + /** + * 成员名称 + */ + private String userName; + + /** + * 头像 + */ + private String img; + + /** + * 1:启用 0:禁用 + */ + private String status; + + /** + * 角色 0:应用 1:企业关联客户 2:中心 3:企业唯一账号,4:院校唯一账号 5:院校关联账号 8辅导员 9学院管理员 10 专业老师 11 指导教师 + */ + private Integer role; + + /** + * 上次登录使用的角色 + */ + private Integer lastRole; + + /** + * 备注 + */ + private String remark; + + private String openid; + + private Long workNo; + +// 0: 首次 1:非首次 + private String firstLogin; +} diff --git a/src/main/java/com/show/model/MemberDO.java b/src/main/java/com/show/model/MemberDO.java new file mode 100644 index 0000000..252b86f --- /dev/null +++ b/src/main/java/com/show/model/MemberDO.java @@ -0,0 +1,315 @@ +package com.show.model; + +import com.show.util.BaseModel; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * 学生表 + *

+ * + * @author Tuyp + * @since 2025-11-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("member") +public class MemberDO extends BaseModel { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 院校名 + */ + private Long academyId; + + /** + * 公司名 + */ + private Long companyId; + + /** + * 姓名 + */ + private String userName; + + /** + * 别名 + */ + private String aliasName; + + /** + * 账号 + */ + private String accountName; + + /** + * 英文名 + */ + private String accountNameEn; + + /** + * 邮箱 + */ + private String email; + + /** + * 工号 + */ + private String workNo; + + /** + * 入职时间 + */ + private String inductionDate; + + /** + * 手机号 + */ + private String telephone; + + /** + * 密码 + */ + private String password; + + /** + * 性别 + */ + private String gender; + + /** + * 头像 + */ + private String image; + + /** + * 人脸核验--照片 + */ + private String checkImage; + + /** + * 采集时间 + */ + private LocalDateTime checkTime; + + /** + * 身份证号 + */ + private String idCard; + + /** + * 身份证照片 + */ + private String idCardPhoto; + + /** + * 启用/冻结 + */ + private String status; + + /** + * 是否登陆过 1 是 0 不是 + */ + private Integer firstLogin; + + private String activityStatus; + + /** + * 激活时间 + */ + private String activeDate; + + /** + * QQ号 + */ + private String qqNo; + + /** + * 微信账号 + */ + private String wechat; + + /** + * 实习状态 + */ + private String practiceStatus; + + /** + * 学院id + */ + private Long collegeId; + + /** + * 专业 + */ + private String major; + + private Long majorId; + + /** + * 入学年份 + */ + private String enrollmentYear; + + /** + * 工资账户 + */ + private String payrollAccount; + + private String education; + + /** + * 开户行 + */ + private String bank; + + private String openId; + + /** + * 0:学生 2:职工 3:人才 + */ + private Integer memberType; + + /** + * 学号 + */ + private String studyNo; + + private Long classId; + + /** + * 班级 + */ + private String className; + + /** + * 上报专业 + */ + private String reportMajor; + + /** + * 考生号 + */ + private String examNo; + + /** + * 学制 + */ + private String educationalSystem; + + /** + * 民族 + */ + private String nationality; + + /** + * 政治面貌 + */ + private String politicalStatus; + + /** + * 生源地 + */ + private String originalPlace; + + /** + * 培养方式 + */ + private String cultureMethod; + + /** + * 毕业情况 + */ + private String graduateStatus; + + /** + * 师范生类别 + */ + private String pedagogicalType; + + /** + * 毕业季节 + */ + private String graduateSeason; + + /** + * 贫困生类别 + */ + private String povertyStatus; + + /** + * 家庭电话 + */ + private String homePhone; + + /** + * 家庭地址 + */ + private String homeAddress; + + /** + * 邮编 + */ + private String homeZipCode; + + /** + * 扩招标志 + */ + private String expandFlag; + + /** + * 备注 + */ + private String remark; + + /** + * 学籍状态 + */ + private String studentStatus; + + /** + * 是否建立档案 + */ + private String fileEstablishFlag; + + /** + * 52贫困县 + */ + private String poorCounties; + + /** + * 学习形式 + */ + private String studyForm; + + /** + * 层级 + */ + private String cc; + + /** + * 年级 + */ + private String nj; + + /** + * 异动状态 + */ + private String unusualStatus; + + /** + * 志愿者证书地址 + */ + private String volunteerCertUrl; + + +} diff --git a/src/main/java/com/show/model/ShowBannersDO.java b/src/main/java/com/show/model/ShowBannersDO.java new file mode 100644 index 0000000..0706ca7 --- /dev/null +++ b/src/main/java/com/show/model/ShowBannersDO.java @@ -0,0 +1,45 @@ +package com.show.model; + +import com.show.util.BaseModel; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author Tuyp + * @since 2025-11-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("show_banners") +public class ShowBannersDO extends BaseModel { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 院校id + */ + private Long academyId; + + private String bannerUrl; + + /** + * 首页展示,是/否 + */ + private String showFlag; + + private Integer orderNo; + + private String backColor; + + +} diff --git a/src/main/java/com/show/model/ShowLabelDictDO.java b/src/main/java/com/show/model/ShowLabelDictDO.java new file mode 100644 index 0000000..3e53369 --- /dev/null +++ b/src/main/java/com/show/model/ShowLabelDictDO.java @@ -0,0 +1,33 @@ +package com.show.model; + +import com.show.util.BaseModel; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author Tuyp + * @since 2025-11-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("show_label_dict") +public class ShowLabelDictDO extends BaseModel { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + private Long academyId; + + private String label; + + +} diff --git a/src/main/java/com/show/model/ShowMemberContactsDO.java b/src/main/java/com/show/model/ShowMemberContactsDO.java new file mode 100644 index 0000000..403c45c --- /dev/null +++ b/src/main/java/com/show/model/ShowMemberContactsDO.java @@ -0,0 +1,41 @@ +package com.show.model; + +import com.show.util.BaseModel; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * 学生联系方式表 + *

+ * + * @author Tuyp + * @since 2025-11-26 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("show_member_contacts") +public class ShowMemberContactsDO extends BaseModel { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + private Long memberId; + + /** + * 联系方式 + */ + private String contactMethod; + + /** + * 二维码 + */ + private String imgUrl; + + +} diff --git a/src/main/java/com/show/model/ShowWorkLabelsDO.java b/src/main/java/com/show/model/ShowWorkLabelsDO.java new file mode 100644 index 0000000..b8dc6fb --- /dev/null +++ b/src/main/java/com/show/model/ShowWorkLabelsDO.java @@ -0,0 +1,33 @@ +package com.show.model; + +import com.show.util.BaseModel; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author Tuyp + * @since 2025-11-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("show_work_labels") +public class ShowWorkLabelsDO extends BaseModel { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + private Long workId; + + private Long labelId; + + +} diff --git a/src/main/java/com/show/model/ShowWorksDO.java b/src/main/java/com/show/model/ShowWorksDO.java new file mode 100644 index 0000000..399bc9d --- /dev/null +++ b/src/main/java/com/show/model/ShowWorksDO.java @@ -0,0 +1,93 @@ +package com.show.model; + +import com.show.util.BaseModel; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author Tuyp + * @since 2025-11-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("show_works") +public class ShowWorksDO extends BaseModel { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 学生id + */ + private Long memberId; + + /** + * 标题 + */ + private String title; + + /** + * 提交时间 + */ + private String submitDate; + + /** + * 提交状态 + */ + private String submitStatus; + + /** + * 展示状态 + */ + private String showStatus; + + /** + * 新的作品/作品更新 + */ + private String newStatus; + + /** + * 驳回原因 + */ + private String opinion; + + /** + * 展评描述 + */ + private String workDesc; + + /** + * 展评地址数组 + */ + private String works; + + /** + * 封面 + */ + private String homePage; + + /** + * 热点 + */ + private String hotSpot; + + /** + * 浏览量 + */ + private Integer viewCnt; + + /** + * 审批流id + */ + private Long instanceId; + +} diff --git a/src/main/java/com/show/model/SmsVerifyCodeDO.java b/src/main/java/com/show/model/SmsVerifyCodeDO.java new file mode 100644 index 0000000..78abceb --- /dev/null +++ b/src/main/java/com/show/model/SmsVerifyCodeDO.java @@ -0,0 +1,39 @@ +package com.show.model; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import com.show.util.BaseModel; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * 短信验证码记录表 + *

+ * + * @author Tuyp + * @since 2025-12-15 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sms_verify_code") +public class SmsVerifyCodeDO extends BaseModel { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * 手机号 + */ + private String telephone; + + /** + * 验证码 + */ + private String verifyCode; + + +} diff --git a/src/main/java/com/show/model/WorkflowCopyToDO.java b/src/main/java/com/show/model/WorkflowCopyToDO.java new file mode 100644 index 0000000..9d4a5d0 --- /dev/null +++ b/src/main/java/com/show/model/WorkflowCopyToDO.java @@ -0,0 +1,49 @@ +package com.show.model; + +import com.show.util.BaseModel; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author Tuyp + * @since 2025-11-27 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("workflow_copy_to") +public class WorkflowCopyToDO extends BaseModel { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * academy_permission_mapping的id + */ + private Long mappingId; + + /** + * 用户/角色 + */ + private String copyType; + + /** + * 用户id/角色id + */ + private Long copyId; + + /** + * 版本号 + */ + private Integer versionCode; + + +} diff --git a/src/main/java/com/show/model/WorkflowInstance.java b/src/main/java/com/show/model/WorkflowInstance.java new file mode 100644 index 0000000..155a74d --- /dev/null +++ b/src/main/java/com/show/model/WorkflowInstance.java @@ -0,0 +1,67 @@ +package com.show.model; + +import com.show.util.BaseModel; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import java.util.Date; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author Tuyp + * @since 2025-11-27 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("workflow_instance") +public class WorkflowInstance extends BaseModel { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * academy_permission_mapping的id + */ + private Long workflowId; + + /** + * 申请类型 + */ + private String applyType; + + /** + * 申请人id + */ + private Long applyId; + + private Integer versionCode; + + private String workflowCode; + + private String workflowVersion; + + private String status; + + /** + * workflow_node的主键id + */ + private Long currentNode; + + /** + * 审批结束时间 + */ + private Date finishTime; + + private Long appId; + + +} diff --git a/src/main/java/com/show/model/WorkflowNode.java b/src/main/java/com/show/model/WorkflowNode.java new file mode 100644 index 0000000..5cc46ff --- /dev/null +++ b/src/main/java/com/show/model/WorkflowNode.java @@ -0,0 +1,70 @@ +package com.show.model; + +import com.show.util.BaseModel; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author Tuyp + * @since 2025-11-27 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("workflow_node") +public class WorkflowNode extends BaseModel { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 审批id + */ + private Long workflowId; + + private Integer versionCode; + + /** + * 当前key + */ + private String nodeKey; + + /** + * 节点名称 + */ + private String nodeName; + + private String nodeType; + + private String nodePattern; + + /** + * 类型:用户/角色 + */ + private String approveType; + + /** + * 用户id,角色id 逗号间隔 + */ + private String approveConfig; + + /** + * 前置节点 + */ + private String prevNode; + + /** + * 后置节点 + */ + private String nextNode; + + +} diff --git a/src/main/java/com/show/model/WorkflowTask.java b/src/main/java/com/show/model/WorkflowTask.java new file mode 100644 index 0000000..15fb0ea --- /dev/null +++ b/src/main/java/com/show/model/WorkflowTask.java @@ -0,0 +1,83 @@ +package com.show.model; + +import com.show.util.BaseModel; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author Tuyp + * @since 2025-11-27 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("workflow_task") +public class WorkflowTask extends BaseModel { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 实例id + */ + private Long instanceId; + + /** + * 节点id + */ + private Long nodeId; + + /** + * 节点node_key + */ + private String nodeKey; + + /** + * 节点名称 + */ + private String nodeName; + + /** + * 审批人 + */ + private Long assignee; + + /** + * 审批类型:用户/角色 + */ + private String assigneeType; + + /** + * 最终审批人 + */ + private Long checkId; + + /** + * 审批状态 + */ + private String status; + + /** + * 审批意见 + */ + private String approveOpinion; + + private String startTime; + + private String endTime; + + /** + * 空:当前的 0:之前的(三方协议用) + */ + private Integer currentWork; + + +} diff --git a/src/main/java/com/show/service/AcademyDictService.java b/src/main/java/com/show/service/AcademyDictService.java new file mode 100644 index 0000000..0419d10 --- /dev/null +++ b/src/main/java/com/show/service/AcademyDictService.java @@ -0,0 +1,17 @@ +package com.show.service; + +import com.show.model.AcademyDictDO; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author Tuyp + * @since 2025-12-15 + */ +public interface AcademyDictService extends IService { + + AcademyDictDO academyDetail(AcademyDictDO academyDictDO); +} diff --git a/src/main/java/com/show/service/AcademyPermissionMappingService.java b/src/main/java/com/show/service/AcademyPermissionMappingService.java new file mode 100644 index 0000000..cda06bd --- /dev/null +++ b/src/main/java/com/show/service/AcademyPermissionMappingService.java @@ -0,0 +1,16 @@ +package com.show.service; + +import com.show.model.AcademyPermissionMappingDO; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 院校权限映射表 服务类 + *

+ * + * @author Tuyp + * @since 2025-11-27 + */ +public interface AcademyPermissionMappingService extends IService { + +} diff --git a/src/main/java/com/show/service/AcademyPlatformsService.java b/src/main/java/com/show/service/AcademyPlatformsService.java new file mode 100644 index 0000000..5634bd9 --- /dev/null +++ b/src/main/java/com/show/service/AcademyPlatformsService.java @@ -0,0 +1,16 @@ +package com.show.service; + +import com.show.model.AcademyPlatformsDO; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author Tuyp + * @since 2025-12-15 + */ +public interface AcademyPlatformsService extends IService { + +} diff --git a/src/main/java/com/show/service/MemberService.java b/src/main/java/com/show/service/MemberService.java new file mode 100644 index 0000000..27ecc33 --- /dev/null +++ b/src/main/java/com/show/service/MemberService.java @@ -0,0 +1,37 @@ +package com.show.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.show.dto.member.MemberWorkGroupDTO; +import com.show.dto.member.UpdateMemberInfoDTO; +import com.show.model.MemberDO; +import com.baomidou.mybatisplus.extension.service.IService; +import com.show.model.ShowWorksDO; +import com.show.vo.member.ApplyCenterSummaryVO; +import com.show.vo.member.LoginVO; +import com.show.vo.member.MemberBaseInoVO; +import com.show.vo.member.MemberWorkGroupVO; + +/** + *

+ * 学生表 服务类 + *

+ * + * @author Tuyp + * @since 2025-11-25 + */ +public interface MemberService extends IService { + + MemberBaseInoVO memberPage(MemberDO memberDO); + + LoginVO login(MemberDO memberDO); + + String activeMember(UpdateMemberInfoDTO updateMemberInfoDTO); + + ApplyCenterSummaryVO applyCenterSummary(ShowWorksDO showWorksDO); + + IPage memberWorkGroup(MemberWorkGroupDTO memberWorkGroupDTO); + + String updateMemberInfo(UpdateMemberInfoDTO updateMemberInfoDTO); + + String sendMsg(MemberDO memberDO); +} diff --git a/src/main/java/com/show/service/ShowBannersService.java b/src/main/java/com/show/service/ShowBannersService.java new file mode 100644 index 0000000..57b6d01 --- /dev/null +++ b/src/main/java/com/show/service/ShowBannersService.java @@ -0,0 +1,27 @@ +package com.show.service; + +import com.show.model.ShowBannersDO; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 服务类 + *

+ * + * @author Tuyp + * @since 2025-11-25 + */ +public interface ShowBannersService extends IService { + + List homePageBanners(ShowBannersDO showBannersDO); + + String addBanner(ShowBannersDO showBannersDO); + + String deleteBanner(ShowBannersDO showBannersDO); + + String updateBanner(ShowBannersDO showBannersDO); + + List allBanners(ShowBannersDO showBannersDO); +} diff --git a/src/main/java/com/show/service/ShowLabelDictService.java b/src/main/java/com/show/service/ShowLabelDictService.java new file mode 100644 index 0000000..75ed526 --- /dev/null +++ b/src/main/java/com/show/service/ShowLabelDictService.java @@ -0,0 +1,25 @@ +package com.show.service; + +import com.show.model.ShowLabelDictDO; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 服务类 + *

+ * + * @author Tuyp + * @since 2025-11-25 + */ +public interface ShowLabelDictService extends IService { + + String addLabel(ShowLabelDictDO showLabelDictDO); + + List labels(ShowLabelDictDO showLabelDictDO); + + String deleteLabel(ShowLabelDictDO showLabelDictDO); + + String updateLabel(ShowLabelDictDO showLabelDictDO); +} diff --git a/src/main/java/com/show/service/ShowMemberContactsService.java b/src/main/java/com/show/service/ShowMemberContactsService.java new file mode 100644 index 0000000..b822d78 --- /dev/null +++ b/src/main/java/com/show/service/ShowMemberContactsService.java @@ -0,0 +1,25 @@ +package com.show.service; + +import com.show.model.ShowMemberContactsDO; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 学生联系方式表 服务类 + *

+ * + * @author Tuyp + * @since 2025-11-26 + */ +public interface ShowMemberContactsService extends IService { + + List memberContacts(ShowMemberContactsDO showMemberContactsDO); + + String addContact(ShowMemberContactsDO showMemberContactsDO); + + String deleteContact(ShowMemberContactsDO showMemberContactsDO); + + String updateContact(ShowMemberContactsDO showMemberContactsDO); +} diff --git a/src/main/java/com/show/service/ShowWorkLabelsService.java b/src/main/java/com/show/service/ShowWorkLabelsService.java new file mode 100644 index 0000000..3609921 --- /dev/null +++ b/src/main/java/com/show/service/ShowWorkLabelsService.java @@ -0,0 +1,16 @@ +package com.show.service; + +import com.show.model.ShowWorkLabelsDO; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author Tuyp + * @since 2025-11-25 + */ +public interface ShowWorkLabelsService extends IService { + +} diff --git a/src/main/java/com/show/service/ShowWorksService.java b/src/main/java/com/show/service/ShowWorksService.java new file mode 100644 index 0000000..ca3d515 --- /dev/null +++ b/src/main/java/com/show/service/ShowWorksService.java @@ -0,0 +1,49 @@ +package com.show.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.show.dto.member.CreatorsDTO; +import com.show.dto.work.MemberWorksDTO; +import com.show.dto.work.MyWorksDTO; +import com.show.dto.work.PageWorksDTO; +import com.show.dto.work.SubmitWorkDTO; +import com.show.model.MemberDO; +import com.show.model.ShowWorksDO; +import com.baomidou.mybatisplus.extension.service.IService; +import com.show.vo.work.*; + +import java.util.List; + +/** + *

+ * 服务类 + *

+ * + * @author Tuyp + * @since 2025-11-25 + */ +public interface ShowWorksService extends IService { + + List hotSpotWorks(MemberDO memberDO); + + IPage pageWorks(PageWorksDTO pageWorksDTO); + + OneWorkVO oneWork(ShowWorksDO showWorksDO); + + IPage memberWorks(MemberWorksDTO memberWorksDTO); + + IPage myWorks(MyWorksDTO myWorksDTO); + + MyWorksOverviewVO myWorksOverview(MyWorksDTO myWorksDTO); + + String hideWork(ShowWorksDO showWorksDO); + + IPage creators(CreatorsDTO creatorsDTO); + + String showWork(ShowWorksDO showWorksDO); + + String submitWork(SubmitWorkDTO submitWorkDTO); + + String updateWork(SubmitWorkDTO submitWorkDTO); + + String addViewCnt(ShowWorksDO showWorksDO); +} diff --git a/src/main/java/com/show/service/SmsVerifyCodeService.java b/src/main/java/com/show/service/SmsVerifyCodeService.java new file mode 100644 index 0000000..b7c6217 --- /dev/null +++ b/src/main/java/com/show/service/SmsVerifyCodeService.java @@ -0,0 +1,16 @@ +package com.show.service; + +import com.show.model.SmsVerifyCodeDO; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 短信验证码记录表 服务类 + *

+ * + * @author Tuyp + * @since 2025-12-15 + */ +public interface SmsVerifyCodeService extends IService { + +} diff --git a/src/main/java/com/show/service/WorkflowService.java b/src/main/java/com/show/service/WorkflowService.java new file mode 100644 index 0000000..ed09f97 --- /dev/null +++ b/src/main/java/com/show/service/WorkflowService.java @@ -0,0 +1,52 @@ +package com.show.service; + + +import com.show.dto.work.FlowNodesDTO; +import com.show.dto.work.WorkflowHistory; +import com.show.model.WorkflowInstance; +import com.show.model.WorkflowTask; +import com.show.vo.work.CopiesVO; +import com.show.vo.work.FlowNodesVO; +import com.show.vo.work.GetWorkflowHistoryVO; +import java.util.List; + + +public interface WorkflowService { + + /** + * 处理任务(驳回) + */ + String reject(Long taskId, String assignee, String approveOpinion); + + /** + * 获取工作流历史记录 + */ + List getWorkflowHistory(WorkflowHistory workflowHistory); + + void createTasks(Long instanceId, Long mappingId, String nodeKey, Integer versionCode) ; + + /** + * 修改任务状态 -->改为审核中 + */ + String updateWorkTaskStatus(Long instanceId); + + /** + * 获取当前活动任务 + */ + List getActiveTasks(WorkflowHistory workflowHistory); + + /** + * 获取工作流实例详情 + */ + WorkflowInstance getWorkflowInstance(WorkflowHistory workflowHistory); + + /** + * 启动工作流实例 + */ + WorkflowInstance startWorkflow(Long memberId,String applyName,String roleType); + + /** + * 被驳回,提交申请后继续审批流 + */ + WorkflowInstance rejectWorkflow(Long instanceId,Long memberId,String applyName,String roleType); +} \ No newline at end of file diff --git a/src/main/java/com/show/service/impl/AcademyDictServiceImpl.java b/src/main/java/com/show/service/impl/AcademyDictServiceImpl.java new file mode 100644 index 0000000..91369d9 --- /dev/null +++ b/src/main/java/com/show/service/impl/AcademyDictServiceImpl.java @@ -0,0 +1,24 @@ +package com.show.service.impl; + +import com.show.model.AcademyDictDO; +import com.show.mapper.AcademyDictMapper; +import com.show.service.AcademyDictService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author Tuyp + * @since 2025-12-15 + */ +@Service +public class AcademyDictServiceImpl extends ServiceImpl implements AcademyDictService { + + @Override + public AcademyDictDO academyDetail(AcademyDictDO academyDictDO) { + return this.baseMapper.selectById(academyDictDO.getId()); + } +} diff --git a/src/main/java/com/show/service/impl/AcademyPermissionMappingServiceImpl.java b/src/main/java/com/show/service/impl/AcademyPermissionMappingServiceImpl.java new file mode 100644 index 0000000..b8363b5 --- /dev/null +++ b/src/main/java/com/show/service/impl/AcademyPermissionMappingServiceImpl.java @@ -0,0 +1,20 @@ +package com.show.service.impl; + +import com.show.model.AcademyPermissionMappingDO; +import com.show.mapper.AcademyPermissionMappingMapper; +import com.show.service.AcademyPermissionMappingService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 院校权限映射表 服务实现类 + *

+ * + * @author Tuyp + * @since 2025-11-27 + */ +@Service +public class AcademyPermissionMappingServiceImpl extends ServiceImpl implements AcademyPermissionMappingService { + +} diff --git a/src/main/java/com/show/service/impl/AcademyPlatformsServiceImpl.java b/src/main/java/com/show/service/impl/AcademyPlatformsServiceImpl.java new file mode 100644 index 0000000..0cc1483 --- /dev/null +++ b/src/main/java/com/show/service/impl/AcademyPlatformsServiceImpl.java @@ -0,0 +1,20 @@ +package com.show.service.impl; + +import com.show.model.AcademyPlatformsDO; +import com.show.mapper.AcademyPlatformsMapper; +import com.show.service.AcademyPlatformsService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author Tuyp + * @since 2025-12-15 + */ +@Service +public class AcademyPlatformsServiceImpl extends ServiceImpl implements AcademyPlatformsService { + +} diff --git a/src/main/java/com/show/service/impl/MemberServiceImpl.java b/src/main/java/com/show/service/impl/MemberServiceImpl.java new file mode 100644 index 0000000..c95a0e8 --- /dev/null +++ b/src/main/java/com/show/service/impl/MemberServiceImpl.java @@ -0,0 +1,234 @@ +package com.show.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.show.common.constant.ApplyType; +import com.show.common.exception.HttpException; +import com.show.dto.member.MemberWorkGroupDTO; +import com.show.dto.member.UpdateMemberInfoDTO; +import com.show.mapper.ShowMemberContactsMapper; +import com.show.mapper.ShowWorksMapper; +import com.show.mapper.SmsVerifyCodeMapper; +import com.show.model.*; +import com.show.mapper.MemberMapper; +import com.show.service.MemberService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.show.util.ConstantUtils; +import com.show.util.DateUtil; +import com.show.util.RandomUtil; +import com.show.util.SMSUtils; +import com.show.vo.member.ApplyCenterSummaryVO; +import com.show.vo.member.LoginVO; +import com.show.vo.member.MemberBaseInoVO; +import com.show.vo.member.MemberWorkGroupVO; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +/** + *

+ * 学生表 服务实现类 + *

+ * + * @author Tuyp + * @since 2025-11-25 + */ +@Service +public class MemberServiceImpl extends ServiceImpl implements MemberService { + + @Autowired + private ShowWorksMapper showWorksMapper; + + @Autowired + private ShowMemberContactsMapper showMemberContactsMapper; + + @Autowired + private SmsVerifyCodeMapper smsVerifyCodeMapper; + + @Override + public MemberBaseInoVO memberPage(MemberDO memberDO) { + return this.baseMapper.memberBaseIno(memberDO.getId()); + } + + @Override + public LoginVO login(MemberDO memberDO) { + LoginVO loginVO = this.baseMapper.login(memberDO.getStudyNo()); + + if (null != loginVO) { + if (!memberDO.getIdCard().equals(loginVO.getIdCard().substring(loginVO.getIdCard().length() - 4))) { + throw new HttpException(24026); + } else { + return loginVO; + } + } else { + throw new HttpException(10011); + } + } + + @Override + public String activeMember(UpdateMemberInfoDTO updateMemberInfoDTO) { + + //验证验证码对不对 + Integer smsCnt = smsVerifyCodeMapper.selectCount(new QueryWrapper() + .lambda() + .eq(SmsVerifyCodeDO::getTelephone, updateMemberInfoDTO.getTelephone()) + .eq(SmsVerifyCodeDO::getVerifyCode, updateMemberInfoDTO.getVerifyCode()) + .gt(SmsVerifyCodeDO::getCreateDate, LocalDateTime.now().minusMinutes(10L)) + ); + + if (smsCnt > 0) { + updateMemberInfoDTO.setActivityStatus("已激活"); + updateMemberInfoDTO.setActiveDate(DateUtil.currentTime()); + this.baseMapper.updateById(updateMemberInfoDTO); + } else { + throw new HttpException(10004); + } + + return ConstantUtils.SUCCESS_UPDATE; + } + + @Override + public ApplyCenterSummaryVO applyCenterSummary(ShowWorksDO showWorksDO) { + + ApplyCenterSummaryVO applyCenterSummaryVO = new ApplyCenterSummaryVO(); + //总数 + int totalCnt = showWorksMapper.selectCount(new QueryWrapper() + .lambda() + .eq(ShowWorksDO::getMemberId, showWorksDO.getMemberId())); + applyCenterSummaryVO.setTotalCnt(totalCnt); + + //新作品 + int newWorkCnt = showWorksMapper.selectCount(new QueryWrapper() + .lambda() + .eq(ShowWorksDO::getMemberId, showWorksDO.getMemberId()) + .eq(ShowWorksDO::getNewStatus, ApplyType.NEW_SHOW)); + applyCenterSummaryVO.setNewWorkCnt(newWorkCnt); + + applyCenterSummaryVO.setUpdateCnt(totalCnt - newWorkCnt); + return applyCenterSummaryVO; + } + + @Override + public IPage memberWorkGroup(MemberWorkGroupDTO memberWorkGroupDTO) { + + Page pager = new Page(memberWorkGroupDTO.getPageNum(), memberWorkGroupDTO.getPageSize()); + + IPage memberWorkGroupVOIPage = this.baseMapper.memberWorkGroup(pager, memberWorkGroupDTO.getMemberId(), memberWorkGroupDTO.getApplyType()); + List memberWorkGroupVOS = memberWorkGroupVOIPage.getRecords(); + + for (MemberWorkGroupVO memberWorkGroupVO : memberWorkGroupVOS) { + //标签 + List showLabelDictDOS = showWorksMapper.workLabels(memberWorkGroupVO.getId()); + memberWorkGroupVO.setShowLabelDictDOS(showLabelDictDOS); + } + return memberWorkGroupVOIPage; + } + + @Override + public String updateMemberInfo(UpdateMemberInfoDTO updateMemberInfoDTO) { + + //验证验证码对不对 + Integer smsCnt = smsVerifyCodeMapper.selectCount(new QueryWrapper() + .lambda() + .eq(SmsVerifyCodeDO::getTelephone, updateMemberInfoDTO.getTelephone()) + .eq(SmsVerifyCodeDO::getVerifyCode, updateMemberInfoDTO.getVerifyCode()) + .gt(SmsVerifyCodeDO::getCreateDate, LocalDateTime.now().minusMinutes(10L)) + ); + + if (smsCnt > 0) { + MemberDO memberDO = this.baseMapper.selectById(updateMemberInfoDTO.getId()); + + Integer count = this.baseMapper.selectCount(new QueryWrapper() + .lambda() + .eq(MemberDO::getAcademyId, memberDO.getAcademyId()) + .eq(MemberDO::getTelephone, updateMemberInfoDTO.getTelephone()) + .ne(MemberDO::getId, updateMemberInfoDTO.getId()) + .eq(MemberDO::getMemberType, 0)); + + if (count > 0) { + throw new HttpException(10003); + } + + if (!StringUtils.isEmpty(memberDO.getAliasName())) { + + Integer count1 = this.baseMapper.selectCount(new QueryWrapper() + .lambda() + .eq(MemberDO::getAliasName, updateMemberInfoDTO.getAliasName()) + .ne(MemberDO::getId, updateMemberInfoDTO.getId())); + if (count1 > 0) { + throw new HttpException(50006); + } + } + BeanUtils.copyProperties(updateMemberInfoDTO, memberDO); + this.baseMapper.updateById(memberDO); + + //联系方式 + //新的 + List showMemberContactsDOS = updateMemberInfoDTO.getMemberContactsDOS(); +// +// //旧的 +// List methods = showMemberContactsMapper.memberCurrentContacts(updateMemberInfoDTO.getId()); +// +// List list = showMemberContactsMapper.deleteIds(updateMemberInfoDTO.getId(), updateMemberInfoDTO.getMemberContactsDOS()); +// +// //将新的加入到 +// for (ShowMemberContactsDO showMemberContactsDO : showMemberContactsDOS){ +// //有的话就更新 +// if (methods.contains(showMemberContactsDO.getContactMethod())){ +// ShowMemberContactsDO showMemberContactsDO1 = showMemberContactsMapper.selectOne(new QueryWrapper() +// .lambda() +// .eq(ShowMemberContactsDO::getMemberId,updateMemberInfoDTO.getId()) +// .eq(ShowMemberContactsDO::getContactMethod,showMemberContactsDO.getContactMethod())); +// showMemberContactsDO1.setImgUrl(showMemberContactsDO.getImgUrl()); +// showMemberContactsMapper.updateById(showMemberContactsDO1); +// }else { +// //没有的话就新增 +// showMemberContactsDO.setMemberId(updateMemberInfoDTO.getId()); +// showMemberContactsMapper.insert(showMemberContactsDO); +// } +// } +// +// //删除旧的 +// list.stream().forEach(x->showMemberContactsMapper.deleteById(x)); + + showMemberContactsMapper.delete(new QueryWrapper() + .lambda() + .eq(ShowMemberContactsDO::getMemberId, updateMemberInfoDTO.getId())); + showMemberContactsDOS.stream().forEach(x -> { + x.setMemberId(updateMemberInfoDTO.getId()); + showMemberContactsMapper.insert(x); + }); + + } else { + throw new HttpException(10004); + } + + return ConstantUtils.SUCCESS_UPDATE; + } + + @Override + public String sendMsg(MemberDO memberDO) { + + String verifyCode = RandomUtil.getRandomCode(6); + String param = "{ \"code\":\"" + verifyCode + "\"}"; + + //插入短信验证码 + smsVerifyCodeMapper.delete(new QueryWrapper() + .lambda() + .eq(SmsVerifyCodeDO::getTelephone, memberDO.getTelephone())); + + SmsVerifyCodeDO smsCodeDO = new SmsVerifyCodeDO(); + smsCodeDO.setTelephone(memberDO.getTelephone()); + smsCodeDO.setVerifyCode(verifyCode); + smsCodeDO.setCreateDate(LocalDateTime.now()); + smsVerifyCodeMapper.insert(smsCodeDO); + return SMSUtils.sendVerifySMS(ConstantUtils.TEMPLATE_CODE, smsCodeDO.getTelephone(), param); + } +} diff --git a/src/main/java/com/show/service/impl/ShowBannersServiceImpl.java b/src/main/java/com/show/service/impl/ShowBannersServiceImpl.java new file mode 100644 index 0000000..d6bc3b6 --- /dev/null +++ b/src/main/java/com/show/service/impl/ShowBannersServiceImpl.java @@ -0,0 +1,62 @@ +package com.show.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.show.common.constant.BoolFlag; +import com.show.model.ShowBannersDO; +import com.show.mapper.ShowBannersMapper; +import com.show.service.ShowBannersService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.show.util.ConstantUtils; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 服务实现类 + *

+ * + * @author Tuyp + * @since 2025-11-25 + */ +@Service +public class ShowBannersServiceImpl extends ServiceImpl implements ShowBannersService { + + @Override + public List homePageBanners(ShowBannersDO showBannersDO) { + return this.baseMapper.selectList(new QueryWrapper() + .lambda() + .eq(ShowBannersDO::getShowFlag, BoolFlag.SHI) + .eq(ShowBannersDO::getAcademyId,showBannersDO.getAcademyId()) + .orderByAsc(ShowBannersDO::getOrderNo)); + } + + @Override + public String addBanner(ShowBannersDO showBannersDO) { + showBannersDO.setBannerUrl(BoolFlag.FOU); + this.baseMapper.insert(showBannersDO); + return ConstantUtils.ADD_SUCCESS; + } + + @Override + public String deleteBanner(ShowBannersDO showBannersDO) { + this.baseMapper.deleteById(showBannersDO.getId()); + return ConstantUtils.DELETE_SUCCESS; + } + + @Override + public String updateBanner(ShowBannersDO showBannersDO) { + this.baseMapper.updateById(showBannersDO); + return ConstantUtils.SUCCESS_UPDATE; + } + + @Override + public List allBanners(ShowBannersDO showBannersDO) { + return this.baseMapper.selectList(new QueryWrapper() + .lambda() + .eq(ShowBannersDO::getAcademyId,showBannersDO.getAcademyId()) + .orderByAsc(ShowBannersDO::getOrderNo)); + } + + +} diff --git a/src/main/java/com/show/service/impl/ShowLabelDictServiceImpl.java b/src/main/java/com/show/service/impl/ShowLabelDictServiceImpl.java new file mode 100644 index 0000000..beae0d2 --- /dev/null +++ b/src/main/java/com/show/service/impl/ShowLabelDictServiceImpl.java @@ -0,0 +1,67 @@ +package com.show.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.show.common.exception.HttpException; +import com.show.mapper.ShowWorkLabelsMapper; +import com.show.model.ShowLabelDictDO; +import com.show.mapper.ShowLabelDictMapper; +import com.show.model.ShowWorkLabelsDO; +import com.show.service.ShowLabelDictService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.show.util.ConstantUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 服务实现类 + *

+ * + * @author Tuyp + * @since 2025-11-25 + */ +@Service +public class ShowLabelDictServiceImpl extends ServiceImpl implements ShowLabelDictService { + + @Autowired + private ShowWorkLabelsMapper showWorkLabelsMapper; + + @Override + public String addLabel(ShowLabelDictDO showLabelDictDO) { + this.baseMapper.insert(showLabelDictDO); + return ConstantUtils.ADD_SUCCESS; + } + + @Override + public List labels(ShowLabelDictDO showLabelDictDO) { + return this.baseMapper.selectList(new QueryWrapper() + .lambda() + .like(StringUtils.isNotEmpty(showLabelDictDO.getLabel()),ShowLabelDictDO::getLabel,showLabelDictDO.getLabel()) + .eq(ShowLabelDictDO::getAcademyId,showLabelDictDO.getAcademyId())); + } + + @Override + public String deleteLabel(ShowLabelDictDO showLabelDictDO) { + + // 当前没有展品关联到这个标签 + int count = showWorkLabelsMapper.selectCount(new QueryWrapper() + .lambda() + .eq(ShowWorkLabelsDO::getLabelId,showLabelDictDO.getId())); + + if (count > 0){ + throw new HttpException(10001); + } + + this.baseMapper.deleteById(showLabelDictDO.getId()); + return ConstantUtils.DELETE_SUCCESS; + } + + @Override + public String updateLabel(ShowLabelDictDO showLabelDictDO) { + this.baseMapper.updateById(showLabelDictDO); + return ConstantUtils.SUCCESS_UPDATE; + } +} diff --git a/src/main/java/com/show/service/impl/ShowMemberContactsServiceImpl.java b/src/main/java/com/show/service/impl/ShowMemberContactsServiceImpl.java new file mode 100644 index 0000000..8cf1791 --- /dev/null +++ b/src/main/java/com/show/service/impl/ShowMemberContactsServiceImpl.java @@ -0,0 +1,60 @@ +package com.show.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.show.common.exception.HttpException; +import com.show.model.ShowMemberContactsDO; +import com.show.mapper.ShowMemberContactsMapper; +import com.show.service.ShowMemberContactsService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.show.util.ConstantUtils; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 学生联系方式表 服务实现类 + *

+ * + * @author Tuyp + * @since 2025-11-26 + */ +@Service +public class ShowMemberContactsServiceImpl extends ServiceImpl implements ShowMemberContactsService { + + @Override + public List memberContacts(ShowMemberContactsDO showMemberContactsDO) { + return this.baseMapper.selectList(new QueryWrapper() + .lambda() + .eq(ShowMemberContactsDO::getMemberId,showMemberContactsDO.getMemberId())); + } + + @Override + public String addContact(ShowMemberContactsDO showMemberContactsDO) { + + //查看当前这个人是否有这个联系方式 + int count = this.baseMapper.selectCount(new QueryWrapper() + .lambda() + .eq(ShowMemberContactsDO::getContactMethod,showMemberContactsDO.getContactMethod()) + .eq(ShowMemberContactsDO::getMemberId,showMemberContactsDO.getMemberId())); + + if (count > 0){ + throw new HttpException(10002); + } + + this.baseMapper.insert(showMemberContactsDO); + return ConstantUtils.ADD_SUCCESS; + } + + @Override + public String deleteContact(ShowMemberContactsDO showMemberContactsDO) { + this.baseMapper.deleteById(showMemberContactsDO.getId()); + return ConstantUtils.DELETE_SUCCESS; + } + + @Override + public String updateContact(ShowMemberContactsDO showMemberContactsDO) { + this.baseMapper.updateById(showMemberContactsDO); + return ConstantUtils.SUCCESS_UPDATE; + } +} diff --git a/src/main/java/com/show/service/impl/ShowWorkLabelsServiceImpl.java b/src/main/java/com/show/service/impl/ShowWorkLabelsServiceImpl.java new file mode 100644 index 0000000..a75ce6e --- /dev/null +++ b/src/main/java/com/show/service/impl/ShowWorkLabelsServiceImpl.java @@ -0,0 +1,20 @@ +package com.show.service.impl; + +import com.show.model.ShowWorkLabelsDO; +import com.show.mapper.ShowWorkLabelsMapper; +import com.show.service.ShowWorkLabelsService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author Tuyp + * @since 2025-11-25 + */ +@Service +public class ShowWorkLabelsServiceImpl extends ServiceImpl implements ShowWorkLabelsService { + +} diff --git a/src/main/java/com/show/service/impl/ShowWorksServiceImpl.java b/src/main/java/com/show/service/impl/ShowWorksServiceImpl.java new file mode 100644 index 0000000..9926221 --- /dev/null +++ b/src/main/java/com/show/service/impl/ShowWorksServiceImpl.java @@ -0,0 +1,258 @@ +package com.show.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.show.common.constant.*; +import com.show.dto.member.CreatorsDTO; +import com.show.dto.work.MemberWorksDTO; +import com.show.dto.work.MyWorksDTO; +import com.show.dto.work.PageWorksDTO; +import com.show.dto.work.SubmitWorkDTO; +import com.show.mapper.ShowWorkLabelsMapper; +import com.show.mapper.WorkflowInstanceMapper; +import com.show.model.*; +import com.show.mapper.ShowWorksMapper; +import com.show.service.ShowWorksService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.show.service.WorkflowService; +import com.show.util.ConstantUtils; +import com.show.util.DateUtil; +import com.show.vo.work.*; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + *

+ * 服务实现类 + *

+ * + * @author Tuyp + * @since 2025-11-25 + */ +@Service +public class ShowWorksServiceImpl extends ServiceImpl implements ShowWorksService { + + @Autowired + private ShowWorkLabelsMapper showWorkLabelsMapper; + + @Autowired + private WorkflowService workflowService; + + @Autowired + private WorkflowInstanceMapper workflowInstanceMapper; + + @Override + public List hotSpotWorks(MemberDO memberDO) { + return this.baseMapper.hotSpotWorks(memberDO.getAcademyId()); + } + + @Override + public IPage pageWorks(PageWorksDTO pageWorksDTO) { + Page pager = new Page(pageWorksDTO.getPageNum(), pageWorksDTO.getPageSize()); + return this.baseMapper.pageWorks(pager,pageWorksDTO.getLabelId(),pageWorksDTO.getAcademyId(),pageWorksDTO.getTitle()); + } + + @Override + public OneWorkVO oneWork(ShowWorksDO showWorksDO) { + OneWorkVO oneWorkVO = this.baseMapper.oneWork(showWorksDO.getId()); + //标签 + List showLabelDictDOS = this.baseMapper.workLabels(showWorksDO.getId()); + oneWorkVO.setShowLabelDictDOS(showLabelDictDOS); + return oneWorkVO; + } + + @Override + public IPage memberWorks(MemberWorksDTO memberWorksDTO) { + Page pager = new Page(memberWorksDTO.getPageNum(), memberWorksDTO.getPageSize()); + return this.baseMapper.memberWorks(pager,memberWorksDTO.getMemberId()); + } + + @Override + public IPage myWorks(MyWorksDTO myWorksDTO) { + Page pager = new Page(myWorksDTO.getPageNum(), myWorksDTO.getPageSize()); + IPage myWorksVOIPage = this.baseMapper.myWorks(pager, myWorksDTO.getMemberId(), myWorksDTO.getSubmitStatus()); + List myWorksVOS = myWorksVOIPage.getRecords(); + + myWorksVOS.stream().forEach(x->{ + List showLabelDictDOS = this.baseMapper.workLabels(x.getId()); + x.setShowLabelDictDOS(showLabelDictDOS); + }); + + return myWorksVOIPage; + } + + @Override + public MyWorksOverviewVO myWorksOverview(MyWorksDTO myWorksDTO) { + + MyWorksOverviewVO myWorksOverviewVO = new MyWorksOverviewVO(); + + myWorksDTO.setPageNum(1); + myWorksDTO.setPageSize(-1); + List myWorksVOS = myWorks(myWorksDTO).getRecords(); + + int passCnt = 0 ; + int toCheckCnt = 0 ; + + for (MyWorksVO myWorksVO : myWorksVOS){ + if (SubmitStatus.PASS.equals(myWorksVO.getSubmitStatus()) && ShowStatus.PUBLISH.equals(myWorksVO.getShowStatus())){ + passCnt ++; + }else if (SubmitStatus.REJECT.equals(myWorksVO.getSubmitStatus())||SubmitStatus.TO_REVIEW.equals(myWorksDTO.getSubmitStatus())){ + toCheckCnt++; + } + } + myWorksOverviewVO.setTotalCnt(myWorksVOS.size()); + myWorksOverviewVO.setPassCnt(passCnt); + myWorksOverviewVO.setToCheckCnt(toCheckCnt); + return myWorksOverviewVO; + } + + @Override + public String hideWork(ShowWorksDO showWorksDO) { + showWorksDO.setShowStatus(ShowStatus.HIDDEN); + this.baseMapper.updateById(showWorksDO); + return ConstantUtils.SUCCESS_UPDATE; + } + + @Override + public IPage creators(CreatorsDTO creatorsDTO) { + + Page pager = new Page(creatorsDTO.getPageNum(), creatorsDTO.getPageSize()); + + IPage creators = this.baseMapper.creators(pager, creatorsDTO.getAcademyId(), creatorsDTO.getAliasName()); + + List creatorsVOS = creators.getRecords(); + creatorsVOS.stream().forEach(x->{ + //这个人的作品 倒序 + List pageWorksVOS = this.baseMapper.memberWorksWithoutPage(x.getId()); + x.setWorkCnt(pageWorksVOS.size()); + x.setPageWorksVOS(pageWorksVOS); + }); + return creators; + } + + @Override + public String showWork(ShowWorksDO showWorksDO) { + showWorksDO.setShowStatus(ShowStatus.PUBLISH); + this.baseMapper.updateById(showWorksDO); + return ConstantUtils.SUCCESS_UPDATE; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public String submitWork(SubmitWorkDTO submitWorkDTO) { + + WorkflowInstance workflowInstance = new WorkflowInstance(); + if (null == submitWorkDTO.getInstanceId()) { + //第一次提交 + workflowInstance = workflowService.startWorkflow(submitWorkDTO.getMemberId(), ApplyType.NEW_SHOW, AssigneeType.STUDENT); + + ShowWorksDO showWorksDO = new ShowWorksDO(); + BeanUtils.copyProperties(submitWorkDTO,showWorksDO); + showWorksDO.setSubmitStatus(SubmitStatus.TO_REVIEW); + showWorksDO.setSubmitDate(DateUtil.currentTime()); + showWorksDO.setViewCnt(0); + showWorksDO.setHotSpot(BoolFlag.FOU); + showWorksDO.setInstanceId(workflowInstance.getId()); + showWorksDO.setNewStatus(ApplyType.NEW_SHOW); + this.baseMapper.insert(showWorksDO); + + //标签 + submitWorkDTO.getLabelIds().stream().forEach(x->{ + ShowWorkLabelsDO showWorkLabelsDO = new ShowWorkLabelsDO(); + showWorkLabelsDO.setWorkId(showWorksDO.getId()); + showWorkLabelsDO.setLabelId(x); + showWorkLabelsMapper.insert(showWorkLabelsDO); + }); + + } else { + + showWorkLabelsMapper.delete(new QueryWrapper() + .lambda() + .eq(ShowWorkLabelsDO::getWorkId,submitWorkDTO.getId())); + + //标签 + submitWorkDTO.getLabelIds().stream().forEach(x->{ + ShowWorkLabelsDO showWorkLabelsDO = new ShowWorkLabelsDO(); + showWorkLabelsDO.setWorkId(submitWorkDTO.getId()); + showWorkLabelsDO.setLabelId(x); + showWorkLabelsMapper.insert(showWorkLabelsDO); + }); + + //查看当前状态 只要不是已通过的话 就不修改newStatus的状态 + ShowWorksDO showWorksDO = this.baseMapper.selectById(submitWorkDTO.getId()); + if (SubmitStatus.PASS.equals(showWorksDO.getSubmitStatus())){ + //已通过,修改newStatus的状态 + this.baseMapper.updateSubmitWork(submitWorkDTO.getId(),submitWorkDTO.getHomePage(),submitWorkDTO.getWorks(),submitWorkDTO.getWorkDesc(),ApplyType.UPDATE_SHOW); + }else { + this.baseMapper.updateSubmitWork(submitWorkDTO.getId(),submitWorkDTO.getHomePage(),submitWorkDTO.getWorks(),submitWorkDTO.getWorkDesc(),null); + } + + //被驳回后提交 + workflowInstance = workflowService.rejectWorkflow(submitWorkDTO.getInstanceId(), submitWorkDTO.getMemberId(), ApplyType.NEW_SHOW, AssigneeType.STUDENT); + workflowInstance.setStatus(WorkflowInstanceStatus.DOING); + if (SubmitStatus.PASS.equals(showWorksDO.getSubmitStatus())){ + workflowInstance.setApplyType(ApplyType.UPDATE_SHOW); + } + workflowInstanceMapper.updateById(workflowInstance); + + } + + return ConstantUtils.ADD_SUCCESS; + } + + @Override + public String updateWork(SubmitWorkDTO submitWorkDTO) { + +// //将之前的置为已结束 +// this.baseMapper.finishWork(submitWorkDTO.getId()); + + WorkflowInstance workflowInstance = new WorkflowInstance(); + if (null == submitWorkDTO.getInstanceId()) { + //第一次提交 + workflowInstance = workflowService.startWorkflow(submitWorkDTO.getMemberId(), ApplyType.UPDATE_SHOW, AssigneeType.STUDENT); + } else { + //被驳回后提交 + workflowInstance = workflowService.rejectWorkflow(submitWorkDTO.getInstanceId(), submitWorkDTO.getMemberId(), ApplyType.UPDATE_SHOW, AssigneeType.STUDENT); + workflowInstance.setStatus(WorkflowInstanceStatus.DOING); + workflowInstanceMapper.updateById(workflowInstance); + } + + ShowWorksDO showWorksDO = new ShowWorksDO(); + BeanUtils.copyProperties(submitWorkDTO,showWorksDO); + showWorksDO.setSubmitStatus(SubmitStatus.TO_REVIEW); + showWorksDO.setSubmitDate(DateUtil.currentTime()); + showWorksDO.setViewCnt(0); + showWorksDO.setHotSpot(BoolFlag.FOU); + showWorksDO.setInstanceId(workflowInstance.getId()); + this.baseMapper.insert(showWorksDO); + + //标签 + submitWorkDTO.getLabelIds().stream().forEach(x->{ + ShowWorkLabelsDO showWorkLabelsDO = new ShowWorkLabelsDO(); + showWorkLabelsDO.setWorkId(showWorksDO.getId()); + showWorkLabelsDO.setLabelId(x); + showWorkLabelsMapper.insert(showWorkLabelsDO); + }); + + return ConstantUtils.SUCCESS_UPDATE; + } + + @Override + public String addViewCnt(ShowWorksDO showWorksDO) { + + ShowWorksDO showWorksDO1 = this.baseMapper.selectById(showWorksDO.getId()); + if (null == showWorksDO1.getViewCnt()){ + showWorksDO1.setViewCnt(1); + }else { + showWorksDO1.setViewCnt(showWorksDO1.getViewCnt()+1); + } + + this.baseMapper.updateById(showWorksDO1); + return ConstantUtils.SUCCESS_UPDATE; + } +} diff --git a/src/main/java/com/show/service/impl/SmsVerifyCodeServiceImpl.java b/src/main/java/com/show/service/impl/SmsVerifyCodeServiceImpl.java new file mode 100644 index 0000000..1cd5d21 --- /dev/null +++ b/src/main/java/com/show/service/impl/SmsVerifyCodeServiceImpl.java @@ -0,0 +1,20 @@ +package com.show.service.impl; + +import com.show.model.SmsVerifyCodeDO; +import com.show.mapper.SmsVerifyCodeMapper; +import com.show.service.SmsVerifyCodeService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 短信验证码记录表 服务实现类 + *

+ * + * @author Tuyp + * @since 2025-12-15 + */ +@Service +public class SmsVerifyCodeServiceImpl extends ServiceImpl implements SmsVerifyCodeService { + +} diff --git a/src/main/java/com/show/service/impl/WorkflowServiceImpl.java b/src/main/java/com/show/service/impl/WorkflowServiceImpl.java new file mode 100644 index 0000000..3a38ba3 --- /dev/null +++ b/src/main/java/com/show/service/impl/WorkflowServiceImpl.java @@ -0,0 +1,567 @@ +package com.show.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.show.common.constant.*; +import com.show.common.exception.HttpException; +import com.show.dto.work.WorkflowHistory; +import com.show.mapper.*; +import com.show.model.*; +import com.show.service.WorkflowService; +import com.show.util.ConstantUtils; +import com.show.util.DateFormatUtil; +import com.show.util.DateUtil; +import com.show.vo.administer.NamesVO; +import com.show.vo.work.GetWorkflowHistoryVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.*; + +@Service +public class WorkflowServiceImpl implements WorkflowService { + + @Autowired + private WorkflowNodeMapper workflowNodeMapper; + + @Autowired + private WorkflowInstanceMapper workflowInstanceMapper; + + @Autowired + private WorkflowTaskMapper workflowTaskMapper; + + @Autowired + private AcademyPermissionMappingMapper academyPermissionMappingMapper; + + @Autowired + private MemberMapper memberMapper; + + @Autowired + private AdministerMapper administerMapper; + + @Autowired + private AcademyRoleDictMapper academyRoleDictMapper; + + @Override + @Transactional + public String reject(Long taskId, String assignee, String approveOpinion) { + + WorkflowTask task = workflowTaskMapper.selectById(taskId); + if (task == null || !task.getAssignee().equals(Long.valueOf(assignee)) || !WorkflowTaskStatus.TODO.equals(task.getStatus())) { + throw new RuntimeException("任务不存在或状态异常"); + } + + // 更新任务状态 + task.setStatus(WorkflowTaskStatus.REJECT); // 驳回中 + task.setApproveOpinion(approveOpinion); + task.setEndTime(DateFormatUtil.format(new Date(), DateFormatUtil.FMT_sdf14_L24)); + task.setAssignee(Long.valueOf(assignee)); + task.setCheckId(Long.valueOf(assignee)); + workflowTaskMapper.updateById(task); + + // 记录历史 + WorkflowInstance instance = workflowInstanceMapper.selectById(task.getInstanceId()); + WorkflowNode currentNode = workflowNodeMapper.selectById(task.getNodeId()); + instance.setStatus(WorkflowInstanceStatus.REJECTING); + workflowInstanceMapper.updateById(instance); + +// // 查找目标节点 +// WorkflowNode targetWorkflowNode = nodeMapper.selectOne(new QueryWrapper() +// .lambda() +// .eq(WorkflowNode::getWorkflowId, instance.getWorkflowId()) +// .eq(WorkflowNode::getNodeKey, rejectDTO.getTargetNode())); +// +// if (targetWorkflowNode == null) { +// throw new RuntimeException("目标节点不存在"); +// } + + // 清除当前活动任务 + clearActiveTasks(instance.getId(), currentNode.getId()); + +// // 创建目标节点任务 +// createTasks(instance.getId(), targetWorkflowNode.getId(), null); + + return ConstantUtils.SUCCESS_REJECT; + } + + @Override + public List getWorkflowHistory(WorkflowHistory workflowHistory) { + + List result = workflowTaskMapper.updatedWorks(workflowHistory.getInstanceId()); + for (GetWorkflowHistoryVO getWorkflowHistoryVO : result){ + + //找到节点对应的所有审批人 + + WorkflowNode workflowNode = workflowNodeMapper.selectById(getWorkflowHistoryVO.getNodeId()); + + List checkers = new ArrayList<>(); + + if (AssigneeType.USER.equals(getWorkflowHistoryVO.getAssigneeType())) { + List split = Arrays.asList(workflowNode.getApproveConfig().split(",")); + List names = administerMapper.names(split); + for (NamesVO namesVO : names) { + checkers.add(namesVO.getName()); + } + getWorkflowHistoryVO.setCheckers(checkers); + } else if (AssigneeType.ROLE.equals(getWorkflowHistoryVO.getAssigneeType())) { + String[] split = workflowNode.getApproveConfig().split(","); + for (String str : split) { + AcademyRoleDictDO academyRoleDictDO = academyRoleDictMapper.selectById(str); + checkers.add(academyRoleDictDO.getRole()); + getWorkflowHistoryVO.setCheckers(checkers); + } + } else if (AssigneeType.STUDENT.equals(getWorkflowHistoryVO.getAssigneeType())) { + MemberDO memberDO = memberMapper.selectById(getWorkflowHistoryVO.getAssignee()); + checkers.add(memberDO.getUserName()); + getWorkflowHistoryVO.setCheckers(checkers); + } else { + AdministerDO administerDO = administerMapper.selectById(getWorkflowHistoryVO.getAssignee()); + checkers.add(administerDO.getUserName()); + getWorkflowHistoryVO.setCheckers(checkers); + } + + //谁审批的 + String operator = administerMapper.administerName(getWorkflowHistoryVO.getCheckId()); + getWorkflowHistoryVO.setOperator(operator); + + } + + return result; + } + + @Override + public String updateWorkTaskStatus(Long instanceId) { + + //审批里置为进行中 + WorkflowInstance instance = workflowInstanceMapper.selectById(instanceId); + instance.setStatus(WorkflowInstanceStatus.DOING); + workflowInstanceMapper.updateById(instance); + + WorkflowNode workflowNode = workflowNodeMapper.selectById(instance.getCurrentNode()); + + //老师的任务重新造记录 + createTasks(instance.getId(), instance.getWorkflowId(), workflowNode.getNodeKey(), workflowNode.getVersionCode()); + + return ConstantUtils.COMMIT_SUCCESS; + } + + @Override + public List getActiveTasks(WorkflowHistory workflowHistory) { + return workflowTaskMapper.selectList(new QueryWrapper() + .lambda() + .eq(WorkflowTask::getInstanceId, workflowHistory.getInstanceId()) + .eq(WorkflowTask::getStatus, 1) //待处理 + .orderByAsc(WorkflowTask::getCreateDate)); + } + + @Override + public WorkflowInstance getWorkflowInstance(WorkflowHistory workflowHistory) { + return workflowInstanceMapper.selectById(workflowHistory.getId()); + } + + /** + * 通过 返回是否是最后一个节点 + */ + public Boolean orHandlePass(Long instanceId, Integer role, Long userId, String opinion) { + Boolean flag = false; + //审批流处理== 通过 + WorkflowNode workflowNode = workflowInstanceMapper.instanceCurrentNode(instanceId); + //1.获取当前节点是由角色还是用户审批 + if (AssigneeType.USER.equals(workflowNode.getApproveType())) { + //用户 + WorkflowTask workflowTask = workflowTaskMapper.selectOne(new QueryWrapper() + .lambda() + .eq(WorkflowTask::getAssigneeType, AssigneeType.USER) + .eq(WorkflowTask::getInstanceId, instanceId) + .eq(WorkflowTask::getNodeId, workflowNode.getId()) + .eq(WorkflowTask::getAssignee, userId) + .eq(WorkflowTask::getStatus, WorkflowTaskStatus.TODO)); + workflowTask.setStatus(WorkflowTaskStatus.DONE); // 已通过 + workflowTask.setEndTime(DateFormatUtil.format(new Date(), DateFormatUtil.FMT_sdf14_L24)); + workflowTask.setCheckId(userId); + workflowTask.setApproveOpinion(opinion); + workflowTaskMapper.updateById(workflowTask); + // 该人不在的改为已结束 + List others = workflowTaskMapper.selectList(new QueryWrapper() + .lambda() + .eq(WorkflowTask::getAssigneeType, AssigneeType.USER) + .eq(WorkflowTask::getInstanceId, instanceId) + .eq(WorkflowTask::getNodeId, workflowNode.getId()) + .ne(WorkflowTask::getAssignee, userId) + .eq(WorkflowTask::getStatus, WorkflowTaskStatus.TODO)); + for (WorkflowTask other : others) { + other.setStatus(WorkflowTaskStatus.CANCEL); + workflowTaskMapper.updateById(other); + } +// //审批通过 +// this.approve(workflowTask.getId(), String.valueOf(userId), null); + } else { + //角色---> 将该节点所有成员出现的角色置为已处理,再流转到下个节点 + List workflowTasks = workflowTaskMapper.administerRoleTasks(userId, instanceId, workflowNode.getId(), role); + for (WorkflowTask workflowTask : workflowTasks) { + // 更新任务状态 + workflowTask.setStatus(WorkflowTaskStatus.DONE); // 已通过 + workflowTask.setEndTime(DateFormatUtil.format(new Date(), DateFormatUtil.FMT_sdf14_L24)); + workflowTask.setCheckId(userId); + workflowTask.setApproveOpinion(opinion); + workflowTaskMapper.updateById(workflowTask); + } + // 该人不在的角色改为已结束 + List workflowTasks1 = workflowTaskMapper.administerNotInRoleTask(role, userId, instanceId, workflowNode.getId()); + for (WorkflowTask workflowTask : workflowTasks1) { + workflowTask.setStatus(WorkflowTaskStatus.CANCEL); + workflowTaskMapper.updateById(workflowTask); + } + } + /** + * 判断是否是最后一个节点 + */ + WorkflowInstance workflowInstance = workflowInstanceMapper.selectById(instanceId); + WorkflowNode currentNode = workflowNodeMapper.selectById(workflowInstance.getCurrentNode()); + // 获取下一个节点 + String nextNodeKey = currentNode.getNextNode(); + + WorkflowNode nextNode = workflowNodeMapper.selectOne(new QueryWrapper() + .lambda() + .eq(WorkflowNode::getWorkflowId, workflowInstance.getWorkflowId()) + .eq(WorkflowNode::getNodeKey, nextNodeKey) + .eq(WorkflowNode::getVersionCode, workflowInstance.getVersionCode())); + + //下一个节点流存在 创建节点流 + if (nextNode != null) { + workflowInstance.setCurrentNode(nextNode.getId()); + workflowInstanceMapper.updateById(workflowInstance); + this.createTasks(workflowInstance.getId(), workflowInstance.getWorkflowId(), nextNode.getNodeKey(), workflowNode.getVersionCode()); + } else { + flag = true; + // 如果是结束节点,更新实例状态 + workflowInstance.setStatus(WorkflowInstanceStatus.DONE); // 已完成 + workflowInstance.setFinishTime(new Date()); + workflowInstanceMapper.updateById(workflowInstance); + } + return flag; + } + + public void orHandleReject(Long instanceId, Integer role, Long userId, String approveOpinion) { + + //审批流处理== + WorkflowNode workflowNode = workflowInstanceMapper.instanceCurrentNode(instanceId); + //1.获取当前节点是由角色还是用户审批 + if (AssigneeType.USER.equals(workflowNode.getApproveType())) { + //用户 + WorkflowTask workflowTask = workflowTaskMapper.selectOne(new QueryWrapper() + .lambda() + .eq(WorkflowTask::getAssigneeType, AssigneeType.USER) + .eq(WorkflowTask::getInstanceId, instanceId) + .eq(WorkflowTask::getNodeId, workflowNode.getId()) + .eq(WorkflowTask::getAssignee, userId) + .eq(WorkflowTask::getStatus, WorkflowTaskStatus.TODO)); + //审批 + this.reject(workflowTask.getId(), String.valueOf(userId), approveOpinion); + } else { + //角色---> 将该节点所有成员出现的角色置为驳回中,再流转到下个节点 + List workflowTasks = workflowTaskMapper.administerRoleTasks(userId, instanceId, workflowNode.getId(), role); + for (WorkflowTask workflowTask : workflowTasks) { + // 更新任务状态 + workflowTask.setStatus(WorkflowTaskStatus.REJECT); // 驳回中 + workflowTask.setApproveOpinion(approveOpinion); + workflowTask.setEndTime(DateFormatUtil.format(new Date(), DateFormatUtil.FMT_sdf14_L24)); + workflowTask.setCheckId(userId); + workflowTaskMapper.updateById(workflowTask); + } + + WorkflowInstance instance = workflowInstanceMapper.selectById(instanceId); + instance.setStatus(WorkflowInstanceStatus.REJECTING); + workflowInstanceMapper.updateById(instance); + + // 该人不在的角色改为已结束 + List workflowTasks1 = workflowTaskMapper.administerNotInRoleTask(role, userId, instanceId, workflowNode.getId()); + for (WorkflowTask workflowTask : workflowTasks1) { + workflowTask.setStatus(WorkflowTaskStatus.CANCEL); + workflowTaskMapper.updateById(workflowTask); + } + } + } + + /** + * 创建任务 + * + * @param instanceId + * @param mappingId + * @param nodeKey workflow_node的 nodeKey + */ + public void createTasks(Long instanceId, Long mappingId, String nodeKey, Integer versionCode) { + + //查询节点 + WorkflowNode node = workflowNodeMapper.selectOne(new QueryWrapper() + .lambda() + .eq(WorkflowNode::getWorkflowId, mappingId) + .eq(WorkflowNode::getVersionCode, versionCode) + .eq(WorkflowNode::getNodeKey, nodeKey)); + if (node == null) { + throw new RuntimeException("节点不存在"); + } + + // 根据节点配置创建任务 + if (AssigneeType.ROLE.equals(node.getApproveType())) { // 角色审批 + // 从approveConfig中获取角色ID列表 + String[] roleIds = node.getApproveConfig().split(","); + for (String roleId : roleIds) { + // 这里需要根据角色ID获取用户列表,简化处理直接创建任务 + WorkflowTask task = new WorkflowTask(); + task.setInstanceId(instanceId); + task.setNodeId(node.getId()); + task.setNodeKey(node.getNodeKey()); + task.setNodeName(TaskType.CHECK); + task.setAssignee(Long.valueOf(roleId)); + task.setAssigneeType(AssigneeType.ROLE); // 角色 + task.setStatus(WorkflowTaskStatus.TODO); // 待处理 + workflowTaskMapper.insert(task); + } + } else if (AssigneeType.USER.equals(node.getApproveType())) { // 用户审批 + // 从approveConfig中获取用户ID列表 + String[] userIds = node.getApproveConfig().split(","); + +// //若同一审批人在流程中重复出现,默认只审批一次---->上个节点这个人审批过(指定用户情况,可多个),下个节点只有他自己的话,则直接跳过 +// if (userIds.length == 1) { +// int count = workflowTaskMapper.selectCount(new QueryWrapper() +// .lambda() +// .eq(WorkflowTask::getInstanceId, instanceId) +// .eq(WorkflowTask::getAssignee, userIds[0]) +// .eq(WorkflowTask::getStatus, WorkflowTaskStatus.DONE)); +// if (count > 0) { +// //当前审批 之前这个人已经审批通过了,直接跳过 +// WorkflowTask task = new WorkflowTask(); +// task.setInstanceId(instanceId); +// task.setNodeId(node.getId()); +// task.setNodeKey(node.getNodeKey()); +// task.setNodeName(TaskType.CHECK); +// task.setAssignee(Long.valueOf(userIds[0])); +// task.setAssigneeType(AssigneeType.USER); // 用户 +// task.setStatus(WorkflowTaskStatus.DONE); // 已处理 +// workflowTaskMapper.insert(task); +// +// //查询下个结点,创建新的审批工作 +// createTasks(instanceId, mappingId, node.getNextNode(), versionCode); +// } +// } + + for (String userId : userIds) { + WorkflowTask task = new WorkflowTask(); + task.setInstanceId(instanceId); + task.setNodeId(node.getId()); + task.setNodeKey(node.getNodeKey()); + task.setNodeName(TaskType.CHECK); + task.setAssignee(Long.valueOf(userId)); + task.setAssigneeType(AssigneeType.USER); // 用户 + task.setStatus(WorkflowTaskStatus.TODO); // 待处理 + workflowTaskMapper.insert(task); + } + } + } + + /** + * 创建下一个节点的任务 + */ + private void createNextTasks(WorkflowInstance instance, WorkflowNode currentNode, Integer versionCode) { + // 获取下一个节点 + String nextNodeKey = currentNode.getNextNode(); + + WorkflowNode nextNode = workflowNodeMapper.selectOne(new QueryWrapper() + .lambda() + .eq(WorkflowNode::getWorkflowId, instance.getWorkflowId()) + .eq(WorkflowNode::getVersionCode, versionCode) + .eq(WorkflowNode::getNodeKey, nextNodeKey)); + + //下一个节点流存在 创建节点流 + if (nextNode != null) { + instance.setCurrentNode(nextNode.getId()); + workflowInstanceMapper.updateById(instance); + createTasks(instance.getId(), instance.getWorkflowId(), nextNode.getNodeKey(), versionCode); + } else { + // 如果是结束节点,更新实例状态 + instance.setStatus(WorkflowInstanceStatus.DONE); // 已完成 + instance.setFinishTime(new Date()); + workflowInstanceMapper.updateById(instance); + } + } + +// /** +// * 处理会签节点 +// */ +// private void handleSignTask(Long instanceId, Long nodeId, boolean isApprove) { +// // 查询当前节点所有任务 +// List tasks = workflowTaskMapper.selectList(new QueryWrapper() +// .lambda() +// .eq(WorkflowTask::getInstanceId, instanceId) +// .eq(WorkflowTask::getNodeId, nodeId)); +// +// // 统计已处理任务 +// long processedCount = tasks.stream() +// .filter(t -> WorkflowTaskStatus.DONE.equals(t.getStatus()) || WorkflowTaskStatus.REJECT.equals(t.getStatus())) +// .count(); +// +// // 如果有驳回,直接驳回 +// if (!isApprove) { +// // 清除当前活动任务 +// clearActiveTasks(instanceId, nodeId); +// // 创建驳回任务(简化处理,直接结束流程) +// WorkflowInstance instance = workflowInstanceMapper.selectById(instanceId); +// instance.setStatus(WorkflowInstanceStatus.END); // 已终止 +// instance.setFinishTime(new Date()); +// workflowInstanceMapper.updateById(instance); +// return; +// } +// +// // 如果所有任务都已处理,继续下一个节点 +// if (processedCount == tasks.size()) { +// WorkflowInstance instance = workflowInstanceMapper.selectById(instanceId); +// WorkflowNode currentNode = workflowNodeMapper.selectById(nodeId); +// createNextTasks(instance, currentNode); +// } +// } + + /** + * 处理或签节点 + */ + private void handleOrSignTask(Long instanceId, Long nodeId, boolean isApprove, Integer versionCode) { + if (isApprove) { + // 只要有一个通过,就清除其他任务,继续下一个节点 + clearActiveTasks(instanceId, nodeId); + WorkflowInstance instance = workflowInstanceMapper.selectById(instanceId); + WorkflowNode currentNode = workflowNodeMapper.selectById(nodeId); + createNextTasks(instance, currentNode, versionCode); + } else { + // 查询当前节点所有任务 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("instance_id", instanceId) + .eq("node_id", nodeId); + List tasks = workflowTaskMapper.selectList(queryWrapper); + + // 统计已处理任务 + long processedCount = tasks.stream() + .filter(t -> WorkflowTaskStatus.DONE.equals(t.getStatus()) || WorkflowTaskStatus.REJECT.equals(t.getStatus())) + .count(); + + // 如果所有任务都驳回中,结束流程 + if (processedCount == tasks.size()) { + WorkflowInstance instance = workflowInstanceMapper.selectById(instanceId); + instance.setStatus(WorkflowInstanceStatus.END); // 已终止 + instance.setFinishTime(new Date()); + workflowInstanceMapper.updateById(instance); + } + } + } + + /** + * 清除当前活动任务 或签 or 驳回 + */ + private void clearActiveTasks(Long instanceId, Long nodeId) { + + // 待处理 + List activeTasks = workflowTaskMapper.selectList(new QueryWrapper() + .lambda() + .eq(WorkflowTask::getInstanceId, instanceId) + .eq(WorkflowTask::getNodeId, nodeId) + .eq(WorkflowTask::getStatus, WorkflowTaskStatus.TODO)); + + //或签---清除该任务下其他用户的审批操作 + for (WorkflowTask task : activeTasks) { + task.setStatus(WorkflowTaskStatus.CANCEL); // 已结束 + task.setEndTime(DateFormatUtil.format(new Date(), DateFormatUtil.FMT_sdf14_L24)); + workflowTaskMapper.updateById(task); + } + } + +// /** +// * 记录历史 +// */ +// private void recordHistory(WorkflowTask task, String status) { +// WorkflowHistory history = new WorkflowHistory(); +// history.setInstanceId(task.getInstanceId()); +// history.setNodeId(task.getNodeId()); +// history.setNodeKey(task.getNodeKey()); +// history.setNodeName(task.getNodeName()); +// history.setAssignee(task.getAssignee()); +// history.setAssigneeType(task.getAssigneeType()); +// history.setStatus(status); +// history.setApproveOpinion(task.getApproveOpinion()); +// workflowHistoryMapper.insert(history); +// } + + + @Override + @Transactional(rollbackFor = Exception.class) + public WorkflowInstance startWorkflow(Long memberId, String applyName, String roleType) { + + Long mappingId = academyPermissionMappingMapper.permissionMappingId(memberId, applyName); + + AcademyPermissionMappingDO academyPermissionMappingDO = academyPermissionMappingMapper.selectById(mappingId); + + if (null == mappingId) { + throw new HttpException(50005); + } + + // 获取该工作流的开始节点 + WorkflowNode startNode = workflowNodeMapper.selectOne(new QueryWrapper() + .lambda() + .eq(WorkflowNode::getWorkflowId, mappingId) + .eq(WorkflowNode::getVersionCode, academyPermissionMappingDO.getVersionCode()) + .isNull(WorkflowNode::getPrevNode)); + + if (null == startNode) { + throw new HttpException(50005); + } + + // 某人创建工作流实例 ---> 发起审批 + WorkflowInstance instance = new WorkflowInstance(); + instance.setWorkflowId(mappingId); + instance.setApplyType(applyName); + instance.setApplyId(memberId); + instance.setStatus(WorkflowInstanceStatus.DOING); // 运行中 + instance.setCurrentNode(startNode.getId()); // workNode的id + instance.setVersionCode(academyPermissionMappingDO.getVersionCode()); + workflowInstanceMapper.insert(instance); + + if (startNode == null) { + throw new RuntimeException("未找到开始节点"); + } + + WorkflowTask workflowTask = new WorkflowTask(); + workflowTask.setInstanceId(instance.getId()); + workflowTask.setNodeName(TaskType.COMMIT); + workflowTask.setAssignee(memberId); + workflowTask.setStatus(WorkflowTaskStatus.COMMIT); + workflowTask.setCreateDate(LocalDateTime.now()); + workflowTask.setAssigneeType(roleType); + workflowTaskMapper.insert(workflowTask); + + // 创建第一个任务 实例id mappingId 当前节点nodeKey + createTasks(instance.getId(), mappingId, startNode.getNodeKey(), academyPermissionMappingDO.getVersionCode()); + return instance; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public WorkflowInstance rejectWorkflow(Long instanceId, Long memberId, String applyName, String roleType) { + + WorkflowInstance workflowInstance = workflowInstanceMapper.selectById(instanceId); + + + WorkflowTask workflowTask = new WorkflowTask(); + workflowTask.setInstanceId(instanceId); + workflowTask.setNodeName(TaskType.COMMIT); + workflowTask.setAssignee(memberId); + workflowTask.setStatus(WorkflowTaskStatus.COMMIT); + workflowTask.setCreateDate(LocalDateTime.now()); + workflowTask.setAssigneeType(roleType); + workflowTaskMapper.insert(workflowTask); + + // 创建第一个任务 实例id mappingId 当前节点nodeKey + WorkflowNode workflowNode = workflowNodeMapper.selectById(workflowInstance.getCurrentNode()); + createTasks(instanceId, workflowInstance.getWorkflowId(), workflowNode.getNodeKey(), workflowInstance.getVersionCode()); + return workflowInstance; + } + +} \ No newline at end of file diff --git a/src/main/java/com/show/util/ActivityDetectionUtils.java b/src/main/java/com/show/util/ActivityDetectionUtils.java new file mode 100644 index 0000000..077dd30 --- /dev/null +++ b/src/main/java/com/show/util/ActivityDetectionUtils.java @@ -0,0 +1,52 @@ +package com.show.util; + +import com.tencentcloudapi.captcha.v20190722.CaptchaClient; +import com.tencentcloudapi.captcha.v20190722.models.DescribeCaptchaResultRequest; +import com.tencentcloudapi.captcha.v20190722.models.DescribeCaptchaResultResponse; +import com.tencentcloudapi.common.Credential; +import com.tencentcloudapi.common.profile.ClientProfile; +import com.tencentcloudapi.common.profile.HttpProfile; + +import javax.servlet.http.HttpServletRequest; + +public class ActivityDetectionUtils { + + /** + * 活跃度检测工具类 + * + * @throws Exception + */ + + public static DescribeCaptchaResultResponse activityDetection(HttpServletRequest request, String ticket, String randstr) { + + try { + // 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密 + // 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取 + Credential cred = new Credential(ConstantUtils.SECRET_ID, ConstantUtils.SECRET_KEY); + // 实例化一个http选项,可选的,没有特殊需求可以跳过 + HttpProfile httpProfile = new HttpProfile(); + httpProfile.setEndpoint("captcha.tencentcloudapi.com"); + // 实例化一个client选项,可选的,没有特殊需求可以跳过 + ClientProfile clientProfile = new ClientProfile(); + clientProfile.setHttpProfile(httpProfile); + // 实例化要请求产品的client对象,clientProfile是可选的 + CaptchaClient client = new CaptchaClient(cred, "", clientProfile); + // 实例化一个请求对象,每个接口都会对应一个request对象 + DescribeCaptchaResultRequest req = new DescribeCaptchaResultRequest(); + req.setCaptchaType(9L); + String ip = IpAddressUtil.getIpAddress(request); + req.setUserIp(ip); + req.setRandstr(randstr); + req.setCaptchaAppId(ConstantUtils.CAPTCHAAPP_ID); + req.setAppSecretKey(ConstantUtils.APP_SECRET_KEY); + req.setBusinessId(ConstantUtils.BUSINESS_ID); + req.setTicket(ticket); + // 返回的resp是一个DescribeCaptchaResultResponse的实例,与请求对象对应 + return client.DescribeCaptchaResult(req); + } catch (Exception e) { + + } + return null; + } + +} diff --git a/src/main/java/com/show/util/AliyunSmsUtil.java b/src/main/java/com/show/util/AliyunSmsUtil.java new file mode 100644 index 0000000..6711703 --- /dev/null +++ b/src/main/java/com/show/util/AliyunSmsUtil.java @@ -0,0 +1,211 @@ +package com.show.util; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.aliyuncs.DefaultAcsClient; +import com.aliyuncs.IAcsClient; +import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; +import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; +import com.aliyuncs.profile.DefaultProfile; +import com.aliyuncs.profile.IClientProfile; +import com.show.common.configure.AliyunSmsProperties; +import com.show.common.exception.HttpException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; + +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.util.HashMap; +import java.util.Map; + +/** + *

+ * 阿里云短信 + *

+ * + * @author DengMin + * @since 2021/1/27 + */ + +@Slf4j +@Component +public class AliyunSmsUtil { + + @Autowired + private AliyunSmsProperties aliyunSmsProperties; + + /** + * 阿里云短信 -- 验证码 + * @param phone + * @param code + * @return + */ + public SendSmsResponse send(String phone, int code) { + try { + System.setProperty("sun.net.client.defaultConnectTimeout", "10000"); + System.setProperty("sun.net.client.defaultReadTimeout", "10000"); + + //初始化acsClient,暂不支持region化 + IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", aliyunSmsProperties.getAccessKeyId(), aliyunSmsProperties.getAccessKeySecret()); + DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", aliyunSmsProperties.getProduct(), aliyunSmsProperties.getDomain()); + IAcsClient acsClient = new DefaultAcsClient(profile); + + //组装请求对象-具体描述见控制台-文档部分内容 + SendSmsRequest request = new SendSmsRequest(); + //必填:待发送手机号 + request.setPhoneNumbers(phone); + //必填:短信签名-可在短信控制台中找到 + request.setSignName("有课互联"); + //必填:短信模板-可在短信控制台中找到 + request.setTemplateCode("SMS_190945393"); + //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为 + request.setTemplateParam("{\"code\":\"" + code + "\"}"); + + //hint 此处可能会抛出异常,注意catch + SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request); + if (sendSmsResponse != null && sendSmsResponse.getCode().equals("OK")) { + return sendSmsResponse; + } + + throw new Exception(sendSmsResponse.getMessage()); + } catch (Exception e) { + log.error("---短信发送失败:" + e); + throw new HttpException(10011); + } + } + + public static void main(String[] args) { +// AliyunSmsUtil.sendNew("15201936167",000123); + } + + + /** + * 三网平台短信 + * @param msg + * @param phone + * @param templateId + */ + public void sendTemplateMsg(String msg, String phone, String templateId) { + Map map = new HashMap<>(); + try { + map.put("cpcode", aliyunSmsProperties.getCpcode()); + map.put("msg", msg); + map.put("mobiles", phone); + map.put("excode", aliyunSmsProperties.getExcode()); + map.put("templetid", templateId); + String md5source = aliyunSmsProperties.getCpcode() + msg + phone + aliyunSmsProperties.getExcode() + templateId + aliyunSmsProperties.getKey(); + map.put("sign", makeMD5(new String(md5source.getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8)).toLowerCase()); + RestTemplate restTemplate = new RestTemplate(); + ResponseEntity responseEntity = restTemplate.postForEntity(aliyunSmsProperties.getRcsapi(), map, String.class); + String body = responseEntity.getBody(); + JSONObject object = JSON.parseObject(body); + if (Integer.valueOf(object.get("resultcode").toString()) != 0) { + log.error(object.get("resultmsg").toString()); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + +// /** +// * 三网平台短信 新版本 https://flaginfo-cloud.yuque.com/staff-rozzgq/ofcpak +// * @param msg +// * @param phone +// * @param templateId +// */ +// public static void sendTemplateMsgNew(String msg, String phone, String templateId) { +// String info = null; +// try{ +// HttpClient httpclient = new HttpClient(); +// PostMethod post = new PostMethod("https://opassapi.infocloud.cc/sms/Api/SendGBK.do");// +// post.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,"gb2312"); +// post.addParameter("SpCode", templateId); +// post.addParameter("LoginName", "7db124d0baf189d1e485350xxx"); +// post.addParameter("Password", "3df50b24fb8288b9da99d16bf527e9dbf13659748534dca6e0820xxx"); +// post.addParameter("MessageContent", msg); +// post.addParameter("UserNumber", phone); +// post.addParameter("SerialNumber", ""); +// post.addParameter("f", "1"); +// httpclient.executeMethod(post); +// info = new String(post.getResponseBody(),"gbk"); +// System.out.println(info); +// }catch (Exception e) { +// e.printStackTrace(); +// } +// } + + + public void sendTemplateMsgP(String msg, String phone, String templateId) { + Map map = new HashMap<>(); + try { + map.put("cpcode", aliyunSmsProperties.getCpcode()); + map.put("msg", msg); + map.put("mobiles", phone); + map.put("excode", aliyunSmsProperties.getExcode()); + map.put("templetid", templateId); + String md5source = aliyunSmsProperties.getCpcode() + msg + phone + aliyunSmsProperties.getExcode() + templateId + aliyunSmsProperties.getKey(); + map.put("sign", makeMD5(new String(md5source.getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8)).toLowerCase()); + RestTemplate restTemplate = new RestTemplate(); + ResponseEntity responseEntity = restTemplate.postForEntity(aliyunSmsProperties.getRcsapi(), map, String.class); + String body = responseEntity.getBody(); + JSONObject object = JSON.parseObject(body); + if (Integer.valueOf(object.get("resultcode").toString()) != 0) { + log.error(object.get("resultmsg").toString()); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + public String makeMD5(String plainText) { + String re_md5 = ""; + try { + MessageDigest md = MessageDigest.getInstance("MD5"); + md.update(plainText.getBytes(StandardCharsets.UTF_8)); + byte[] b = md.digest(); + int i; + StringBuffer buf = new StringBuffer(); + for (int offset = 0; offset < b.length; offset++) { + i = b[offset]; + if (i < 0) { + i += 256; + } + + if (i < 16) { + buf.append("0"); + } + buf.append(Integer.toHexString(i)); + } + re_md5 = buf.toString().toLowerCase(); + } catch (Exception e) { + e.printStackTrace(); + } + return re_md5; + } + + +// public static String getByteString( byte[] buff_out ) +// { +// StringBuffer strBuf = new StringBuffer(buff_out.length * 3); +// strBuf.append("Length["); +// strBuf.append(buff_out.length); +// strBuf.append("];Content["); +// for ( int i = 0 ; i < buff_out.length ; ++i ) { +// int l = buff_out[i] & 0x0F; +// int h = (buff_out[i] & 0xF0) >> 4; +// +// char ll = (char) (l > 9 ? 'a' + l - 10 : '0' + l); +// char hh = (char) (h > 9 ? 'a' + h - 10 : '0' + h); +// +// strBuf.append(hh); +// strBuf.append(ll); +// strBuf.append(" "); +// } +// strBuf.append("]"); +// return strBuf.toString().toUpperCase(); +// } + +} \ No newline at end of file diff --git a/src/main/java/com/show/util/Base64Util.java b/src/main/java/com/show/util/Base64Util.java new file mode 100644 index 0000000..2433a8b --- /dev/null +++ b/src/main/java/com/show/util/Base64Util.java @@ -0,0 +1,87 @@ +package com.show.util; + +import sun.misc.BASE64Decoder; +import sun.misc.BASE64Encoder; + +import javax.imageio.stream.FileImageInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +class Base64Util { + /** + * 字符串转图片 + * @param base64Str + * @return + */ + public static byte[] decode(String base64Str){ + byte[] b = null; + BASE64Decoder decoder = new BASE64Decoder(); + try { + b = decoder.decodeBuffer(replaceEnter(base64Str)); + } catch (IOException e) { + e.printStackTrace(); + } + return b; + } + + /** + * 图片转字符串 + * @param image + * @return + */ + public static String encode(byte[] image){ + BASE64Encoder decoder = new BASE64Encoder(); + return replaceEnter(decoder.encode(image)); + } + + public static void main(String[] args) { + System.out.println(encode("http://ykhl-bigger.oss-cn-beijing.aliyuncs.com/2023-02-1618cb936b-4825-429c-9fdd-dd9d0de97ed7.jpg?x-oss-process=image/auto-orient,1/resize,m_pad,w_500,h_500/quality,Q_100/format,jpg")); + } + + public static String encode(String uri){ + BASE64Encoder encoder = new BASE64Encoder(); + return replaceEnter(encoder.encode(uri.getBytes())); + } + + /** + * + * @path 图片路径 + * @return + */ + + public static byte[] imageTobyte(String path){ + byte[] data = null; + FileImageInputStream input = null; + try { + input = new FileImageInputStream(new File(path)); + ByteArrayOutputStream output = new ByteArrayOutputStream(); + byte[] buf = new byte[1024]; + int numBytesRead = 0; + while((numBytesRead = input.read(buf)) != -1){ + output.write(buf, 0, numBytesRead); + } + data = output.toByteArray(); + output.close(); + input.close(); + + } catch (Exception e) { + e.printStackTrace(); + } + + return data; + } + + + + public static String replaceEnter(String str){ + String reg ="[\n-\r]"; + Pattern p = Pattern.compile(reg); + Matcher m = p.matcher(str); + return m.replaceAll(""); + } + + +} \ No newline at end of file diff --git a/src/main/java/com/show/util/BaseModel.java b/src/main/java/com/show/util/BaseModel.java new file mode 100644 index 0000000..de5f725 --- /dev/null +++ b/src/main/java/com/show/util/BaseModel.java @@ -0,0 +1,34 @@ +package com.show.util; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public abstract class BaseModel { + + /** + * 创建时间 + */ + @TableField(insertStrategy = FieldStrategy.NEVER, updateStrategy = FieldStrategy.NEVER, value = "create_date", fill = FieldFill.INSERT) + private LocalDateTime createDate; + + /** + * 更新时间 + */ + @JsonIgnore + @TableField(insertStrategy = FieldStrategy.NEVER, updateStrategy = FieldStrategy.NEVER, value = "update_date", fill = FieldFill.UPDATE) + private LocalDateTime updateDate; + + /** + * 删除时间 + */ + @JsonIgnore + @TableLogic + private LocalDateTime deleteDate; +} diff --git a/src/main/java/com/show/util/CodeGenerator.java b/src/main/java/com/show/util/CodeGenerator.java new file mode 100644 index 0000000..b45d200 --- /dev/null +++ b/src/main/java/com/show/util/CodeGenerator.java @@ -0,0 +1,129 @@ +package com.show.util; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException; +import com.baomidou.mybatisplus.core.toolkit.StringPool; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.generator.AutoGenerator; +import com.baomidou.mybatisplus.generator.InjectionConfig; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.FileOutConfig; +import com.baomidou.mybatisplus.generator.config.GlobalConfig; +import com.baomidou.mybatisplus.generator.config.PackageConfig; +import com.baomidou.mybatisplus.generator.config.StrategyConfig; +import com.baomidou.mybatisplus.generator.config.TemplateConfig; +import com.baomidou.mybatisplus.generator.config.po.TableInfo; +import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; +import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; + +import java.util.ArrayList; +import java.util.List; +import java.util.ResourceBundle; +import java.util.Scanner; + +/** + * Mybatis-Plus CodeGenerator + * + * @author DengMin + * @date 2020/07/02 + **/ +public class CodeGenerator { + + public static String scanner(String tip) { + StringBuilder help = new StringBuilder(); + help.append("1.生成全部表 2.输入需要生成表名"); + System.out.println(help.toString()); + Scanner scanner = new Scanner(System.in); + Integer ipt = Integer.valueOf(scanner.next()); + if(ipt == 1) { + return ""; + } else if(ipt == 2) { + StringBuilder help1 = new StringBuilder(); + help1.append("请输入" + tip + ":"); + System.out.println(help1.toString()); + Scanner scanner1 = new Scanner(System.in); + if (scanner1.hasNext()) { + String name = scanner1.next(); + if (StringUtils.isNotEmpty(name)) { + return name; + } + } + throw new MybatisPlusException("请输入正确的" + tip + "!"); + } + return scanner(tip); + } + + public static void main(String[] args) { + final ResourceBundle rb = ResourceBundle.getBundle("mybatis-plus"); + // 代码生成器 + AutoGenerator mpg = new AutoGenerator(); + + // 全局配置 + GlobalConfig gc = new GlobalConfig(); + gc.setOutputDir(System.getProperty("user.dir") + rb.getString("outputDir")); + gc.setOpen(false); + gc.setBaseResultMap(true); + gc.setBaseColumnList(true); + gc.setAuthor(rb.getString("author")); + gc.setMapperName("%sMapper"); + gc.setEntityName("%sDO"); + gc.setServiceName("%sService"); + gc.setServiceImplName("%sServiceImpl"); + gc.setControllerName("%sController"); + mpg.setGlobalConfig(gc); + + // 数据源配置 + DataSourceConfig dsc = new DataSourceConfig(); + dsc.setDbType(DbType.MYSQL); + dsc.setUrl(rb.getString("url")); + dsc.setDriverName(rb.getString("driverName")); + dsc.setUsername(rb.getString("userName")); + dsc.setPassword(rb.getString("password")); + mpg.setDataSource(dsc); + + // 包配置 + PackageConfig pc = new PackageConfig(); + pc.setParent(rb.getString("setParent")); + pc.setController("controller"); + pc.setService("service"); + pc.setServiceImpl("service.impl"); + pc.setEntity("model"); + pc.setMapper("mapper"); + mpg.setPackageInfo(pc); + + // 自定义配置 + InjectionConfig cfg = new InjectionConfig() { + @Override + public void initMap() { + // to do nothing + } + }; + List focList = new ArrayList<>(); + focList.add(new FileOutConfig("/templates/mapper.xml.ftl") { + @Override + public String outputFile(TableInfo tableInfo) { + // 自定义输入文件名称 + return System.getProperty("user.dir")+ rb.getString("mapperPath") + tableInfo.getMapperName() + StringPool.DOT_XML; + } + }); + cfg.setFileOutConfigList(focList); + mpg.setCfg(cfg); + mpg.setTemplate(new TemplateConfig().setXml(null)); + + // 策略配置 + StrategyConfig strategy = new StrategyConfig(); + strategy.setNaming(NamingStrategy.underline_to_camel); + strategy.setColumnNaming(NamingStrategy.underline_to_camel); + strategy.setSuperEntityClass(BaseModel.class); + strategy.setEntityLombokModel(true); + strategy.setRestControllerStyle(true); + String [] tables = scanner("表名,多个英文逗号分割").split(","); + if(StringUtils.isNotBlank(tables[0])) { + strategy.setInclude(tables); + } + strategy.setControllerMappingHyphenStyle(true); + mpg.setStrategy(strategy); + mpg.setTemplateEngine(new FreemarkerTemplateEngine()); + mpg.execute(); + } +} \ No newline at end of file diff --git a/src/main/java/com/show/util/ConstantUtils.java b/src/main/java/com/show/util/ConstantUtils.java new file mode 100644 index 0000000..995822a --- /dev/null +++ b/src/main/java/com/show/util/ConstantUtils.java @@ -0,0 +1,120 @@ +package com.show.util; + + +/** + * 枚举类 + */ +public class ConstantUtils { + + public static final String DELETE_SUCCESS = "删除成功"; + + public static final String DOWNLAOD_SUCCESS = "下载成功"; + + public static final String UPLOAD_FAIL = "上传失败"; + + public static final String ADD_SUCCESS = "新增成功"; + + public static final String REGISTER_SUCCESS = "注册成功"; + + public static final String COMMIT_SUCCESS = "提交成功"; + + public static final String SUCCESS_SEND_OUT = "发送成功"; + + public static final String FAIL_SEND_OUT = "发送失败"; + + public static final String SAVE_SUCCESS = "保存成功"; + + public static final String SHARE_SUCCESS = "共享成功"; + + public static final String SUBMIT_SUCCESS = "提交成功"; + + public static final String SUCCESS_UPDATE = "更新成功"; + + public static final String SUCCESS_REJECT = "已驳回"; + + public static final String SET_SUCCESS = "设置成功"; + + public static final String SUCCESS_VERIFY = "验证成功"; + + public static final String FAIL_VERIFY = "验证失败"; + + public static final String COMPANY_NAME = "TeachAI"; + + public static final String ALREADY_DONE = "已完成"; + + public static final String ALREADY_RECOMMEND = "已推荐"; + + public static final String VERIFY_NAME = "有课互联"; + + public static final String NOTICE_NAME = "有课进度通知"; + + public static final String TECH_NAME = "有课互联学习平台"; + + public static final String PUBLISH_SUCCESS = "发布成功"; + + public static final String COMPRESS_SUCCESS = "压缩成功"; + + public static final String CHECK_STATUS = "审核通过"; + + /** + * 短信模板---验证模板 + */ + public static final String TEMPLATE_CODE = "SMS_190945393"; + + /** + * 短信 地域ID + */ + public static final String REGION_ID = "cn-hangzhou"; + + /** + * 短信 RAM账号AccessKey ID + */ + public static final String ACCESS_KEY_ID = "LTAI5tLUBG4B6QxhHrhddc7p"; + + /** + * 短信 RAM账号AccessKey Secret + */ + public static final String SECRET = "eber38QGHZixTQ6bFfrd80kbg67jIP"; + + /** + * 腾讯云点播视频转码模板 + */ + public static final Long TEMPLATE_VOD = 100840L; + + /** + * 手机端token + */ + public static final String MOBILE_TERMINATE = "mobile"; + + public static final String ADMINISTER_TERMINATE = "administer"; + + + /** + * API密钥--微信参数 + */ + public static final String SECRET_ID = "AKIDOcePHvZ2C5VeYHQGSO5aqtlNxJQLqfz2"; + + public static final String SECRET_KEY = "vjHYRmrfDbw0rWxA7oFcj7F8lDPKCm8E"; + + /** + * 图形验证码 + */ + public static final Long CAPTCHAAPP_ID = 2013197365L; + + public static final String APP_SECRET_KEY = "04ABoF0ZVuMje8NP84DE5Sg**"; + + public static final Long BUSINESS_ID = 1L; + + public static final String UTF8 = "UTF-8"; + + /** + * 保利威视 + */ + public static final String POLYV_VIEWLOG_2 = "http://api.polyv.net/live/v1/statistics/{channelId}/viewlog"; + + /** + * 推送人社局图片格式 + */ + public static final String IMAGE_FORMAT = "?x-oss-process=image/auto-orient,1/resize,m_pad,w_500,h_500/quality,Q_100/format,jpg"; + +} diff --git a/src/main/java/com/show/util/DateFormatUtil.java b/src/main/java/com/show/util/DateFormatUtil.java new file mode 100644 index 0000000..6ad2af9 --- /dev/null +++ b/src/main/java/com/show/util/DateFormatUtil.java @@ -0,0 +1,124 @@ +package com.show.util; + +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZoneOffset; +import java.time.ZonedDateTime; +import java.util.Date; + +/** + * 处理时间工具 + * + * @author DengMin + * @date 2019/08/27 13:56 + **/ +public class DateFormatUtil { + + public final static String YEAR = "yyyy"; + public final static String FMT_sdf14_L = "yyyy-MM-dd HH:mm:ss"; + public final static String FMT_sdf14_L24 = "yyyy/MM/dd HH:mm:ss"; + public final static String FMT_sdf_hms = "HH:mm:ss"; + public final static String FMT_sdf_yMd = "yyyy-MM-dd"; + public final static String FMT_sdf_yyMMdd = "yyyy/MM/dd"; + public final static String FMT_sdf_yM = "yyyy-M"; + public final static String FMT_sdf_yMM = "yyyy-MM"; + public final static String FMT_sdf_Hm = "H:mm"; + public final static String FMT_sdf_HHmm = "HH:mm"; + public final static String cron = "s m H d M ? yyyy"; + + /** + * Date转String,自定义格式 + * @param date + * @param pattern + * @return + */ + public static String format(Date date, String pattern) { + try { + SimpleDateFormat sdf = new SimpleDateFormat(pattern); + return sdf.format(date); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * LocalDateTime转String,自定义格式 + * @param localDateTime + * @param pattern + * @return + */ + public static String format(LocalDateTime localDateTime, String pattern) { + try { + SimpleDateFormat sdf = new SimpleDateFormat(pattern); + return sdf.format(localDateTime); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * String转Date,自定义格式 + * @param date + * @param pattern + * @return + */ + public static Date parse(String date, String pattern) { + try { + SimpleDateFormat sdf = new SimpleDateFormat(pattern); + return sdf.parse(date); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 比较两个时间 + * .after 大于 + * .before 小于 + * @param d1 + * @param d2 + * @return + */ + public static boolean compare(Date d1, Date d2 ) { + return !d1.after(d2); + } + + /** + * Data转Cron + * @param date + * @return + */ + public static String getCron(Date date) { + SimpleDateFormat sdf = new SimpleDateFormat("s m H d M ? yyyy"); + return sdf.format(date); + } + + public static Date localDateTimeToDate(LocalDateTime dateTime) { + if(dateTime == null) { + return null; + } + ZoneId zoneId = ZoneId.systemDefault(); + ZonedDateTime zdt = dateTime.atZone(zoneId); + return Date.from(zdt.toInstant()); + } + + public static LocalDateTime secondToLocalDateTime(Long second) { + if(second != null) { + return LocalDateTime.ofEpochSecond(second, 0, ZoneOffset.ofHours(8)); + } + return LocalDateTime.now(); + } + + public static Long LocalDateTimeToSecond(LocalDateTime localDateTime) { + if(localDateTime != null) { + return localDateTime.atZone(ZoneOffset.ofHours(8)).toInstant().toEpochMilli(); + } + return System.currentTimeMillis(); + } + + +} diff --git a/src/main/java/com/show/util/DateUtil.java b/src/main/java/com/show/util/DateUtil.java new file mode 100644 index 0000000..7c0ef9b --- /dev/null +++ b/src/main/java/com/show/util/DateUtil.java @@ -0,0 +1,374 @@ +package com.show.util; + + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.*; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class DateUtil { + + public static Long dateDiff(String startDate, String endDate, String format) { + // 定义日期格式 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format); + + // 将字符串日期转换为LocalDate对象 + LocalDate date1 = LocalDate.parse(startDate, formatter); + LocalDate date2 = LocalDate.parse(endDate, formatter); + + // 计算日期差 + return ChronoUnit.DAYS.between(date1, date2); + } + + /** + * 获取两个日期之间的所有日期(包括开始日期和结束日期) + * + * @return 日期列表 + */ + public static List getDatesBetween(String startDateStr, String endDateStr) { + + List dates = new ArrayList<>(); + // 定义日期格式 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd"); + + // 解析字符串为 LocalDate 对象 + LocalDate startDate = LocalDate.parse(startDateStr, formatter); + LocalDate endDate = LocalDate.parse(endDateStr, formatter); + + // 使用循环遍历日期范围 + LocalDate currentDate = startDate; + while (!currentDate.isAfter(endDate)) { + dates.add(currentDate.format(formatter)); + currentDate = currentDate.plusDays(1); // 增加一天 + } + + return dates; + } + + /** + * 获取两个日期之间的所有日期(包括开始日期和结束日期) + * + * @return 日期列表 + */ + public static List getDatesBetweenUtilNow(String startDateStr, String endDateStr) { + + List dates = new ArrayList<>(); + // 定义日期格式 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd"); + + // 解析字符串为 LocalDate 对象 + LocalDate startDate = LocalDate.parse(startDateStr, formatter); + LocalDate endDate = LocalDate.parse(endDateStr, formatter); + if (!endDate.isAfter(LocalDate.now())) { + // 使用循环遍历日期范围 + LocalDate currentDate = startDate; + while (!currentDate.isAfter(endDate)) { + dates.add(currentDate.format(formatter)); + currentDate = currentDate.plusDays(1); // 增加一天 + } + } else { + // 使用循环遍历日期范围 + LocalDate currentDate = startDate; + while (!currentDate.isAfter(LocalDate.now())) { + dates.add(currentDate.format(formatter)); + currentDate = currentDate.plusDays(1); // 增加一天 + } + } + return dates; + } + + public static String dayOfWeek() { + // 获取当前日期 + LocalDate today = LocalDate.now(); + // 获取星期几 + DayOfWeek dayOfWeek = today.getDayOfWeek(); + // 转换为中文星期几 + return getChineseDayOfWeek(dayOfWeek); + } + + public static String getChineseDayOfWeek(DayOfWeek dayOfWeek) { + switch (dayOfWeek) { + case MONDAY: + return "星期一"; + case TUESDAY: + return "星期二"; + case WEDNESDAY: + return "星期三"; + case THURSDAY: + return "星期四"; + case FRIDAY: + return "星期五"; + case SATURDAY: + return "星期六"; + case SUNDAY: + return "星期天"; + default: + return "未知"; + } + } + + public static Long calculateTimeDifference(String startTimeStr, String endTimeStr) { + // 定义时间格式 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DateFormatUtil.FMT_sdf_HHmm); + + // 将字符串解析为 LocalTime 对象 + LocalTime startTime = LocalTime.parse(startTimeStr, formatter); + LocalTime endTime = LocalTime.parse(endTimeStr, formatter); + + // 计算时间差 + Duration duration = Duration.between(startTime, endTime); + + // 获取时间差的总秒数 + return Math.abs(duration.getSeconds()); + } + + /** + * 查看某天是否在某个区间内 + */ + public static boolean dateBetweenOrNot(Date date, Date startDate, Date endDate) { + + try { + // 判断日期是否在范围内 + return !date.before(startDate) && !date.after(endDate); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + + } + + /** + * 查看某天是否在某个区间内 是的话true 不是的话 false + */ + public static boolean dateBeforeAfter(String date, String compareDate, String formatter) { + + try { + Date parse = DateFormatUtil.parse(date, formatter); + Date parse2 = DateFormatUtil.parse(compareDate, formatter); + // 判断日期早晚 + return parse.before(parse2); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + public static String dateToMonth(Integer dayCnt) { + // 进行除法运算,并指定保留1位小数,使用四舍五入模式 + return new BigDecimal(dayCnt).divide(new BigDecimal(30), 1, RoundingMode.HALF_UP).toString(); + } + + /** + * 计算时间差 + */ + /** + * 计算两个时间字符串相差的小时数,保留一位小数 + * + * @param timeStr1 第一个时间字符串 + * @param timeStr2 第二个时间字符串 + * @return 两个时间相差的小时数(绝对值) + * @throws ParseException 时间格式解析异常 + * 取最小值 + */ + public static String calculateHourDifference(String timeStr1, String timeStr2, String cumulativeTime) { + try { + SimpleDateFormat sdf = new SimpleDateFormat(DateFormatUtil.FMT_sdf14_L24); + Date date1 = sdf.parse(timeStr1); + Date date2 = sdf.parse(timeStr2); + + // 计算毫秒差的绝对值 + long diffInMillies = Math.abs(date2.getTime() - date1.getTime()); + + // 转换为小时(1小时 = 3600000毫秒) + double diffInHours = diffInMillies / 3600000.0; + + // 使用DecimalFormat保留一位小数 + DecimalFormat df = new DecimalFormat("#.0"); + df.setRoundingMode(RoundingMode.HALF_UP); // 四舍五入 + + double num1 = Double.parseDouble(df.format(diffInHours)); + // 将字符串转换为double + double num2 = Double.parseDouble(cumulativeTime); + + // 取最小值 + double minValue = Math.min(num1, num2); + + // 结果可以保持为数值类型,也可以转回字符串 + return String.valueOf(minValue); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static String currentTime() { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + // 获取当前时间并格式化为字符串 + return sdf.format(new Date()); + } + + /** + * 时间烦我内 日期的时分秒在某个区间 + * + * @param targetTimeStr + * @param startTimeStr + * @param endTimeStr + * @return + */ + public static Boolean betweenDateHour(String targetTimeStr, String startTimeStr, String endTimeStr) { + + // 定义时间格式器 + DateTimeFormatter fullFormatter = DateTimeFormatter.ofPattern(DateFormatUtil.FMT_sdf14_L24); + DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm"); + + // 解析目标时间为LocalDateTime + LocalDateTime targetDateTime = LocalDateTime.parse(targetTimeStr, fullFormatter); + // 提取时间部分 + LocalTime targetTime = targetDateTime.toLocalTime(); + + // 解析时间范围 + LocalTime startTime = LocalTime.parse(startTimeStr, timeFormatter); + LocalTime endTime = LocalTime.parse(endTimeStr, timeFormatter); + + // 判断是否在范围内(包含边界) + return !targetTime.isBefore(startTime) && !targetTime.isAfter(endTime); + } + + /** + * 时间烦我内 日期的时分秒在某个区间 + * + * @param targetTimeStr + * @param startTimeStr + * @param endTimeStr + * @return + */ + public static Boolean betweenDate(String targetTimeStr, String startTimeStr, String endTimeStr) { + // 定义日期时间格式器 + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"); + DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd"); + + // 解析时间字符串为LocalDateTime对象 + LocalDateTime targetTime = LocalDateTime.parse(targetTimeStr, dateTimeFormatter); + + // 解析开始日期和结束日期为LocalDate对象 + LocalDate startDate = LocalDate.parse(startTimeStr, dateFormatter); + LocalDate endDate = LocalDate.parse(endTimeStr, dateFormatter); + + // 将开始日期转换为当天的起始时间(00:00:00) + LocalDateTime startDateTime = startDate.atStartOfDay(); + // 将结束日期转换为第二天的起始时间(00:00:00),这样包含整个结束日 + LocalDateTime endDateTime = endDate.plusDays(1).atStartOfDay(); + + // 判断目标时间是否在范围内 + return targetTime.isAfter(startDateTime) && targetTime.isBefore(endDateTime); + + } + + public static String localToString(LocalDateTime localDateTime){ + return localDateTime.toString().replace("T"," "); + } + + // 定义日期格式 + private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd"); + + /** + * 计算两个日期之间的工作日天数(排除周六和周日) + * @param startDateStr 开始日期字符串,格式为"yyyy/MM/dd" + * @param endDateStr 结束日期字符串,格式为"yyyy/MM/dd" + * @return 工作日天数 + */ + public static Integer calculateWorkdays(String startDateStr, String endDateStr) { + // 解析日期字符串为LocalDate对象 + LocalDate startDate = LocalDate.parse(startDateStr, formatter); + LocalDate endDate = LocalDate.parse(endDateStr, formatter); + + // 确保开始日期不晚于结束日期 + if (startDate.isAfter(endDate)) { + LocalDate temp = startDate; + startDate = endDate; + endDate = temp; + } + + long totalDays = ChronoUnit.DAYS.between(startDate, endDate) + 1; // 包含起止日期 + int weekends = 0; + + // 遍历每一天,统计周末天数 + LocalDate currentDate = startDate; + while (!currentDate.isAfter(endDate)) { + int dayOfWeek = currentDate.getDayOfWeek().getValue(); + // 6是周六,7是周日 + if (dayOfWeek == 6 || dayOfWeek == 7) { + weekends++; + } + currentDate = currentDate.plusDays(1); + } + + // 工作日 = 总天数 - 周末天数 + return Integer.valueOf((int) totalDays) - weekends; + } + + /** + * 计算指定年份对应的学年开始时间和结束时间,返回格式化字符串数组 + * 学年定义为: 当年9月1日 00:00:00 至 次年8月31日 23:59:59 + * + * @param year 学年的年份,例如2025表示2025学年 + * @return 返回一个包含两个字符串的数组,第一个是开始时间,第二个是结束时间 + * 格式为: yyyy/MM/dd HH:mm:ss + */ + public static String[] getSchoolYearTimeAsString(int year,int diff) { + // 定义日期时间格式化器 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"); + + // 学年开始时间:当年9月1日 00:00:00 + LocalDateTime startTime = LocalDateTime.of(year, 9, 1, 0, 0, 0); + + // 学年结束时间:次年8月31日 23:59:59 + LocalDateTime endTime = LocalDateTime.of(year + diff, 8, 31, 23, 59, 59); + + // 格式化并返回字符串数组 + return new String[]{ + startTime.format(formatter), + endTime.format(formatter) + }; + } + + /** + * 检查两个时间字符串的间隔是否超过300秒 + * @param time1 第一个时间字符串 + * @return 如果间隔超过300秒返回true,否则返回false + * @throws ParseException 时间格式解析错误 + */ + public static boolean isOver300Seconds(String time1) throws ParseException { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + + // 解析时间字符串为Date对象 + Date date1 = sdf.parse(time1); + + // 计算两个时间的毫秒差 + long timeDiffMs = Math.abs(date1.getTime() - new Date().getTime()); + + // 转换为秒并判断是否超过300秒 + long timeDiffSeconds = timeDiffMs / 1000; + return timeDiffSeconds >= 300; + } + + public static Integer currentYear(){ + return Year.now().getValue(); + } + + public static void main(String[] args) { + // 示例:计算2025学年的时间范围 + int year = 2025; + String[] schoolYearTimes = getSchoolYearTimeAsString(year,2); + + System.out.println(year + "学年开始时间: " + schoolYearTimes[0]); + System.out.println(year + "学年结束时间: " + schoolYearTimes[1]); + } +} diff --git a/src/main/java/com/show/util/DudaoConstant.java b/src/main/java/com/show/util/DudaoConstant.java new file mode 100644 index 0000000..be1760c --- /dev/null +++ b/src/main/java/com/show/util/DudaoConstant.java @@ -0,0 +1,49 @@ +package com.show.util; + +public class DudaoConstant { + + /** + * POST-1:班级基本信息信息采集接口 + */ + public static final String POST_1 = "DUDAO_POST_1_insertClassBasicInformation"; + + /** + * POST-2:学时信息采集接口 + */ + public static final String POST_2 = "DUDAO_POST_2_insertLearnDuration"; + + /** + * POST-3:考试信息采集接口 + */ + public static final String POST_3 = "DUDAO_POST_3_insertExamInformation"; + + /** + * POST-4:答疑辅导采集接口 + */ + public static final String POST_4 = "DUDAO_POST_4_insertAnswerTutor"; + + /** + * POST-5 上下游班级数据绑定接口 + */ + public static final String POST_5 = "DUDAO_POST_5_insertBindClass"; + + /** + * 调取失败 + */ + public static final String API_ERROR = "调取失败"; + + /** + * 当天没数据 + */ + public static final String NO_DATA = "NO_DATA"; + + /** + * 推送失败 + */ + public static final String PUSH_FAIL = "推送失败"; + + /** + * 推送成功 + */ + public static final String PUSH_SUCCESS = "推送成功"; +} diff --git a/src/main/java/com/show/util/EhCacheUtil.java b/src/main/java/com/show/util/EhCacheUtil.java new file mode 100644 index 0000000..1a286b6 --- /dev/null +++ b/src/main/java/com/show/util/EhCacheUtil.java @@ -0,0 +1,53 @@ +package com.show.util; + +import net.sf.ehcache.Cache; +import net.sf.ehcache.CacheManager; +import net.sf.ehcache.Element; +import org.springframework.util.ClassUtils; + +/** + *

+ * Ehcache + *

+ * + * @author DengMin + * @since 2022/8/1 + */ +public class EhCacheUtil { + + static CacheManager cacheManager = CacheManager.newInstance(ClassUtils.getDefaultClassLoader().getResource("").getPath()+"ehcache.xml"); + + /** + * 添加缓存 + * @param cacheName + * @param key + * @param value + */ + public static void putEhCache(String cacheName, String key, Object value) { + Cache cache = cacheManager.getCache(cacheName); + Element element = new Element(key, value); + cache.put(element); + } + + /** + * 获取缓存数据 + * @param cacheName + * @param key + * @return + */ + public static Object getEhCache(String cacheName, String key) { + Cache cache = cacheManager.getCache(cacheName); + Element element = cache.get(key); + return element == null ? null : element.getObjectValue(); + } + + /** + * 删除缓存 + * @param cacheName + * @param key + */ + public static void deleteEhCache(String cacheName, String key) { + Cache cache = cacheManager.getCache(cacheName); + cache.remove(key); + } +} diff --git a/src/main/java/com/show/util/EncryptString.java b/src/main/java/com/show/util/EncryptString.java new file mode 100644 index 0000000..2575e6a --- /dev/null +++ b/src/main/java/com/show/util/EncryptString.java @@ -0,0 +1,42 @@ +package com.show.util; + +import lombok.extern.slf4j.Slf4j; +import org.bouncycastle.crypto.digests.SM3Digest; +import org.bouncycastle.util.encoders.Hex; + +import java.nio.charset.StandardCharsets; + +/** + * 密码加密 + * + * @author Date: 2019/08/28 20:59 + */ +@Slf4j +public class EncryptString { + + /** + * 对字符串进行SM3哈希计算 + * @param input 待加密的字符串 + * @return 哈希结果(十六进制字符串,64位) + */ + public static String encrypt(String input) { + // 1. 创建SM3摘要计算器 + SM3Digest digest = new SM3Digest(); + + // 2. 将输入字符串转为UTF-8字节数组,更新摘要 + byte[] inputBytes = input.getBytes(StandardCharsets.UTF_8); + digest.update(inputBytes, 0, inputBytes.length); + + // 3. 计算哈希结果(32字节) + byte[] hashBytes = new byte[digest.getDigestSize()]; + digest.doFinal(hashBytes, 0); + + // 4. 将字节数组转为十六进制字符串 + return Hex.toHexString(hashBytes); + } + + + public static void main(String[] args) { + System.out.println(encrypt("catschina00002O9S8Z")); + } +} diff --git a/src/main/java/com/show/util/EncryptUtil.java b/src/main/java/com/show/util/EncryptUtil.java new file mode 100644 index 0000000..9db0ff2 --- /dev/null +++ b/src/main/java/com/show/util/EncryptUtil.java @@ -0,0 +1,35 @@ +//package com.subsidy.util; +// +//import com.amdelamar.jhash.Hash; +//import com.amdelamar.jhash.algorithms.Type; +//import com.amdelamar.jhash.exception.InvalidHashException; +// +//public class EncryptUtil { +// +// /** +// * 设置密文密码 +// * +// * @param password 原始密码 +// * @return 加密密码 +// */ +// public static String encrypt(String password) { +// char[] chars = password.toCharArray(); +// return Hash.password(chars).algorithm(Type.PBKDF2_SHA256).create(); +// } +// +// /** +// * 验证加密密码 +// * +// * @param encryptedPassword 密文密码 +// * @param plainPassword 明文密码 +// * @return 验证是否成功 +// */ +// public static boolean verify(String encryptedPassword, String plainPassword) { +// char[] chars = plainPassword.toCharArray(); +// try { +// return Hash.password(chars).algorithm(Type.PBKDF2_SHA256).verify(encryptedPassword); +// } catch (InvalidHashException e) { +// return false; +// } +// } +//} diff --git a/src/main/java/com/show/util/ExcelFormatUtils.java b/src/main/java/com/show/util/ExcelFormatUtils.java new file mode 100644 index 0000000..cff75af --- /dev/null +++ b/src/main/java/com/show/util/ExcelFormatUtils.java @@ -0,0 +1,19 @@ +package com.show.util; + +import java.util.Arrays; +import java.util.List; + +public class ExcelFormatUtils { + + + public static final List memberList = Arrays.asList("序号", "成员名称","身份证号码", "性别", "账号", "联系方式", "签到次数", "课程进度", "学习时长(小时)","学习时长(分钟)","累计有效学习时长", "答疑数", "测试成绩", "总评价"); + + public static final List signList = Arrays.asList("序号", "成员名称", "身份证号", "联系方式", "签到次数", "签到时间","最近签到ip地址","最近签到设备型号"); + + public static final List scoreList = Arrays.asList("序号", "成员名称", "身份证号码", "联系方式", "测试成绩", "测试次数","开始时间","结束时间","测评时间", "总评价"); + + public static final List answersList = Arrays.asList("序号", "提问", "答疑", "提问时间", "提问成员", "答疑时间"); + + public static final List studyLogList = Arrays.asList("开始时间","结束时间","课程","类型","学习时长","累计有效时长"); + +} diff --git a/src/main/java/com/show/util/HttpUtil.java b/src/main/java/com/show/util/HttpUtil.java new file mode 100644 index 0000000..1fc22b3 --- /dev/null +++ b/src/main/java/com/show/util/HttpUtil.java @@ -0,0 +1,461 @@ +package com.show.util; + + +import org.apache.http.Header; +import org.apache.http.HttpEntity; +import org.apache.http.NameValuePair; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpUriRequest; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.StringEntity; +//import org.apache.http.entity.mime.MultipartEntityBuilder; +//import org.apache.http.entity.mime.content.FileBody; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.*; +import java.net.URLEncoder; +import java.util.*; + +/** + * @author: sadboy + **/ + +public class HttpUtil { + private static final Logger log = LoggerFactory.getLogger(HttpUtil.class); + private static final String UTF8 = "UTF-8"; + private static final String APPLICATION_FORM_URLENCODED = "application/x-www-form-urlencoded; charset=UTF-8"; + private static final String APPLICATION_JSON = "application/json; charset=UTF-8"; + private static final String TEXT_PLAIN = "text/plain; charset=UTF-8"; + private static final String TEXT_HTML = "text/html; charset=UTF-8"; + private static final String APPLICATION_XML = "application/xml; charset=UTF-8"; + + private HttpUtil() { + } + + /** + * 向url发送get请求,当无参数时,paramMap为NULL + * @param url 请求url + * @param paramMap 需要拼接的参数 + * @return 请求返回的数据 + * @throws IOException 读写异常 + */ + public static String get(String url, Map paramMap) throws IOException { + return get(url, paramMap, UTF8); + } + + /** + * 向url发送get请求 + * @param url 请求url + * @param paramMap 需要拼接的参数 + * @param encoding 编码 + * @return 请求返回的数据 + * @throws IOException 读写异常 + */ + public static String get(String url, Map paramMap, String encoding) throws IOException { + encoding = encoding == null ? UTF8 : encoding; + url = appendUrl(url, paramMap); + return get(url, encoding, new DataParse() { + @Override + public String parseData(HttpEntity httpEntity, String encoding) throws IOException { + return EntityUtils.toString(httpEntity, encoding); + } + }); + } + + /** + * 向url发送get请求 + * @param url 请求url + * @param paramMap 需要拼接的参数 + * @param encoding 编码 + * @return 请求返回的字节数组,一般用于文件下载 + * @throws IOException 读写异常 + */ + public static byte[] getBinary(String url, Map paramMap, String encoding) throws IOException { + encoding = encoding == null ? UTF8 : encoding; + url = appendUrl(url, paramMap); + return get(url, encoding, new DataParse() { + @Override + public byte[] parseData(HttpEntity httpEntity, String encoding) throws IOException { + return EntityUtils.toByteArray(httpEntity); + } + }); + } + + + /** + * HTTP GET 内部公共请求处理逻辑 + * @param url 请求地址 + * @param encoding 编码字符集, 默认为 utf-8 + * @param dataParse 返回数据反序列化逻辑实现类 + * @return HTTP 返回的内容 + * @throws IOException 客户端和服务器读写通讯异常 + */ + private static T get(String url, String encoding, DataParse dataParse) throws IOException { + log.debug("http 请求 url: {}", url); + T result = null; + // 创建httpclient对象 + CloseableHttpClient httpClient = HttpClientBuilder.create().build(); + // 创建get方式请求对象 + HttpGet httpGet = new HttpGet(url); + httpGet.addHeader("Content-type", APPLICATION_JSON); + // 通过请求对象获取响应对象 + CloseableHttpResponse response = sendRequestAndGetResult(url, httpClient, httpGet); + // 获取结果实体 + if (null != response) { + result = dataParse.parseData(response.getEntity(), encoding); + if (!(result instanceof byte[])) { + log.debug("http 请求结果: {}", result); + } else { + Header[] headers = response.getHeaders("Content-Type"); + for (Header responseHead : headers) { + String headStr = responseHead.getValue(); + if (headStr.startsWith("application/json")) { + String json = new String((byte[]) result); + response.close(); + throw new RuntimeException(json); + } + } + } + } + try { + if (null != response) { + response.close(); + } + } catch (IOException ex) { + log.error(ex.getMessage(), ex); + } + return result; + } + + + /** + * 向url发送post请求 + * @param url 请求url + * @param paramMap 需要拼接的参数 + * @return 请求返回的数据 + * @throws IOException 读写异常 + */ + public static String postFormBody(String url, Map paramMap) throws IOException { + return postFormBody(url, paramMap, null); + } + + /** + * 向url发送post请求 + * @param url 请求url + * @param paramMap 需要拼接的参数 + * @param encoding 编码 + * @return 请求返回的数据 + * @throws IOException 读写异常 + */ + public static String postFormBody(String url, Map paramMap, String encoding) throws IOException { + return post(url, paramMap, encoding); + } + + + /** + * 向url发送post请求表单提交数据 + * @param url 请求url + * @param paramMap 表单数据 + * @param encoding 编码 + * @return 请求返回的数据 + * @throws IOException 读写异常 + */ + private static String post(String url, Map paramMap, String encoding) throws IOException { + log.debug("http 请求 url: {} , 请求参数: {}", url, appendUrl("", paramMap).replace("?", "")); + encoding = encoding == null ? UTF8 : encoding; + // 创建post方式请求对象 + HttpPost httpPost = new HttpPost(url); + // 装填参数 + List nameValuePairs = new ArrayList(); + if (paramMap != null) { + for (Map.Entry entry : paramMap.entrySet()) { + String value = entry.getValue(); + //去掉如下判断会造成String类型的value为null时 + if (value != null) { + nameValuePairs.add(new BasicNameValuePair(entry.getKey(), value)); + } + } + } + // 设置参数到请求对象中 + httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, encoding)); + // 设置header信息 + // 指定报文头【Content-type】、【User-Agent】 + httpPost.setHeader("Content-type", APPLICATION_FORM_URLENCODED); + return post(url, httpPost, encoding, new DataParse() { + @Override + public String parseData(HttpEntity httpEntity, String encoding) throws IOException { + return EntityUtils.toString(httpEntity, encoding); + } + }); + } + + /** + * 向url发送post请求发送json + * @param url 请求url + * @param json json字符串 + * @param encoding 编码 + * @return 请求返回的数据 + * @throws IOException 读写异常 + */ + public static String postJsonBody(String url, String json, String encoding) throws IOException { + log.debug("http 请求 url: {} , 请求参数: {}", url, json); + encoding = encoding == null ? UTF8 : encoding; + // 创建post方式请求对象 + HttpPost httpPost = new HttpPost(url); + // 设置参数到请求对象中 + StringEntity stringEntity = new StringEntity(json, ContentType.APPLICATION_JSON); + // Constant.UTF8 + stringEntity.setContentEncoding(encoding); + httpPost.setEntity(stringEntity); + String result = post(url, httpPost, encoding, new DataParse() { + @Override + public String parseData(HttpEntity httpEntity, String encoding) throws IOException { + return EntityUtils.toString(httpEntity, encoding); + } + }); + return result; + } + + /** + * 向url发送post请求 + * @param url 请求url + * @param httpPost httpClient + * @return 请求返回的数据 + * @throws IOException 读写异常 + */ + private static T post(String url, HttpPost httpPost, String encoding, DataParse dataParse) + throws IOException { + T result = null; + CloseableHttpResponse response = null; + // 创建httpclient对象 + CloseableHttpClient httpClient = HttpClientBuilder.create().build(); + + // 执行请求操作,并拿到结果(同步阻塞) + response = sendRequestAndGetResult(url, httpClient, httpPost); + // 获取结果实体 + // 判断网络连接状态码是否正常(0--200都数正常) + if (null != response) { + result = dataParse.parseData(response.getEntity(), encoding); + log.debug("http 请求结果: {}", result); + } + try { + if (null != response) { + response.close(); + } + } catch (IOException ex) { + log.error(ex.getMessage(), ex); + } + return result; + } + + /** + * 设置http头,发送http请求,打印请求耗时 + * @param url 请求url + * @param httpClient httpClient + * @param httpUriRequest httpUriRequest + * @return 请求返回的数据 + * @throws IOException 读写异常 + */ + private static CloseableHttpResponse sendRequestAndGetResult(String url, CloseableHttpClient httpClient, + HttpUriRequest httpUriRequest) throws IOException { + long startTime = System.currentTimeMillis(); + CloseableHttpResponse response = httpClient.execute(httpUriRequest); + long endTime = System.currentTimeMillis(); + collectAPISpendTime(url, startTime, endTime); + return response; + } + + /** + * 打印请求信息 + * @param url 请求url + * @param startTime 请求开始时间 + * @param endTime 请求结束时间 + */ + private static void collectAPISpendTime(String url, long startTime, long endTime) { + log.debug("HTTP请求耗时分析,请求URL: {} , 耗时: {} ms", url, endTime - startTime); + } + +// /** +// * 向url发送post请求上传单文件 +// * @param url 请求url +// * @param paramMap 需要表单提交的参数 +// * @param fileMap 需要上传的文件 +// * @param encoding 编码 +// * @return 请求返回的数据 +// * @throws IOException 读写异常 +// */ +// public static String postFile(String url, Map paramMap, Map fileMap, String encoding) +// throws IOException { +// if (fileMap != null) { +// Map> fileListMap = new HashMap>(); +// for (Map.Entry entry : fileMap.entrySet()) { +// File file = entry.getValue(); +// List fileList = new ArrayList(); +// fileList.add(file); +// fileListMap.put(entry.getKey(), fileList); +// } +// return postMultipleFile(url, paramMap, fileListMap, encoding); +// } +// return postMultipleFile(url, paramMap, null, encoding); +// } + +// /** +// * 向url发送post请求上传多文件 +// * 向url发送post请求上传单文件 +// * @param url 请求url +// * @param paramMap 需要表单提交的参数 +// * @param fileListMap 需要上传的文件 +// * @param encoding 编码 +// * @return 请求返回的数据 +// * @throws IOException 读写异常 +// */ +// public static String postMultipleFile(String url, Map paramMap, Map> fileListMap, +// String encoding) throws IOException { +// return postFileBody(url, paramMap, fileListMap, encoding, new DataParse() { +// @Override +// public String parseData(HttpEntity httpEntity, String encoding) throws IOException { +// return EntityUtils.toString(httpEntity, encoding); +// } +// }); +// } + +// /** +// * 向url发送post请求上传多文件 +// * 向url发送post请求上传单文件 +// * @param url 请求url +// * @param paramMap 需要表单提交的参数 +// * @param fileListMap 需要上传的文件 +// * @param encoding 编码 +// * @return 请求返回的数据 +// * @throws IOException 读写异常 +// */ +// private static T postFileBody(String url, Map paramMap, Map> fileListMap, +// String encoding, DataParse dataParse) throws IOException { +// log.debug("http 请求 url: {} , 请求参数: {}", url, appendUrl("", paramMap).replace("?", "")); +// encoding = encoding == null ? UTF8 : encoding; +// T result = null; +// CloseableHttpClient httpClient = HttpClientBuilder.create().build(); +// HttpPost httpPost = new HttpPost(url); +// MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create(); +// +// ContentType contentType = ContentType.create("text/plain", Charset.forName(encoding)); +// if (null != paramMap) { +// for (Map.Entry entry : paramMap.entrySet()) { +// entityBuilder.addTextBody(entry.getKey(), entry.getValue(), contentType); +// } +// } +// +// if (null != fileListMap) { +// for (Map.Entry> entry : fileListMap.entrySet()) { +// String key = entry.getKey(); +// List fileList = entry.getValue(); +// for (File file : fileList) { +// FileBody fileBody = new FileBody(file); +// entityBuilder.addPart(key, fileBody); +// } +// } +// } +// +// HttpEntity entity = entityBuilder.build(); +// httpPost.setEntity(entity); +// CloseableHttpResponse response = sendRequestAndGetResult(url, httpClient, httpPost); +// if (null != response) { +// result = dataParse.parseData(response.getEntity(), encoding); +// log.debug("http 请求结果: {}", result); +// } +// try { +// if (null != response) { +// response.close(); +// } +// } catch (IOException ex) { +// log.error(ex.getMessage(), ex); +// } +// return result; +// } + + + /** + * 公共数据解析接口 + * @param + */ + private interface DataParse { + /** + * 解析返回数据 + * @param httpEntity 返回实体 + * @param encoding 编码 + * @return 实际解析返回内容 + * @throws IOException io异常 + */ + T parseData(HttpEntity httpEntity, String encoding) throws IOException; + + } + + /** + * 将url与map拼接成HTTP查询字符串 + * @param url 请求url + * @param paramMap 需要拼装的map + * @return 拼装好的url + */ + public static String appendUrl(String url, Map paramMap) throws UnsupportedEncodingException { + if (paramMap == null) { + return url; + } + StringBuffer paramStringBuffer = new StringBuffer(); + Iterator> mapIterator = paramMap.entrySet().iterator(); + while (mapIterator.hasNext()) { + Map.Entry next = mapIterator.next(); + paramStringBuffer.append(next.getKey()).append("=").append(URLEncoder.encode(next.getValue(), ConstantUtils.UTF8)).append("&"); + } + String paramStr = paramStringBuffer.toString(); +// String paramStr = mapJoinNotEncode(paramMap); + if (paramStr != null && !"".equals(paramStr)) { + if (url.indexOf("?") > 0) { + if (url.endsWith("&")) { + url += paramStr.substring(0, paramStr.length() - 1); + } else { + url += "&" + paramStr.substring(0, paramStr.length() - 1); + } + } else { + url += "?" + paramStr.substring(0, paramStr.length() - 1); + } + } + return url; + } + + /** + * 把二进制写入文件 + * @param bytes + * @param path + * @throws IOException + */ + public static void writeFile(byte[] bytes, String path) throws IOException { + OutputStream os = null; + try { + // 根据绝对路径初始化文件 + File localFile = new File(path); + if (!localFile.exists()) { + boolean newFile = localFile.createNewFile(); + if (!newFile) { + throw new RuntimeException("创建文件异常,路径:" + path); + } + } + // 输出流 + os = new FileOutputStream(localFile); + os.write(bytes); + } finally { + if (os != null) { + os.close(); + } + } + } + +} + diff --git a/src/main/java/com/show/util/IpAddressUtil.java b/src/main/java/com/show/util/IpAddressUtil.java new file mode 100644 index 0000000..9ab7f8b --- /dev/null +++ b/src/main/java/com/show/util/IpAddressUtil.java @@ -0,0 +1,92 @@ +package com.show.util; + +import javax.servlet.http.HttpServletRequest; +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.InetAddress; +import java.net.URL; +import java.net.UnknownHostException; + +public class IpAddressUtil { + + /** + * 返回客户端ip + */ + public static String getIpAddress(HttpServletRequest request) { + String ipAddress = request.getHeader("x-forwarded-for"); + if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { + ipAddress = request.getHeader("Proxy-Client-IP"); + } + if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { + ipAddress = request.getHeader("WL-Proxy-Client-IP"); + } + if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { + ipAddress = request.getRemoteAddr(); + if (ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")) { + InetAddress inet = null; + try { + inet = InetAddress.getLocalHost(); + } catch (UnknownHostException e) { + e.printStackTrace(); + } + ipAddress = inet.getHostAddress(); + } + } + if (ipAddress != null && ipAddress.length() > 15) { + if (ipAddress.indexOf(",") > 0) { + ipAddress = ipAddress.substring(0, ipAddress.indexOf(",")); + } + } + return ipAddress; + } + + /** + * @Description:获取客户端外网ip + * @Author:zrt + * @Date:2019/6/13 11:23 + **/ + public static String getPublicIp() { + try { + String path = "http://subsidy.youkehulian.cn/";// 要获得html页面内容的地址 + + URL url = new URL(path);// 创建url对象 + + HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 打开连接 + + conn.setRequestProperty("contentType", "GBK"); // 设置url中文参数编码 + + conn.setConnectTimeout(5 * 1000);// 请求的时间 + + conn.setRequestMethod("GET");// 请求方式 + + InputStream inStream = conn.getInputStream(); + // readLesoSysXML(inStream); + + BufferedReader in = new BufferedReader(new InputStreamReader( + inStream, "GBK")); + StringBuffer buffer = new StringBuffer(); + String line = ""; + // 读取获取到内容的最后一行,写入 + while ((line = in.readLine()) != null) { + buffer.append(line); + } + String str = buffer.toString(); + String ipString1 = str.substring(str.indexOf("[")); + // 获取你的IP是中间的[182.149.82.50]内容 + String ipsString2 = ipString1.substring(ipString1.indexOf("[") + 1, + ipString1.lastIndexOf("]")); + //获取当前IP地址所在地址 + /* String ipsString3=ipString1.substring(ipString1.indexOf(": "),ipString1.lastIndexOf("")); + System.err.println(ipsString3);*/ + + // 返回公网IP值 + return ipsString2; + + } catch (Exception e) { + System.out.println("获取公网IP连接超时"); + return "连接超时"; + } + } +} diff --git a/src/main/java/com/show/util/JwtUtil.java b/src/main/java/com/show/util/JwtUtil.java new file mode 100644 index 0000000..6a56f3f --- /dev/null +++ b/src/main/java/com/show/util/JwtUtil.java @@ -0,0 +1,96 @@ +package com.show.util; + +import com.auth0.jwt.JWT; +import com.auth0.jwt.JWTVerifier; +import com.auth0.jwt.algorithms.Algorithm; +import com.auth0.jwt.interfaces.Claim; + +import java.util.Date; +import java.util.Map; + +/** + *

+ * Token工具 + *

+ * + * @author DengMin + * @since 2021/4/14 + */ +public class JwtUtil { + + private static Long EXPIRE_TIME = 24 * 60 * 60 * 1000L; + + private static String SECRET = "PBKDF2SHA256:64000:18:24:N:GFHZ6Y0PTEUDYCJI3K6SOOXWYEKPOZED:WBWFJMX5DF252E0HR3BF3P/D"; + + /** + * 生成Token + * @param id + * @return + */ + public static String generateToken(Long id, String type) { + Date expireDate = new Date(System.currentTimeMillis() + EXPIRE_TIME); + return JWT.create() + .withClaim("id", id) + .withClaim("type", type) + .withAudience() + .withExpiresAt(expireDate) + .withIssuedAt(new Date()) + .sign(Algorithm.HMAC256(SECRET)); + } + + /** + * 检验token是否正确 + * @param token + * @return + */ + public static boolean verifyToken(String token) { + try { + Algorithm algorithm = Algorithm.HMAC256(SECRET); + JWTVerifier verifier = JWT.require(algorithm).build(); + verifier.verify(token); + return true; + } catch (Exception e) { + return false; + } + } + + /** + * 获取用户自定义Claim集合 + * @param token + * @return + */ + public static Map getClaims(String token) { + Algorithm algorithm = Algorithm.HMAC256(SECRET); + JWTVerifier verifier = JWT.require(algorithm).build(); + Map claims = verifier.verify(token).getClaims(); + return claims; + } + + /** + * 获取过期时间 + * @param token + * @return + */ + public static Date getExpiresAt(String token) { + Algorithm algorithm = Algorithm.HMAC256(SECRET); + return JWT + .require(algorithm) + .build() + .verify(token) + .getExpiresAt(); + } + + /** + * 验证token是否失效 + * @param token + * @return true: 过期, false: 没过期 + */ + public static boolean isExpired(String token) { + try { + final Date expiration = getExpiresAt(token); + return expiration.before(new Date()); + } catch (Exception e) { + return true; + } + } +} diff --git a/src/main/java/com/show/util/Localstorage.java b/src/main/java/com/show/util/Localstorage.java new file mode 100644 index 0000000..d0ae675 --- /dev/null +++ b/src/main/java/com/show/util/Localstorage.java @@ -0,0 +1,31 @@ +package com.show.util; + +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +@RestController +public class Localstorage { + private static final ThreadLocal local = ThreadLocal.withInitial(() -> null); + private static ConcurrentHashMap map = new ConcurrentHashMap<>(); + public static void setUser(Object obj) { +// Map map = new HashMap<>(); + map.put("user", obj); +// map.put("type", type); + Localstorage.local.set(map); + } + + public static Map getMap() { + return (Map) Localstorage.local.get(); + } + + public static Object getUser() { +// Map map = (Map) Localstorage.local.get(); + return map.get("user"); + } + + public static void remove() { + Localstorage.local.remove(); + } +} diff --git a/src/main/java/com/show/util/MathUtil.java b/src/main/java/com/show/util/MathUtil.java new file mode 100644 index 0000000..06d2001 --- /dev/null +++ b/src/main/java/com/show/util/MathUtil.java @@ -0,0 +1,174 @@ +package com.show.util; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.Random; + +public class MathUtil { + + public static String getRandomCode(int randomLength) { + StringBuilder str = new StringBuilder(); + Random random = new Random(); + for (int i = 0; i < randomLength; i++) { + str.append(random.nextInt(10)); + } + return str.toString(); + } + + public static String getRandomString(int length) { + StringBuilder val = new StringBuilder(); + Random random = new Random(); + for (int i = 0; i < length; ++i) { + String charOrNum = random.nextInt(3) % 3 == 0 ? "num" : "char"; + if ("char".equalsIgnoreCase(charOrNum)) { + int temp = random.nextInt(2) % 2 == 0 ? 65 : 97; + val.append((char) (random.nextInt(26) + temp)); + } else { + val.append(random.nextInt(10)); + } + } + return val.toString(); + } + + //习题/视频 ==> 秒钟向上取整 + public static String ceilSecond(int length) { + return String.valueOf((int) Math.ceil((double) length / 60)); + } + + //习题/视频 ==> 秒钟向下取整 + public static String floorSecond(int length) { + return String.valueOf((int) Math.floor((double) length / 60)); + } + + //视频秒数处理 + public static String vodLength(int i) { + if (i > 60) { + if (i % 60 >= 10) { + return i / 60 + ":" + i % 60; + } else { + return i / 60 + ":0" + i % 60; + } + } else { + if (i % 60 >= 10) { + return "00:" + i; + } else { + return "00:0" + i; + } + } + } + + //文件大小处理 + public static String fileUnit(int i) { + if (i / 1024 > 1024) { + return String.format("%.2f", (double) i / 1024 / 1024) + "M"; + } else { + return String.format("%.2f", (double) i / 1024) + "K"; + } + } + + //单个题目秒数处理 + public static String exerciseLength(int i) { + if (i >= 60 * 60) { + return i / 60 / 60 + "时" + (i - 60 * 60) / 60 + "分" + i % 60 + "秒"; + } else if (i >= 60) { + return i / 60 + "分" + i % 60 + "秒"; + } else { + return i % 60 + "秒"; + } + } + + // 除法取整 + public static String getAvgIndex(BigDecimal counts, BigDecimal total) { + if (BigDecimal.ZERO.equals(total)) { + return "0"; + } else { + return counts.divide(total, RoundingMode.CEILING).stripTrailingZeros().toPlainString(); + } + } + + //百分比 取整 返回字符串 + public static String getPercentAvgIndex(BigDecimal counts, BigDecimal total) { + if (BigDecimal.ZERO.equals(total) || BigDecimal.ZERO.equals(counts)) { + return "0%"; + } else { + return counts.multiply(new BigDecimal(100)).divide(total, RoundingMode.CEILING).stripTrailingZeros().toPlainString() + "%"; + } + } + + //百分比 不带%输出 + public static String getPercentAvgIndexWithPercent(BigDecimal counts, BigDecimal total) { + if (BigDecimal.ZERO.equals(total) || BigDecimal.ZERO.equals(counts)) { + return "0"; + } else { + return counts.multiply(new BigDecimal(100)).divide(total, 2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString(); + } + } + + //百分比 不带%输出 + public static String getPercentAvgIndexCeil(BigDecimal counts, BigDecimal total) { + if (BigDecimal.ZERO.equals(total) || BigDecimal.ZERO.equals(counts)) { + return "0"; + } else { + return counts.multiply(new BigDecimal(100)).divide(total, 2, BigDecimal.ROUND_CEILING).stripTrailingZeros().toPlainString(); + } + } + + + //习题序号生成规则 sid 从数据取出某科目某知识点的最大的序号 + public static String getExeCode(String sid) { + Integer integer = Integer.valueOf(sid.substring(9)); + return sid.substring(0, 9) + (++integer); + } + + // 整型a 整型b a/b 向上取整 + public static Integer intDivCeil(long a, int b) { + return (int) Math.ceil((double) a / b); + } + + // 整型a 整型b a/b 向下取整 + public static Integer intDivFloorPercent(long a, int b) { + return (int) Math.floor((double) a * 100 / b); + } + + public static Integer getRandomNum(Integer i) { + Random random = new Random(); + return random.nextInt(i); + } + +// public static void main(String[] args) { +// for (int i= 1;i<100;i++){ +// System.out.println(getRandomNum(2)); +// } +// } + + public static String secToTime(int time) { + String timeStr ; + int hour; + int minute; + int second; + if (time <= 0) { + return "00:00:00"; + } else { + minute = time / 60; + if (minute < 60) { + second = time % 60; + timeStr = "00:"+unitFormat(minute) + ":" + unitFormat(second); + } else { + hour = minute / 60; + minute = minute % 60; + second = time - hour * 3600 - minute * 60; + timeStr = unitFormat(hour) + ":" + unitFormat(minute) + ":" + unitFormat(second); + } + } + return timeStr; + } + public static String unitFormat(int i) { + String retStr = null; + if (i >= 0 && i < 10) { + retStr = "0" + i; + } else { + retStr = "" + i; + } + return retStr; + } +} diff --git a/src/main/java/com/show/util/MongoUtil.java b/src/main/java/com/show/util/MongoUtil.java new file mode 100644 index 0000000..6c53fbc --- /dev/null +++ b/src/main/java/com/show/util/MongoUtil.java @@ -0,0 +1,52 @@ +//package com.subsidy.util; +// +//import lombok.Data; +//import org.springframework.stereotype.Component; +// +//import java.util.List; +//import java.util.regex.Pattern; +// +//@Data +//@Component +//public class MongoUtil { +// public Integer pageSize; +// private Integer currentPage; +// +// +// public void start(Integer currentPage, Integer pageSize, Query query) { +// pageSize = pageSize == 0 ? 10 : pageSize; +// query.limit(pageSize); +// query.skip((currentPage - 1) * pageSize); +// this.pageSize = pageSize; +// this.currentPage = currentPage; +// } +// +// public PageHelper pageHelper(long total, List list) { +// return new PageHelper(this.currentPage, total, this.pageSize, list); +// } +// +// public PageHelper pageHelper(List list) { +// return new PageHelper(this.currentPage, this.pageSize, list); +// } +// +// public PageHelper pageHelper(long currentPage, long total, long pageSize, List list) { +// return new PageHelper(currentPage, total, pageSize, list); +// } +// +// public PageHelper pageHelper(long currentPage, long pageSize, List list) { +// return new PageHelper(currentPage, pageSize, list); +// } +// +// +// /** +// * 用于模糊查询忽略大小写 +// * +// * @param string +// * @return +// */ +// public Pattern getPattern(String string) { +// Pattern pattern = Pattern.compile("^.*" + string + ".*$", Pattern.CASE_INSENSITIVE); +// return pattern; +// } +// +//} diff --git a/src/main/java/com/show/util/MyBeanUtils.java b/src/main/java/com/show/util/MyBeanUtils.java new file mode 100644 index 0000000..b6883df --- /dev/null +++ b/src/main/java/com/show/util/MyBeanUtils.java @@ -0,0 +1,29 @@ +package com.show.util; + +import org.springframework.beans.BeanWrapper; +import org.springframework.beans.BeanWrapperImpl; + +import java.beans.PropertyDescriptor; +import java.util.HashSet; +import java.util.Set; + +public class MyBeanUtils { + + public static String[] getNullPropertyNames (Object source) { + final BeanWrapper src = new BeanWrapperImpl(source); + PropertyDescriptor[] pds = src.getPropertyDescriptors(); + + Set emptyNames = new HashSet<>(); + for(PropertyDescriptor pd : pds) { + Object srcValue = src.getPropertyValue(pd.getName()); + // 此处判断可根据需求修改 + if (srcValue == null) { + emptyNames.add(pd.getName()); + } + } + String[] result = new String[emptyNames.size()]; + return emptyNames.toArray(result); + } + + +} diff --git a/src/main/java/com/show/util/MyStringUtils.java b/src/main/java/com/show/util/MyStringUtils.java new file mode 100644 index 0000000..55b0189 --- /dev/null +++ b/src/main/java/com/show/util/MyStringUtils.java @@ -0,0 +1,30 @@ +package com.show.util; + +import java.util.List; + +public class MyStringUtils { + + + /** + * 把集合改成字符串 去掉逗号 + */ + public static String changeListToString(List list) { + + StringBuffer buffer = new StringBuffer(); + if (list.size() > 0) { + int i= 0 ; + for (String s : list) { + buffer.append(s); + if (i != list.size()-1){ + buffer.append(","); + } + } + } + return buffer.toString(); + } + + + + + +} diff --git a/src/main/java/com/show/util/OSSUtils.java b/src/main/java/com/show/util/OSSUtils.java new file mode 100644 index 0000000..b6ee71c --- /dev/null +++ b/src/main/java/com/show/util/OSSUtils.java @@ -0,0 +1,117 @@ +package com.show.util; + +import cn.hutool.core.codec.Base64; +import cn.hutool.core.date.DateTime; +import com.aliyun.oss.OSS; +import com.aliyun.oss.OSSClientBuilder; + +import java.io.*; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.UUID; + +public class OSSUtils { + + // @Value("${aliyun.oss.accessKeyId}") + private static String accessKeyId = "LTAI5tLUBG4B6QxhHrhddc7p"; + + // @Value("${aliyun.oss.accessKeySecret}") + private static String secretAccessKey = "eber38QGHZixTQ6bFfrd80kbg67jIP"; + + // @Value("${aliyun.oss.endpoint}") + private static String endPoint = "oss-cn-beijing.aliyuncs.com"; + + // @Value("${aliyun.oss.bucketName}") +// private static String bucketName = "shixischool"; + private static String bucketName = "ykhl-bigger"; + + public static String uploadOneFile(String file) throws IOException { + + // 创建OSSClient实例。 + OSS ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, secretAccessKey); + + // 设置文件名 + String fileName = new DateTime().toString("yyyy-MM-dd") + + UUID.randomUUID().toString() + ".jpg"; + + // 获取文件后缀名 +// int originalFilenameStartIndex = file.indexOf('/'); +// int originalFilenameEndIndex = file.indexOf(';'); +// String originalFilename = file.substring(originalFilenameStartIndex+1,originalFilenameEndIndex); + + // 获取base64的文件 +// file = file.split(",")[1]; + + byte[] bytesFile = Base64.decode(file); + try { + // 创建PutObject请求。 + InputStream inputStream = new ByteArrayInputStream(bytesFile); + ossClient.putObject(bucketName, fileName, inputStream); + + String url = "http://" + bucketName + "." + endPoint + "/" + fileName+"?x-oss-process=image/auto-orient,1/resize,m_pad,w_500,h_500/quality,Q_100/format,jpg"; + // System.out.println(url); + return url; + } catch (Exception e) { + e.printStackTrace(); + return null; + } finally { + if (ossClient != null) { + ossClient.shutdown(); + } + } + } + + + public static String image2Base64(String imgUrl) { + URL url = null; + InputStream is = null; + ByteArrayOutputStream outStream = null; + HttpURLConnection httpUrl = null; + + try { + url = new URL(imgUrl); + httpUrl = (HttpURLConnection) url.openConnection(); + httpUrl.connect(); + httpUrl.getInputStream(); + is = httpUrl.getInputStream(); + outStream = new ByteArrayOutputStream(); + // 创建一个Buffer字符串 + byte[] buffer = new byte[1024]; + // 每次读取的字符串长度,如果为-1,代表全部读取完毕 + int len = 0; + // 使用一个输入流从buffer里把数据读取出来 + while ((len = is.read(buffer)) != -1) { + // 用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度 + outStream.write(buffer, 0, len); + } + // 对字节数组Base64编码 + return Base64Util.encode(outStream.toByteArray()); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (is != null) { + try { + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (outStream != null) { + try { + outStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (httpUrl != null) { + httpUrl.disconnect(); + } + } + return imgUrl; + } + + public static void main(String[] args) { +// System.out.println(image2Base64("https://shixischool.oss-cn-beijing.aliyuncs.com/2022-12-219df5b721-99b7-48c4-916e-e474a4eca946.jpg?x-oss-process=image/auto-orient,1/resize,m_pad,w_500,h_500/quality,Q_100/format,jpg")); + System.out.println(image2Base64("http://ykhl-bigger.oss-cn-beijing.aliyuncs.com/2023-02-1618cb936b-4825-429c-9fdd-dd9d0de97ed7.jpg?x-oss-process=image/auto-orient,1/resize,m_pad,w_500,h_500/quality,Q_100/format,jpg")); + } +} diff --git a/src/main/java/com/show/util/PDFUtil.java b/src/main/java/com/show/util/PDFUtil.java new file mode 100644 index 0000000..2fbf668 --- /dev/null +++ b/src/main/java/com/show/util/PDFUtil.java @@ -0,0 +1,169 @@ +package com.show.util; + +import com.itextpdf.text.*; +import com.itextpdf.text.pdf.BaseFont; +import com.itextpdf.text.pdf.PdfPTable; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.nio.charset.StandardCharsets; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; +import java.util.Date; + +@Slf4j +@Component +public class PDFUtil { + + static BaseFont baseFont; + + { + try { + baseFont = BaseFont.createFont("https://zhongzhi-cms.oss-cn-shanghai.aliyuncs.com/STSONG.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static void tableStyle(PdfPTable table, int[] cellsWidth) throws DocumentException { + table.setWidths(cellsWidth); + table.setWidthPercentage(100); + table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER); + table.getDefaultCell().setVerticalAlignment(Element.ALIGN_MIDDLE); + table.getDefaultCell().setFixedHeight(30); + table.getDefaultCell().setBackgroundColor(BaseColor.BLUE); + table.getDefaultCell().setPadding(0); + table.getDefaultCell().setBorderWidth(0); + } + + /** + * 流化下载 + * + * @param bytes + * @param filename + */ + public static void renderPdf(final byte[] bytes, final String filename, String type) { + ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + HttpServletResponse response = servletRequestAttributes.getResponse(); + initResponseHeader(response, "application/" + type); + setFileDownloadHeader(response, filename, "." + type); + if (null != bytes) { + try { + response.getOutputStream().write(bytes); + response.getOutputStream().flush(); + } catch (IOException e) { + throw new IllegalArgumentException(e); + } + } + } + + /** + * 分析并设置contentType与headers. + */ + private static HttpServletResponse initResponseHeader(HttpServletResponse response, final String contentType, final String... headers) { + // 分析headers参数 + String encoding = "utf-8"; + boolean noCache = true; + for (String header : headers) { + String headerName = StringUtils.substringBefore(header, ":"); + String headerValue = StringUtils.substringAfter(header, ":"); + if (StringUtils.equalsIgnoreCase(headerName, "utf-8")) { + encoding = headerValue; + } else if (StringUtils.equalsIgnoreCase(headerName, "no-cache")) { + noCache = Boolean.parseBoolean(headerValue); + } else { + throw new IllegalArgumentException(headerName + "不是一个合法的header类型"); + } + } + // 设置headers参数 + String fullContentType = contentType + ";charset=" + encoding; + response.setContentType(fullContentType); + if (noCache) { + // Http 1.0 header + response.setDateHeader("Expires", 0); + response.addHeader("Pragma", "no-cache"); + // Http 1.1 header + response.setHeader("Cache-Control", "no-cache"); + } + return response; + } + + /** + * 设置让浏览器弹出下载对话框的Header. + * + * @param + */ + public static void setFileDownloadHeader(HttpServletResponse response, String fileName, String fileType) { + try { + // 中文文件名支持 + String encodedfileName = new String(fileName.getBytes(StandardCharsets.UTF_8), "ISO8859-1"); + response.setHeader("Content-Disposition", "attachment; filename=\"" + encodedfileName + fileType + "\""); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + + public static String idCard2Gender(String idCard) { + int genderDigit = Integer.parseInt(idCard.substring(16, 17)); + return (genderDigit % 2 == 0) ? "女" : "男"; + } + + public static Integer birthDate2Age(String birthDateStr){ + if (birthDateStr == null || birthDateStr.trim().isEmpty()) { + return -1; + } + + try { + // 定义日期格式(yyyy/MM/dd) + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd"); + // 解析出生日期 + LocalDate birthDate = LocalDate.parse(birthDateStr, formatter); + // 获取当前日期 + LocalDate currentDate = LocalDate.now(); + + // 计算基础年龄 + int age = currentDate.getYear() - birthDate.getYear(); + + // 校验月份和日期,调整年龄 + if (currentDate.getMonthValue() < birthDate.getMonthValue()) { + age--; + } else if (currentDate.getMonthValue() == birthDate.getMonthValue()) { + if (currentDate.getDayOfMonth() < birthDate.getDayOfMonth()) { + age--; + } + } + + // 防止出生日期异常(如未来日期) + return age < 0 ? -1 : age; + } catch (DateTimeParseException e) { + // 日期格式错误(如 "2001/13/03" 或 "2001-01-03") + return -1; + } + } + + public static String idCard2BirthDate(String idCard) { + if (idCard == null || idCard.length() != 18) { + throw new IllegalArgumentException("身份证号码不合法"); + } + + String birthDateStr = idCard.substring(6, 14); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + try { + Date birthDate = sdf.parse(birthDateStr); + SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy/MM/dd"); + return outputFormat.format(birthDate); + } catch (Exception e) { + throw new IllegalArgumentException("身份证号码中的出生日期不合法"); + } + } + + +} diff --git a/src/main/java/com/show/util/PageHelper.java b/src/main/java/com/show/util/PageHelper.java new file mode 100644 index 0000000..a508dab --- /dev/null +++ b/src/main/java/com/show/util/PageHelper.java @@ -0,0 +1,29 @@ +package com.show.util; + +import lombok.Data; + +import java.util.List; + +@Data +public class PageHelper { + + private long currentPage; + private long total; + private long pageSize; + private List list; + + public PageHelper(long pageNum, long total, long pageSize, List list) { + this.currentPage = pageNum; + this.total = total; + this.pageSize = pageSize; + this.list = list; + } + + public PageHelper(long pageNum, long pageSize, List list) { + this.currentPage = pageNum; + this.pageSize = pageSize; + this.list = list; + } + + +} diff --git a/src/main/java/com/show/util/PolyvUtils.java b/src/main/java/com/show/util/PolyvUtils.java new file mode 100644 index 0000000..e94c48d --- /dev/null +++ b/src/main/java/com/show/util/PolyvUtils.java @@ -0,0 +1,31 @@ +package com.show.util; + +import net.polyv.live.v1.util.LiveSignUtil; + +import java.io.UnsupportedEncodingException; +import java.security.NoSuchAlgorithmException; + +public class PolyvUtils { + + /** + * 学生端--生成保利威视直播观看地址 + */ + public static String liveSign(String userId, String channelId){ + + //根据实际情况设置userid + String ts = String.valueOf(System.currentTimeMillis()); + String url = "https://live.polyv.cn/watch/"+channelId; + String signText = "03sqxr97fo"+ userId +"03sqxr97fo"+ts; + try { + String sign = LiveSignUtil.md5Hex(signText); + url += "?userid="+userId+"&ts="+ts+"&sign="+sign; + return url; + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/com/show/util/RandomUtil.java b/src/main/java/com/show/util/RandomUtil.java new file mode 100644 index 0000000..9c6eba5 --- /dev/null +++ b/src/main/java/com/show/util/RandomUtil.java @@ -0,0 +1,83 @@ +package com.show.util; + +import cn.hutool.core.lang.UUID; + +import java.util.Date; +import java.util.Random; + +public class RandomUtil { + + public static int getCode() { + return (int)((Math.random() * 9 + 1) * 100000); + } + + public static String randomPass(Integer count) { + StringBuffer stringBuffer = new StringBuffer(); + Random random = new Random(new Date().getTime()); + String flag = type[random.nextInt(type.length)]; + int length = count; + for (int i = 0; i < length; i++) { + switch (flag) { + case "word": + stringBuffer.append(word[random.nextInt(word.length)]); + break; + case "num": + stringBuffer.append(num[random.nextInt(num.length)]); + break; + case "symbol": + stringBuffer.append(symbol[random.nextInt(symbol.length)]); + break; + default: + break; + } + flag = type[random.nextInt(type.length)]; + } + return stringBuffer.toString(); + } + + + public static String getRandomCode(int randomLength) { + StringBuilder str = new StringBuilder(); + Random random = new Random(); + for (int i = 0; i < randomLength; i++) { + str.append(random.nextInt(10)); + } + return str.toString(); + } + + + /** + * 随机生成订单号 + */ + public static String randomOrderNumber(){ + return UUID.fastUUID().toString().replace("-","").substring(0,29); + } + + public static void main(String[] args) { + System.out.println(randomOrderNumber()); + } + + + public final static String[] type = { + "word", "num", "symbol" + }; + + public final static String[] word = { + "a", "b", "c", "d", "e", "f", "g", + "h", "j", "k", "m", "n", + "p", "q", "r", "s", "t", + "u", "v", "w", "x", "y", "z", + "A", "B", "C", "D", "E", "F", "G", + "H", "J", "K", "M", "N", + "P", "Q", "R", "S", "T", + "U", "V", "W", "X", "Y", "Z" + }; + + public final static String[] num = { + "1", "2", "3", "4", "5", "6", "7", "8", "9" + }; + + public final static String[] symbol = { + "!", "@", "#", "$", "%", "&" + }; +} diff --git a/src/main/java/com/show/util/RedisUtil.java b/src/main/java/com/show/util/RedisUtil.java new file mode 100644 index 0000000..7b71fbc --- /dev/null +++ b/src/main/java/com/show/util/RedisUtil.java @@ -0,0 +1,620 @@ +package com.show.util; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.BoundListOperations; +import org.springframework.data.redis.core.Cursor; +import org.springframework.data.redis.core.RedisCallback; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ScanOptions; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; + +/** + *

+ * redisTemplate封装 + *

+ * + * @author DengMin + * @since 2020/12/17 + */ + +@Component +public class RedisUtil { + + @Autowired + private RedisTemplate redisTemplate; + + public RedisUtil(RedisTemplate redisTemplate) { + this.redisTemplate = redisTemplate; + } + + /** + * 指定缓存失效时间 + * @param key 键 + * @param time 时间(秒) + * @return + */ + public boolean expire(String key,long time){ + try { + if(time>0){ + redisTemplate.expire(key, time, TimeUnit.SECONDS); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 根据key 获取过期时间 + * @param key 键 不能为null + * @return 时间(秒) 返回0代表为永久有效 + */ + public long getExpire(String key){ + return redisTemplate.getExpire(key,TimeUnit.SECONDS); + } + + /** + * 判断key是否存在 + * @param key 键 + * @return true 存在 false不存在 + */ + public boolean hasKey(String key){ + try { + return redisTemplate.hasKey(key); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 删除缓存 + * @param key 可以传一个值 或多个 + */ + @SuppressWarnings("unchecked") + public void del(String ... key){ + if(key!=null&&key.length>0){ + if(key.length==1){ + redisTemplate.delete(key[0]); + }else{ + redisTemplate.delete(CollectionUtils.arrayToList(key)); + } + } + } + + /** + * 删除缓存 + * @param key 集合数据 + */ + public void del(Set key) { + if (key != null && key.size() > 0) { + redisTemplate.delete(key); + } + } + + //============================String============================= + /** + * 普通缓存获取 + * @param key 键 + * @return 值 + */ + public Object get(String key){ + return key==null?null:redisTemplate.opsForValue().get(key); + } + + /** + * 普通缓存放入 + * @param key 键 + * @param value 值 + * @return true成功 false失败 + */ + public boolean set(String key,Object value) { + try { + redisTemplate.opsForValue().set(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 普通缓存放入并设置时间 + * @param key 键 + * @param value 值 + * @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期 + * @return true成功 false 失败 + */ + public boolean set(String key,Object value,long time){ + try { + if(time>0){ + redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS); + }else{ + set(key, value); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 递增 + * @param key 键 + * @param delta 要增加几(大于0) + * @return + */ + public long incr(String key, long delta){ + if(delta<0){ + throw new RuntimeException("递增因子必须大于0"); + } + return redisTemplate.opsForValue().increment(key, delta); + } + + /** + * 递减 + * @param key 键 + * @param delta 要减少几(小于0) + * @return + */ + public long decr(String key, long delta){ + if(delta<0){ + throw new RuntimeException("递减因子必须大于0"); + } + return redisTemplate.opsForValue().increment(key, -delta); + } + + //================================Map================================= + /** + * HashGet + * @param key 键 不能为null + * @param item 项 不能为null + * @return 值 + */ + public Object hget(String key,String item){ + return redisTemplate.opsForHash().get(key, item); + } + + /** + * 获取hashKey对应的所有键值 + * @param key 键 + * @return 对应的多个键值 + */ + public Map hmget(String key){ + return redisTemplate.opsForHash().entries(key); + } + + /** + * HashSet + * @param key 键 + * @param map 对应多个键值 + * @return true 成功 false 失败 + */ + public boolean hmset(String key, Map map){ + try { + redisTemplate.opsForHash().putAll(key, map); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * HashSet 并设置时间 + * @param key 键 + * @param map 对应多个键值 + * @param time 时间(秒) + * @return true成功 false失败 + */ + public boolean hmset(String key, Map map, long time){ + try { + redisTemplate.opsForHash().putAll(key, map); + if(time>0){ + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 向一张hash表中放入数据,如果不存在将创建 + * @param key 键 + * @param item 项 + * @param value 值 + * @return true 成功 false失败 + */ + public boolean hset(String key,String item,Object value) { + try { + redisTemplate.opsForHash().put(key, item, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 向一张hash表中放入数据,如果不存在将创建 + * @param key 键 + * @param item 项 + * @param value 值 + * @param time 时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间 + * @return true 成功 false失败 + */ + public boolean hset(String key,String item,Object value,long time) { + try { + redisTemplate.opsForHash().put(key, item, value); + if(time>0){ + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 删除hash表中的值 + * @param key 键 不能为null + * @param item 项 可以使多个 不能为null + */ + public void hdel(String key, Object... item){ + redisTemplate.opsForHash().delete(key,item); + } + + /** + * 判断hash表中是否有该项的值 + * @param key 键 不能为null + * @param item 项 不能为null + * @return true 存在 false不存在 + */ + public boolean hHasKey(String key, String item){ + return redisTemplate.opsForHash().hasKey(key, item); + } + + /** + * hash递增 如果不存在,就会创建一个 并把新增后的值返回 + * @param key 键 + * @param item 项 + * @param by 要增加几(大于0) + * @return + */ + public double hincr(String key, String item,double by){ + return redisTemplate.opsForHash().increment(key, item, by); + } + + /** + * hash递减 + * @param key 键 + * @param item 项 + * @param by 要减少记(小于0) + * @return + */ + public double hdecr(String key, String item,double by){ + return redisTemplate.opsForHash().increment(key, item,-by); + } + + //============================set============================= + /** + * 根据key获取Set中的所有值 + * @param key 键 + * @return + */ + public Set sGet(String key){ + try { + return redisTemplate.opsForSet().members(key); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 根据value从一个set中查询,是否存在 + * @param key 键 + * @param value 值 + * @return true 存在 false不存在 + */ + public boolean sHasKey(String key,Object value){ + try { + return redisTemplate.opsForSet().isMember(key, value); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将数据放入set缓存 + * @param key 键 + * @param values 值 可以是多个 + * @return 成功个数 + */ + public long sSet(String key, Object...values) { + try { + return redisTemplate.opsForSet().add(key, values); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 将set数据放入缓存 + * @param key 键 + * @param time 时间(秒) + * @param values 值 可以是多个 + * @return 成功个数 + */ + public long sSetAndTime(String key,long time,Object...values) { + try { + Long count = redisTemplate.opsForSet().add(key, values); + if(time>0) { + expire(key, time); + } + return count; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 获取set缓存的长度 + * @param key 键 + * @return + */ + public long sGetSetSize(String key){ + try { + return redisTemplate.opsForSet().size(key); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 移除值为value的 + * @param key 键 + * @param values 值 可以是多个 + * @return 移除的个数 + */ + public long setRemove(String key, Object ...values) { + try { + Long count = redisTemplate.opsForSet().remove(key, values); + return count; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + //===============================list================================= + + /** + * 获取list缓存的内容 + * @param key 键 + * @param start 开始 + * @param end 结束 0 到 -1代表所有值 + * @return + */ + public List lGet(String key, long start, long end){ + try { + return redisTemplate.opsForList().range(key, start, end); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 获取list缓存的长度 + * @param key 键 + * @return + */ + public long lGetListSize(String key){ + try { + return redisTemplate.opsForList().size(key); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 通过索引 获取list中的值 + * @param key 键 + * @param index 索引 index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推 + * @return + */ + public Object lGetIndex(String key,long index){ + try { + return redisTemplate.opsForList().index(key, index); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 将list放入缓存 + * @param key 键 + * @param value 值 + * @return + */ + public boolean lSet(String key, Object value) { + try { + redisTemplate.opsForList().rightPush(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将list放入缓存 + * @param key 键 + * @param value 值 + * @param time 时间(秒) + * @return + */ + public boolean lSet(String key, Object value, long time) { + try { + redisTemplate.opsForList().rightPush(key, value); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将list放入缓存 + * @param key 键 + * @param value 值 + * @return + */ + public boolean lSet(String key, List value) { + try { + redisTemplate.opsForList().rightPushAll(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将list放入缓存 + * @param key 键 + * @param value 值 + * @param time 时间(秒) + * @return + */ + public boolean lSet(String key, List value, long time) { + try { + redisTemplate.opsForList().rightPushAll(key, value); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 根据索引修改list中的某条数据 + * @param key 键 + * @param index 索引 + * @param value 值 + * @return + */ + public boolean lUpdateIndex(String key, long index,Object value) { + try { + redisTemplate.opsForList().set(key, index, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 移除N个值为value + * @param key 键 + * @param count 移除多少个 + * @param value 值 + * @return 移除的个数 + */ + public long lRemove(String key,long count,Object value) { + try { + Long remove = redisTemplate.opsForList().remove(key, count, value); + return remove; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + ///** + // * 模糊查询获取key值 + // * @param pattern + // * @return + // */ + public Set keys(String pattern){ + return redisTemplate.keys(pattern); + } + + /** + * 模糊查询 + * @param pattern + * @return + */ + public Set scan(String pattern) { + return redisTemplate.execute((RedisCallback>) redisConnection -> { + Set keys = new HashSet<>(); + Cursor cursor = redisConnection.scan(new ScanOptions.ScanOptionsBuilder().match(pattern).count(Integer.MAX_VALUE).build()); + while (cursor.hasNext()) { + keys.add(new String(cursor.next())); + } + return keys; + }); + } + + /** + * 使用Redis的消息队列 + * @param channel + * @param message 消息内容 + */ + public void convertAndSend(String channel, Object message){ + redisTemplate.convertAndSend(channel,message); + } + + + //=========BoundListOperations 用法 start============ + + + /** + * 根据起始结束序号遍历Redis中的list + * @param listKey + * @param start 起始序号 + * @param end 结束序号 + * @return + */ + public List rangeList(String listKey, long start, long end) { + //绑定操作 + BoundListOperations boundValueOperations = redisTemplate.boundListOps(listKey); + //查询数据 + return boundValueOperations.range(start, end); + } + /** + * 弹出右边的值 --- 并且移除这个值 + * @param listKey + */ + public Object rifhtPop(String listKey){ + //绑定操作 + BoundListOperations boundValueOperations = redisTemplate.boundListOps(listKey); + return boundValueOperations.rightPop(); + } + + //=========BoundListOperations 用法 End============ + +} \ No newline at end of file diff --git a/src/main/java/com/show/util/RenSheJuConstant.java b/src/main/java/com/show/util/RenSheJuConstant.java new file mode 100644 index 0000000..1fed4b8 --- /dev/null +++ b/src/main/java/com/show/util/RenSheJuConstant.java @@ -0,0 +1,69 @@ +package com.show.util; + +public class RenSheJuConstant { + + /** + * POST-2:班级基本信息信息采集接口 + */ + public static final String POST_3 = "POST3_班级基本信息"; + + /** + * POST-3:学时信息采集接口 + */ + public static final String POST_4 = "POST4_学时信息"; + + /** + * POST-4:考试信息采集接口 + */ + public static final String POST_5 = "POST5_考试信息"; + + /** + * POST-5:答疑辅导采集接口 + */ + public static final String POST_6 = "POST6_答疑辅导"; + + /** + * POST-6 班级活跃度/实名认证照片信息采集接口 + */ + public static final String POST_7 = "POST7_实名认证/活跃度"; + + /** + * POST-7 获取培训待绑定的(班级编号,项目编号)列表 + */ +// public static final String POST_7 = "POST_7_getClassCodeByPrivateKey"; + + /** + * POST-8 上下游班级数据绑定接口 + */ + public static final String POST_8 = "POST8_待绑定的班级"; + + /** + * POST-9 获取推送失败班级列表 + */ + public static final String POST_9 = "POST_9_getErrorClass"; + + /** + * POST-10 清除推送失败班级缓存 + */ + public static final String POST_10 = "POST_10_clear"; + + /** + * 调取失败 + */ + public static final String API_ERROR = "调取失败"; + + /** + * 当天没数据 + */ + public static final String NO_DATA = "NO_DATA"; + + /** + * 推送失败 + */ + public static final String PUSH_FAIL = "推送失败"; + + /** + * 推送成功 + */ + public static final String PUSH_SUCCESS = "推送成功"; +} diff --git a/src/main/java/com/show/util/ResultMode.java b/src/main/java/com/show/util/ResultMode.java new file mode 100644 index 0000000..804dcf6 --- /dev/null +++ b/src/main/java/com/show/util/ResultMode.java @@ -0,0 +1,56 @@ +package com.show.util; + +public class ResultMode { + + /** + * 成功:true,失败:false + */ + private boolean success; + + /** + * 返回编码 + */ + private int resultCode; + + /** + * 返回消息 + */ + private String msg; + + /** + * 结果数据 + */ + private Object data; + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public int getResultCode() { + return resultCode; + } + + public void setResultCode(int resultCode) { + this.resultCode = resultCode; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public Object getData() { + return data; + } + + public void setData(Object data) { + this.data = data; + } +} diff --git a/src/main/java/com/show/util/SMSUtils.java b/src/main/java/com/show/util/SMSUtils.java new file mode 100644 index 0000000..676d4c4 --- /dev/null +++ b/src/main/java/com/show/util/SMSUtils.java @@ -0,0 +1,199 @@ +package com.show.util; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.aliyuncs.CommonRequest; +import com.aliyuncs.CommonResponse; +import com.aliyuncs.DefaultAcsClient; +import com.aliyuncs.IAcsClient; +import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; +import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; +import com.aliyuncs.http.MethodType; +import com.aliyuncs.profile.DefaultProfile; +import com.aliyuncs.profile.IClientProfile; +import com.show.common.configure.AliyunSmsProperties; +import com.show.common.exception.HttpException; +import net.sourceforge.pinyin4j.PinyinHelper; +import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; +import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; +import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; +import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * 短信发送工具类 + */ + +@Component +public class SMSUtils { + + + + @Autowired + private AliyunSmsProperties aliyunSmsProperties; + + public SendSmsResponse send(String phone, String code) { + try { + System.setProperty("sun.net.client.defaultConnectTimeout", "10000"); + System.setProperty("sun.net.client.defaultReadTimeout", "10000"); + + //初始化acsClient,暂不支持region化 + IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", aliyunSmsProperties.getAccessKeyId(), aliyunSmsProperties.getAccessKeySecret()); + DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", aliyunSmsProperties.getProduct(), aliyunSmsProperties.getDomain()); + IAcsClient acsClient = new DefaultAcsClient(profile); + + //组装请求对象-具体描述见控制台-文档部分内容 + SendSmsRequest request = new SendSmsRequest(); + //必填:待发送手机号 + request.setPhoneNumbers(phone); + //必填:短信签名-可在短信控制台中找到 + request.setSignName("有课互联"); + //必填:短信模板-可在短信控制台中找到 + request.setTemplateCode("SMS_190945394"); + //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为 + request.setTemplateParam("{\"code\":\""+ code +"\"}"); + + //hint 此处可能会抛出异常,注意catch + SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request); + if(sendSmsResponse != null && sendSmsResponse.getCode().equals("OK")) { + return sendSmsResponse; + } + + throw new Exception(sendSmsResponse.getMessage()); + } catch (Exception e) { + e.printStackTrace(); + throw new HttpException(70011); + } + } + + + /** + * 发送验证码短信 + * + * @param templateId 短信模板id + * @param telephone 手机号 + * @return + */ + public static String sendVerifySMS(String templateId, String telephone, String param) { + DefaultProfile profile = DefaultProfile.getProfile(ConstantUtils.REGION_ID, ConstantUtils.ACCESS_KEY_ID, ConstantUtils.SECRET); + IAcsClient client = new DefaultAcsClient(profile); + + CommonRequest request = new CommonRequest(); + request.setSysMethod(MethodType.POST); + request.setSysDomain("dysmsapi.aliyuncs.com"); + request.setSysVersion("2017-05-25"); + request.setSysAction("SendSms"); + request.putQueryParameter("RegionId", ConstantUtils.REGION_ID); + request.putQueryParameter("PhoneNumbers", telephone); + request.putQueryParameter("SignName", ConstantUtils.VERIFY_NAME); + request.putQueryParameter("TemplateCode", templateId); +// if (StringUtils.isEmpty(param)){ +// request.putQueryParameter("TemplateParam","{ \"code\":\""+verifyCode +"\"}"); +// } + request.putQueryParameter("TemplateParam", param); + CommonResponse response = null; + try { + response = client.getCommonResponse(request); + return ConstantUtils.SUCCESS_SEND_OUT; + } catch (Exception e) { + e.printStackTrace(); + return ConstantUtils.FAIL_SEND_OUT; + } + } + + + public String sendWarning(String templateId,String telephone,String param){ + try { + System.setProperty("sun.net.client.defaultConnectTimeout", "10000"); + System.setProperty("sun.net.client.defaultReadTimeout", "10000"); + + //初始化acsClient,暂不支持region化 + IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", aliyunSmsProperties.getAccessKeyId(), aliyunSmsProperties.getAccessKeySecret()); + DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", aliyunSmsProperties.getProduct(), aliyunSmsProperties.getDomain()); + IAcsClient acsClient = new DefaultAcsClient(profile); + + //组装请求对象-具体描述见控制台-文档部分内容 + SendSmsRequest request = new SendSmsRequest(); + //必填:待发送手机号 + request.setPhoneNumbers(telephone); + //必填:短信签名-可在短信控制台中找到 + request.setSignName("有课互联科技"); + //必填:短信模板-可在短信控制台中找到 + request.setTemplateCode(templateId); + //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为 + request.setTemplateParam("{\"ids\":\""+ param +"\"}"); + + //hint 此处可能会抛出异常,注意catch + SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request); + if(sendSmsResponse != null && sendSmsResponse.getCode().equals("OK")) { + return ConstantUtils.SUCCESS_SEND_OUT; + } + + throw new Exception(sendSmsResponse.getMessage()); + } catch(Exception e) { + e.printStackTrace(); + return ConstantUtils.FAIL_SEND_OUT; + } + } + + /** + * 发送通知短信 + * @param templateId 短信模板id + * @param telephone 手机号 + * @return + */ + public static String sendNoticeSMS(String templateId,String telephone,String param){ + DefaultProfile profile = DefaultProfile.getProfile(ConstantUtils.REGION_ID, ConstantUtils.ACCESS_KEY_ID, ConstantUtils.SECRET); + IAcsClient client = new DefaultAcsClient(profile); + + CommonRequest request = new CommonRequest(); + request.setSysMethod(MethodType.POST); + request.setSysDomain("dysmsapi.aliyuncs.com"); + request.setSysVersion("2017-05-25"); + request.setSysAction("SendSms"); + request.putQueryParameter("RegionId",ConstantUtils.REGION_ID); + request.putQueryParameter("PhoneNumbers",telephone); + request.putQueryParameter("SignName",ConstantUtils.TECH_NAME); + request.putQueryParameter("TemplateCode",templateId); +// if (StringUtils.isEmpty(param)){ +// request.putQueryParameter("TemplateParam","{ \"code\":\""+verifyCode +"\"}"); +// } + request.putQueryParameter("TemplateParam",param); + CommonResponse response = null; + try { + response = client.getCommonResponse(request); + if(response != null) { + JSONObject data = JSON.parseObject(response.getData()); + if(data.get("Code").equals("OK")) { + return ConstantUtils.SUCCESS_SEND_OUT; + } + throw new HttpException(1000, data.get("Message").toString()); + } + return ConstantUtils.FAIL_SEND_OUT; + } catch(Exception e) { + e.printStackTrace(); + return ConstantUtils.FAIL_SEND_OUT; + } + } + + //public static void main(String[] args) { + // String param = "{ \"course\":\""+"语文课"+ "\",\"time\":\""+"2020-01-02" +"\",\"address\":\""+"上海市" +"\"}"; + // sendNoticeSMS("SMS_215336604","15201936167,18201963812",param); + //} + + public static void main(String[] args) throws BadHanyuPinyinOutputFormatCombination { + HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat(); + //拼音小写 + format.setCaseType(HanyuPinyinCaseType.LOWERCASE); + //不带声调 + format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); + + //format.setVCharType(); + //要转换的中文,格式,转换之后的拼音的分隔符,遇到不能转换的是否保留 wo,shi,zhong,guo,ren,,hello + System.out.println(PinyinHelper.toHanYuPinyinString("我是中国人", format, "", false)); + } + + + +} diff --git a/src/main/java/com/show/util/SecretUtils.java b/src/main/java/com/show/util/SecretUtils.java new file mode 100644 index 0000000..823cd18 --- /dev/null +++ b/src/main/java/com/show/util/SecretUtils.java @@ -0,0 +1,158 @@ +package com.show.util; + +import org.apache.commons.codec.digest.DigestUtils; +import org.apache.commons.lang3.StringUtils; + +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.util.Arrays; +import java.util.Random; +import java.util.UUID; + +public class SecretUtils { + + /** + * 对用户登录密码进行MD5加密 + * + * @param str + * @return + */ + + public static String getMD5String(String str) { + try { + // 生成一个MD5加密计算摘要 + return DigestUtils.md5Hex(str).toUpperCase(); + // MessageDigest md = MessageDigest.getInstance("MD5"); + // 计算md5函数 +// md.update(str.getBytes("utf-8")); + // digest()最后确定返回md5 hash值,返回值为8位字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符 + // BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值 + //一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方) +// byte[] digest = md.digest(str.getBytes("utf-8")); +// return new BigInteger(1, digest).toString(16); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 对字符串进行SHA加密 + * + * @param + */ + public static String getSHAString(String str) { + try { + MessageDigest sha = MessageDigest.getInstance("SHA-1"); + + byte[] byteArray = str.getBytes(StandardCharsets.UTF_8); + byte[] md5Bytes = sha.digest(byteArray); + StringBuffer hexValue = new StringBuffer(); + for (int i = 0; i < md5Bytes.length; i++) { + int val = ((int) md5Bytes[i]) & 0xff; + if (val < 16) { + hexValue.append("0"); + } + hexValue.append(Integer.toHexString(val)); + } + + return hexValue.toString(); + } catch (Exception e) { + return null; + } + + } + + /** + * Q学友SHA加密 + * @param arr + * @return + */ + public static String gen(String... arr) { + if (StringUtils.isAnyEmpty(arr)) { + throw new IllegalArgumentException("非法请求参数,有部分参数为空 : " + Arrays.toString(arr)); + } else { + Arrays.sort(arr); + StringBuilder sb = new StringBuilder(); + String[] var2 = arr; + int var3 = arr.length; + + for (int var4 = 0; var4 < var3; ++var4) { + String a = var2[var4]; + sb.append(a); + } + + return DigestUtils.sha1Hex(sb.toString()); + } + } + + public static String getNonce(int length) { + String val = ""; + Random random = new Random(); + //参数length,表示生成几位随机数 + for (int i = 0; i < length; i++) { + val += String.valueOf(random.nextInt(10)); + } + return val; + } + + private static byte[] md5(String s) + { + MessageDigest algorithm; + try + { + algorithm = MessageDigest.getInstance("MD5"); + algorithm.reset(); + algorithm.update(s.getBytes(StandardCharsets.UTF_8)); + byte[] messageDigest = algorithm.digest(); + return messageDigest; + } + catch (Exception e) + { + + } + return null; + } + + private static final String toHex(byte[] hash) + { + if (hash == null) + { + return null; + } + StringBuffer buf = new StringBuffer(hash.length * 2); + int i; + + for (i = 0; i < hash.length; i++) + { + if ((hash[i] & 0xff) < 0x10) + { + buf.append("0"); + } + buf.append(Long.toString(hash[i] & 0xff, 16)); + } + return buf.toString(); + } + + public static String hash(String s) + { + try + { + return new String(toHex(md5(s)).getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8); + } + catch (Exception e) + { + return s; + } + } + + + + + public static void main(String[] args) { + String uuid = UUID.randomUUID().toString(); + System.out.println(uuid.replace("-","")); +// System.out.println(hash(uuid+"ixihs")); +// System.out.println(System.currentTimeMillis()); + } +} \ No newline at end of file diff --git a/src/main/java/com/show/util/ShehuihuaConstant.java b/src/main/java/com/show/util/ShehuihuaConstant.java new file mode 100644 index 0000000..ca7dcfc --- /dev/null +++ b/src/main/java/com/show/util/ShehuihuaConstant.java @@ -0,0 +1,66 @@ +package com.show.util; + +public class ShehuihuaConstant { + + + /** + * 获取培训正在进行中的(班级编号,项目编号)列表 + */ + public static final String POST_2 = "Shehuihua_2_getClassCodeByPrivateKey"; + + /** + * POST-3:班级基本信息信息采集接口 + */ + public static final String POST_3 = "Shehuihua_3_uploadClass"; + + /** + * POST-4:学时信息采集接口 + */ + public static final String POST_4 = "Shehuihua_4_classHourBehavior"; + + /** + * POST-5:考试信息采集接口 + */ + public static final String POST_5 = "Shehuihua_5_uploadChapterBehavior"; + + + /** + * POST-6:答疑辅导采集接口 + */ + public static final String POST_6 = "Shehuihua_6_uploadClassAnswerQuestionBehavior"; + + /** + * POST-7 班级活跃度/实名认证照片信息采集接口 + */ + public static final String POST_7 = "Shehuihua_7_import/downstream/social/uploadImage"; + + /** + * POST-8 获取推送失败班级列表 + */ + public static final String POST_8 = "Shehuihua_8_getErrorClass"; + + /** + * POST-9 清除推送失败班级缓存 + */ + public static final String POST_9 = "Shehuihua_9_clear"; + + /** + * 调取失败 + */ + public static final String API_ERROR = "调取失败"; + + /** + * 当天没数据 + */ + public static final String NO_DATA = "NO_DATA"; + + /** + * 推送失败 + */ + public static final String PUSH_FAIL = "推送失败"; + + /** + * 推送成功 + */ + public static final String PUSH_SUCCESS = "推送成功"; +} diff --git a/src/main/java/com/show/util/Signature.java b/src/main/java/com/show/util/Signature.java new file mode 100644 index 0000000..531c10e --- /dev/null +++ b/src/main/java/com/show/util/Signature.java @@ -0,0 +1,85 @@ +package com.show.util; + +import sun.misc.BASE64Encoder; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.nio.charset.StandardCharsets; + +/** + * @author: tuyp + * @create: 2020-07-29 12:42 + */ +public class Signature { + + private String secretId; + private String secretKey; + private long currentTime; + private int random; + private int signValidDuration; + private int classId; + + private static final String HMAC_ALGORITHM = "HmacSHA1"; + private static final String CONTENT_CHARSET = "UTF-8"; + + public static byte[] byteMerger(byte[] byte1, byte[] byte2) { + byte[] byte3 = new byte[byte1.length + byte2.length]; + System.arraycopy(byte1, 0, byte3, 0, byte1.length); + System.arraycopy(byte2, 0, byte3, byte1.length, byte2.length); + return byte3; + } + + public String getUploadSignature() throws Exception { + String strSign = ""; + String contextStr = ""; + + long endTime = (currentTime + signValidDuration); + contextStr += "secretId=" + java.net.URLEncoder.encode(secretId, "utf8"); + contextStr += "¤tTimeStamp=" + currentTime; + contextStr += "&expireTime=" + endTime; + contextStr += "&random=" + random; + contextStr += "&classId=" + classId; + + try { + Mac mac = Mac.getInstance(HMAC_ALGORITHM); + SecretKeySpec secretKey = new SecretKeySpec(this.secretKey.getBytes(CONTENT_CHARSET), mac.getAlgorithm()); + mac.init(secretKey); + + byte[] hash = mac.doFinal(contextStr.getBytes(CONTENT_CHARSET)); + byte[] sigBuf = byteMerger(hash, contextStr.getBytes(StandardCharsets.UTF_8)); + strSign = base64Encode(sigBuf); + strSign = strSign.replace(" ", "").replace("\n", "").replace("\r", ""); + } catch (Exception e) { + throw e; + } + return strSign; + } + + private String base64Encode(byte[] buffer) { + BASE64Encoder encoder = new BASE64Encoder(); + return encoder.encode(buffer); + } + + public void setSecretId(String secretId) { + this.secretId = secretId; + } + + public void setSecretKey(String secretKey) { + this.secretKey = secretKey; + } + + public void setCurrentTime(long currentTime) { + this.currentTime = currentTime; + } + + public void setRandom(int random) { + this.random = random; + } + + public void setSignValidDuration(int signValidDuration) { + this.signValidDuration = signValidDuration; + } + + public void setClassId(int classId){this.classId = classId;} + +} diff --git a/src/main/java/com/show/util/TestMain.java b/src/main/java/com/show/util/TestMain.java new file mode 100644 index 0000000..2852161 --- /dev/null +++ b/src/main/java/com/show/util/TestMain.java @@ -0,0 +1,124 @@ +package com.show.util; + +import org.apache.commons.codec.binary.Base64; + +import java.io.FileOutputStream; +import java.io.OutputStream; +import java.security.MessageDigest; +import java.util.Random; + +public class TestMain { + + + + /** + * 对字节数组字符串进行Base64解码并生成图片 + * @param imgStr 图片数据 + * @param imgFilePath 保存图片全路径地址 + * @return + */ + public static boolean generateImage(String imgStr,String imgFilePath){ + // + if (imgStr == null) //图像数据为空 + { + return false; + } + try + { + //Base64解码 + byte[] b = Base64.decodeBase64(imgStr); + for(int i=0;i { +// System.out.println("thread1"); +// }); +// Thread thread2 = new Thread(() -> { +// System.out.println("thread2"); +// }); +// Thread thread3 = new Thread(() -> { +// System.out.println("thread3"); +// }); +// thread1.start(); +// thread1.join(); +// thread2.start(); +// thread2.join(); +// thread3.start(); +// thread3.join(); + + } + + public static String encrypt(String string) { + + String encryptedString = string; + char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + try { + byte[] btInput = string.getBytes(); + MessageDigest mdInst = MessageDigest.getInstance("MD5"); + mdInst.update(btInput); + byte[] md = mdInst.digest(); + int j = md.length; + char[] str = new char[j * 2]; + int k = 0; + for (int i = 0; i < j; i++) { + byte byte0 = md[i]; + str[k++] = hexDigits[byte0 >>> 4 & 0xf]; + str[k++] = hexDigits[byte0 & 0xf]; + } + encryptedString = new String(str); + return encryptedString; + } catch (Exception e) { + e.printStackTrace(); + return encryptedString; + } + } + + /** + * 获取随机字母数字组合 + * + * @param length + * 字符串长度 + * @return + */ + public static String getRandomCharAndNumr(Integer length) { + String str = ""; + Random random = new Random(); + for (int i = 0; i < length; i++) { + boolean b = random.nextBoolean(); + if (b) { // 字符串 + // int choice = random.nextBoolean() ? 65 : 97; 取得65大写字母还是97小写字母 + str += (char) (97 + random.nextInt(26));// 取得大写字母 + } else { // 数字 + str += String.valueOf(random.nextInt(10)); + } + } + return str; + } +} diff --git a/src/main/java/com/show/util/VodUtil.java b/src/main/java/com/show/util/VodUtil.java new file mode 100644 index 0000000..2e0f5ef --- /dev/null +++ b/src/main/java/com/show/util/VodUtil.java @@ -0,0 +1,124 @@ +package com.show.util; + +import com.show.common.configure.VODConfig; +import com.show.common.exception.HttpException; +import com.tencentcloudapi.common.Credential; +import com.tencentcloudapi.common.exception.TencentCloudSDKException; +import com.tencentcloudapi.common.profile.ClientProfile; +import com.tencentcloudapi.common.profile.HttpProfile; +import com.tencentcloudapi.vod.v20180717.VodClient; +import com.tencentcloudapi.vod.v20180717.models.DeleteMediaRequest; +import com.tencentcloudapi.vod.v20180717.models.DescribeCDNUsageDataRequest; +import com.tencentcloudapi.vod.v20180717.models.DescribeCDNUsageDataResponse; +import com.tencentcloudapi.vod.v20180717.models.MediaProcessTaskInput; +import com.tencentcloudapi.vod.v20180717.models.ProcessMediaRequest; +import com.tencentcloudapi.vod.v20180717.models.ProcessMediaResponse; +import com.tencentcloudapi.vod.v20180717.models.StatDataItem; +import com.tencentcloudapi.vod.v20180717.models.TranscodeTaskInput; +import org.springframework.stereotype.Component; + +/** + *

+ * 腾讯云 - 云点播API + *

+ * + * @author DengMin + * @since 2022/8/1 + */ +@Component +public class VodUtil { + + private static String endpoint = "vod.tencentcloudapi.com"; + + /** + * 根据视频模版进行转码 + * @param vodCode + * @return + */ + public static ProcessMediaResponse processMedia(VODConfig vodConfig, String vodCode) { + try { + //上传后直接转码 + Credential cred = new Credential(vodConfig.getSecretId(), vodConfig.getSecretKey()); + HttpProfile httpProfile = new HttpProfile(); + httpProfile.setEndpoint(endpoint); + + ClientProfile clientProfile = new ClientProfile(); + clientProfile.setHttpProfile(httpProfile); + + VodClient client = new VodClient(cred, "", clientProfile); + + ProcessMediaRequest processMediaRequest = new ProcessMediaRequest(); + MediaProcessTaskInput mediaProcessTaskInput1 = new MediaProcessTaskInput(); + TranscodeTaskInput[] transcodeTaskInputs1 = new TranscodeTaskInput[1]; + TranscodeTaskInput transcodeTaskInput1 = new TranscodeTaskInput(); + transcodeTaskInput1.setDefinition(ConstantUtils.TEMPLATE_VOD); + transcodeTaskInputs1[0] = transcodeTaskInput1; + mediaProcessTaskInput1.setTranscodeTaskSet(transcodeTaskInputs1); + processMediaRequest.setMediaProcessTask(mediaProcessTaskInput1); + processMediaRequest.setFileId(vodCode); + return client.ProcessMedia(processMediaRequest); + } catch (Exception ex) { + ex.printStackTrace(); + throw new HttpException(50001); + } + } + + /** + * 删除腾讯云上原视频 + * @param vodCode + */ + public static void deleteMedia(VODConfig vodConfig, String vodCode) { + try { + //删除原视频 + Credential cred = new Credential(vodConfig.getSecretId(), vodConfig.getSecretKey()); + HttpProfile httpProfile = new HttpProfile(); + httpProfile.setEndpoint(endpoint); + + ClientProfile clientProfile = new ClientProfile(); + clientProfile.setHttpProfile(httpProfile); + + VodClient client = new VodClient(cred, "", clientProfile); + // 实例化一个请求对象,每个接口都会对应一个request对象 + DeleteMediaRequest req = new DeleteMediaRequest(); + req.setFileId(vodCode); + // 返回的resp是一个DeleteMediaResponse的实例,与请求对象对应 + client.DeleteMedia(req); + } catch (TencentCloudSDKException e) { + throw new HttpException(99999, e.getMessage()); + } + } + + /** + * 云点播域名的CDN统计数据 + * @param vodConfig + * @param DataType + * @param startTime + * @param endTime + * @return + */ + public static StatDataItem[] DescribeCDNStatDetails(VODConfig vodConfig, String DataType, String startTime, String endTime) { + try { + Credential cred = new Credential(vodConfig.getSecretId(), vodConfig.getSecretKey()); + // 实例化一个http选项,可选的,没有特殊需求可以跳过 + HttpProfile httpProfile = new HttpProfile(); + httpProfile.setEndpoint(endpoint); + // 实例化一个client选项,可选的,没有特殊需求可以跳过 + ClientProfile clientProfile = new ClientProfile(); + clientProfile.setHttpProfile(httpProfile); + // 实例化要请求产品的client对象,clientProfile是可选的 + VodClient client = new VodClient(cred, "", clientProfile); + // 实例化一个请求对象,每个接口都会对应一个request对象 + DescribeCDNUsageDataRequest req = new DescribeCDNUsageDataRequest(); + req.setStartTime(startTime); + req.setEndTime(endTime); + req.setDataType(DataType); + // 返回的resp是一个DescribeCDNUsageDataResponse的实例,与请求对象对应 + DescribeCDNUsageDataResponse resp = client.DescribeCDNUsageData(req); + // 返回的resp是一个DescribeCDNStatDetailsResponse的实例,与请求对象对应 + return resp.getData(); + } catch (TencentCloudSDKException e) { + e.printStackTrace(); + throw new HttpException(99999, e.getMessage()); + } + } +} diff --git a/src/main/java/com/show/util/excel/ExcelColumn.java b/src/main/java/com/show/util/excel/ExcelColumn.java new file mode 100644 index 0000000..14dffd6 --- /dev/null +++ b/src/main/java/com/show/util/excel/ExcelColumn.java @@ -0,0 +1,14 @@ +package com.show.util.excel; + + +import java.lang.annotation.*; + +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface ExcelColumn { + + String value() default ""; + + int col() default 1; +} diff --git a/src/main/java/com/show/util/excel/ExcelColumnUtil.java b/src/main/java/com/show/util/excel/ExcelColumnUtil.java new file mode 100644 index 0000000..895491e --- /dev/null +++ b/src/main/java/com/show/util/excel/ExcelColumnUtil.java @@ -0,0 +1,22 @@ +package com.show.util.excel; + + +import java.lang.annotation.*; + +/** + *

+ * excel 字段 + *

+ * + * @author DengMin + * @date Created in 2020/08/28 + */ +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface ExcelColumnUtil { + + String value() default ""; + + int col() default 0; +} diff --git a/src/main/java/com/show/util/excel/ExcelUtil.java b/src/main/java/com/show/util/excel/ExcelUtil.java new file mode 100644 index 0000000..2e400cc --- /dev/null +++ b/src/main/java/com/show/util/excel/ExcelUtil.java @@ -0,0 +1,505 @@ +package com.show.util.excel; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.lang3.CharUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; +import org.apache.poi.hssf.usermodel.HSSFDateUtil; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.hssf.util.CellRangeAddress; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.xssf.streaming.SXSSFCell; +import org.apache.poi.xssf.streaming.SXSSFRow; +import org.apache.poi.xssf.streaming.SXSSFSheet; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.math.BigDecimal; +import java.net.URLEncoder; +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * Excel工具 + * + * @author DengMin + * @date 2019/08/27 13:57 + **/ +@Slf4j +public class ExcelUtil { + + private final static String EXCEL2003 = "xls"; + + private final static String EXCEL2007 = "xlsx"; + + /** + * 导入excel文件 + * + * @param cls + * @param file + * @param + * @return + */ + public static List readExcel(Class cls, MultipartFile file) { + String fileName = file.getOriginalFilename(); + if (!fileName.matches("^.+\\.(?i)(xls)$") && !fileName.matches("^.+\\.(?i)(xlsx)$")) { + log.info("上传文件格式不正确"); +// throw new HTTPException(10022); + } + + List dataList = new ArrayList<>(); + Workbook workbook = null; + try { + InputStream is = file.getInputStream(); + if (fileName.endsWith(EXCEL2007)) { + // FileInputStream is = new FileInputStream(new File(path)); + workbook = new XSSFWorkbook(is); + } + + if (fileName.endsWith(EXCEL2003)) { + // FileInputStream is = new FileInputStream(new File(path)); + workbook = new HSSFWorkbook(is); + } + + if (workbook != null) { + Map> classMap = new HashMap<>(); + List fields = Stream.of(cls.getDeclaredFields()).collect(Collectors.toList()); + fields.forEach(field -> { + ExcelColumnUtil annotation = field.getAnnotation(ExcelColumnUtil.class); + if (annotation != null) { + String value = annotation.value(); + if (StringUtils.isBlank(value)) { + return; + } + + if (!classMap.containsKey(value)) { + classMap.put(value, new ArrayList<>()); + } + + field.setAccessible(true); + classMap.get(value).add(field); + } + }); + //索引-->columns + Map> reflectionMap = new HashMap<>(); + //默认读取第一个sheet + Sheet sheet = workbook.getSheetAt(0); + + boolean firstRow = true; + for (int i = 0; i <= sheet.getLastRowNum(); i++) { + Row row = sheet.getRow(i); + //提取标题 + if (firstRow) { + for (int j = 0; j <= row.getLastCellNum(); j++) { + Cell cell = row.getCell(j); + String cellValue = getCellValue(cell); + if (classMap.containsKey(cellValue)) { + reflectionMap.put(j, classMap.get(cellValue)); + } + } + + firstRow = false; + } else { + //忽略空白行 + if (row == null) { + continue; + } + + try { + T t = cls.newInstance(); + //判断是否为空白行 + boolean allBlank = true; + for (int j = 0; j <= row.getLastCellNum(); j++) { + if (reflectionMap.containsKey(j)) { + Cell cell = row.getCell(j); + String cellValue = getCellValue(cell); + if (StringUtils.isNotBlank(cellValue)) { + allBlank = false; + } + List fieldList = reflectionMap.get(j); + fieldList.forEach(x -> { + try { + handleField(t, cellValue, x); + } catch (Exception e) { + e.printStackTrace(); + log.error(String.format("reflect field:%s value:%s exception!", x.getName(), cellValue), e); + } + }); + } + } + + if (!allBlank) { + dataList.add(t); + } + } catch (Exception e) { + e.printStackTrace(); + log.error(String.format("parse row:%s exception!", i), e); + } + } + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error(String.format("parse excel exception!"), e); + } finally { + if (workbook != null) { + try { + workbook.close(); + } catch (Exception e) { + e.printStackTrace(); + log.error(String.format("parse excel exception!"), e); + } + } + } + return dataList; + } + + /** + * 导入excel文件 + * + * @param path + * @param cls + * @param file + * @param + * @return + */ + public static List readExcelWithoutTitle(String path, Class cls, MultipartFile file) { + String fileName = file.getOriginalFilename(); + if (!fileName.matches("^.+\\.(?i)(xls)$") && !fileName.matches("^.+\\.(?i)(xlsx)$")) { + log.info("上传文件格式不正确"); +// throw new HTTPException(10022); + } + + List dataList = new ArrayList<>(); + Workbook workbook = null; + try { + InputStream is = file.getInputStream(); + if (fileName.endsWith(EXCEL2007)) { + // FileInputStream is = new FileInputStream(new File(path)); + workbook = new XSSFWorkbook(is); + } + + if (fileName.endsWith(EXCEL2003)) { + // FileInputStream is = new FileInputStream(new File(path)); + workbook = new HSSFWorkbook(is); + } + + if (workbook != null) { + Map> classMap = new HashMap<>(); + List fields = Stream.of(cls.getDeclaredFields()).collect(Collectors.toList()); + fields.forEach(field -> { + ExcelColumnUtil annotation = field.getAnnotation(ExcelColumnUtil.class); + if (annotation != null) { + String value = annotation.value(); + if (StringUtils.isBlank(value)) { + return; + } + + if (!classMap.containsKey(value)) { + classMap.put(value, new ArrayList<>()); + } + + field.setAccessible(true); + classMap.get(value).add(field); + } + }); + //索引-->columns + Map> reflectionMap = new HashMap<>(); + //默认读取第一个sheet + Sheet sheet = workbook.getSheetAt(0); + + boolean firstRow = true; + for (int i = 1; i <= sheet.getLastRowNum(); i++) { + Row row = sheet.getRow(i); + //提取标题 + if (firstRow) { + for (int j = 0; j <= row.getLastCellNum(); j++) { + Cell cell = row.getCell(j); + String cellValue = getCellValue(cell); + if (classMap.containsKey(cellValue)) { + reflectionMap.put(j, classMap.get(cellValue)); + } + } + + firstRow = false; + } else { + //忽略空白行 + if (row == null) { + continue; + } + + try { + T t = cls.newInstance(); + //判断是否为空白行 + boolean allBlank = true; + for (int j = 0; j <= row.getLastCellNum(); j++) { + if (reflectionMap.containsKey(j)) { + Cell cell = row.getCell(j); + String cellValue = getCellValue(cell); + if (StringUtils.isNotBlank(cellValue)) { + allBlank = false; + } + List fieldList = reflectionMap.get(j); + fieldList.forEach(x -> { + try { + handleField(t, cellValue, x); + } catch (Exception e) { + e.printStackTrace(); + log.error(String.format("reflect field:%s value:%s exception!", x.getName(), cellValue), e); + } + }); + } + } + + if (!allBlank) { + dataList.add(t); + } + } catch (Exception e) { + e.printStackTrace(); + log.error(String.format("parse row:%s exception!", i), e); + } + } + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error(String.format("parse excel exception!"), e); + } finally { + if (workbook != null) { + try { + workbook.close(); + } catch (Exception e) { + e.printStackTrace(); + log.error(String.format("parse excel exception!"), e); + } + } + } + return dataList; + } + + /** + * 导出excel文件 + * + * @param list + * @param cls + * @param + */ + public static void writeExcel(List list, Class cls) { + ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + HttpServletResponse response = servletRequestAttributes.getResponse(); + Field[] fields = cls.getDeclaredFields(); + List fieldList = Arrays.stream(fields).filter(field -> { + ExcelColumn annotation = field.getAnnotation(ExcelColumn.class); + if (annotation != null) { + field.setAccessible(true); + return true; + } + return false; + }).sorted(Comparator.comparing(field -> { + int col = 0; + ExcelColumn annotation = field.getAnnotation(ExcelColumn.class); + if (annotation != null) { + col = annotation.col(); + } + return col; + })).collect(Collectors.toList()); + + Workbook wb = new XSSFWorkbook(); + Sheet sheet = wb.createSheet(); + AtomicInteger ai = new AtomicInteger(); + { + Row row = sheet.createRow(ai.getAndIncrement()); + AtomicInteger at = new AtomicInteger(); + fieldList.forEach(field -> { + ExcelColumn annotation = field.getAnnotation(ExcelColumn.class); + String columnName = ""; + if (annotation != null) { + columnName = annotation.value(); + } + Cell cell = row.createCell(at.getAndIncrement()); + CellStyle cellStyle = wb.createCellStyle(); + cellStyle.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex()); + Font font = wb.createFont(); + font.setBoldweight(Font.BOLDWEIGHT_BOLD); + cellStyle.setFont(font); + cell.setCellStyle(cellStyle); + cell.setCellValue(columnName); + }); + + if (list != null) { + list.forEach(data -> { + Row r = sheet.createRow(ai.getAndIncrement()); + AtomicInteger a = new AtomicInteger(); + fieldList.forEach(field -> { + try { + Class type = field.getType(); + Object value = field.get(data); + Cell cell = r.createCell(a.getAndIncrement()); + if (value != null) { + cell.setCellValue(value.toString()); + } + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + }); + }); + for (int i = 0; i < list.size(); i++) { + sheet.autoSizeColumn(i); + } + } + String fileName = String.valueOf(new Date().getTime()); + buildExcelDocument(fileName + "." + EXCEL2007, wb, response); + } + } + + + private static void setStyle(CellStyle cellStyle) { + // 水平居中 + cellStyle.setAlignment(CellStyle.ALIGN_CENTER); + // 垂直居中 + cellStyle.setVerticalAlignment(CellStyle.ALIGN_CENTER); + // 边框 + cellStyle.setBorderTop(CellStyle.BORDER_THIN); + // 边框 + cellStyle.setBorderLeft(CellStyle.BORDER_THIN); + // 边框 + cellStyle.setBorderRight(CellStyle.BORDER_THIN); + // 边框 + cellStyle.setBorderBottom(CellStyle.BORDER_THIN); + } + + //也可用以下方法 + public static void setBorderStyle(int border, CellRangeAddress region, SXSSFSheet sheet, SXSSFWorkbook wb) { + CellStyle cs = wb.createCellStyle(); // 样式对象 + cs.setBorderBottom((short) border); + cs.setBorderTop((short) border); + cs.setBorderLeft((short) border); + cs.setBorderRight((short) border); + + setRegionStyle(cs, region, sheet); + } + + private static void setRegionStyle(CellStyle cs, CellRangeAddress region, SXSSFSheet sheet) { + for (int i = region.getFirstRow(); i <= region.getLastRow(); i++) { + SXSSFRow row = sheet.getRow(i); + if (row == null) { + row = sheet.createRow(i); + } + for (int j = region.getFirstColumn(); j <= region.getLastColumn(); j++) { + SXSSFCell cell = row.getCell(j); + if (cell == null) { + cell = row.createCell(j); + cell.setCellValue(""); + } + cell.setCellStyle(cs); + } + } + } + + + private static void handleField(T t, String value, Field field) throws Exception { + Class type = field.getType(); + if (type == null || type == void.class || StringUtils.isBlank(value)) { + return; + } + if (type == Object.class) { + field.set(t, value); + //数字类型 + } else if (type.getSuperclass() == null || type.getSuperclass() == Number.class) { + if (type == int.class || type == Integer.class) { + field.set(t, NumberUtils.toInt(value)); + } else if (type == long.class || type == Long.class) { + field.set(t, NumberUtils.toLong(value)); + } else if (type == byte.class || type == Byte.class) { + field.set(t, NumberUtils.toByte(value)); + } else if (type == short.class || type == Short.class) { + field.set(t, NumberUtils.toShort(value)); + } else if (type == double.class || type == Double.class) { + field.set(t, NumberUtils.toDouble(value)); + } else if (type == float.class || type == Float.class) { + field.set(t, NumberUtils.toFloat(value)); + } else if (type == char.class || type == Character.class) { + field.set(t, CharUtils.toChar(value)); + } else if (type == boolean.class) { + field.set(t, BooleanUtils.toBoolean(value)); + } else if (type == BigDecimal.class) { + field.set(t, new BigDecimal(value)); + } + } else if (type == Boolean.class) { + field.set(t, BooleanUtils.toBoolean(value)); + } else if (type == Date.class) { + // + field.set(t, value); + } else if (type == String.class) { + field.set(t, value); + } else { + Constructor constructor = type.getConstructor(String.class); + field.set(t, constructor.newInstance(value)); + } + } + + private static String getCellValue(Cell cell) { + if (cell == null) { + return ""; + } + + if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) { + if (DateUtil.isCellDateFormatted(cell)) { + return HSSFDateUtil.getJavaDate(cell.getNumericCellValue()).toString(); + } else { + return new BigDecimal(cell.getNumericCellValue()).toString(); + } + } else if (cell.getCellType() == Cell.CELL_TYPE_STRING) { + return StringUtils.trimToEmpty(cell.getStringCellValue()); + } else if (cell.getCellType() == Cell.CELL_TYPE_FORMULA) { + return StringUtils.trimToEmpty(cell.getCellFormula()); + } else if (cell.getCellType() == Cell.CELL_TYPE_BLANK) { + return ""; + } else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) { + return String.valueOf(cell.getBooleanCellValue()); + } else if (cell.getCellType() == Cell.CELL_TYPE_ERROR) { + return "ERROR"; + } else { + return cell.toString().trim(); + } + } + + private static void buildExcelDocument(String fileName, Workbook wb, HttpServletResponse response) { + try { + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8")); + response.flushBuffer(); + wb.write(response.getOutputStream()); + } catch (IOException e) { + log.error(String.format("downLoad excel exception"), e); + } + } + + private static void buildExcelFile(String path, Workbook wb) { + File file = new File(path); + if (file.exists()) { + file.delete(); + } + + try { + wb.write(new FileOutputStream(file)); + } catch (Exception e) { + log.error(String.format("downLoad excel exception"), e); + } + } + + +} diff --git a/src/main/java/com/show/util/tree/Node.java b/src/main/java/com/show/util/tree/Node.java new file mode 100644 index 0000000..8855a80 --- /dev/null +++ b/src/main/java/com/show/util/tree/Node.java @@ -0,0 +1,42 @@ +package com.show.util.tree; + +import lombok.Data; + +@Data +public class Node implements Comparable { + + //主键 + private String id; + + //同级节点第几个元素 + private String number; + + //1.1 + private String text; + + //父节点 + private String parentId; + + private int level; + + public Node(String id, String number, String parentId, int level) { + this.id = id; + this.number = number; + this.parentId = parentId; + this.level = level; + } + + @Override + public int compareTo(Node o) { + if (this.level != o.level) { + return o.level - this.level; + } else { + if(this.number==null){ + return -1; + } + return this.number.compareTo(o.number); + } + } + + +} diff --git a/src/main/java/com/show/util/tree/NumberTree.java b/src/main/java/com/show/util/tree/NumberTree.java new file mode 100644 index 0000000..a9ec43a --- /dev/null +++ b/src/main/java/com/show/util/tree/NumberTree.java @@ -0,0 +1,212 @@ +package com.show.util.tree; + +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +@Data +public class NumberTree { + + private String id; + + private List nodeList; + + private String separator; + + private int idSeq; + + private SerialNumber number; + + public NumberTree(String separator, SerialNumber number) { + init(); + this.separator = separator; + this.number = number; + + } + + public void init() { + idSeq = 1; + this.separator = "."; + if (this.nodeList == null) { + nodeList = new ArrayList(); + } + } + + + /** + *

功能描述:根据父节点获取所有子节点。

+ */ + public List getChildNodes(Node pNode) { + String pId = pNode.getId(); + return getChildNodes(pId); + } + + /** + *

功能描述:根据父节点获取所有子节点。

+ */ + public List getChildNodes(String pId) { + List childNodes = new ArrayList(); + for (Node n : nodeList) { + if (pId.equals(n.getParentId())) { + childNodes.add(n); + } + } + + return childNodes; + } + + /** + *

功能描述:获取本级值最大的节点。

+ */ + public Node getMaxNodeForThisLevel(Node pNode) { + List childList = getChildNodes(pNode); + Node root = getRoot(nodeList); + if (childList.size() <= 0) { + return null; + } + Node maxNode = root; + for (Node node : childList) { + if (maxNode.getNumber().compareTo(node.getNumber()) < 0) { + maxNode = node; + } + } + return maxNode; + } + + /** + *

功能描述:生成下一个子节点。

+ */ + public Node generateNextChildNode(Node node) { + Node newNode = null; + Node maxNode = getMaxNodeForThisLevel(node); + String nextNumber = number.firstNumber(); + int level = node.getLevel(); + if (maxNode != null && !"0".equals(maxNode.getId())) {//本级存在子节点,且非根节点 + nextNumber = number.produceNext(maxNode.getNumber()); + level = maxNode.getLevel(); + } + newNode = new Node(String.valueOf(++idSeq), nextNumber, node.getId(), level); + + generateNodeText(newNode, nextNumber); + + return newNode; + } + + + /** + * + *

功能描述:获取父节点。

+ */ + public Node getParentNode(Node node) { + for (Node n : nodeList) { + if (node.getParentId() == n.getId()) { + return n; + } + } + return node; + } + + /** + *

功能描述:生成节点路径。

+ */ + public void generateNodeText(Node node, String text) { + + if (node == null || "0".equals(node.getId())) { + return; + } + + Node pNode = getParentNode(node); + + if (!"0".equals(pNode.getId())) { + text = pNode.getText() + separator + text; + } + + node.setText(text); + } + + /** + *

功能描述:遍历所有树节点。

+ */ + public void traverseNodeList(Node node) { + if(node==null){ + node = getRoot(nodeList); + } + List childNodes = getChildNodes(node); + System.out.println(node.getText()); + if (childNodes.size() > 0) { + for (Node n : childNodes) { + traverseNodeList(n); + } + } + } + public static void main(String[] args) { + SerialNumber number = new SerialNumber(); + NumberTree treeNode = new NumberTree(".", number); + + addSomeNodes(treeNode); + treeNode.traverseNodeList(null); + } + + /** + *

功能描述:获取根节点。

+ */ + public Node getRoot(List nodeList) { + Node root = null; + if (nodeList.size() <= 0 || (root = getNodeById(nodeList, "0")) == null) { + root = createRoot(); + nodeList.add(root); + } + return root; + } + + private Node getNodeById(List nodeList, String id) { + Node node = null; + if(id!=null){ + for (Node n : nodeList) { + if (id.equals(n.getId())) { + node = n; + break; + } + } + } + return node; + } + + private Node createRoot() { + Node root = new Node("0", number.rootNumber(), "-1", 0); + root.setText("0"); + return root; + } + + /** + *

功能描述:测试添加节点。

+ */ + private static Node addSomeNodes(NumberTree tree) { + Node root = tree.getRoot(tree.nodeList); + Node node1 = getNextNode(tree, root);//1 + Node node2 = getNextNode(tree, root);//2 + Node node3 = getNextNode(tree, root);//3 + Node node11 = getNextNode(tree, node1);//1.1 + Node node12 = getNextNode(tree, node1);//1.2 + Node node21 = getNextNode(tree, node2);//2.1 + Node node211 = getNextNode(tree, node21);//2.1.1 + Node node212 = getNextNode(tree, node21);//2.1.2 + Node node22 = getNextNode(tree, node2);//2.2 + Node node221 = getNextNode(tree, node22);//2.2.1 + Node node31 = getNextNode(tree, node3); + Node node32 = getNextNode(tree, node3); + Node node311 = getNextNode(tree, node31); + Node node3111 = getNextNode(tree, node311); + return root; + } + + public static Node getNextNode(NumberTree tree, Node pNode) { + Node node = tree.generateNextChildNode(pNode); + if (node != null) { + tree.nodeList.add(node); + } + return node; + } + +} diff --git a/src/main/java/com/show/util/tree/SerialNumber.java b/src/main/java/com/show/util/tree/SerialNumber.java new file mode 100644 index 0000000..a32c6ab --- /dev/null +++ b/src/main/java/com/show/util/tree/SerialNumber.java @@ -0,0 +1,28 @@ +package com.show.util.tree; + +public class SerialNumber{ + + public String produceNext(String crrnt) { + + String next = "0"; + if (crrnt != null) { + try { + int crrntNum = Integer.parseInt(crrnt); + next = String.valueOf(crrntNum + 1); + } catch (Exception e) { + System.err.println("非数字类型的字符串!"); + } + } + return next; + } + + public String rootNumber() { + return "0"; + } + + public String firstNumber() { + return "1"; + } + + +} diff --git a/src/main/java/com/show/vo/administer/NamesVO.java b/src/main/java/com/show/vo/administer/NamesVO.java new file mode 100644 index 0000000..ff55327 --- /dev/null +++ b/src/main/java/com/show/vo/administer/NamesVO.java @@ -0,0 +1,12 @@ +package com.show.vo.administer; + +import lombok.Data; + +@Data +public class NamesVO { + + private Long id; + + private String name; + +} diff --git a/src/main/java/com/show/vo/member/ApplyCenterSummaryVO.java b/src/main/java/com/show/vo/member/ApplyCenterSummaryVO.java new file mode 100644 index 0000000..6ce4d6a --- /dev/null +++ b/src/main/java/com/show/vo/member/ApplyCenterSummaryVO.java @@ -0,0 +1,14 @@ +package com.show.vo.member; + +import lombok.Data; + +@Data +public class ApplyCenterSummaryVO { + + private Integer totalCnt; + + private Integer newWorkCnt; + + private Integer updateCnt; + +} diff --git a/src/main/java/com/show/vo/member/LoginVO.java b/src/main/java/com/show/vo/member/LoginVO.java new file mode 100644 index 0000000..9d203b8 --- /dev/null +++ b/src/main/java/com/show/vo/member/LoginVO.java @@ -0,0 +1,40 @@ +package com.show.vo.member; + +import lombok.Data; + +@Data +public class LoginVO { + + private Long id; + + private String userName; + + private String aliasName; + + private String image; + + private String studyNo; + + private Integer firstLogin; + + private String activityStatus; + + private String gender; + + private String telephone; + + private String idCard; + + private String college; + + private String major; + + private String enrollmentYear; + + private Long academyId; + + private Long collegeId; + + private Long majorId; + +} diff --git a/src/main/java/com/show/vo/member/MemberBaseInoVO.java b/src/main/java/com/show/vo/member/MemberBaseInoVO.java new file mode 100644 index 0000000..ffb3aae --- /dev/null +++ b/src/main/java/com/show/vo/member/MemberBaseInoVO.java @@ -0,0 +1,19 @@ +package com.show.vo.member; + +import lombok.Data; + +@Data +public class MemberBaseInoVO { + + private Long id; + + private String aliasName; + + private String telephone; + + private String college; + + private String major; + + private String image; +} diff --git a/src/main/java/com/show/vo/member/MemberWorkGroupVO.java b/src/main/java/com/show/vo/member/MemberWorkGroupVO.java new file mode 100644 index 0000000..93b5b95 --- /dev/null +++ b/src/main/java/com/show/vo/member/MemberWorkGroupVO.java @@ -0,0 +1,29 @@ +package com.show.vo.member; + +import com.show.model.ShowLabelDictDO; +import lombok.Data; + +import java.util.List; + +@Data +public class MemberWorkGroupVO { + + private Long id; + + private String userName; + + private String aliasName; + + private String title; + + private String submitDate; + + private String submitStatus; + + private String type; + + private Long instanceId; + + private List showLabelDictDOS; + +} diff --git a/src/main/java/com/show/vo/oss/GetSecretVO.java b/src/main/java/com/show/vo/oss/GetSecretVO.java new file mode 100644 index 0000000..d035e0d --- /dev/null +++ b/src/main/java/com/show/vo/oss/GetSecretVO.java @@ -0,0 +1,12 @@ +package com.show.vo.oss; + +import lombok.Data; + +@Data +public class GetSecretVO { + + private String key; + + private String secret; + +} diff --git a/src/main/java/com/show/vo/oss/UploadFileVO.java b/src/main/java/com/show/vo/oss/UploadFileVO.java new file mode 100644 index 0000000..a9a4184 --- /dev/null +++ b/src/main/java/com/show/vo/oss/UploadFileVO.java @@ -0,0 +1,10 @@ +package com.show.vo.oss; + +import lombok.Data; + +@Data +public class UploadFileVO { + + private String url; + +} diff --git a/src/main/java/com/show/vo/work/CopiesVO.java b/src/main/java/com/show/vo/work/CopiesVO.java new file mode 100644 index 0000000..e25ac74 --- /dev/null +++ b/src/main/java/com/show/vo/work/CopiesVO.java @@ -0,0 +1,14 @@ +package com.show.vo.work; + +import lombok.Data; + +import java.util.List; + +@Data +public class CopiesVO { + + private List users; + + private List roles; + +} diff --git a/src/main/java/com/show/vo/work/CopyDetailVO.java b/src/main/java/com/show/vo/work/CopyDetailVO.java new file mode 100644 index 0000000..de80096 --- /dev/null +++ b/src/main/java/com/show/vo/work/CopyDetailVO.java @@ -0,0 +1,14 @@ +package com.show.vo.work; + +import lombok.Data; + +@Data +public class CopyDetailVO { + + private Long id; + + private String name; + + private String copyType; + +} diff --git a/src/main/java/com/show/vo/work/CreatorsVO.java b/src/main/java/com/show/vo/work/CreatorsVO.java new file mode 100644 index 0000000..c26ed4c --- /dev/null +++ b/src/main/java/com/show/vo/work/CreatorsVO.java @@ -0,0 +1,24 @@ +package com.show.vo.work; + +import lombok.Data; + +import java.util.List; + +@Data +public class CreatorsVO { + + private Long id; + + private String aliasName; + + private String college; + + private String major; + + private String image; + + private Integer workCnt; + + private List pageWorksVOS; + +} diff --git a/src/main/java/com/show/vo/work/FlowNodesVO.java b/src/main/java/com/show/vo/work/FlowNodesVO.java new file mode 100644 index 0000000..c70cda9 --- /dev/null +++ b/src/main/java/com/show/vo/work/FlowNodesVO.java @@ -0,0 +1,12 @@ +package com.show.vo.work; + +import com.show.model.WorkflowNode; +import lombok.Data; + +import java.util.List; + +@Data +public class FlowNodesVO extends WorkflowNode { + + private List namesVOS; +} diff --git a/src/main/java/com/show/vo/work/GetWorkflowHistoryVO.java b/src/main/java/com/show/vo/work/GetWorkflowHistoryVO.java new file mode 100644 index 0000000..f343130 --- /dev/null +++ b/src/main/java/com/show/vo/work/GetWorkflowHistoryVO.java @@ -0,0 +1,34 @@ +package com.show.vo.work; + +import lombok.Data; + +import java.util.List; + +@Data +public class GetWorkflowHistoryVO { + + private Long id; + + private String nodeName; + + private List checkers; + + private List roles; + + private String status; + + private String approveOpinion; + + private String endTime; + + private String operator; + + private String assigneeType; + + private Long assignee; + + private Long nodeId; + + private Long checkId; + +} diff --git a/src/main/java/com/show/vo/work/HotSpotWorksVO.java b/src/main/java/com/show/vo/work/HotSpotWorksVO.java new file mode 100644 index 0000000..c08b51c --- /dev/null +++ b/src/main/java/com/show/vo/work/HotSpotWorksVO.java @@ -0,0 +1,14 @@ +package com.show.vo.work; + +import lombok.Data; + +@Data +public class HotSpotWorksVO { + + private Long id; + + private String title; + + private String homePage; + +} diff --git a/src/main/java/com/show/vo/work/MyWorksOverviewVO.java b/src/main/java/com/show/vo/work/MyWorksOverviewVO.java new file mode 100644 index 0000000..3d57e8d --- /dev/null +++ b/src/main/java/com/show/vo/work/MyWorksOverviewVO.java @@ -0,0 +1,14 @@ +package com.show.vo.work; + +import lombok.Data; + +@Data +public class MyWorksOverviewVO { + + private Integer totalCnt; + + private Integer passCnt; + + private Integer toCheckCnt; + +} diff --git a/src/main/java/com/show/vo/work/MyWorksVO.java b/src/main/java/com/show/vo/work/MyWorksVO.java new file mode 100644 index 0000000..edffad8 --- /dev/null +++ b/src/main/java/com/show/vo/work/MyWorksVO.java @@ -0,0 +1,37 @@ +package com.show.vo.work; + +import com.show.model.ShowLabelDictDO; +import lombok.Data; + +import java.util.List; + +@Data +public class MyWorksVO { + + private Long id; + + private String title; + + private String submitStatus; + + private String userName; + + private String aliasName; + + private String submitDate; + + private Integer viewCnt; + + private String showStatus; + + private String workDesc; + + private String homePage; + + private String works; + + private Long instanceId; + + private List showLabelDictDOS; + +} diff --git a/src/main/java/com/show/vo/work/NamesVO.java b/src/main/java/com/show/vo/work/NamesVO.java new file mode 100644 index 0000000..68633fe --- /dev/null +++ b/src/main/java/com/show/vo/work/NamesVO.java @@ -0,0 +1,12 @@ +package com.show.vo.work; + +import lombok.Data; + +@Data +public class NamesVO { + + private Long id; + + private String name; + +} diff --git a/src/main/java/com/show/vo/work/OneWorkVO.java b/src/main/java/com/show/vo/work/OneWorkVO.java new file mode 100644 index 0000000..f7e6a6d --- /dev/null +++ b/src/main/java/com/show/vo/work/OneWorkVO.java @@ -0,0 +1,51 @@ +package com.show.vo.work; + +import com.show.model.ShowLabelDictDO; +import lombok.Data; + +import java.util.List; + +@Data +public class OneWorkVO { + + private Long id; + + private String title; + + private String aliasName; + + private String userName; + + private String works; + + private String workDesc; + + private String homePage; + + private String submitDate; + + private String submitStatus; + + private String newStatus; + + private String college; + + private String major; + + private String studyNo; + + private String telephone; + + private String className; + + private Long instanceId; + + private Long memberId; + + private Integer viewCnt; + + private String image; + + private List showLabelDictDOS; + +} diff --git a/src/main/java/com/show/vo/work/PageWorksVO.java b/src/main/java/com/show/vo/work/PageWorksVO.java new file mode 100644 index 0000000..f718e70 --- /dev/null +++ b/src/main/java/com/show/vo/work/PageWorksVO.java @@ -0,0 +1,20 @@ +package com.show.vo.work; + +import lombok.Data; + +@Data +public class PageWorksVO { + + private Long id; + + private String title; + + private String homePage; + + private String aliasName; + + private Long memberId; + + private String image; + +} diff --git a/src/main/java/com/subsidy/MeishuApplication.java b/src/main/java/com/subsidy/MeishuApplication.java deleted file mode 100644 index b984c32..0000000 --- a/src/main/java/com/subsidy/MeishuApplication.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.subsidy; - -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.scheduling.annotation.EnableScheduling; -import org.springframework.transaction.annotation.EnableTransactionManagement; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@SpringBootApplication -@MapperScan(basePackages = {"com.subsidy.mapper"}) -@EnableScheduling -//@EnableCaching -@EnableAsync -@EnableTransactionManagement -public class MeishuApplication { - - public static void main(String[] args) { - SpringApplication.run(MeishuApplication.class, args); - } - - //@Bean - //public ServletRegistrationBean druidStatViewServlet() { - // //先配置管理后台的servLet,访问的入口为/druid/ - // ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean( - // new StatViewServlet(), "/druid/*"); - // // IP白名单 (没有配置或者为空,则允许所有访问) - // servletRegistrationBean.addInitParameter("allow", "127.0.0.1"); - // // IP黑名单 (存在共同时,deny优先于allow) - // servletRegistrationBean.addInitParameter("deny", ""); - // servletRegistrationBean.addInitParameter("loginUsername", "admin"); - // servletRegistrationBean.addInitParameter("loginPassword", "yhkl1234"); - // servletRegistrationBean.addInitParameter("resetEnable", "false"); - // return servletRegistrationBean; - //} - -} diff --git a/src/main/java/com/subsidy/common/ResponseData.java b/src/main/java/com/subsidy/common/ResponseData.java deleted file mode 100644 index fd45218..0000000 --- a/src/main/java/com/subsidy/common/ResponseData.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.subsidy.common; - -import com.subsidy.common.configure.RemoteProperties; -import lombok.Data; -import org.springframework.boot.context.properties.EnableConfigurationProperties; - -/** - * 返回数据 - * - * @author DengMin - * @date 2019/08/27 13:57 - **/ -@Data -@EnableConfigurationProperties(RemoteProperties.class) -public class ResponseData { - - public static ResponseVO generateCreatedResponse(int code) { - return (ResponseVO) ResponseVO.builder() - .code(code) - .message(RemoteProperties.getMessage(code)) - .build(); - } - - public static ResponseVO generateCreatedResponse(int code, String message) { - return (ResponseVO) ResponseVO.builder() - .code(code) - .message(message) - .build(); - } - - public static ResponseVO generateCreatedResponse(int code, T data) { - return (ResponseVO) ResponseVO.builder() - .code(code) - .message(RemoteProperties.getMessage(code)) - .data(data) - .build(); - } - - public static ResponseVO generateCreatedResponse(int code, String message, T data) { - return (ResponseVO) ResponseVO.builder() - .code(code) - .message(message) - .data(data) - .build(); - } - - public static ResponseVO generateCreatedResponse(int code, String message, String path) { - return (ResponseVO) ResponseVO.builder() - .code(code) - .message(message) - .path(path) - .build(); - } -} \ No newline at end of file diff --git a/src/main/java/com/subsidy/common/ResponseVO.java b/src/main/java/com/subsidy/common/ResponseVO.java deleted file mode 100644 index afaa676..0000000 --- a/src/main/java/com/subsidy/common/ResponseVO.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.subsidy.common; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@Builder -@AllArgsConstructor -@NoArgsConstructor -public class ResponseVO { - - private Integer code; - - private String message; - - private T data; - - private String path; -} \ No newline at end of file diff --git a/src/main/java/com/subsidy/common/configure/AliyunSmsProperties.java b/src/main/java/com/subsidy/common/configure/AliyunSmsProperties.java deleted file mode 100644 index 6e26e1e..0000000 --- a/src/main/java/com/subsidy/common/configure/AliyunSmsProperties.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.subsidy.common.configure; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Data -@Component -@ConfigurationProperties(prefix = "sms") -public class AliyunSmsProperties { - - private String product; - - private String domain; - - private String accessKeyId; - - private String accessKeySecret; - - private String cpcode; - - private String excode; - - private String key; - - private String rcsapi; - -} diff --git a/src/main/java/com/subsidy/common/configure/MyTomcat.java b/src/main/java/com/subsidy/common/configure/MyTomcat.java deleted file mode 100644 index 52d1ac7..0000000 --- a/src/main/java/com/subsidy/common/configure/MyTomcat.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.subsidy.common.configure; - -import org.apache.catalina.connector.Connector; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer; -import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; -import org.springframework.boot.web.servlet.MultipartConfigFactory; -import org.springframework.boot.web.servlet.server.ServletWebServerFactory; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import javax.servlet.MultipartConfigElement; - -@Configuration -public class MyTomcat { - - - @Value("${spring.server.port}") - private String port; - @Value("${spring.server.acceptorThreadCount}") - private String acceptorThreadCount; - @Value("${spring.server.minSpareThreads}") - private String minSpareThreads; - @Value("${spring.server.maxSpareThreads}") - private String maxSpareThreads; - @Value("${spring.server.maxThreads}") - private String maxThreads; - @Value("${spring.server.maxConnections}") - private String maxConnections; - @Value("${spring.server.protocol}") - private String protocol; - @Value("${spring.server.redirectPort}") - private String redirectPort; - @Value("${spring.server.compression}") - private String compression; - @Value("${spring.server.connectionTimeout}") - private String connectionTimeout; - - @Value("${spring.server.MaxFileSize}") - private String MaxFileSize; - @Value("${spring.server.MaxRequestSize}") - private String MaxRequestSize; - - @Bean - public ServletWebServerFactory servletContainer() { - TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory(); - tomcat.addConnectorCustomizers(new GwsTomcatConnectionCustomizer()); - return tomcat; - } - - @Bean - public MultipartConfigElement multipartConfigElement() { - MultipartConfigFactory factory = new MultipartConfigFactory(); - // 单个数据大小 - factory.setMaxFileSize(MaxFileSize); // KB,MB - /// 总上传数据大小 - factory.setMaxRequestSize(MaxRequestSize); - return factory.createMultipartConfig(); - } - - /** - * - * 默认http连接 - * - * @version - * @author liuyi 2016年7月20日 下午7:59:41 - * - */ - public class GwsTomcatConnectionCustomizer implements TomcatConnectorCustomizer { - - public GwsTomcatConnectionCustomizer() { - } - - @Override - public void customize(Connector connector) { - connector.setPort(Integer.valueOf(port)); - connector.setAttribute("connectionTimeout", connectionTimeout); - connector.setAttribute("acceptorThreadCount", acceptorThreadCount); - connector.setAttribute("minSpareThreads", minSpareThreads); - connector.setAttribute("maxSpareThreads", maxSpareThreads); - connector.setAttribute("maxThreads", maxThreads); - connector.setAttribute("maxConnections", maxConnections); - connector.setAttribute("protocol", protocol); - connector.setAttribute("redirectPort", "redirectPort"); - connector.setAttribute("compression", "compression"); - } - } - -} diff --git a/src/main/java/com/subsidy/common/configure/MybatisPlusConfig.java b/src/main/java/com/subsidy/common/configure/MybatisPlusConfig.java deleted file mode 100644 index c02a5b2..0000000 --- a/src/main/java/com/subsidy/common/configure/MybatisPlusConfig.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.subsidy.common.configure; - -import com.baomidou.mybatisplus.annotation.DbType; -import com.baomidou.mybatisplus.core.config.GlobalConfig; -import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; -import com.subsidy.common.handler.MetaHandler; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - * @author: tuyp - * @create: 2020-08-12 12:01 - */ -@Configuration -@ConditionalOnClass(value = {PaginationInterceptor.class}) -public class MybatisPlusConfig { - - /** - * 分页 - * @return - */ - @Bean - public PaginationInterceptor paginationInterceptor(){ - PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); - paginationInterceptor.setDialectType(DbType.MYSQL.getDb()); - return paginationInterceptor; - } -// -// /** -// * 打印 sql -// */ -// @Bean -// public PerformanceInterceptor performanceInterceptor() { -// PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor(); -// //格式化sql语句 -// Properties properties = new Properties(); -// properties.setProperty("format", "false"); -// performanceInterceptor.setProperties(properties); -// return performanceInterceptor; -// } - - /** - * 自动填充功能 - * @return - */ - @Bean - public GlobalConfig globalConfig() { - GlobalConfig globalConfig = new GlobalConfig(); - globalConfig.setMetaObjectHandler(new MetaHandler()); - return globalConfig; - } - -} diff --git a/src/main/java/com/subsidy/common/configure/PolyvConfig.java b/src/main/java/com/subsidy/common/configure/PolyvConfig.java deleted file mode 100644 index 8082d40..0000000 --- a/src/main/java/com/subsidy/common/configure/PolyvConfig.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.subsidy.common.configure; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -@ConfigurationProperties(prefix = "polyv") -public class PolyvConfig { - - private String userId; - - private String appId; - - private String appSecret; - - private String secretKey; -} diff --git a/src/main/java/com/subsidy/common/configure/QXueYouConfig.java b/src/main/java/com/subsidy/common/configure/QXueYouConfig.java deleted file mode 100644 index 0bf6873..0000000 --- a/src/main/java/com/subsidy/common/configure/QXueYouConfig.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.subsidy.common.configure; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -@Data -@Configuration -@ConfigurationProperties(prefix = "qxueyou") -public class QXueYouConfig { - - private String appId; - - private String securityKey; - - private String url; - -} diff --git a/src/main/java/com/subsidy/common/configure/RedisConfig.java b/src/main/java/com/subsidy/common/configure/RedisConfig.java deleted file mode 100644 index 63cf2de..0000000 --- a/src/main/java/com/subsidy/common/configure/RedisConfig.java +++ /dev/null @@ -1,122 +0,0 @@ -package com.subsidy.common.configure; - -import com.fasterxml.jackson.annotation.JsonAutoDetect; -import com.fasterxml.jackson.annotation.PropertyAccessor; -import com.fasterxml.jackson.databind.ObjectMapper; -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.data.redis.connection.RedisConnectionFactory; -import org.springframework.data.redis.core.HashOperations; -import org.springframework.data.redis.core.ListOperations; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.data.redis.core.SetOperations; -import org.springframework.data.redis.core.ValueOperations; -import org.springframework.data.redis.core.ZSetOperations; -import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; -import org.springframework.data.redis.serializer.StringRedisSerializer; - -@EnableCaching - -/** - *

- * Redis - *

- * - * @author DengMin - * @since 2020/12/14 - */ -@Configuration -public class RedisConfig extends CachingConfigurerSupport { - - /** - * retemplate相关配置 - * @param factory - * @return - */ - @Bean - public RedisTemplate redisTemplate(RedisConnectionFactory factory) { - - RedisTemplate template = new RedisTemplate<>(); - // 配置连接工厂 - template.setConnectionFactory(factory); - - //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式) - Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class); - - ObjectMapper om = new ObjectMapper(); - // 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public - om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); - // 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常 - om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); - jacksonSeial.setObjectMapper(om); - - // 值采用json序列化 - template.setValueSerializer(jacksonSeial); - //使用StringRedisSerializer来序列化和反序列化redis的key值 - template.setKeySerializer(new StringRedisSerializer()); - - // 设置hash key 和value序列化模式 - template.setHashKeySerializer(new StringRedisSerializer()); - template.setHashValueSerializer(jacksonSeial); - template.afterPropertiesSet(); - - return template; - } - - /** - * 对hash类型的数据操作 - * - * @param redisTemplate - * @return - */ - @Bean - public HashOperations hashOperations(RedisTemplate redisTemplate) { - return redisTemplate.opsForHash(); - } - - /** - * 对redis字符串类型数据操作 - * - * @param redisTemplate - * @return - */ - @Bean - public ValueOperations valueOperations(RedisTemplate redisTemplate) { - return redisTemplate.opsForValue(); - } - - /** - * 对链表类型的数据操作 - * - * @param redisTemplate - * @return - */ - @Bean - public ListOperations listOperations(RedisTemplate redisTemplate) { - return redisTemplate.opsForList(); - } - - /** - * 对无序集合类型的数据操作 - * - * @param redisTemplate - * @return - */ - @Bean - public SetOperations setOperations(RedisTemplate redisTemplate) { - return redisTemplate.opsForSet(); - } - - /** - * 对有序集合类型的数据操作 - * - * @param redisTemplate - * @return - */ - @Bean - public ZSetOperations zSetOperations(RedisTemplate redisTemplate) { - return redisTemplate.opsForZSet(); - } -} \ No newline at end of file diff --git a/src/main/java/com/subsidy/common/configure/RemoteProperties.java b/src/main/java/com/subsidy/common/configure/RemoteProperties.java deleted file mode 100644 index 23a42de..0000000 --- a/src/main/java/com/subsidy/common/configure/RemoteProperties.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.subsidy.common.configure; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.PropertySource; -import org.springframework.stereotype.Component; - -import java.util.HashMap; -import java.util.Map; - -/** - *

- * 读取状态码 - *

- * - * @author DengMin - * @date Created in 2020/08/24 - */ -@Component -@ConfigurationProperties(prefix = "meishu") -@PropertySource(value = "classpath:code.properties", encoding = "UTF-8") -public class RemoteProperties { - - private static Map codeMessage = new HashMap<>(); - - public static String getMessage(Integer code) { - return codeMessage.get(code); - } - - public Map getCodeMessage() { - return codeMessage; - } - - public void setCodeMessage(Map codeMessage) { - RemoteProperties.codeMessage = codeMessage; - } -} \ No newline at end of file diff --git a/src/main/java/com/subsidy/common/configure/RenSheConfig.java b/src/main/java/com/subsidy/common/configure/RenSheConfig.java deleted file mode 100644 index 65e7680..0000000 --- a/src/main/java/com/subsidy/common/configure/RenSheConfig.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.subsidy.common.configure; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@Data -@ConfigurationProperties(prefix = "renshe") -public class RenSheConfig { - - //接口地址 - private String url; - - //私钥 - private String secretKey; - - //普陀 正式接口 - private String putuo; -} diff --git a/src/main/java/com/subsidy/common/configure/RestTemplateConfig.java b/src/main/java/com/subsidy/common/configure/RestTemplateConfig.java deleted file mode 100644 index c4f692f..0000000 --- a/src/main/java/com/subsidy/common/configure/RestTemplateConfig.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.subsidy.common.configure; - -import org.springframework.context.annotation.Bean; -import org.springframework.http.MediaType; -import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; -import org.springframework.stereotype.Component; -import org.springframework.web.client.RestTemplate; - -import java.util.ArrayList; -import java.util.List; - -@Component -public class RestTemplateConfig { - - @Bean - public RestTemplate restTemplate() { - RestTemplate restTemplate = new RestTemplate(); - restTemplate.getMessageConverters().add(new WxMappingJackson2HttpMessageConverter()); - return restTemplate; - } - - public class WxMappingJackson2HttpMessageConverter extends MappingJackson2HttpMessageConverter { - public WxMappingJackson2HttpMessageConverter(){ - List mediaTypes = new ArrayList<>(); - mediaTypes.add(MediaType.TEXT_PLAIN); - mediaTypes.add(MediaType.TEXT_HTML); - setSupportedMediaTypes(mediaTypes); - } - } - -} diff --git a/src/main/java/com/subsidy/common/configure/SubsidyConfig.java b/src/main/java/com/subsidy/common/configure/SubsidyConfig.java deleted file mode 100644 index 18d8cbf..0000000 --- a/src/main/java/com/subsidy/common/configure/SubsidyConfig.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.subsidy.common.configure; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -@Data -@Configuration -@ConfigurationProperties(prefix = "subsidy") -public class SubsidyConfig { - - private String appId; - - private String securityKey; - - private String url; - -} diff --git a/src/main/java/com/subsidy/common/configure/SwaggerConfig.java b/src/main/java/com/subsidy/common/configure/SwaggerConfig.java deleted file mode 100644 index fd0d2e0..0000000 --- a/src/main/java/com/subsidy/common/configure/SwaggerConfig.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.subsidy.common.configure; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; -import springfox.documentation.builders.ApiInfoBuilder; -import springfox.documentation.builders.PathSelectors; -import springfox.documentation.builders.RequestHandlerSelectors; -import springfox.documentation.spi.DocumentationType; -import springfox.documentation.spring.web.plugins.Docket; -import springfox.documentation.swagger2.annotations.EnableSwagger2; - -@Configuration -@EnableSwagger2 -public class SwaggerConfig { - - @Value("${spring.profiles.active:}") - private String activeProfile; - - - @Bean - public Docket createRestApi() { - - // 判断是否为生产环境 - boolean isProd = "prod".equals(activeProfile); - - return new Docket(DocumentationType.SWAGGER_2) - .enable(!isProd) - .pathMapping("/") - .select() - .apis(RequestHandlerSelectors.basePackage("com.subsidy")) - .paths(PathSelectors.any()) - .build().apiInfo(new ApiInfoBuilder() - .title("ecnu") - .description("接口文档规范") - .version("1.0") -// .contact(new Contact("啊啊啊啊","www.youkehulian.com","tcp@meishu.com")) -// .license("The Apache License") -// .licenseUrl("http://www.baidu.com") - .build()); - } -} diff --git a/src/main/java/com/subsidy/common/configure/VODConfig.java b/src/main/java/com/subsidy/common/configure/VODConfig.java deleted file mode 100644 index b27c94c..0000000 --- a/src/main/java/com/subsidy/common/configure/VODConfig.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.subsidy.common.configure; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -/** - * @author: tuyp - * @create: 2020-06-01 16:46 - */ -@Component -@Data -@ConfigurationProperties(prefix = "vod") -public class VODConfig { - - private String appId; - - private String secretId; - - private String secretKey; - - private String api; - - private String region; - - private Integer classId; -} diff --git a/src/main/java/com/subsidy/common/configure/WebConfig.java b/src/main/java/com/subsidy/common/configure/WebConfig.java deleted file mode 100644 index 07c78cd..0000000 --- a/src/main/java/com/subsidy/common/configure/WebConfig.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.subsidy.common.configure; - - -import com.subsidy.common.interceptor.AuthenticationInterceptor; -import org.springframework.beans.factory.annotation.Autowired; -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; -import org.springframework.web.servlet.config.annotation.CorsRegistry; -import org.springframework.web.servlet.config.annotation.InterceptorRegistry; -import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -/** - * @author DengMin - * @date 2020/07/06 - **/ -@Configuration -public class WebConfig implements WebMvcConfigurer { - - @Autowired - private AuthenticationInterceptor authenticationInterceptor; - - /** - * 跨域支持 - * - * @param registry - */ - @Override - public void addCorsMappings(CorsRegistry registry) { - registry.addMapping("/**") -// .allowCredentials(true) - .allowedOrigins("*") - .allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS") - .allowedHeaders("*") - .maxAge(3600); - } - - /** - * Swagger - * - * @param registry - */ - @Override - public void addResourceHandlers(ResourceHandlerRegistry registry) { - registry.addResourceHandler("/**").addResourceLocations("classpath:/static/"); - registry.addResourceHandler("swagger-ui.html") - .addResourceLocations("classpath:/META-INF/resources/"); - registry.addResourceHandler("/webjars/**") - .addResourceLocations("classpath:/META-INF/resources/webjars/"); - } - - /** - * 鉴权 - * - * @param registry - */ - @Override - public void addInterceptors(InterceptorRegistry registry) { - registry.addInterceptor(authenticationInterceptor) - .excludePathPatterns("/static/*") - .addPathPatterns("/**"); - } - - @Bean - public CorsFilter corsFilter() { - CorsConfiguration config = new CorsConfiguration(); - config.setMaxAge(3600L); - config.addAllowedOrigin("*"); - config.addAllowedMethod("*"); - config.addAllowedHeader("*"); - UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource(); - configSource.registerCorsConfiguration("/**", config); - return new CorsFilter(configSource); - } -} \ No newline at end of file diff --git a/src/main/java/com/subsidy/common/configure/WebLogAspect.java b/src/main/java/com/subsidy/common/configure/WebLogAspect.java deleted file mode 100644 index ebfe688..0000000 --- a/src/main/java/com/subsidy/common/configure/WebLogAspect.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.subsidy.common.configure; - -import org.aspectj.lang.JoinPoint; -import org.aspectj.lang.annotation.*; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.core.annotation.Order; -import org.springframework.stereotype.Component; -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; -import java.util.Arrays; - -@Aspect -@Component -@Order(1) -public class WebLogAspect { - - private final Logger logger = LoggerFactory.getLogger(WebLogAspect.class); - - @Pointcut("execution(public * com.subsidy.controller.*.*(..))")//切入点描述 这个是controller包的切入点 - public void controllerLog(){}//签名,可以理解成这个切入点的一个名称 - - @Pointcut("execution(public * com.subsidy.controller.*.*(..))") - public void serviceImplLog(){} - - @Before("controllerLog()") //在切入点的方法run之前要干的 - public void logBeforeController(JoinPoint joinPoint) { - - -// RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); - //这个RequestContextHolder是Springmvc提供来获得请求的东西 -// HttpServletRequest request = ((ServletRequestAttributes)requestAttributes).getRequest(); - - // 记录下请求内容 -// logger.info("####requestUrl : " + request.getRequestURL().toString()); -// logger.info("####requestParam : " + Arrays.toString(joinPoint.getArgs())); - - } - -// @Around("serviceImplLog()") -// public Object afterController(ProceedingJoinPoint proceedingJoinPoint) { -// -// Object result = null; -// -// try{ -// result = proceedingJoinPoint.proceed(); -// logger.info("====reulst"+result); -// }catch (Throwable e){ -// MyException myException =(MyException)e; -// throw myException; -// } -// return result; -// } - -} \ No newline at end of file diff --git a/src/main/java/com/subsidy/common/configure/WechatConfig.java b/src/main/java/com/subsidy/common/configure/WechatConfig.java deleted file mode 100644 index bb18e0b..0000000 --- a/src/main/java/com/subsidy/common/configure/WechatConfig.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.subsidy.common.configure; - - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -@Data -@Configuration -@ConfigurationProperties(prefix = "wechat") -public class WechatConfig { - - private String appId; - - private String appSecret; - - private String msgUrl; - // - private String templateId; - // - //private String agentId; - - -} diff --git a/src/main/java/com/subsidy/common/constant/AttendanceConstant.java b/src/main/java/com/subsidy/common/constant/AttendanceConstant.java deleted file mode 100644 index 1305fc9..0000000 --- a/src/main/java/com/subsidy/common/constant/AttendanceConstant.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.subsidy.common.constant; - -public class AttendanceConstant { - - /** - * 创建预约api - */ - public static final String CREATE_TOPIC_URL = "https://open.api.roomis.com.cn/api/my/booking/spaces/{spaceId}/events"; - - /** - * 考勤api - */ - public static final String GET_ATTENDANCE_URL = "https://open.api.roomis.com.cn/api/attendance/{id}"; - - /** - * 创建人ID - */ - public static Long organizerId = 200000222L; - - /** - * 开始时间 - */ - public static String startTime = "07:00:00"; - - /** - * 结束时间 - */ - public static String endTime = "21:00:00"; -} diff --git a/src/main/java/com/subsidy/common/constant/Code.java b/src/main/java/com/subsidy/common/constant/Code.java deleted file mode 100644 index fbe57a0..0000000 --- a/src/main/java/com/subsidy/common/constant/Code.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.subsidy.common.constant; - -import lombok.Getter; - -@Getter -public enum Code { - - USERNAMENOTFOUND(1001, "用户不存在"), - BADCREDENTIALS(1002,"账户或者密码错误"), - ACCOUNTEXPIRED(1003,"账户过期"), - LOCKEDEXCEPTION(1004, "账户已锁定"), - DISABLEDEXCEPTION(1005,"账户已禁用"), - ACCESSDENIED(1006,"无权限访问"), - AUTHENTICATION(1007,"身份验证异常"), - NOHANDLERFOUND(1008,"找不到相应的视图处理器"), - PARAM_INVALID(1009, "参数不合法"), - TOKEN_EXCEPTION(1010, "无效的令牌"), - TOKEN_EXPIRED(1011, "当前账户已在其他设备登录"), - TOKEN_VERIFICATION_FAILED(1013, "令牌验证失败"), - OSS_ERROR(1012, "OSS文件上传异常"), - Network_ERROR(9000, "网络请求失败"), - SERVER_INTERNAL_ERROR(99999, "服务器内部错误"), - ; - - private Integer code; - - private String message; - - Code(Integer code, String message) { - this.code = code; - this.message = message; - } -} diff --git a/src/main/java/com/subsidy/common/constant/CourseNotification.java b/src/main/java/com/subsidy/common/constant/CourseNotification.java deleted file mode 100644 index 0111f35..0000000 --- a/src/main/java/com/subsidy/common/constant/CourseNotification.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.subsidy.common.constant; - -public class CourseNotification { - - public static final String UNSENT = "待发送"; - - public static final String SENT = "已发送"; -} diff --git a/src/main/java/com/subsidy/common/constant/MemberType.java b/src/main/java/com/subsidy/common/constant/MemberType.java deleted file mode 100644 index c6031a8..0000000 --- a/src/main/java/com/subsidy/common/constant/MemberType.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.subsidy.common.constant; - -public class MemberType { - - public static final String PRINCIPAL = "团队负责人"; - - public static final String TEAM_MEMBER = "团队成员"; - - public static final String MENTOR = "指导教师"; - -} diff --git a/src/main/java/com/subsidy/common/constant/Platform.java b/src/main/java/com/subsidy/common/constant/Platform.java deleted file mode 100644 index b1c9117..0000000 --- a/src/main/java/com/subsidy/common/constant/Platform.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.subsidy.common.constant; - -import lombok.Data; - -@Data -public class Platform { - - /* - 学生端 - */ - public static final String student = "student"; - - /* - 院校端 - */ - public static final String school = "school"; - - /* - 中心端 - */ - public static final String center = "center"; - - /* - 评审端 - */ - public static final String review = "review"; -} diff --git a/src/main/java/com/subsidy/common/constant/ProjectReview.java b/src/main/java/com/subsidy/common/constant/ProjectReview.java deleted file mode 100644 index f45323b..0000000 --- a/src/main/java/com/subsidy/common/constant/ProjectReview.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.subsidy.common.constant; - -import lombok.Data; - -@Data -public class ProjectReview { - - /** - * 评分状态(对于评分) - */ - public static final String SUBMITTED = "已评审"; - - public static final String TO_SCORE = "待评审"; - - /** - * 评审状态(对于项目) - */ -// public static final String INNER_TO_REVIEWED = "待评审"; - - public static final String TO_REVIEWED = "待评审"; - - - public static final String ASSIGNED = "已分配"; - - public static final String UNASSIGNED = "未分配"; - - public static final String REVIEW = "已评审"; - -} diff --git a/src/main/java/com/subsidy/common/constant/ProjectSchedule.java b/src/main/java/com/subsidy/common/constant/ProjectSchedule.java deleted file mode 100644 index 3ad657c..0000000 --- a/src/main/java/com/subsidy/common/constant/ProjectSchedule.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.subsidy.common.constant; - -import lombok.Data; - -@Data -public class ProjectSchedule { - - //报名阶段 - public static final String REGISTER = "校内报名"; - - public static final String SEMI_FINAL_REVIEW = "市级复赛"; - - public static final String FINAL_REVIEW = "市级决赛"; - -} diff --git a/src/main/java/com/subsidy/common/constant/ProjectStatus.java b/src/main/java/com/subsidy/common/constant/ProjectStatus.java deleted file mode 100644 index 8f7b6d9..0000000 --- a/src/main/java/com/subsidy/common/constant/ProjectStatus.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.subsidy.common.constant; - -import lombok.Data; - -@Data -public class ProjectStatus { - - public static final String UN_SUBMITTED = "填写中"; - - public static final String TO_REVIEW = "待评审"; - - public static final String WITHDRAWN = "已撤回"; - - public static final String FIRST_NOT_PASSED = "校内初审未通过"; - - public static final String SECOND_NOT_PASSED = "复赛审核未通过"; - - public static final String FIRST_REVIEW = "等待校内初审"; - - public static final String SECOND_REVIEW = "等待复赛审核"; - - public static final String THIRD_REVIEW = "等待决赛结果"; - - public static final String REMATCH_WINNING_AWARD = "优秀奖"; - - public static final String REMATCH_SILVER_AWARD = "银奖"; - - public static final String REMATCH_BRONZE_AWARD = "铜奖"; - - public static final String REMATCH_FINALS_GOLD_AWARD = "金奖"; - -} diff --git a/src/main/java/com/subsidy/common/constant/ProjectTrack.java b/src/main/java/com/subsidy/common/constant/ProjectTrack.java deleted file mode 100644 index 839cc6a..0000000 --- a/src/main/java/com/subsidy/common/constant/ProjectTrack.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.subsidy.common.constant; - -import lombok.Data; - -@Data -public class ProjectTrack { - - public static final String COURSE_TRACK = "课程风采展示"; - - public static final String TEACH_TRACK = "教学技能赛道"; - - public static final String CONSULT_TRACK = "咨询辅导赛道"; - -} diff --git a/src/main/java/com/subsidy/common/constant/ProjectType.java b/src/main/java/com/subsidy/common/constant/ProjectType.java deleted file mode 100644 index 5a66a56..0000000 --- a/src/main/java/com/subsidy/common/constant/ProjectType.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.subsidy.common.constant; - -/** - *

- * 项目组别 - *

- * - * @author DengMin - * @since 2021/6/9 - */ -public class ProjectType { - - /** - * 赛道 - */ - public static final String MAIN_TRACK = "主赛道"; - - public static final String SEED_TRACK = "种子赛道"; - - public static final String VOCATIONAL = "职教赛道"; - - /** - * 组别 - */ - public static final String TECHNOLOGY_INNOVATION_GROUP = "科技创新"; - - public static final String CULTURAL_CREATIVE_GROUP = "文化创意"; - - public static final String VOCATIONAL_GROUP = "高职"; - - public static final String SECONDARY_GROUP = "中职"; -} diff --git a/src/main/java/com/subsidy/common/constant/Role.java b/src/main/java/com/subsidy/common/constant/Role.java deleted file mode 100644 index 80bdc5d..0000000 --- a/src/main/java/com/subsidy/common/constant/Role.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.subsidy.common.constant; - -public class Role { - - public static final String LEADER = "参赛教师"; - - public static final String MEMBER = "课程团队"; - - -} diff --git a/src/main/java/com/subsidy/common/constant/SMSTemplate.java b/src/main/java/com/subsidy/common/constant/SMSTemplate.java deleted file mode 100644 index 572f7f1..0000000 --- a/src/main/java/com/subsidy/common/constant/SMSTemplate.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.subsidy.common.constant; - -public class SMSTemplate { - - /* - 项目进度通知 - */ - public static final String PROJECT_PROGRESS = "2760175"; - - /* - 项目提交通知 - */ - public static final String PROJECT_SUBMIT = "270159"; - - /* - 评审邀请通知 old - */ - public static final String REVIEW_INVITATION_OLD = "2765806"; - - /** - * - */ - public static final String REVIEW_INVITATION_NEW = "2939771"; - - /* - 撤销评审项目通知 - */ - public static final String CANCEL_REVIEW = "229303"; - - -} diff --git a/src/main/java/com/subsidy/common/constant/SmsCode.java b/src/main/java/com/subsidy/common/constant/SmsCode.java deleted file mode 100644 index 23a8179..0000000 --- a/src/main/java/com/subsidy/common/constant/SmsCode.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.subsidy.common.constant; - -import lombok.Getter; - -public class SmsCode { - - /** - * 平台:student(学生端)、school(院校端)、center(中心端)、review(评审端) - */ - public static final String student = "student"; - - public static final String school = "school"; - - public static final String center = "center"; - - public static final String review = "review"; - - /** - * 行为标识:register(注册标识)、login(登录标识) - */ - public static final String register = "register"; - - public static final String login = "login"; -} diff --git a/src/main/java/com/subsidy/common/constant/VodConstant.java b/src/main/java/com/subsidy/common/constant/VodConstant.java deleted file mode 100644 index 12fe119..0000000 --- a/src/main/java/com/subsidy/common/constant/VodConstant.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.subsidy.common.constant; - -import lombok.Getter; - -@Getter -public class VodConstant { - - /* 流量 */ - public final static String FLUX = "Flux"; - - /* 带宽 */ - public final static String BANDWIDTH = "Bandwidth"; - - /* 请求数 */ - public final static String REQUESTS = "Requests"; - - /* 请求命中率 */ - public final static String HITRATE = "Hitrate"; - - /* IP访问次数 */ - public final static String IP_VISITS = "Ip_visits"; - - /* 带宽缓存key */ - public final static String BANDWIDTH_CACHE_KEY = "CDNStatBandwidthCache"; - - /* 流量缓存key */ - public final static String FLUX_CACHE_KEY = "CDNStatFluxCache"; - - /* 自定义缓存名称(ehcache.xml中的自定义规则名称) */ - public final static String CDN_STAT_DETAILS_CACHE_NAME = "CDNStatDetails"; -} diff --git a/src/main/java/com/subsidy/common/constant/WxConstant.java b/src/main/java/com/subsidy/common/constant/WxConstant.java deleted file mode 100644 index 41ed23a..0000000 --- a/src/main/java/com/subsidy/common/constant/WxConstant.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.subsidy.common.constant; - -public class WxConstant { - - /** - * app id - */ - public static final String APPID = "wx75ec06e9ce50ef73"; - - /** - * 秘钥 - */ - public static final String SECRENT = "c039d32804278503474dfcf7cb3944b9"; - - /** - * 获取访问用户身份 - */ - public static final String GETUSERINFO = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token={access_token}&code={code}"; - - /** - * 读取成员 - */ - public static final String GET = "https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token={access_token}&userid={userid}"; - - /** - * 获取access_token - */ - public static final String GET_SUITE_TOKEN = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appid}&secret={secret}"; - - - /** - * 扫码登陆回调地址 - */ - public static final String QR_REDIRECT_URL = "http://massadmin.youkehulian.com"; -} diff --git a/src/main/java/com/subsidy/common/exception/GlobalExceptionHandler.java b/src/main/java/com/subsidy/common/exception/GlobalExceptionHandler.java deleted file mode 100644 index 2e535e9..0000000 --- a/src/main/java/com/subsidy/common/exception/GlobalExceptionHandler.java +++ /dev/null @@ -1,119 +0,0 @@ -package com.subsidy.common.exception; - -import com.baomidou.mybatisplus.core.toolkit.StringUtils; -import com.subsidy.common.ResponseData; -import com.subsidy.common.ResponseVO; -import com.subsidy.common.configure.RemoteProperties; -import com.subsidy.common.constant.Code; -import lombok.extern.slf4j.Slf4j; -import org.apache.poi.ss.formula.functions.T; -import org.springframework.http.converter.HttpMessageNotReadableException; -import org.springframework.validation.BindException; -import org.springframework.web.HttpRequestMethodNotSupportedException; -import org.springframework.web.bind.MethodArgumentNotValidException; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.RestControllerAdvice; -import org.springframework.web.servlet.NoHandlerFoundException; - -import javax.servlet.http.HttpServletRequest; -import java.util.ArrayList; -import java.util.List; - -/** - * 异常处理 - * @author DengMin - * @date 2020/07/14 - **/ -@Slf4j -@RestControllerAdvice -public class GlobalExceptionHandler { - - /** - * 自定义异常 - * @param e - * @return - */ - @ExceptionHandler(value = HttpException.class) - public ResponseVO handlerException(HttpServletRequest request, HttpException e) { - String message = RemoteProperties.getMessage(e.getCode()); - if(StringUtils.isBlank(message)) { - message = e.getMessage(); - } - String url = request.getRequestURI(); - return ResponseData.generateCreatedResponse(e.getCode(), message, url); - } - - /** - * 404 - * @param request - * @return - */ - @ExceptionHandler(value = NoHandlerFoundException.class) - public ResponseVO NoHandlerFoundException(HttpServletRequest request) { - String url = request.getRequestURI(); - return ResponseData.generateCreatedResponse(Code.NOHANDLERFOUND.getCode(), Code.NOHANDLERFOUND.getMessage(), url); - } - - /** - * 请求方式错误 - * @param request - * @return - */ - @ExceptionHandler(value = HttpRequestMethodNotSupportedException.class) - public ResponseVO HttpRequestMethodNotSupportedException(HttpServletRequest request) { - String url = request.getRequestURI(); - return ResponseData.generateCreatedResponse(Code.NOHANDLERFOUND.getCode(), Code.NOHANDLERFOUND.getMessage(), url); - } - - /** - * 参数不合法 - * @param e - * @return - */ - @ExceptionHandler(MethodArgumentNotValidException.class) - public ResponseVO validateException(MethodArgumentNotValidException e){ - final List errList = new ArrayList<>(); - e.getBindingResult().getAllErrors().stream().forEach(x -> { - errList.add(x.getDefaultMessage()); - }); - return ResponseData.generateCreatedResponse(Code.PARAM_INVALID.getCode(), Code.PARAM_INVALID.getMessage(), errList.toString()); - } - - /** - * JSON 序列化异常 - * @param e - * @return - */ - @ExceptionHandler(HttpMessageNotReadableException.class) - public ResponseVO exceptionHandler(HttpMessageNotReadableException e) { - log.error(e.getMessage()); - return ResponseData.generateCreatedResponse(Code.PARAM_INVALID.getCode(), Code.PARAM_INVALID.getMessage()+":{"+e.getMessage()+"}"); - } - - /** - * 校验异常 - * @param e - * @return - */ - @ExceptionHandler(BindException.class) - public ResponseVO BindException(BindException e){ - final List errList = new ArrayList<>(); - e.getBindingResult().getAllErrors().stream().forEach(x -> { - errList.add(x.getDefaultMessage()); - }); - return ResponseData.generateCreatedResponse(Code.PARAM_INVALID.getCode(), Code.PARAM_INVALID.getMessage(), errList.toString()); - } - - /** - * 服务器内部错误 - * @return - */ - @ExceptionHandler(value = Exception.class) - public ResponseVO serverInternalError(Exception e, HttpServletRequest request) { - String url = request.getRequestURI(); -// log.error("path:"+url); -// log.error("---- error message: ---"+e.toString()); - e.printStackTrace(); - return ResponseData.generateCreatedResponse(Code.SERVER_INTERNAL_ERROR.getCode(), Code.SERVER_INTERNAL_ERROR.getMessage(), url); - } -} \ No newline at end of file diff --git a/src/main/java/com/subsidy/common/exception/HttpException.java b/src/main/java/com/subsidy/common/exception/HttpException.java deleted file mode 100644 index 291188b..0000000 --- a/src/main/java/com/subsidy/common/exception/HttpException.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.subsidy.common.exception; - - -import com.subsidy.common.configure.RemoteProperties; - -/** - * 异常处理 - * @author DengMin - * @date 2020/08/12 - **/ -public class HttpException extends RuntimeException{ - - private Integer code; - - private String message; - - public Integer getCode() { - return code; - } - - public void setCode(Integer code) { - this.code = code; - } - - @Override - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public HttpException(Integer code) { - super(RemoteProperties.getMessage(code)); - String message = RemoteProperties.getMessage(code); - this.message = message; - this.code = code; - } - - public HttpException(Integer code, String message) { - this.message = message; - this.code = code; - } -} diff --git a/src/main/java/com/subsidy/common/handler/MetaHandler.java b/src/main/java/com/subsidy/common/handler/MetaHandler.java deleted file mode 100644 index 9e83fcd..0000000 --- a/src/main/java/com/subsidy/common/handler/MetaHandler.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.subsidy.common.handler; - -import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; -import org.apache.ibatis.reflection.MetaObject; -import org.springframework.stereotype.Component; - -import java.time.LocalDateTime; - -/** - * 填充配置 - * @author DengMin - * @date 2020/07/21 - **/ -@Component -public class MetaHandler implements MetaObjectHandler { - - @Override - public void insertFill(MetaObject metaObject) { - this.setFieldValByName("createDate", LocalDateTime.now(), metaObject); - } - - @Override - public void updateFill(MetaObject metaObject) { - this.setFieldValByName("updateDate", LocalDateTime.now(), metaObject); - } -} diff --git a/src/main/java/com/subsidy/common/interceptor/AuthenticationInterceptor.java b/src/main/java/com/subsidy/common/interceptor/AuthenticationInterceptor.java deleted file mode 100644 index 5e37f15..0000000 --- a/src/main/java/com/subsidy/common/interceptor/AuthenticationInterceptor.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.subsidy.common.interceptor; - -import com.auth0.jwt.interfaces.Claim; -import com.baomidou.mybatisplus.core.toolkit.StringUtils; -import com.subsidy.common.exception.HttpException; -import com.subsidy.mapper.AdministerMapper; -import com.subsidy.model.AdministerDO; -import com.subsidy.util.ConstantUtils; -import com.subsidy.util.JwtUtil; -import com.subsidy.util.Localstorage; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.method.HandlerMethod; -import org.springframework.web.servlet.HandlerInterceptor; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.lang.reflect.Method; -import java.util.Calendar; -import java.util.Map; - -/** - *

- * 鉴权拦截器 - *

- * - * @author DengMin - * @since 2021/4/14 - */ -@Component -public class AuthenticationInterceptor implements HandlerInterceptor { - - @Autowired - private AdministerMapper administerMapper; - - @Override - @CrossOrigin() - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { - // 不需要进行拦截 - if (!(handler instanceof HandlerMethod)) { - return true; - } - - HandlerMethod handlerMethod = (HandlerMethod) handler; - Method method = handlerMethod.getMethod(); - - TimeRequired timeRequired = method.getAnnotation(TimeRequired.class); - if (timeRequired != null) { - Calendar calendar = Calendar.getInstance(); - - int hour = calendar.get(Calendar.HOUR_OF_DAY); - if (hour < 6 || hour >= 23 ) { - throw new HttpException(17001); - } - } - - LoginRequired methodAnnotation = method.getAnnotation(LoginRequired.class); - if (methodAnnotation != null) { - String authorization = request.getHeader("Authorization"); - if (!StringUtils.isBlank(authorization)) { - String token = authorization; - if (authorization.startsWith("Bearer")) { - token = authorization.replace("Bearer ", ""); - } - /*Token不存在*/ - if (token == null || !JwtUtil.verifyToken(token)) { - throw new HttpException(1010); - } - - Map claimMap = JwtUtil.getClaims(token); - if (claimMap != null) { - //String[] role = methodAnnotation.value(); - String type = claimMap.get("type").asString(); - if (ConstantUtils.ADMINISTER_TERMINATE.equals(type)) { - AdministerDO administerDO = administerMapper.selectById(claimMap.get("id").asLong()); - if (null != administerDO) { - Localstorage.setUser(administerDO,type); - return true; - } - } else if (ConstantUtils.MOBILE_TERMINATE.equals(type)) { - - - /** - * 学生端设置单设备登录 - */ - /* String tk = (String) redisUtil.get(ConstantUtils.MOBILE_TERMINATE+"_"+claimMap.get("id").asLong()); - if(StringUtils.isNotBlank(tk)) { - if(tk.equals(token)) { - return true; - } - - throw new HttpException(1011); - } else { - throw new HttpException(1010); - }*/ - } else { - throw new HttpException(1010); - } - } - } - throw new HttpException(1010); - } - return true; - } - -} diff --git a/src/main/java/com/subsidy/common/interceptor/LoginRequired.java b/src/main/java/com/subsidy/common/interceptor/LoginRequired.java deleted file mode 100644 index 19e2615..0000000 --- a/src/main/java/com/subsidy/common/interceptor/LoginRequired.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.subsidy.common.interceptor; - -import java.lang.annotation.*; - -/** - *

- * 自定义验证登陆注解 - *

- * - * @author DengMin - * @since 2020/12/18 - */ -@Target({ElementType.METHOD}) -@Retention(RetentionPolicy.RUNTIME) -@Documented -@Inherited -public @interface LoginRequired { - - String[] value(); -} \ No newline at end of file diff --git a/src/main/java/com/subsidy/common/interceptor/TimeRequired.java b/src/main/java/com/subsidy/common/interceptor/TimeRequired.java deleted file mode 100644 index d720289..0000000 --- a/src/main/java/com/subsidy/common/interceptor/TimeRequired.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.subsidy.common.interceptor; - -import java.lang.annotation.*; - -@Target({ElementType.METHOD}) -@Retention(RetentionPolicy.RUNTIME) -@Documented -@Inherited -public @interface TimeRequired { -} diff --git a/src/main/java/com/subsidy/controller/AdministerController.java b/src/main/java/com/subsidy/controller/AdministerController.java deleted file mode 100644 index 8634945..0000000 --- a/src/main/java/com/subsidy/controller/AdministerController.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.subsidy.controller; - - -import org.springframework.web.bind.annotation.RequestMapping; - -import org.springframework.web.bind.annotation.RestController; -import io.swagger.annotations.Api; - -/** - *

- * 管理平台用户 前端控制器 - *

- * - * @author Tuyp - * @since 2025-11-25 - */ -@RestController -@Api(tags = "管理平台用户") -@RequestMapping("/administer-do") -public class AdministerController { - -} diff --git a/src/main/java/com/subsidy/mapper/AdministerMapper.java b/src/main/java/com/subsidy/mapper/AdministerMapper.java deleted file mode 100644 index 6d561fb..0000000 --- a/src/main/java/com/subsidy/mapper/AdministerMapper.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.subsidy.mapper; - -import com.subsidy.model.AdministerDO; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.springframework.stereotype.Repository; - -/** - *

- * 管理平台用户 Mapper 接口 - *

- * - * @author Tuyp - * @since 2025-11-25 - */ - @Repository -public interface AdministerMapper extends BaseMapper { - -} diff --git a/src/main/java/com/subsidy/model/AdministerDO.java b/src/main/java/com/subsidy/model/AdministerDO.java deleted file mode 100644 index ab8aefd..0000000 --- a/src/main/java/com/subsidy/model/AdministerDO.java +++ /dev/null @@ -1,106 +0,0 @@ -package com.subsidy.model; - -import com.subsidy.util.BaseModel; -import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import lombok.Data; -import lombok.EqualsAndHashCode; - -/** - *

- * 管理平台用户 - *

- * - * @author Tuyp - * @since 2025-11-25 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("administer") -public class AdministerDO extends BaseModel { - - private static final long serialVersionUID = 1L; - - /** - * 主键 - */ - @TableId(value = "id", type = IdType.AUTO) - private Long id; - - /** - * 手机号 - */ - private String telephone; - - /** - * 账号 - */ - private String accountName; - - /** - * 密码 - */ - private String password; - - /** - * 公司id - */ - private Long companyId; - - /** - * 劳务id - */ - private Long laborId; - - /** - * 院校id - */ - private Long academyId; - - /** - * 学院id - */ - private Long collegeId; - - /** - * 成员名称 - */ - private String userName; - - /** - * 头像 - */ - private String img; - - /** - * 1:启用 0:禁用 - */ - private String status; - - /** - * 角色 0:应用 1:企业关联客户 2:中心 3:企业唯一账号,4:院校唯一账号 5:院校关联账号 8辅导员 9学院管理员 10 专业老师 11 指导教师 - */ - private Integer role; - - /** - * 上一次登录使用的角色 - */ - private Integer lastRole; - - /** - * 备注 - */ - private String remark; - - /** - * 微信openid - */ - private String openid; - - private String workNo; - - private String firstLogin; - - -} diff --git a/src/main/java/com/subsidy/service/AdministerService.java b/src/main/java/com/subsidy/service/AdministerService.java deleted file mode 100644 index c1c1942..0000000 --- a/src/main/java/com/subsidy/service/AdministerService.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.subsidy.service; - -import com.subsidy.model.AdministerDO; -import com.baomidou.mybatisplus.extension.service.IService; - -/** - *

- * 管理平台用户 服务类 - *

- * - * @author Tuyp - * @since 2025-11-25 - */ -public interface AdministerService extends IService { - -} diff --git a/src/main/java/com/subsidy/service/impl/AdministerServiceImpl.java b/src/main/java/com/subsidy/service/impl/AdministerServiceImpl.java deleted file mode 100644 index ff3c5fc..0000000 --- a/src/main/java/com/subsidy/service/impl/AdministerServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.subsidy.service.impl; - -import com.subsidy.model.AdministerDO; -import com.subsidy.mapper.AdministerMapper; -import com.subsidy.service.AdministerService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 管理平台用户 服务实现类 - *

- * - * @author Tuyp - * @since 2025-11-25 - */ -@Service -public class AdministerServiceImpl extends ServiceImpl implements AdministerService { - -} diff --git a/src/main/java/com/subsidy/util/ActivityDetectionUtils.java b/src/main/java/com/subsidy/util/ActivityDetectionUtils.java deleted file mode 100644 index 0f09334..0000000 --- a/src/main/java/com/subsidy/util/ActivityDetectionUtils.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.subsidy.util; - -import com.tencentcloudapi.captcha.v20190722.CaptchaClient; -import com.tencentcloudapi.captcha.v20190722.models.DescribeCaptchaResultRequest; -import com.tencentcloudapi.captcha.v20190722.models.DescribeCaptchaResultResponse; -import com.tencentcloudapi.common.Credential; -import com.tencentcloudapi.common.profile.ClientProfile; -import com.tencentcloudapi.common.profile.HttpProfile; - -import javax.servlet.http.HttpServletRequest; - -public class ActivityDetectionUtils { - - /** - * 活跃度检测工具类 - * - * @throws Exception - */ - - public static DescribeCaptchaResultResponse activityDetection(HttpServletRequest request, String ticket, String randstr) { - - try { - // 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密 - // 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取 - Credential cred = new Credential(ConstantUtils.SECRET_ID, ConstantUtils.SECRET_KEY); - // 实例化一个http选项,可选的,没有特殊需求可以跳过 - HttpProfile httpProfile = new HttpProfile(); - httpProfile.setEndpoint("captcha.tencentcloudapi.com"); - // 实例化一个client选项,可选的,没有特殊需求可以跳过 - ClientProfile clientProfile = new ClientProfile(); - clientProfile.setHttpProfile(httpProfile); - // 实例化要请求产品的client对象,clientProfile是可选的 - CaptchaClient client = new CaptchaClient(cred, "", clientProfile); - // 实例化一个请求对象,每个接口都会对应一个request对象 - DescribeCaptchaResultRequest req = new DescribeCaptchaResultRequest(); - req.setCaptchaType(9L); - String ip = IpAddressUtil.getIpAddress(request); - req.setUserIp(ip); - req.setRandstr(randstr); - req.setCaptchaAppId(ConstantUtils.CAPTCHAAPP_ID); - req.setAppSecretKey(ConstantUtils.APP_SECRET_KEY); - req.setBusinessId(ConstantUtils.BUSINESS_ID); - req.setTicket(ticket); - // 返回的resp是一个DescribeCaptchaResultResponse的实例,与请求对象对应 - return client.DescribeCaptchaResult(req); - } catch (Exception e) { - - } - return null; - } - -} diff --git a/src/main/java/com/subsidy/util/AliyunSmsUtil.java b/src/main/java/com/subsidy/util/AliyunSmsUtil.java deleted file mode 100644 index 9aa1deb..0000000 --- a/src/main/java/com/subsidy/util/AliyunSmsUtil.java +++ /dev/null @@ -1,211 +0,0 @@ -package com.subsidy.util; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.aliyuncs.DefaultAcsClient; -import com.aliyuncs.IAcsClient; -import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; -import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; -import com.aliyuncs.profile.DefaultProfile; -import com.aliyuncs.profile.IClientProfile; -import com.subsidy.common.configure.AliyunSmsProperties; -import com.subsidy.common.exception.HttpException; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Component; -import org.springframework.web.client.RestTemplate; - -import java.nio.charset.StandardCharsets; -import java.security.MessageDigest; -import java.util.HashMap; -import java.util.Map; - -/** - *

- * 阿里云短信 - *

- * - * @author DengMin - * @since 2021/1/27 - */ - -@Slf4j -@Component -public class AliyunSmsUtil { - - @Autowired - private AliyunSmsProperties aliyunSmsProperties; - - /** - * 阿里云短信 -- 验证码 - * @param phone - * @param code - * @return - */ - public SendSmsResponse send(String phone, int code) { - try { - System.setProperty("sun.net.client.defaultConnectTimeout", "10000"); - System.setProperty("sun.net.client.defaultReadTimeout", "10000"); - - //初始化acsClient,暂不支持region化 - IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", aliyunSmsProperties.getAccessKeyId(), aliyunSmsProperties.getAccessKeySecret()); - DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", aliyunSmsProperties.getProduct(), aliyunSmsProperties.getDomain()); - IAcsClient acsClient = new DefaultAcsClient(profile); - - //组装请求对象-具体描述见控制台-文档部分内容 - SendSmsRequest request = new SendSmsRequest(); - //必填:待发送手机号 - request.setPhoneNumbers(phone); - //必填:短信签名-可在短信控制台中找到 - request.setSignName("有课互联"); - //必填:短信模板-可在短信控制台中找到 - request.setTemplateCode("SMS_190945393"); - //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为 - request.setTemplateParam("{\"code\":\"" + code + "\"}"); - - //hint 此处可能会抛出异常,注意catch - SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request); - if (sendSmsResponse != null && sendSmsResponse.getCode().equals("OK")) { - return sendSmsResponse; - } - - throw new Exception(sendSmsResponse.getMessage()); - } catch (Exception e) { - log.error("---短信发送失败:" + e); - throw new HttpException(10011); - } - } - - public static void main(String[] args) { -// AliyunSmsUtil.sendNew("15201936167",000123); - } - - - /** - * 三网平台短信 - * @param msg - * @param phone - * @param templateId - */ - public void sendTemplateMsg(String msg, String phone, String templateId) { - Map map = new HashMap<>(); - try { - map.put("cpcode", aliyunSmsProperties.getCpcode()); - map.put("msg", msg); - map.put("mobiles", phone); - map.put("excode", aliyunSmsProperties.getExcode()); - map.put("templetid", templateId); - String md5source = aliyunSmsProperties.getCpcode() + msg + phone + aliyunSmsProperties.getExcode() + templateId + aliyunSmsProperties.getKey(); - map.put("sign", makeMD5(new String(md5source.getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8)).toLowerCase()); - RestTemplate restTemplate = new RestTemplate(); - ResponseEntity responseEntity = restTemplate.postForEntity(aliyunSmsProperties.getRcsapi(), map, String.class); - String body = responseEntity.getBody(); - JSONObject object = JSON.parseObject(body); - if (Integer.valueOf(object.get("resultcode").toString()) != 0) { - log.error(object.get("resultmsg").toString()); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - -// /** -// * 三网平台短信 新版本 https://flaginfo-cloud.yuque.com/staff-rozzgq/ofcpak -// * @param msg -// * @param phone -// * @param templateId -// */ -// public static void sendTemplateMsgNew(String msg, String phone, String templateId) { -// String info = null; -// try{ -// HttpClient httpclient = new HttpClient(); -// PostMethod post = new PostMethod("https://opassapi.infocloud.cc/sms/Api/SendGBK.do");// -// post.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,"gb2312"); -// post.addParameter("SpCode", templateId); -// post.addParameter("LoginName", "7db124d0baf189d1e485350xxx"); -// post.addParameter("Password", "3df50b24fb8288b9da99d16bf527e9dbf13659748534dca6e0820xxx"); -// post.addParameter("MessageContent", msg); -// post.addParameter("UserNumber", phone); -// post.addParameter("SerialNumber", ""); -// post.addParameter("f", "1"); -// httpclient.executeMethod(post); -// info = new String(post.getResponseBody(),"gbk"); -// System.out.println(info); -// }catch (Exception e) { -// e.printStackTrace(); -// } -// } - - - public void sendTemplateMsgP(String msg, String phone, String templateId) { - Map map = new HashMap<>(); - try { - map.put("cpcode", aliyunSmsProperties.getCpcode()); - map.put("msg", msg); - map.put("mobiles", phone); - map.put("excode", aliyunSmsProperties.getExcode()); - map.put("templetid", templateId); - String md5source = aliyunSmsProperties.getCpcode() + msg + phone + aliyunSmsProperties.getExcode() + templateId + aliyunSmsProperties.getKey(); - map.put("sign", makeMD5(new String(md5source.getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8)).toLowerCase()); - RestTemplate restTemplate = new RestTemplate(); - ResponseEntity responseEntity = restTemplate.postForEntity(aliyunSmsProperties.getRcsapi(), map, String.class); - String body = responseEntity.getBody(); - JSONObject object = JSON.parseObject(body); - if (Integer.valueOf(object.get("resultcode").toString()) != 0) { - log.error(object.get("resultmsg").toString()); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - public String makeMD5(String plainText) { - String re_md5 = ""; - try { - MessageDigest md = MessageDigest.getInstance("MD5"); - md.update(plainText.getBytes(StandardCharsets.UTF_8)); - byte[] b = md.digest(); - int i; - StringBuffer buf = new StringBuffer(); - for (int offset = 0; offset < b.length; offset++) { - i = b[offset]; - if (i < 0) { - i += 256; - } - - if (i < 16) { - buf.append("0"); - } - buf.append(Integer.toHexString(i)); - } - re_md5 = buf.toString().toLowerCase(); - } catch (Exception e) { - e.printStackTrace(); - } - return re_md5; - } - - -// public static String getByteString( byte[] buff_out ) -// { -// StringBuffer strBuf = new StringBuffer(buff_out.length * 3); -// strBuf.append("Length["); -// strBuf.append(buff_out.length); -// strBuf.append("];Content["); -// for ( int i = 0 ; i < buff_out.length ; ++i ) { -// int l = buff_out[i] & 0x0F; -// int h = (buff_out[i] & 0xF0) >> 4; -// -// char ll = (char) (l > 9 ? 'a' + l - 10 : '0' + l); -// char hh = (char) (h > 9 ? 'a' + h - 10 : '0' + h); -// -// strBuf.append(hh); -// strBuf.append(ll); -// strBuf.append(" "); -// } -// strBuf.append("]"); -// return strBuf.toString().toUpperCase(); -// } - -} \ No newline at end of file diff --git a/src/main/java/com/subsidy/util/Base64Util.java b/src/main/java/com/subsidy/util/Base64Util.java deleted file mode 100644 index cabdb91..0000000 --- a/src/main/java/com/subsidy/util/Base64Util.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.subsidy.util; - -import sun.misc.BASE64Decoder; -import sun.misc.BASE64Encoder; - -import javax.imageio.stream.FileImageInputStream; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.IOException; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -class Base64Util { - /** - * 字符串转图片 - * @param base64Str - * @return - */ - public static byte[] decode(String base64Str){ - byte[] b = null; - BASE64Decoder decoder = new BASE64Decoder(); - try { - b = decoder.decodeBuffer(replaceEnter(base64Str)); - } catch (IOException e) { - e.printStackTrace(); - } - return b; - } - - /** - * 图片转字符串 - * @param image - * @return - */ - public static String encode(byte[] image){ - BASE64Encoder decoder = new BASE64Encoder(); - return replaceEnter(decoder.encode(image)); - } - - public static void main(String[] args) { - System.out.println(encode("http://ykhl-bigger.oss-cn-beijing.aliyuncs.com/2023-02-1618cb936b-4825-429c-9fdd-dd9d0de97ed7.jpg?x-oss-process=image/auto-orient,1/resize,m_pad,w_500,h_500/quality,Q_100/format,jpg")); - } - - public static String encode(String uri){ - BASE64Encoder encoder = new BASE64Encoder(); - return replaceEnter(encoder.encode(uri.getBytes())); - } - - /** - * - * @path 图片路径 - * @return - */ - - public static byte[] imageTobyte(String path){ - byte[] data = null; - FileImageInputStream input = null; - try { - input = new FileImageInputStream(new File(path)); - ByteArrayOutputStream output = new ByteArrayOutputStream(); - byte[] buf = new byte[1024]; - int numBytesRead = 0; - while((numBytesRead = input.read(buf)) != -1){ - output.write(buf, 0, numBytesRead); - } - data = output.toByteArray(); - output.close(); - input.close(); - - } catch (Exception e) { - e.printStackTrace(); - } - - return data; - } - - - - public static String replaceEnter(String str){ - String reg ="[\n-\r]"; - Pattern p = Pattern.compile(reg); - Matcher m = p.matcher(str); - return m.replaceAll(""); - } - - -} \ No newline at end of file diff --git a/src/main/java/com/subsidy/util/BaseModel.java b/src/main/java/com/subsidy/util/BaseModel.java deleted file mode 100644 index f53a427..0000000 --- a/src/main/java/com/subsidy/util/BaseModel.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.subsidy.util; - -import com.baomidou.mybatisplus.annotation.FieldFill; -import com.baomidou.mybatisplus.annotation.FieldStrategy; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableLogic; -import com.fasterxml.jackson.annotation.JsonIgnore; -import lombok.Data; - -import java.time.LocalDateTime; - -@Data -public abstract class BaseModel { - - /** - * 创建时间 - */ - @TableField(insertStrategy = FieldStrategy.NEVER, updateStrategy = FieldStrategy.NEVER, value = "create_date", fill = FieldFill.INSERT) - private LocalDateTime createDate; - - /** - * 更新时间 - */ - @JsonIgnore - @TableField(insertStrategy = FieldStrategy.NEVER, updateStrategy = FieldStrategy.NEVER, value = "update_date", fill = FieldFill.UPDATE) - private LocalDateTime updateDate; - - /** - * 删除时间 - */ - @JsonIgnore - @TableLogic - private LocalDateTime deleteDate; -} diff --git a/src/main/java/com/subsidy/util/CodeGenerator.java b/src/main/java/com/subsidy/util/CodeGenerator.java deleted file mode 100644 index 7b488bc..0000000 --- a/src/main/java/com/subsidy/util/CodeGenerator.java +++ /dev/null @@ -1,129 +0,0 @@ -package com.subsidy.util; - -import com.baomidou.mybatisplus.annotation.DbType; -import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException; -import com.baomidou.mybatisplus.core.toolkit.StringPool; -import com.baomidou.mybatisplus.core.toolkit.StringUtils; -import com.baomidou.mybatisplus.generator.AutoGenerator; -import com.baomidou.mybatisplus.generator.InjectionConfig; -import com.baomidou.mybatisplus.generator.config.DataSourceConfig; -import com.baomidou.mybatisplus.generator.config.FileOutConfig; -import com.baomidou.mybatisplus.generator.config.GlobalConfig; -import com.baomidou.mybatisplus.generator.config.PackageConfig; -import com.baomidou.mybatisplus.generator.config.StrategyConfig; -import com.baomidou.mybatisplus.generator.config.TemplateConfig; -import com.baomidou.mybatisplus.generator.config.po.TableInfo; -import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; -import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; - -import java.util.ArrayList; -import java.util.List; -import java.util.ResourceBundle; -import java.util.Scanner; - -/** - * Mybatis-Plus CodeGenerator - * - * @author DengMin - * @date 2020/07/02 - **/ -public class CodeGenerator { - - public static String scanner(String tip) { - StringBuilder help = new StringBuilder(); - help.append("1.生成全部表 2.输入需要生成表名"); - System.out.println(help.toString()); - Scanner scanner = new Scanner(System.in); - Integer ipt = Integer.valueOf(scanner.next()); - if(ipt == 1) { - return ""; - } else if(ipt == 2) { - StringBuilder help1 = new StringBuilder(); - help1.append("请输入" + tip + ":"); - System.out.println(help1.toString()); - Scanner scanner1 = new Scanner(System.in); - if (scanner1.hasNext()) { - String name = scanner1.next(); - if (StringUtils.isNotEmpty(name)) { - return name; - } - } - throw new MybatisPlusException("请输入正确的" + tip + "!"); - } - return scanner(tip); - } - - public static void main(String[] args) { - final ResourceBundle rb = ResourceBundle.getBundle("mybatis-plus"); - // 代码生成器 - AutoGenerator mpg = new AutoGenerator(); - - // 全局配置 - GlobalConfig gc = new GlobalConfig(); - gc.setOutputDir(System.getProperty("user.dir") + rb.getString("outputDir")); - gc.setOpen(false); - gc.setBaseResultMap(true); - gc.setBaseColumnList(true); - gc.setAuthor(rb.getString("author")); - gc.setMapperName("%sMapper"); - gc.setEntityName("%sDO"); - gc.setServiceName("%sService"); - gc.setServiceImplName("%sServiceImpl"); - gc.setControllerName("%sController"); - mpg.setGlobalConfig(gc); - - // 数据源配置 - DataSourceConfig dsc = new DataSourceConfig(); - dsc.setDbType(DbType.MYSQL); - dsc.setUrl(rb.getString("url")); - dsc.setDriverName(rb.getString("driverName")); - dsc.setUsername(rb.getString("userName")); - dsc.setPassword(rb.getString("password")); - mpg.setDataSource(dsc); - - // 包配置 - PackageConfig pc = new PackageConfig(); - pc.setParent(rb.getString("setParent")); - pc.setController("controller"); - pc.setService("service"); - pc.setServiceImpl("service.impl"); - pc.setEntity("model"); - pc.setMapper("mapper"); - mpg.setPackageInfo(pc); - - // 自定义配置 - InjectionConfig cfg = new InjectionConfig() { - @Override - public void initMap() { - // to do nothing - } - }; - List focList = new ArrayList<>(); - focList.add(new FileOutConfig("/templates/mapper.xml.ftl") { - @Override - public String outputFile(TableInfo tableInfo) { - // 自定义输入文件名称 - return System.getProperty("user.dir")+ rb.getString("mapperPath") + tableInfo.getMapperName() + StringPool.DOT_XML; - } - }); - cfg.setFileOutConfigList(focList); - mpg.setCfg(cfg); - mpg.setTemplate(new TemplateConfig().setXml(null)); - - // 策略配置 - StrategyConfig strategy = new StrategyConfig(); - strategy.setNaming(NamingStrategy.underline_to_camel); - strategy.setColumnNaming(NamingStrategy.underline_to_camel); - strategy.setSuperEntityClass(BaseModel.class); - strategy.setEntityLombokModel(true); - strategy.setRestControllerStyle(true); - String [] tables = scanner("表名,多个英文逗号分割").split(","); - if(StringUtils.isNotBlank(tables[0])) { - strategy.setInclude(tables); - } - strategy.setControllerMappingHyphenStyle(true); - mpg.setStrategy(strategy); - mpg.setTemplateEngine(new FreemarkerTemplateEngine()); - mpg.execute(); - } -} \ No newline at end of file diff --git a/src/main/java/com/subsidy/util/ConstantUtils.java b/src/main/java/com/subsidy/util/ConstantUtils.java deleted file mode 100644 index 1d96498..0000000 --- a/src/main/java/com/subsidy/util/ConstantUtils.java +++ /dev/null @@ -1,120 +0,0 @@ -package com.subsidy.util; - - -/** - * 枚举类 - */ -public class ConstantUtils { - - public static final String DELETE_SUCCESS = "删除成功"; - - public static final String DOWNLAOD_SUCCESS = "下载成功"; - - public static final String UPLOAD_FAIL = "上传失败"; - - public static final String ADD_SUCCESS = "新增成功"; - - public static final String REGISTER_SUCCESS = "注册成功"; - - public static final String COMMIT_SUCCESS = "提交成功"; - - public static final String SUCCESS_SEND_OUT = "发送成功"; - - public static final String FAIL_SEND_OUT = "发送失败"; - - public static final String SAVE_SUCCESS = "保存成功"; - - public static final String SHARE_SUCCESS = "共享成功"; - - public static final String SUBMIT_SUCCESS = "提交成功"; - - public static final String SUCCESS_UPDATE = "更新成功"; - - public static final String FAIL_UPDATE = "更新失败"; - - public static final String SET_SUCCESS = "设置成功"; - - public static final String SUCCESS_VERIFY = "验证成功"; - - public static final String FAIL_VERIFY = "验证失败"; - - public static final String COMPANY_NAME = "TeachAI"; - - public static final String ALREADY_DONE = "已完成"; - - public static final String ALREADY_RECOMMEND = "已推荐"; - - public static final String VERIFY_NAME = "有课互联"; - - public static final String NOTICE_NAME = "有课进度通知"; - - public static final String TECH_NAME = "有课互联学习平台"; - - public static final String PUBLISH_SUCCESS = "发布成功"; - - public static final String COMPRESS_SUCCESS = "压缩成功"; - - public static final String CHECK_STATUS = "审核通过"; - - /** - * 短信模板---验证模板 - */ - public static final String TEMPLATE_CODE = "SMS_190945393"; - - /** - * 短信 地域ID - */ - public static final String REGION_ID = "cn-hangzhou"; - - /** - * 短信 RAM账号AccessKey ID - */ - public static final String ACCESS_KEY_ID = "LTAI5tLUBG4B6QxhHrhddc7p"; - - /** - * 短信 RAM账号AccessKey Secret - */ - public static final String SECRET = "eber38QGHZixTQ6bFfrd80kbg67jIP"; - - /** - * 腾讯云点播视频转码模板 - */ - public static final Long TEMPLATE_VOD = 100840L; - - /** - * 手机端token - */ - public static final String MOBILE_TERMINATE = "mobile"; - - public static final String ADMINISTER_TERMINATE = "administer"; - - - /** - * API密钥--微信参数 - */ - public static final String SECRET_ID = "AKIDOcePHvZ2C5VeYHQGSO5aqtlNxJQLqfz2"; - - public static final String SECRET_KEY = "vjHYRmrfDbw0rWxA7oFcj7F8lDPKCm8E"; - - /** - * 图形验证码 - */ - public static final Long CAPTCHAAPP_ID = 2013197365L; - - public static final String APP_SECRET_KEY = "04ABoF0ZVuMje8NP84DE5Sg**"; - - public static final Long BUSINESS_ID = 1L; - - public static final String UTF8 = "UTF-8"; - - /** - * 保利威视 - */ - public static final String POLYV_VIEWLOG_2 = "http://api.polyv.net/live/v1/statistics/{channelId}/viewlog"; - - /** - * 推送人社局图片格式 - */ - public static final String IMAGE_FORMAT = "?x-oss-process=image/auto-orient,1/resize,m_pad,w_500,h_500/quality,Q_100/format,jpg"; - -} diff --git a/src/main/java/com/subsidy/util/DateFormatUtil.java b/src/main/java/com/subsidy/util/DateFormatUtil.java deleted file mode 100644 index f39120e..0000000 --- a/src/main/java/com/subsidy/util/DateFormatUtil.java +++ /dev/null @@ -1,120 +0,0 @@ -package com.subsidy.util; - -import java.awt.SystemTray; -import java.text.SimpleDateFormat; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.ZoneOffset; -import java.time.ZonedDateTime; -import java.util.Date; - -/** - * 处理时间工具 - * - * @author DengMin - * @date 2019/08/27 13:56 - **/ -public class DateFormatUtil { - - public final static String YEAR = "yyyy"; - public final static String FMT_sdf14_L = "yyyy-MM-dd HH:mm:ss"; - public final static String FMT_sdf_yMd = "yyyy-MM-dd"; - public final static String FMT_sdf_yM = "yyyy-M"; - public final static String FMT_sdf_yMM = "yyyy-MM"; - public final static String FMT_sdf_Hm = "H:mm"; - public final static String FMT_sdf_HHmm = "HH:mm"; - public final static String cron = "s m H d M ? yyyy"; - - /** - * Date转String,自定义格式 - * @param date - * @param pattern - * @return - */ - public static String format(Date date, String pattern) { - try { - SimpleDateFormat sdf = new SimpleDateFormat(pattern); - return sdf.format(date); - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - /** - * LocalDateTime转String,自定义格式 - * @param localDateTime - * @param pattern - * @return - */ - public static String format(LocalDateTime localDateTime, String pattern) { - try { - SimpleDateFormat sdf = new SimpleDateFormat(pattern); - return sdf.format(localDateTime); - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - /** - * String转Date,自定义格式 - * @param date - * @param pattern - * @return - */ - public static Date parse(String date, String pattern) { - try { - SimpleDateFormat sdf = new SimpleDateFormat(pattern); - return sdf.parse(date); - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - /** - * 比较两个时间 - * .after 大于 - * .before 小于 - * @param d1 - * @param d2 - * @return - */ - public static boolean compare(Date d1, Date d2 ) { - return !d1.after(d2); - } - - /** - * Data转Cron - * @param date - * @return - */ - public static String getCron(Date date) { - SimpleDateFormat sdf = new SimpleDateFormat("s m H d M ? yyyy"); - return sdf.format(date); - } - - public static Date localDateTimeToDate(LocalDateTime dateTime) { - if(dateTime == null) { - return null; - } - ZoneId zoneId = ZoneId.systemDefault(); - ZonedDateTime zdt = dateTime.atZone(zoneId); - return Date.from(zdt.toInstant()); - } - - public static LocalDateTime secondToLocalDateTime(Long second) { - if(second != null) { - return LocalDateTime.ofEpochSecond(second, 0, ZoneOffset.ofHours(8)); - } - return LocalDateTime.now(); - } - - public static Long LocalDateTimeToSecond(LocalDateTime localDateTime) { - if(localDateTime != null) { - return localDateTime.atZone(ZoneOffset.ofHours(8)).toInstant().toEpochMilli(); - } - return System.currentTimeMillis(); - } -} diff --git a/src/main/java/com/subsidy/util/DudaoConstant.java b/src/main/java/com/subsidy/util/DudaoConstant.java deleted file mode 100644 index 22b77e2..0000000 --- a/src/main/java/com/subsidy/util/DudaoConstant.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.subsidy.util; - -public class DudaoConstant { - - /** - * POST-1:班级基本信息信息采集接口 - */ - public static final String POST_1 = "DUDAO_POST_1_insertClassBasicInformation"; - - /** - * POST-2:学时信息采集接口 - */ - public static final String POST_2 = "DUDAO_POST_2_insertLearnDuration"; - - /** - * POST-3:考试信息采集接口 - */ - public static final String POST_3 = "DUDAO_POST_3_insertExamInformation"; - - /** - * POST-4:答疑辅导采集接口 - */ - public static final String POST_4 = "DUDAO_POST_4_insertAnswerTutor"; - - /** - * POST-5 上下游班级数据绑定接口 - */ - public static final String POST_5 = "DUDAO_POST_5_insertBindClass"; - - /** - * 调取失败 - */ - public static final String API_ERROR = "调取失败"; - - /** - * 当天没数据 - */ - public static final String NO_DATA = "NO_DATA"; - - /** - * 推送失败 - */ - public static final String PUSH_FAIL = "推送失败"; - - /** - * 推送成功 - */ - public static final String PUSH_SUCCESS = "推送成功"; -} diff --git a/src/main/java/com/subsidy/util/EhCacheUtil.java b/src/main/java/com/subsidy/util/EhCacheUtil.java deleted file mode 100644 index 45dba17..0000000 --- a/src/main/java/com/subsidy/util/EhCacheUtil.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.subsidy.util; - -import net.sf.ehcache.Cache; -import net.sf.ehcache.CacheManager; -import net.sf.ehcache.Element; -import org.springframework.util.ClassUtils; - -/** - *

- * Ehcache - *

- * - * @author DengMin - * @since 2022/8/1 - */ -public class EhCacheUtil { - - static CacheManager cacheManager = CacheManager.newInstance(ClassUtils.getDefaultClassLoader().getResource("").getPath()+"ehcache.xml"); - - /** - * 添加缓存 - * @param cacheName - * @param key - * @param value - */ - public static void putEhCache(String cacheName, String key, Object value) { - Cache cache = cacheManager.getCache(cacheName); - Element element = new Element(key, value); - cache.put(element); - } - - /** - * 获取缓存数据 - * @param cacheName - * @param key - * @return - */ - public static Object getEhCache(String cacheName, String key) { - Cache cache = cacheManager.getCache(cacheName); - Element element = cache.get(key); - return element == null ? null : element.getObjectValue(); - } - - /** - * 删除缓存 - * @param cacheName - * @param key - */ - public static void deleteEhCache(String cacheName, String key) { - Cache cache = cacheManager.getCache(cacheName); - cache.remove(key); - } -} diff --git a/src/main/java/com/subsidy/util/EncryptString.java b/src/main/java/com/subsidy/util/EncryptString.java deleted file mode 100644 index 79ca6ff..0000000 --- a/src/main/java/com/subsidy/util/EncryptString.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.subsidy.util; - -import lombok.extern.slf4j.Slf4j; -import org.bouncycastle.crypto.digests.SM3Digest; -import org.bouncycastle.util.encoders.Hex; - -import java.nio.charset.StandardCharsets; - -/** - * 密码加密 - * - * @author Date: 2019/08/28 20:59 - */ -@Slf4j -public class EncryptString { - - /** - * 对字符串进行SM3哈希计算 - * @param input 待加密的字符串 - * @return 哈希结果(十六进制字符串,64位) - */ - public static String encrypt(String input) { - // 1. 创建SM3摘要计算器 - SM3Digest digest = new SM3Digest(); - - // 2. 将输入字符串转为UTF-8字节数组,更新摘要 - byte[] inputBytes = input.getBytes(StandardCharsets.UTF_8); - digest.update(inputBytes, 0, inputBytes.length); - - // 3. 计算哈希结果(32字节) - byte[] hashBytes = new byte[digest.getDigestSize()]; - digest.doFinal(hashBytes, 0); - - // 4. 将字节数组转为十六进制字符串 - return Hex.toHexString(hashBytes); - } - - - public static void main(String[] args) { - System.out.println(encrypt("catschina00002O9S8Z")); - } -} diff --git a/src/main/java/com/subsidy/util/EncryptUtil.java b/src/main/java/com/subsidy/util/EncryptUtil.java deleted file mode 100644 index 9db0ff2..0000000 --- a/src/main/java/com/subsidy/util/EncryptUtil.java +++ /dev/null @@ -1,35 +0,0 @@ -//package com.subsidy.util; -// -//import com.amdelamar.jhash.Hash; -//import com.amdelamar.jhash.algorithms.Type; -//import com.amdelamar.jhash.exception.InvalidHashException; -// -//public class EncryptUtil { -// -// /** -// * 设置密文密码 -// * -// * @param password 原始密码 -// * @return 加密密码 -// */ -// public static String encrypt(String password) { -// char[] chars = password.toCharArray(); -// return Hash.password(chars).algorithm(Type.PBKDF2_SHA256).create(); -// } -// -// /** -// * 验证加密密码 -// * -// * @param encryptedPassword 密文密码 -// * @param plainPassword 明文密码 -// * @return 验证是否成功 -// */ -// public static boolean verify(String encryptedPassword, String plainPassword) { -// char[] chars = plainPassword.toCharArray(); -// try { -// return Hash.password(chars).algorithm(Type.PBKDF2_SHA256).verify(encryptedPassword); -// } catch (InvalidHashException e) { -// return false; -// } -// } -//} diff --git a/src/main/java/com/subsidy/util/ExcelFormatUtils.java b/src/main/java/com/subsidy/util/ExcelFormatUtils.java deleted file mode 100644 index c0330e2..0000000 --- a/src/main/java/com/subsidy/util/ExcelFormatUtils.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.subsidy.util; - -import java.util.Arrays; -import java.util.List; - -public class ExcelFormatUtils { - - - public static final List memberList = Arrays.asList("序号", "成员名称","身份证号码", "性别", "账号", "联系方式", "签到次数", "课程进度", "学习时长(小时)","学习时长(分钟)","累计有效学习时长", "答疑数", "测试成绩", "总评价"); - - public static final List signList = Arrays.asList("序号", "成员名称", "身份证号", "联系方式", "签到次数", "签到时间","最近签到ip地址","最近签到设备型号"); - - public static final List scoreList = Arrays.asList("序号", "成员名称", "身份证号码", "联系方式", "测试成绩", "测试次数","开始时间","结束时间","测评时间", "总评价"); - - public static final List answersList = Arrays.asList("序号", "提问", "答疑", "提问时间", "提问成员", "答疑时间"); - - public static final List studyLogList = Arrays.asList("开始时间","结束时间","课程","类型","学习时长","累计有效时长"); - -} diff --git a/src/main/java/com/subsidy/util/HttpUtil.java b/src/main/java/com/subsidy/util/HttpUtil.java deleted file mode 100644 index 64125fd..0000000 --- a/src/main/java/com/subsidy/util/HttpUtil.java +++ /dev/null @@ -1,461 +0,0 @@ -package com.subsidy.util; - - -import org.apache.http.Header; -import org.apache.http.HttpEntity; -import org.apache.http.NameValuePair; -import org.apache.http.client.entity.UrlEncodedFormEntity; -import org.apache.http.client.methods.CloseableHttpResponse; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.client.methods.HttpUriRequest; -import org.apache.http.entity.ContentType; -import org.apache.http.entity.StringEntity; -//import org.apache.http.entity.mime.MultipartEntityBuilder; -//import org.apache.http.entity.mime.content.FileBody; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClientBuilder; -import org.apache.http.message.BasicNameValuePair; -import org.apache.http.util.EntityUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.*; -import java.net.URLEncoder; -import java.util.*; - -/** - * @author: sadboy - **/ - -public class HttpUtil { - private static final Logger log = LoggerFactory.getLogger(HttpUtil.class); - private static final String UTF8 = "UTF-8"; - private static final String APPLICATION_FORM_URLENCODED = "application/x-www-form-urlencoded; charset=UTF-8"; - private static final String APPLICATION_JSON = "application/json; charset=UTF-8"; - private static final String TEXT_PLAIN = "text/plain; charset=UTF-8"; - private static final String TEXT_HTML = "text/html; charset=UTF-8"; - private static final String APPLICATION_XML = "application/xml; charset=UTF-8"; - - private HttpUtil() { - } - - /** - * 向url发送get请求,当无参数时,paramMap为NULL - * @param url 请求url - * @param paramMap 需要拼接的参数 - * @return 请求返回的数据 - * @throws IOException 读写异常 - */ - public static String get(String url, Map paramMap) throws IOException { - return get(url, paramMap, UTF8); - } - - /** - * 向url发送get请求 - * @param url 请求url - * @param paramMap 需要拼接的参数 - * @param encoding 编码 - * @return 请求返回的数据 - * @throws IOException 读写异常 - */ - public static String get(String url, Map paramMap, String encoding) throws IOException { - encoding = encoding == null ? UTF8 : encoding; - url = appendUrl(url, paramMap); - return get(url, encoding, new DataParse() { - @Override - public String parseData(HttpEntity httpEntity, String encoding) throws IOException { - return EntityUtils.toString(httpEntity, encoding); - } - }); - } - - /** - * 向url发送get请求 - * @param url 请求url - * @param paramMap 需要拼接的参数 - * @param encoding 编码 - * @return 请求返回的字节数组,一般用于文件下载 - * @throws IOException 读写异常 - */ - public static byte[] getBinary(String url, Map paramMap, String encoding) throws IOException { - encoding = encoding == null ? UTF8 : encoding; - url = appendUrl(url, paramMap); - return get(url, encoding, new DataParse() { - @Override - public byte[] parseData(HttpEntity httpEntity, String encoding) throws IOException { - return EntityUtils.toByteArray(httpEntity); - } - }); - } - - - /** - * HTTP GET 内部公共请求处理逻辑 - * @param url 请求地址 - * @param encoding 编码字符集, 默认为 utf-8 - * @param dataParse 返回数据反序列化逻辑实现类 - * @return HTTP 返回的内容 - * @throws IOException 客户端和服务器读写通讯异常 - */ - private static T get(String url, String encoding, DataParse dataParse) throws IOException { - log.debug("http 请求 url: {}", url); - T result = null; - // 创建httpclient对象 - CloseableHttpClient httpClient = HttpClientBuilder.create().build(); - // 创建get方式请求对象 - HttpGet httpGet = new HttpGet(url); - httpGet.addHeader("Content-type", APPLICATION_JSON); - // 通过请求对象获取响应对象 - CloseableHttpResponse response = sendRequestAndGetResult(url, httpClient, httpGet); - // 获取结果实体 - if (null != response) { - result = dataParse.parseData(response.getEntity(), encoding); - if (!(result instanceof byte[])) { - log.debug("http 请求结果: {}", result); - } else { - Header[] headers = response.getHeaders("Content-Type"); - for (Header responseHead : headers) { - String headStr = responseHead.getValue(); - if (headStr.startsWith("application/json")) { - String json = new String((byte[]) result); - response.close(); - throw new RuntimeException(json); - } - } - } - } - try { - if (null != response) { - response.close(); - } - } catch (IOException ex) { - log.error(ex.getMessage(), ex); - } - return result; - } - - - /** - * 向url发送post请求 - * @param url 请求url - * @param paramMap 需要拼接的参数 - * @return 请求返回的数据 - * @throws IOException 读写异常 - */ - public static String postFormBody(String url, Map paramMap) throws IOException { - return postFormBody(url, paramMap, null); - } - - /** - * 向url发送post请求 - * @param url 请求url - * @param paramMap 需要拼接的参数 - * @param encoding 编码 - * @return 请求返回的数据 - * @throws IOException 读写异常 - */ - public static String postFormBody(String url, Map paramMap, String encoding) throws IOException { - return post(url, paramMap, encoding); - } - - - /** - * 向url发送post请求表单提交数据 - * @param url 请求url - * @param paramMap 表单数据 - * @param encoding 编码 - * @return 请求返回的数据 - * @throws IOException 读写异常 - */ - private static String post(String url, Map paramMap, String encoding) throws IOException { - log.debug("http 请求 url: {} , 请求参数: {}", url, appendUrl("", paramMap).replace("?", "")); - encoding = encoding == null ? UTF8 : encoding; - // 创建post方式请求对象 - HttpPost httpPost = new HttpPost(url); - // 装填参数 - List nameValuePairs = new ArrayList(); - if (paramMap != null) { - for (Map.Entry entry : paramMap.entrySet()) { - String value = entry.getValue(); - //去掉如下判断会造成String类型的value为null时 - if (value != null) { - nameValuePairs.add(new BasicNameValuePair(entry.getKey(), value)); - } - } - } - // 设置参数到请求对象中 - httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, encoding)); - // 设置header信息 - // 指定报文头【Content-type】、【User-Agent】 - httpPost.setHeader("Content-type", APPLICATION_FORM_URLENCODED); - return post(url, httpPost, encoding, new DataParse() { - @Override - public String parseData(HttpEntity httpEntity, String encoding) throws IOException { - return EntityUtils.toString(httpEntity, encoding); - } - }); - } - - /** - * 向url发送post请求发送json - * @param url 请求url - * @param json json字符串 - * @param encoding 编码 - * @return 请求返回的数据 - * @throws IOException 读写异常 - */ - public static String postJsonBody(String url, String json, String encoding) throws IOException { - log.debug("http 请求 url: {} , 请求参数: {}", url, json); - encoding = encoding == null ? UTF8 : encoding; - // 创建post方式请求对象 - HttpPost httpPost = new HttpPost(url); - // 设置参数到请求对象中 - StringEntity stringEntity = new StringEntity(json, ContentType.APPLICATION_JSON); - // Constant.UTF8 - stringEntity.setContentEncoding(encoding); - httpPost.setEntity(stringEntity); - String result = post(url, httpPost, encoding, new DataParse() { - @Override - public String parseData(HttpEntity httpEntity, String encoding) throws IOException { - return EntityUtils.toString(httpEntity, encoding); - } - }); - return result; - } - - /** - * 向url发送post请求 - * @param url 请求url - * @param httpPost httpClient - * @return 请求返回的数据 - * @throws IOException 读写异常 - */ - private static T post(String url, HttpPost httpPost, String encoding, DataParse dataParse) - throws IOException { - T result = null; - CloseableHttpResponse response = null; - // 创建httpclient对象 - CloseableHttpClient httpClient = HttpClientBuilder.create().build(); - - // 执行请求操作,并拿到结果(同步阻塞) - response = sendRequestAndGetResult(url, httpClient, httpPost); - // 获取结果实体 - // 判断网络连接状态码是否正常(0--200都数正常) - if (null != response) { - result = dataParse.parseData(response.getEntity(), encoding); - log.debug("http 请求结果: {}", result); - } - try { - if (null != response) { - response.close(); - } - } catch (IOException ex) { - log.error(ex.getMessage(), ex); - } - return result; - } - - /** - * 设置http头,发送http请求,打印请求耗时 - * @param url 请求url - * @param httpClient httpClient - * @param httpUriRequest httpUriRequest - * @return 请求返回的数据 - * @throws IOException 读写异常 - */ - private static CloseableHttpResponse sendRequestAndGetResult(String url, CloseableHttpClient httpClient, - HttpUriRequest httpUriRequest) throws IOException { - long startTime = System.currentTimeMillis(); - CloseableHttpResponse response = httpClient.execute(httpUriRequest); - long endTime = System.currentTimeMillis(); - collectAPISpendTime(url, startTime, endTime); - return response; - } - - /** - * 打印请求信息 - * @param url 请求url - * @param startTime 请求开始时间 - * @param endTime 请求结束时间 - */ - private static void collectAPISpendTime(String url, long startTime, long endTime) { - log.debug("HTTP请求耗时分析,请求URL: {} , 耗时: {} ms", url, endTime - startTime); - } - -// /** -// * 向url发送post请求上传单文件 -// * @param url 请求url -// * @param paramMap 需要表单提交的参数 -// * @param fileMap 需要上传的文件 -// * @param encoding 编码 -// * @return 请求返回的数据 -// * @throws IOException 读写异常 -// */ -// public static String postFile(String url, Map paramMap, Map fileMap, String encoding) -// throws IOException { -// if (fileMap != null) { -// Map> fileListMap = new HashMap>(); -// for (Map.Entry entry : fileMap.entrySet()) { -// File file = entry.getValue(); -// List fileList = new ArrayList(); -// fileList.add(file); -// fileListMap.put(entry.getKey(), fileList); -// } -// return postMultipleFile(url, paramMap, fileListMap, encoding); -// } -// return postMultipleFile(url, paramMap, null, encoding); -// } - -// /** -// * 向url发送post请求上传多文件 -// * 向url发送post请求上传单文件 -// * @param url 请求url -// * @param paramMap 需要表单提交的参数 -// * @param fileListMap 需要上传的文件 -// * @param encoding 编码 -// * @return 请求返回的数据 -// * @throws IOException 读写异常 -// */ -// public static String postMultipleFile(String url, Map paramMap, Map> fileListMap, -// String encoding) throws IOException { -// return postFileBody(url, paramMap, fileListMap, encoding, new DataParse() { -// @Override -// public String parseData(HttpEntity httpEntity, String encoding) throws IOException { -// return EntityUtils.toString(httpEntity, encoding); -// } -// }); -// } - -// /** -// * 向url发送post请求上传多文件 -// * 向url发送post请求上传单文件 -// * @param url 请求url -// * @param paramMap 需要表单提交的参数 -// * @param fileListMap 需要上传的文件 -// * @param encoding 编码 -// * @return 请求返回的数据 -// * @throws IOException 读写异常 -// */ -// private static T postFileBody(String url, Map paramMap, Map> fileListMap, -// String encoding, DataParse dataParse) throws IOException { -// log.debug("http 请求 url: {} , 请求参数: {}", url, appendUrl("", paramMap).replace("?", "")); -// encoding = encoding == null ? UTF8 : encoding; -// T result = null; -// CloseableHttpClient httpClient = HttpClientBuilder.create().build(); -// HttpPost httpPost = new HttpPost(url); -// MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create(); -// -// ContentType contentType = ContentType.create("text/plain", Charset.forName(encoding)); -// if (null != paramMap) { -// for (Map.Entry entry : paramMap.entrySet()) { -// entityBuilder.addTextBody(entry.getKey(), entry.getValue(), contentType); -// } -// } -// -// if (null != fileListMap) { -// for (Map.Entry> entry : fileListMap.entrySet()) { -// String key = entry.getKey(); -// List fileList = entry.getValue(); -// for (File file : fileList) { -// FileBody fileBody = new FileBody(file); -// entityBuilder.addPart(key, fileBody); -// } -// } -// } -// -// HttpEntity entity = entityBuilder.build(); -// httpPost.setEntity(entity); -// CloseableHttpResponse response = sendRequestAndGetResult(url, httpClient, httpPost); -// if (null != response) { -// result = dataParse.parseData(response.getEntity(), encoding); -// log.debug("http 请求结果: {}", result); -// } -// try { -// if (null != response) { -// response.close(); -// } -// } catch (IOException ex) { -// log.error(ex.getMessage(), ex); -// } -// return result; -// } - - - /** - * 公共数据解析接口 - * @param - */ - private interface DataParse { - /** - * 解析返回数据 - * @param httpEntity 返回实体 - * @param encoding 编码 - * @return 实际解析返回内容 - * @throws IOException io异常 - */ - T parseData(HttpEntity httpEntity, String encoding) throws IOException; - - } - - /** - * 将url与map拼接成HTTP查询字符串 - * @param url 请求url - * @param paramMap 需要拼装的map - * @return 拼装好的url - */ - public static String appendUrl(String url, Map paramMap) throws UnsupportedEncodingException { - if (paramMap == null) { - return url; - } - StringBuffer paramStringBuffer = new StringBuffer(); - Iterator> mapIterator = paramMap.entrySet().iterator(); - while (mapIterator.hasNext()) { - Map.Entry next = mapIterator.next(); - paramStringBuffer.append(next.getKey()).append("=").append(URLEncoder.encode(next.getValue(), ConstantUtils.UTF8)).append("&"); - } - String paramStr = paramStringBuffer.toString(); -// String paramStr = mapJoinNotEncode(paramMap); - if (paramStr != null && !"".equals(paramStr)) { - if (url.indexOf("?") > 0) { - if (url.endsWith("&")) { - url += paramStr.substring(0, paramStr.length() - 1); - } else { - url += "&" + paramStr.substring(0, paramStr.length() - 1); - } - } else { - url += "?" + paramStr.substring(0, paramStr.length() - 1); - } - } - return url; - } - - /** - * 把二进制写入文件 - * @param bytes - * @param path - * @throws IOException - */ - public static void writeFile(byte[] bytes, String path) throws IOException { - OutputStream os = null; - try { - // 根据绝对路径初始化文件 - File localFile = new File(path); - if (!localFile.exists()) { - boolean newFile = localFile.createNewFile(); - if (!newFile) { - throw new RuntimeException("创建文件异常,路径:" + path); - } - } - // 输出流 - os = new FileOutputStream(localFile); - os.write(bytes); - } finally { - if (os != null) { - os.close(); - } - } - } - -} - diff --git a/src/main/java/com/subsidy/util/IpAddressUtil.java b/src/main/java/com/subsidy/util/IpAddressUtil.java deleted file mode 100644 index b81d8b2..0000000 --- a/src/main/java/com/subsidy/util/IpAddressUtil.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.subsidy.util; - -import javax.servlet.http.HttpServletRequest; -import java.io.BufferedReader; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.HttpURLConnection; -import java.net.InetAddress; -import java.net.URL; -import java.net.UnknownHostException; - -public class IpAddressUtil { - - /** - * 返回客户端ip - */ - public static String getIpAddress(HttpServletRequest request) { - String ipAddress = request.getHeader("x-forwarded-for"); - if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { - ipAddress = request.getHeader("Proxy-Client-IP"); - } - if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { - ipAddress = request.getHeader("WL-Proxy-Client-IP"); - } - if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { - ipAddress = request.getRemoteAddr(); - if (ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")) { - InetAddress inet = null; - try { - inet = InetAddress.getLocalHost(); - } catch (UnknownHostException e) { - e.printStackTrace(); - } - ipAddress = inet.getHostAddress(); - } - } - if (ipAddress != null && ipAddress.length() > 15) { - if (ipAddress.indexOf(",") > 0) { - ipAddress = ipAddress.substring(0, ipAddress.indexOf(",")); - } - } - return ipAddress; - } - - /** - * @Description:获取客户端外网ip - * @Author:zrt - * @Date:2019/6/13 11:23 - **/ - public static String getPublicIp() { - try { - String path = "http://subsidy.youkehulian.cn/";// 要获得html页面内容的地址 - - URL url = new URL(path);// 创建url对象 - - HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 打开连接 - - conn.setRequestProperty("contentType", "GBK"); // 设置url中文参数编码 - - conn.setConnectTimeout(5 * 1000);// 请求的时间 - - conn.setRequestMethod("GET");// 请求方式 - - InputStream inStream = conn.getInputStream(); - // readLesoSysXML(inStream); - - BufferedReader in = new BufferedReader(new InputStreamReader( - inStream, "GBK")); - StringBuffer buffer = new StringBuffer(); - String line = ""; - // 读取获取到内容的最后一行,写入 - while ((line = in.readLine()) != null) { - buffer.append(line); - } - String str = buffer.toString(); - String ipString1 = str.substring(str.indexOf("[")); - // 获取你的IP是中间的[182.149.82.50]内容 - String ipsString2 = ipString1.substring(ipString1.indexOf("[") + 1, - ipString1.lastIndexOf("]")); - //获取当前IP地址所在地址 - /* String ipsString3=ipString1.substring(ipString1.indexOf(": "),ipString1.lastIndexOf("")); - System.err.println(ipsString3);*/ - - // 返回公网IP值 - return ipsString2; - - } catch (Exception e) { - System.out.println("获取公网IP连接超时"); - return "连接超时"; - } - } -} diff --git a/src/main/java/com/subsidy/util/JwtUtil.java b/src/main/java/com/subsidy/util/JwtUtil.java deleted file mode 100644 index 972185b..0000000 --- a/src/main/java/com/subsidy/util/JwtUtil.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.subsidy.util; - -import com.auth0.jwt.JWT; -import com.auth0.jwt.JWTVerifier; -import com.auth0.jwt.algorithms.Algorithm; -import com.auth0.jwt.interfaces.Claim; - -import java.util.Date; -import java.util.Map; - -/** - *

- * Token工具 - *

- * - * @author DengMin - * @since 2021/4/14 - */ -public class JwtUtil { - - private static Long EXPIRE_TIME = 24 * 60 * 60 * 1000L; - - private static String SECRET = "PBKDF2SHA256:64000:18:24:N:GFHZ6Y0PTEUDYCJI3K6SOOXWYEKPOZED:WBWFJMX5DF252E0HR3BF3P/D"; - - /** - * 生成Token - * @param id - * @return - */ - public static String generateToken(Long id, String type) { - Date expireDate = new Date(System.currentTimeMillis() + EXPIRE_TIME); - return JWT.create() - .withClaim("id", id) - .withClaim("type", type) - .withAudience() - .withExpiresAt(expireDate) - .withIssuedAt(new Date()) - .sign(Algorithm.HMAC256(SECRET)); - } - - /** - * 检验token是否正确 - * @param token - * @return - */ - public static boolean verifyToken(String token) { - try { - Algorithm algorithm = Algorithm.HMAC256(SECRET); - JWTVerifier verifier = JWT.require(algorithm).build(); - verifier.verify(token); - return true; - } catch (Exception e) { - return false; - } - } - - /** - * 获取用户自定义Claim集合 - * @param token - * @return - */ - public static Map getClaims(String token) { - Algorithm algorithm = Algorithm.HMAC256(SECRET); - JWTVerifier verifier = JWT.require(algorithm).build(); - Map claims = verifier.verify(token).getClaims(); - return claims; - } - - /** - * 获取过期时间 - * @param token - * @return - */ - public static Date getExpiresAt(String token) { - Algorithm algorithm = Algorithm.HMAC256(SECRET); - return JWT - .require(algorithm) - .build() - .verify(token) - .getExpiresAt(); - } - - /** - * 验证token是否失效 - * @param token - * @return true: 过期, false: 没过期 - */ - public static boolean isExpired(String token) { - try { - final Date expiration = getExpiresAt(token); - return expiration.before(new Date()); - } catch (Exception e) { - return true; - } - } -} diff --git a/src/main/java/com/subsidy/util/Localstorage.java b/src/main/java/com/subsidy/util/Localstorage.java deleted file mode 100644 index 44beba2..0000000 --- a/src/main/java/com/subsidy/util/Localstorage.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.subsidy.util; - -import org.springframework.web.bind.annotation.RestController; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -@RestController -public class Localstorage { - private static final ThreadLocal local = ThreadLocal.withInitial(() -> null); - private static ConcurrentHashMap map = new ConcurrentHashMap<>(); - public static void setUser(Object obj, String type) { -// Map map = new HashMap<>(); - map.put("user", obj); - map.put("type", type); - Localstorage.local.set(map); - } - - public static Map getMap() { - return (Map) Localstorage.local.get(); - } - - public static Object getUser() { -// Map map = (Map) Localstorage.local.get(); - return map.get("user"); - } - - public static void remove() { - Localstorage.local.remove(); - } -} diff --git a/src/main/java/com/subsidy/util/MathUtil.java b/src/main/java/com/subsidy/util/MathUtil.java deleted file mode 100644 index 79275a8..0000000 --- a/src/main/java/com/subsidy/util/MathUtil.java +++ /dev/null @@ -1,174 +0,0 @@ -package com.subsidy.util; - -import java.math.BigDecimal; -import java.math.RoundingMode; -import java.util.Random; - -public class MathUtil { - - public static String getRandomCode(int randomLength) { - StringBuilder str = new StringBuilder(); - Random random = new Random(); - for (int i = 0; i < randomLength; i++) { - str.append(random.nextInt(10)); - } - return str.toString(); - } - - public static String getRandomString(int length) { - StringBuilder val = new StringBuilder(); - Random random = new Random(); - for (int i = 0; i < length; ++i) { - String charOrNum = random.nextInt(3) % 3 == 0 ? "num" : "char"; - if ("char".equalsIgnoreCase(charOrNum)) { - int temp = random.nextInt(2) % 2 == 0 ? 65 : 97; - val.append((char) (random.nextInt(26) + temp)); - } else { - val.append(random.nextInt(10)); - } - } - return val.toString(); - } - - //习题/视频 ==> 秒钟向上取整 - public static String ceilSecond(int length) { - return String.valueOf((int) Math.ceil((double) length / 60)); - } - - //习题/视频 ==> 秒钟向下取整 - public static String floorSecond(int length) { - return String.valueOf((int) Math.floor((double) length / 60)); - } - - //视频秒数处理 - public static String vodLength(int i) { - if (i > 60) { - if (i % 60 >= 10) { - return i / 60 + ":" + i % 60; - } else { - return i / 60 + ":0" + i % 60; - } - } else { - if (i % 60 >= 10) { - return "00:" + i; - } else { - return "00:0" + i; - } - } - } - - //文件大小处理 - public static String fileUnit(int i) { - if (i / 1024 > 1024) { - return String.format("%.2f", (double) i / 1024 / 1024) + "M"; - } else { - return String.format("%.2f", (double) i / 1024) + "K"; - } - } - - //单个题目秒数处理 - public static String exerciseLength(int i) { - if (i >= 60 * 60) { - return i / 60 / 60 + "时" + (i - 60 * 60) / 60 + "分" + i % 60 + "秒"; - } else if (i >= 60) { - return i / 60 + "分" + i % 60 + "秒"; - } else { - return i % 60 + "秒"; - } - } - - // 除法取整 - public static String getAvgIndex(BigDecimal counts, BigDecimal total) { - if (BigDecimal.ZERO.equals(total)) { - return "0"; - } else { - return counts.divide(total, RoundingMode.CEILING).stripTrailingZeros().toPlainString(); - } - } - - //百分比 取整 返回字符串 - public static String getPercentAvgIndex(BigDecimal counts, BigDecimal total) { - if (BigDecimal.ZERO.equals(total) || BigDecimal.ZERO.equals(counts)) { - return "0%"; - } else { - return counts.multiply(new BigDecimal(100)).divide(total, RoundingMode.CEILING).stripTrailingZeros().toPlainString() + "%"; - } - } - - //百分比 不带%输出 - public static String getPercentAvgIndexWithPercent(BigDecimal counts, BigDecimal total) { - if (BigDecimal.ZERO.equals(total) || BigDecimal.ZERO.equals(counts)) { - return "0"; - } else { - return counts.multiply(new BigDecimal(100)).divide(total, 2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString(); - } - } - - //百分比 不带%输出 - public static String getPercentAvgIndexCeil(BigDecimal counts, BigDecimal total) { - if (BigDecimal.ZERO.equals(total) || BigDecimal.ZERO.equals(counts)) { - return "0"; - } else { - return counts.multiply(new BigDecimal(100)).divide(total, 2, BigDecimal.ROUND_CEILING).stripTrailingZeros().toPlainString(); - } - } - - - //习题序号生成规则 sid 从数据取出某科目某知识点的最大的序号 - public static String getExeCode(String sid) { - Integer integer = Integer.valueOf(sid.substring(9)); - return sid.substring(0, 9) + (++integer); - } - - // 整型a 整型b a/b 向上取整 - public static Integer intDivCeil(long a, int b) { - return (int) Math.ceil((double) a / b); - } - - // 整型a 整型b a/b 向下取整 - public static Integer intDivFloorPercent(long a, int b) { - return (int) Math.floor((double) a * 100 / b); - } - - public static Integer getRandomNum(Integer i) { - Random random = new Random(); - return random.nextInt(i); - } - -// public static void main(String[] args) { -// for (int i= 1;i<100;i++){ -// System.out.println(getRandomNum(2)); -// } -// } - - public static String secToTime(int time) { - String timeStr ; - int hour; - int minute; - int second; - if (time <= 0) { - return "00:00:00"; - } else { - minute = time / 60; - if (minute < 60) { - second = time % 60; - timeStr = "00:"+unitFormat(minute) + ":" + unitFormat(second); - } else { - hour = minute / 60; - minute = minute % 60; - second = time - hour * 3600 - minute * 60; - timeStr = unitFormat(hour) + ":" + unitFormat(minute) + ":" + unitFormat(second); - } - } - return timeStr; - } - public static String unitFormat(int i) { - String retStr = null; - if (i >= 0 && i < 10) { - retStr = "0" + i; - } else { - retStr = "" + i; - } - return retStr; - } -} diff --git a/src/main/java/com/subsidy/util/MongoUtil.java b/src/main/java/com/subsidy/util/MongoUtil.java deleted file mode 100644 index 6c53fbc..0000000 --- a/src/main/java/com/subsidy/util/MongoUtil.java +++ /dev/null @@ -1,52 +0,0 @@ -//package com.subsidy.util; -// -//import lombok.Data; -//import org.springframework.stereotype.Component; -// -//import java.util.List; -//import java.util.regex.Pattern; -// -//@Data -//@Component -//public class MongoUtil { -// public Integer pageSize; -// private Integer currentPage; -// -// -// public void start(Integer currentPage, Integer pageSize, Query query) { -// pageSize = pageSize == 0 ? 10 : pageSize; -// query.limit(pageSize); -// query.skip((currentPage - 1) * pageSize); -// this.pageSize = pageSize; -// this.currentPage = currentPage; -// } -// -// public PageHelper pageHelper(long total, List list) { -// return new PageHelper(this.currentPage, total, this.pageSize, list); -// } -// -// public PageHelper pageHelper(List list) { -// return new PageHelper(this.currentPage, this.pageSize, list); -// } -// -// public PageHelper pageHelper(long currentPage, long total, long pageSize, List list) { -// return new PageHelper(currentPage, total, pageSize, list); -// } -// -// public PageHelper pageHelper(long currentPage, long pageSize, List list) { -// return new PageHelper(currentPage, pageSize, list); -// } -// -// -// /** -// * 用于模糊查询忽略大小写 -// * -// * @param string -// * @return -// */ -// public Pattern getPattern(String string) { -// Pattern pattern = Pattern.compile("^.*" + string + ".*$", Pattern.CASE_INSENSITIVE); -// return pattern; -// } -// -//} diff --git a/src/main/java/com/subsidy/util/MyBeanUtils.java b/src/main/java/com/subsidy/util/MyBeanUtils.java deleted file mode 100644 index 919f1fd..0000000 --- a/src/main/java/com/subsidy/util/MyBeanUtils.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.subsidy.util; - -import org.springframework.beans.BeanWrapper; -import org.springframework.beans.BeanWrapperImpl; - -import java.beans.PropertyDescriptor; -import java.util.HashSet; -import java.util.Set; - -public class MyBeanUtils { - - public static String[] getNullPropertyNames (Object source) { - final BeanWrapper src = new BeanWrapperImpl(source); - PropertyDescriptor[] pds = src.getPropertyDescriptors(); - - Set emptyNames = new HashSet<>(); - for(PropertyDescriptor pd : pds) { - Object srcValue = src.getPropertyValue(pd.getName()); - // 此处判断可根据需求修改 - if (srcValue == null) { - emptyNames.add(pd.getName()); - } - } - String[] result = new String[emptyNames.size()]; - return emptyNames.toArray(result); - } - - -} diff --git a/src/main/java/com/subsidy/util/MyStringUtils.java b/src/main/java/com/subsidy/util/MyStringUtils.java deleted file mode 100644 index 4cbbc16..0000000 --- a/src/main/java/com/subsidy/util/MyStringUtils.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.subsidy.util; - -import java.util.List; - -public class MyStringUtils { - - - /** - * 把集合改成字符串 去掉逗号 - */ - public static String changeListToString(List list) { - - StringBuffer buffer = new StringBuffer(); - if (list.size() > 0) { - int i= 0 ; - for (String s : list) { - buffer.append(s); - if (i != list.size()-1){ - buffer.append(","); - } - } - } - return buffer.toString(); - } - - - - - -} diff --git a/src/main/java/com/subsidy/util/OSSUtils.java b/src/main/java/com/subsidy/util/OSSUtils.java deleted file mode 100644 index e328952..0000000 --- a/src/main/java/com/subsidy/util/OSSUtils.java +++ /dev/null @@ -1,121 +0,0 @@ -package com.subsidy.util; - -import cn.hutool.core.codec.Base64; -import cn.hutool.core.date.DateTime; -import com.aliyun.oss.ClientException; -import com.aliyun.oss.OSS; -import com.aliyun.oss.OSSClientBuilder; -import com.aliyun.oss.OSSException; -import com.aliyun.oss.model.PutObjectRequest; -import com.aliyun.oss.model.PutObjectResult; - -import java.io.*; -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.UUID; - -public class OSSUtils { - - // @Value("${aliyun.oss.accessKeyId}") - private static String accessKeyId = "LTAI5tLUBG4B6QxhHrhddc7p"; - - // @Value("${aliyun.oss.accessKeySecret}") - private static String secretAccessKey = "eber38QGHZixTQ6bFfrd80kbg67jIP"; - - // @Value("${aliyun.oss.endpoint}") - private static String endPoint = "oss-cn-beijing.aliyuncs.com"; - - // @Value("${aliyun.oss.bucketName}") -// private static String bucketName = "shixischool"; - private static String bucketName = "ykhl-bigger"; - - public static String uploadOneFile(String file) throws IOException { - - // 创建OSSClient实例。 - OSS ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, secretAccessKey); - - // 设置文件名 - String fileName = new DateTime().toString("yyyy-MM-dd") - + UUID.randomUUID().toString() + ".jpg"; - - // 获取文件后缀名 -// int originalFilenameStartIndex = file.indexOf('/'); -// int originalFilenameEndIndex = file.indexOf(';'); -// String originalFilename = file.substring(originalFilenameStartIndex+1,originalFilenameEndIndex); - - // 获取base64的文件 -// file = file.split(",")[1]; - - byte[] bytesFile = Base64.decode(file); - try { - // 创建PutObject请求。 - InputStream inputStream = new ByteArrayInputStream(bytesFile); - ossClient.putObject(bucketName, fileName, inputStream); - - String url = "http://" + bucketName + "." + endPoint + "/" + fileName+"?x-oss-process=image/auto-orient,1/resize,m_pad,w_500,h_500/quality,Q_100/format,jpg"; - // System.out.println(url); - return url; - } catch (Exception e) { - e.printStackTrace(); - return null; - } finally { - if (ossClient != null) { - ossClient.shutdown(); - } - } - } - - - public static String image2Base64(String imgUrl) { - URL url = null; - InputStream is = null; - ByteArrayOutputStream outStream = null; - HttpURLConnection httpUrl = null; - - try { - url = new URL(imgUrl); - httpUrl = (HttpURLConnection) url.openConnection(); - httpUrl.connect(); - httpUrl.getInputStream(); - is = httpUrl.getInputStream(); - outStream = new ByteArrayOutputStream(); - // 创建一个Buffer字符串 - byte[] buffer = new byte[1024]; - // 每次读取的字符串长度,如果为-1,代表全部读取完毕 - int len = 0; - // 使用一个输入流从buffer里把数据读取出来 - while ((len = is.read(buffer)) != -1) { - // 用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度 - outStream.write(buffer, 0, len); - } - // 对字节数组Base64编码 - return Base64Util.encode(outStream.toByteArray()); - } catch (Exception e) { - e.printStackTrace(); - } finally { - if (is != null) { - try { - is.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - if (outStream != null) { - try { - outStream.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - if (httpUrl != null) { - httpUrl.disconnect(); - } - } - return imgUrl; - } - - public static void main(String[] args) { -// System.out.println(image2Base64("https://shixischool.oss-cn-beijing.aliyuncs.com/2022-12-219df5b721-99b7-48c4-916e-e474a4eca946.jpg?x-oss-process=image/auto-orient,1/resize,m_pad,w_500,h_500/quality,Q_100/format,jpg")); - System.out.println(image2Base64("http://ykhl-bigger.oss-cn-beijing.aliyuncs.com/2023-02-1618cb936b-4825-429c-9fdd-dd9d0de97ed7.jpg?x-oss-process=image/auto-orient,1/resize,m_pad,w_500,h_500/quality,Q_100/format,jpg")); - } -} diff --git a/src/main/java/com/subsidy/util/PDFUtil.java b/src/main/java/com/subsidy/util/PDFUtil.java deleted file mode 100644 index 0f9db34..0000000 --- a/src/main/java/com/subsidy/util/PDFUtil.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.subsidy.util; - -import com.itextpdf.text.*; -import com.itextpdf.text.pdf.BaseFont; -import com.itextpdf.text.pdf.PdfPTable; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Component; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; - -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.nio.charset.StandardCharsets; -import java.text.SimpleDateFormat; -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; -import java.time.format.DateTimeParseException; -import java.util.Date; - -@Slf4j -@Component -public class PDFUtil { - - static BaseFont baseFont; - - { - try { - baseFont = BaseFont.createFont("https://zhongzhi-cms.oss-cn-shanghai.aliyuncs.com/STSONG.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); - } catch (Exception e) { - e.printStackTrace(); - } - } - - public static void tableStyle(PdfPTable table, int[] cellsWidth) throws DocumentException { - table.setWidths(cellsWidth); - table.setWidthPercentage(100); - table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER); - table.getDefaultCell().setVerticalAlignment(Element.ALIGN_MIDDLE); - table.getDefaultCell().setFixedHeight(30); - table.getDefaultCell().setBackgroundColor(BaseColor.BLUE); - table.getDefaultCell().setPadding(0); - table.getDefaultCell().setBorderWidth(0); - } - - /** - * 流化下载 - * - * @param bytes - * @param filename - */ - public static void renderPdf(final byte[] bytes, final String filename, String type) { - ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); - HttpServletResponse response = servletRequestAttributes.getResponse(); - initResponseHeader(response, "application/" + type); - setFileDownloadHeader(response, filename, "." + type); - if (null != bytes) { - try { - response.getOutputStream().write(bytes); - response.getOutputStream().flush(); - } catch (IOException e) { - throw new IllegalArgumentException(e); - } - } - } - - /** - * 分析并设置contentType与headers. - */ - private static HttpServletResponse initResponseHeader(HttpServletResponse response, final String contentType, final String... headers) { - // 分析headers参数 - String encoding = "utf-8"; - boolean noCache = true; - for (String header : headers) { - String headerName = StringUtils.substringBefore(header, ":"); - String headerValue = StringUtils.substringAfter(header, ":"); - if (StringUtils.equalsIgnoreCase(headerName, "utf-8")) { - encoding = headerValue; - } else if (StringUtils.equalsIgnoreCase(headerName, "no-cache")) { - noCache = Boolean.parseBoolean(headerValue); - } else { - throw new IllegalArgumentException(headerName + "不是一个合法的header类型"); - } - } - // 设置headers参数 - String fullContentType = contentType + ";charset=" + encoding; - response.setContentType(fullContentType); - if (noCache) { - // Http 1.0 header - response.setDateHeader("Expires", 0); - response.addHeader("Pragma", "no-cache"); - // Http 1.1 header - response.setHeader("Cache-Control", "no-cache"); - } - return response; - } - - /** - * 设置让浏览器弹出下载对话框的Header. - * - * @param - */ - public static void setFileDownloadHeader(HttpServletResponse response, String fileName, String fileType) { - try { - // 中文文件名支持 - String encodedfileName = new String(fileName.getBytes(StandardCharsets.UTF_8), "ISO8859-1"); - response.setHeader("Content-Disposition", "attachment; filename=\"" + encodedfileName + fileType + "\""); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - } - - public static String idCard2Gender(String idCard) { - int genderDigit = Integer.parseInt(idCard.substring(16, 17)); - return (genderDigit % 2 == 0) ? "女" : "男"; - } - - public static Integer birthDate2Age(String birthDateStr){ - if (birthDateStr == null || birthDateStr.trim().isEmpty()) { - return -1; - } - - try { - // 定义日期格式(yyyy/MM/dd) - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd"); - // 解析出生日期 - LocalDate birthDate = LocalDate.parse(birthDateStr, formatter); - // 获取当前日期 - LocalDate currentDate = LocalDate.now(); - - // 计算基础年龄 - int age = currentDate.getYear() - birthDate.getYear(); - - // 校验月份和日期,调整年龄 - if (currentDate.getMonthValue() < birthDate.getMonthValue()) { - age--; - } else if (currentDate.getMonthValue() == birthDate.getMonthValue()) { - if (currentDate.getDayOfMonth() < birthDate.getDayOfMonth()) { - age--; - } - } - - // 防止出生日期异常(如未来日期) - return age < 0 ? -1 : age; - } catch (DateTimeParseException e) { - // 日期格式错误(如 "2001/13/03" 或 "2001-01-03") - return -1; - } - } - - public static String idCard2BirthDate(String idCard) { - if (idCard == null || idCard.length() != 18) { - throw new IllegalArgumentException("身份证号码不合法"); - } - - String birthDateStr = idCard.substring(6, 14); - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); - try { - Date birthDate = sdf.parse(birthDateStr); - SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy/MM/dd"); - return outputFormat.format(birthDate); - } catch (Exception e) { - throw new IllegalArgumentException("身份证号码中的出生日期不合法"); - } - } - - -} diff --git a/src/main/java/com/subsidy/util/PageHelper.java b/src/main/java/com/subsidy/util/PageHelper.java deleted file mode 100644 index bf37716..0000000 --- a/src/main/java/com/subsidy/util/PageHelper.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.subsidy.util; - -import lombok.Data; -import org.apache.poi.ss.formula.functions.T; - -import java.util.List; - -@Data -public class PageHelper { - - private long currentPage; - private long total; - private long pageSize; - private List list; - - public PageHelper(long pageNum, long total, long pageSize, List list) { - this.currentPage = pageNum; - this.total = total; - this.pageSize = pageSize; - this.list = list; - } - - public PageHelper(long pageNum, long pageSize, List list) { - this.currentPage = pageNum; - this.pageSize = pageSize; - this.list = list; - } - - -} diff --git a/src/main/java/com/subsidy/util/PolyvUtils.java b/src/main/java/com/subsidy/util/PolyvUtils.java deleted file mode 100644 index 111a943..0000000 --- a/src/main/java/com/subsidy/util/PolyvUtils.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.subsidy.util; - -import net.polyv.live.v1.util.LiveSignUtil; - -import java.io.UnsupportedEncodingException; -import java.security.NoSuchAlgorithmException; - -public class PolyvUtils { - - /** - * 学生端--生成保利威视直播观看地址 - */ - public static String liveSign(String userId, String channelId){ - - //根据实际情况设置userid - String ts = String.valueOf(System.currentTimeMillis()); - String url = "https://live.polyv.cn/watch/"+channelId; - String signText = "03sqxr97fo"+ userId +"03sqxr97fo"+ts; - try { - String sign = LiveSignUtil.md5Hex(signText); - url += "?userid="+userId+"&ts="+ts+"&sign="+sign; - return url; - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - return null; - } - -} diff --git a/src/main/java/com/subsidy/util/RandomUtil.java b/src/main/java/com/subsidy/util/RandomUtil.java deleted file mode 100644 index 50d4a3e..0000000 --- a/src/main/java/com/subsidy/util/RandomUtil.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.subsidy.util; - -import cn.hutool.core.lang.UUID; - -import java.util.Date; -import java.util.Random; - -public class RandomUtil { - - public static int getCode() { - return (int)((Math.random() * 9 + 1) * 100000); - } - - public static String randomPass(Integer count) { - StringBuffer stringBuffer = new StringBuffer(); - Random random = new Random(new Date().getTime()); - String flag = type[random.nextInt(type.length)]; - int length = count; - for (int i = 0; i < length; i++) { - switch (flag) { - case "word": - stringBuffer.append(word[random.nextInt(word.length)]); - break; - case "num": - stringBuffer.append(num[random.nextInt(num.length)]); - break; - case "symbol": - stringBuffer.append(symbol[random.nextInt(symbol.length)]); - break; - default: - break; - } - flag = type[random.nextInt(type.length)]; - } - return stringBuffer.toString(); - } - - - public static String getRandomCode(int randomLength) { - StringBuilder str = new StringBuilder(); - Random random = new Random(); - for (int i = 0; i < randomLength; i++) { - str.append(random.nextInt(10)); - } - return str.toString(); - } - - - /** - * 随机生成订单号 - */ - public static String randomOrderNumber(){ - return UUID.fastUUID().toString().replace("-","").substring(0,29); - } - - public static void main(String[] args) { - System.out.println(randomOrderNumber()); - } - - - public final static String[] type = { - "word", "num", "symbol" - }; - - public final static String[] word = { - "a", "b", "c", "d", "e", "f", "g", - "h", "j", "k", "m", "n", - "p", "q", "r", "s", "t", - "u", "v", "w", "x", "y", "z", - "A", "B", "C", "D", "E", "F", "G", - "H", "J", "K", "M", "N", - "P", "Q", "R", "S", "T", - "U", "V", "W", "X", "Y", "Z" - }; - - public final static String[] num = { - "1", "2", "3", "4", "5", "6", "7", "8", "9" - }; - - public final static String[] symbol = { - "!", "@", "#", "$", "%", "&" - }; -} diff --git a/src/main/java/com/subsidy/util/RedisUtil.java b/src/main/java/com/subsidy/util/RedisUtil.java deleted file mode 100644 index 0b7e9dc..0000000 --- a/src/main/java/com/subsidy/util/RedisUtil.java +++ /dev/null @@ -1,620 +0,0 @@ -package com.subsidy.util; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.core.BoundListOperations; -import org.springframework.data.redis.core.Cursor; -import org.springframework.data.redis.core.RedisCallback; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.data.redis.core.ScanOptions; -import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.TimeUnit; - -/** - *

- * redisTemplate封装 - *

- * - * @author DengMin - * @since 2020/12/17 - */ - -@Component -public class RedisUtil { - - @Autowired - private RedisTemplate redisTemplate; - - public RedisUtil(RedisTemplate redisTemplate) { - this.redisTemplate = redisTemplate; - } - - /** - * 指定缓存失效时间 - * @param key 键 - * @param time 时间(秒) - * @return - */ - public boolean expire(String key,long time){ - try { - if(time>0){ - redisTemplate.expire(key, time, TimeUnit.SECONDS); - } - return true; - } catch (Exception e) { - e.printStackTrace(); - return false; - } - } - - /** - * 根据key 获取过期时间 - * @param key 键 不能为null - * @return 时间(秒) 返回0代表为永久有效 - */ - public long getExpire(String key){ - return redisTemplate.getExpire(key,TimeUnit.SECONDS); - } - - /** - * 判断key是否存在 - * @param key 键 - * @return true 存在 false不存在 - */ - public boolean hasKey(String key){ - try { - return redisTemplate.hasKey(key); - } catch (Exception e) { - e.printStackTrace(); - return false; - } - } - - /** - * 删除缓存 - * @param key 可以传一个值 或多个 - */ - @SuppressWarnings("unchecked") - public void del(String ... key){ - if(key!=null&&key.length>0){ - if(key.length==1){ - redisTemplate.delete(key[0]); - }else{ - redisTemplate.delete(CollectionUtils.arrayToList(key)); - } - } - } - - /** - * 删除缓存 - * @param key 集合数据 - */ - public void del(Set key) { - if (key != null && key.size() > 0) { - redisTemplate.delete(key); - } - } - - //============================String============================= - /** - * 普通缓存获取 - * @param key 键 - * @return 值 - */ - public Object get(String key){ - return key==null?null:redisTemplate.opsForValue().get(key); - } - - /** - * 普通缓存放入 - * @param key 键 - * @param value 值 - * @return true成功 false失败 - */ - public boolean set(String key,Object value) { - try { - redisTemplate.opsForValue().set(key, value); - return true; - } catch (Exception e) { - e.printStackTrace(); - return false; - } - } - - /** - * 普通缓存放入并设置时间 - * @param key 键 - * @param value 值 - * @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期 - * @return true成功 false 失败 - */ - public boolean set(String key,Object value,long time){ - try { - if(time>0){ - redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS); - }else{ - set(key, value); - } - return true; - } catch (Exception e) { - e.printStackTrace(); - return false; - } - } - - /** - * 递增 - * @param key 键 - * @param delta 要增加几(大于0) - * @return - */ - public long incr(String key, long delta){ - if(delta<0){ - throw new RuntimeException("递增因子必须大于0"); - } - return redisTemplate.opsForValue().increment(key, delta); - } - - /** - * 递减 - * @param key 键 - * @param delta 要减少几(小于0) - * @return - */ - public long decr(String key, long delta){ - if(delta<0){ - throw new RuntimeException("递减因子必须大于0"); - } - return redisTemplate.opsForValue().increment(key, -delta); - } - - //================================Map================================= - /** - * HashGet - * @param key 键 不能为null - * @param item 项 不能为null - * @return 值 - */ - public Object hget(String key,String item){ - return redisTemplate.opsForHash().get(key, item); - } - - /** - * 获取hashKey对应的所有键值 - * @param key 键 - * @return 对应的多个键值 - */ - public Map hmget(String key){ - return redisTemplate.opsForHash().entries(key); - } - - /** - * HashSet - * @param key 键 - * @param map 对应多个键值 - * @return true 成功 false 失败 - */ - public boolean hmset(String key, Map map){ - try { - redisTemplate.opsForHash().putAll(key, map); - return true; - } catch (Exception e) { - e.printStackTrace(); - return false; - } - } - - /** - * HashSet 并设置时间 - * @param key 键 - * @param map 对应多个键值 - * @param time 时间(秒) - * @return true成功 false失败 - */ - public boolean hmset(String key, Map map, long time){ - try { - redisTemplate.opsForHash().putAll(key, map); - if(time>0){ - expire(key, time); - } - return true; - } catch (Exception e) { - e.printStackTrace(); - return false; - } - } - - /** - * 向一张hash表中放入数据,如果不存在将创建 - * @param key 键 - * @param item 项 - * @param value 值 - * @return true 成功 false失败 - */ - public boolean hset(String key,String item,Object value) { - try { - redisTemplate.opsForHash().put(key, item, value); - return true; - } catch (Exception e) { - e.printStackTrace(); - return false; - } - } - - /** - * 向一张hash表中放入数据,如果不存在将创建 - * @param key 键 - * @param item 项 - * @param value 值 - * @param time 时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间 - * @return true 成功 false失败 - */ - public boolean hset(String key,String item,Object value,long time) { - try { - redisTemplate.opsForHash().put(key, item, value); - if(time>0){ - expire(key, time); - } - return true; - } catch (Exception e) { - e.printStackTrace(); - return false; - } - } - - /** - * 删除hash表中的值 - * @param key 键 不能为null - * @param item 项 可以使多个 不能为null - */ - public void hdel(String key, Object... item){ - redisTemplate.opsForHash().delete(key,item); - } - - /** - * 判断hash表中是否有该项的值 - * @param key 键 不能为null - * @param item 项 不能为null - * @return true 存在 false不存在 - */ - public boolean hHasKey(String key, String item){ - return redisTemplate.opsForHash().hasKey(key, item); - } - - /** - * hash递增 如果不存在,就会创建一个 并把新增后的值返回 - * @param key 键 - * @param item 项 - * @param by 要增加几(大于0) - * @return - */ - public double hincr(String key, String item,double by){ - return redisTemplate.opsForHash().increment(key, item, by); - } - - /** - * hash递减 - * @param key 键 - * @param item 项 - * @param by 要减少记(小于0) - * @return - */ - public double hdecr(String key, String item,double by){ - return redisTemplate.opsForHash().increment(key, item,-by); - } - - //============================set============================= - /** - * 根据key获取Set中的所有值 - * @param key 键 - * @return - */ - public Set sGet(String key){ - try { - return redisTemplate.opsForSet().members(key); - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - /** - * 根据value从一个set中查询,是否存在 - * @param key 键 - * @param value 值 - * @return true 存在 false不存在 - */ - public boolean sHasKey(String key,Object value){ - try { - return redisTemplate.opsForSet().isMember(key, value); - } catch (Exception e) { - e.printStackTrace(); - return false; - } - } - - /** - * 将数据放入set缓存 - * @param key 键 - * @param values 值 可以是多个 - * @return 成功个数 - */ - public long sSet(String key, Object...values) { - try { - return redisTemplate.opsForSet().add(key, values); - } catch (Exception e) { - e.printStackTrace(); - return 0; - } - } - - /** - * 将set数据放入缓存 - * @param key 键 - * @param time 时间(秒) - * @param values 值 可以是多个 - * @return 成功个数 - */ - public long sSetAndTime(String key,long time,Object...values) { - try { - Long count = redisTemplate.opsForSet().add(key, values); - if(time>0) { - expire(key, time); - } - return count; - } catch (Exception e) { - e.printStackTrace(); - return 0; - } - } - - /** - * 获取set缓存的长度 - * @param key 键 - * @return - */ - public long sGetSetSize(String key){ - try { - return redisTemplate.opsForSet().size(key); - } catch (Exception e) { - e.printStackTrace(); - return 0; - } - } - - /** - * 移除值为value的 - * @param key 键 - * @param values 值 可以是多个 - * @return 移除的个数 - */ - public long setRemove(String key, Object ...values) { - try { - Long count = redisTemplate.opsForSet().remove(key, values); - return count; - } catch (Exception e) { - e.printStackTrace(); - return 0; - } - } - //===============================list================================= - - /** - * 获取list缓存的内容 - * @param key 键 - * @param start 开始 - * @param end 结束 0 到 -1代表所有值 - * @return - */ - public List lGet(String key, long start, long end){ - try { - return redisTemplate.opsForList().range(key, start, end); - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - /** - * 获取list缓存的长度 - * @param key 键 - * @return - */ - public long lGetListSize(String key){ - try { - return redisTemplate.opsForList().size(key); - } catch (Exception e) { - e.printStackTrace(); - return 0; - } - } - - /** - * 通过索引 获取list中的值 - * @param key 键 - * @param index 索引 index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推 - * @return - */ - public Object lGetIndex(String key,long index){ - try { - return redisTemplate.opsForList().index(key, index); - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - /** - * 将list放入缓存 - * @param key 键 - * @param value 值 - * @return - */ - public boolean lSet(String key, Object value) { - try { - redisTemplate.opsForList().rightPush(key, value); - return true; - } catch (Exception e) { - e.printStackTrace(); - return false; - } - } - - /** - * 将list放入缓存 - * @param key 键 - * @param value 值 - * @param time 时间(秒) - * @return - */ - public boolean lSet(String key, Object value, long time) { - try { - redisTemplate.opsForList().rightPush(key, value); - if (time > 0) { - expire(key, time); - } - return true; - } catch (Exception e) { - e.printStackTrace(); - return false; - } - } - - /** - * 将list放入缓存 - * @param key 键 - * @param value 值 - * @return - */ - public boolean lSet(String key, List value) { - try { - redisTemplate.opsForList().rightPushAll(key, value); - return true; - } catch (Exception e) { - e.printStackTrace(); - return false; - } - } - - /** - * 将list放入缓存 - * @param key 键 - * @param value 值 - * @param time 时间(秒) - * @return - */ - public boolean lSet(String key, List value, long time) { - try { - redisTemplate.opsForList().rightPushAll(key, value); - if (time > 0) { - expire(key, time); - } - return true; - } catch (Exception e) { - e.printStackTrace(); - return false; - } - } - - /** - * 根据索引修改list中的某条数据 - * @param key 键 - * @param index 索引 - * @param value 值 - * @return - */ - public boolean lUpdateIndex(String key, long index,Object value) { - try { - redisTemplate.opsForList().set(key, index, value); - return true; - } catch (Exception e) { - e.printStackTrace(); - return false; - } - } - - /** - * 移除N个值为value - * @param key 键 - * @param count 移除多少个 - * @param value 值 - * @return 移除的个数 - */ - public long lRemove(String key,long count,Object value) { - try { - Long remove = redisTemplate.opsForList().remove(key, count, value); - return remove; - } catch (Exception e) { - e.printStackTrace(); - return 0; - } - } - - ///** - // * 模糊查询获取key值 - // * @param pattern - // * @return - // */ - public Set keys(String pattern){ - return redisTemplate.keys(pattern); - } - - /** - * 模糊查询 - * @param pattern - * @return - */ - public Set scan(String pattern) { - return redisTemplate.execute((RedisCallback>) redisConnection -> { - Set keys = new HashSet<>(); - Cursor cursor = redisConnection.scan(new ScanOptions.ScanOptionsBuilder().match(pattern).count(Integer.MAX_VALUE).build()); - while (cursor.hasNext()) { - keys.add(new String(cursor.next())); - } - return keys; - }); - } - - /** - * 使用Redis的消息队列 - * @param channel - * @param message 消息内容 - */ - public void convertAndSend(String channel, Object message){ - redisTemplate.convertAndSend(channel,message); - } - - - //=========BoundListOperations 用法 start============ - - - /** - * 根据起始结束序号遍历Redis中的list - * @param listKey - * @param start 起始序号 - * @param end 结束序号 - * @return - */ - public List rangeList(String listKey, long start, long end) { - //绑定操作 - BoundListOperations boundValueOperations = redisTemplate.boundListOps(listKey); - //查询数据 - return boundValueOperations.range(start, end); - } - /** - * 弹出右边的值 --- 并且移除这个值 - * @param listKey - */ - public Object rifhtPop(String listKey){ - //绑定操作 - BoundListOperations boundValueOperations = redisTemplate.boundListOps(listKey); - return boundValueOperations.rightPop(); - } - - //=========BoundListOperations 用法 End============ - -} \ No newline at end of file diff --git a/src/main/java/com/subsidy/util/RenSheJuConstant.java b/src/main/java/com/subsidy/util/RenSheJuConstant.java deleted file mode 100644 index 8e16e6d..0000000 --- a/src/main/java/com/subsidy/util/RenSheJuConstant.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.subsidy.util; - -public class RenSheJuConstant { - - /** - * POST-2:班级基本信息信息采集接口 - */ - public static final String POST_3 = "POST3_班级基本信息"; - - /** - * POST-3:学时信息采集接口 - */ - public static final String POST_4 = "POST4_学时信息"; - - /** - * POST-4:考试信息采集接口 - */ - public static final String POST_5 = "POST5_考试信息"; - - /** - * POST-5:答疑辅导采集接口 - */ - public static final String POST_6 = "POST6_答疑辅导"; - - /** - * POST-6 班级活跃度/实名认证照片信息采集接口 - */ - public static final String POST_7 = "POST7_实名认证/活跃度"; - - /** - * POST-7 获取培训待绑定的(班级编号,项目编号)列表 - */ -// public static final String POST_7 = "POST_7_getClassCodeByPrivateKey"; - - /** - * POST-8 上下游班级数据绑定接口 - */ - public static final String POST_8 = "POST8_待绑定的班级"; - - /** - * POST-9 获取推送失败班级列表 - */ - public static final String POST_9 = "POST_9_getErrorClass"; - - /** - * POST-10 清除推送失败班级缓存 - */ - public static final String POST_10 = "POST_10_clear"; - - /** - * 调取失败 - */ - public static final String API_ERROR = "调取失败"; - - /** - * 当天没数据 - */ - public static final String NO_DATA = "NO_DATA"; - - /** - * 推送失败 - */ - public static final String PUSH_FAIL = "推送失败"; - - /** - * 推送成功 - */ - public static final String PUSH_SUCCESS = "推送成功"; -} diff --git a/src/main/java/com/subsidy/util/ResultMode.java b/src/main/java/com/subsidy/util/ResultMode.java deleted file mode 100644 index 91c758b..0000000 --- a/src/main/java/com/subsidy/util/ResultMode.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.subsidy.util; - -public class ResultMode { - - /** - * 成功:true,失败:false - */ - private boolean success; - - /** - * 返回编码 - */ - private int resultCode; - - /** - * 返回消息 - */ - private String msg; - - /** - * 结果数据 - */ - private Object data; - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public int getResultCode() { - return resultCode; - } - - public void setResultCode(int resultCode) { - this.resultCode = resultCode; - } - - public String getMsg() { - return msg; - } - - public void setMsg(String msg) { - this.msg = msg; - } - - public Object getData() { - return data; - } - - public void setData(Object data) { - this.data = data; - } -} diff --git a/src/main/java/com/subsidy/util/SMSUtils.java b/src/main/java/com/subsidy/util/SMSUtils.java deleted file mode 100644 index 1097f6b..0000000 --- a/src/main/java/com/subsidy/util/SMSUtils.java +++ /dev/null @@ -1,201 +0,0 @@ -package com.subsidy.util; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.aliyuncs.CommonRequest; -import com.aliyuncs.CommonResponse; -import com.aliyuncs.DefaultAcsClient; -import com.aliyuncs.IAcsClient; -import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; -import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; -import com.aliyuncs.http.MethodType; -import com.aliyuncs.profile.DefaultProfile; -import com.aliyuncs.profile.IClientProfile; -import com.subsidy.common.configure.AliyunSmsProperties; -import com.subsidy.common.exception.HttpException; -import net.sourceforge.pinyin4j.PinyinHelper; -import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; -import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; -import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; -import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.Map; - -/** - * 短信发送工具类 - */ - -@Component -public class SMSUtils { - - - - @Autowired - private AliyunSmsProperties aliyunSmsProperties; - - public SendSmsResponse send(String phone, String code) { - try { - System.setProperty("sun.net.client.defaultConnectTimeout", "10000"); - System.setProperty("sun.net.client.defaultReadTimeout", "10000"); - - //初始化acsClient,暂不支持region化 - IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", aliyunSmsProperties.getAccessKeyId(), aliyunSmsProperties.getAccessKeySecret()); - DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", aliyunSmsProperties.getProduct(), aliyunSmsProperties.getDomain()); - IAcsClient acsClient = new DefaultAcsClient(profile); - - //组装请求对象-具体描述见控制台-文档部分内容 - SendSmsRequest request = new SendSmsRequest(); - //必填:待发送手机号 - request.setPhoneNumbers(phone); - //必填:短信签名-可在短信控制台中找到 - request.setSignName("有课互联"); - //必填:短信模板-可在短信控制台中找到 - request.setTemplateCode("SMS_190945394"); - //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为 - request.setTemplateParam("{\"code\":\""+ code +"\"}"); - - //hint 此处可能会抛出异常,注意catch - SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request); - if(sendSmsResponse != null && sendSmsResponse.getCode().equals("OK")) { - return sendSmsResponse; - } - - throw new Exception(sendSmsResponse.getMessage()); - } catch (Exception e) { - e.printStackTrace(); - throw new HttpException(70011); - } - } - - - /** - * 发送验证码短信 - * - * @param templateId 短信模板id - * @param telephone 手机号 - * @return - */ - public static String sendVerifySMS(String templateId, String telephone, String param) { - DefaultProfile profile = DefaultProfile.getProfile(ConstantUtils.REGION_ID, ConstantUtils.ACCESS_KEY_ID, ConstantUtils.SECRET); - IAcsClient client = new DefaultAcsClient(profile); - - CommonRequest request = new CommonRequest(); - request.setSysMethod(MethodType.POST); - request.setSysDomain("dysmsapi.aliyuncs.com"); - request.setSysVersion("2017-05-25"); - request.setSysAction("SendSms"); - request.putQueryParameter("RegionId", ConstantUtils.REGION_ID); - request.putQueryParameter("PhoneNumbers", telephone); - request.putQueryParameter("SignName", ConstantUtils.VERIFY_NAME); - request.putQueryParameter("TemplateCode", templateId); -// if (StringUtils.isEmpty(param)){ -// request.putQueryParameter("TemplateParam","{ \"code\":\""+verifyCode +"\"}"); -// } - request.putQueryParameter("TemplateParam", param); - CommonResponse response = null; - try { - response = client.getCommonResponse(request); - return ConstantUtils.SUCCESS_SEND_OUT; - } catch (Exception e) { - e.printStackTrace(); - return ConstantUtils.FAIL_SEND_OUT; - } - } - - - public String sendWarning(String templateId,String telephone,String param){ - try { - System.setProperty("sun.net.client.defaultConnectTimeout", "10000"); - System.setProperty("sun.net.client.defaultReadTimeout", "10000"); - - //初始化acsClient,暂不支持region化 - IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", aliyunSmsProperties.getAccessKeyId(), aliyunSmsProperties.getAccessKeySecret()); - DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", aliyunSmsProperties.getProduct(), aliyunSmsProperties.getDomain()); - IAcsClient acsClient = new DefaultAcsClient(profile); - - //组装请求对象-具体描述见控制台-文档部分内容 - SendSmsRequest request = new SendSmsRequest(); - //必填:待发送手机号 - request.setPhoneNumbers(telephone); - //必填:短信签名-可在短信控制台中找到 - request.setSignName("有课互联科技"); - //必填:短信模板-可在短信控制台中找到 - request.setTemplateCode(templateId); - //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为 - request.setTemplateParam("{\"ids\":\""+ param +"\"}"); - - //hint 此处可能会抛出异常,注意catch - SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request); - if(sendSmsResponse != null && sendSmsResponse.getCode().equals("OK")) { - return ConstantUtils.SUCCESS_SEND_OUT; - } - - throw new Exception(sendSmsResponse.getMessage()); - } catch(Exception e) { - e.printStackTrace(); - return ConstantUtils.FAIL_SEND_OUT; - } - } - - /** - * 发送通知短信 - * @param templateId 短信模板id - * @param telephone 手机号 - * @return - */ - public static String sendNoticeSMS(String templateId,String telephone,String param){ - DefaultProfile profile = DefaultProfile.getProfile(ConstantUtils.REGION_ID, ConstantUtils.ACCESS_KEY_ID, ConstantUtils.SECRET); - IAcsClient client = new DefaultAcsClient(profile); - - CommonRequest request = new CommonRequest(); - request.setSysMethod(MethodType.POST); - request.setSysDomain("dysmsapi.aliyuncs.com"); - request.setSysVersion("2017-05-25"); - request.setSysAction("SendSms"); - request.putQueryParameter("RegionId",ConstantUtils.REGION_ID); - request.putQueryParameter("PhoneNumbers",telephone); - request.putQueryParameter("SignName",ConstantUtils.TECH_NAME); - request.putQueryParameter("TemplateCode",templateId); -// if (StringUtils.isEmpty(param)){ -// request.putQueryParameter("TemplateParam","{ \"code\":\""+verifyCode +"\"}"); -// } - request.putQueryParameter("TemplateParam",param); - CommonResponse response = null; - try { - response = client.getCommonResponse(request); - if(response != null) { - JSONObject data = JSON.parseObject(response.getData()); - if(data.get("Code").equals("OK")) { - return ConstantUtils.SUCCESS_SEND_OUT; - } - throw new HttpException(1000, data.get("Message").toString()); - } - return ConstantUtils.FAIL_SEND_OUT; - } catch(Exception e) { - e.printStackTrace(); - return ConstantUtils.FAIL_SEND_OUT; - } - } - - //public static void main(String[] args) { - // String param = "{ \"course\":\""+"语文课"+ "\",\"time\":\""+"2020-01-02" +"\",\"address\":\""+"上海市" +"\"}"; - // sendNoticeSMS("SMS_215336604","15201936167,18201963812",param); - //} - - public static void main(String[] args) throws BadHanyuPinyinOutputFormatCombination { - HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat(); - //拼音小写 - format.setCaseType(HanyuPinyinCaseType.LOWERCASE); - //不带声调 - format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); - - //format.setVCharType(); - //要转换的中文,格式,转换之后的拼音的分隔符,遇到不能转换的是否保留 wo,shi,zhong,guo,ren,,hello - System.out.println(PinyinHelper.toHanYuPinyinString("我是中国人", format, "", false)); - } - - - -} diff --git a/src/main/java/com/subsidy/util/SecretUtils.java b/src/main/java/com/subsidy/util/SecretUtils.java deleted file mode 100644 index 46e3976..0000000 --- a/src/main/java/com/subsidy/util/SecretUtils.java +++ /dev/null @@ -1,159 +0,0 @@ -package com.subsidy.util; - -import org.apache.commons.codec.digest.DigestUtils; -import org.apache.commons.lang3.StringUtils; - -import java.math.BigInteger; -import java.nio.charset.StandardCharsets; -import java.security.MessageDigest; -import java.util.Arrays; -import java.util.Random; -import java.util.UUID; - -public class SecretUtils { - - /** - * 对用户登录密码进行MD5加密 - * - * @param str - * @return - */ - - public static String getMD5String(String str) { - try { - // 生成一个MD5加密计算摘要 - return DigestUtils.md5Hex(str).toUpperCase(); - // MessageDigest md = MessageDigest.getInstance("MD5"); - // 计算md5函数 -// md.update(str.getBytes("utf-8")); - // digest()最后确定返回md5 hash值,返回值为8位字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符 - // BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值 - //一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方) -// byte[] digest = md.digest(str.getBytes("utf-8")); -// return new BigInteger(1, digest).toString(16); - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - /** - * 对字符串进行SHA加密 - * - * @param - */ - public static String getSHAString(String str) { - try { - MessageDigest sha = MessageDigest.getInstance("SHA-1"); - - byte[] byteArray = str.getBytes(StandardCharsets.UTF_8); - byte[] md5Bytes = sha.digest(byteArray); - StringBuffer hexValue = new StringBuffer(); - for (int i = 0; i < md5Bytes.length; i++) { - int val = ((int) md5Bytes[i]) & 0xff; - if (val < 16) { - hexValue.append("0"); - } - hexValue.append(Integer.toHexString(val)); - } - - return hexValue.toString(); - } catch (Exception e) { - return null; - } - - } - - /** - * Q学友SHA加密 - * @param arr - * @return - */ - public static String gen(String... arr) { - if (StringUtils.isAnyEmpty(arr)) { - throw new IllegalArgumentException("非法请求参数,有部分参数为空 : " + Arrays.toString(arr)); - } else { - Arrays.sort(arr); - StringBuilder sb = new StringBuilder(); - String[] var2 = arr; - int var3 = arr.length; - - for (int var4 = 0; var4 < var3; ++var4) { - String a = var2[var4]; - sb.append(a); - } - - return DigestUtils.sha1Hex(sb.toString()); - } - } - - public static String getNonce(int length) { - String val = ""; - Random random = new Random(); - //参数length,表示生成几位随机数 - for (int i = 0; i < length; i++) { - val += String.valueOf(random.nextInt(10)); - } - return val; - } - - private static byte[] md5(String s) - { - MessageDigest algorithm; - try - { - algorithm = MessageDigest.getInstance("MD5"); - algorithm.reset(); - algorithm.update(s.getBytes(StandardCharsets.UTF_8)); - byte[] messageDigest = algorithm.digest(); - return messageDigest; - } - catch (Exception e) - { - - } - return null; - } - - private static final String toHex(byte[] hash) - { - if (hash == null) - { - return null; - } - StringBuffer buf = new StringBuffer(hash.length * 2); - int i; - - for (i = 0; i < hash.length; i++) - { - if ((hash[i] & 0xff) < 0x10) - { - buf.append("0"); - } - buf.append(Long.toString(hash[i] & 0xff, 16)); - } - return buf.toString(); - } - - public static String hash(String s) - { - try - { - return new String(toHex(md5(s)).getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8); - } - catch (Exception e) - { - return s; - } - } - - - - - public static void main(String[] args) { - String uuid = UUID.randomUUID().toString(); - System.out.println(uuid.replace("-","")); -// System.out.println(hash(uuid+"ixihs")); -// System.out.println(System.currentTimeMillis()); - } -} \ No newline at end of file diff --git a/src/main/java/com/subsidy/util/ShehuihuaConstant.java b/src/main/java/com/subsidy/util/ShehuihuaConstant.java deleted file mode 100644 index 00797cb..0000000 --- a/src/main/java/com/subsidy/util/ShehuihuaConstant.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.subsidy.util; - -public class ShehuihuaConstant { - - - /** - * 获取培训正在进行中的(班级编号,项目编号)列表 - */ - public static final String POST_2 = "Shehuihua_2_getClassCodeByPrivateKey"; - - /** - * POST-3:班级基本信息信息采集接口 - */ - public static final String POST_3 = "Shehuihua_3_uploadClass"; - - /** - * POST-4:学时信息采集接口 - */ - public static final String POST_4 = "Shehuihua_4_classHourBehavior"; - - /** - * POST-5:考试信息采集接口 - */ - public static final String POST_5 = "Shehuihua_5_uploadChapterBehavior"; - - - /** - * POST-6:答疑辅导采集接口 - */ - public static final String POST_6 = "Shehuihua_6_uploadClassAnswerQuestionBehavior"; - - /** - * POST-7 班级活跃度/实名认证照片信息采集接口 - */ - public static final String POST_7 = "Shehuihua_7_import/downstream/social/uploadImage"; - - /** - * POST-8 获取推送失败班级列表 - */ - public static final String POST_8 = "Shehuihua_8_getErrorClass"; - - /** - * POST-9 清除推送失败班级缓存 - */ - public static final String POST_9 = "Shehuihua_9_clear"; - - /** - * 调取失败 - */ - public static final String API_ERROR = "调取失败"; - - /** - * 当天没数据 - */ - public static final String NO_DATA = "NO_DATA"; - - /** - * 推送失败 - */ - public static final String PUSH_FAIL = "推送失败"; - - /** - * 推送成功 - */ - public static final String PUSH_SUCCESS = "推送成功"; -} diff --git a/src/main/java/com/subsidy/util/Signature.java b/src/main/java/com/subsidy/util/Signature.java deleted file mode 100644 index c96dbbc..0000000 --- a/src/main/java/com/subsidy/util/Signature.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.subsidy.util; - -import sun.misc.BASE64Encoder; - -import javax.crypto.Mac; -import javax.crypto.spec.SecretKeySpec; -import java.nio.charset.StandardCharsets; - -/** - * @author: tuyp - * @create: 2020-07-29 12:42 - */ -public class Signature { - - private String secretId; - private String secretKey; - private long currentTime; - private int random; - private int signValidDuration; - private int classId; - - private static final String HMAC_ALGORITHM = "HmacSHA1"; - private static final String CONTENT_CHARSET = "UTF-8"; - - public static byte[] byteMerger(byte[] byte1, byte[] byte2) { - byte[] byte3 = new byte[byte1.length + byte2.length]; - System.arraycopy(byte1, 0, byte3, 0, byte1.length); - System.arraycopy(byte2, 0, byte3, byte1.length, byte2.length); - return byte3; - } - - public String getUploadSignature() throws Exception { - String strSign = ""; - String contextStr = ""; - - long endTime = (currentTime + signValidDuration); - contextStr += "secretId=" + java.net.URLEncoder.encode(secretId, "utf8"); - contextStr += "¤tTimeStamp=" + currentTime; - contextStr += "&expireTime=" + endTime; - contextStr += "&random=" + random; - contextStr += "&classId=" + classId; - - try { - Mac mac = Mac.getInstance(HMAC_ALGORITHM); - SecretKeySpec secretKey = new SecretKeySpec(this.secretKey.getBytes(CONTENT_CHARSET), mac.getAlgorithm()); - mac.init(secretKey); - - byte[] hash = mac.doFinal(contextStr.getBytes(CONTENT_CHARSET)); - byte[] sigBuf = byteMerger(hash, contextStr.getBytes(StandardCharsets.UTF_8)); - strSign = base64Encode(sigBuf); - strSign = strSign.replace(" ", "").replace("\n", "").replace("\r", ""); - } catch (Exception e) { - throw e; - } - return strSign; - } - - private String base64Encode(byte[] buffer) { - BASE64Encoder encoder = new BASE64Encoder(); - return encoder.encode(buffer); - } - - public void setSecretId(String secretId) { - this.secretId = secretId; - } - - public void setSecretKey(String secretKey) { - this.secretKey = secretKey; - } - - public void setCurrentTime(long currentTime) { - this.currentTime = currentTime; - } - - public void setRandom(int random) { - this.random = random; - } - - public void setSignValidDuration(int signValidDuration) { - this.signValidDuration = signValidDuration; - } - - public void setClassId(int classId){this.classId = classId;} - -} diff --git a/src/main/java/com/subsidy/util/TestMain.java b/src/main/java/com/subsidy/util/TestMain.java deleted file mode 100644 index 50f955c..0000000 --- a/src/main/java/com/subsidy/util/TestMain.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.subsidy.util; - -import org.apache.commons.codec.binary.Base64; - -import java.io.FileOutputStream; -import java.io.OutputStream; -import java.security.MessageDigest; -import java.util.Random; - -public class TestMain { - - - - /** - * 对字节数组字符串进行Base64解码并生成图片 - * @param imgStr 图片数据 - * @param imgFilePath 保存图片全路径地址 - * @return - */ - public static boolean generateImage(String imgStr,String imgFilePath){ - // - if (imgStr == null) //图像数据为空 - { - return false; - } - try - { - //Base64解码 - byte[] b = Base64.decodeBase64(imgStr); - for(int i=0;i { -// System.out.println("thread1"); -// }); -// Thread thread2 = new Thread(() -> { -// System.out.println("thread2"); -// }); -// Thread thread3 = new Thread(() -> { -// System.out.println("thread3"); -// }); -// thread1.start(); -// thread1.join(); -// thread2.start(); -// thread2.join(); -// thread3.start(); -// thread3.join(); - - } - - public static String encrypt(String string) { - - String encryptedString = string; - char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; - try { - byte[] btInput = string.getBytes(); - MessageDigest mdInst = MessageDigest.getInstance("MD5"); - mdInst.update(btInput); - byte[] md = mdInst.digest(); - int j = md.length; - char[] str = new char[j * 2]; - int k = 0; - for (int i = 0; i < j; i++) { - byte byte0 = md[i]; - str[k++] = hexDigits[byte0 >>> 4 & 0xf]; - str[k++] = hexDigits[byte0 & 0xf]; - } - encryptedString = new String(str); - return encryptedString; - } catch (Exception e) { - e.printStackTrace(); - return encryptedString; - } - } - - /** - * 获取随机字母数字组合 - * - * @param length - * 字符串长度 - * @return - */ - public static String getRandomCharAndNumr(Integer length) { - String str = ""; - Random random = new Random(); - for (int i = 0; i < length; i++) { - boolean b = random.nextBoolean(); - if (b) { // 字符串 - // int choice = random.nextBoolean() ? 65 : 97; 取得65大写字母还是97小写字母 - str += (char) (97 + random.nextInt(26));// 取得大写字母 - } else { // 数字 - str += String.valueOf(random.nextInt(10)); - } - } - return str; - } -} diff --git a/src/main/java/com/subsidy/util/VodUtil.java b/src/main/java/com/subsidy/util/VodUtil.java deleted file mode 100644 index bae5a62..0000000 --- a/src/main/java/com/subsidy/util/VodUtil.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.subsidy.util; - -import com.subsidy.common.configure.VODConfig; -import com.subsidy.common.exception.HttpException; -import com.tencentcloudapi.common.Credential; -import com.tencentcloudapi.common.exception.TencentCloudSDKException; -import com.tencentcloudapi.common.profile.ClientProfile; -import com.tencentcloudapi.common.profile.HttpProfile; -import com.tencentcloudapi.vod.v20180717.VodClient; -import com.tencentcloudapi.vod.v20180717.models.DeleteMediaRequest; -import com.tencentcloudapi.vod.v20180717.models.DescribeCDNUsageDataRequest; -import com.tencentcloudapi.vod.v20180717.models.DescribeCDNUsageDataResponse; -import com.tencentcloudapi.vod.v20180717.models.MediaProcessTaskInput; -import com.tencentcloudapi.vod.v20180717.models.ProcessMediaRequest; -import com.tencentcloudapi.vod.v20180717.models.ProcessMediaResponse; -import com.tencentcloudapi.vod.v20180717.models.StatDataItem; -import com.tencentcloudapi.vod.v20180717.models.TranscodeTaskInput; -import org.springframework.stereotype.Component; - -/** - *

- * 腾讯云 - 云点播API - *

- * - * @author DengMin - * @since 2022/8/1 - */ -@Component -public class VodUtil { - - private static String endpoint = "vod.tencentcloudapi.com"; - - /** - * 根据视频模版进行转码 - * @param vodCode - * @return - */ - public static ProcessMediaResponse processMedia(VODConfig vodConfig, String vodCode) { - try { - //上传后直接转码 - Credential cred = new Credential(vodConfig.getSecretId(), vodConfig.getSecretKey()); - HttpProfile httpProfile = new HttpProfile(); - httpProfile.setEndpoint(endpoint); - - ClientProfile clientProfile = new ClientProfile(); - clientProfile.setHttpProfile(httpProfile); - - VodClient client = new VodClient(cred, "", clientProfile); - - ProcessMediaRequest processMediaRequest = new ProcessMediaRequest(); - MediaProcessTaskInput mediaProcessTaskInput1 = new MediaProcessTaskInput(); - TranscodeTaskInput[] transcodeTaskInputs1 = new TranscodeTaskInput[1]; - TranscodeTaskInput transcodeTaskInput1 = new TranscodeTaskInput(); - transcodeTaskInput1.setDefinition(ConstantUtils.TEMPLATE_VOD); - transcodeTaskInputs1[0] = transcodeTaskInput1; - mediaProcessTaskInput1.setTranscodeTaskSet(transcodeTaskInputs1); - processMediaRequest.setMediaProcessTask(mediaProcessTaskInput1); - processMediaRequest.setFileId(vodCode); - return client.ProcessMedia(processMediaRequest); - } catch (Exception ex) { - ex.printStackTrace(); - throw new HttpException(50001); - } - } - - /** - * 删除腾讯云上原视频 - * @param vodCode - */ - public static void deleteMedia(VODConfig vodConfig, String vodCode) { - try { - //删除原视频 - Credential cred = new Credential(vodConfig.getSecretId(), vodConfig.getSecretKey()); - HttpProfile httpProfile = new HttpProfile(); - httpProfile.setEndpoint(endpoint); - - ClientProfile clientProfile = new ClientProfile(); - clientProfile.setHttpProfile(httpProfile); - - VodClient client = new VodClient(cred, "", clientProfile); - // 实例化一个请求对象,每个接口都会对应一个request对象 - DeleteMediaRequest req = new DeleteMediaRequest(); - req.setFileId(vodCode); - // 返回的resp是一个DeleteMediaResponse的实例,与请求对象对应 - client.DeleteMedia(req); - } catch (TencentCloudSDKException e) { - throw new HttpException(99999, e.getMessage()); - } - } - - /** - * 云点播域名的CDN统计数据 - * @param vodConfig - * @param DataType - * @param startTime - * @param endTime - * @return - */ - public static StatDataItem[] DescribeCDNStatDetails(VODConfig vodConfig, String DataType, String startTime, String endTime) { - try { - Credential cred = new Credential(vodConfig.getSecretId(), vodConfig.getSecretKey()); - // 实例化一个http选项,可选的,没有特殊需求可以跳过 - HttpProfile httpProfile = new HttpProfile(); - httpProfile.setEndpoint(endpoint); - // 实例化一个client选项,可选的,没有特殊需求可以跳过 - ClientProfile clientProfile = new ClientProfile(); - clientProfile.setHttpProfile(httpProfile); - // 实例化要请求产品的client对象,clientProfile是可选的 - VodClient client = new VodClient(cred, "", clientProfile); - // 实例化一个请求对象,每个接口都会对应一个request对象 - DescribeCDNUsageDataRequest req = new DescribeCDNUsageDataRequest(); - req.setStartTime(startTime); - req.setEndTime(endTime); - req.setDataType(DataType); - // 返回的resp是一个DescribeCDNUsageDataResponse的实例,与请求对象对应 - DescribeCDNUsageDataResponse resp = client.DescribeCDNUsageData(req); - // 返回的resp是一个DescribeCDNStatDetailsResponse的实例,与请求对象对应 - return resp.getData(); - } catch (TencentCloudSDKException e) { - e.printStackTrace(); - throw new HttpException(99999, e.getMessage()); - } - } -} diff --git a/src/main/java/com/subsidy/util/excel/ExcelColumn.java b/src/main/java/com/subsidy/util/excel/ExcelColumn.java deleted file mode 100644 index 4f76159..0000000 --- a/src/main/java/com/subsidy/util/excel/ExcelColumn.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.subsidy.util.excel; - - -import java.lang.annotation.*; - -@Target(ElementType.FIELD) -@Retention(RetentionPolicy.RUNTIME) -@Documented -public @interface ExcelColumn { - - String value() default ""; - - int col() default 1; -} diff --git a/src/main/java/com/subsidy/util/excel/ExcelColumnUtil.java b/src/main/java/com/subsidy/util/excel/ExcelColumnUtil.java deleted file mode 100644 index aa4e3ab..0000000 --- a/src/main/java/com/subsidy/util/excel/ExcelColumnUtil.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.subsidy.util.excel; - - -import java.lang.annotation.*; - -/** - *

- * excel 字段 - *

- * - * @author DengMin - * @date Created in 2020/08/28 - */ -@Target({ElementType.FIELD}) -@Retention(RetentionPolicy.RUNTIME) -@Documented -public @interface ExcelColumnUtil { - - String value() default ""; - - int col() default 0; -} diff --git a/src/main/java/com/subsidy/util/excel/ExcelUtil.java b/src/main/java/com/subsidy/util/excel/ExcelUtil.java deleted file mode 100644 index e46b335..0000000 --- a/src/main/java/com/subsidy/util/excel/ExcelUtil.java +++ /dev/null @@ -1,506 +0,0 @@ -package com.subsidy.util.excel; - -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.BooleanUtils; -import org.apache.commons.lang3.CharUtils; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.math.NumberUtils; -import org.apache.poi.hssf.usermodel.HSSFCellStyle; -import org.apache.poi.hssf.usermodel.HSSFDateUtil; -import org.apache.poi.hssf.usermodel.HSSFWorkbook; -import org.apache.poi.hssf.util.CellRangeAddress; -import org.apache.poi.ss.usermodel.*; -import org.apache.poi.xssf.streaming.SXSSFCell; -import org.apache.poi.xssf.streaming.SXSSFRow; -import org.apache.poi.xssf.streaming.SXSSFSheet; -import org.apache.poi.xssf.streaming.SXSSFWorkbook; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; -import org.springframework.web.multipart.MultipartFile; - -import javax.servlet.http.HttpServletResponse; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.math.BigDecimal; -import java.net.URLEncoder; -import java.util.*; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -/** - * Excel工具 - * - * @author DengMin - * @date 2019/08/27 13:57 - **/ -@Slf4j -public class ExcelUtil { - - private final static String EXCEL2003 = "xls"; - - private final static String EXCEL2007 = "xlsx"; - - /** - * 导入excel文件 - * - * @param cls - * @param file - * @param - * @return - */ - public static List readExcel(Class cls, MultipartFile file) { - String fileName = file.getOriginalFilename(); - if (!fileName.matches("^.+\\.(?i)(xls)$") && !fileName.matches("^.+\\.(?i)(xlsx)$")) { - log.info("上传文件格式不正确"); -// throw new HTTPException(10022); - } - - List dataList = new ArrayList<>(); - Workbook workbook = null; - try { - InputStream is = file.getInputStream(); - if (fileName.endsWith(EXCEL2007)) { - // FileInputStream is = new FileInputStream(new File(path)); - workbook = new XSSFWorkbook(is); - } - - if (fileName.endsWith(EXCEL2003)) { - // FileInputStream is = new FileInputStream(new File(path)); - workbook = new HSSFWorkbook(is); - } - - if (workbook != null) { - Map> classMap = new HashMap<>(); - List fields = Stream.of(cls.getDeclaredFields()).collect(Collectors.toList()); - fields.forEach(field -> { - ExcelColumnUtil annotation = field.getAnnotation(ExcelColumnUtil.class); - if (annotation != null) { - String value = annotation.value(); - if (StringUtils.isBlank(value)) { - return; - } - - if (!classMap.containsKey(value)) { - classMap.put(value, new ArrayList<>()); - } - - field.setAccessible(true); - classMap.get(value).add(field); - } - }); - //索引-->columns - Map> reflectionMap = new HashMap<>(); - //默认读取第一个sheet - Sheet sheet = workbook.getSheetAt(0); - - boolean firstRow = true; - for (int i = 0; i <= sheet.getLastRowNum(); i++) { - Row row = sheet.getRow(i); - //提取标题 - if (firstRow) { - for (int j = 0; j <= row.getLastCellNum(); j++) { - Cell cell = row.getCell(j); - String cellValue = getCellValue(cell); - if (classMap.containsKey(cellValue)) { - reflectionMap.put(j, classMap.get(cellValue)); - } - } - - firstRow = false; - } else { - //忽略空白行 - if (row == null) { - continue; - } - - try { - T t = cls.newInstance(); - //判断是否为空白行 - boolean allBlank = true; - for (int j = 0; j <= row.getLastCellNum(); j++) { - if (reflectionMap.containsKey(j)) { - Cell cell = row.getCell(j); - String cellValue = getCellValue(cell); - if (StringUtils.isNotBlank(cellValue)) { - allBlank = false; - } - List fieldList = reflectionMap.get(j); - fieldList.forEach(x -> { - try { - handleField(t, cellValue, x); - } catch (Exception e) { - e.printStackTrace(); - log.error(String.format("reflect field:%s value:%s exception!", x.getName(), cellValue), e); - } - }); - } - } - - if (!allBlank) { - dataList.add(t); - } - } catch (Exception e) { - e.printStackTrace(); - log.error(String.format("parse row:%s exception!", i), e); - } - } - } - } - } catch (Exception e) { - e.printStackTrace(); - log.error(String.format("parse excel exception!"), e); - } finally { - if (workbook != null) { - try { - workbook.close(); - } catch (Exception e) { - e.printStackTrace(); - log.error(String.format("parse excel exception!"), e); - } - } - } - return dataList; - } - - /** - * 导入excel文件 - * - * @param path - * @param cls - * @param file - * @param - * @return - */ - public static List readExcelWithoutTitle(String path, Class cls, MultipartFile file) { - String fileName = file.getOriginalFilename(); - if (!fileName.matches("^.+\\.(?i)(xls)$") && !fileName.matches("^.+\\.(?i)(xlsx)$")) { - log.info("上传文件格式不正确"); -// throw new HTTPException(10022); - } - - List dataList = new ArrayList<>(); - Workbook workbook = null; - try { - InputStream is = file.getInputStream(); - if (fileName.endsWith(EXCEL2007)) { - // FileInputStream is = new FileInputStream(new File(path)); - workbook = new XSSFWorkbook(is); - } - - if (fileName.endsWith(EXCEL2003)) { - // FileInputStream is = new FileInputStream(new File(path)); - workbook = new HSSFWorkbook(is); - } - - if (workbook != null) { - Map> classMap = new HashMap<>(); - List fields = Stream.of(cls.getDeclaredFields()).collect(Collectors.toList()); - fields.forEach(field -> { - ExcelColumnUtil annotation = field.getAnnotation(ExcelColumnUtil.class); - if (annotation != null) { - String value = annotation.value(); - if (StringUtils.isBlank(value)) { - return; - } - - if (!classMap.containsKey(value)) { - classMap.put(value, new ArrayList<>()); - } - - field.setAccessible(true); - classMap.get(value).add(field); - } - }); - //索引-->columns - Map> reflectionMap = new HashMap<>(); - //默认读取第一个sheet - Sheet sheet = workbook.getSheetAt(0); - - boolean firstRow = true; - for (int i = 1; i <= sheet.getLastRowNum(); i++) { - Row row = sheet.getRow(i); - //提取标题 - if (firstRow) { - for (int j = 0; j <= row.getLastCellNum(); j++) { - Cell cell = row.getCell(j); - String cellValue = getCellValue(cell); - if (classMap.containsKey(cellValue)) { - reflectionMap.put(j, classMap.get(cellValue)); - } - } - - firstRow = false; - } else { - //忽略空白行 - if (row == null) { - continue; - } - - try { - T t = cls.newInstance(); - //判断是否为空白行 - boolean allBlank = true; - for (int j = 0; j <= row.getLastCellNum(); j++) { - if (reflectionMap.containsKey(j)) { - Cell cell = row.getCell(j); - String cellValue = getCellValue(cell); - if (StringUtils.isNotBlank(cellValue)) { - allBlank = false; - } - List fieldList = reflectionMap.get(j); - fieldList.forEach(x -> { - try { - handleField(t, cellValue, x); - } catch (Exception e) { - e.printStackTrace(); - log.error(String.format("reflect field:%s value:%s exception!", x.getName(), cellValue), e); - } - }); - } - } - - if (!allBlank) { - dataList.add(t); - } - } catch (Exception e) { - e.printStackTrace(); - log.error(String.format("parse row:%s exception!", i), e); - } - } - } - } - } catch (Exception e) { - e.printStackTrace(); - log.error(String.format("parse excel exception!"), e); - } finally { - if (workbook != null) { - try { - workbook.close(); - } catch (Exception e) { - e.printStackTrace(); - log.error(String.format("parse excel exception!"), e); - } - } - } - return dataList; - } - - /** - * 导出excel文件 - * - * @param list - * @param cls - * @param - */ - public static void writeExcel(List list, Class cls) { - ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); - HttpServletResponse response = servletRequestAttributes.getResponse(); - Field[] fields = cls.getDeclaredFields(); - List fieldList = Arrays.stream(fields).filter(field -> { - ExcelColumn annotation = field.getAnnotation(ExcelColumn.class); - if (annotation != null) { - field.setAccessible(true); - return true; - } - return false; - }).sorted(Comparator.comparing(field -> { - int col = 0; - ExcelColumn annotation = field.getAnnotation(ExcelColumn.class); - if (annotation != null) { - col = annotation.col(); - } - return col; - })).collect(Collectors.toList()); - - Workbook wb = new XSSFWorkbook(); - Sheet sheet = wb.createSheet(); - AtomicInteger ai = new AtomicInteger(); - { - Row row = sheet.createRow(ai.getAndIncrement()); - AtomicInteger at = new AtomicInteger(); - fieldList.forEach(field -> { - ExcelColumn annotation = field.getAnnotation(ExcelColumn.class); - String columnName = ""; - if (annotation != null) { - columnName = annotation.value(); - } - Cell cell = row.createCell(at.getAndIncrement()); - CellStyle cellStyle = wb.createCellStyle(); - cellStyle.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex()); - Font font = wb.createFont(); - font.setBoldweight(Font.BOLDWEIGHT_BOLD); - cellStyle.setFont(font); - cell.setCellStyle(cellStyle); - cell.setCellValue(columnName); - }); - - if (list != null) { - list.forEach(data -> { - Row r = sheet.createRow(ai.getAndIncrement()); - AtomicInteger a = new AtomicInteger(); - fieldList.forEach(field -> { - try { - Class type = field.getType(); - Object value = field.get(data); - Cell cell = r.createCell(a.getAndIncrement()); - if (value != null) { - cell.setCellValue(value.toString()); - } - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - }); - }); - for (int i = 0; i < list.size(); i++) { - sheet.autoSizeColumn(i); - } - } - String fileName = String.valueOf(new Date().getTime()); - buildExcelDocument(fileName + "." + EXCEL2007, wb, response); - } - } - - - private static void setStyle(CellStyle cellStyle) { - // 水平居中 - cellStyle.setAlignment(CellStyle.ALIGN_CENTER); - // 垂直居中 - cellStyle.setVerticalAlignment(CellStyle.ALIGN_CENTER); - // 边框 - cellStyle.setBorderTop(CellStyle.BORDER_THIN); - // 边框 - cellStyle.setBorderLeft(CellStyle.BORDER_THIN); - // 边框 - cellStyle.setBorderRight(CellStyle.BORDER_THIN); - // 边框 - cellStyle.setBorderBottom(CellStyle.BORDER_THIN); - } - - //也可用以下方法 - public static void setBorderStyle(int border, CellRangeAddress region, SXSSFSheet sheet, SXSSFWorkbook wb) { - CellStyle cs = wb.createCellStyle(); // 样式对象 - cs.setBorderBottom((short) border); - cs.setBorderTop((short) border); - cs.setBorderLeft((short) border); - cs.setBorderRight((short) border); - - setRegionStyle(cs, region, sheet); - } - - private static void setRegionStyle(CellStyle cs, CellRangeAddress region, SXSSFSheet sheet) { - for (int i = region.getFirstRow(); i <= region.getLastRow(); i++) { - SXSSFRow row = sheet.getRow(i); - if (row == null) { - row = sheet.createRow(i); - } - for (int j = region.getFirstColumn(); j <= region.getLastColumn(); j++) { - SXSSFCell cell = row.getCell(j); - if (cell == null) { - cell = row.createCell(j); - cell.setCellValue(""); - } - cell.setCellStyle(cs); - } - } - } - - - private static void handleField(T t, String value, Field field) throws Exception { - Class type = field.getType(); - if (type == null || type == void.class || StringUtils.isBlank(value)) { - return; - } - if (type == Object.class) { - field.set(t, value); - //数字类型 - } else if (type.getSuperclass() == null || type.getSuperclass() == Number.class) { - if (type == int.class || type == Integer.class) { - field.set(t, NumberUtils.toInt(value)); - } else if (type == long.class || type == Long.class) { - field.set(t, NumberUtils.toLong(value)); - } else if (type == byte.class || type == Byte.class) { - field.set(t, NumberUtils.toByte(value)); - } else if (type == short.class || type == Short.class) { - field.set(t, NumberUtils.toShort(value)); - } else if (type == double.class || type == Double.class) { - field.set(t, NumberUtils.toDouble(value)); - } else if (type == float.class || type == Float.class) { - field.set(t, NumberUtils.toFloat(value)); - } else if (type == char.class || type == Character.class) { - field.set(t, CharUtils.toChar(value)); - } else if (type == boolean.class) { - field.set(t, BooleanUtils.toBoolean(value)); - } else if (type == BigDecimal.class) { - field.set(t, new BigDecimal(value)); - } - } else if (type == Boolean.class) { - field.set(t, BooleanUtils.toBoolean(value)); - } else if (type == Date.class) { - // - field.set(t, value); - } else if (type == String.class) { - field.set(t, value); - } else { - Constructor constructor = type.getConstructor(String.class); - field.set(t, constructor.newInstance(value)); - } - } - - private static String getCellValue(Cell cell) { - if (cell == null) { - return ""; - } - - if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) { - if (DateUtil.isCellDateFormatted(cell)) { - return HSSFDateUtil.getJavaDate(cell.getNumericCellValue()).toString(); - } else { - return new BigDecimal(cell.getNumericCellValue()).toString(); - } - } else if (cell.getCellType() == Cell.CELL_TYPE_STRING) { - return StringUtils.trimToEmpty(cell.getStringCellValue()); - } else if (cell.getCellType() == Cell.CELL_TYPE_FORMULA) { - return StringUtils.trimToEmpty(cell.getCellFormula()); - } else if (cell.getCellType() == Cell.CELL_TYPE_BLANK) { - return ""; - } else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) { - return String.valueOf(cell.getBooleanCellValue()); - } else if (cell.getCellType() == Cell.CELL_TYPE_ERROR) { - return "ERROR"; - } else { - return cell.toString().trim(); - } - } - - private static void buildExcelDocument(String fileName, Workbook wb, HttpServletResponse response) { - try { - response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); - response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8")); - response.flushBuffer(); - wb.write(response.getOutputStream()); - } catch (IOException e) { - log.error(String.format("downLoad excel exception"), e); - } - } - - private static void buildExcelFile(String path, Workbook wb) { - File file = new File(path); - if (file.exists()) { - file.delete(); - } - - try { - wb.write(new FileOutputStream(file)); - } catch (Exception e) { - log.error(String.format("downLoad excel exception"), e); - } - } - - -} diff --git a/src/main/java/com/subsidy/util/tree/Node.java b/src/main/java/com/subsidy/util/tree/Node.java deleted file mode 100644 index bf53d6e..0000000 --- a/src/main/java/com/subsidy/util/tree/Node.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.subsidy.util.tree; - -import lombok.Data; - -@Data -public class Node implements Comparable { - - //主键 - private String id; - - //同级节点第几个元素 - private String number; - - //1.1 - private String text; - - //父节点 - private String parentId; - - private int level; - - public Node(String id, String number, String parentId, int level) { - this.id = id; - this.number = number; - this.parentId = parentId; - this.level = level; - } - - @Override - public int compareTo(Node o) { - if (this.level != o.level) { - return o.level - this.level; - } else { - if(this.number==null){ - return -1; - } - return this.number.compareTo(o.number); - } - } - - -} diff --git a/src/main/java/com/subsidy/util/tree/NumberTree.java b/src/main/java/com/subsidy/util/tree/NumberTree.java deleted file mode 100644 index d051a9f..0000000 --- a/src/main/java/com/subsidy/util/tree/NumberTree.java +++ /dev/null @@ -1,212 +0,0 @@ -package com.subsidy.util.tree; - -import lombok.Data; - -import java.util.ArrayList; -import java.util.List; - -@Data -public class NumberTree { - - private String id; - - private List nodeList; - - private String separator; - - private int idSeq; - - private SerialNumber number; - - public NumberTree(String separator, SerialNumber number) { - init(); - this.separator = separator; - this.number = number; - - } - - public void init() { - idSeq = 1; - this.separator = "."; - if (this.nodeList == null) { - nodeList = new ArrayList(); - } - } - - - /** - *

功能描述:根据父节点获取所有子节点。

- */ - public List getChildNodes(Node pNode) { - String pId = pNode.getId(); - return getChildNodes(pId); - } - - /** - *

功能描述:根据父节点获取所有子节点。

- */ - public List getChildNodes(String pId) { - List childNodes = new ArrayList(); - for (Node n : nodeList) { - if (pId.equals(n.getParentId())) { - childNodes.add(n); - } - } - - return childNodes; - } - - /** - *

功能描述:获取本级值最大的节点。

- */ - public Node getMaxNodeForThisLevel(Node pNode) { - List childList = getChildNodes(pNode); - Node root = getRoot(nodeList); - if (childList.size() <= 0) { - return null; - } - Node maxNode = root; - for (Node node : childList) { - if (maxNode.getNumber().compareTo(node.getNumber()) < 0) { - maxNode = node; - } - } - return maxNode; - } - - /** - *

功能描述:生成下一个子节点。

- */ - public Node generateNextChildNode(Node node) { - Node newNode = null; - Node maxNode = getMaxNodeForThisLevel(node); - String nextNumber = number.firstNumber(); - int level = node.getLevel(); - if (maxNode != null && !"0".equals(maxNode.getId())) {//本级存在子节点,且非根节点 - nextNumber = number.produceNext(maxNode.getNumber()); - level = maxNode.getLevel(); - } - newNode = new Node(String.valueOf(++idSeq), nextNumber, node.getId(), level); - - generateNodeText(newNode, nextNumber); - - return newNode; - } - - - /** - * - *

功能描述:获取父节点。

- */ - public Node getParentNode(Node node) { - for (Node n : nodeList) { - if (node.getParentId() == n.getId()) { - return n; - } - } - return node; - } - - /** - *

功能描述:生成节点路径。

- */ - public void generateNodeText(Node node, String text) { - - if (node == null || "0".equals(node.getId())) { - return; - } - - Node pNode = getParentNode(node); - - if (!"0".equals(pNode.getId())) { - text = pNode.getText() + separator + text; - } - - node.setText(text); - } - - /** - *

功能描述:遍历所有树节点。

- */ - public void traverseNodeList(Node node) { - if(node==null){ - node = getRoot(nodeList); - } - List childNodes = getChildNodes(node); - System.out.println(node.getText()); - if (childNodes.size() > 0) { - for (Node n : childNodes) { - traverseNodeList(n); - } - } - } - public static void main(String[] args) { - SerialNumber number = new SerialNumber(); - NumberTree treeNode = new NumberTree(".", number); - - addSomeNodes(treeNode); - treeNode.traverseNodeList(null); - } - - /** - *

功能描述:获取根节点。

- */ - public Node getRoot(List nodeList) { - Node root = null; - if (nodeList.size() <= 0 || (root = getNodeById(nodeList, "0")) == null) { - root = createRoot(); - nodeList.add(root); - } - return root; - } - - private Node getNodeById(List nodeList, String id) { - Node node = null; - if(id!=null){ - for (Node n : nodeList) { - if (id.equals(n.getId())) { - node = n; - break; - } - } - } - return node; - } - - private Node createRoot() { - Node root = new Node("0", number.rootNumber(), "-1", 0); - root.setText("0"); - return root; - } - - /** - *

功能描述:测试添加节点。

- */ - private static Node addSomeNodes(NumberTree tree) { - Node root = tree.getRoot(tree.nodeList); - Node node1 = getNextNode(tree, root);//1 - Node node2 = getNextNode(tree, root);//2 - Node node3 = getNextNode(tree, root);//3 - Node node11 = getNextNode(tree, node1);//1.1 - Node node12 = getNextNode(tree, node1);//1.2 - Node node21 = getNextNode(tree, node2);//2.1 - Node node211 = getNextNode(tree, node21);//2.1.1 - Node node212 = getNextNode(tree, node21);//2.1.2 - Node node22 = getNextNode(tree, node2);//2.2 - Node node221 = getNextNode(tree, node22);//2.2.1 - Node node31 = getNextNode(tree, node3); - Node node32 = getNextNode(tree, node3); - Node node311 = getNextNode(tree, node31); - Node node3111 = getNextNode(tree, node311); - return root; - } - - public static Node getNextNode(NumberTree tree, Node pNode) { - Node node = tree.generateNextChildNode(pNode); - if (node != null) { - tree.nodeList.add(node); - } - return node; - } - -} diff --git a/src/main/java/com/subsidy/util/tree/SerialNumber.java b/src/main/java/com/subsidy/util/tree/SerialNumber.java deleted file mode 100644 index 02a5e31..0000000 --- a/src/main/java/com/subsidy/util/tree/SerialNumber.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.subsidy.util.tree; - -public class SerialNumber{ - - public String produceNext(String crrnt) { - - String next = "0"; - if (crrnt != null) { - try { - int crrntNum = Integer.parseInt(crrnt); - next = String.valueOf(crrntNum + 1); - } catch (Exception e) { - System.err.println("非数字类型的字符串!"); - } - } - return next; - } - - public String rootNumber() { - return "0"; - } - - public String firstNumber() { - return "1"; - } - - -} diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties index c3ae1b7..abc0d9e 100644 --- a/src/main/resources/application-dev.properties +++ b/src/main/resources/application-dev.properties @@ -1,5 +1,5 @@ # 本地环境配置 -spring.server.port=23509 +spring.server.port=23510 # 数据源配置 spring.datasource.url=jdbc:mysql://116.62.57.92:3306/subsidy_new?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8 diff --git a/src/main/resources/application-prod.properties b/src/main/resources/application-prod.properties index 59e6822..c16471f 100644 --- a/src/main/resources/application-prod.properties +++ b/src/main/resources/application-prod.properties @@ -1,8 +1,9 @@ # 生产环境配置 -spring.server.port=23509 +spring.server.port=23510 # 数据源配置 -spring.datasource.url=jdbc:mysql://rm-uf69w46mo6agw0ahao.mysql.rds.aliyuncs.com:3306/subsidy?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8 +#spring.datasource.url=jdbc:mysql://rm-uf69w46mo6agw0ahao.mysql.rds.aliyuncs.com:3306/subsidy?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8 +spring.datasource.url=jdbc:mysql://rm-uf62202s176hufw8x0o.mysql.rds.aliyuncs.com:3306/subsidy?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.username=ykadmin_new diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 9c541de..868c17d 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,5 +1,5 @@ # 环境配置 -spring.profiles.active=dev +spring.profiles.active=prod #和CPU数 spring.server.acceptorThreadCount=600 spring.server.minSpareThreads=100 diff --git a/src/main/resources/code.properties b/src/main/resources/code.properties index 2d8ca08..dba1d51 100644 --- a/src/main/resources/code.properties +++ b/src/main/resources/code.properties @@ -4,75 +4,11 @@ meishu.code-message[1010]=无效的令牌 meishu.code-message[1011]=当前账户已在其他设备登录 meishu.code-message[1012]=你已掉线,请重新登录 -meishu.code-message[10002]=该用户已存在 -meishu.code-message[10003]=该用户已存在,请直接登录 -meishu.code-message[10004]=验证码输入错误 -meishu.code-message[10005]=该用户未注册,请先注册 -meishu.code-message[10006]=该届赛事已存在 -meishu.code-message[10007]=不在上传时间范围内 -meishu.code-message[10008]=你已提交,不用再次提交 -meishu.code-message[10009]=管理员不存在 +meishu.code-message[10001]=该标签下仍有作品,无法删除 +meishu.code-message[10002]=已有此联系方式,请勿重复添加 +meishu.code-message[10003]=该手机号已存在 +meishu.code-message[10004]=验证码有误 -meishu.code-message[10010]=PDF下载失败 -meishu.code-message[10011]=发送失败,获取验证码频繁 -# 学生 -meishu.code-message[10020]=手机号已注册 -meishu.code-message[10025]=验证码已过期 -meishu.code-message[10021]=验证码不正确 -meishu.code-message[10022]=输入的手机号和接收验证码手机号不一致 -meishu.code-message[10023]=该身份证号已注册 -meishu.code-message[10024]=手机号未注册 -meishu.code-message[10026]=该账户已冻结 -meishu.code-message[10027]=密码不正确 -meishu.code-message[10028]=账号不存在 -# 项目 -meishu.code-message[10040]=项目已申请 -meishu.code-message[10041]=项目负责人已存在 -meishu.code-message[10042]=提交失败,您填写的项目信息不完整 -meishu.code-message[10043]=项目已提交,请等待项目审核 -meishu.code-message[10044]=撤回失败,您未申请项目 -meishu.code-message[10045]=撤回失败,您的项目已进入审批状态 -meishu.code-message[10046]=项目不存在 -meishu.code-message[10047]=请选择要分配的项目 -meishu.code-message[10048]=请选择要分配的评委 -meishu.code-message[10049]=项目信息不完整 -meishu.code-message[10050]=您不是该项目的评委 -meishu.code-message[10051]=项目评分已提交 -meishu.code-message[10052]=请先进行预评分 -meishu.code-message[10053]=评委已分配了该项目 -meishu.code-message[10054]=未指定赛事年份 -meishu.code-message[10055]=创建失败,尚未处于大赛规定的报名时间 -meishu.code-message[10056]=项目赛事已结束报名 -meishu.code-message[10057]=赛事暂未开放 -meishu.code-message[10058]=您已超过规定的项目上报数量 -meishu.code-message[10059]=撤回失败,评委已进行了项目评分 -meishu.code-message[10070]=撤回失败,评委不存在 -meishu.code-message[10071]=撤回失败,项目未分配该评委 -meishu.code-message[10072]=您已创建了类型的项目 -meishu.code-message[10073]=撤回失败,项目已评审 -meishu.code-message[10074]=不在评审时间内 -meishu.code-message[10075]=评审已开始,不能撤回评委 -meishu.code-message[10076]=请先设置评审起始时间 -meishu.code-message[10077]=提交失败,有信息尚未填写 -meishu.code-message[10078]=撤回失败,当前时间不在大赛时间段内 -meishu.code-message[10079]=指导老师手机号不能重复 -# 院校 -meishu.code-message[10060]=账户不存在 -meishu.code-message[10061]=密码错误 -meishu.code-message[10062]=账户已存在 -meishu.code-message[10063]=院校名称已存在 -meishu.code-message[10064]=学校代码已存在 -meishu.code-message[10065]=项目未分配评审 -meishu.code-message[10066]=上传文件为空 -meishu.code-message[10067]=系统已暂停登录功能 -meishu.code-message[10068]=成员不能是负责人 -meishu.code-message[10018]=不在大赛时间范围内 -meishu.code-message[10019]=最多只能添加1位学校领队 -meishu.code-message[10029]=最多只能添加9位观摩人员 -meishu.code-message[10030]=车牌号已存在 -meishu.code-message[10031]=不在申报时间范围内 -meishu.code-message[10032]=项目已淘汰 -meishu.code-message[10033]=该项目没预约时间,无法修改 -meishu.code-message[10034]=该时间段已被占用,请选择其他时间 -meishu.code-message[10035]=该时间内已有项目,无法删除 \ No newline at end of file +meishu.code-message[50005]=审批流还未创建 +meishu.code-message[50006]=昵称已存在 \ No newline at end of file diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml index 0006c90..e5a1141 100644 --- a/src/main/resources/logback-spring.xml +++ b/src/main/resources/logback-spring.xml @@ -47,8 +47,8 @@ - - + + @@ -57,15 +57,15 @@ - - + + - + diff --git a/src/main/resources/mapper/AcademyDictMapper.xml b/src/main/resources/mapper/AcademyDictMapper.xml new file mode 100644 index 0000000..64b6a54 --- /dev/null +++ b/src/main/resources/mapper/AcademyDictMapper.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + create_date, + update_date, + delete_date, + id, academy_name, short_name, location, academy_type, academy_code, academy_logo, teacher_logo, company_info_status, position_logo, show_logo + + + diff --git a/src/main/resources/mapper/AcademyPermissionMappingMapper.xml b/src/main/resources/mapper/AcademyPermissionMappingMapper.xml new file mode 100644 index 0000000..7fcef6b --- /dev/null +++ b/src/main/resources/mapper/AcademyPermissionMappingMapper.xml @@ -0,0 +1,21 @@ + + + + + + + diff --git a/src/main/resources/mapper/AcademyPlatformsMapper.xml b/src/main/resources/mapper/AcademyPlatformsMapper.xml new file mode 100644 index 0000000..7d7b78b --- /dev/null +++ b/src/main/resources/mapper/AcademyPlatformsMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + create_date, + update_date, + delete_date, + id, academy_id, platform_name, logo + + + diff --git a/src/main/resources/mapper/AcademyRoleDictMapper.xml b/src/main/resources/mapper/AcademyRoleDictMapper.xml new file mode 100644 index 0000000..109b40e --- /dev/null +++ b/src/main/resources/mapper/AcademyRoleDictMapper.xml @@ -0,0 +1,43 @@ + + + + + + + + + + diff --git a/src/main/resources/mapper/AdministerMapper.xml b/src/main/resources/mapper/AdministerMapper.xml index 3eecbc1..e5812e7 100644 --- a/src/main/resources/mapper/AdministerMapper.xml +++ b/src/main/resources/mapper/AdministerMapper.xml @@ -1,37 +1,20 @@ - + - - - - - - - - - - - - - - - - - - - - - - - + - - - create_date, - update_date, - delete_date, - id, telephone, account_name, password, company_id, labor_id, academy_id, college_id, user_name, img, status, role, last_role, remark, openid, work_no, first_login - + diff --git a/src/main/resources/mapper/MemberMapper.xml b/src/main/resources/mapper/MemberMapper.xml new file mode 100644 index 0000000..3213d89 --- /dev/null +++ b/src/main/resources/mapper/MemberMapper.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + diff --git a/src/main/resources/mapper/ShowBannersMapper.xml b/src/main/resources/mapper/ShowBannersMapper.xml new file mode 100644 index 0000000..1111f36 --- /dev/null +++ b/src/main/resources/mapper/ShowBannersMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + create_date, + update_date, + delete_date, + id, banner_url, show_flag + + + diff --git a/src/main/resources/mapper/ShowLabelDictMapper.xml b/src/main/resources/mapper/ShowLabelDictMapper.xml new file mode 100644 index 0000000..d6861fc --- /dev/null +++ b/src/main/resources/mapper/ShowLabelDictMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + create_date, + update_date, + delete_date, + id, label + + + diff --git a/src/main/resources/mapper/ShowMemberContactsMapper.xml b/src/main/resources/mapper/ShowMemberContactsMapper.xml new file mode 100644 index 0000000..4a0e2eb --- /dev/null +++ b/src/main/resources/mapper/ShowMemberContactsMapper.xml @@ -0,0 +1,32 @@ + + + + + + + + + diff --git a/src/main/resources/mapper/ShowWorkLabelsMapper.xml b/src/main/resources/mapper/ShowWorkLabelsMapper.xml new file mode 100644 index 0000000..844220b --- /dev/null +++ b/src/main/resources/mapper/ShowWorkLabelsMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + create_date, + update_date, + delete_date, + id, work_id, label_id + + + diff --git a/src/main/resources/mapper/ShowWorksMapper.xml b/src/main/resources/mapper/ShowWorksMapper.xml new file mode 100644 index 0000000..62c0c7c --- /dev/null +++ b/src/main/resources/mapper/ShowWorksMapper.xml @@ -0,0 +1,202 @@ + + + + + + update show_works t set t.home_page = #{homePage}, + t.works = #{works}, + t.submit_status = '待审核', + t.work_desc = #{workDesc}, + + t.new_status = #{newStatus}, + + t.submit_date = now() + + where t.id = #{id} + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/SmsVerifyCodeMapper.xml b/src/main/resources/mapper/SmsVerifyCodeMapper.xml new file mode 100644 index 0000000..d3fe9a3 --- /dev/null +++ b/src/main/resources/mapper/SmsVerifyCodeMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + create_date, + update_date, + delete_date, + id, telephone, verify_code + + + diff --git a/src/main/resources/mapper/WorkflowCopyToMapper.xml b/src/main/resources/mapper/WorkflowCopyToMapper.xml new file mode 100644 index 0000000..e83c651 --- /dev/null +++ b/src/main/resources/mapper/WorkflowCopyToMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + create_date, + update_date, + delete_date, + id, mapping_id, copy_type, copy_id, version_code + + + diff --git a/src/main/resources/mapper/WorkflowInstanceMapper.xml b/src/main/resources/mapper/WorkflowInstanceMapper.xml new file mode 100644 index 0000000..a56f9a8 --- /dev/null +++ b/src/main/resources/mapper/WorkflowInstanceMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + diff --git a/src/main/resources/mapper/WorkflowNodeMapper.xml b/src/main/resources/mapper/WorkflowNodeMapper.xml new file mode 100644 index 0000000..0f8ecf1 --- /dev/null +++ b/src/main/resources/mapper/WorkflowNodeMapper.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + create_date, + update_date, + delete_date, + id, workflow_id, version_code, node_key, node_name, node_type, node_pattern, approve_type, approve_config, prev_node, next_node + + + diff --git a/src/main/resources/mapper/WorkflowTaskMapper.xml b/src/main/resources/mapper/WorkflowTaskMapper.xml new file mode 100644 index 0000000..5ea37e2 --- /dev/null +++ b/src/main/resources/mapper/WorkflowTaskMapper.xml @@ -0,0 +1,96 @@ + + + + + + + UPDATE workflow_task t + SET t.STATUS = '已结束' + WHERE + t.instance_id = #{instanceId} + AND t.`status` = '待审核' + + + + UPDATE workflow_task t + SET t.current_work = 0 + WHERE + t.instance_id = #{instanceId} + + + + + + + + + + diff --git a/src/main/resources/mybatis-plus.properties b/src/main/resources/mybatis-plus.properties index 04844e3..d22960f 100644 --- a/src/main/resources/mybatis-plus.properties +++ b/src/main/resources/mybatis-plus.properties @@ -2,7 +2,7 @@ outputDir=/src/main/java author=Tuyp # 父的包名 -setParent=com.subsidy +setParent=com.show # mapper.xml文件生成路径 mapperPath=/src/main/resources/mapper/ # 数据库地址 diff --git a/target/classes/META-INF/spring-configuration-metadata.json b/target/classes/META-INF/spring-configuration-metadata.json deleted file mode 100644 index f82716b..0000000 --- a/target/classes/META-INF/spring-configuration-metadata.json +++ /dev/null @@ -1,207 +0,0 @@ -{ - "groups": [ - { - "name": "meishu", - "type": "com.subsidy.common.configure.RemoteProperties", - "sourceType": "com.subsidy.common.configure.RemoteProperties" - }, - { - "name": "polyv", - "type": "com.subsidy.common.configure.PolyvConfig", - "sourceType": "com.subsidy.common.configure.PolyvConfig" - }, - { - "name": "qxueyou", - "type": "com.subsidy.common.configure.QXueYouConfig", - "sourceType": "com.subsidy.common.configure.QXueYouConfig" - }, - { - "name": "renshe", - "type": "com.subsidy.common.configure.RenSheConfig", - "sourceType": "com.subsidy.common.configure.RenSheConfig" - }, - { - "name": "sms", - "type": "com.subsidy.common.configure.AliyunSmsProperties", - "sourceType": "com.subsidy.common.configure.AliyunSmsProperties" - }, - { - "name": "subsidy", - "type": "com.subsidy.common.configure.SubsidyConfig", - "sourceType": "com.subsidy.common.configure.SubsidyConfig" - }, - { - "name": "vod", - "type": "com.subsidy.common.configure.VODConfig", - "sourceType": "com.subsidy.common.configure.VODConfig" - }, - { - "name": "wechat", - "type": "com.subsidy.common.configure.WechatConfig", - "sourceType": "com.subsidy.common.configure.WechatConfig" - } - ], - "properties": [ - { - "name": "meishu.code-message", - "type": "java.util.Map", - "sourceType": "com.subsidy.common.configure.RemoteProperties" - }, - { - "name": "polyv.app-id", - "type": "java.lang.String", - "sourceType": "com.subsidy.common.configure.PolyvConfig" - }, - { - "name": "polyv.app-secret", - "type": "java.lang.String", - "sourceType": "com.subsidy.common.configure.PolyvConfig" - }, - { - "name": "polyv.secret-key", - "type": "java.lang.String", - "sourceType": "com.subsidy.common.configure.PolyvConfig" - }, - { - "name": "polyv.user-id", - "type": "java.lang.String", - "sourceType": "com.subsidy.common.configure.PolyvConfig" - }, - { - "name": "qxueyou.app-id", - "type": "java.lang.String", - "sourceType": "com.subsidy.common.configure.QXueYouConfig" - }, - { - "name": "qxueyou.security-key", - "type": "java.lang.String", - "sourceType": "com.subsidy.common.configure.QXueYouConfig" - }, - { - "name": "qxueyou.url", - "type": "java.lang.String", - "sourceType": "com.subsidy.common.configure.QXueYouConfig" - }, - { - "name": "renshe.putuo", - "type": "java.lang.String", - "sourceType": "com.subsidy.common.configure.RenSheConfig" - }, - { - "name": "renshe.secret-key", - "type": "java.lang.String", - "sourceType": "com.subsidy.common.configure.RenSheConfig" - }, - { - "name": "renshe.url", - "type": "java.lang.String", - "sourceType": "com.subsidy.common.configure.RenSheConfig" - }, - { - "name": "sms.access-key-id", - "type": "java.lang.String", - "sourceType": "com.subsidy.common.configure.AliyunSmsProperties" - }, - { - "name": "sms.access-key-secret", - "type": "java.lang.String", - "sourceType": "com.subsidy.common.configure.AliyunSmsProperties" - }, - { - "name": "sms.cpcode", - "type": "java.lang.String", - "sourceType": "com.subsidy.common.configure.AliyunSmsProperties" - }, - { - "name": "sms.domain", - "type": "java.lang.String", - "sourceType": "com.subsidy.common.configure.AliyunSmsProperties" - }, - { - "name": "sms.excode", - "type": "java.lang.String", - "sourceType": "com.subsidy.common.configure.AliyunSmsProperties" - }, - { - "name": "sms.key", - "type": "java.lang.String", - "sourceType": "com.subsidy.common.configure.AliyunSmsProperties" - }, - { - "name": "sms.product", - "type": "java.lang.String", - "sourceType": "com.subsidy.common.configure.AliyunSmsProperties" - }, - { - "name": "sms.rcsapi", - "type": "java.lang.String", - "sourceType": "com.subsidy.common.configure.AliyunSmsProperties" - }, - { - "name": "subsidy.app-id", - "type": "java.lang.String", - "sourceType": "com.subsidy.common.configure.SubsidyConfig" - }, - { - "name": "subsidy.security-key", - "type": "java.lang.String", - "sourceType": "com.subsidy.common.configure.SubsidyConfig" - }, - { - "name": "subsidy.url", - "type": "java.lang.String", - "sourceType": "com.subsidy.common.configure.SubsidyConfig" - }, - { - "name": "vod.api", - "type": "java.lang.String", - "sourceType": "com.subsidy.common.configure.VODConfig" - }, - { - "name": "vod.app-id", - "type": "java.lang.String", - "sourceType": "com.subsidy.common.configure.VODConfig" - }, - { - "name": "vod.class-id", - "type": "java.lang.Integer", - "sourceType": "com.subsidy.common.configure.VODConfig" - }, - { - "name": "vod.region", - "type": "java.lang.String", - "sourceType": "com.subsidy.common.configure.VODConfig" - }, - { - "name": "vod.secret-id", - "type": "java.lang.String", - "sourceType": "com.subsidy.common.configure.VODConfig" - }, - { - "name": "vod.secret-key", - "type": "java.lang.String", - "sourceType": "com.subsidy.common.configure.VODConfig" - }, - { - "name": "wechat.app-id", - "type": "java.lang.String", - "sourceType": "com.subsidy.common.configure.WechatConfig" - }, - { - "name": "wechat.app-secret", - "type": "java.lang.String", - "sourceType": "com.subsidy.common.configure.WechatConfig" - }, - { - "name": "wechat.msg-url", - "type": "java.lang.String", - "sourceType": "com.subsidy.common.configure.WechatConfig" - }, - { - "name": "wechat.template-id", - "type": "java.lang.String", - "sourceType": "com.subsidy.common.configure.WechatConfig" - } - ], - "hints": [] -} \ No newline at end of file diff --git a/target/classes/META-INF/subsidy.kotlin_module b/target/classes/META-INF/subsidy.kotlin_module deleted file mode 100644 index a49347a..0000000 Binary files a/target/classes/META-INF/subsidy.kotlin_module and /dev/null differ diff --git a/target/classes/application-dev.properties b/target/classes/application-dev.properties deleted file mode 100644 index c3ae1b7..0000000 --- a/target/classes/application-dev.properties +++ /dev/null @@ -1,65 +0,0 @@ -# 本地环境配置 -spring.server.port=23509 - -# 数据源配置 -spring.datasource.url=jdbc:mysql://116.62.57.92:3306/subsidy_new?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8 -#spring.datasource.url=jdbc:mysql://rm-uf6rab73w0qg843opxo.mysql.rds.aliyuncs.com:3306/subsidy_test?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8 -spring.datasource.type=com.alibaba.druid.pool.DruidDataSource -spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -spring.datasource.username=devloper -spring.datasource.password=dev@1553$ - -spring.datasource.druid.initialSize=5 -spring.datasource.druid.minIdle=5 -spring.datasource.druid.maxActive=200 -spring.datasource.druid.maxWait=60000 -spring.datasource.druid.timeBetweenEvictionRunsMillis=60000 -spring.datasource.druid.minEvictableIdleTimeMillis=300000 -spring.datasource.druid.validationQuery=SELECT 1 FROM DUAL -spring.datasource.druid.testWhileIdle=true -spring.datasource.druid.testOnBorrow=false -spring.datasource.druid.testOnReturn=false -spring.datasource.druid.poolPreparedStatements=true -spring.datasource.druid.maxPoolPreparedStatementPerConnectionSize=20 -spring.datasource.druid.useGlobalDataSourceStat=true - -# 控制台日志打印 -mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl - -#spring.redis.host=r-uf6meywj6ysuehg148pd.redis.rds.aliyuncs.com -#spring.redis.password=r-uf6meywj6ysuehg148:Ykhl@208 -#spring.redis.port=6379 -#spring.redis.lettuce.pool.max-idle=16 -#spring.redis.lettuce.pool.max-active=32 -#spring.redis.lettuce.pool.min-idle=8 - -#spring.application.name=spring-boot-mongodb -## mongodb -##spring.data.mongodb.uri=mongodb://47.97.19.66:27017/subsidy -#spring.data.mongodb.username=root -#spring.data.mongodb.password=123456 -##spring.data.mongodb.authentication-database=subsidy -#spring.data.mongodb.database=subsidy -#spring.data.mongodb.host=47.97.19.66 -#spring.data.mongodb.port=27017 - -spring.redis.host=47.97.19.66 -spring.redis.password=Ykhl@208 -spring.redis.port=6389 -spring.redis.lettuce.pool.max-idle=16 -spring.redis.lettuce.pool.max-active=32 -spring.redis.lettuce.pool.min-idle=8 - -qxueyou.appId=qxywz5nnWMI77CM3Tx -qxueyou.securityKey=626737T1-65K0-5xC2-0Y0V-2Aq95qxy -qxueyou.url=https://dev.qxueyou.com/auth/user/token - -renshe.url = https://test.shzypxy.com -renshe.secretKey = ad927f0b-6a39-43a7-bac7-163baef1fff7 -renshe.putuo = http://180.167.195.117:18015/ddproject - -#微信公众号 -wechat.appId=wx9e107b8f68c91a0c -wechat.appSecret=d772631f098ef7b597293c22899671e0 -wechat.msgUrl=t.youkehulian.cn -wechat.templateId=GzQw2jCqpDMviTRR4vpqBSQXti2GtO0LHeWiLCvxN9U \ No newline at end of file diff --git a/target/classes/application-prod.properties b/target/classes/application-prod.properties deleted file mode 100644 index 59e6822..0000000 --- a/target/classes/application-prod.properties +++ /dev/null @@ -1,32 +0,0 @@ -# 生产环境配置 -spring.server.port=23509 - -# 数据源配置 -spring.datasource.url=jdbc:mysql://rm-uf69w46mo6agw0ahao.mysql.rds.aliyuncs.com:3306/subsidy?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8 -spring.datasource.type=com.alibaba.druid.pool.DruidDataSource -spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -spring.datasource.username=ykadmin_new -spring.datasource.password=youkedb608@good - -spring.datasource.druid.initialSize=5 -spring.datasource.druid.minIdle=5 -spring.datasource.druid.maxActive=20 -spring.datasource.druid.maxWait=60000 -spring.datasource.druid.timeBetweenEvictionRunsMillis=60000 -spring.datasource.druid.minEvictableIdleTimeMillis=300000 -spring.datasource.druid.validationQuery=SELECT 1 FROM DUAL -spring.datasource.druid.testWhileIdle=true -spring.datasource.druid.testOnBorrow=false -spring.datasource.druid.testOnReturn=false -spring.datasource.druid.poolPreparedStatements=true -spring.datasource.druid.maxPoolPreparedStatementPerConnectionSize=20 -spring.datasource.druid.useGlobalDataSourceStat=true -spring.datasource.druid.kill-when-socket-read-timeout=true -# 控制台日志打印 -mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl - -wechat.appId=wx7ccddebb8917ac25 -wechat.appSecret=c0d0b367c80c47014ffabeff55081b6e -wechat.templateId=sP0Ycgtfie1g4Pfx0K8sjW9HZ9Xm-Tqq1ketofZWgQc -wechat.msgUrl=a.ykhl.com -wechat.miniprogram_state=formal diff --git a/target/classes/application.properties b/target/classes/application.properties deleted file mode 100644 index 9c541de..0000000 --- a/target/classes/application.properties +++ /dev/null @@ -1,61 +0,0 @@ -# 环境配置 -spring.profiles.active=dev -#和CPU数 -spring.server.acceptorThreadCount=600 -spring.server.minSpareThreads=100 -spring.server.maxSpareThreads=500 -spring.server.maxThreads=500 -spring.server.maxConnections=1000 -#10秒超时 -spring.server.connectionTimeout=20000 -spring.server.protocol=org.apache.coyote.http11.Http11AprProtocol -spring.server.redirectPort=8443 -spring.server.compression=on -#文件请求大小 -spring.server.MaxFileSize=300MB -spring.server.MaxRequestSize=500MB -spring.servlet.multipart.max-file-size=100MB -spring.servlet.multipart.max-request-size=50MB -# 文件编码 UTF8 -spring.mandatory-file-encoding=UTF-8 -spring.jackson.time-zone=GMT+8 -# 404 交给异常处理器处理 -spring.mvc.throw-exception-if-no-handler-found=true -# 关闭静态资源的映射 -spring.resources.add-mappings=false -# 关闭banner打印 -mybatis-plus.global-config.banner=false -# mybatis-plus相关配置 -mybatis-plus.mapper-locations=classpath:mapper/*.xml -# 是否开启自动驼峰命名规则映射 -mybatis-plus.configuration.map-underscore-to-camel-case=true -# 如果查询结果中包含空值的列,则 MyBatis 在映射的时候,不会映射这个字段 -mybatis-plus.configuration.call-setters-on-nulls=true -# 逻辑删除 -mybatis-plus.global-config.db-config.logic-delete-value=NOW() -mybatis-plus.global-config.db-config.logic-not-delete-value=NULL -#日志配置 -logging.config=classpath:logback-spring.xml -#ehcache缓存配置 -spring.cache.type=ehcache -spring.cache.ehcache.config=classpath:ehcache.xml -# 阿里云短信 -sms.product=Dysmsapi -sms.domain=dysmsapi.aliyuncs.com -sms.accessKeyId=LTAI5tLUBG4B6QxhHrhddc7p -sms.accessKeySecret=eber38QGHZixTQ6bFfrd80kbg67jIP -#wechat.app-id=wx7785293ff5e31f14 -#wechat.app-secret=25d57cad61fc1b45b3afa46d4c35e8f6 -#wechat.agentId=1000008 -vod.appId=1302252447 -vod.secretId=AKIDOcePHvZ2C5VeYHQGSO5aqtlNxJQLqfz2 -vod.secretKey=vjHYRmrfDbw0rWxA7oFcj7F8lDPKCm8E -vod.api=vod.tencentcloudapi.com -vod.region=ap-shanghai -vod.classId=848920 - -subsidy.appId=qxywz5nnWMI7ABCS -subsidy.securityKey=626737T1-65K0-5xC2-0Y0V-2Aq9QUAJ -subsidy.url=http://subsidy.youkehulian.cn/auth/user/token - - diff --git a/target/classes/code.properties b/target/classes/code.properties deleted file mode 100644 index 2d8ca08..0000000 --- a/target/classes/code.properties +++ /dev/null @@ -1,78 +0,0 @@ -meishu.code-message[0]=成功 - -meishu.code-message[1010]=无效的令牌 -meishu.code-message[1011]=当前账户已在其他设备登录 -meishu.code-message[1012]=你已掉线,请重新登录 - -meishu.code-message[10002]=该用户已存在 -meishu.code-message[10003]=该用户已存在,请直接登录 -meishu.code-message[10004]=验证码输入错误 -meishu.code-message[10005]=该用户未注册,请先注册 -meishu.code-message[10006]=该届赛事已存在 -meishu.code-message[10007]=不在上传时间范围内 -meishu.code-message[10008]=你已提交,不用再次提交 -meishu.code-message[10009]=管理员不存在 - -meishu.code-message[10010]=PDF下载失败 -meishu.code-message[10011]=发送失败,获取验证码频繁 -# 学生 -meishu.code-message[10020]=手机号已注册 -meishu.code-message[10025]=验证码已过期 -meishu.code-message[10021]=验证码不正确 -meishu.code-message[10022]=输入的手机号和接收验证码手机号不一致 -meishu.code-message[10023]=该身份证号已注册 -meishu.code-message[10024]=手机号未注册 -meishu.code-message[10026]=该账户已冻结 -meishu.code-message[10027]=密码不正确 -meishu.code-message[10028]=账号不存在 -# 项目 -meishu.code-message[10040]=项目已申请 -meishu.code-message[10041]=项目负责人已存在 -meishu.code-message[10042]=提交失败,您填写的项目信息不完整 -meishu.code-message[10043]=项目已提交,请等待项目审核 -meishu.code-message[10044]=撤回失败,您未申请项目 -meishu.code-message[10045]=撤回失败,您的项目已进入审批状态 -meishu.code-message[10046]=项目不存在 -meishu.code-message[10047]=请选择要分配的项目 -meishu.code-message[10048]=请选择要分配的评委 -meishu.code-message[10049]=项目信息不完整 -meishu.code-message[10050]=您不是该项目的评委 -meishu.code-message[10051]=项目评分已提交 -meishu.code-message[10052]=请先进行预评分 -meishu.code-message[10053]=评委已分配了该项目 -meishu.code-message[10054]=未指定赛事年份 -meishu.code-message[10055]=创建失败,尚未处于大赛规定的报名时间 -meishu.code-message[10056]=项目赛事已结束报名 -meishu.code-message[10057]=赛事暂未开放 -meishu.code-message[10058]=您已超过规定的项目上报数量 -meishu.code-message[10059]=撤回失败,评委已进行了项目评分 -meishu.code-message[10070]=撤回失败,评委不存在 -meishu.code-message[10071]=撤回失败,项目未分配该评委 -meishu.code-message[10072]=您已创建了类型的项目 -meishu.code-message[10073]=撤回失败,项目已评审 -meishu.code-message[10074]=不在评审时间内 -meishu.code-message[10075]=评审已开始,不能撤回评委 -meishu.code-message[10076]=请先设置评审起始时间 -meishu.code-message[10077]=提交失败,有信息尚未填写 -meishu.code-message[10078]=撤回失败,当前时间不在大赛时间段内 -meishu.code-message[10079]=指导老师手机号不能重复 -# 院校 -meishu.code-message[10060]=账户不存在 -meishu.code-message[10061]=密码错误 -meishu.code-message[10062]=账户已存在 -meishu.code-message[10063]=院校名称已存在 -meishu.code-message[10064]=学校代码已存在 -meishu.code-message[10065]=项目未分配评审 -meishu.code-message[10066]=上传文件为空 -meishu.code-message[10067]=系统已暂停登录功能 -meishu.code-message[10068]=成员不能是负责人 -meishu.code-message[10018]=不在大赛时间范围内 - -meishu.code-message[10019]=最多只能添加1位学校领队 -meishu.code-message[10029]=最多只能添加9位观摩人员 -meishu.code-message[10030]=车牌号已存在 -meishu.code-message[10031]=不在申报时间范围内 -meishu.code-message[10032]=项目已淘汰 -meishu.code-message[10033]=该项目没预约时间,无法修改 -meishu.code-message[10034]=该时间段已被占用,请选择其他时间 -meishu.code-message[10035]=该时间内已有项目,无法删除 \ No newline at end of file diff --git a/target/classes/com/subsidy/MeishuApplication.class b/target/classes/com/subsidy/MeishuApplication.class deleted file mode 100644 index 4f0c939..0000000 Binary files a/target/classes/com/subsidy/MeishuApplication.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/ResponseData.class b/target/classes/com/subsidy/common/ResponseData.class deleted file mode 100644 index 522c7a6..0000000 Binary files a/target/classes/com/subsidy/common/ResponseData.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/ResponseVO$ResponseVOBuilder.class b/target/classes/com/subsidy/common/ResponseVO$ResponseVOBuilder.class deleted file mode 100644 index e822f4a..0000000 Binary files a/target/classes/com/subsidy/common/ResponseVO$ResponseVOBuilder.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/ResponseVO.class b/target/classes/com/subsidy/common/ResponseVO.class deleted file mode 100644 index ae93279..0000000 Binary files a/target/classes/com/subsidy/common/ResponseVO.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/configure/AliyunSmsProperties.class b/target/classes/com/subsidy/common/configure/AliyunSmsProperties.class deleted file mode 100644 index e1932ec..0000000 Binary files a/target/classes/com/subsidy/common/configure/AliyunSmsProperties.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/configure/MyTomcat$GwsTomcatConnectionCustomizer.class b/target/classes/com/subsidy/common/configure/MyTomcat$GwsTomcatConnectionCustomizer.class deleted file mode 100644 index cf3bc30..0000000 Binary files a/target/classes/com/subsidy/common/configure/MyTomcat$GwsTomcatConnectionCustomizer.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/configure/MyTomcat.class b/target/classes/com/subsidy/common/configure/MyTomcat.class deleted file mode 100644 index 733cc83..0000000 Binary files a/target/classes/com/subsidy/common/configure/MyTomcat.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/configure/MybatisPlusConfig.class b/target/classes/com/subsidy/common/configure/MybatisPlusConfig.class deleted file mode 100644 index bd54fa0..0000000 Binary files a/target/classes/com/subsidy/common/configure/MybatisPlusConfig.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/configure/PolyvConfig.class b/target/classes/com/subsidy/common/configure/PolyvConfig.class deleted file mode 100644 index 2711b0f..0000000 Binary files a/target/classes/com/subsidy/common/configure/PolyvConfig.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/configure/QXueYouConfig.class b/target/classes/com/subsidy/common/configure/QXueYouConfig.class deleted file mode 100644 index d113eed..0000000 Binary files a/target/classes/com/subsidy/common/configure/QXueYouConfig.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/configure/RedisConfig.class b/target/classes/com/subsidy/common/configure/RedisConfig.class deleted file mode 100644 index 9e74e3c..0000000 Binary files a/target/classes/com/subsidy/common/configure/RedisConfig.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/configure/RemoteProperties.class b/target/classes/com/subsidy/common/configure/RemoteProperties.class deleted file mode 100644 index 5be7af1..0000000 Binary files a/target/classes/com/subsidy/common/configure/RemoteProperties.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/configure/RenSheConfig.class b/target/classes/com/subsidy/common/configure/RenSheConfig.class deleted file mode 100644 index d3b5c52..0000000 Binary files a/target/classes/com/subsidy/common/configure/RenSheConfig.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/configure/RestTemplateConfig$WxMappingJackson2HttpMessageConverter.class b/target/classes/com/subsidy/common/configure/RestTemplateConfig$WxMappingJackson2HttpMessageConverter.class deleted file mode 100644 index 1cad572..0000000 Binary files a/target/classes/com/subsidy/common/configure/RestTemplateConfig$WxMappingJackson2HttpMessageConverter.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/configure/RestTemplateConfig.class b/target/classes/com/subsidy/common/configure/RestTemplateConfig.class deleted file mode 100644 index 4c0c960..0000000 Binary files a/target/classes/com/subsidy/common/configure/RestTemplateConfig.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/configure/SubsidyConfig.class b/target/classes/com/subsidy/common/configure/SubsidyConfig.class deleted file mode 100644 index 1c514fe..0000000 Binary files a/target/classes/com/subsidy/common/configure/SubsidyConfig.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/configure/SwaggerConfig.class b/target/classes/com/subsidy/common/configure/SwaggerConfig.class deleted file mode 100644 index dc4ec39..0000000 Binary files a/target/classes/com/subsidy/common/configure/SwaggerConfig.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/configure/VODConfig.class b/target/classes/com/subsidy/common/configure/VODConfig.class deleted file mode 100644 index be9790a..0000000 Binary files a/target/classes/com/subsidy/common/configure/VODConfig.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/configure/WebConfig.class b/target/classes/com/subsidy/common/configure/WebConfig.class deleted file mode 100644 index 137d389..0000000 Binary files a/target/classes/com/subsidy/common/configure/WebConfig.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/configure/WebLogAspect.class b/target/classes/com/subsidy/common/configure/WebLogAspect.class deleted file mode 100644 index ff990db..0000000 Binary files a/target/classes/com/subsidy/common/configure/WebLogAspect.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/configure/WechatConfig.class b/target/classes/com/subsidy/common/configure/WechatConfig.class deleted file mode 100644 index f3e3ba3..0000000 Binary files a/target/classes/com/subsidy/common/configure/WechatConfig.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/constant/AttendanceConstant.class b/target/classes/com/subsidy/common/constant/AttendanceConstant.class deleted file mode 100644 index b9a5d91..0000000 Binary files a/target/classes/com/subsidy/common/constant/AttendanceConstant.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/constant/Code.class b/target/classes/com/subsidy/common/constant/Code.class deleted file mode 100644 index eba1935..0000000 Binary files a/target/classes/com/subsidy/common/constant/Code.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/constant/CourseNotification.class b/target/classes/com/subsidy/common/constant/CourseNotification.class deleted file mode 100644 index 5a6cc97..0000000 Binary files a/target/classes/com/subsidy/common/constant/CourseNotification.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/constant/MemberType.class b/target/classes/com/subsidy/common/constant/MemberType.class deleted file mode 100644 index 2867ca8..0000000 Binary files a/target/classes/com/subsidy/common/constant/MemberType.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/constant/Platform.class b/target/classes/com/subsidy/common/constant/Platform.class deleted file mode 100644 index 407e2b8..0000000 Binary files a/target/classes/com/subsidy/common/constant/Platform.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/constant/ProjectReview.class b/target/classes/com/subsidy/common/constant/ProjectReview.class deleted file mode 100644 index 050bdd8..0000000 Binary files a/target/classes/com/subsidy/common/constant/ProjectReview.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/constant/ProjectSchedule.class b/target/classes/com/subsidy/common/constant/ProjectSchedule.class deleted file mode 100644 index fa7662e..0000000 Binary files a/target/classes/com/subsidy/common/constant/ProjectSchedule.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/constant/ProjectStatus.class b/target/classes/com/subsidy/common/constant/ProjectStatus.class deleted file mode 100644 index 9c34111..0000000 Binary files a/target/classes/com/subsidy/common/constant/ProjectStatus.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/constant/ProjectTrack.class b/target/classes/com/subsidy/common/constant/ProjectTrack.class deleted file mode 100644 index 02aec0e..0000000 Binary files a/target/classes/com/subsidy/common/constant/ProjectTrack.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/constant/ProjectType.class b/target/classes/com/subsidy/common/constant/ProjectType.class deleted file mode 100644 index af0589c..0000000 Binary files a/target/classes/com/subsidy/common/constant/ProjectType.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/constant/Role.class b/target/classes/com/subsidy/common/constant/Role.class deleted file mode 100644 index 90ceb7c..0000000 Binary files a/target/classes/com/subsidy/common/constant/Role.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/constant/SMSTemplate.class b/target/classes/com/subsidy/common/constant/SMSTemplate.class deleted file mode 100644 index a530177..0000000 Binary files a/target/classes/com/subsidy/common/constant/SMSTemplate.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/constant/SmsCode.class b/target/classes/com/subsidy/common/constant/SmsCode.class deleted file mode 100644 index 13aa37b..0000000 Binary files a/target/classes/com/subsidy/common/constant/SmsCode.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/constant/VodConstant.class b/target/classes/com/subsidy/common/constant/VodConstant.class deleted file mode 100644 index 842305b..0000000 Binary files a/target/classes/com/subsidy/common/constant/VodConstant.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/constant/WxConstant.class b/target/classes/com/subsidy/common/constant/WxConstant.class deleted file mode 100644 index 2cd0238..0000000 Binary files a/target/classes/com/subsidy/common/constant/WxConstant.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/exception/GlobalExceptionHandler.class b/target/classes/com/subsidy/common/exception/GlobalExceptionHandler.class deleted file mode 100644 index 819e745..0000000 Binary files a/target/classes/com/subsidy/common/exception/GlobalExceptionHandler.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/exception/HttpException.class b/target/classes/com/subsidy/common/exception/HttpException.class deleted file mode 100644 index 34f28c9..0000000 Binary files a/target/classes/com/subsidy/common/exception/HttpException.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/handler/MetaHandler.class b/target/classes/com/subsidy/common/handler/MetaHandler.class deleted file mode 100644 index 4c735cf..0000000 Binary files a/target/classes/com/subsidy/common/handler/MetaHandler.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/interceptor/AuthenticationInterceptor.class b/target/classes/com/subsidy/common/interceptor/AuthenticationInterceptor.class deleted file mode 100644 index d9eaa40..0000000 Binary files a/target/classes/com/subsidy/common/interceptor/AuthenticationInterceptor.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/interceptor/LoginRequired.class b/target/classes/com/subsidy/common/interceptor/LoginRequired.class deleted file mode 100644 index ad87b6f..0000000 Binary files a/target/classes/com/subsidy/common/interceptor/LoginRequired.class and /dev/null differ diff --git a/target/classes/com/subsidy/common/interceptor/TimeRequired.class b/target/classes/com/subsidy/common/interceptor/TimeRequired.class deleted file mode 100644 index f8311fc..0000000 Binary files a/target/classes/com/subsidy/common/interceptor/TimeRequired.class and /dev/null differ diff --git a/target/classes/com/subsidy/controller/AdministerController.class b/target/classes/com/subsidy/controller/AdministerController.class deleted file mode 100644 index f9f01b8..0000000 Binary files a/target/classes/com/subsidy/controller/AdministerController.class and /dev/null differ diff --git a/target/classes/com/subsidy/mapper/AdministerMapper.class b/target/classes/com/subsidy/mapper/AdministerMapper.class deleted file mode 100644 index 956146a..0000000 Binary files a/target/classes/com/subsidy/mapper/AdministerMapper.class and /dev/null differ diff --git a/target/classes/com/subsidy/model/AdministerDO.class b/target/classes/com/subsidy/model/AdministerDO.class deleted file mode 100644 index 28bdbff..0000000 Binary files a/target/classes/com/subsidy/model/AdministerDO.class and /dev/null differ diff --git a/target/classes/com/subsidy/service/AdministerService.class b/target/classes/com/subsidy/service/AdministerService.class deleted file mode 100644 index 63f922c..0000000 Binary files a/target/classes/com/subsidy/service/AdministerService.class and /dev/null differ diff --git a/target/classes/com/subsidy/service/impl/AdministerServiceImpl.class b/target/classes/com/subsidy/service/impl/AdministerServiceImpl.class deleted file mode 100644 index 6552354..0000000 Binary files a/target/classes/com/subsidy/service/impl/AdministerServiceImpl.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/ActivityDetectionUtils.class b/target/classes/com/subsidy/util/ActivityDetectionUtils.class deleted file mode 100644 index bbb116c..0000000 Binary files a/target/classes/com/subsidy/util/ActivityDetectionUtils.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/AliyunSmsUtil.class b/target/classes/com/subsidy/util/AliyunSmsUtil.class deleted file mode 100644 index 2b3a692..0000000 Binary files a/target/classes/com/subsidy/util/AliyunSmsUtil.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/Base64Util.class b/target/classes/com/subsidy/util/Base64Util.class deleted file mode 100644 index f509e5e..0000000 Binary files a/target/classes/com/subsidy/util/Base64Util.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/BaseModel.class b/target/classes/com/subsidy/util/BaseModel.class deleted file mode 100644 index a39319e..0000000 Binary files a/target/classes/com/subsidy/util/BaseModel.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/CodeGenerator$1.class b/target/classes/com/subsidy/util/CodeGenerator$1.class deleted file mode 100644 index 3d01de4..0000000 Binary files a/target/classes/com/subsidy/util/CodeGenerator$1.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/CodeGenerator$2.class b/target/classes/com/subsidy/util/CodeGenerator$2.class deleted file mode 100644 index 515afaa..0000000 Binary files a/target/classes/com/subsidy/util/CodeGenerator$2.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/CodeGenerator.class b/target/classes/com/subsidy/util/CodeGenerator.class deleted file mode 100644 index 04d98f5..0000000 Binary files a/target/classes/com/subsidy/util/CodeGenerator.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/ConstantUtils.class b/target/classes/com/subsidy/util/ConstantUtils.class deleted file mode 100644 index daa7696..0000000 Binary files a/target/classes/com/subsidy/util/ConstantUtils.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/DateFormatUtil.class b/target/classes/com/subsidy/util/DateFormatUtil.class deleted file mode 100644 index 5eeaa8e..0000000 Binary files a/target/classes/com/subsidy/util/DateFormatUtil.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/DudaoConstant.class b/target/classes/com/subsidy/util/DudaoConstant.class deleted file mode 100644 index ffa1340..0000000 Binary files a/target/classes/com/subsidy/util/DudaoConstant.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/EhCacheUtil.class b/target/classes/com/subsidy/util/EhCacheUtil.class deleted file mode 100644 index 51ab06e..0000000 Binary files a/target/classes/com/subsidy/util/EhCacheUtil.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/EncryptString.class b/target/classes/com/subsidy/util/EncryptString.class deleted file mode 100644 index cffc1b2..0000000 Binary files a/target/classes/com/subsidy/util/EncryptString.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/ExcelFormatUtils.class b/target/classes/com/subsidy/util/ExcelFormatUtils.class deleted file mode 100644 index 2fea93d..0000000 Binary files a/target/classes/com/subsidy/util/ExcelFormatUtils.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/HttpUtil$1.class b/target/classes/com/subsidy/util/HttpUtil$1.class deleted file mode 100644 index 8b4b147..0000000 Binary files a/target/classes/com/subsidy/util/HttpUtil$1.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/HttpUtil$2.class b/target/classes/com/subsidy/util/HttpUtil$2.class deleted file mode 100644 index ebbcc43..0000000 Binary files a/target/classes/com/subsidy/util/HttpUtil$2.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/HttpUtil$3.class b/target/classes/com/subsidy/util/HttpUtil$3.class deleted file mode 100644 index f5cee6b..0000000 Binary files a/target/classes/com/subsidy/util/HttpUtil$3.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/HttpUtil$4.class b/target/classes/com/subsidy/util/HttpUtil$4.class deleted file mode 100644 index a30b377..0000000 Binary files a/target/classes/com/subsidy/util/HttpUtil$4.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/HttpUtil$DataParse.class b/target/classes/com/subsidy/util/HttpUtil$DataParse.class deleted file mode 100644 index 6a8ad07..0000000 Binary files a/target/classes/com/subsidy/util/HttpUtil$DataParse.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/HttpUtil.class b/target/classes/com/subsidy/util/HttpUtil.class deleted file mode 100644 index 25aa442..0000000 Binary files a/target/classes/com/subsidy/util/HttpUtil.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/IpAddressUtil.class b/target/classes/com/subsidy/util/IpAddressUtil.class deleted file mode 100644 index 58378eb..0000000 Binary files a/target/classes/com/subsidy/util/IpAddressUtil.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/JwtUtil.class b/target/classes/com/subsidy/util/JwtUtil.class deleted file mode 100644 index 05dbf93..0000000 Binary files a/target/classes/com/subsidy/util/JwtUtil.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/Localstorage.class b/target/classes/com/subsidy/util/Localstorage.class deleted file mode 100644 index bf95a66..0000000 Binary files a/target/classes/com/subsidy/util/Localstorage.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/MathUtil.class b/target/classes/com/subsidy/util/MathUtil.class deleted file mode 100644 index 2ca2d6a..0000000 Binary files a/target/classes/com/subsidy/util/MathUtil.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/MyBeanUtils.class b/target/classes/com/subsidy/util/MyBeanUtils.class deleted file mode 100644 index 71b19c1..0000000 Binary files a/target/classes/com/subsidy/util/MyBeanUtils.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/MyStringUtils.class b/target/classes/com/subsidy/util/MyStringUtils.class deleted file mode 100644 index 6dcae89..0000000 Binary files a/target/classes/com/subsidy/util/MyStringUtils.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/OSSUtils.class b/target/classes/com/subsidy/util/OSSUtils.class deleted file mode 100644 index 7fd1721..0000000 Binary files a/target/classes/com/subsidy/util/OSSUtils.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/PDFUtil.class b/target/classes/com/subsidy/util/PDFUtil.class deleted file mode 100644 index 6148709..0000000 Binary files a/target/classes/com/subsidy/util/PDFUtil.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/PageHelper.class b/target/classes/com/subsidy/util/PageHelper.class deleted file mode 100644 index f04693f..0000000 Binary files a/target/classes/com/subsidy/util/PageHelper.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/PolyvUtils.class b/target/classes/com/subsidy/util/PolyvUtils.class deleted file mode 100644 index 90df7ce..0000000 Binary files a/target/classes/com/subsidy/util/PolyvUtils.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/RandomUtil.class b/target/classes/com/subsidy/util/RandomUtil.class deleted file mode 100644 index 627b2fa..0000000 Binary files a/target/classes/com/subsidy/util/RandomUtil.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/RedisUtil.class b/target/classes/com/subsidy/util/RedisUtil.class deleted file mode 100644 index 0aa7ee1..0000000 Binary files a/target/classes/com/subsidy/util/RedisUtil.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/RenSheJuConstant.class b/target/classes/com/subsidy/util/RenSheJuConstant.class deleted file mode 100644 index dd7cf9b..0000000 Binary files a/target/classes/com/subsidy/util/RenSheJuConstant.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/ResultMode.class b/target/classes/com/subsidy/util/ResultMode.class deleted file mode 100644 index 1e45856..0000000 Binary files a/target/classes/com/subsidy/util/ResultMode.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/SMSUtils.class b/target/classes/com/subsidy/util/SMSUtils.class deleted file mode 100644 index b09f73b..0000000 Binary files a/target/classes/com/subsidy/util/SMSUtils.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/SecretUtils.class b/target/classes/com/subsidy/util/SecretUtils.class deleted file mode 100644 index 4a30ea0..0000000 Binary files a/target/classes/com/subsidy/util/SecretUtils.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/ShehuihuaConstant.class b/target/classes/com/subsidy/util/ShehuihuaConstant.class deleted file mode 100644 index 2ce1461..0000000 Binary files a/target/classes/com/subsidy/util/ShehuihuaConstant.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/Signature.class b/target/classes/com/subsidy/util/Signature.class deleted file mode 100644 index 12fbea2..0000000 Binary files a/target/classes/com/subsidy/util/Signature.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/TestMain.class b/target/classes/com/subsidy/util/TestMain.class deleted file mode 100644 index 56a3273..0000000 Binary files a/target/classes/com/subsidy/util/TestMain.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/VodUtil.class b/target/classes/com/subsidy/util/VodUtil.class deleted file mode 100644 index 7091afa..0000000 Binary files a/target/classes/com/subsidy/util/VodUtil.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/excel/ExcelColumn.class b/target/classes/com/subsidy/util/excel/ExcelColumn.class deleted file mode 100644 index 286e2ff..0000000 Binary files a/target/classes/com/subsidy/util/excel/ExcelColumn.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/excel/ExcelColumnUtil.class b/target/classes/com/subsidy/util/excel/ExcelColumnUtil.class deleted file mode 100644 index ab1fd30..0000000 Binary files a/target/classes/com/subsidy/util/excel/ExcelColumnUtil.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/excel/ExcelUtil.class b/target/classes/com/subsidy/util/excel/ExcelUtil.class deleted file mode 100644 index eb60abe..0000000 Binary files a/target/classes/com/subsidy/util/excel/ExcelUtil.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/tree/Node.class b/target/classes/com/subsidy/util/tree/Node.class deleted file mode 100644 index 8f73552..0000000 Binary files a/target/classes/com/subsidy/util/tree/Node.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/tree/NumberTree.class b/target/classes/com/subsidy/util/tree/NumberTree.class deleted file mode 100644 index 70fc55b..0000000 Binary files a/target/classes/com/subsidy/util/tree/NumberTree.class and /dev/null differ diff --git a/target/classes/com/subsidy/util/tree/SerialNumber.class b/target/classes/com/subsidy/util/tree/SerialNumber.class deleted file mode 100644 index ae044aa..0000000 Binary files a/target/classes/com/subsidy/util/tree/SerialNumber.class and /dev/null differ diff --git a/target/classes/ehcache.xml b/target/classes/ehcache.xml deleted file mode 100644 index 7a297bc..0000000 --- a/target/classes/ehcache.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/target/classes/logback-spring.xml b/target/classes/logback-spring.xml deleted file mode 100644 index 0006c90..0000000 --- a/target/classes/logback-spring.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - ${APP_NAME} - - - - - info - - - %d [%t] %5p %c:%L - %m%n - UTF-8 - - - - ${LOG_PATH}${APP_NAME}-info.log - - %d [%t] %5p %c:%L - %m%n - - - - 100MB - - ${LOG_PATH}${APP_NAME}/info/%d{yyyy-MM-dd}-%i.log.gz - - 30 - - - - ${LOG_PATH}${APP_NAME}-error.log - - error - - - %d [%t] %5p %c:%L - %m%n - - - - 256MB - - ${LOG_PATH}${APP_NAME}/error/%d{yyyy-MM-dd}-%i.log.gz - - 180 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/target/classes/mapper/AdministerMapper.xml b/target/classes/mapper/AdministerMapper.xml deleted file mode 100644 index 3eecbc1..0000000 --- a/target/classes/mapper/AdministerMapper.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - create_date, - update_date, - delete_date, - id, telephone, account_name, password, company_id, labor_id, academy_id, college_id, user_name, img, status, role, last_role, remark, openid, work_no, first_login - - - diff --git a/target/classes/mybatis-plus.properties b/target/classes/mybatis-plus.properties deleted file mode 100644 index 04844e3..0000000 --- a/target/classes/mybatis-plus.properties +++ /dev/null @@ -1,12 +0,0 @@ -# 此处为本项目src所在路径(代码生成器输出路径) -outputDir=/src/main/java -author=Tuyp -# 父的包名 -setParent=com.subsidy -# mapper.xml文件生成路径 -mapperPath=/src/main/resources/mapper/ -# 数据库地址 -url=jdbc:mysql://116.62.57.92:3306/subsidy_new?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false&allowMultiQueries=true&useAffectedRows=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true -driverName=com.mysql.cj.jdbc.Driver -userName=devloper -password=dev@1553$ \ No newline at end of file diff --git a/target/classes/mybatis.xml b/target/classes/mybatis.xml deleted file mode 100644 index f4495b4..0000000 --- a/target/classes/mybatis.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/target/classes/templates/controller.java.ftl b/target/classes/templates/controller.java.ftl deleted file mode 100644 index 28e7070..0000000 --- a/target/classes/templates/controller.java.ftl +++ /dev/null @@ -1,41 +0,0 @@ -package ${package.Controller}; - - -import org.springframework.web.bind.annotation.RequestMapping; - -<#if restControllerStyle> -import org.springframework.web.bind.annotation.RestController; -<#else> -import org.springframework.stereotype.Controller; - -<#if superControllerClassPackage??> -import ${superControllerClassPackage}; - -import io.swagger.annotations.Api; - -/** - *

- * ${table.comment!} 前端控制器 - *

- * - * @author ${author} - * @since ${date} - */ -<#if restControllerStyle> -@RestController -@Api(tags = "${table.comment!}") -<#else> -@Controller - -@RequestMapping("<#if package.ModuleName?? && package.ModuleName != "">/${package.ModuleName}/<#if controllerMappingHyphenStyle??>${controllerMappingHyphen}<#else>${table.entityPath}") -<#if kotlin> -class ${table.controllerName}<#if superControllerClass??> : ${superControllerClass}() -<#else> -<#if superControllerClass??> -public class ${table.controllerName} extends ${superControllerClass} { -<#else> -public class ${table.controllerName} { - - -} - diff --git a/target/classes/templates/entity.java.ftl b/target/classes/templates/entity.java.ftl deleted file mode 100644 index c63bcc4..0000000 --- a/target/classes/templates/entity.java.ftl +++ /dev/null @@ -1,156 +0,0 @@ -package ${package.Entity}; - -<#list table.importPackages as pkg> -import ${pkg}; - -<#if swagger2> -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; - -<#if entityLombokModel> -import lombok.Data; -import lombok.EqualsAndHashCode; - <#if chainModel> -import lombok.experimental.Accessors; - - - -/** - *

- * ${table.comment!} - *

- * - * @author ${author} - * @since ${date} - */ -<#if entityLombokModel> -@Data - <#if superEntityClass??> -@EqualsAndHashCode(callSuper = true) - <#else> -@EqualsAndHashCode(callSuper = false) - - <#if chainModel> -@Accessors(chain = true) - - -<#if table.convert> -@TableName("${table.name}") - -<#if swagger2> -@ApiModel(value="${entity}对象", description="${table.comment!}") - -<#if superEntityClass??> -public class ${entity} extends ${superEntityClass}<#if activeRecord><${entity}> { -<#elseif activeRecord> -public class ${entity} extends Model<${entity}> { -<#else> -public class ${entity} implements Serializable { - - -<#if entitySerialVersionUID> - private static final long serialVersionUID = 1L; - -<#-- ---------- BEGIN 字段循环遍历 ----------> -<#list table.fields as field> - <#if field.keyFlag> - <#assign keyPropertyName="${field.propertyName}"/> - - - <#if field.comment!?length gt 0> - <#if swagger2> - @ApiModelProperty(value = "${field.comment}") - <#else> - /** - * ${field.comment} - */ - - - <#if field.keyFlag> - <#-- 主键 --> - <#if field.keyIdentityFlag> - @TableId(value = "${field.annotationColumnName}", type = IdType.AUTO) - <#elseif idType??> - @TableId(value = "${field.annotationColumnName}", type = IdType.${idType}) - <#elseif field.convert> - @TableId("${field.annotationColumnName}") - - <#-- 普通字段 --> - <#elseif field.fill??> - <#-- ----- 存在字段填充设置 -----> - <#if field.convert> - @TableField(value = "${field.annotationColumnName}", fill = FieldFill.${field.fill}) - <#else> - @TableField(fill = FieldFill.${field.fill}) - - <#elseif field.convert> - @TableField("${field.annotationColumnName}") - - <#-- 乐观锁注解 --> - <#if (versionFieldName!"") == field.name> - @Version - - <#-- 逻辑删除注解 --> - <#if (logicDeleteFieldName!"") == field.name> - @TableLogic - - private ${field.propertyType} ${field.propertyName}; - -<#------------ END 字段循环遍历 ----------> - -<#if !entityLombokModel> - <#list table.fields as field> - <#if field.propertyType == "boolean"> - <#assign getprefix="is"/> - <#else> - <#assign getprefix="get"/> - - public ${field.propertyType} ${getprefix}${field.capitalName}() { - return ${field.propertyName}; - } - - <#if chainModel> - public ${entity} set${field.capitalName}(${field.propertyType} ${field.propertyName}) { - <#else> - public void set${field.capitalName}(${field.propertyType} ${field.propertyName}) { - - this.${field.propertyName} = ${field.propertyName}; - <#if chainModel> - return this; - - } - - - -<#if entityColumnConstant> - <#list table.fields as field> - public static final String ${field.name?upper_case} = "${field.name}"; - - - -<#if activeRecord> - @Override - protected Serializable pkVal() { - <#if keyPropertyName??> - return this.${keyPropertyName}; - <#else> - return null; - - } - - -<#if !entityLombokModel> - @Override - public String toString() { - return "${entity}{" + - <#list table.fields as field> - <#if field_index==0> - "${field.propertyName}=" + ${field.propertyName} + - <#else> - ", ${field.propertyName}=" + ${field.propertyName} + - - - "}"; - } - -} diff --git a/target/classes/templates/mapper.java.ftl b/target/classes/templates/mapper.java.ftl deleted file mode 100644 index be08c59..0000000 --- a/target/classes/templates/mapper.java.ftl +++ /dev/null @@ -1,22 +0,0 @@ -package ${package.Mapper}; - -import ${package.Entity}.${entity}; -import ${superMapperClassPackage}; -import org.springframework.stereotype.Repository; - -/** - *

- * ${table.comment!} Mapper 接口 - *

- * - * @author ${author} - * @since ${date} - */ -<#if kotlin> -interface ${table.mapperName} : ${superMapperClass}<${entity}> -<#else> - @Repository -public interface ${table.mapperName} extends ${superMapperClass}<${entity}> { - -} - diff --git a/target/classes/templates/mapper.xml.ftl b/target/classes/templates/mapper.xml.ftl deleted file mode 100644 index 04c2359..0000000 --- a/target/classes/templates/mapper.xml.ftl +++ /dev/null @@ -1,39 +0,0 @@ - - - - -<#if enableCache> - - - - -<#if baseResultMap> - - -<#list table.fields as field> -<#if field.keyFlag><#--生成主键排在第一位--> - - - -<#list table.commonFields as field><#--生成公共字段 --> - - -<#list table.fields as field> -<#if !field.keyFlag><#--生成普通字段 --> - - - - - - -<#if baseColumnList> - - -<#list table.commonFields as field> - ${field.columnName}, - - ${table.fieldNames} - - - - diff --git a/target/classes/templates/service.java.ftl b/target/classes/templates/service.java.ftl deleted file mode 100644 index e3232f3..0000000 --- a/target/classes/templates/service.java.ftl +++ /dev/null @@ -1,20 +0,0 @@ -package ${package.Service}; - -import ${package.Entity}.${entity}; -import ${superServiceClassPackage}; - -/** - *

- * ${table.comment!} 服务类 - *

- * - * @author ${author} - * @since ${date} - */ -<#if kotlin> -interface ${table.serviceName} : ${superServiceClass}<${entity}> -<#else> -public interface ${table.serviceName} extends ${superServiceClass}<${entity}> { - -} - diff --git a/target/classes/templates/serviceImpl.java.ftl b/target/classes/templates/serviceImpl.java.ftl deleted file mode 100644 index aeebd14..0000000 --- a/target/classes/templates/serviceImpl.java.ftl +++ /dev/null @@ -1,26 +0,0 @@ -package ${package.ServiceImpl}; - -import ${package.Entity}.${entity}; -import ${package.Mapper}.${table.mapperName}; -import ${package.Service}.${table.serviceName}; -import ${superServiceImplClassPackage}; -import org.springframework.stereotype.Service; - -/** - *

- * ${table.comment!} 服务实现类 - *

- * - * @author ${author} - * @since ${date} - */ -@Service -<#if kotlin> -open class ${table.serviceImplName} : ${superServiceImplClass}<${table.mapperName}, ${entity}>(), ${table.serviceName} { - -} -<#else> -public class ${table.serviceImplName} extends ${superServiceImplClass}<${table.mapperName}, ${entity}> implements ${table.serviceName} { - -} - diff --git a/target/ecnutracks.jar b/target/ecnutracks.jar deleted file mode 100644 index c7a9441..0000000 Binary files a/target/ecnutracks.jar and /dev/null differ diff --git a/target/ecnutracks.jar.original b/target/ecnutracks.jar.original deleted file mode 100644 index 44e86dd..0000000 Binary files a/target/ecnutracks.jar.original and /dev/null differ diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties deleted file mode 100644 index 25cf287..0000000 --- a/target/maven-archiver/pom.properties +++ /dev/null @@ -1,3 +0,0 @@ -version=0.0.1 -groupId=com.subsidy -artifactId=subsidy diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst deleted file mode 100644 index 5299906..0000000 --- a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ /dev/null @@ -1,236 +0,0 @@ -com\subsidy\util\BaseModel.class -com\subsidy\common\constant\CourseNotification.class -com\subsidy\dto\project\DataOverviewDTO.class -com\subsidy\service\CollegeFileService.class -com\subsidy\util\JwtUtil.class -com\subsidy\dto\project\ProjectCollegeListDTO.class -com\subsidy\util\HttpUtil$2.class -com\subsidy\service\impl\CollegesDictServiceImpl.class -com\subsidy\controller\MatchDictController.class -com\subsidy\model\PermissionsDO.class -com\subsidy\vo\project\ProjectPageVO.class -com\subsidy\controller\TeacherController.class -com\subsidy\mapper\ProjectMembersMapper.class -com\subsidy\controller\ProjectJudgeController.class -com\subsidy\common\configure\MyTomcat.class -com\subsidy\common\configure\RemoteProperties.class -com\subsidy\service\PermissionsService.class -com\subsidy\dto\project\TeamMemberDTO.class -com\subsidy\util\RandomUtil.class -com\subsidy\vo\judge\ProjectReviewVO.class -com\subsidy\vo\project\ProjectDataOverview.class -com\subsidy\dto\project\ExportTeachListVO.class -com\subsidy\service\impl\MatchDictServiceImpl.class -com\subsidy\util\Base64Util.class -com\subsidy\vo\college\ExportSchoolProjectSummaryVO.class -com\subsidy\service\MatchDictService.class -com\subsidy\util\ExcelFormatUtils.class -com\subsidy\dto\projectJudge\ImportJudge.class -com\subsidy\util\CodeGenerator.class -com\subsidy\vo\projectReviewPeriod\ProjectReviewPeriodVO.class -com\subsidy\dto\college\GetCollegesListDTO.class -com\subsidy\util\excel\ExcelUtil.class -com\subsidy\dto\project\UploadVodsDTO.class -com\subsidy\util\HttpUtil$DataParse.class -com\subsidy\model\SmsVerifyCodeDO.class -com\subsidy\vo\project\VocationalReviewNumVO.class -com\subsidy\dto\teacher\RegisterDTO.class -com\subsidy\util\CodeGenerator$2.class -com\subsidy\vo\review\ReMatchReviewVO.class -com\subsidy\mapper\ProjectMapper.class -com\subsidy\util\HttpUtil$1.class -com\subsidy\model\ProjectDO.class -com\subsidy\dto\project\EditStatusDTO.class -com\subsidy\util\MyBeanUtils.class -com\subsidy\dto\project\ExportProjectDTO.class -com\subsidy\util\Signature.class -com\subsidy\util\SMSUtils.class -com\subsidy\model\CollegeFileDO.class -com\subsidy\vo\college\RecentFileVO.class -com\subsidy\dto\review\ProjectReviewDTO.class -com\subsidy\dto\review\ProjectReviewScoreDTO.class -com\subsidy\common\constant\ProjectTrack.class -com\subsidy\vo\project\ProjectJudgeVO.class -com\subsidy\vo\project\UploadVodsVO.class -com\subsidy\service\impl\ProjectMembersServiceImpl.class -com\subsidy\vo\ExcelFieldVO.class -com\subsidy\model\ProjectJudgeDO.class -com\subsidy\dto\project\UpdateProjectDTO.class -com\subsidy\dto\project\MentorDTO.class -com\subsidy\service\ProjectService.class -com\subsidy\vo\project\VocationalNumVO.class -com\subsidy\common\configure\WebLogAspect.class -com\subsidy\controller\SmsVerifyCodeController.class -com\subsidy\controller\PermissionsController.class -com\subsidy\service\ProjectConsultService.class -com\subsidy\controller\AdministerController.class -com\subsidy\util\RenSheJuConstant.class -com\subsidy\common\configure\QXueYouConfig.class -com\subsidy\dto\oss\GetSecretVO.class -com\subsidy\util\MyStringUtils.class -com\subsidy\service\ProjectMembersService.class -com\subsidy\model\CollegesDictDO.class -com\subsidy\vo\college\CollegesVO.class -com\subsidy\mapper\AdministerMapper.class -com\subsidy\vo\oss\UploadFileVO.class -com\subsidy\util\ActivityDetectionUtils.class -com\subsidy\mapper\PermissionsMapper.class -com\subsidy\common\configure\WechatConfig.class -com\subsidy\vo\college\MatchCollegeVodsVO.class -com\subsidy\util\excel\ExcelColumnUtil.class -com\subsidy\util\HttpUtil.class -com\subsidy\model\ProjectReviewDO.class -com\subsidy\common\configure\SubsidyConfig.class -com\subsidy\vo\review\SchoolReviewVO.class -com\subsidy\vo\review\SendNoticeVO.class -com\subsidy\vo\project\RecentVodVO.class -com\subsidy\util\SecretUtils.class -com\subsidy\vo\project\ReviewListVO.class -com\subsidy\dto\period\ProjectReviewPeriodDTO.class -com\subsidy\common\configure\MyTomcat$GwsTomcatConnectionCustomizer.class -com\subsidy\controller\ProjectController.class -com\subsidy\util\tree\Node.class -com\subsidy\dto\judge\ProjectJudgePageDTO.class -com\subsidy\dto\project\GetSeedTrackMatchPageDTO.class -com\subsidy\mapper\TeacherMapper.class -com\subsidy\util\ResultMode.class -com\subsidy\controller\MessageController.class -com\subsidy\common\RedisPrefixConstant.class -com\subsidy\vo\project\ProjectAssignNumVO.class -com\subsidy\vo\project\SignatureVO.class -com\subsidy\common\constant\Code.class -com\subsidy\common\ResponseVO.class -com\subsidy\dto\review\ReviewScoreDTO.class -com\subsidy\vo\project\SeedTrackProjectPageVO.class -com\subsidy\service\AdministerService.class -com\subsidy\service\impl\MessageServiceImpl.class -com\subsidy\common\ResponseData.class -com\subsidy\MeishuApplication.class -com\subsidy\model\TeacherDO.class -com\subsidy\service\ProjectReviewService.class -com\subsidy\common\constant\ProjectSchedule.class -com\subsidy\mapper\CollegeFileMapper.class -com\subsidy\dto\administer\AdministerPageDTO.class -com\subsidy\vo\review\FinalsReviewVO.class -com\subsidy\common\constant\ProjectType.class -com\subsidy\service\impl\ProjectReviewPeriodServiceImpl.class -com\subsidy\mapper\ProjectReviewPeriodMapper.class -com\subsidy\util\excel\ExcelColumn.class -com\subsidy\common\configure\RestTemplateConfig.class -com\subsidy\dto\college\FileManagementDTO.class -com\subsidy\dto\review\CancelReviewDTO.class -com\subsidy\util\ConstantUtils.class -com\subsidy\dto\match\SelectListPageDTO.class -com\subsidy\service\impl\TeacherServiceImpl.class -com\subsidy\common\constant\VodConstant.class -com\subsidy\service\ProjectJudgeService.class -com\subsidy\mapper\ProjectConsultMapper.class -com\subsidy\dto\teacher\LoginVO.class -com\subsidy\mapper\MessageMapper.class -com\subsidy\common\constant\AttendanceConstant.class -com\subsidy\dto\project\SeedTrackProjectNumDTO.class -META-INF\spring-configuration-metadata.json -com\subsidy\common\constant\WxConstant.class -com\subsidy\service\impl\ProjectJudgeServiceImpl.class -com\subsidy\common\exception\HttpException.class -com\subsidy\util\PageHelper.class -com\subsidy\vo\administer\PermissionVO.class -com\subsidy\dto\review\ProjectReviewPageDTO.class -com\subsidy\common\configure\RestTemplateConfig$WxMappingJackson2HttpMessageConverter.class -com\subsidy\dto\review\SubmittedDTO.class -com\subsidy\model\ProjectReviewPeriodDO.class -com\subsidy\vo\college\FileManagementVO.class -com\subsidy\controller\ProjectReviewController.class -com\subsidy\common\configure\PolyvConfig.class -com\subsidy\util\DudaoConstant.class -com\subsidy\mapper\ProjectReviewMapper.class -com\subsidy\common\configure\MybatisPlusConfig.class -com\subsidy\controller\ProjectMembersController.class -com\subsidy\util\PDFUtil.class -com\subsidy\mapper\CollegesDictMapper.class -com\subsidy\common\exception\GlobalExceptionHandler.class -com\subsidy\dto\project\ProjectListPageDTO.class -com\subsidy\util\AliyunSmsUtil.class -com\subsidy\common\constant\MemberType.class -com\subsidy\vo\project\SeedTrackProjectDetailVO.class -com\subsidy\dto\project\MatchCollegeVodsDTO.class -com\subsidy\common\configure\RedisConfig.class -com\subsidy\vo\project\ProjectMemberVO.class -com\subsidy\model\AdministerDO.class -com\subsidy\vo\college\GetCollegeInfoVO.class -com\subsidy\common\constant\ProjectReview.class -com\subsidy\util\OSSUtils.class -com\subsidy\vo\project\OneProjectVO.class -com\subsidy\util\TestMain.class -com\subsidy\vo\college\CollegeInfoVO.class -com\subsidy\common\constant\Platform.class -com\subsidy\service\impl\ProjectConsultServiceImpl.class -com\subsidy\mapper\ProjectJudgeMapper.class -com\subsidy\mapper\SmsVerifyCodeMapper.class -com\subsidy\service\impl\AdministerServiceImpl.class -com\subsidy\service\impl\ProjectServiceImpl.class -com\subsidy\dto\review\SetReviewDTO.class -com\subsidy\common\constant\SmsCode.class -com\subsidy\controller\CollegesDictController.class -com\subsidy\service\impl\PermissionsServiceImpl.class -com\subsidy\dto\message\MessagePageDTO.class -com\subsidy\dto\project\VocationalProjectNum.class -com\subsidy\mapper\MatchDictMapper.class -com\subsidy\service\impl\CollegeFileServiceImpl.class -com\subsidy\service\SmsVerifyCodeService.class -com\subsidy\service\MessageService.class -com\subsidy\model\MessageDO.class -com\subsidy\common\configure\WebConfig.class -com\subsidy\controller\ProjectConsultController.class -com\subsidy\service\impl\SmsVerifyCodeServiceImpl.class -com\subsidy\dto\project\ExportConsultListVO.class -com\subsidy\service\CollegesDictService.class -com\subsidy\controller\OssController.class -com\subsidy\controller\ProjectReviewPeriodController.class -com\subsidy\common\configure\VODConfig.class -com\subsidy\common\interceptor\AuthenticationInterceptor.class -com\subsidy\vo\teacher\TeacherInfoVO.class -com\subsidy\model\MatchDictDO.class -com\subsidy\util\tree\NumberTree.class -com\subsidy\util\MathUtil.class -com\subsidy\util\PolyvUtils.class -com\subsidy\common\interceptor\LoginRequired.class -com\subsidy\util\IpAddressUtil.class -com\subsidy\dto\college\ExportCollegeDTO.class -com\subsidy\dto\project\GetVocationalProjectDetailDTO.class -com\subsidy\util\CodeGenerator$1.class -com\subsidy\common\constant\SMSTemplate.class -com\subsidy\common\ResponseVO$ResponseVOBuilder.class -com\subsidy\service\ProjectReviewPeriodService.class -com\subsidy\common\constant\Role.class -com\subsidy\vo\message\MessageVO.class -com\subsidy\model\ProjectMembersDO.class -com\subsidy\common\handler\MetaHandler.class -com\subsidy\dto\project\ReviewVocationalNumDTO.class -com\subsidy\util\EhCacheUtil.class -com\subsidy\util\ShehuihuaConstant.class -com\subsidy\dto\project\ApproveDTO.class -com\subsidy\util\EncryptString.class -com\subsidy\vo\administer\AdministerVO.class -com\subsidy\util\VodUtil.class -com\subsidy\common\constant\ProjectStatus.class -com\subsidy\dto\project\ReviewListDTO.class -com\subsidy\util\HttpUtil$4.class -com\subsidy\controller\CollegeFileController.class -com\subsidy\common\configure\AliyunSmsProperties.class -com\subsidy\dto\message\CreateMessageDTO.class -com\subsidy\util\DateFormatUtil.class -com\subsidy\vo\judge\ProjectJudgePageVO.class -com\subsidy\common\configure\RenSheConfig.class -com\subsidy\util\Localstorage.class -com\subsidy\vo\college\ExcelFieldVO.class -com\subsidy\model\ProjectConsultDO.class -com\subsidy\common\interceptor\TimeRequired.class -com\subsidy\util\tree\SerialNumber.class -com\subsidy\util\HttpUtil$3.class -com\subsidy\vo\judge\JudgeInfoVO.class -com\subsidy\vo\match\MatchDictVO.class -com\subsidy\service\TeacherService.class -com\subsidy\service\impl\ProjectReviewServiceImpl.class -com\subsidy\util\RedisUtil.class -com\subsidy\dto\administer\LoginDTO.class diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst deleted file mode 100644 index e8858fe..0000000 --- a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ /dev/null @@ -1,228 +0,0 @@ -D:\code\ecutrack\src\main\java\com\subsidy\common\configure\WebLogAspect.java -D:\code\ecutrack\src\main\java\com\subsidy\model\ProjectDO.java -D:\code\ecutrack\src\main\java\com\subsidy\util\OSSUtils.java -D:\code\ecutrack\src\main\java\com\subsidy\model\MessageDO.java -D:\code\ecutrack\src\main\java\com\subsidy\common\constant\ProjectSchedule.java -D:\code\ecutrack\src\main\java\com\subsidy\common\constant\ProjectType.java -D:\code\ecutrack\src\main\java\com\subsidy\controller\MatchDictController.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\review\ProjectReviewScoreDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\util\TestMain.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\match\SelectListPageDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\controller\ProjectReviewController.java -D:\code\ecutrack\src\main\java\com\subsidy\controller\ProjectMembersController.java -D:\code\ecutrack\src\main\java\com\subsidy\model\ProjectReviewDO.java -D:\code\ecutrack\src\main\java\com\subsidy\util\SecretUtils.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\administer\AdministerPageDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\mapper\CollegesDictMapper.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\judge\ProjectJudgePageDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\util\Localstorage.java -D:\code\ecutrack\src\main\java\com\subsidy\common\interceptor\AuthenticationInterceptor.java -D:\code\ecutrack\src\main\java\com\subsidy\common\constant\Role.java -D:\code\ecutrack\src\main\java\com\subsidy\common\interceptor\LoginRequired.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\project\ExportProjectDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\model\CollegesDictDO.java -D:\code\ecutrack\src\main\java\com\subsidy\service\SmsVerifyCodeService.java -D:\code\ecutrack\src\main\java\com\subsidy\util\PDFUtil.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\administer\PermissionVO.java -D:\code\ecutrack\src\main\java\com\subsidy\common\constant\Code.java -D:\code\ecutrack\src\main\java\com\subsidy\util\IpAddressUtil.java -D:\code\ecutrack\src\main\java\com\subsidy\model\MatchDictDO.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\judge\JudgeInfoVO.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\college\FileManagementVO.java -D:\code\ecutrack\src\main\java\com\subsidy\common\constant\ProjectTrack.java -D:\code\ecutrack\src\main\java\com\subsidy\mapper\CollegeFileMapper.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\teacher\LoginVO.java -D:\code\ecutrack\src\main\java\com\subsidy\service\ProjectConsultService.java -D:\code\ecutrack\src\main\java\com\subsidy\controller\ProjectJudgeController.java -D:\code\ecutrack\src\main\java\com\subsidy\service\impl\CollegeFileServiceImpl.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\project\ProjectAssignNumVO.java -D:\code\ecutrack\src\main\java\com\subsidy\common\configure\RenSheConfig.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\project\VocationalReviewNumVO.java -D:\code\ecutrack\src\main\java\com\subsidy\util\excel\ExcelColumn.java -D:\code\ecutrack\src\main\java\com\subsidy\service\impl\ProjectServiceImpl.java -D:\code\ecutrack\src\main\java\com\subsidy\util\AliyunSmsUtil.java -D:\code\ecutrack\src\main\java\com\subsidy\controller\ProjectReviewPeriodController.java -D:\code\ecutrack\src\main\java\com\subsidy\service\impl\TeacherServiceImpl.java -D:\code\ecutrack\src\main\java\com\subsidy\mapper\MatchDictMapper.java -D:\code\ecutrack\src\main\java\com\subsidy\util\VodUtil.java -D:\code\ecutrack\src\main\java\com\subsidy\util\MyStringUtils.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\teacher\RegisterDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\college\MatchCollegeVodsVO.java -D:\code\ecutrack\src\main\java\com\subsidy\service\impl\CollegesDictServiceImpl.java -D:\code\ecutrack\src\main\java\com\subsidy\util\BaseModel.java -D:\code\ecutrack\src\main\java\com\subsidy\util\SMSUtils.java -D:\code\ecutrack\src\main\java\com\subsidy\service\ProjectReviewPeriodService.java -D:\code\ecutrack\src\main\java\com\subsidy\service\impl\ProjectConsultServiceImpl.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\review\SubmittedDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\util\RedisUtil.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\review\SetReviewDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\project\SignatureVO.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\review\SendNoticeVO.java -D:\code\ecutrack\src\main\java\com\subsidy\util\Signature.java -D:\code\ecutrack\src\main\java\com\subsidy\MeishuApplication.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\teacher\TeacherInfoVO.java -D:\code\ecutrack\src\main\java\com\subsidy\common\constant\ProjectStatus.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\projectReviewPeriod\ProjectReviewPeriodVO.java -D:\code\ecutrack\src\main\java\com\subsidy\service\impl\MatchDictServiceImpl.java -D:\code\ecutrack\src\main\java\com\subsidy\util\PolyvUtils.java -D:\code\ecutrack\src\main\java\com\subsidy\util\HttpUtil.java -D:\code\ecutrack\src\main\java\com\subsidy\common\configure\MybatisPlusConfig.java -D:\code\ecutrack\src\main\java\com\subsidy\service\impl\SmsVerifyCodeServiceImpl.java -D:\code\ecutrack\src\main\java\com\subsidy\controller\AdministerController.java -D:\code\ecutrack\src\main\java\com\subsidy\util\tree\Node.java -D:\code\ecutrack\src\main\java\com\subsidy\util\ResultMode.java -D:\code\ecutrack\src\main\java\com\subsidy\service\ProjectJudgeService.java -D:\code\ecutrack\src\main\java\com\subsidy\service\PermissionsService.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\college\CollegeInfoVO.java -D:\code\ecutrack\src\main\java\com\subsidy\util\excel\ExcelUtil.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\review\ProjectReviewDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\service\impl\PermissionsServiceImpl.java -D:\code\ecutrack\src\main\java\com\subsidy\service\impl\ProjectReviewPeriodServiceImpl.java -D:\code\ecutrack\src\main\java\com\subsidy\util\DudaoConstant.java -D:\code\ecutrack\src\main\java\com\subsidy\controller\PermissionsController.java -D:\code\ecutrack\src\main\java\com\subsidy\service\ProjectMembersService.java -D:\code\ecutrack\src\main\java\com\subsidy\common\handler\MetaHandler.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\college\GetCollegesListDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\util\ActivityDetectionUtils.java -D:\code\ecutrack\src\main\java\com\subsidy\common\exception\HttpException.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\college\FileManagementDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\util\ShehuihuaConstant.java -D:\code\ecutrack\src\main\java\com\subsidy\mapper\PermissionsMapper.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\project\ExportTeachListVO.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\project\ExportConsultListVO.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\message\MessageVO.java -D:\code\ecutrack\src\main\java\com\subsidy\service\CollegesDictService.java -D:\code\ecutrack\src\main\java\com\subsidy\common\constant\ProjectReview.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\projectJudge\ImportJudge.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\judge\ProjectReviewVO.java -D:\code\ecutrack\src\main\java\com\subsidy\common\configure\SubsidyConfig.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\review\ReMatchReviewVO.java -D:\code\ecutrack\src\main\java\com\subsidy\service\ProjectReviewService.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\college\ExcelFieldVO.java -D:\code\ecutrack\src\main\java\com\subsidy\common\constant\SmsCode.java -D:\code\ecutrack\src\main\java\com\subsidy\model\PermissionsDO.java -D:\code\ecutrack\src\main\java\com\subsidy\util\CodeGenerator.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\project\DataOverviewDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\util\PageHelper.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\college\RecentFileVO.java -D:\code\ecutrack\src\main\java\com\subsidy\controller\CollegeFileController.java -D:\code\ecutrack\src\main\java\com\subsidy\common\configure\RestTemplateConfig.java -D:\code\ecutrack\src\main\java\com\subsidy\common\constant\AttendanceConstant.java -D:\code\ecutrack\src\main\java\com\subsidy\controller\OssController.java -D:\code\ecutrack\src\main\java\com\subsidy\mapper\ProjectReviewMapper.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\project\SeedTrackProjectNumDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\mapper\TeacherMapper.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\review\CancelReviewDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\college\ExportSchoolProjectSummaryVO.java -D:\code\ecutrack\src\main\java\com\subsidy\common\configure\SwaggerConfig.java -D:\code\ecutrack\src\main\java\com\subsidy\util\RandomUtil.java -D:\code\ecutrack\src\main\java\com\subsidy\common\configure\QXueYouConfig.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\college\ExportCollegeDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\project\VocationalProjectNum.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\administer\LoginDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\message\CreateMessageDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\common\exception\GlobalExceptionHandler.java -D:\code\ecutrack\src\main\java\com\subsidy\common\constant\SMSTemplate.java -D:\code\ecutrack\src\main\java\com\subsidy\mapper\ProjectMembersMapper.java -D:\code\ecutrack\src\main\java\com\subsidy\common\constant\Platform.java -D:\code\ecutrack\src\main\java\com\subsidy\common\interceptor\TimeRequired.java -D:\code\ecutrack\src\main\java\com\subsidy\controller\SmsVerifyCodeController.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\project\ProjectPageVO.java -D:\code\ecutrack\src\main\java\com\subsidy\common\RedisPrefixConstant.java -D:\code\ecutrack\src\main\java\com\subsidy\common\ResponseVO.java -D:\code\ecutrack\src\main\java\com\subsidy\mapper\ProjectJudgeMapper.java -D:\code\ecutrack\src\main\java\com\subsidy\common\ResponseData.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\project\ApproveDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\project\MentorDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\review\SchoolReviewVO.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\project\UploadVodsVO.java -D:\code\ecutrack\src\main\java\com\subsidy\util\MathUtil.java -D:\code\ecutrack\src\main\java\com\subsidy\model\ProjectMembersDO.java -D:\code\ecutrack\src\main\java\com\subsidy\mapper\ProjectMapper.java -D:\code\ecutrack\src\main\java\com\subsidy\model\ProjectReviewPeriodDO.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\project\ProjectCollegeListDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\review\ReviewScoreDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\controller\MessageController.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\review\FinalsReviewVO.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\project\ProjectMemberVO.java -D:\code\ecutrack\src\main\java\com\subsidy\util\excel\ExcelColumnUtil.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\college\GetCollegeInfoVO.java -D:\code\ecutrack\src\main\java\com\subsidy\mapper\AdministerMapper.java -D:\code\ecutrack\src\main\java\com\subsidy\common\configure\PolyvConfig.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\project\SeedTrackProjectPageVO.java -D:\code\ecutrack\src\main\java\com\subsidy\util\JwtUtil.java -D:\code\ecutrack\src\main\java\com\subsidy\model\SmsVerifyCodeDO.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\message\MessagePageDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\common\configure\WebConfig.java -D:\code\ecutrack\src\main\java\com\subsidy\mapper\ProjectReviewPeriodMapper.java -D:\code\ecutrack\src\main\java\com\subsidy\util\EhCacheUtil.java -D:\code\ecutrack\src\main\java\com\subsidy\mapper\SmsVerifyCodeMapper.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\project\RecentVodVO.java -D:\code\ecutrack\src\main\java\com\subsidy\service\MessageService.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\project\SeedTrackProjectDetailVO.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\project\UpdateProjectDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\project\GetSeedTrackMatchPageDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\project\ReviewListDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\project\ProjectListPageDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\period\ProjectReviewPeriodDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\ExcelFieldVO.java -D:\code\ecutrack\src\main\java\com\subsidy\common\configure\RemoteProperties.java -D:\code\ecutrack\src\main\java\com\subsidy\common\constant\CourseNotification.java -D:\code\ecutrack\src\main\java\com\subsidy\service\CollegeFileService.java -D:\code\ecutrack\src\main\java\com\subsidy\common\configure\RedisConfig.java -D:\code\ecutrack\src\main\java\com\subsidy\util\ImageCheckUtil.java -D:\code\ecutrack\src\main\java\com\subsidy\common\configure\AliyunSmsProperties.java -D:\code\ecutrack\src\main\java\com\subsidy\model\CollegeFileDO.java -D:\code\ecutrack\src\main\java\com\subsidy\util\RenSheJuConstant.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\oss\UploadFileVO.java -D:\code\ecutrack\src\main\java\com\subsidy\controller\ProjectController.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\project\MatchCollegeVodsDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\service\impl\AdministerServiceImpl.java -D:\code\ecutrack\src\main\java\com\subsidy\util\MyBeanUtils.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\oss\GetSecretVO.java -D:\code\ecutrack\src\main\java\com\subsidy\util\Base64Util.java -D:\code\ecutrack\src\main\java\com\subsidy\service\impl\ProjectReviewServiceImpl.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\project\ReviewListVO.java -D:\code\ecutrack\src\main\java\com\subsidy\controller\ProjectConsultController.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\project\VocationalNumVO.java -D:\code\ecutrack\src\main\java\com\subsidy\common\constant\MemberType.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\match\MatchDictVO.java -D:\code\ecutrack\src\main\java\com\subsidy\service\impl\ProjectJudgeServiceImpl.java -D:\code\ecutrack\src\main\java\com\subsidy\common\constant\WxConstant.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\college\CollegesVO.java -D:\code\ecutrack\src\main\java\com\subsidy\service\TeacherService.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\project\ReviewVocationalNumDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\service\ProjectService.java -D:\code\ecutrack\src\main\java\com\subsidy\model\ProjectConsultDO.java -D:\code\ecutrack\src\main\java\com\subsidy\mapper\MessageMapper.java -D:\code\ecutrack\src\main\java\com\subsidy\service\MatchDictService.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\project\ProjectDataOverview.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\project\GetVocationalProjectDetailDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\model\AdministerDO.java -D:\code\ecutrack\src\main\java\com\subsidy\util\EncryptUtil.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\project\OneProjectVO.java -D:\code\ecutrack\src\main\java\com\subsidy\common\configure\VODConfig.java -D:\code\ecutrack\src\main\java\com\subsidy\controller\TeacherController.java -D:\code\ecutrack\src\main\java\com\subsidy\util\tree\NumberTree.java -D:\code\ecutrack\src\main\java\com\subsidy\model\ProjectJudgeDO.java -D:\code\ecutrack\src\main\java\com\subsidy\util\MongoUtil.java -D:\code\ecutrack\src\main\java\com\subsidy\service\AdministerService.java -D:\code\ecutrack\src\main\java\com\subsidy\util\DateFormatUtil.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\review\ProjectReviewPageDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\mapper\ProjectConsultMapper.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\project\ProjectJudgeVO.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\project\TeamMemberDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\common\configure\MyTomcat.java -D:\code\ecutrack\src\main\java\com\subsidy\model\TeacherDO.java -D:\code\ecutrack\src\main\java\com\subsidy\service\impl\MessageServiceImpl.java -D:\code\ecutrack\src\main\java\com\subsidy\util\ConstantUtils.java -D:\code\ecutrack\src\main\java\com\subsidy\util\tree\SerialNumber.java -D:\code\ecutrack\src\main\java\com\subsidy\common\configure\WechatConfig.java -D:\code\ecutrack\src\main\java\com\subsidy\service\impl\ProjectMembersServiceImpl.java -D:\code\ecutrack\src\main\java\com\subsidy\util\ExcelFormatUtils.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\judge\ProjectJudgePageVO.java -D:\code\ecutrack\src\main\java\com\subsidy\controller\CollegesDictController.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\project\UploadVodsDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\common\constant\VodConstant.java -D:\code\ecutrack\src\main\java\com\subsidy\dto\project\EditStatusDTO.java -D:\code\ecutrack\src\main\java\com\subsidy\vo\administer\AdministerVO.java -- libgit2 0.25.0