├── tj-auth ├── tj-auth-service │ ├── tjxt.jks │ └── src │ │ └── main │ │ ├── resources │ │ ├── tjxt.jks │ │ ├── bootstrap-dev.yml │ │ ├── bootstrap-local.yml │ │ └── mapper │ │ │ ├── RoleMenuMapper.xml │ │ │ ├── AccountRoleMapper.xml │ │ │ ├── RolePrivilegeMapper.xml │ │ │ └── StatusEnumValid.xml │ │ └── java │ │ └── com │ │ └── tianji │ │ └── auth │ │ ├── constants │ │ └── AuthConstants.java │ │ ├── mapper │ │ ├── RoleMapper.java │ │ ├── RoleMenuMapper.java │ │ ├── AccountRoleMapper.java │ │ ├── LoginRecordMapper.java │ │ ├── RolePrivilegeMapper.java │ │ ├── MenuMapper.java │ │ └── PrivilegeMapper.java │ │ ├── service │ │ ├── IAccountRoleService.java │ │ ├── IAccountService.java │ │ ├── ILoginRecordService.java │ │ ├── IRoleService.java │ │ ├── IRoleMenuService.java │ │ ├── IRolePrivilegeService.java │ │ ├── impl │ │ │ └── AccountRoleServiceImpl.java │ │ └── IMenuService.java │ │ └── domain │ │ └── vo │ │ └── LoginRecordVO.java ├── tj-auth-gateway-sdk │ └── src │ │ └── main │ │ └── resources │ │ └── META-INF │ │ ├── spring.factories │ │ └── spring-configuration-metadata.json ├── tj-auth-resource-sdk │ └── src │ │ └── main │ │ ├── resources │ │ └── META-INF │ │ │ └── spring.factories │ │ └── java │ │ └── com │ │ └── tianji │ │ └── authsdk │ │ └── resource │ │ ├── config │ │ ├── ResourceAuthProperties.java │ │ └── FeignRelayUserAutoConfiguration.java │ │ └── interceptors │ │ └── FeignRelayUserInterceptor.java └── tj-auth-common │ └── src │ └── main │ └── java │ └── com │ └── tianji │ └── auth │ └── common │ └── domain │ └── PrivilegeRoleDTO.java ├── tj-api └── src │ └── main │ ├── java │ └── com │ │ └── tianji │ │ └── api │ │ ├── annotations │ │ └── EnableCategoryCache.java │ │ ├── constants │ │ └── SmsConstants.java │ │ ├── interfaces │ │ ├── learning │ │ │ └── LearningDubboService.java │ │ └── stock │ │ │ └── StockDubboService.java │ │ ├── dto │ │ ├── sms │ │ │ └── SmsInfoDTO.java │ │ ├── course │ │ │ ├── CataSimpleInfoDTO.java │ │ │ ├── CategoryBasicDTO.java │ │ │ ├── MediaQuoteDTO.java │ │ │ ├── SectionInfoDTO.java │ │ │ ├── CoursePurchaseInfoDTO.java │ │ │ └── SubNumAndCourseNumDTO.java │ │ ├── leanring │ │ │ ├── LearningRecordDTO.java │ │ │ └── LearningLessonDTO.java │ │ ├── promotion │ │ │ └── OrderCourseDTO.java │ │ ├── exam │ │ │ └── QuestionBizDTO.java │ │ └── IdAndNumDTO.java │ │ ├── client │ │ ├── search │ │ │ └── SearchClient.java │ │ ├── course │ │ │ ├── SubjectClient.java │ │ │ ├── CategoryClient.java │ │ │ └── CatalogueClient.java │ │ ├── auth │ │ │ └── AuthClient.java │ │ └── remark │ │ │ └── RemarkClient.java │ │ └── config │ │ └── RequestIdRelayConfiguration.java │ └── resources │ └── META-INF │ └── spring.factories ├── tj-promotion └── src │ └── main │ ├── resources │ ├── seata.conf │ ├── mapper │ │ ├── PromotionMapper.xml │ │ ├── UserCouponMapper.xml │ │ ├── CouponScopeMapper.xml │ │ └── ExchangeCodeMapper.xml │ ├── bootstrap-dev.yml │ ├── bootstrap-local.yml │ └── lua │ │ └── exchange_coupon.lua │ └── java │ └── com │ └── tianji │ └── promotion │ ├── utils │ ├── MyLockType.java │ └── MyLock.java │ ├── mapper │ ├── CouponScopeMapper.java │ ├── ExchangeCodeMapper.java │ └── PromotionMapper.java │ ├── service │ ├── ICouponScopeService.java │ ├── IPromotionService.java │ └── impl │ │ ├── PromotionServiceImpl.java │ │ └── CouponScopeServiceImpl.java │ ├── controller │ ├── CouponScopeController.java │ ├── ExchangeCodeController.java │ └── PromotionController.java │ ├── domain │ ├── dto │ │ ├── UserCouponDTO.java │ │ ├── OrderCourseDTO.java │ │ └── OrderCouponDTO.java │ ├── vo │ │ └── CouponScopeVO.java │ └── query │ │ ├── CodeQuery.java │ │ └── CouponQuery.java │ ├── discount │ └── Discount.java │ └── config │ └── EtcdConfig.java ├── README.md ├── tj-pay ├── tj-pay-api │ └── src │ │ └── main │ │ ├── resources │ │ └── META-INF │ │ │ └── spring.factories │ │ └── java │ │ └── com │ │ └── tianji │ │ └── pay │ │ └── sdk │ │ └── config │ │ └── PayApiImportConfiguration.java ├── tj-pay-service │ └── src │ │ └── main │ │ ├── resources │ │ ├── mapper │ │ │ ├── PayOrderMapper.xml │ │ │ ├── TradeClient.xml │ │ │ └── PayChannelMapper.xml │ │ ├── bootstrap-dev.yml │ │ └── bootstrap-local.yml │ │ └── java │ │ └── com │ │ └── tianji │ │ └── pay │ │ ├── mapper │ │ ├── PayOrderMapper.java │ │ ├── PayChannelMapper.java │ │ └── RefundOrderMapper.java │ │ ├── third │ │ ├── CommonPayProperties.java │ │ ├── model │ │ │ ├── RefundStatus.java │ │ │ ├── PayStatus.java │ │ │ └── PrepayResponse.java │ │ ├── ali │ │ │ └── config │ │ │ │ └── AliPayProperties.java │ │ ├── wx │ │ │ └── config │ │ │ │ └── WxPayProperties.java │ │ └── IPayService.java │ │ ├── service │ │ ├── INotifyService.java │ │ └── IPayChannelService.java │ │ └── constants │ │ └── NotifyStatus.java └── tj-pay-domain │ └── src │ └── main │ └── java │ └── com │ └── tianji │ └── pay │ └── sdk │ ├── constants │ ├── PayType.java │ └── PayChannel.java │ └── dto │ └── RefundApplyDTO.java ├── tj-common └── src │ └── main │ ├── java │ └── com │ │ └── tianji │ │ └── common │ │ ├── utils │ │ ├── IoUtils.java │ │ ├── HttpUtils.java │ │ ├── EnumUtils.java │ │ ├── JsonUtils.java │ │ ├── RandomUtils.java │ │ ├── BooleanUtils.java │ │ ├── Convert.java │ │ ├── StringUtils.java │ │ ├── QrCodeUtils.java │ │ ├── MqUtils.java │ │ ├── ByteUtils.java │ │ ├── ReflectUtils.java │ │ ├── UserContext.java │ │ ├── MarkedRunnable.java │ │ └── ViolationUtils.java │ │ ├── domain │ │ ├── dto │ │ │ ├── LoginUserDTO.java │ │ │ ├── IdNameDTO.java │ │ │ └── BaseDTO.java │ │ ├── mq │ │ │ └── CouponMessage.java │ │ ├── CommonCache.java │ │ └── cache │ │ │ └── CouponBusinessCache.java │ │ ├── enums │ │ └── BaseEnum.java │ │ ├── validate │ │ ├── Checker.java │ │ └── annotations │ │ │ └── ParamChecker.java │ │ ├── exceptions │ │ ├── DbException.java │ │ ├── BizIllegalException.java │ │ ├── SentinelException.java │ │ ├── ForbiddenException.java │ │ ├── BadRequestException.java │ │ ├── UnauthorizedException.java │ │ └── RequestTimeoutException.java │ │ └── autoconfigure │ │ ├── mvc │ │ └── ParamCheckerConfig.java │ │ ├── ratelimite │ │ └── LimiterConfig.java │ │ └── mq │ │ └── DelayedMessageProcessor.java │ └── resources │ └── META-INF │ └── spring.factories ├── tj-message ├── tj-message-api │ └── src │ │ └── main │ │ ├── resources │ │ └── META-INF │ │ │ └── spring.factories │ │ └── java │ │ └── com │ │ └── tianji │ │ └── message │ │ └── api │ │ └── client │ │ ├── MessageClient.java │ │ └── AsyncSmsClient.java ├── tj-message-service │ └── src │ │ └── main │ │ ├── resources │ │ ├── mapper │ │ │ ├── NoticeTaskMapper.xml │ │ │ ├── TemplateMapper.xml │ │ │ ├── IExamService.xml │ │ │ ├── PublicNoticeMapper.xml │ │ │ ├── NoticeTemplateMapper.xml │ │ │ ├── SmsThirdPlatformMapper.xml │ │ │ └── ISmsHandler.xml │ │ ├── bootstrap-dev.yml │ │ └── bootstrap-local.yml │ │ └── java │ │ └── com │ │ └── tianji │ │ └── message │ │ ├── thirdparty │ │ ├── ali │ │ │ └── AliProperties.java │ │ ├── ISmsHandler.java │ │ ├── tencent │ │ │ └── TencentSmsHandler.java │ │ └── uc │ │ │ └── UcSmsHandler.java │ │ ├── enums │ │ ├── TemplateStatus.java │ │ └── NoticeType.java │ │ ├── constants │ │ └── MessageErrorInfo.java │ │ ├── mapper │ │ ├── PublicNoticeMapper.java │ │ ├── NoticeTemplateMapper.java │ │ ├── MessageTemplateMapper.java │ │ ├── SmsThirdPlatformMapper.java │ │ ├── UserInboxMapper.java │ │ └── NoticeTaskMapper.java │ │ ├── domain │ │ ├── query │ │ │ ├── UserInboxQuery.java │ │ │ ├── NoticeTemplatePageQuery.java │ │ │ ├── SmsThirdPlatformPageQuery.java │ │ │ ├── MessageTemplatePageQuery.java │ │ │ └── NoticeTaskPageQuery.java │ │ └── dto │ │ │ └── UserInboxFormDTO.java │ │ ├── config │ │ └── MessageProperties.java │ │ ├── service │ │ ├── ISmsService.java │ │ └── IPublicNoticeService.java │ │ └── properties │ │ └── ThreadPoolProperties.java └── tj-message-domain │ └── src │ └── main │ └── java │ └── com │ └── tianji │ └── message │ └── domain │ ├── enums │ └── SmsTemplate.java │ └── dto │ └── SmsInfoDTO.java ├── tj-exam └── src │ └── main │ ├── java │ └── com │ │ └── tianji │ │ └── exam │ │ ├── constants │ │ └── ExamErrorInfo.java │ │ ├── mapper │ │ ├── QuestionDetailMapper.java │ │ ├── QuestionMapper.java │ │ └── QuestionBizMapper.java │ │ └── service │ │ ├── IQuestionDetailService.java │ │ └── impl │ │ └── QuestionDetailServiceImpl.java │ └── resources │ ├── mapper │ ├── QuestionDetailMapper.xml │ └── QuestionMapper.xml │ ├── bootstrap-dev.yml │ └── bootstrap-local.yml ├── tj-media └── src │ └── main │ ├── java │ └── com │ │ └── tianji │ │ └── media │ │ ├── constants │ │ ├── FileConstants.java │ │ └── FileErrorInfo.java │ │ ├── storage │ │ ├── tencent │ │ │ └── UserAccessInfo.java │ │ └── MediaUploadResult.java │ │ ├── mapper │ │ ├── FileMapper.java │ │ └── MediaMapper.java │ │ ├── config │ │ ├── PlatformProperties.java │ │ └── AliProperties.java │ │ ├── enums │ │ ├── FilePlatform.java │ │ ├── Platform.java │ │ └── FileErrorInfo.java │ │ ├── domain │ │ ├── vo │ │ │ └── VideoPlayVO.java │ │ ├── query │ │ │ └── MediaQuery.java │ │ └── dto │ │ │ ├── MediaDTO.java │ │ │ └── MediaUploadResultDTO.java │ │ └── service │ │ └── IFileService.java │ └── resources │ ├── bootstrap-dev.yml │ └── bootstrap-local.yml ├── tj-stock └── src │ ├── main │ ├── resources │ │ ├── seata.conf │ │ ├── mapper │ │ │ ├── StockBucketMapper.xml │ │ │ └── StockMapper.xml │ │ ├── bootstrap-dev.yml │ │ └── bootstrap-local.yml │ └── java │ │ └── com │ │ └── tianji │ │ └── stock │ │ ├── mapper │ │ ├── StockBucketMapper.java │ │ └── StockMapper.java │ │ └── service │ │ └── IStockService.java │ └── test │ └── java │ └── test.java ├── tj-user └── src │ └── main │ ├── java │ └── com │ │ └── tianji │ │ └── user │ │ ├── service │ │ ├── ICodeService.java │ │ ├── IStaffService.java │ │ ├── ITeacherService.java │ │ ├── IStudentService.java │ │ └── IUserDetailService.java │ │ ├── mapper │ │ └── UserMapper.java │ │ ├── config │ │ └── SecurityConfig.java │ │ ├── constants │ │ ├── UserConstants.java │ │ └── UserErrorInfo.java │ │ └── domain │ │ ├── dto │ │ ├── StudentFormDTO.java │ │ └── UserFormDTO.java │ │ ├── query │ │ └── UserPageQuery.java │ │ └── vo │ │ └── UserBasicVO.java │ └── resources │ ├── bootstrap-dev.yml │ └── bootstrap-local.yml ├── tj-trade └── src │ ├── main │ ├── resources │ │ ├── mapper │ │ │ ├── CartMapper.xml │ │ │ ├── OrderMapper.xml │ │ │ ├── RefundApplyMapper.xml │ │ │ └── OrderDetailMapper.xml │ │ ├── bootstrap-dev.yml │ │ └── bootstrap-local.yml │ └── java │ │ └── com │ │ └── tianji │ │ └── trade │ │ ├── mapper │ │ ├── CartMapper.java │ │ ├── OrderMapper.java │ │ └── RefundApplyMapper.java │ │ ├── domain │ │ ├── dto │ │ │ ├── CartsAddDTO.java │ │ │ ├── RefundCancelDTO.java │ │ │ ├── PayApplyFormDTO.java │ │ │ └── RefundFormDTO.java │ │ ├── query │ │ │ └── OrderPageQuery.java │ │ └── vo │ │ │ ├── OrderProgressNodeVO.java │ │ │ ├── OrderCourseVO.java │ │ │ ├── PlaceOrderResultVO.java │ │ │ ├── PayChannelVO.java │ │ │ └── OrderConfirmVO.java │ │ ├── service │ │ ├── IPayService.java │ │ └── ICartService.java │ │ └── config │ │ └── TradeProperties.java │ └── test │ └── java │ └── com │ └── tianji │ └── trade │ └── mapper │ └── OrderMapperTest.java ├── .gitignore ├── tj-learning └── src │ └── main │ ├── java │ └── com │ │ └── tianji │ │ └── learning │ │ ├── constants │ │ ├── LearningConstants.java │ │ └── RedisConstants.java │ │ ├── service │ │ ├── ISignRecordService.java │ │ ├── IPointsBoardSeasonService.java │ │ ├── ILearningRecordService.java │ │ ├── IInteractionReplyService.java │ │ ├── IPointsBoardService.java │ │ └── IPointsRecordService.java │ │ ├── domain │ │ ├── msg │ │ │ ├── ObtainPointsWay.java │ │ │ └── SignInMessage.java │ │ ├── vo │ │ │ ├── PointsBoardItemVO.java │ │ │ ├── PointsStatisticsVO.java │ │ │ ├── PointsBoardVO.java │ │ │ ├── SignResultVO.java │ │ │ └── PointsBoardSeasonVO.java │ │ ├── query │ │ │ ├── PointsBoardQuery.java │ │ │ ├── ReplyPageQuery.java │ │ │ └── QuestionPageQuery.java │ │ └── dto │ │ │ └── LearningPlanDTO.java │ │ ├── mapper │ │ ├── PointsBoardMapper.java │ │ ├── LearningLessonMapper.java │ │ ├── LearningRecordMapper.java │ │ ├── PointsRecordMapper.java │ │ ├── InteractionReplyMapper.java │ │ └── InteractionQuestionMapper.java │ │ └── utils │ │ └── TableInfoContext.java │ └── resources │ ├── mapper │ ├── PointsBoardMapper.xml │ ├── PointsRecordMapper.xml │ ├── InteractionReplyMapper.xml │ ├── LearningLessonMapper.xml │ ├── LearningRecordMapper.xml │ ├── PointsBoardSeasonMapper.xml │ └── InteractionQuestionMapper.xml │ ├── bootstrap-dev.yml │ └── bootstrap-local.yml ├── tj-search └── src │ └── main │ ├── resources │ ├── mapper │ │ └── InterestsMapper.xml │ ├── bootstrap-dev.yml │ └── bootstrap-local.yml │ └── java │ └── com │ └── tianji │ └── search │ ├── constants │ └── SearchErrorInfo.java │ ├── service │ ├── ICourseService.java │ ├── IInterestsService.java │ └── ISearchService.java │ ├── config │ └── InterestsProperties.java │ ├── mapper │ └── InterestsMapper.java │ ├── enums │ └── CourseStatus.java │ └── domain │ └── vo │ └── InterestCategoryVO.java ├── tj-remark └── src │ └── main │ ├── resources │ ├── mapper │ │ └── LikedRecordMapper.xml │ ├── bootstrap-dev.yml │ └── bootstrap-local.yml │ └── java │ └── com │ └── tianji │ └── remark │ ├── constants │ └── RedisConstants.java │ ├── mapper │ └── LikedRecordMapper.java │ ├── domain │ └── dto │ │ └── LikeRecordFormDTO.java │ └── service │ └── ILikedRecordService.java ├── tj-course └── src │ └── main │ ├── java │ └── com │ │ └── tianji │ │ └── course │ │ ├── utils │ │ └── CourseSaveBaseGroup.java │ │ ├── mapper │ │ ├── CourseCatalogueMapper.java │ │ ├── CourseContentMapper.java │ │ └── CourseTeacherMapper.java │ │ ├── domain │ │ ├── vo │ │ │ ├── CourseCataIdVO.java │ │ │ ├── CourseSaveVO.java │ │ │ ├── ChapterVO.java │ │ │ ├── NameExistVO.java │ │ │ ├── SimpleCategoryVO.java │ │ │ └── CataSubjectVO.java │ │ ├── po │ │ │ ├── SubjectUseNum.java │ │ │ ├── CataIdAndSubScore.java │ │ │ └── Category3PO.java │ │ └── dto │ │ │ ├── CourseSimpleInfoListDTO.java │ │ │ ├── CategoryListDTO.java │ │ │ ├── CourseMediaSaveDTO.java │ │ │ ├── CourseIdDTO.java │ │ │ └── CateSimpleInfoDTO.java │ │ ├── service │ │ └── ICourseCataSubjectDraftService.java │ │ ├── constants │ │ ├── RedisConstants.java │ │ └── RedisContants.java │ │ ├── handler │ │ └── CourseJobHandler.java │ │ └── properties │ │ └── CourseProperties.java │ └── resources │ ├── bootstrap-dev.yml │ ├── bootstrap-local.yml │ └── mapper │ ├── CourseSubjectMapper.xml │ └── CourseCataSubjectMapper.xml ├── tj-data └── src │ └── main │ ├── resources │ ├── bootstrap-dev.yml │ └── bootstrap-local.yml │ └── java │ └── com │ └── tianji │ └── data │ ├── model │ ├── vo │ │ ├── EchartsVO.java │ │ ├── Top10DataVO.java │ │ └── TodayDataVO.java │ ├── po │ │ ├── CourseInfo.java │ │ └── TodayDataInfo.java │ └── dto │ │ └── TodayDataDTO.java │ ├── constants │ └── RedisConstants.java │ ├── utils │ └── DataUtils.java │ └── service │ ├── TodayDataService.java │ ├── Top10Service.java │ └── BoardService.java ├── tj-gateway └── src │ └── main │ └── resources │ ├── bootstrap-dev.yml │ └── bootstrap-local.yml └── Dockerfile /tj-auth/tj-auth-service/tjxt.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCF-Sefy/tianji/HEAD/tj-auth/tj-auth-service/tjxt.jks -------------------------------------------------------------------------------- /tj-auth/tj-auth-service/src/main/resources/tjxt.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCF-Sefy/tianji/HEAD/tj-auth/tj-auth-service/src/main/resources/tjxt.jks -------------------------------------------------------------------------------- /tj-api/src/main/java/com/tianji/api/annotations/EnableCategoryCache.java: -------------------------------------------------------------------------------- 1 | package com.tianji.api.annotations; 2 | 3 | public @interface EnableCategoryCache { 4 | } 5 | -------------------------------------------------------------------------------- /tj-promotion/src/main/resources/seata.conf: -------------------------------------------------------------------------------- 1 | client { 2 | application.id = promotion-service ## 应用唯一主键 3 | transaction.service.group = tjxt ## 所属事务组 4 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ### 天机学堂个人优化版 2 | 1: 改用RocketMQ作为消息队列 3 | 2: sentinel限流,令牌桶单机限流 4 | 3: 多级缓存 5 | 4: 引入京东hotkey作为热key探测 6 | 5: 领券记录redis大key优化(分key) 7 | 6: 搭建redis三主三从集群 8 | 7: 分库分表 9 | -------------------------------------------------------------------------------- /tj-pay/tj-pay-api/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | com.tianji.pay.sdk.config.PayApiImportConfiguration -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/utils/IoUtils.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.utils; 2 | 3 | import cn.hutool.core.io.IoUtil; 4 | 5 | public class IoUtils extends IoUtil { 6 | } 7 | -------------------------------------------------------------------------------- /tj-api/src/main/java/com/tianji/api/constants/SmsConstants.java: -------------------------------------------------------------------------------- 1 | package com.tianji.api.constants; 2 | 3 | public interface SmsConstants { 4 | String VERIFY_CODE_PARAM_NAME = "code"; 5 | } 6 | -------------------------------------------------------------------------------- /tj-auth/tj-auth-gateway-sdk/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | com.tianji.authsdk.gateway.config.AuthAutoConfiguration -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/utils/HttpUtils.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.utils; 2 | 3 | import cn.hutool.http.HttpUtil; 4 | 5 | public class HttpUtils extends HttpUtil { 6 | } 7 | -------------------------------------------------------------------------------- /tj-message/tj-message-api/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | com.tianji.message.api.config.MessageClientConfiguration -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/utils/EnumUtils.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.utils; 2 | 3 | import cn.hutool.core.util.EnumUtil; 4 | 5 | public class EnumUtils extends EnumUtil { 6 | } 7 | -------------------------------------------------------------------------------- /tj-exam/src/main/java/com/tianji/exam/constants/ExamErrorInfo.java: -------------------------------------------------------------------------------- 1 | package com.tianji.exam.constants; 2 | 3 | public interface ExamErrorInfo { 4 | String QUESTION_NOT_EXISTS = "题目不存在"; 5 | } 6 | -------------------------------------------------------------------------------- /tj-media/src/main/java/com/tianji/media/constants/FileConstants.java: -------------------------------------------------------------------------------- 1 | package com.tianji.media.constants; 2 | 3 | public interface FileConstants { 4 | 5 | long MEDIA_FREE_SECONDS = 300; 6 | } 7 | -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/utils/JsonUtils.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.utils; 2 | 3 | import cn.hutool.json.JSONUtil; 4 | 5 | 6 | 7 | public class JsonUtils extends JSONUtil { 8 | 9 | } -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/utils/RandomUtils.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.utils; 2 | 3 | import cn.hutool.core.util.RandomUtil; 4 | 5 | public class RandomUtils extends RandomUtil { 6 | } 7 | -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/utils/BooleanUtils.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.utils; 2 | 3 | import cn.hutool.core.util.BooleanUtil; 4 | 5 | public class BooleanUtils extends BooleanUtil { 6 | } 7 | -------------------------------------------------------------------------------- /tj-stock/src/main/resources/seata.conf: -------------------------------------------------------------------------------- 1 | sharding { 2 | transaction.seata.at.enable = true 3 | } 4 | client { 5 | application.id = stock-service ## 应用唯一主键 6 | transaction.service.group = tjxt ## 所属事务组 7 | } -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/utils/Convert.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.utils; 2 | 3 | /** 4 | * 对原对象进行计算,设置到目标对象中 5 | **/ 6 | public interface Convert{ 7 | void convert(R origin, T target); 8 | } -------------------------------------------------------------------------------- /tj-stock/src/main/java/com/tianji/stock/mapper/StockBucketMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.stock.mapper; 2 | 3 | import org.apache.ibatis.annotations.Mapper; 4 | 5 | @Mapper 6 | public interface StockBucketMapper { 7 | } 8 | -------------------------------------------------------------------------------- /tj-user/src/main/java/com/tianji/user/service/ICodeService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.user.service; 2 | 3 | public interface ICodeService { 4 | void sendVerifyCode(String phone); 5 | void verifyCode(String phone, String code); 6 | } 7 | -------------------------------------------------------------------------------- /tj-auth/tj-auth-service/src/main/java/com/tianji/auth/constants/AuthConstants.java: -------------------------------------------------------------------------------- 1 | package com.tianji.auth.constants; 2 | 3 | public abstract class AuthConstants { 4 | /*管理员的角色ID*/ 5 | public static final Long ADMIN_ROLE_ID = 1L; 6 | } 7 | -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/utils/StringUtils.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.utils; 2 | 3 | import cn.hutool.core.util.StrUtil; 4 | 5 | /** 6 | * 字符串工具类,继承了{@link StrUtil} 7 | **/ 8 | public class StringUtils extends StrUtil { 9 | } -------------------------------------------------------------------------------- /tj-api/src/main/java/com/tianji/api/interfaces/learning/LearningDubboService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.api.interfaces.learning; 2 | 3 | public interface LearningDubboService { 4 | 5 | String sayHello(String name); 6 | 7 | void testSeata(); 8 | } 9 | -------------------------------------------------------------------------------- /tj-promotion/src/main/java/com/tianji/promotion/utils/MyLockType.java: -------------------------------------------------------------------------------- 1 | package com.tianji.promotion.utils; 2 | 3 | public enum MyLockType { 4 | RE_ENTRANT_LOCK, // 可重入锁 5 | FAIR_LOCK, // 公平锁 6 | READ_LOCK, // 读锁 7 | WRITE_LOCK, // 写锁 8 | ; 9 | } -------------------------------------------------------------------------------- /tj-media/src/main/java/com/tianji/media/storage/tencent/UserAccessInfo.java: -------------------------------------------------------------------------------- 1 | package com.tianji.media.storage.tencent; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class UserAccessInfo { 7 | private Long exper; 8 | private String uid; 9 | } 10 | -------------------------------------------------------------------------------- /tj-trade/src/main/resources/mapper/CartMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tj-auth/tj-auth-resource-sdk/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | com.tianji.authsdk.resource.config.ResourceInterceptorConfiguration, \ 3 | com.tianji.authsdk.resource.config.FeignRelayUserAutoConfiguration -------------------------------------------------------------------------------- /tj-stock/src/main/resources/mapper/StockBucketMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | ### Example user template template 3 | ### Example user template 4 | 5 | # IntelliJ project files 6 | .idea 7 | *.iml 8 | out 9 | gen 10 | target 11 | *.class 12 | 13 | *.log 14 | .settings 15 | .project 16 | logs 17 | job -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/utils/QrCodeUtils.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.utils; 2 | 3 | import cn.hutool.extra.qrcode.QrCodeUtil; 4 | 5 | /** 6 | * 二维码工具,想要使用此工具,项目中一定要引入com.google.zxing 7 | **/ 8 | public class QrCodeUtils extends QrCodeUtil { 9 | 10 | 11 | } 12 | -------------------------------------------------------------------------------- /tj-learning/src/main/java/com/tianji/learning/constants/LearningConstants.java: -------------------------------------------------------------------------------- 1 | package com.tianji.learning.constants; 2 | 3 | public interface LearningConstants { 4 | 5 | /** 6 | * 上赛季积分榜单表 表名前缀 7 | */ 8 | String POINTS_BOARD_TABLE_PREFIX = "points_board_"; 9 | } 10 | -------------------------------------------------------------------------------- /tj-search/src/main/resources/mapper/InterestsMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/domain/dto/LoginUserDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.domain.dto; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class LoginUserDTO { 7 | private Long userId; 8 | private Long roleId; 9 | private Boolean rememberMe; 10 | } 11 | -------------------------------------------------------------------------------- /tj-exam/src/main/resources/mapper/QuestionDetailMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tj-learning/src/main/resources/mapper/PointsBoardMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tj-pay/tj-pay-service/src/main/resources/mapper/PayOrderMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tj-pay/tj-pay-service/src/main/resources/mapper/TradeClient.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tj-promotion/src/main/resources/mapper/PromotionMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tj-promotion/src/main/resources/mapper/UserCouponMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tj-remark/src/main/resources/mapper/LikedRecordMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tj-learning/src/main/resources/mapper/PointsRecordMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tj-pay/tj-pay-service/src/main/resources/mapper/PayChannelMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tj-promotion/src/main/resources/mapper/CouponScopeMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tj-promotion/src/main/resources/mapper/ExchangeCodeMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tj-learning/src/main/resources/mapper/InteractionReplyMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tj-learning/src/main/resources/mapper/LearningLessonMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tj-learning/src/main/resources/mapper/LearningRecordMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tj-api/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | com.tianji.api.config.RequestIdRelayConfiguration, \ 3 | com.tianji.api.config.RoleCacheConfig, \ 4 | com.tianji.api.config.FallbackConfig, \ 5 | com.tianji.api.config.CategoryCacheConfig -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/utils/MqUtils.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.utils; 2 | 3 | /** 4 | * 消息队列工具类 5 | */ 6 | public class MqUtils { 7 | 8 | public static String topicWithTag(String topic, String tag) { 9 | return String.format("%s:%s", topic, tag); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /tj-course/src/main/java/com/tianji/course/utils/CourseSaveBaseGroup.java: -------------------------------------------------------------------------------- 1 | package com.tianji.course.utils; 2 | 3 | /** 4 | * 用于校验课程分组的基本信息, 5 | * @ClassName CourseSaveBaseGroup 6 | * @Author wusongsong 7 | * @Date 2022/7/18 21:04 8 | * @Version 9 | **/ 10 | public interface CourseSaveBaseGroup { 11 | } -------------------------------------------------------------------------------- /tj-learning/src/main/resources/mapper/PointsBoardSeasonMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/resources/mapper/NoticeTaskMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/resources/mapper/TemplateMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tj-learning/src/main/java/com/tianji/learning/service/ISignRecordService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.learning.service; 2 | 3 | import com.tianji.learning.domain.vo.SignResultVO; 4 | 5 | public interface ISignRecordService { 6 | SignResultVO addSignRecords(); 7 | 8 | Byte[] querySignRecords(); 9 | } 10 | -------------------------------------------------------------------------------- /tj-learning/src/main/resources/mapper/InteractionQuestionMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/resources/mapper/IExamService.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/resources/mapper/PublicNoticeMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/resources/mapper/NoticeTemplateMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/resources/mapper/SmsThirdPlatformMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tj-media/src/main/java/com/tianji/media/constants/FileErrorInfo.java: -------------------------------------------------------------------------------- 1 | package com.tianji.media.constants; 2 | 3 | public interface FileErrorInfo { 4 | String MEDIA_NOT_EXISTS = "媒资不存在"; 5 | String MEDIA_NOT_FREE = "课程不支持试看"; 6 | String USER_NOT_EXISTS = "用户信息不存在"; 7 | String MEDIA_QUOTE_NOT_EXISTS = "媒资引用信息查询异常"; 8 | } 9 | -------------------------------------------------------------------------------- /tj-course/src/main/resources/bootstrap-dev.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | cloud: 3 | nacos: 4 | server-addr: 192.168.150.101:8848 # nacos注册中心 5 | discovery: 6 | namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0 7 | group: DEFAULT_GROUP 8 | ip: 192.168.150.101 9 | logging: 10 | level: 11 | com.tianji: debug -------------------------------------------------------------------------------- /tj-course/src/main/resources/bootstrap-local.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | cloud: 3 | nacos: 4 | server-addr: 192.168.150.101:8848 # nacos注册中心 5 | discovery: 6 | namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0 7 | group: DEFAULT_GROUP 8 | ip: 192.168.150.1 9 | logging: 10 | level: 11 | com.tianji: debug -------------------------------------------------------------------------------- /tj-data/src/main/resources/bootstrap-dev.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | cloud: 3 | nacos: 4 | server-addr: 192.168.150.101:8848 # nacos注册中心 5 | discovery: 6 | namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0 7 | group: DEFAULT_GROUP 8 | ip: 192.168.150.101 9 | logging: 10 | level: 11 | com.tianji: debug -------------------------------------------------------------------------------- /tj-data/src/main/resources/bootstrap-local.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | cloud: 3 | nacos: 4 | server-addr: 192.168.150.101:8848 # nacos注册中心 5 | discovery: 6 | namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0 7 | group: DEFAULT_GROUP 8 | ip: 192.168.150.1 9 | logging: 10 | level: 11 | com.tianji: debug -------------------------------------------------------------------------------- /tj-exam/src/main/resources/bootstrap-dev.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | cloud: 3 | nacos: 4 | server-addr: 192.168.150.101:8848 # nacos注册中心 5 | discovery: 6 | namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0 7 | group: DEFAULT_GROUP 8 | ip: 192.168.150.101 9 | logging: 10 | level: 11 | com.tianji: debug -------------------------------------------------------------------------------- /tj-exam/src/main/resources/bootstrap-local.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | cloud: 3 | nacos: 4 | server-addr: 192.168.150.101:8848 # nacos注册中心 5 | discovery: 6 | namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0 7 | group: DEFAULT_GROUP 8 | ip: 192.168.150.1 9 | logging: 10 | level: 11 | com.tianji: debug -------------------------------------------------------------------------------- /tj-gateway/src/main/resources/bootstrap-dev.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | cloud: 3 | nacos: 4 | server-addr: 192.168.150.101:8848 # nacos注册中心 5 | discovery: 6 | namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0 7 | group: DEFAULT_GROUP 8 | ip: 192.168.150.101 9 | logging: 10 | level: 11 | com.tianji: debug -------------------------------------------------------------------------------- /tj-gateway/src/main/resources/bootstrap-local.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | cloud: 3 | nacos: 4 | server-addr: 192.168.150.101:8848 # nacos注册中心 5 | discovery: 6 | namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0 7 | group: DEFAULT_GROUP 8 | ip: 192.168.150.1 9 | logging: 10 | level: 11 | com.tianji: debug -------------------------------------------------------------------------------- /tj-learning/src/main/java/com/tianji/learning/domain/msg/ObtainPointsWay.java: -------------------------------------------------------------------------------- 1 | package com.tianji.learning.domain.msg; 2 | 3 | import lombok.Getter; 4 | 5 | /** 6 | * 获取积分的方式的枚举类型 7 | */ 8 | @Getter 9 | public enum ObtainPointsWay { 10 | //签到 11 | SIGN_IN, 12 | 13 | //回复评论 14 | Reply_Comment; 15 | 16 | 17 | } 18 | -------------------------------------------------------------------------------- /tj-learning/src/main/resources/bootstrap-dev.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | cloud: 3 | nacos: 4 | server-addr: 192.168.150.101:8848 # nacos注册中心 5 | discovery: 6 | namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0 7 | group: DEFAULT_GROUP 8 | ip: 192.168.150.101 9 | logging: 10 | level: 11 | com.tianji: debug -------------------------------------------------------------------------------- /tj-learning/src/main/resources/bootstrap-local.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | cloud: 3 | nacos: 4 | server-addr: 192.168.150.101:8848 # nacos注册中心 5 | discovery: 6 | namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0 7 | group: DEFAULT_GROUP 8 | ip: 192.168.150.1 9 | logging: 10 | level: 11 | com.tianji: debug -------------------------------------------------------------------------------- /tj-media/src/main/resources/bootstrap-dev.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | cloud: 3 | nacos: 4 | server-addr: 192.168.150.101:8848 # nacos注册中心 5 | discovery: 6 | namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0 7 | group: DEFAULT_GROUP 8 | ip: 192.168.150.101 9 | logging: 10 | level: 11 | com.tianji: debug -------------------------------------------------------------------------------- /tj-media/src/main/resources/bootstrap-local.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | cloud: 3 | nacos: 4 | server-addr: 192.168.150.101:8848 # nacos注册中心 5 | discovery: 6 | namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0 7 | group: DEFAULT_GROUP 8 | ip: 192.168.150.1 9 | logging: 10 | level: 11 | com.tianji: debug -------------------------------------------------------------------------------- /tj-remark/src/main/resources/bootstrap-dev.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | cloud: 3 | nacos: 4 | server-addr: 192.168.150.101:8848 # nacos注册中心 5 | discovery: 6 | namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0 7 | group: DEFAULT_GROUP 8 | ip: 192.168.150.101 9 | logging: 10 | level: 11 | com.tianji: debug -------------------------------------------------------------------------------- /tj-remark/src/main/resources/bootstrap-local.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | cloud: 3 | nacos: 4 | server-addr: 192.168.150.101:8848 # nacos注册中心 5 | discovery: 6 | namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0 7 | group: DEFAULT_GROUP 8 | ip: 192.168.150.1 9 | logging: 10 | level: 11 | com.tianji: debug -------------------------------------------------------------------------------- /tj-stock/src/main/resources/bootstrap-dev.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | cloud: 3 | nacos: 4 | server-addr: 192.168.150.101:8848 # nacos注册中心 5 | discovery: 6 | namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0 7 | group: DEFAULT_GROUP 8 | ip: 192.168.150.101 9 | logging: 10 | level: 11 | com.tianji: debug -------------------------------------------------------------------------------- /tj-stock/src/main/resources/bootstrap-local.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | cloud: 3 | nacos: 4 | server-addr: 192.168.150.101:8848 # nacos注册中心 5 | discovery: 6 | namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0 7 | group: DEFAULT_GROUP 8 | ip: 192.168.150.1 9 | logging: 10 | level: 11 | com.tianji: debug -------------------------------------------------------------------------------- /tj-trade/src/main/resources/bootstrap-dev.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | cloud: 3 | nacos: 4 | server-addr: 192.168.150.101:8848 # nacos注册中心 5 | discovery: 6 | namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0 7 | group: DEFAULT_GROUP 8 | ip: 192.168.150.101 9 | logging: 10 | level: 11 | com.tianji: debug -------------------------------------------------------------------------------- /tj-trade/src/main/resources/bootstrap-local.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | cloud: 3 | nacos: 4 | server-addr: 192.168.150.101:8848 # nacos注册中心 5 | discovery: 6 | namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0 7 | group: DEFAULT_GROUP 8 | ip: 192.168.150.1 9 | logging: 10 | level: 11 | com.tianji: debug -------------------------------------------------------------------------------- /tj-user/src/main/resources/bootstrap-dev.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | cloud: 3 | nacos: 4 | server-addr: 192.168.150.101:8848 # nacos注册中心 5 | discovery: 6 | namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0 7 | group: DEFAULT_GROUP 8 | ip: 192.168.150.101 9 | logging: 10 | level: 11 | com.tianji: debug -------------------------------------------------------------------------------- /tj-user/src/main/resources/bootstrap-local.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | cloud: 3 | nacos: 4 | server-addr: 192.168.150.101:8848 # nacos注册中心 5 | discovery: 6 | namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0 7 | group: DEFAULT_GROUP 8 | ip: 192.168.150.1 9 | logging: 10 | level: 11 | com.tianji: debug -------------------------------------------------------------------------------- /tj-promotion/src/main/resources/bootstrap-dev.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | cloud: 3 | nacos: 4 | server-addr: 192.168.150.101:8848 # nacos注册中心 5 | discovery: 6 | namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0 7 | group: DEFAULT_GROUP 8 | ip: 192.168.150.101 9 | logging: 10 | level: 11 | com.tianji: debug -------------------------------------------------------------------------------- /tj-promotion/src/main/resources/bootstrap-local.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | cloud: 3 | nacos: 4 | server-addr: 192.168.150.101:8848 # nacos注册中心 5 | discovery: 6 | namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0 7 | group: DEFAULT_GROUP 8 | ip: 192.168.150.1 9 | logging: 10 | level: 11 | com.tianji: debug -------------------------------------------------------------------------------- /tj-pay/tj-pay-service/src/main/resources/bootstrap-dev.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | cloud: 3 | nacos: 4 | server-addr: 192.168.150.101:8848 # nacos注册中心 5 | discovery: 6 | namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0 7 | group: DEFAULT_GROUP 8 | ip: 192.168.150.101 9 | logging: 10 | level: 11 | com.tianji: debug -------------------------------------------------------------------------------- /tj-pay/tj-pay-service/src/main/resources/bootstrap-local.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | cloud: 3 | nacos: 4 | server-addr: 192.168.150.101:8848 # nacos注册中心 5 | discovery: 6 | namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0 7 | group: DEFAULT_GROUP 8 | ip: 192.168.150.1 9 | logging: 10 | level: 11 | com.tianji: debug -------------------------------------------------------------------------------- /tj-auth/tj-auth-service/src/main/resources/bootstrap-dev.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | cloud: 3 | nacos: 4 | server-addr: 192.168.150.101:8848 # nacos注册中心 5 | discovery: 6 | namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0 7 | group: DEFAULT_GROUP 8 | ip: 192.168.150.101 9 | logging: 10 | level: 11 | com.tianji: debug -------------------------------------------------------------------------------- /tj-auth/tj-auth-service/src/main/resources/bootstrap-local.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | cloud: 3 | nacos: 4 | server-addr: 192.168.150.101:8848 # nacos注册中心 5 | discovery: 6 | namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0 7 | group: DEFAULT_GROUP 8 | ip: 192.168.150.1 9 | logging: 10 | level: 11 | com.tianji: debug -------------------------------------------------------------------------------- /tj-remark/src/main/java/com/tianji/remark/constants/RedisConstants.java: -------------------------------------------------------------------------------- 1 | package com.tianji.remark.constants; 2 | 3 | //接口中的变量默认都是常量 4 | public interface RedisConstants { 5 | /*给业务点赞的用户集合的KEY前缀,后缀是业务id*/ 6 | String LIKE_BIZ_KEY_PREFIX = "likes:set:biz:"; 7 | /*业务点赞数统计的KEY前缀,后缀是业务类型*/ 8 | String LIKES_TIMES_KEY_PREFIX = "likes:times:type:"; 9 | } -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:11.0-jre-buster 2 | LABEL maintainer="研究院研发组 " 3 | ENV JAVA_OPTS="" 4 | # 设定时区 5 | ENV TZ=Asia/Shanghai 6 | RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ /etc/timezone 7 | 8 | WORKDIR /app 9 | ADD app.jar /app/app.jar 10 | 11 | ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /app/app.jar"] -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/resources/bootstrap-dev.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | cloud: 3 | nacos: 4 | server-addr: 192.168.150.101:8848 # nacos注册中心 5 | discovery: 6 | namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0 7 | group: DEFAULT_GROUP 8 | ip: 192.168.150.101 9 | logging: 10 | level: 11 | com.tianji: debug -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/resources/bootstrap-local.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | cloud: 3 | nacos: 4 | server-addr: 192.168.150.101:8848 # nacos注册中心 5 | discovery: 6 | namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0 7 | group: DEFAULT_GROUP 8 | ip: 192.168.150.1 9 | logging: 10 | level: 11 | com.tianji: debug -------------------------------------------------------------------------------- /tj-auth/tj-auth-common/src/main/java/com/tianji/auth/common/domain/PrivilegeRoleDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.auth.common.domain; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.Set; 6 | 7 | @Data 8 | public class PrivilegeRoleDTO { 9 | private Long id; 10 | private String antPath; 11 | private Boolean internal; 12 | private Set roles; 13 | } 14 | -------------------------------------------------------------------------------- /tj-message/tj-message-domain/src/main/java/com/tianji/message/domain/enums/SmsTemplate.java: -------------------------------------------------------------------------------- 1 | package com.tianji.message.domain.enums; 2 | 3 | import lombok.Getter; 4 | 5 | @Getter 6 | public enum SmsTemplate { 7 | VERIFY_CODE("短信验证码"), 8 | ; 9 | private String desc; 10 | 11 | SmsTemplate( String desc) { 12 | this.desc = desc; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/enums/BaseEnum.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.enums; 2 | 3 | public interface BaseEnum { 4 | int getValue(); 5 | String getDesc(); 6 | 7 | default boolean equalsValue(Integer value){ 8 | if (value == null) { 9 | return false; 10 | } 11 | return getValue() == value; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/validate/Checker.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.validate; 2 | 3 | /** 4 | * 实现后在接口访问时如果接口实现了这个接口 5 | * 会被自动自行接口check进行校验 6 | **/ 7 | public interface Checker { 8 | 9 | /** 10 | * 用于实现validation不能校验的数据逻辑 11 | */ 12 | default void check(){ 13 | 14 | } 15 | 16 | default void check(T data){ 17 | } 18 | } -------------------------------------------------------------------------------- /tj-media/src/main/java/com/tianji/media/storage/MediaUploadResult.java: -------------------------------------------------------------------------------- 1 | package com.tianji.media.storage; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class MediaUploadResult { 7 | 8 | private String fileId; 9 | 10 | private String mediaUrl; 11 | 12 | private String coverUrl; 13 | 14 | private String requestId; 15 | 16 | private String filename; 17 | } 18 | -------------------------------------------------------------------------------- /tj-user/src/main/java/com/tianji/user/mapper/UserMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.user.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.tianji.user.domain.po.User; 5 | 6 | /** 7 | *

8 | * 学员用户表 Mapper 接口 9 | *

10 | * 11 | * @author 虎哥 12 | * @since 2022-06-28 13 | */ 14 | public interface UserMapper extends BaseMapper { 15 | } 16 | -------------------------------------------------------------------------------- /tj-search/src/main/resources/bootstrap-dev.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | cloud: 3 | nacos: 4 | server-addr: 192.168.150.101:8848 # nacos注册中心 5 | discovery: 6 | namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0 7 | group: DEFAULT_GROUP 8 | ip: 192.168.150.101 9 | elasticsearch: 10 | uris: http://192.168.150.101:9200 11 | logging: 12 | level: 13 | com.tianji: debug -------------------------------------------------------------------------------- /tj-search/src/main/resources/bootstrap-local.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | cloud: 3 | nacos: 4 | server-addr: 192.168.150.101:8848 # nacos注册中心 5 | discovery: 6 | namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0 7 | group: DEFAULT_GROUP 8 | ip: 192.168.150.1 9 | elasticsearch: 10 | uris: http://192.168.150.101:9200 11 | logging: 12 | level: 13 | com.tianji: debug -------------------------------------------------------------------------------- /tj-search/src/main/java/com/tianji/search/constants/SearchErrorInfo.java: -------------------------------------------------------------------------------- 1 | package com.tianji.search.constants; 2 | 3 | public interface SearchErrorInfo { 4 | String UPDATE_COURSE_STATUS_ERROR = "更新课程状态异常"; 5 | String SAVE_COURSE_ERROR = "新增课程索引异常"; 6 | String QUERY_COURSE_ERROR = "查询课程异常"; 7 | String TEACHER_NOT_EXISTS = "教师信息不存在"; 8 | String STAFF_NOT_EXISTS = "员工信息不存在"; 9 | } 10 | -------------------------------------------------------------------------------- /tj-auth/tj-auth-service/src/main/java/com/tianji/auth/mapper/RoleMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.auth.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.tianji.auth.domain.po.Role; 5 | 6 | /** 7 | *

8 | * 角色表 Mapper 接口 9 | *

10 | * 11 | * @author 虎哥 12 | * @since 2022-06-16 13 | */ 14 | public interface RoleMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-media/src/main/java/com/tianji/media/mapper/FileMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.media.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.tianji.media.domain.po.File; 5 | 6 | /** 7 | *

8 | * 文件表,可以是普通文件、图片等 Mapper 接口 9 | *

10 | * 11 | * @author 虎哥 12 | * @since 2022-06-30 13 | */ 14 | public interface FileMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-media/src/main/java/com/tianji/media/mapper/MediaMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.media.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.tianji.media.domain.po.Media; 5 | 6 | /** 7 | *

8 | * 媒资表,主要是视频文件 Mapper 接口 9 | *

10 | * 11 | * @author 虎哥 12 | * @since 2022-06-30 13 | */ 14 | public interface MediaMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-pay/tj-pay-api/src/main/java/com/tianji/pay/sdk/config/PayApiImportConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.tianji.pay.sdk.config; 2 | 3 | 4 | import org.springframework.cloud.openfeign.EnableFeignClients; 5 | import org.springframework.context.annotation.Configuration; 6 | 7 | @Configuration 8 | @EnableFeignClients(basePackages = "com.tianji.pay.sdk.client") 9 | public class PayApiImportConfiguration { 10 | 11 | } -------------------------------------------------------------------------------- /tj-learning/src/main/java/com/tianji/learning/domain/msg/SignInMessage.java: -------------------------------------------------------------------------------- 1 | package com.tianji.learning.domain.msg; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @Data 8 | @AllArgsConstructor(staticName = "of") 9 | @NoArgsConstructor 10 | public class SignInMessage { 11 | 12 | private Long userId; 13 | private Integer points; 14 | } 15 | -------------------------------------------------------------------------------- /tj-trade/src/main/java/com/tianji/trade/mapper/CartMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.trade.mapper; 2 | 3 | import com.tianji.trade.domain.po.Cart; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | /** 7 | *

8 | * 购物车条目信息,也就是购物车中的课程 Mapper 接口 9 | *

10 | * 11 | * @author 虎哥 12 | * @since 2022-08-28 13 | */ 14 | public interface CartMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-api/src/main/java/com/tianji/api/dto/sms/SmsInfoDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.api.dto.sms; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import lombok.Data; 5 | 6 | import java.util.Map; 7 | 8 | @Data 9 | @ApiModel(description = "短信发送参数") 10 | public class SmsInfoDTO { 11 | private String templateCode; 12 | private Iterable phones; 13 | private Map templateParams; 14 | } 15 | -------------------------------------------------------------------------------- /tj-learning/src/main/java/com/tianji/learning/constants/RedisConstants.java: -------------------------------------------------------------------------------- 1 | package com.tianji.learning.constants; 2 | 3 | public interface RedisConstants { 4 | 5 | /** 6 | * 签到记录的key的前缀 完整的key为:sign:uid:用户id:年月 7 | */ 8 | String SIGN_RECORD_KEY_PREFIX = "sign:uid:"; 9 | 10 | /** 11 | * 积分排行榜key前缀 完整格式为 boards:年月 12 | */ 13 | String POINTS_BOARD_KEY_PREFIX = "boards:"; 14 | } 15 | -------------------------------------------------------------------------------- /tj-pay/tj-pay-service/src/main/java/com/tianji/pay/mapper/PayOrderMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.pay.mapper; 2 | 3 | import com.tianji.pay.domain.po.PayOrder; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | /** 7 | *

8 | * 支付订单 Mapper 接口 9 | *

10 | * 11 | * @author 虎哥 12 | * @since 2022-08-26 13 | */ 14 | public interface PayOrderMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-search/src/main/java/com/tianji/search/service/ICourseService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.search.service; 2 | 3 | import java.util.List; 4 | 5 | public interface ICourseService { 6 | 7 | void handleCourseDelete(Long courseId); 8 | 9 | void handleCourseUp(Long courseId); 10 | 11 | void updateCourseSold(List courseId, int amount); 12 | 13 | void handleCourseDeletes(List courseIds); 14 | } 15 | -------------------------------------------------------------------------------- /tj-auth/tj-auth-service/src/main/java/com/tianji/auth/mapper/RoleMenuMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.auth.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.tianji.auth.domain.po.RoleMenu; 5 | 6 | /** 7 | *

8 | * 账户、角色关联表 Mapper 接口 9 | *

10 | * 11 | * @author 虎哥 12 | * @since 2022-06-16 13 | */ 14 | public interface RoleMenuMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/java/com/tianji/message/thirdparty/ali/AliProperties.java: -------------------------------------------------------------------------------- 1 | package com.tianji.message.thirdparty.ali; 2 | 3 | import lombok.Data; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | 6 | @Data 7 | @ConfigurationProperties(prefix = "tj.sms.ali") 8 | public class AliProperties { 9 | private String accessId; 10 | private String accessSecret; 11 | } 12 | -------------------------------------------------------------------------------- /tj-pay/tj-pay-service/src/main/java/com/tianji/pay/mapper/PayChannelMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.pay.mapper; 2 | 3 | import com.tianji.pay.domain.po.PayChannel; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | /** 7 | *

8 | * 支付渠道 Mapper 接口 9 | *

10 | * 11 | * @author 虎哥 12 | * @since 2022-08-26 13 | */ 14 | public interface PayChannelMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-stock/src/test/java/test.java: -------------------------------------------------------------------------------- 1 | import com.tianji.common.utils.DateUtils; 2 | import org.junit.jupiter.api.Test; 3 | 4 | import java.time.LocalDateTime; 5 | 6 | public class test { 7 | 8 | @Test 9 | public void test(){ 10 | LocalDateTime now = LocalDateTime.now(); 11 | long epochMilli = DateUtils.toEpochMilli(now); 12 | System.out.println("epochMilli = " + epochMilli); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /tj-exam/src/main/java/com/tianji/exam/mapper/QuestionDetailMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.exam.mapper; 2 | 3 | import com.tianji.exam.domain.po.QuestionDetail; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | /** 7 | *

8 | * 题目 Mapper 接口 9 | *

10 | * 11 | * @author 虎哥 12 | * @since 2022-09-02 13 | */ 14 | public interface QuestionDetailMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-exam/src/main/java/com/tianji/exam/service/IQuestionDetailService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.exam.service; 2 | 3 | import com.tianji.exam.domain.po.QuestionDetail; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | 6 | /** 7 | *

8 | * 题目 服务类 9 | *

10 | * 11 | * @author 虎哥 12 | * @since 2022-09-02 13 | */ 14 | public interface IQuestionDetailService extends IService { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-pay/tj-pay-service/src/main/java/com/tianji/pay/mapper/RefundOrderMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.pay.mapper; 2 | 3 | import com.tianji.pay.domain.po.RefundOrder; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | /** 7 | *

8 | * 退款订单 Mapper 接口 9 | *

10 | * 11 | * @author 虎哥 12 | * @since 2022-08-26 13 | */ 14 | public interface RefundOrderMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-pay/tj-pay-service/src/main/java/com/tianji/pay/third/CommonPayProperties.java: -------------------------------------------------------------------------------- 1 | package com.tianji.pay.third; 2 | 3 | import lombok.Data; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | import org.springframework.stereotype.Component; 6 | 7 | @Data 8 | @Component 9 | @ConfigurationProperties(prefix = "tj.pay") 10 | public class CommonPayProperties { 11 | private String notifyHost; 12 | } 13 | -------------------------------------------------------------------------------- /tj-remark/src/main/java/com/tianji/remark/mapper/LikedRecordMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.remark.mapper; 2 | 3 | import com.tianji.remark.domain.po.LikedRecord; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | /** 7 | *

8 | * 点赞记录表 Mapper 接口 9 | *

10 | * 11 | * @author sefy 12 | * @since 2024-05-01 13 | */ 14 | public interface LikedRecordMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-search/src/main/java/com/tianji/search/config/InterestsProperties.java: -------------------------------------------------------------------------------- 1 | package com.tianji.search.config; 2 | 3 | import lombok.Data; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | import org.springframework.stereotype.Component; 6 | 7 | @Data 8 | @Component 9 | @ConfigurationProperties(prefix = "tj.interests") 10 | public class InterestsProperties { 11 | private int topNumber; 12 | } 13 | -------------------------------------------------------------------------------- /tj-trade/src/main/java/com/tianji/trade/mapper/OrderMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.trade.mapper; 2 | 3 | import com.tianji.trade.domain.po.Order; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | /** 7 | *

8 | * 订单 Mapper 接口 9 | *

10 | * 11 | * @author 虎哥 12 | * @since 2022-08-29 13 | */ 14 | public interface OrderMapper extends BaseMapper { 15 | 16 | Order getById(Long id); 17 | } 18 | -------------------------------------------------------------------------------- /tj-search/src/main/java/com/tianji/search/mapper/InterestsMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.search.mapper; 2 | 3 | import com.tianji.search.domain.po.Interests; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | /** 7 | *

8 | * 用户兴趣表,保存感兴趣的二级分类id Mapper 接口 9 | *

10 | * 11 | * @author 虎哥 12 | * @since 2022-07-21 13 | */ 14 | public interface InterestsMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-auth/tj-auth-service/src/main/java/com/tianji/auth/mapper/AccountRoleMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.auth.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.tianji.auth.domain.po.AccountRole; 5 | 6 | /** 7 | *

8 | * 账户、角色关联表 Mapper 接口 9 | *

10 | * 11 | * @author 虎哥 12 | * @since 2022-06-16 13 | */ 14 | public interface AccountRoleMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-auth/tj-auth-service/src/main/java/com/tianji/auth/mapper/LoginRecordMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.auth.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.tianji.auth.domain.po.LoginRecord; 5 | 6 | /** 7 | *

8 | * 登录信息记录表 Mapper 接口 9 | *

10 | * 11 | * @author 虎哥 12 | * @since 2022-07-12 13 | */ 14 | public interface LoginRecordMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-auth/tj-auth-service/src/main/java/com/tianji/auth/service/IAccountRoleService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.auth.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.tianji.auth.domain.po.AccountRole; 5 | 6 | /** 7 | *

8 | * 账户、角色关联表 服务类 9 | *

10 | * 11 | * @author 虎哥 12 | * @since 2022-06-16 13 | */ 14 | public interface IAccountRoleService extends IService { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-learning/src/main/java/com/tianji/learning/mapper/PointsBoardMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.learning.mapper; 2 | 3 | import com.tianji.learning.domain.po.PointsBoard; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | /** 7 | *

8 | * 学霸天梯榜 Mapper 接口 9 | *

10 | * 11 | * @author sefy 12 | * @since 2024-05-04 13 | */ 14 | public interface PointsBoardMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-auth/tj-auth-service/src/main/java/com/tianji/auth/mapper/RolePrivilegeMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.auth.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.tianji.auth.domain.po.RolePrivilege; 5 | 6 | /** 7 | *

8 | * 账户、角色关联表 Mapper 接口 9 | *

10 | * 11 | * @author 虎哥 12 | * @since 2022-06-16 13 | */ 14 | public interface RolePrivilegeMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/java/com/tianji/message/enums/TemplateStatus.java: -------------------------------------------------------------------------------- 1 | package com.tianji.message.enums; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | @AllArgsConstructor 7 | @Getter 8 | public enum TemplateStatus { 9 | DRAFT(0, "草稿"), 10 | IN_SERVICE(1, "使用中"), 11 | OUT_OF_SERVICE(2, "停用"), 12 | ; 13 | 14 | private final int value; 15 | private final String desc; 16 | } 17 | -------------------------------------------------------------------------------- /tj-promotion/src/main/java/com/tianji/promotion/mapper/CouponScopeMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.promotion.mapper; 2 | 3 | import com.tianji.promotion.domain.po.CouponScope; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | /** 7 | *

8 | * 优惠券作用范围信息 Mapper 接口 9 | *

10 | * 11 | * @author sefy 12 | * @since 2024-05-15 13 | */ 14 | public interface CouponScopeMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-promotion/src/main/java/com/tianji/promotion/mapper/ExchangeCodeMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.promotion.mapper; 2 | 3 | import com.tianji.promotion.domain.po.ExchangeCode; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | /** 7 | *

8 | * 兑换码 Mapper 接口 9 | *

10 | * 11 | * @author sefy 12 | * @since 2024-05-15 13 | */ 14 | public interface ExchangeCodeMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-promotion/src/main/java/com/tianji/promotion/mapper/PromotionMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.promotion.mapper; 2 | 3 | import com.tianji.promotion.domain.po.Promotion; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | /** 7 | *

8 | * 促销活动,形式多种多样,例如:优惠券 Mapper 接口 9 | *

10 | * 11 | * @author sefy 12 | * @since 2024-05-15 13 | */ 14 | public interface PromotionMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-course/src/main/java/com/tianji/course/mapper/CourseCatalogueMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.course.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.tianji.course.domain.po.CourseCatalogue; 5 | 6 | /** 7 | *

8 | * 目录草稿 Mapper 接口 9 | *

10 | * 11 | * @author wusongsong 12 | * @since 2022-07-19 13 | */ 14 | public interface CourseCatalogueMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-learning/src/main/java/com/tianji/learning/mapper/LearningLessonMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.learning.mapper; 2 | 3 | import com.tianji.learning.domain.po.LearningLesson; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | /** 7 | *

8 | * 学生课程表 Mapper 接口 9 | *

10 | * 11 | * @author sefy 12 | * @since 2024-04-12 13 | */ 14 | public interface LearningLessonMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-learning/src/main/java/com/tianji/learning/mapper/LearningRecordMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.learning.mapper; 2 | 3 | import com.tianji.learning.domain.po.LearningRecord; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | /** 7 | *

8 | * 学习记录表 Mapper 接口 9 | *

10 | * 11 | * @author sefy 12 | * @since 2024-04-14 13 | */ 14 | public interface LearningRecordMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-learning/src/main/java/com/tianji/learning/mapper/PointsRecordMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.learning.mapper; 2 | 3 | import com.tianji.learning.domain.po.PointsRecord; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | /** 7 | *

8 | * 学习积分记录,每个月底清零 Mapper 接口 9 | *

10 | * 11 | * @author sefy 12 | * @since 2024-05-04 13 | */ 14 | public interface PointsRecordMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/java/com/tianji/message/constants/MessageErrorInfo.java: -------------------------------------------------------------------------------- 1 | package com.tianji.message.constants; 2 | 3 | public interface MessageErrorInfo { 4 | String NOTICE_TEMPLATE_CANNOT_USE = "通知模板已停用"; 5 | String NOTICE_TEMPLATE_NOT_EXISTS = "通知模板不存在"; 6 | String NOTICE_NOT_MESSAGE_TEMPLATE = "通知模板不是短信模板"; 7 | String PLATFORM_IS_EMPTY = "短信平台信息为空"; 8 | String NO_SUITABLE_TEMPLATE = "找不到可用的消息模板"; 9 | } 10 | -------------------------------------------------------------------------------- /tj-promotion/src/main/java/com/tianji/promotion/service/ICouponScopeService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.promotion.service; 2 | 3 | import com.tianji.promotion.domain.po.CouponScope; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | 6 | /** 7 | *

8 | * 优惠券作用范围信息 服务类 9 | *

10 | * 11 | * @author sefy 12 | * @since 2024-05-15 13 | */ 14 | public interface ICouponScopeService extends IService { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-promotion/src/main/java/com/tianji/promotion/service/IPromotionService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.promotion.service; 2 | 3 | import com.tianji.promotion.domain.po.Promotion; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | 6 | /** 7 | *

8 | * 促销活动,形式多种多样,例如:优惠券 服务类 9 | *

10 | * 11 | * @author sefy 12 | * @since 2024-05-15 13 | */ 14 | public interface IPromotionService extends IService { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-course/src/main/java/com/tianji/course/domain/vo/CourseCataIdVO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.course.domain.vo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | /** 8 | * 章节id 9 | * @author wusongsong 10 | * @since 2022/8/15 15:10 11 | * @version 1.0.0 12 | **/ 13 | @Data 14 | @AllArgsConstructor 15 | @NoArgsConstructor 16 | public class CourseCataIdVO { 17 | private Long id; 18 | } 19 | -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/java/com/tianji/message/mapper/PublicNoticeMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.message.mapper; 2 | 3 | import com.tianji.message.domain.po.PublicNotice; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | /** 7 | *

8 | * 公告消息模板 Mapper 接口 9 | *

10 | * 11 | * @author 虎哥 12 | * @since 2022-08-20 13 | */ 14 | public interface PublicNoticeMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/java/com/tianji/message/thirdparty/ISmsHandler.java: -------------------------------------------------------------------------------- 1 | package com.tianji.message.thirdparty; 2 | 3 | import com.tianji.api.dto.sms.SmsInfoDTO; 4 | import com.tianji.message.domain.po.MessageTemplate; 5 | 6 | /** 7 | * 第三方接口对接平台 8 | */ 9 | public interface ISmsHandler { 10 | 11 | /** 12 | * 发送短信 13 | */ 14 | void send(SmsInfoDTO platformSmsInfoDTO, MessageTemplate template); 15 | 16 | 17 | } 18 | -------------------------------------------------------------------------------- /tj-course/src/main/java/com/tianji/course/domain/po/SubjectUseNum.java: -------------------------------------------------------------------------------- 1 | package com.tianji.course.domain.po; 2 | 3 | import lombok.*; 4 | 5 | /** 6 | * @ClassName SubjectUseNum 7 | * @Author wusongsong 8 | * @Date 2022/9/20 17:37 9 | * @Version 10 | **/ 11 | @Data 12 | @EqualsAndHashCode 13 | @AllArgsConstructor 14 | @NoArgsConstructor 15 | @Builder 16 | public class SubjectUseNum { 17 | private Long id; 18 | private Integer num; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /tj-data/src/main/java/com/tianji/data/model/vo/EchartsVO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.data.model.vo; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * echartVO 9 | * @ClassName EchartsVO 10 | * @Author wusongsong 11 | * @Date 2022/10/10 10:52 12 | * @Version 13 | **/ 14 | @Data 15 | public class EchartsVO { 16 | private List xAxis; 17 | private List yAxis; 18 | private List series; 19 | } 20 | -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/java/com/tianji/message/mapper/NoticeTemplateMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.message.mapper; 2 | 3 | import com.tianji.message.domain.po.NoticeTemplate; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | /** 7 | *

8 | * 通知模板 Mapper 接口 9 | *

10 | * 11 | * @author 虎哥 12 | * @since 2022-08-20 13 | */ 14 | public interface NoticeTemplateMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-course/src/main/java/com/tianji/course/mapper/CourseContentMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.course.mapper; 2 | 3 | import com.tianji.course.domain.po.CourseContent; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | /** 7 | *

8 | * 课程内容,主要是一些大文本 Mapper 接口 9 | *

10 | * 11 | * @author wusongsong 12 | * @since 2022-07-21 13 | */ 14 | public interface CourseContentMapper extends BaseMapper { 15 | 16 | 17 | 18 | } 19 | -------------------------------------------------------------------------------- /tj-learning/src/main/java/com/tianji/learning/mapper/InteractionReplyMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.learning.mapper; 2 | 3 | import com.tianji.learning.domain.po.InteractionReply; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | /** 7 | *

8 | * 互动问题的回答或评论 Mapper 接口 9 | *

10 | * 11 | * @author sefy 12 | * @since 2024-04-19 13 | */ 14 | public interface InteractionReplyMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-course/src/main/java/com/tianji/course/domain/po/CataIdAndSubScore.java: -------------------------------------------------------------------------------- 1 | package com.tianji.course.domain.po; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 查询某个课程中练习对应的练习id和该练习对应的题目id 7 | * @author wusongsong 8 | * @since 2022/7/22 16:04 9 | * @version 1.0.0 10 | **/ 11 | @Data 12 | public class CataIdAndSubScore { 13 | //目录id 14 | private Long cataId; 15 | //题目id 16 | private Long subjectId; 17 | //题目对应的分 18 | private Integer score; 19 | } 20 | -------------------------------------------------------------------------------- /tj-learning/src/main/java/com/tianji/learning/mapper/InteractionQuestionMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.learning.mapper; 2 | 3 | import com.tianji.learning.domain.po.InteractionQuestion; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | /** 7 | *

8 | * 互动提问的问题表 Mapper 接口 9 | *

10 | * 11 | * @author sefy 12 | * @since 2024-04-19 13 | */ 14 | public interface InteractionQuestionMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/java/com/tianji/message/mapper/MessageTemplateMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.message.mapper; 2 | 3 | import com.tianji.message.domain.po.MessageTemplate; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | /** 7 | *

8 | * 第三方短信平台签名和模板信息 Mapper 接口 9 | *

10 | * 11 | * @author 虎哥 12 | * @since 2022-08-20 13 | */ 14 | public interface MessageTemplateMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/java/com/tianji/message/mapper/SmsThirdPlatformMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.message.mapper; 2 | 3 | import com.tianji.message.domain.po.SmsThirdPlatform; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | /** 7 | *

8 | * 第三方云通讯平台 Mapper 接口 9 | *

10 | * 11 | * @author 虎哥 12 | * @since 2022-08-20 13 | */ 14 | public interface SmsThirdPlatformMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-data/src/main/java/com/tianji/data/constants/RedisConstants.java: -------------------------------------------------------------------------------- 1 | package com.tianji.data.constants; 2 | 3 | /** 4 | * @ClassName RedisConstants 5 | * @Author wusongsong 6 | * @Date 2022/10/10 17:02 7 | * @Version 8 | **/ 9 | public class RedisConstants { 10 | 11 | public static final String KEY_BOARD_DATA = "DATA:BORAD:"; 12 | 13 | public static final String KEY_TOP10 = "DATA:TOP10:"; 14 | 15 | public static final String KEY_TODAY = "DATA:TODAY:"; 16 | } 17 | -------------------------------------------------------------------------------- /tj-user/src/main/java/com/tianji/user/service/IStaffService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.user.service; 2 | 3 | import com.tianji.common.domain.dto.PageDTO; 4 | import com.tianji.user.domain.query.UserPageQuery; 5 | import com.tianji.user.domain.vo.StaffVO; 6 | 7 | /** 8 | *

9 | * 员工详情表 服务类 10 | *

11 | * 12 | * @author 虎哥 13 | * @since 2022-07-12 14 | */ 15 | public interface IStaffService { 16 | PageDTO queryStaffPage(UserPageQuery pageQuery); 17 | } 18 | -------------------------------------------------------------------------------- /tj-learning/src/main/java/com/tianji/learning/utils/TableInfoContext.java: -------------------------------------------------------------------------------- 1 | package com.tianji.learning.utils; 2 | 3 | public class TableInfoContext { 4 | private static final ThreadLocal TL = new ThreadLocal<>(); 5 | 6 | public static void setInfo(String info) { 7 | TL.set(info); 8 | } 9 | 10 | public static String getInfo() { 11 | return TL.get(); 12 | } 13 | 14 | public static void remove() { 15 | TL.remove(); 16 | } 17 | } -------------------------------------------------------------------------------- /tj-pay/tj-pay-service/src/main/java/com/tianji/pay/service/INotifyService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.pay.service; 2 | 3 | import com.wechat.pay.contrib.apache.httpclient.notification.NotificationRequest; 4 | 5 | import java.util.Map; 6 | 7 | public interface INotifyService { 8 | void handleWxPayNotify(NotificationRequest request); 9 | 10 | void handleWxPayRefundNotify(NotificationRequest request); 11 | 12 | void handleAliPayNotify(Map request); 13 | } 14 | -------------------------------------------------------------------------------- /tj-trade/src/main/java/com/tianji/trade/domain/dto/CartsAddDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.trade.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | import javax.validation.constraints.NotNull; 8 | 9 | @Data 10 | @ApiModel(description = "课程加入购物车") 11 | public class CartsAddDTO { 12 | @ApiModelProperty("要加入购物车的课程id") 13 | @NotNull(message = "课程id不能为空") 14 | private Long courseId; 15 | } -------------------------------------------------------------------------------- /tj-data/src/main/java/com/tianji/data/utils/DataUtils.java: -------------------------------------------------------------------------------- 1 | package com.tianji.data.utils; 2 | 3 | import com.tianji.common.utils.DateUtils; 4 | import lombok.extern.slf4j.Slf4j; 5 | 6 | /** 7 | * @ClassName DataUtils 8 | * @Author wusongsong 9 | * @Date 2022/10/10 19:40 10 | * @Version 11 | **/ 12 | @Slf4j 13 | public class DataUtils { 14 | 15 | public static int getVersion(int totalVersion) { 16 | return DateUtils.now().getDayOfMonth() % totalVersion; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/java/com/tianji/message/enums/NoticeType.java: -------------------------------------------------------------------------------- 1 | package com.tianji.message.enums; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | @AllArgsConstructor 7 | @Getter 8 | public enum NoticeType { 9 | SYSTEM(0, "系统通知"), 10 | NOTE(1, "笔记通知"), 11 | QA(2, "问答通知"), 12 | OTHER(3, "其它通知"), 13 | PRIVATE_MESSAGE(4, "私信"), 14 | ; 15 | 16 | private final int value; 17 | private final String desc; 18 | } 19 | -------------------------------------------------------------------------------- /tj-search/src/main/java/com/tianji/search/enums/CourseStatus.java: -------------------------------------------------------------------------------- 1 | package com.tianji.search.enums; 2 | 3 | import lombok.Getter; 4 | 5 | @Getter 6 | public enum CourseStatus { 7 | NOT_READY(1, "待上架"), 8 | ON_THE_MARKET(2, "已上架"), 9 | NO_LONGER_BE_SOLD(3, "下架"), 10 | EXPIRED(4, "已完结"); 11 | ; 12 | int value; 13 | String desc; 14 | 15 | CourseStatus(int value, String desc) { 16 | this.value = value; 17 | this.desc = desc; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /tj-trade/src/main/java/com/tianji/trade/domain/dto/RefundCancelDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.trade.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | @ApiModel(description = "退款取消") 8 | @Data 9 | public class RefundCancelDTO { 10 | @ApiModelProperty("退款申请id,订单明细id和退款申请id二选一") 11 | private Long id; 12 | @ApiModelProperty("订单明细id,订单明细id和退款申请id二选一") 13 | private Long orderDetailId; 14 | } -------------------------------------------------------------------------------- /tj-data/src/main/java/com/tianji/data/model/po/CourseInfo.java: -------------------------------------------------------------------------------- 1 | package com.tianji.data.model.po; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * @ClassName CourseInfo 9 | * @Author wusongsong 10 | * @Date 2022/10/10 19:33 11 | * @Version 12 | **/ 13 | @Data 14 | public class CourseInfo implements Serializable { 15 | private String category; 16 | private String name; 17 | private Integer newStuNum; 18 | private Double orderAmount; 19 | } 20 | -------------------------------------------------------------------------------- /tj-auth/tj-auth-service/src/main/java/com/tianji/auth/service/IAccountService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.auth.service; 2 | 3 | import com.tianji.api.dto.user.LoginFormDTO; 4 | 5 | /** 6 | *

7 | * 账号表,平台内所有用户的账号、密码信息 服务类 8 | *

9 | * 10 | * @author 虎哥 11 | * @since 2022-06-16 12 | */ 13 | public interface IAccountService{ 14 | 15 | String login(LoginFormDTO loginFormDTO, boolean isStaff); 16 | 17 | void logout(); 18 | 19 | String refreshToken(String refreshToken); 20 | } 21 | -------------------------------------------------------------------------------- /tj-data/src/main/java/com/tianji/data/model/vo/Top10DataVO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.data.model.vo; 2 | 3 | import com.tianji.data.model.po.CourseInfo; 4 | import lombok.Data; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * @ClassName Top10DataVO 10 | * @Author wusongsong 11 | * @Date 2022/10/10 19:33 12 | * @Version 13 | **/ 14 | @Data 15 | public class Top10DataVO { 16 | // 热门课程 17 | private List hot; 18 | // 热销课程 19 | private List hotSales; 20 | } 21 | -------------------------------------------------------------------------------- /tj-media/src/main/java/com/tianji/media/config/PlatformProperties.java: -------------------------------------------------------------------------------- 1 | package com.tianji.media.config; 2 | 3 | import com.tianji.media.enums.Platform; 4 | import lombok.Data; 5 | import org.springframework.boot.context.properties.ConfigurationProperties; 6 | import org.springframework.stereotype.Component; 7 | 8 | @Data 9 | @Component 10 | @ConfigurationProperties(prefix = "tj.platform") 11 | public class PlatformProperties { 12 | private Platform file; 13 | private Platform media; 14 | } 15 | -------------------------------------------------------------------------------- /tj-media/src/main/java/com/tianji/media/enums/FilePlatform.java: -------------------------------------------------------------------------------- 1 | package com.tianji.media.enums; 2 | 3 | import com.baomidou.mybatisplus.annotation.EnumValue; 4 | import lombok.Getter; 5 | 6 | @Getter 7 | public enum FilePlatform { 8 | TENCENT(1, "/img-tx/"), 9 | ALI(2, "/img-ali/"), 10 | ; 11 | @EnumValue 12 | int value; 13 | String path; 14 | 15 | FilePlatform(int value, String path) { 16 | this.value = value; 17 | this.path = path; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/java/com/tianji/message/mapper/UserInboxMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.message.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.tianji.message.domain.po.UserInbox; 5 | 6 | /** 7 | *

8 | * 用户通知记录 Mapper 接口 9 | *

10 | * 11 | * @author 虎哥 12 | * @since 2022-08-20 13 | */ 14 | public interface UserInboxMapper extends BaseMapper { 15 | 16 | UserInbox queryLatestPublicNotice(Long userId); 17 | } 18 | -------------------------------------------------------------------------------- /tj-user/src/main/java/com/tianji/user/service/ITeacherService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.user.service; 2 | 3 | import com.tianji.common.domain.dto.PageDTO; 4 | import com.tianji.user.domain.query.UserPageQuery; 5 | import com.tianji.user.domain.vo.TeacherPageVO; 6 | 7 | /** 8 | *

9 | * 教师详情表 服务类 10 | *

11 | * 12 | * @author 虎哥 13 | * @since 2022-07-12 14 | */ 15 | public interface ITeacherService{ 16 | PageDTO queryTeacherPage(UserPageQuery pageQuery); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /tj-promotion/src/main/java/com/tianji/promotion/controller/CouponScopeController.java: -------------------------------------------------------------------------------- 1 | package com.tianji.promotion.controller; 2 | 3 | 4 | import org.springframework.web.bind.annotation.RequestMapping; 5 | 6 | import org.springframework.web.bind.annotation.RestController; 7 | 8 | /** 9 | *

10 | * 优惠券作用范围信息 前端控制器 11 | *

12 | * 13 | * @author sefy 14 | * @since 2024-05-15 15 | */ 16 | @RestController 17 | @RequestMapping("/coupon-scope") 18 | public class CouponScopeController { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /tj-promotion/src/main/java/com/tianji/promotion/controller/ExchangeCodeController.java: -------------------------------------------------------------------------------- 1 | package com.tianji.promotion.controller; 2 | 3 | 4 | import org.springframework.web.bind.annotation.RequestMapping; 5 | 6 | import org.springframework.web.bind.annotation.RestController; 7 | 8 | /** 9 | *

10 | * 兑换码 前端控制器 11 | *

12 | * 13 | * @author sefy 14 | * @since 2024-05-15 15 | */ 16 | @RestController 17 | @RequestMapping("/exchange-code") 18 | public class ExchangeCodeController { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /tj-search/src/main/java/com/tianji/search/domain/vo/InterestCategoryVO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.search.domain.vo; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | @Data 8 | @ApiModel(description = "感兴趣的分类") 9 | public class InterestCategoryVO { 10 | @ApiModelProperty(value = "分类id", example = "1") 11 | private Long id; 12 | @ApiModelProperty(value = "分类名称", example = "Java") 13 | private String name; 14 | } 15 | -------------------------------------------------------------------------------- /tj-promotion/src/main/java/com/tianji/promotion/controller/PromotionController.java: -------------------------------------------------------------------------------- 1 | package com.tianji.promotion.controller; 2 | 3 | 4 | import org.springframework.web.bind.annotation.RequestMapping; 5 | 6 | import org.springframework.web.bind.annotation.RestController; 7 | 8 | /** 9 | *

10 | * 促销活动,形式多种多样,例如:优惠券 前端控制器 11 | *

12 | * 13 | * @author sefy 14 | * @since 2024-05-15 15 | */ 16 | @RestController 17 | @RequestMapping("/promotion") 18 | public class PromotionController { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /tj-data/src/main/java/com/tianji/data/model/po/TodayDataInfo.java: -------------------------------------------------------------------------------- 1 | package com.tianji.data.model.po; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @ClassName TodayDataVO 7 | * @Author wusongsong 8 | * @Date 2022/10/13 9:23 9 | * @Version 10 | **/ 11 | @Data 12 | public class TodayDataInfo { 13 | //访问量,万次单位 14 | private Double visits; 15 | //今日订单金额,万元单位 16 | private Double orderAmount; 17 | //今日订单笔数 18 | private Integer orderNum; 19 | //今日新增学员数 20 | private Integer stuNewNum; 21 | } 22 | -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/java/com/tianji/message/domain/query/UserInboxQuery.java: -------------------------------------------------------------------------------- 1 | package com.tianji.message.domain.query; 2 | 3 | import com.tianji.common.domain.query.PageQuery; 4 | import io.swagger.annotations.ApiModel; 5 | import lombok.Data; 6 | import lombok.EqualsAndHashCode; 7 | 8 | @EqualsAndHashCode(callSuper = true) 9 | @ApiModel(description = "通知模板查询对象") 10 | @Data 11 | public class UserInboxQuery extends PageQuery { 12 | private Boolean isRead; 13 | private Integer type; 14 | } 15 | -------------------------------------------------------------------------------- /tj-trade/src/main/java/com/tianji/trade/service/IPayService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.trade.service; 2 | 3 | import com.tianji.trade.domain.dto.OrderDelayQueryDTO; 4 | import com.tianji.trade.domain.dto.PayApplyFormDTO; 5 | import com.tianji.trade.domain.vo.PayChannelVO; 6 | 7 | import java.util.List; 8 | 9 | public interface IPayService { 10 | List queryPayChannels(); 11 | 12 | String applyPayOrder(PayApplyFormDTO payApply); 13 | 14 | void queryPayResult(OrderDelayQueryDTO message); 15 | } 16 | -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/exceptions/DbException.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.exceptions; 2 | 3 | /** 4 | * 数据库异常 5 | **/ 6 | public class DbException extends CommonException{ 7 | public DbException(String message) { 8 | super(message); 9 | } 10 | 11 | public DbException(int code, String message) { 12 | super(code, message); 13 | } 14 | 15 | public DbException(int code, String message, Throwable cause) { 16 | super(code, message, cause); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /tj-promotion/src/main/java/com/tianji/promotion/domain/dto/UserCouponDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.promotion.domain.dto; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class UserCouponDTO { 7 | 8 | /** 9 | * 商家id 10 | */ 11 | private Long creater; 12 | 13 | /** 14 | * 用户id 15 | */ 16 | private Long userId; 17 | /** 18 | * 优惠券id 19 | */ 20 | private Long couponId; 21 | 22 | /** 23 | * 兑换码序列号id 24 | */ 25 | private Integer exchangeCodeId; 26 | } 27 | -------------------------------------------------------------------------------- /tj-trade/src/main/java/com/tianji/trade/domain/dto/PayApplyFormDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.trade.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | @ApiModel(description = "支付申请信息") 8 | @Data 9 | public class PayApplyFormDTO { 10 | @ApiModelProperty(value = "订单id",required = true) 11 | private Long orderId; 12 | @ApiModelProperty(value = "支付渠道码,wxPay,aliPay",required = true) 13 | private String payChannelCode; 14 | } -------------------------------------------------------------------------------- /tj-media/src/main/java/com/tianji/media/domain/vo/VideoPlayVO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.media.domain.vo; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | @Data 8 | @ApiModel(description = "视频播放的签名信息") 9 | public class VideoPlayVO { 10 | @ApiModelProperty(value = "视频唯一标示", example = "12412534535143242") 11 | private String fileId; 12 | @ApiModelProperty(value = "视频封面", example = "xxx.xxx.xxx") 13 | private String signature; 14 | } 15 | -------------------------------------------------------------------------------- /tj-learning/src/main/java/com/tianji/learning/domain/vo/PointsBoardItemVO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.learning.domain.vo; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | @Data 8 | @ApiModel(description = "积分榜单信息") 9 | public class PointsBoardItemVO { 10 | @ApiModelProperty("积分值") 11 | private Integer points; 12 | @ApiModelProperty("名次") 13 | private Integer rank; 14 | @ApiModelProperty("学生姓名") 15 | private String name; 16 | } 17 | -------------------------------------------------------------------------------- /tj-api/src/main/java/com/tianji/api/dto/course/CataSimpleInfoDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.api.dto.course; 2 | 3 | import io.swagger.annotations.ApiModelProperty; 4 | import lombok.Data; 5 | 6 | /** 7 | * @author wusongsong 8 | * @since 2022/7/27 14:22 9 | * @version 1.0.0 10 | **/ 11 | @Data 12 | public class CataSimpleInfoDTO { 13 | @ApiModelProperty("目录id") 14 | private Long id; 15 | @ApiModelProperty("目录名称") 16 | private String name; 17 | @ApiModelProperty("数字序号,不包含章序号") 18 | private Integer cIndex; 19 | } 20 | -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/utils/ByteUtils.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.utils; 2 | 3 | import cn.hutool.core.util.ByteUtil; 4 | 5 | public class ByteUtils extends ByteUtil { 6 | 7 | /** 8 | * 将byte[] 数组转换成字符串,如果为空返回 "" 9 | * @param content 字节内容 10 | * @return 字符串值 11 | */ 12 | public static String parse(byte[] content){ 13 | if(content == null || content.length <= 0) { 14 | return StringUtils.EMPTY; 15 | } 16 | return new String(content); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /tj-media/src/main/java/com/tianji/media/domain/query/MediaQuery.java: -------------------------------------------------------------------------------- 1 | package com.tianji.media.domain.query; 2 | 3 | import com.tianji.common.domain.query.PageQuery; 4 | import io.swagger.annotations.ApiModel; 5 | import io.swagger.annotations.ApiModelProperty; 6 | import lombok.Data; 7 | import lombok.EqualsAndHashCode; 8 | 9 | @EqualsAndHashCode(callSuper = true) 10 | @Data 11 | @ApiModel(description = "媒资搜索条件") 12 | public class MediaQuery extends PageQuery { 13 | @ApiModelProperty("媒资名称关键字") 14 | private String name; 15 | } 16 | -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/java/com/tianji/message/domain/query/NoticeTemplatePageQuery.java: -------------------------------------------------------------------------------- 1 | package com.tianji.message.domain.query; 2 | 3 | import com.tianji.common.domain.query.PageQuery; 4 | import io.swagger.annotations.ApiModel; 5 | import lombok.Data; 6 | import lombok.EqualsAndHashCode; 7 | 8 | @EqualsAndHashCode(callSuper = true) 9 | @ApiModel(description = "通知模板查询对象") 10 | @Data 11 | public class NoticeTemplatePageQuery extends PageQuery { 12 | private Integer status; 13 | private String keyword; 14 | } 15 | -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/java/com/tianji/message/domain/query/SmsThirdPlatformPageQuery.java: -------------------------------------------------------------------------------- 1 | package com.tianji.message.domain.query; 2 | 3 | import com.tianji.common.domain.query.PageQuery; 4 | import io.swagger.annotations.ApiModel; 5 | import lombok.Data; 6 | import lombok.EqualsAndHashCode; 7 | 8 | @EqualsAndHashCode(callSuper = true) 9 | @ApiModel(description = "通知模板查询对象") 10 | @Data 11 | public class SmsThirdPlatformPageQuery extends PageQuery { 12 | private Integer status; 13 | private String keyword; 14 | } 15 | -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/java/com/tianji/message/config/MessageProperties.java: -------------------------------------------------------------------------------- 1 | package com.tianji.message.config; 2 | 3 | import lombok.Data; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | 6 | @Data 7 | @ConfigurationProperties(prefix = "tj.message") 8 | public class MessageProperties { 9 | /** 10 | * 通知的最大有效期,默认1个月 11 | */ 12 | private Integer noticeTtlMonths = 1; 13 | /** 14 | * 私信的最大有效期,默认6个月 15 | */ 16 | private Integer messageTtlMonths = 6; 17 | } 18 | -------------------------------------------------------------------------------- /tj-auth/tj-auth-resource-sdk/src/main/java/com/tianji/authsdk/resource/config/ResourceAuthProperties.java: -------------------------------------------------------------------------------- 1 | package com.tianji.authsdk.resource.config; 2 | 3 | import lombok.Data; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | 6 | import java.util.List; 7 | 8 | @Data 9 | @ConfigurationProperties(prefix = "tj.auth.resource") 10 | public class ResourceAuthProperties { 11 | private Boolean enable = false; 12 | private List includeLoginPaths; 13 | private List excludeLoginPaths; 14 | } 15 | -------------------------------------------------------------------------------- /tj-auth/tj-auth-service/src/main/java/com/tianji/auth/service/ILoginRecordService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.auth.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.tianji.auth.domain.po.LoginRecord; 5 | 6 | /** 7 | *

8 | * 登录信息记录表 服务类 9 | *

10 | * 11 | * @author 虎哥 12 | * @since 2022-07-12 13 | */ 14 | public interface ILoginRecordService extends IService { 15 | 16 | void saveAsync(LoginRecord record); 17 | 18 | void loginSuccess(String cellphone, Long userId); 19 | } 20 | -------------------------------------------------------------------------------- /tj-trade/src/main/java/com/tianji/trade/domain/query/OrderPageQuery.java: -------------------------------------------------------------------------------- 1 | package com.tianji.trade.domain.query; 2 | 3 | import com.tianji.common.domain.query.PageQuery; 4 | import io.swagger.annotations.ApiModel; 5 | import io.swagger.annotations.ApiModelProperty; 6 | import lombok.Data; 7 | import lombok.EqualsAndHashCode; 8 | 9 | @EqualsAndHashCode(callSuper = true) 10 | @Data 11 | @ApiModel(description = "订单分页查询条件") 12 | public class OrderPageQuery extends PageQuery { 13 | @ApiModelProperty("订单状态") 14 | private Integer status; 15 | } 16 | -------------------------------------------------------------------------------- /tj-course/src/main/java/com/tianji/course/domain/dto/CourseSimpleInfoListDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.course.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModelProperty; 4 | import lombok.Data; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * @author wusongsong 10 | * @since 2022/7/26 9:26 11 | * @version 1.0.0 12 | **/ 13 | @Data 14 | public class CourseSimpleInfoListDTO { 15 | 16 | @ApiModelProperty("三级分类id列表") 17 | private List thirdCataIds; 18 | 19 | @ApiModelProperty("课程id列表") 20 | private List ids; 21 | } 22 | -------------------------------------------------------------------------------- /tj-data/src/main/java/com/tianji/data/model/dto/TodayDataDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.data.model.dto; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @ClassName TodayDataVO 7 | * @Author wusongsong 8 | * @Date 2022/10/13 9:23 9 | * @Version 10 | **/ 11 | @Data 12 | public class TodayDataDTO { 13 | private Integer version; 14 | //访问量,万次单位 15 | private Double visits; 16 | //今日订单金额,万元单位 17 | private Double orderAmount; 18 | //今日订单笔数 19 | private Integer orderNum; 20 | //今日新增学员数 21 | private Integer stuNewNum; 22 | } 23 | -------------------------------------------------------------------------------- /tj-data/src/main/java/com/tianji/data/service/TodayDataService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.data.service; 2 | 3 | 4 | import com.tianji.data.model.dto.TodayDataDTO; 5 | import com.tianji.data.model.vo.TodayDataVO; 6 | 7 | /** 8 | * @author wusongsong 9 | * @since 2022/10/13 9:27 10 | **/ 11 | public interface TodayDataService { 12 | 13 | /** 14 | * 获取今日数据 15 | * @return 16 | */ 17 | TodayDataVO get(); 18 | 19 | /** 20 | * 设置今日数据 21 | * @param todayDataDTO 22 | */ 23 | void set(TodayDataDTO todayDataDTO); 24 | } -------------------------------------------------------------------------------- /tj-learning/src/main/java/com/tianji/learning/domain/vo/PointsStatisticsVO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.learning.domain.vo; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | @Data 8 | @ApiModel(description = "每日积分统计实体") 9 | public class PointsStatisticsVO { 10 | @ApiModelProperty("获取积分方式") 11 | private String type; 12 | @ApiModelProperty("今日已获取积分值") 13 | private Integer points; 14 | @ApiModelProperty("单日积分上限") 15 | private Integer maxPoints; 16 | } 17 | -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/java/com/tianji/message/service/ISmsService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.message.service; 2 | 3 | import com.tianji.api.dto.sms.SmsInfoDTO; 4 | import com.tianji.api.dto.user.UserDTO; 5 | import com.tianji.message.domain.po.NoticeTemplate; 6 | 7 | import java.util.List; 8 | 9 | public interface ISmsService { 10 | void sendMessageByTemplate(NoticeTemplate noticeTemplate, List users); 11 | 12 | void sendMessage(SmsInfoDTO smsInfoDTO); 13 | 14 | void sendMessageAsync(SmsInfoDTO smsInfoDTO); 15 | } 16 | -------------------------------------------------------------------------------- /tj-api/src/main/java/com/tianji/api/dto/leanring/LearningRecordDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.api.dto.leanring; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | @Data 8 | @ApiModel(description = "小节信息及学习进度") 9 | public class LearningRecordDTO { 10 | @ApiModelProperty("对应节的id") 11 | private Long sectionId; 12 | @ApiModelProperty("视频的当前观看时长,单位秒") 13 | private Integer moment; 14 | @ApiModelProperty("是否完成学习,默认false") 15 | private Boolean finished; 16 | } 17 | -------------------------------------------------------------------------------- /tj-trade/src/main/java/com/tianji/trade/domain/vo/OrderProgressNodeVO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.trade.domain.vo; 2 | 3 | import io.swagger.annotations.ApiModelProperty; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.time.LocalDateTime; 9 | 10 | @Data 11 | @AllArgsConstructor 12 | @NoArgsConstructor 13 | public class OrderProgressNodeVO { 14 | @ApiModelProperty("订单进度节点名称") 15 | private String name; 16 | @ApiModelProperty("订单进度节点名称对应的时间") 17 | private LocalDateTime time; 18 | } -------------------------------------------------------------------------------- /tj-auth/tj-auth-service/src/main/java/com/tianji/auth/service/IRoleService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.auth.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.tianji.auth.domain.po.Role; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | *

10 | * 角色表 服务类 11 | *

12 | * 13 | * @author 虎哥 14 | * @since 2022-06-16 15 | */ 16 | public interface IRoleService extends IService { 17 | 18 | boolean exists(Long roleId); 19 | boolean exists(List roleIds); 20 | 21 | void deleteRole(Long id); 22 | } 23 | -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/exceptions/BizIllegalException.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.exceptions; 2 | 3 | /** 4 | * 业务不合法异常 5 | **/ 6 | public class BizIllegalException extends CommonException{ 7 | public BizIllegalException(String message) { 8 | super(message); 9 | } 10 | 11 | public BizIllegalException(int code, String message) { 12 | super(code, message); 13 | } 14 | 15 | public BizIllegalException(int code, String message, Throwable cause) { 16 | super(code, message, cause); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/utils/ReflectUtils.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.utils; 2 | 3 | import cn.hutool.core.util.ReflectUtil; 4 | 5 | /** 6 | * 反射工具 7 | **/ 8 | public class ReflectUtils extends ReflectUtil { 9 | 10 | /** 11 | * 判断一个类中是否含有指定字段 12 | * 13 | * @param fieldName 指定字段名称 14 | * @param clazz 类class 15 | * @return 是否包含 true/false 16 | */ 17 | public static boolean containField(String fieldName, Class clazz) { 18 | return getField(clazz, fieldName) != null; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /tj-auth/tj-auth-service/src/main/java/com/tianji/auth/service/IRoleMenuService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.auth.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.tianji.auth.domain.po.RoleMenu; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | *

10 | * 账户、角色关联表 服务类 11 | *

12 | * 13 | * @author 虎哥 14 | * @since 2022-06-16 15 | */ 16 | public interface IRoleMenuService extends IService { 17 | 18 | void removeByRoleId(Long id); 19 | 20 | void deleteRoleMenus(Long roleId, List menuIds); 21 | } 22 | -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/domain/dto/IdNameDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | 9 | @Data 10 | @ApiModel(description = "id和name键值对") 11 | @NoArgsConstructor 12 | @AllArgsConstructor 13 | public class IdNameDTO { 14 | @ApiModelProperty("id") 15 | private Long id; 16 | @ApiModelProperty("name") 17 | private String name; 18 | } 19 | -------------------------------------------------------------------------------- /tj-auth/tj-auth-service/src/main/java/com/tianji/auth/mapper/MenuMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.auth.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.tianji.auth.domain.po.Menu; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | *

11 | * 权限表,包括菜单权限和访问路径权限 Mapper 接口 12 | *

13 | * 14 | * @author 虎哥 15 | * @since 2022-06-16 16 | */ 17 | public interface MenuMapper extends BaseMapper { 18 | 19 | List listByRoles(@Param("roleIds") List roleIds); 20 | } 21 | -------------------------------------------------------------------------------- /tj-pay/tj-pay-domain/src/main/java/com/tianji/pay/sdk/constants/PayType.java: -------------------------------------------------------------------------------- 1 | package com.tianji.pay.sdk.constants; 2 | 3 | import com.tianji.common.enums.BaseEnum; 4 | import lombok.Getter; 5 | 6 | @Getter 7 | public enum PayType implements BaseEnum { 8 | JSAPI(1, "网页支付JS"), 9 | MINI_APP(2, "小程序支付"), 10 | APP(3, "APP支付"), 11 | NATIVE(4, "扫码支付"), 12 | ; 13 | private final int value; 14 | private final String desc; 15 | 16 | PayType(int value, String desc) { 17 | this.value = value; 18 | this.desc = desc; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /tj-user/src/main/java/com/tianji/user/config/SecurityConfig.java: -------------------------------------------------------------------------------- 1 | package com.tianji.user.config; 2 | 3 | import org.springframework.context.annotation.Bean; 4 | import org.springframework.context.annotation.Configuration; 5 | import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; 6 | import org.springframework.security.crypto.password.PasswordEncoder; 7 | 8 | @Configuration 9 | public class SecurityConfig { 10 | 11 | @Bean 12 | public PasswordEncoder passwordEncoder(){ 13 | return new BCryptPasswordEncoder(); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tj-user/src/main/java/com/tianji/user/constants/UserConstants.java: -------------------------------------------------------------------------------- 1 | package com.tianji.user.constants; 2 | 3 | import java.time.Duration; 4 | 5 | public interface UserConstants { 6 | String DEFAULT_PASSWORD = "123456"; 7 | 8 | Long STUDENT_ROLE_ID = 2L; 9 | String STUDENT_ROLE_NAME = "学生"; 10 | 11 | Long TEACHER_ROLE_ID = 3L; 12 | String TEACHER_ROLE_NAME = "教师"; 13 | 14 | // 验证码的Redis key前缀 15 | String USER_VERIFY_CODE_KEY = "sms:user:code:phone:"; 16 | // 验证码有效期,5分钟 17 | Duration USER_VERIFY_CODE_TTL = Duration.ofMinutes(5); 18 | } 19 | -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/exceptions/SentinelException.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.exceptions; 2 | 3 | /** 4 | * sentinel限流、熔断等规则的异常 5 | */ 6 | public class SentinelException extends CommonException{ 7 | 8 | 9 | public SentinelException(String message) { 10 | super(message); 11 | } 12 | public SentinelException(int code, String message) { 13 | super(code, message); 14 | } 15 | 16 | public SentinelException(int code, String message, Throwable cause) { 17 | super(code, message, cause); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/validate/annotations/ParamChecker.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.validate.annotations; 2 | 3 | /** 4 | * 接口方法参数校验器 5 | * @ClassName ParamChecker 6 | * @author wusongsong 7 | * @since 2022/7/10 13:24 8 | * @version 1.0.0 9 | **/ 10 | import java.lang.annotation.ElementType; 11 | import java.lang.annotation.Retention; 12 | import java.lang.annotation.RetentionPolicy; 13 | import java.lang.annotation.Target; 14 | 15 | @Retention(RetentionPolicy.RUNTIME) 16 | @Target(ElementType.METHOD) 17 | public @interface ParamChecker { 18 | } 19 | -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/java/com/tianji/message/domain/query/MessageTemplatePageQuery.java: -------------------------------------------------------------------------------- 1 | package com.tianji.message.domain.query; 2 | 3 | import com.tianji.common.domain.query.PageQuery; 4 | import io.swagger.annotations.ApiModel; 5 | import lombok.Data; 6 | import lombok.EqualsAndHashCode; 7 | 8 | @EqualsAndHashCode(callSuper = true) 9 | @ApiModel(description = "通知模板查询对象") 10 | @Data 11 | public class MessageTemplatePageQuery extends PageQuery { 12 | private Long thirdPlatformId; 13 | private Integer status; 14 | private String keyword; 15 | } 16 | -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/java/com/tianji/message/service/IPublicNoticeService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.message.service; 2 | 3 | import com.tianji.message.domain.po.NoticeTemplate; 4 | import com.tianji.message.domain.po.PublicNotice; 5 | import com.baomidou.mybatisplus.extension.service.IService; 6 | 7 | /** 8 | *

9 | * 公告消息模板 服务类 10 | *

11 | * 12 | * @author 虎哥 13 | * @since 2022-08-19 14 | */ 15 | public interface IPublicNoticeService extends IService { 16 | 17 | void saveNoticeOfTemplate(NoticeTemplate noticeTemplate); 18 | } 19 | -------------------------------------------------------------------------------- /tj-stock/src/main/java/com/tianji/stock/service/IStockService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.stock.service; 2 | 3 | import com.tianji.stock.domain.dto.CouponStockDTO; 4 | 5 | public interface IStockService { 6 | 7 | /** 8 | * 商家设置优惠券库存 9 | * @param dto 10 | */ 11 | void setCouponStock(CouponStockDTO dto); 12 | 13 | /** 14 | * 更新已领取数量+1(扣减库存) 15 | * 16 | * @param creater (商家id,商家优惠券是按照商家进行分库分表,库存表按照优惠券id进行分库分表) 17 | * @param couponId 优惠券id 18 | */ 19 | int increaseInssueNum(Long creater, Long couponId); 20 | 21 | 22 | } 23 | -------------------------------------------------------------------------------- /tj-trade/src/main/java/com/tianji/trade/config/TradeProperties.java: -------------------------------------------------------------------------------- 1 | package com.tianji.trade.config; 2 | 3 | import lombok.Data; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | import org.springframework.stereotype.Component; 6 | 7 | @Data 8 | @Component 9 | @ConfigurationProperties(prefix = "tj.trade") 10 | public class TradeProperties { 11 | /** 12 | * 单次允许购买的最大课程数量 13 | */ 14 | private int maxCourseAmount = 10; 15 | /** 16 | * 订单支付的最大等待时间,单位分钟 17 | */ 18 | private int payOrderTTLMinutes = 30; 19 | } 20 | -------------------------------------------------------------------------------- /tj-api/src/main/java/com/tianji/api/client/search/SearchClient.java: -------------------------------------------------------------------------------- 1 | package com.tianji.api.client.search; 2 | 3 | import org.springframework.cloud.openfeign.FeignClient; 4 | import org.springframework.web.bind.annotation.GetMapping; 5 | import org.springframework.web.bind.annotation.RequestParam; 6 | 7 | import java.util.List; 8 | 9 | @FeignClient("search-service") 10 | public interface SearchClient { 11 | 12 | @GetMapping("/courses/name") 13 | List queryCoursesIdByName( 14 | @RequestParam(value = "keyword", required = false) String keyword); 15 | } 16 | -------------------------------------------------------------------------------- /tj-learning/src/main/java/com/tianji/learning/service/IPointsBoardSeasonService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.learning.service; 2 | 3 | import com.tianji.learning.domain.po.PointsBoardSeason; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | 6 | /** 7 | *

8 | * 服务类 9 | *

10 | * 11 | * @author sefy 12 | * @since 2024-05-04 13 | */ 14 | public interface IPointsBoardSeasonService extends IService { 15 | 16 | /** 17 | * 创建上赛季榜单表 18 | * @param id 19 | */ 20 | void createPointsBoardLatestTable(Integer id); 21 | } 22 | -------------------------------------------------------------------------------- /tj-api/src/main/java/com/tianji/api/dto/course/CategoryBasicDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.api.dto.course; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | @Data 8 | @ApiModel(description = "分类id和名称信息") 9 | public class CategoryBasicDTO { 10 | @ApiModelProperty(value = "分类id", example = "1") 11 | private Long id; 12 | @ApiModelProperty(value = "分类名称", example = "Java") 13 | private String name; 14 | @ApiModelProperty(value = "父分类id", example = "0") 15 | private Long parentId; 16 | } 17 | -------------------------------------------------------------------------------- /tj-learning/src/main/java/com/tianji/learning/domain/query/PointsBoardQuery.java: -------------------------------------------------------------------------------- 1 | package com.tianji.learning.domain.query; 2 | 3 | import com.tianji.common.domain.query.PageQuery; 4 | import io.swagger.annotations.ApiModel; 5 | import io.swagger.annotations.ApiModelProperty; 6 | import lombok.Data; 7 | import lombok.EqualsAndHashCode; 8 | 9 | @EqualsAndHashCode(callSuper = true) 10 | @Data 11 | @ApiModel(description = "积分排行榜分页查询条件") 12 | public class PointsBoardQuery extends PageQuery { 13 | @ApiModelProperty(value = "赛季id,为null或者0则代表查询当前赛季") 14 | private Long season; 15 | } 16 | -------------------------------------------------------------------------------- /tj-pay/tj-pay-service/src/main/java/com/tianji/pay/constants/NotifyStatus.java: -------------------------------------------------------------------------------- 1 | package com.tianji.pay.constants; 2 | 3 | import com.tianji.common.enums.BaseEnum; 4 | import lombok.Getter; 5 | 6 | @Getter 7 | public enum NotifyStatus implements BaseEnum { 8 | UN_CALL(0, "未开始回调"), 9 | CALLING(1, "回调进行中"), 10 | SUCCESS(2, "回调成功"), 11 | FAILED(3, "所有回调都已失败"), 12 | ; 13 | private final int value; 14 | private final String desc; 15 | 16 | NotifyStatus(int value, String desc) { 17 | this.value = value; 18 | this.desc = desc; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /tj-promotion/src/main/java/com/tianji/promotion/domain/vo/CouponScopeVO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.promotion.domain.vo; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | 9 | @Data 10 | @ApiModel(description = "优惠券使用范围") 11 | @NoArgsConstructor 12 | @AllArgsConstructor 13 | public class CouponScopeVO { 14 | @ApiModelProperty("范围id集合") 15 | private Long id; 16 | @ApiModelProperty("范围名称集合") 17 | private String name; 18 | } 19 | -------------------------------------------------------------------------------- /tj-trade/src/main/java/com/tianji/trade/domain/vo/OrderCourseVO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.trade.domain.vo; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | @Data 8 | @ApiModel(description = "订单中课程信息") 9 | public class OrderCourseVO { 10 | @ApiModelProperty("课程id") 11 | private Long id; 12 | @ApiModelProperty("课程名称") 13 | private String name; 14 | @ApiModelProperty("课程封面url") 15 | private String coverUrl; 16 | @ApiModelProperty("课程价格,单位元") 17 | private Integer price; 18 | } 19 | -------------------------------------------------------------------------------- /tj-api/src/main/java/com/tianji/api/dto/leanring/LearningLessonDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.api.dto.leanring; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | import java.util.List; 8 | 9 | @Data 10 | @ApiModel(description = "学习课表进度信息") 11 | public class LearningLessonDTO { 12 | @ApiModelProperty("课表id") 13 | private Long id; 14 | @ApiModelProperty("最近学习的小节id") 15 | private Long latestSectionId; 16 | @ApiModelProperty("学习过的小节的记录") 17 | private List records; 18 | } 19 | -------------------------------------------------------------------------------- /tj-api/src/main/java/com/tianji/api/dto/promotion/OrderCourseDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.api.dto.promotion; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | import lombok.experimental.Accessors; 7 | 8 | @Data 9 | @Accessors(chain = true) 10 | @ApiModel(description = "订单中的课程信息") 11 | public class OrderCourseDTO { 12 | @ApiModelProperty("课id") 13 | private Long id; 14 | @ApiModelProperty("课程的三级分类id") 15 | private Long cateId; 16 | @ApiModelProperty("课程价格") 17 | private Integer price; 18 | } 19 | -------------------------------------------------------------------------------- /tj-auth/tj-auth-service/src/main/resources/mapper/RoleMenuMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tj-data/src/main/java/com/tianji/data/service/Top10Service.java: -------------------------------------------------------------------------------- 1 | package com.tianji.data.service; 2 | 3 | 4 | import com.tianji.data.model.dto.Top10DataSetDTO; 5 | import com.tianji.data.model.vo.Top10DataVO; 6 | 7 | /** 8 | * @author wusongsong 9 | * @since 2022/10/10 19:39 10 | **/ 11 | public interface Top10Service { 12 | 13 | /** 14 | * 获取top数据 15 | * 16 | * @return 17 | */ 18 | Top10DataVO getTop10Data(); 19 | 20 | /** 21 | * top 10数据设置 22 | * @param top10DataSetDTO 23 | */ 24 | void setTop10Data(Top10DataSetDTO top10DataSetDTO); 25 | } -------------------------------------------------------------------------------- /tj-learning/src/main/java/com/tianji/learning/domain/vo/PointsBoardVO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.learning.domain.vo; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | import java.util.List; 8 | 9 | @Data 10 | @ApiModel(description = "积分榜单汇总信息") 11 | public class PointsBoardVO { 12 | @ApiModelProperty("我的榜单排名") 13 | private Integer rank; 14 | @ApiModelProperty("我的积分值") 15 | private Integer points; 16 | @ApiModelProperty("前100名上榜人信息") 17 | private List boardList; 18 | } 19 | -------------------------------------------------------------------------------- /tj-pay/tj-pay-service/src/main/java/com/tianji/pay/service/IPayChannelService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.pay.service; 2 | 3 | import com.tianji.pay.sdk.dto.PayChannelDTO; 4 | import com.tianji.pay.domain.po.PayChannel; 5 | import com.baomidou.mybatisplus.extension.service.IService; 6 | 7 | /** 8 | *

9 | * 支付渠道 服务类 10 | *

11 | * 12 | * @author 虎哥 13 | * @since 2022-08-26 14 | */ 15 | public interface IPayChannelService extends IService { 16 | 17 | Long addPayChannel(PayChannelDTO channelDTO); 18 | 19 | void updatePayChannel(PayChannelDTO channelDTO); 20 | } 21 | -------------------------------------------------------------------------------- /tj-auth/tj-auth-service/src/main/java/com/tianji/auth/mapper/PrivilegeMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.auth.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.tianji.auth.domain.po.Privilege; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | *

11 | * 权限表,包括菜单权限和访问路径权限 Mapper 接口 12 | *

13 | * 14 | * @author 虎哥 15 | * @since 2022-06-15 16 | */ 17 | public interface PrivilegeMapper extends BaseMapper { 18 | 19 | List listRolePrivileges(@Param("roleId") Long roleId); 20 | } 21 | -------------------------------------------------------------------------------- /tj-api/src/main/java/com/tianji/api/client/course/SubjectClient.java: -------------------------------------------------------------------------------- 1 | package com.tianji.api.client.course; 2 | 3 | import com.tianji.api.dto.course.SubjectDTO; 4 | import org.springframework.cloud.openfeign.FeignClient; 5 | import org.springframework.web.bind.annotation.GetMapping; 6 | import org.springframework.web.bind.annotation.RequestParam; 7 | 8 | import java.util.List; 9 | 10 | @FeignClient(value = "course-service", path = "subjects") 11 | public interface SubjectClient { 12 | 13 | @GetMapping("list") 14 | List queryByIds(@RequestParam("ids") Iterable ids); 15 | } 16 | -------------------------------------------------------------------------------- /tj-course/src/main/java/com/tianji/course/domain/dto/CategoryListDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.course.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | /** 8 | * 课程类目分页查询 9 | * @author wusongsong 10 | * @since 2022/7/10 11:21 11 | * @version 1.0.0 12 | **/ 13 | @ApiModel(description = "课程类目分页查询条件") 14 | @Data 15 | public class CategoryListDTO { 16 | @ApiModelProperty("类目状态1:正常,2:禁用") 17 | private Integer status; 18 | @ApiModelProperty("类目名称") 19 | private String name; 20 | 21 | 22 | } 23 | -------------------------------------------------------------------------------- /tj-pay/tj-pay-service/src/main/java/com/tianji/pay/third/model/RefundStatus.java: -------------------------------------------------------------------------------- 1 | package com.tianji.pay.third.model; 2 | 3 | import com.tianji.common.enums.BaseEnum; 4 | import lombok.Getter; 5 | 6 | @Getter 7 | public enum RefundStatus implements BaseEnum { 8 | NOT_COMMIT(0, "退款请求未提交"), 9 | UN_KNOWN(1, "未知,可能是失败或未完成"), 10 | SUCCESS(2, "退款成功"), 11 | FAILED(3, "退款失败"), 12 | ; 13 | private final int value; 14 | private final String desc; 15 | 16 | RefundStatus(int value, String desc) { 17 | this.value = value; 18 | this.desc = desc; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /tj-trade/src/test/java/com/tianji/trade/mapper/OrderMapperTest.java: -------------------------------------------------------------------------------- 1 | package com.tianji.trade.mapper; 2 | 3 | import com.tianji.trade.domain.po.Order; 4 | import org.junit.jupiter.api.Test; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.boot.test.context.SpringBootTest; 7 | 8 | @SpringBootTest 9 | class OrderMapperTest { 10 | 11 | @Autowired 12 | private OrderMapper orderMapper; 13 | 14 | @Test 15 | void getById() { 16 | Order order = orderMapper.getById(1L); 17 | System.out.println("order = " + order); 18 | } 19 | } -------------------------------------------------------------------------------- /tj-auth/tj-auth-service/src/main/resources/mapper/AccountRoleMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/domain/dto/BaseDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | 6 | import java.time.LocalDateTime; 7 | 8 | @ApiModel(description = "DTO基础属性") 9 | public class BaseDTO { 10 | @ApiModelProperty("创建人id") 11 | private Long creater; 12 | @ApiModelProperty("更新人id") 13 | private Long updater; 14 | @ApiModelProperty("创建时间") 15 | private LocalDateTime createTime; 16 | @ApiModelProperty("更新时间") 17 | private LocalDateTime updateTime; 18 | } 19 | -------------------------------------------------------------------------------- /tj-course/src/main/java/com/tianji/course/service/ICourseCataSubjectDraftService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.course.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.tianji.course.domain.po.CourseCataSubjectDraft; 5 | 6 | /** 7 | *

8 | * 课程-题目关系表草稿 服务类 9 | *

10 | * 11 | * @author wusongsong 12 | * @since 2022-09-21 13 | */ 14 | public interface ICourseCataSubjectDraftService extends IService { 15 | /** 16 | * 删除不在的课程小节目录 17 | * @param courseId 18 | */ 19 | void deleteNotInCataIdList(Long courseId); 20 | } 21 | -------------------------------------------------------------------------------- /tj-course/src/main/resources/mapper/CourseSubjectMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tj-media/src/main/java/com/tianji/media/service/IFileService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.media.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.tianji.media.domain.dto.FileDTO; 5 | import com.tianji.media.domain.po.File; 6 | import org.springframework.web.multipart.MultipartFile; 7 | 8 | /** 9 | *

10 | * 文件表,可以是普通文件、图片等 服务类 11 | *

12 | * 13 | * @author 虎哥 14 | * @since 2022-06-30 15 | */ 16 | public interface IFileService extends IService { 17 | 18 | FileDTO uploadFile(MultipartFile file); 19 | 20 | FileDTO getFileInfo(Long id); 21 | } 22 | -------------------------------------------------------------------------------- /tj-message/tj-message-domain/src/main/java/com/tianji/message/domain/dto/SmsInfoDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.message.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | import java.util.Map; 8 | 9 | @Data 10 | @ApiModel(description = "短信发送参数") 11 | public class SmsInfoDTO { 12 | @ApiModelProperty("模板代号") 13 | private String templateCode; 14 | @ApiModelProperty("手机号码") 15 | private Iterable phones; 16 | @ApiModelProperty("模板参数") 17 | private Map templateParams; 18 | } 19 | -------------------------------------------------------------------------------- /tj-promotion/src/main/java/com/tianji/promotion/domain/dto/OrderCourseDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.promotion.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | import lombok.experimental.Accessors; 7 | 8 | @Data 9 | @Accessors(chain = true) 10 | @ApiModel(description = "订单中的课程信息") 11 | public class OrderCourseDTO { 12 | @ApiModelProperty("课id") 13 | private Long id; 14 | @ApiModelProperty("课程的三级分类id") 15 | private Long cateId; 16 | @ApiModelProperty("课程价格") 17 | private Integer price; 18 | } 19 | -------------------------------------------------------------------------------- /tj-stock/src/main/java/com/tianji/stock/mapper/StockMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.stock.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.tianji.stock.domain.dto.CouponStockDTO; 5 | import com.tianji.stock.domain.po.CouponStock; 6 | import org.apache.ibatis.annotations.Insert; 7 | import org.apache.ibatis.annotations.Mapper; 8 | import org.apache.ibatis.annotations.Param; 9 | 10 | @Mapper 11 | public interface StockMapper extends BaseMapper { 12 | 13 | int increaseInssueNum(@Param("creater") Long creater, @Param("couponId") Long couponId); 14 | } 15 | -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/domain/mq/CouponMessage.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.domain.mq; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * 用户所领券的优惠券信息 9 | */ 10 | @Data 11 | public class CouponMessage implements Serializable { 12 | 13 | /** 14 | * 商家id 15 | */ 16 | private Long creater; 17 | 18 | /** 19 | * 用户id 20 | */ 21 | private Long userId; 22 | /** 23 | * 优惠券id 24 | */ 25 | private Long couponId; 26 | 27 | /** 28 | * 兑换码序列号id 29 | */ 30 | private Integer exchangeCodeId; 31 | } 32 | -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/java/com/tianji/message/domain/dto/UserInboxFormDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.message.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | /** 8 | *

9 | * 用户通知记录 10 | *

11 | * 12 | * @author 虎哥 13 | * @since 2022-08-20 14 | */ 15 | @Data 16 | @ApiModel(description = "用户私信表单实体") 17 | public class UserInboxFormDTO { 18 | 19 | @ApiModelProperty("目标用户id") 20 | private Long userId; 21 | 22 | @ApiModelProperty("私信内容") 23 | private String content; 24 | } 25 | -------------------------------------------------------------------------------- /tj-auth/tj-auth-service/src/main/resources/mapper/RolePrivilegeMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/exceptions/ForbiddenException.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.exceptions; 2 | 3 | import lombok.Getter; 4 | 5 | @Getter 6 | public class ForbiddenException extends CommonException{ 7 | private final int status = 403; 8 | 9 | public ForbiddenException(String message) { 10 | super(403, message); 11 | } 12 | 13 | public ForbiddenException(int code, String message) { 14 | super(code, message); 15 | } 16 | 17 | public ForbiddenException(int code, String message, Throwable cause) { 18 | super(code, message, cause); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /tj-api/src/main/java/com/tianji/api/client/auth/AuthClient.java: -------------------------------------------------------------------------------- 1 | package com.tianji.api.client.auth; 2 | 3 | import com.tianji.api.dto.auth.RoleDTO; 4 | import org.springframework.cloud.openfeign.FeignClient; 5 | import org.springframework.web.bind.annotation.GetMapping; 6 | import org.springframework.web.bind.annotation.PathVariable; 7 | 8 | import java.util.List; 9 | 10 | @FeignClient("auth-service") 11 | public interface AuthClient { 12 | 13 | @GetMapping("/roles/{id}") 14 | RoleDTO queryRoleById(@PathVariable("id") Long id); 15 | 16 | @GetMapping("/roles/list") 17 | List listAllRoles(); 18 | } 19 | -------------------------------------------------------------------------------- /tj-api/src/main/java/com/tianji/api/interfaces/stock/StockDubboService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.api.interfaces.stock; 2 | 3 | public interface StockDubboService { 4 | 5 | /** 6 | * 设置商品库存 7 | * @param couponId 8 | * @param stock 9 | */ 10 | void setCouponStock(Long couponId, Integer stock, Long userId); 11 | 12 | /** 13 | * 更新已领取数量+1(扣减库存) 14 | * 15 | * @param creater(商家id,商家优惠券是按照商家进行分库分表,库存表按照优惠券id进行分库分表) 16 | * @param couponId 优惠券id 17 | * @return 18 | */ 19 | int increaseInssueNum(Long creater, Long couponId); 20 | } 21 | -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/exceptions/BadRequestException.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.exceptions; 2 | 3 | import lombok.Getter; 4 | 5 | @Getter 6 | public class BadRequestException extends CommonException{ 7 | private final int status = 400; 8 | 9 | public BadRequestException(String message) { 10 | super(400, message); 11 | } 12 | 13 | public BadRequestException(int code, String message) { 14 | super(code, message); 15 | } 16 | 17 | public BadRequestException(int code, String message, Throwable cause) { 18 | super(code, message, cause); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /tj-stock/src/main/resources/mapper/StockMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | id, coupon_id, total_num, issue_num, create_time, update_time, creater, updater 7 | 8 | 9 | 10 | update coupon_stock set issue_num = issue_num + 1 where creater = #{creater} and coupon_id = #{couponId} and total_num > issue_num 11 | 12 | 13 | -------------------------------------------------------------------------------- /tj-api/src/main/java/com/tianji/api/client/course/CategoryClient.java: -------------------------------------------------------------------------------- 1 | package com.tianji.api.client.course; 2 | 3 | import com.tianji.api.dto.course.CategoryBasicDTO; 4 | import org.springframework.cloud.openfeign.FeignClient; 5 | import org.springframework.web.bind.annotation.GetMapping; 6 | 7 | import java.util.List; 8 | 9 | @FeignClient(contextId = "category",value = "course-service",path = "categorys") 10 | public interface CategoryClient { 11 | 12 | /** 13 | * 获取所有课程及课程分类 14 | * @return 所有课程及课程分类 15 | */ 16 | @GetMapping("getAllOfOneLevel") 17 | List getAllOfOneLevel(); 18 | } 19 | -------------------------------------------------------------------------------- /tj-auth/tj-auth-gateway-sdk/src/main/resources/META-INF/spring-configuration-metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "groups": [ 3 | { 4 | "name": "tj.auth.gateway", 5 | "type": "com.tianji.authsdk.gateway.config.AuthAutoConfiguration", 6 | "sourceType": "com.tianji.authsdk.gateway.config.AuthProperties" 7 | } 8 | ], 9 | "properties": [ 10 | { 11 | "name": "tj.auth.excludePath", 12 | "type": "java.util.Set", 13 | "description": "不用登录就能访问的路径,ant风格通配符", 14 | "sourceType": "com.tianji.authsdk.gateway.config.AuthProperties", 15 | "defaultValue": "" 16 | } 17 | ], 18 | "hints": [] 19 | } -------------------------------------------------------------------------------- /tj-exam/src/main/java/com/tianji/exam/mapper/QuestionMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.exam.mapper; 2 | 3 | import com.tianji.api.dto.IdAndNumDTO; 4 | import com.tianji.exam.domain.po.Question; 5 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 6 | import org.apache.ibatis.annotations.Param; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | *

12 | * 题目 Mapper 接口 13 | *

14 | * 15 | * @author 虎哥 16 | * @since 2022-09-02 17 | */ 18 | public interface QuestionMapper extends BaseMapper { 19 | 20 | List countQuestionOfCreater(@Param("createrIds") List createrIds); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /tj-pay/tj-pay-service/src/main/java/com/tianji/pay/third/model/PayStatus.java: -------------------------------------------------------------------------------- 1 | package com.tianji.pay.third.model; 2 | 3 | import com.tianji.common.enums.BaseEnum; 4 | import lombok.Getter; 5 | 6 | @Getter 7 | public enum PayStatus implements BaseEnum { 8 | NOT_COMMIT(0, "未提交"), 9 | WAIT_BUYER_PAY(1, "待支付"), 10 | TRADE_CLOSED(2, "已关闭"), 11 | TRADE_SUCCESS(3, "支付成功"), 12 | TRADE_FINISHED(3, "支付成功"), 13 | ; 14 | private final int value; 15 | private final String desc; 16 | 17 | PayStatus(int value, String desc) { 18 | this.value = value; 19 | this.desc = desc; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /tj-user/src/main/java/com/tianji/user/constants/UserErrorInfo.java: -------------------------------------------------------------------------------- 1 | package com.tianji.user.constants; 2 | 3 | public interface UserErrorInfo { 4 | interface Msg { 5 | String INVALID_UN_OR_PW = "用户登录信息错误"; 6 | String INVALID_UN = "用户名或手机号不能为空"; 7 | String INVALID_USER_TYPE = "无效的用户类型"; 8 | String PHONE_NOT_EXISTS = "手机号不存在"; 9 | String ILLEGAL_LOGIN_TYPE = "无效的登录方式"; 10 | String USER_ID_NOT_EXISTS = "用户id不存在"; 11 | 12 | String USER_FROZEN = "账号已冻结"; 13 | String PHONE_ALREADY_EXISTS = "手机号已存在"; 14 | String INVALID_USER_STATUS = "用户状态不正确"; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /tj-user/src/main/java/com/tianji/user/domain/dto/StudentFormDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.user.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | @Data 8 | @ApiModel(description = "学生注册和修改密码的表单实体") 9 | public class StudentFormDTO { 10 | 11 | @ApiModelProperty(value = "手机号", example = "13800010004") 12 | private String cellPhone; 13 | 14 | @ApiModelProperty(value = "密码", example = "123456") 15 | private String password; 16 | 17 | @ApiModelProperty(value = "验证码", example = "645632") 18 | private String code; 19 | } 20 | -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/exceptions/UnauthorizedException.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.exceptions; 2 | 3 | import lombok.Getter; 4 | 5 | @Getter 6 | public class UnauthorizedException extends CommonException{ 7 | private final int status = 401; 8 | 9 | public UnauthorizedException(String message) { 10 | super(401, message); 11 | } 12 | 13 | public UnauthorizedException(int code, String message) { 14 | super(code, message); 15 | } 16 | 17 | public UnauthorizedException(int code, String message, Throwable cause) { 18 | super(code, message, cause); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /tj-pay/tj-pay-service/src/main/java/com/tianji/pay/third/ali/config/AliPayProperties.java: -------------------------------------------------------------------------------- 1 | package com.tianji.pay.third.ali.config; 2 | 3 | import lombok.Data; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | 6 | @Data 7 | @ConfigurationProperties(prefix = "tj.pay.ali") 8 | public class AliPayProperties { 9 | private String protocol = "https"; 10 | private String gatewayHost= "openapi.alipay.com"; 11 | private String signType = "RSA2"; 12 | private String appId; 13 | private String merchantPrivateKey; 14 | private String publicKey; 15 | private String encryptKey; 16 | } 17 | -------------------------------------------------------------------------------- /tj-data/src/main/java/com/tianji/data/model/vo/TodayDataVO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.data.model.vo; 2 | 3 | import io.swagger.annotations.ApiModelProperty; 4 | import lombok.Data; 5 | 6 | /** 7 | * @ClassName TodayDataVO 8 | * @Author wusongsong 9 | * @Date 2022/10/13 9:23 10 | * @Version 11 | **/ 12 | @Data 13 | public class TodayDataVO { 14 | @ApiModelProperty("访问量,万次单位") 15 | private Double visits; 16 | @ApiModelProperty("今日订单金额,万元单位") 17 | private Double orderAmount; 18 | @ApiModelProperty("今日订单笔数") 19 | private Integer orderNum; 20 | @ApiModelProperty("今日新增学员数") 21 | private Integer stuNewNum; 22 | } 23 | -------------------------------------------------------------------------------- /tj-message/tj-message-api/src/main/java/com/tianji/message/api/client/MessageClient.java: -------------------------------------------------------------------------------- 1 | package com.tianji.message.api.client; 2 | 3 | import com.tianji.message.domain.dto.SmsInfoDTO; 4 | import org.springframework.cloud.openfeign.FeignClient; 5 | import org.springframework.web.bind.annotation.PostMapping; 6 | import org.springframework.web.bind.annotation.RequestBody; 7 | 8 | @FeignClient("message-service") 9 | public interface MessageClient { 10 | 11 | /** 12 | * 同步发送短信 13 | * @param smsInfoDTO 短信相关信息 14 | */ 15 | @PostMapping("message") 16 | void sendMessage(@RequestBody SmsInfoDTO smsInfoDTO); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /tj-pay/tj-pay-domain/src/main/java/com/tianji/pay/sdk/constants/PayChannel.java: -------------------------------------------------------------------------------- 1 | package com.tianji.pay.sdk.constants; 2 | 3 | import com.tianji.common.utils.StringUtils; 4 | import lombok.Getter; 5 | 6 | @Getter 7 | public enum PayChannel { 8 | wxPay("微信支付"), 9 | aliPay("支付宝支付"), 10 | ; 11 | 12 | private final String desc; 13 | 14 | PayChannel(String desc) { 15 | this.desc = desc; 16 | } 17 | 18 | public static String desc(String value){ 19 | if (StringUtils.isBlank(value)) { 20 | return ""; 21 | } 22 | return PayChannel.valueOf(value).getDesc(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /tj-auth/tj-auth-service/src/main/java/com/tianji/auth/service/IRolePrivilegeService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.auth.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.tianji.auth.domain.po.RolePrivilege; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | *

10 | * 账户、角色关联表 服务类 11 | *

12 | * 13 | * @author 虎哥 14 | * @since 2022-06-16 15 | */ 16 | public interface IRolePrivilegeService extends IService { 17 | 18 | void removeByPrivilegeId(Long id); 19 | 20 | void removeByRoleId(Long id); 21 | 22 | void deleteRolePrivileges(Long roleId, List privilegeIds); 23 | } 24 | -------------------------------------------------------------------------------- /tj-media/src/main/java/com/tianji/media/enums/Platform.java: -------------------------------------------------------------------------------- 1 | package com.tianji.media.enums; 2 | 3 | import com.baomidou.mybatisplus.annotation.EnumValue; 4 | import lombok.Getter; 5 | 6 | @Getter 7 | public enum Platform { 8 | TENCENT(1, "腾讯云", "/img-tx/"), 9 | ALI(2, "阿里云", "/img-ali/"), 10 | QI_NIU(3, "七牛云", "/img-qn/"), 11 | ; 12 | @EnumValue 13 | private final int value; 14 | private final String desc; 15 | private final String path; 16 | 17 | Platform(int value, String desc, String path) { 18 | this.value = value; 19 | this.desc = desc; 20 | this.path = path; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /tj-course/src/main/java/com/tianji/course/domain/dto/CourseMediaSaveDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.course.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | /** 8 | * 课程视频保存模型 9 | * @author wusongsong 10 | * @since 2022/7/13 15:09 11 | * @version 1.0.0 12 | **/ 13 | @Data 14 | @ApiModel(description = "课程视频保存模型") 15 | public class CourseMediaSaveDTO { 16 | @ApiModelProperty("小节id") 17 | private Long cataId; 18 | @ApiModelProperty("媒资id") 19 | private Long mediaId; 20 | @ApiModelProperty("是否支持试看") 21 | private Boolean trailer; 22 | } 23 | -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/utils/UserContext.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.utils; 2 | 3 | public class UserContext { 4 | private static final ThreadLocal TL = new ThreadLocal<>(); 5 | 6 | /** 7 | * 保存用户信息 8 | * @param userId 用户id 9 | */ 10 | public static void setUser(Long userId){ 11 | TL.set(userId); 12 | } 13 | 14 | /** 15 | * 获取用户 16 | * @return 用户id 17 | */ 18 | public static Long getUser(){ 19 | return TL.get(); 20 | } 21 | 22 | /** 23 | * 移除用户信息 24 | */ 25 | public static void removeUser(){ 26 | TL.remove(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /tj-course/src/main/java/com/tianji/course/domain/vo/CourseSaveVO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.course.domain.vo; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Builder; 7 | import lombok.Data; 8 | 9 | import javax.validation.constraints.NotNull; 10 | 11 | /** 12 | * @author wusongsong 13 | * @since 2022/7/13 11:26 14 | * @version 1.0.0 15 | **/ 16 | @Data 17 | @ApiModel(description = "课程保存结果") 18 | @AllArgsConstructor 19 | @NotNull 20 | @Builder 21 | public class CourseSaveVO { 22 | @ApiModelProperty("课程id") 23 | private Long id; 24 | } 25 | -------------------------------------------------------------------------------- /tj-course/src/main/java/com/tianji/course/domain/dto/CourseIdDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.course.domain.dto; 2 | 3 | import com.tianji.course.constants.CourseErrorInfo; 4 | import io.swagger.annotations.ApiModel; 5 | import io.swagger.annotations.ApiModelProperty; 6 | import lombok.Data; 7 | 8 | import javax.validation.constraints.NotNull; 9 | 10 | /** 11 | * @author wusongsong 12 | * @since 2022/7/20 16:50 13 | * @version 1.0.0 14 | **/ 15 | @ApiModel(description = "课程id") 16 | @Data 17 | public class CourseIdDTO { 18 | @ApiModelProperty("课程id") 19 | @NotNull(message = CourseErrorInfo.Msg.COURSE_OPERATE_ID_NULL) 20 | private Long id; 21 | } 22 | -------------------------------------------------------------------------------- /tj-course/src/main/java/com/tianji/course/domain/vo/ChapterVO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.course.domain.vo; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | import java.util.List; 8 | 9 | @Data 10 | @ApiModel(description = "章信息") 11 | public class ChapterVO { 12 | @ApiModelProperty("章id") 13 | private Long id; 14 | @ApiModelProperty("章索引") 15 | private Integer index; 16 | @ApiModelProperty("章名称") 17 | private String name; 18 | @ApiModelProperty("本章视频总时长") 19 | private Integer mediaDuration; 20 | 21 | private List sections; 22 | } 23 | -------------------------------------------------------------------------------- /tj-media/src/main/java/com/tianji/media/config/AliProperties.java: -------------------------------------------------------------------------------- 1 | package com.tianji.media.config; 2 | 3 | import lombok.Data; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | 6 | @Data 7 | @ConfigurationProperties(prefix = "tj.ali") 8 | public class AliProperties { 9 | private String accessId; 10 | private String accessKey; 11 | 12 | private OssProperties oos; 13 | 14 | @Data 15 | public static class OssProperties { 16 | /*区域*/ 17 | private String region; 18 | /*域名*/ 19 | private String endpoint; 20 | /*桶名称*/ 21 | private String bucket; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/java/com/tianji/message/domain/query/NoticeTaskPageQuery.java: -------------------------------------------------------------------------------- 1 | package com.tianji.message.domain.query; 2 | 3 | import com.tianji.common.domain.query.PageQuery; 4 | import io.swagger.annotations.ApiModel; 5 | import lombok.Data; 6 | import lombok.EqualsAndHashCode; 7 | 8 | import java.time.LocalDateTime; 9 | 10 | @EqualsAndHashCode(callSuper = true) 11 | @ApiModel(description = "通知模板查询对象") 12 | @Data 13 | public class NoticeTaskPageQuery extends PageQuery { 14 | private Boolean finished; 15 | private String keyword; 16 | private LocalDateTime minPushTime; 17 | private LocalDateTime maxPushTime; 18 | } 19 | -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/resources/mapper/ISmsHandler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 12 | 13 | -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/autoconfigure/mvc/ParamCheckerConfig.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.autoconfigure.mvc; 2 | 3 | import com.tianji.common.autoconfigure.mvc.aspects.CheckerAspect; 4 | import com.tianji.common.ratelimiter.Aspect.RateLimiterAspect; 5 | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; 6 | import org.springframework.context.annotation.Bean; 7 | import org.springframework.context.annotation.Configuration; 8 | 9 | @Configuration 10 | public class ParamCheckerConfig { 11 | 12 | @Bean 13 | public CheckerAspect checkerAspect(){ 14 | return new CheckerAspect(); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /tj-exam/src/main/resources/mapper/QuestionMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 14 | 15 | -------------------------------------------------------------------------------- /tj-learning/src/main/java/com/tianji/learning/domain/query/ReplyPageQuery.java: -------------------------------------------------------------------------------- 1 | package com.tianji.learning.domain.query; 2 | 3 | import com.tianji.common.domain.query.PageQuery; 4 | import io.swagger.annotations.ApiModel; 5 | import io.swagger.annotations.ApiModelProperty; 6 | import lombok.Data; 7 | import lombok.EqualsAndHashCode; 8 | 9 | @EqualsAndHashCode(callSuper = true) 10 | @Data 11 | @ApiModel(description = "互动回答分页查询条件") 12 | public class ReplyPageQuery extends PageQuery { 13 | @ApiModelProperty(value = "问题id,不为空则代表根据问题查询回答") 14 | private Long questionId; 15 | @ApiModelProperty(value = "回答id,不为空则代表根据回答查询评论") 16 | private Long answerId; 17 | } 18 | -------------------------------------------------------------------------------- /tj-promotion/src/main/java/com/tianji/promotion/domain/dto/OrderCouponDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.promotion.domain.dto; 2 | 3 | 4 | import io.swagger.annotations.ApiModel; 5 | import io.swagger.annotations.ApiModelProperty; 6 | import lombok.AllArgsConstructor; 7 | import lombok.Data; 8 | import lombok.NoArgsConstructor; 9 | 10 | import java.util.List; 11 | 12 | @Data 13 | @AllArgsConstructor 14 | @NoArgsConstructor 15 | @ApiModel(description = "订单中课程及优惠券信息") 16 | public class OrderCouponDTO { 17 | @ApiModelProperty("用户优惠券id") 18 | private List userCouponIds; 19 | @ApiModelProperty("订单中的课程列表") 20 | private List courseList; 21 | } 22 | -------------------------------------------------------------------------------- /tj-course/src/main/java/com/tianji/course/domain/dto/CateSimpleInfoDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.course.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | /** 8 | * 三级分类 9 | * @ClassName CateSimpleInfoVO 10 | * @Author wusongsong 11 | * @Date 2022/7/11 20:59 12 | * @Version 13 | **/ 14 | @Data 15 | @ApiModel("分类") 16 | public class CateSimpleInfoDTO { 17 | @ApiModelProperty("一级分类") 18 | private Long firstCateId; 19 | @ApiModelProperty("二级分类id") 20 | private Long secondCateId; 21 | @ApiModelProperty("三级分类id") 22 | private Long thirdCateId; 23 | 24 | } 25 | -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/autoconfigure/ratelimite/LimiterConfig.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.autoconfigure.ratelimite; 2 | 3 | import com.tianji.common.ratelimiter.Aspect.RateLimiterAspect; 4 | import lombok.extern.slf4j.Slf4j; 5 | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; 6 | import org.springframework.context.annotation.Bean; 7 | import org.springframework.context.annotation.Configuration; 8 | 9 | @Configuration 10 | public class LimiterConfig { 11 | 12 | @Bean 13 | @ConditionalOnMissingBean 14 | public RateLimiterAspect rateLimiterAspect() { 15 | return new RateLimiterAspect(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /tj-media/src/main/java/com/tianji/media/enums/FileErrorInfo.java: -------------------------------------------------------------------------------- 1 | package com.tianji.media.enums; 2 | 3 | public interface FileErrorInfo { 4 | interface Msg { 5 | String FILE_KEY_TOO_MANY = "文件key不能超过1000"; 6 | String BUCKET_NAME_IS_NULL = "桶名称不能为空"; 7 | String FILE_KEY_IS_NULL = "文件key不能为空"; 8 | String INVALID_FILE_STATUS = "无效的文件状态"; 9 | 10 | String FILE_UPLOAD_ERROR = "上传文件失败"; 11 | 12 | 13 | String MEDIA_APPLY_UPLOAD_ERROR = "申请上传视频失败"; 14 | String MEDIA_UPLOAD_ERROR = "上传视频失败"; 15 | String MEDIA_COMMIT_UPLOAD_ERROR = "确认上传视频失败"; 16 | String MEDIA_DELETE_ERROR = "删除视频失败"; 17 | 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /tj-search/src/main/java/com/tianji/search/service/IInterestsService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.search.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.tianji.search.domain.po.Interests; 5 | import com.tianji.api.dto.course.CategoryBasicDTO; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | *

11 | * 用户兴趣表,保存感兴趣的二级分类id 服务类 12 | *

13 | * 14 | * @author 虎哥 15 | * @since 2022-07-21 16 | */ 17 | public interface IInterestsService extends IService { 18 | 19 | void saveInterests(List interestedIds); 20 | 21 | List queryMyInterests(); 22 | 23 | List queryMyInterestsIds(); 24 | } 25 | -------------------------------------------------------------------------------- /tj-trade/src/main/java/com/tianji/trade/mapper/RefundApplyMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.trade.mapper; 2 | 3 | import com.tianji.trade.domain.po.RefundApply; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Select; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | *

11 | * 退款申请 Mapper 接口 12 | *

13 | * 14 | * @author 虎哥 15 | * @since 2022-08-29 16 | */ 17 | public interface RefundApplyMapper extends BaseMapper { 18 | 19 | @Select("SELECT id FROM refund_apply WHERE status = 1 LIMIT 1") 20 | Long nextRefundApplyToApprove(); 21 | 22 | List queryByDetailId(Long detailId); 23 | } 24 | -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/java/com/tianji/message/mapper/NoticeTaskMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.message.mapper; 2 | 3 | import com.tianji.message.domain.po.NoticeTask; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Select; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | *

11 | * 系统通告的任务表,可以延期或定期发送通告 Mapper 接口 12 | *

13 | * 14 | * @author 虎哥 15 | * @since 2022-08-20 16 | */ 17 | public interface NoticeTaskMapper extends BaseMapper { 18 | 19 | @Select("SELECT user_id FROM notice_task_target WHERE task_id = #{task_id}") 20 | List queryTaskTargetByTaskId(Long taskId); 21 | } 22 | -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/java/com/tianji/message/properties/ThreadPoolProperties.java: -------------------------------------------------------------------------------- 1 | package com.tianji.message.properties; 2 | 3 | import lombok.Data; 4 | import org.springframework.boot.context.properties.NestedConfigurationProperty; 5 | import org.springframework.context.annotation.Configuration; 6 | 7 | import java.util.Map; 8 | 9 | /** 10 | * 线程池配置 11 | * @ClassName ThreadPoolProperties 12 | * @author wusongsong 13 | * @since 2022/6/23 15:36 14 | * @version 1.0.0 15 | **/ 16 | @Configuration 17 | @Data 18 | public class ThreadPoolProperties { 19 | 20 | @NestedConfigurationProperty 21 | private Map threadPools; 22 | 23 | 24 | } 25 | -------------------------------------------------------------------------------- /tj-user/src/main/java/com/tianji/user/service/IStudentService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.user.service; 2 | 3 | import com.tianji.common.domain.dto.PageDTO; 4 | import com.tianji.user.domain.dto.StudentFormDTO; 5 | import com.tianji.user.domain.query.UserPageQuery; 6 | import com.tianji.user.domain.vo.StudentPageVo; 7 | 8 | /** 9 | *

10 | * 学员详情表 服务类 11 | *

12 | * 13 | * @author 虎哥 14 | * @since 2022-07-12 15 | */ 16 | public interface IStudentService { 17 | 18 | void saveStudent(StudentFormDTO studentFormDTO); 19 | 20 | void updateMyPassword(StudentFormDTO studentFormDTO); 21 | 22 | PageDTO queryStudentPage(UserPageQuery pageQuery); 23 | } 24 | -------------------------------------------------------------------------------- /tj-api/src/main/java/com/tianji/api/dto/course/MediaQuoteDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.api.dto.course; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | 9 | /** 10 | * @ClassName MediaQuoteDTO 11 | * @author wusongsong 12 | * @since 2022/7/18 17:43 13 | * @version 1.0.0 14 | **/ 15 | @ApiModel("媒资被引用情况") 16 | @Data 17 | @AllArgsConstructor 18 | @NoArgsConstructor 19 | public class MediaQuoteDTO { 20 | @ApiModelProperty("媒资id") 21 | private Long mediaId; 22 | @ApiModelProperty("引用数") 23 | private Integer quoteNum; 24 | } 25 | -------------------------------------------------------------------------------- /tj-auth/tj-auth-service/src/main/java/com/tianji/auth/service/impl/AccountRoleServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.tianji.auth.service.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.tianji.auth.domain.po.AccountRole; 5 | import com.tianji.auth.mapper.AccountRoleMapper; 6 | import com.tianji.auth.service.IAccountRoleService; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | *

11 | * 账户、角色关联表 服务实现类 12 | *

13 | * 14 | * @author 虎哥 15 | * @since 2022-06-16 16 | */ 17 | @Service 18 | public class AccountRoleServiceImpl extends ServiceImpl implements IAccountRoleService { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /tj-course/src/main/java/com/tianji/course/mapper/CourseTeacherMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.course.mapper; 2 | 3 | import com.tianji.course.domain.po.CourseTeacher; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Delete; 6 | import org.apache.ibatis.annotations.Param; 7 | 8 | /** 9 | *

10 | * 课程老师关系表草稿 Mapper 接口 11 | *

12 | * 13 | * @author wusongsong 14 | * @since 2022-07-20 15 | */ 16 | public interface CourseTeacherMapper extends BaseMapper { 17 | 18 | @Delete("delete from course_teacher where course_id=#{courseId}") 19 | int deleteByCourseId(@Param("courseId") Long courseId); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /tj-exam/src/main/java/com/tianji/exam/service/impl/QuestionDetailServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.tianji.exam.service.impl; 2 | 3 | import com.tianji.exam.domain.po.QuestionDetail; 4 | import com.tianji.exam.mapper.QuestionDetailMapper; 5 | import com.tianji.exam.service.IQuestionDetailService; 6 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | *

11 | * 题目 服务实现类 12 | *

13 | * 14 | * @author 虎哥 15 | * @since 2022-09-02 16 | */ 17 | @Service 18 | public class QuestionDetailServiceImpl extends ServiceImpl implements IQuestionDetailService { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /tj-search/src/main/java/com/tianji/search/service/ISearchService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.search.service; 2 | 3 | import com.tianji.common.domain.dto.PageDTO; 4 | import com.tianji.search.domain.query.CoursePageQuery; 5 | import com.tianji.search.domain.vo.CourseVO; 6 | 7 | import java.util.List; 8 | 9 | public interface ISearchService { 10 | 11 | List queryCourseByCateId(Long cateLv2Id); 12 | 13 | List queryBestTopN(); 14 | 15 | List queryNewTopN(); 16 | 17 | List queryFreeTopN(); 18 | 19 | PageDTO queryCoursesForPortal(CoursePageQuery query); 20 | 21 | List queryCoursesIdByName(String keyword); 22 | } 23 | -------------------------------------------------------------------------------- /tj-user/src/main/java/com/tianji/user/domain/query/UserPageQuery.java: -------------------------------------------------------------------------------- 1 | package com.tianji.user.domain.query; 2 | 3 | import com.tianji.common.domain.query.PageQuery; 4 | import io.swagger.annotations.ApiModel; 5 | import io.swagger.annotations.ApiModelProperty; 6 | import lombok.Data; 7 | import lombok.EqualsAndHashCode; 8 | 9 | @EqualsAndHashCode(callSuper = true) 10 | @Data 11 | @ApiModel(description = "教师分页查询条件") 12 | public class UserPageQuery extends PageQuery { 13 | @ApiModelProperty(value = "账户状态") 14 | private Integer status; 15 | @ApiModelProperty(value = "教师名称") 16 | private String name; 17 | @ApiModelProperty(value = "手机号码") 18 | private String phone; 19 | } 20 | -------------------------------------------------------------------------------- /tj-api/src/main/java/com/tianji/api/dto/exam/QuestionBizDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.api.dto.exam; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | import lombok.experimental.Accessors; 9 | 10 | @Data 11 | @ApiModel(description = "题目与业务关联信息") 12 | @Accessors(chain = true) 13 | @AllArgsConstructor(staticName = "of") 14 | @NoArgsConstructor 15 | public class QuestionBizDTO{ 16 | 17 | @ApiModelProperty("业务id,要关联问题的某业务id,例如小节id") 18 | private Long bizId; 19 | 20 | @ApiModelProperty("题目id") 21 | private Long questionId; 22 | 23 | } 24 | -------------------------------------------------------------------------------- /tj-promotion/src/main/java/com/tianji/promotion/service/impl/PromotionServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.tianji.promotion.service.impl; 2 | 3 | import com.tianji.promotion.domain.po.Promotion; 4 | import com.tianji.promotion.mapper.PromotionMapper; 5 | import com.tianji.promotion.service.IPromotionService; 6 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | *

11 | * 促销活动,形式多种多样,例如:优惠券 服务实现类 12 | *

13 | * 14 | * @author sefy 15 | * @since 2024-05-15 16 | */ 17 | @Service 18 | public class PromotionServiceImpl extends ServiceImpl implements IPromotionService { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /tj-promotion/src/main/java/com/tianji/promotion/service/impl/CouponScopeServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.tianji.promotion.service.impl; 2 | 3 | import com.tianji.promotion.domain.po.CouponScope; 4 | import com.tianji.promotion.mapper.CouponScopeMapper; 5 | import com.tianji.promotion.service.ICouponScopeService; 6 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | *

11 | * 优惠券作用范围信息 服务实现类 12 | *

13 | * 14 | * @author sefy 15 | * @since 2024-05-15 16 | */ 17 | @Service 18 | public class CouponScopeServiceImpl extends ServiceImpl implements ICouponScopeService { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /tj-auth/tj-auth-resource-sdk/src/main/java/com/tianji/authsdk/resource/interceptors/FeignRelayUserInterceptor.java: -------------------------------------------------------------------------------- 1 | package com.tianji.authsdk.resource.interceptors; 2 | 3 | import com.tianji.auth.common.constants.JwtConstants; 4 | import com.tianji.common.utils.UserContext; 5 | import feign.RequestInterceptor; 6 | import feign.RequestTemplate; 7 | 8 | public class FeignRelayUserInterceptor implements RequestInterceptor { 9 | @Override 10 | public void apply(RequestTemplate template) { 11 | Long userId = UserContext.getUser(); 12 | if (userId == null) { 13 | return; 14 | } 15 | template.header(JwtConstants.USER_HEADER, userId.toString()); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /tj-auth/tj-auth-service/src/main/java/com/tianji/auth/service/IMenuService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.auth.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.tianji.auth.domain.po.Menu; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | *

10 | * 权限表,包括菜单权限和访问路径权限 服务类 11 | *

12 | * 13 | * @author 虎哥 14 | * @since 2022-06-16 15 | */ 16 | public interface IMenuService extends IService { 17 | 18 | List listMenuByUser(); 19 | 20 | void saveMenu(Menu menu); 21 | 22 | void deleteMenu(Long id); 23 | 24 | void bindRoleMenus(Long roleId, List menuIds); 25 | 26 | void deleteRoleMenus(Long roleId, List menuIds); 27 | } 28 | -------------------------------------------------------------------------------- /tj-media/src/main/java/com/tianji/media/domain/dto/MediaDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.media.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | @Data 8 | @ApiModel(description = "视频文件信息") 9 | public class MediaDTO { 10 | @ApiModelProperty(value = "数据库mediaId", example = "1") 11 | private Long id; 12 | 13 | @ApiModelProperty(value = "文件名称", example = "Redis实战课.mp4") 14 | private String filename; 15 | 16 | @ApiModelProperty(value = "视频时长,单位秒", example = "57.23") 17 | private Float duration; 18 | 19 | @ApiModelProperty(value = "视频大小,单位字节", example = "1024") 20 | private Long size; 21 | } 22 | -------------------------------------------------------------------------------- /tj-trade/src/main/java/com/tianji/trade/domain/dto/RefundFormDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.trade.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | import javax.validation.constraints.NotNull; 8 | 9 | @Data 10 | @ApiModel(description = "退款申请数据") 11 | public class RefundFormDTO { 12 | @ApiModelProperty("订单明细id") 13 | @NotNull(message = "请选中退款订单") 14 | private Long orderDetailId; 15 | @ApiModelProperty("退款原因") 16 | @NotNull(message = "请选择退款原因") 17 | private String refundReason; 18 | @ApiModelProperty("问题说明") 19 | @NotNull(message = "问题说明不能为空") 20 | private String questionDesc; 21 | } 22 | -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/exceptions/RequestTimeoutException.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.exceptions; 2 | 3 | /** 4 | * 请求超时异常 5 | * 6 | * @ClassName RequestTimeoutException 7 | * @author wusongsong 8 | * @since 2022/6/30 16:58 9 | * @version 1.0.0 10 | **/ 11 | public class RequestTimeoutException extends CommonException{ 12 | public RequestTimeoutException(String message) { 13 | super(message); 14 | } 15 | 16 | public RequestTimeoutException(int code, String message) { 17 | super(code, message); 18 | } 19 | 20 | public RequestTimeoutException(int code, String message, Throwable cause) { 21 | super(code, message, cause); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /tj-course/src/main/java/com/tianji/course/domain/vo/NameExistVO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.course.domain.vo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import javax.validation.constraints.NotNull; 9 | 10 | /** 11 | * @ClassName NameExistVO 12 | * @Author wusongsong 13 | * @Date 2022/9/19 16:20 14 | * @Version 15 | **/ 16 | @Data 17 | @AllArgsConstructor 18 | @NoArgsConstructor 19 | @Builder 20 | public class NameExistVO { 21 | public static final NameExistVO EXISTED = new NameExistVO(true); 22 | public static final NameExistVO NOT_EXIST = new NameExistVO(false); 23 | 24 | private Boolean existed; 25 | } 26 | -------------------------------------------------------------------------------- /tj-trade/src/main/resources/mapper/OrderMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 12 | 13 | -------------------------------------------------------------------------------- /tj-promotion/src/main/java/com/tianji/promotion/domain/query/CodeQuery.java: -------------------------------------------------------------------------------- 1 | package com.tianji.promotion.domain.query; 2 | 3 | import com.tianji.common.domain.query.PageQuery; 4 | import io.swagger.annotations.ApiModel; 5 | import io.swagger.annotations.ApiModelProperty; 6 | import lombok.Data; 7 | import lombok.EqualsAndHashCode; 8 | 9 | import javax.validation.constraints.NotNull; 10 | 11 | @EqualsAndHashCode(callSuper = true) 12 | @Data 13 | @ApiModel(description = "兑换码查询参数") 14 | public class CodeQuery extends PageQuery { 15 | @ApiModelProperty("兑换码对应的优惠券id") 16 | @NotNull 17 | private Long couponId; 18 | @ApiModelProperty("兑换码状态,1:未兑换,2:已兑换") 19 | @NotNull 20 | private Integer status; 21 | } -------------------------------------------------------------------------------- /tj-api/src/main/java/com/tianji/api/dto/course/SectionInfoDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.api.dto.course; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | 9 | @Data 10 | @ApiModel("小节信息,包含课程id和媒资id") 11 | @AllArgsConstructor 12 | @NoArgsConstructor 13 | public class SectionInfoDTO { 14 | @ApiModelProperty("课程id") 15 | private Long courseId; 16 | @ApiModelProperty("媒资id") 17 | private Long mediaId; 18 | @ApiModelProperty("是否支持免费试看") 19 | private Boolean trailer; 20 | @ApiModelProperty("免费时长,不免费为0,单位分钟") 21 | private Integer freeDuration; 22 | } 23 | -------------------------------------------------------------------------------- /tj-data/src/main/java/com/tianji/data/service/BoardService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.data.service; 2 | 3 | 4 | import com.tianji.data.model.dto.BoardDataSetDTO; 5 | import com.tianji.data.model.vo.EchartsVO; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * @ClassName BoardService 11 | * @Author wusongsong 12 | * @Date 2022/10/10 16:30 13 | * @Version 14 | **/ 15 | public interface BoardService { 16 | 17 | /** 18 | * 看板数据获取 19 | * 20 | * @param types 数据类型 21 | * @return 22 | */ 23 | EchartsVO boardData(List types); 24 | 25 | /** 26 | * 设置看板数据 27 | * 28 | * @param boardDataSetDTO 29 | */ 30 | void setBoardData(BoardDataSetDTO boardDataSetDTO); 31 | } -------------------------------------------------------------------------------- /tj-pay/tj-pay-service/src/main/java/com/tianji/pay/third/wx/config/WxPayProperties.java: -------------------------------------------------------------------------------- 1 | package com.tianji.pay.third.wx.config; 2 | 3 | import lombok.Data; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | 6 | @Data 7 | @ConfigurationProperties(prefix = "tj.pay.wx") 8 | public class WxPayProperties{ 9 | /** 10 | * appId 11 | */ 12 | private String appId; 13 | /** 14 | * 商户号 15 | */ 16 | private String mchId; 17 | /** 18 | * 商户证书序号 19 | */ 20 | private String mchSerialNo; 21 | /** 22 | * 私钥字符串 23 | */ 24 | private String privateKey; 25 | /** 26 | * APIv3秘钥 27 | */ 28 | private String apiV3Key; 29 | } 30 | -------------------------------------------------------------------------------- /tj-pay/tj-pay-service/src/main/java/com/tianji/pay/third/IPayService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.pay.third; 2 | 3 | import com.tianji.pay.third.model.PayStatusResponse; 4 | import com.tianji.pay.third.model.PrepayResponse; 5 | import com.tianji.pay.third.model.RefundResponse; 6 | 7 | /** 8 | * 统一支付服务接口 9 | */ 10 | public interface IPayService { 11 | 12 | PrepayResponse createPrepayOrder(String title, String orderNo, Integer amount); 13 | 14 | PayStatusResponse queryPayOrderStatus(String payOrderNo); 15 | 16 | RefundResponse refundOrder(String payOrderNo, String refundOrderNo, Integer refundAmount, Integer totalAmount); 17 | 18 | RefundResponse queryRefundStatus(String orderNo, String refundOrderNo); 19 | } 20 | -------------------------------------------------------------------------------- /tj-auth/tj-auth-resource-sdk/src/main/java/com/tianji/authsdk/resource/config/FeignRelayUserAutoConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.tianji.authsdk.resource.config; 2 | 3 | import feign.Feign; 4 | import com.tianji.authsdk.resource.interceptors.FeignRelayUserInterceptor; 5 | import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; 6 | import org.springframework.context.annotation.Bean; 7 | import org.springframework.context.annotation.Configuration; 8 | 9 | @Configuration 10 | @ConditionalOnClass(Feign.class) 11 | public class FeignRelayUserAutoConfiguration { 12 | 13 | @Bean 14 | public FeignRelayUserInterceptor feignRelayUserInterceptor(){ 15 | return new FeignRelayUserInterceptor(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /tj-learning/src/main/java/com/tianji/learning/domain/vo/SignResultVO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.learning.domain.vo; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnore; 4 | import io.swagger.annotations.ApiModel; 5 | import io.swagger.annotations.ApiModelProperty; 6 | import lombok.Data; 7 | 8 | @Data 9 | @ApiModel(description = "签到结果") 10 | public class SignResultVO { 11 | @ApiModelProperty("连续签到天数") 12 | private Integer signDays; 13 | @ApiModelProperty("签到得分") 14 | private Integer signPoints = 1; 15 | @ApiModelProperty("连续签到奖励积分,连续签到超过7天以上才有奖励") 16 | private Integer rewardPoints; 17 | 18 | @JsonIgnore 19 | public int totalPoints(){ 20 | return signPoints + rewardPoints; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /tj-remark/src/main/java/com/tianji/remark/domain/dto/LikeRecordFormDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.remark.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | import javax.validation.constraints.NotNull; 8 | 9 | @Data 10 | @ApiModel(description = "点赞记录表单实体") 11 | public class LikeRecordFormDTO { 12 | @ApiModelProperty("点赞业务id") 13 | @NotNull(message = "业务id不能为空") 14 | private Long bizId; 15 | 16 | @ApiModelProperty("点赞业务类型") 17 | @NotNull(message = "业务类型不能为空") 18 | private String bizType; 19 | 20 | @ApiModelProperty("是否点赞,true:点赞;false:取消点赞") 21 | @NotNull(message = "是否点赞不能为空") 22 | private Boolean liked; 23 | } 24 | -------------------------------------------------------------------------------- /tj-pay/tj-pay-domain/src/main/java/com/tianji/pay/sdk/dto/RefundApplyDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.pay.sdk.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Builder; 7 | import lombok.Data; 8 | import lombok.NoArgsConstructor; 9 | 10 | @Data 11 | @AllArgsConstructor 12 | @NoArgsConstructor 13 | @Builder 14 | @ApiModel(description = "退款请求参数") 15 | public class RefundApplyDTO { 16 | 17 | @ApiModelProperty("支付时传入的业务订单id") 18 | private Long bizOrderNo; 19 | @ApiModelProperty("本次要退款的业务订单id,因为有拆单,这里是子订单id") 20 | private Long bizRefundOrderNo; 21 | @ApiModelProperty("子订单的退款金额,单位为分") 22 | private Integer refundAmount; 23 | } -------------------------------------------------------------------------------- /tj-trade/src/main/java/com/tianji/trade/domain/vo/PlaceOrderResultVO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.trade.domain.vo; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Builder; 6 | import lombok.Data; 7 | 8 | import java.time.LocalDateTime; 9 | 10 | @Data 11 | @Builder 12 | @ApiModel(description = "下单响应信息") 13 | public class PlaceOrderResultVO { 14 | @ApiModelProperty("订单号") 15 | private Long orderId; 16 | @ApiModelProperty("支付金额") 17 | private Integer payAmount; 18 | @ApiModelProperty("待支付的订单,超时时间") 19 | private LocalDateTime payOutTime; 20 | @ApiModelProperty("订单状态,1:待支付,2:已支付,3:已关闭,4:已完成,5:已报名, 6:申请退款") 21 | private Integer status; 22 | } 23 | 24 | -------------------------------------------------------------------------------- /tj-user/src/main/java/com/tianji/user/domain/dto/UserFormDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.user.domain.dto; 2 | 3 | import com.tianji.api.dto.user.UserDTO; 4 | import io.swagger.annotations.ApiModel; 5 | import io.swagger.annotations.ApiModelProperty; 6 | import lombok.Data; 7 | import lombok.EqualsAndHashCode; 8 | 9 | import javax.validation.constraints.NotNull; 10 | 11 | @EqualsAndHashCode(callSuper = true) 12 | @Data 13 | @ApiModel(description = "修改用户信息的表单,带有密码") 14 | public class UserFormDTO extends UserDTO { 15 | @ApiModelProperty(value = "原始密码", example = "123321") 16 | @NotNull 17 | private String oldPassword; 18 | @ApiModelProperty(value = "新密码", example = "123321") 19 | @NotNull 20 | private String password; 21 | } 22 | -------------------------------------------------------------------------------- /tj-remark/src/main/java/com/tianji/remark/service/ILikedRecordService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.remark.service; 2 | 3 | import com.tianji.remark.domain.dto.LikeRecordFormDTO; 4 | import com.tianji.remark.domain.po.LikedRecord; 5 | import com.baomidou.mybatisplus.extension.service.IService; 6 | 7 | import java.util.List; 8 | import java.util.Set; 9 | 10 | /** 11 | *

12 | * 点赞记录表 服务类 13 | *

14 | * 15 | * @author sefy 16 | * @since 2024-05-01 17 | */ 18 | public interface ILikedRecordService extends IService { 19 | 20 | void addLikeRecord(LikeRecordFormDTO dto); 21 | 22 | Set getLikesStatusByBizIds(List bizIds); 23 | 24 | void readLikedTimesAndSendMessage(String bizType, int maxBizSize); 25 | } 26 | -------------------------------------------------------------------------------- /tj-api/src/main/java/com/tianji/api/client/remark/RemarkClient.java: -------------------------------------------------------------------------------- 1 | package com.tianji.api.client.remark; 2 | 3 | import com.tianji.api.client.remark.fallback.RemarkClientFallBack; 4 | import io.swagger.annotations.ApiOperation; 5 | import org.springframework.cloud.openfeign.FeignClient; 6 | import org.springframework.web.bind.annotation.GetMapping; 7 | import org.springframework.web.bind.annotation.RequestParam; 8 | 9 | import java.util.List; 10 | import java.util.Set; 11 | 12 | @FeignClient(value = "remark-service",fallbackFactory = RemarkClientFallBack.class) //被调用方的服务名 13 | public interface RemarkClient { 14 | 15 | @GetMapping("/likes/list") 16 | public Set getLikesStatusByBizIds(@RequestParam("bizIds") List bizIds); 17 | } 18 | -------------------------------------------------------------------------------- /tj-course/src/main/java/com/tianji/course/constants/RedisConstants.java: -------------------------------------------------------------------------------- 1 | package com.tianji.course.constants; 2 | 3 | /** 4 | * @author wusongsong 5 | * @since 2022/7/17 17:20 6 | * @version 1.0.0 7 | **/ 8 | public class RedisConstants { 9 | 10 | //一级二级分类拥有的三级分类的数量 11 | public static final String REDIS_KEY_CATEGORY_THIRD_NUMBER = "CATEGORY:THIRD_NUMBER"; 12 | 13 | public static class Formatter { 14 | public static final String STATISTICS_EXAMINFO = "COURSE:SUBJECT:ANSWER_PROCESS_#{examDetailInfoDTO.recordId}"; 15 | public static final String STATISTICS_COURSE_NUM_CATE = "COURSE:COURSE_NUM_CATEGORY"; 16 | public static final String CATEGORY_ID_LIST_HAVE_COURSE = "COURSE:CATEGORY_ID_WITH_COURSE"; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /tj-exam/src/main/java/com/tianji/exam/mapper/QuestionBizMapper.java: -------------------------------------------------------------------------------- 1 | package com.tianji.exam.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.tianji.api.dto.IdAndNumDTO; 5 | import com.tianji.exam.domain.po.QuestionBiz; 6 | import org.apache.ibatis.annotations.Param; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | *

12 | * 问题和业务关联表,例如把小节id和问题id关联,一个小节下可以有多个问题 Mapper 接口 13 | *

14 | * 15 | * @author 虎哥 16 | * @since 2022-09-02 17 | */ 18 | public interface QuestionBizMapper extends BaseMapper { 19 | 20 | List countQuestionScoresByBizIds(@Param("bizIds") Iterable bizIds); 21 | 22 | List countUsedTimes(@Param("qIds") Iterable qIds); 23 | } 24 | -------------------------------------------------------------------------------- /tj-learning/src/main/java/com/tianji/learning/service/ILearningRecordService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.learning.service; 2 | 3 | import com.tianji.api.dto.leanring.LearningLessonDTO; 4 | import com.tianji.learning.domain.dto.LearningRecordFormDTO; 5 | import com.tianji.learning.domain.po.LearningRecord; 6 | import com.baomidou.mybatisplus.extension.service.IService; 7 | 8 | /** 9 | *

10 | * 学习记录表 服务类 11 | *

12 | * 13 | * @author sefy 14 | * @since 2024-04-14 15 | */ 16 | public interface ILearningRecordService extends IService { 17 | 18 | //查询当前用户指定课程的学习进度 19 | LearningLessonDTO queryLearningRecordByCourse(Long courseId); 20 | 21 | //提交学习记录 22 | void addLearningRecord(LearningRecordFormDTO dto); 23 | } 24 | -------------------------------------------------------------------------------- /tj-trade/src/main/java/com/tianji/trade/service/ICartService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.trade.service; 2 | 3 | import com.tianji.trade.domain.po.Cart; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | import com.tianji.trade.domain.vo.CartVO; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | *

11 | * 购物车条目信息,也就是购物车中的课程 服务类 12 | *

13 | * 14 | * @author 虎哥 15 | * @since 2022-08-28 16 | */ 17 | public interface ICartService extends IService { 18 | 19 | void addCourse2Cart(Long courseId); 20 | 21 | List getMyCarts(); 22 | 23 | void deleteCartById(Long id); 24 | 25 | void deleteCartByIds(List ids); 26 | 27 | void deleteCartByUserAndCourseIds(Long userId, List courseIds); 28 | } 29 | -------------------------------------------------------------------------------- /tj-course/src/main/java/com/tianji/course/domain/vo/SimpleCategoryVO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.course.domain.vo; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Builder; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | * 所有课程分类数据 13 | * @author wusongsong 14 | * @since 2022/7/14 18:15 15 | * @version 1.0.0 16 | **/ 17 | @Data 18 | @Builder 19 | @AllArgsConstructor 20 | @NoArgsConstructor 21 | @ApiModel(description = "所有课程分类数据") 22 | public class SimpleCategoryVO { 23 | private Long id; 24 | private String name; 25 | private List children; 26 | private Integer level; 27 | private Long parentId; 28 | } 29 | -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/java/com/tianji/message/thirdparty/tencent/TencentSmsHandler.java: -------------------------------------------------------------------------------- 1 | package com.tianji.message.thirdparty.tencent; 2 | 3 | import com.tianji.api.dto.sms.SmsInfoDTO; 4 | import com.tianji.message.domain.po.MessageTemplate; 5 | import com.tianji.message.thirdparty.ISmsHandler; 6 | import lombok.extern.slf4j.Slf4j; 7 | import org.springframework.stereotype.Service; 8 | 9 | @Service("tencent") 10 | @Slf4j 11 | public class TencentSmsHandler implements ISmsHandler { 12 | @Override 13 | public void send(SmsInfoDTO platformSmsInfoDTO, MessageTemplate template) { 14 | //第三方发送短信验证码 15 | log.info("tencent平台,短信发送成功 ..."); 16 | log.info("platformSmsInfoDTO:{}", platformSmsInfoDTO); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /tj-promotion/src/main/resources/lua/exchange_coupon.lua: -------------------------------------------------------------------------------- 1 | if(redis.call('GETBIT', KEYS[1], ARGV[1]) == 1) then 2 | return "1" 3 | end 4 | local arr = redis.call('ZRANGEBYSCORE', KEYS[2], ARGV[1], ARGV[2], 'LIMIT', 0, 1); 5 | if(#arr == 0) then 6 | return "2" 7 | end 8 | local cid = arr[1] 9 | local _k1 = "prs:coupon:" .. cid 10 | local _k2 = "prs:user:coupon:" .. cid 11 | if(redis.call('EXISTS', _k1) == 0) then 12 | return "3" 13 | end 14 | if(tonumber(redis.call('time')[1]) > tonumber(redis.call('HGET', _k1, 'issueEndTime'))) then 15 | return "4" 16 | end 17 | if(tonumber(redis.call('HGET', _k1, 'userLimit')) < redis.call('HINCRBY', _k2, ARGV[3], 1)) then 18 | return "5" 19 | end 20 | redis.call('SETBIT', KEYS[1], ARGV[1], "1") 21 | return cid -------------------------------------------------------------------------------- /tj-learning/src/main/java/com/tianji/learning/domain/dto/LearningPlanDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.learning.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | import org.hibernate.validator.constraints.Range; 7 | 8 | import javax.validation.constraints.Min; 9 | import javax.validation.constraints.NotNull; 10 | 11 | @Data 12 | @ApiModel(description = "学习计划表单实体") 13 | public class LearningPlanDTO { 14 | @NotNull(message = "课程id不能为null") 15 | @ApiModelProperty("课程表id") 16 | @Min(1) 17 | private Long courseId; 18 | @NotNull(message = "学习频率不能为null") 19 | @Range(min = 1, max = 50) 20 | @ApiModelProperty("每周学习频率") 21 | private Integer freq; 22 | } 23 | -------------------------------------------------------------------------------- /tj-message/tj-message-api/src/main/java/com/tianji/message/api/client/AsyncSmsClient.java: -------------------------------------------------------------------------------- 1 | package com.tianji.message.api.client; 2 | 3 | import com.tianji.common.autoconfigure.mq.RabbitMqHelper; 4 | import com.tianji.common.constants.MqConstants; 5 | import com.tianji.message.domain.dto.SmsInfoDTO; 6 | 7 | public class AsyncSmsClient { 8 | private final RabbitMqHelper mqHelper; 9 | 10 | public AsyncSmsClient(RabbitMqHelper mqHelper) { 11 | this.mqHelper = mqHelper; 12 | } 13 | 14 | /** 15 | * 基于 MQ 异步发送短信 16 | * @param smsInfoDTO 短信相关信息 17 | */ 18 | public void sendMessage(SmsInfoDTO smsInfoDTO){ 19 | mqHelper.send(MqConstants.Exchange.SMS_EXCHANGE, MqConstants.Key.SMS_MESSAGE, smsInfoDTO); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /tj-auth/tj-auth-service/src/main/resources/mapper/StatusEnumValid.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/domain/CommonCache.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.domain; 2 | 3 | import java.io.Serializable; 4 | 5 | public class CommonCache implements Serializable { 6 | private static final long serialVersionUID = 2448735813082442223L; 7 | //缓存数据是否存在 8 | protected boolean exist; 9 | 10 | //稍后再试 11 | protected boolean retryLater; 12 | 13 | public boolean isExist() { 14 | return exist; 15 | } 16 | 17 | public void setExist(boolean exist) { 18 | this.exist = exist; 19 | } 20 | 21 | 22 | public boolean isRetryLater() { 23 | return retryLater; 24 | } 25 | 26 | public void setRetryLater(boolean retryLater) { 27 | this.retryLater = retryLater; 28 | } 29 | } -------------------------------------------------------------------------------- /tj-message/tj-message-service/src/main/java/com/tianji/message/thirdparty/uc/UcSmsHandler.java: -------------------------------------------------------------------------------- 1 | package com.tianji.message.thirdparty.uc; 2 | 3 | import com.tianji.api.dto.sms.SmsInfoDTO; 4 | import com.tianji.message.domain.po.MessageTemplate; 5 | import com.tianji.message.thirdparty.ISmsHandler; 6 | import lombok.extern.slf4j.Slf4j; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | * uCloud平台短信发送功能 11 | */ 12 | @Service("uCloud") 13 | @Slf4j 14 | public class UcSmsHandler implements ISmsHandler { 15 | @Override 16 | public void send(SmsInfoDTO platformSmsInfoDTO, MessageTemplate template) { 17 | //第三方发送短信验证码 18 | log.info("短信发送成功 ..."); 19 | log.info("platformSmsInfoDTO:{}", platformSmsInfoDTO); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /tj-auth/tj-auth-service/src/main/java/com/tianji/auth/domain/vo/LoginRecordVO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.auth.domain.vo; 2 | 3 | import lombok.Data; 4 | 5 | import java.time.LocalDate; 6 | import java.time.LocalDateTime; 7 | 8 | @Data 9 | public class LoginRecordVO { 10 | /** 11 | * 用户id 12 | */ 13 | private Long userId; 14 | 15 | /** 16 | * 登录时间 17 | */ 18 | private LocalDateTime loginTime; 19 | 20 | /** 21 | * 登出时间 22 | */ 23 | private LocalDateTime logoutTime; 24 | 25 | /** 26 | * 登录日期 27 | */ 28 | private LocalDate loginDate; 29 | 30 | /** 31 | * 登录时长,单位是秒 32 | */ 33 | private Long duration; 34 | 35 | /** 36 | * ip地址 37 | */ 38 | private String ipv4; 39 | } 40 | -------------------------------------------------------------------------------- /tj-api/src/main/java/com/tianji/api/dto/course/CoursePurchaseInfoDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.api.dto.course; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | 9 | /** 10 | * 课程支付相关信息 课程状态 11 | * @author wusongsong 12 | * @since 2022/7/26 20:41 13 | * @version 1.0.0 14 | **/ 15 | @Data 16 | @ApiModel("课程购买信息") 17 | @NoArgsConstructor 18 | @AllArgsConstructor 19 | public class CoursePurchaseInfoDTO { 20 | @ApiModelProperty("报名人数") 21 | private Integer enrollNum; 22 | @ApiModelProperty("退款人数") 23 | private Integer refundNum; 24 | @ApiModelProperty("实付总金额") 25 | private Integer realPayAmount; 26 | } 27 | -------------------------------------------------------------------------------- /tj-course/src/main/java/com/tianji/course/constants/RedisContants.java: -------------------------------------------------------------------------------- 1 | package com.tianji.course.constants; 2 | 3 | /** 4 | * @ClassName RedisContants 5 | * @Author wusongsong 6 | * @Date 2022/7/17 17:20 7 | * @Version 8 | **/ 9 | public class RedisContants { 10 | 11 | //一级二级分类拥有的三级分类的数量 12 | public static final String REDIS_KEY_CATEGORY_THIRD_NUMBER = "CATEGORY:THIRD_NUMBER"; 13 | 14 | public static class Formatter { 15 | public static final String STATISTICS_EXAMINFO = "COURSE:SUBJECT:ANSWER_PROCESS_#{examDetailInfoDTO.recordId}"; 16 | public static final String STATISTICS_COURSE_NUM_CATE = "COURSE:COURSE_NUM_CATEGORY"; 17 | public static final String CATEGORY_ID_LIST_HAVE_COURSE = "COURSE:CATEGORY_ID_WITH_COURSE"; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /tj-learning/src/main/java/com/tianji/learning/domain/query/QuestionPageQuery.java: -------------------------------------------------------------------------------- 1 | package com.tianji.learning.domain.query; 2 | 3 | import com.tianji.common.domain.query.PageQuery; 4 | import io.swagger.annotations.ApiModel; 5 | import io.swagger.annotations.ApiModelProperty; 6 | import lombok.Data; 7 | import lombok.EqualsAndHashCode; 8 | 9 | @EqualsAndHashCode(callSuper = true) 10 | @Data 11 | @ApiModel(description = "互动问题分页查询条件") 12 | public class QuestionPageQuery extends PageQuery { 13 | // 用户端查询条件 14 | @ApiModelProperty(value = "课程id") 15 | private Long courseId; 16 | @ApiModelProperty(value = "小节id", example = "1") 17 | private Long sectionId; 18 | @ApiModelProperty(value = "是否只查询我的问题", example = "1") 19 | private Boolean onlyMine; 20 | } 21 | -------------------------------------------------------------------------------- /tj-pay/tj-pay-service/src/main/java/com/tianji/pay/third/model/PrepayResponse.java: -------------------------------------------------------------------------------- 1 | package com.tianji.pay.third.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | /** 9 | * 预支付下单的响应结果 10 | */ 11 | @Data 12 | @NoArgsConstructor 13 | @AllArgsConstructor 14 | @Builder 15 | public class PrepayResponse { 16 | /** 17 | * 是否成功 18 | */ 19 | private boolean success; 20 | /** 21 | * 支付链接,用于生产二维码 22 | */ 23 | private String payUrl; 24 | /** 25 | * 响应状态码 26 | */ 27 | private String code; 28 | /** 29 | * 响应消息 30 | */ 31 | private String msg; 32 | /** 33 | * 响应细节 34 | */ 35 | private String detail; 36 | } 37 | -------------------------------------------------------------------------------- /tj-course/src/main/java/com/tianji/course/handler/CourseJobHandler.java: -------------------------------------------------------------------------------- 1 | package com.tianji.course.handler; 2 | 3 | import com.tianji.course.service.ICourseService; 4 | import com.xxl.job.core.handler.annotation.XxlJob; 5 | import lombok.extern.slf4j.Slf4j; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.stereotype.Component; 8 | 9 | /** 10 | * @ClassName CourseJobHandler 11 | * @Author wusongsong 12 | * @Date 2022/9/16 15:04 13 | * @Version 14 | **/ 15 | @Component 16 | @Slf4j 17 | public class CourseJobHandler { 18 | 19 | @Autowired 20 | private ICourseService courseService; 21 | 22 | @XxlJob("courseFinished") 23 | public void courseFinished(){ 24 | courseService.courseFinished(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /tj-learning/src/main/java/com/tianji/learning/service/IInteractionReplyService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.learning.service; 2 | 3 | import com.tianji.common.domain.dto.PageDTO; 4 | import com.tianji.learning.domain.dto.ReplyDTO; 5 | import com.tianji.learning.domain.po.InteractionReply; 6 | import com.baomidou.mybatisplus.extension.service.IService; 7 | import com.tianji.learning.domain.query.ReplyPageQuery; 8 | import com.tianji.learning.domain.vo.ReplyVO; 9 | 10 | /** 11 | *

12 | * 互动问题的回答或评论 服务类 13 | *

14 | * 15 | * @author sefy 16 | * @since 2024-04-19 17 | */ 18 | public interface IInteractionReplyService extends IService { 19 | 20 | void saveReply(ReplyDTO dto); 21 | 22 | PageDTO queryReplyVoPage(ReplyPageQuery query); 23 | } 24 | -------------------------------------------------------------------------------- /tj-promotion/src/main/java/com/tianji/promotion/discount/Discount.java: -------------------------------------------------------------------------------- 1 | package com.tianji.promotion.discount; 2 | 3 | import com.tianji.promotion.domain.po.Coupon; 4 | 5 | /** 6 | *

优惠券折扣功能接口

7 | */ 8 | public interface Discount { 9 | /** 10 | * 判断当前价格是否满足优惠券使用限制 11 | * @param totalAmount 订单总价 12 | * @param coupon 优惠券信息 13 | * @return 是否可以使用优惠券 14 | */ 15 | boolean canUse(int totalAmount, Coupon coupon); 16 | 17 | /** 18 | * 计算折扣金额 19 | * @param totalAmount 总金额 20 | * @param coupon 优惠券信息 21 | * @return 折扣金额 22 | */ 23 | int calculateDiscount(int totalAmount, Coupon coupon); 24 | 25 | /** 26 | * 根据优惠券规则返回规则描述信息 27 | * @return 规则描述信息 28 | */ 29 | String getRule(Coupon coupon); 30 | } 31 | -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/utils/MarkedRunnable.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.utils; 2 | 3 | import org.slf4j.MDC; 4 | 5 | import java.util.Map; 6 | 7 | public class MarkedRunnable implements Runnable{ 8 | private Runnable runnable; 9 | private Map context; 10 | public MarkedRunnable(Runnable runnable) { 11 | this.runnable = runnable; 12 | this.context = MDC.getCopyOfContextMap(); 13 | } 14 | 15 | @Override 16 | public void run() { 17 | if(context == null){ 18 | MDC.clear(); 19 | }else { 20 | MDC.setContextMap(context); 21 | } 22 | try { 23 | runnable.run(); 24 | }finally { 25 | MDC.clear(); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /tj-api/src/main/java/com/tianji/api/client/course/CatalogueClient.java: -------------------------------------------------------------------------------- 1 | package com.tianji.api.client.course; 2 | 3 | import com.tianji.api.dto.course.CataSimpleInfoDTO; 4 | import org.springframework.cloud.openfeign.FeignClient; 5 | import org.springframework.web.bind.annotation.GetMapping; 6 | import org.springframework.web.bind.annotation.RequestParam; 7 | 8 | import java.util.List; 9 | 10 | @FeignClient(contextId = "catalogue", value = "course-service",path = "catalogues") 11 | public interface CatalogueClient { 12 | 13 | /** 14 | * 根据目录id列表查询目录信息 15 | * 16 | * @param ids 目录id列表 17 | * @return id列表中对应的目录基础信息 18 | */ 19 | @GetMapping("/batchQuery") 20 | List batchQueryCatalogue(@RequestParam("ids") Iterable ids); 21 | 22 | 23 | } -------------------------------------------------------------------------------- /tj-course/src/main/java/com/tianji/course/domain/vo/CataSubjectVO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.course.domain.vo; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | /** 8 | * 目录和习题模型 9 | * @author wusongsong 10 | * @since 2022/7/11 17:45 11 | * @version 1.0.0 12 | **/ 13 | @Data 14 | @ApiModel(description = "课程题目统计") 15 | public class CataSubjectVO { 16 | @ApiModelProperty("小节或测试id") 17 | private Long cataId; 18 | @ApiModelProperty("小节或测试名称") 19 | private String cataName; 20 | @ApiModelProperty("类型,2:节,3:测试") 21 | private Integer type; 22 | @ApiModelProperty("题目数量") 23 | private Integer subjectNum; 24 | @ApiModelProperty("题目总分") 25 | private Integer subjectScore; 26 | } 27 | -------------------------------------------------------------------------------- /tj-api/src/main/java/com/tianji/api/dto/IdAndNumDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.api.dto; 2 | 3 | import com.tianji.common.utils.CollUtils; 4 | import lombok.Data; 5 | 6 | import java.util.List; 7 | import java.util.Map; 8 | import java.util.stream.Collectors; 9 | 10 | /** 11 | * id和nun模型,一个id对应的数量可以用与查询id和num的关系 12 | * @author wusongsong 13 | * @since 2022/8/3 9:27 14 | * @version 1.0.0 15 | **/ 16 | @Data 17 | public class IdAndNumDTO { 18 | private Long id; 19 | private Integer num; 20 | 21 | public static Map toMap(List list){ 22 | if (CollUtils.isEmpty(list)) { 23 | return CollUtils.emptyMap(); 24 | } 25 | return list.stream().collect(Collectors.toMap(IdAndNumDTO::getId, IdAndNumDTO::getNum)); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /tj-trade/src/main/java/com/tianji/trade/domain/vo/PayChannelVO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.trade.domain.vo; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | /** 8 | *

9 | * 支付渠道vo对象 10 | *

11 | * 12 | * @author 虎哥 13 | * @since 2022-08-26 14 | */ 15 | @Data 16 | @ApiModel(description = "支付渠道信息") 17 | public class PayChannelVO { 18 | 19 | @ApiModelProperty("支付渠道id") 20 | private Long id; 21 | @ApiModelProperty("支付渠道名称") 22 | private String name; 23 | @ApiModelProperty("支付渠道编码,唯一标示") 24 | private String channelCode; 25 | @ApiModelProperty("渠道优先级,数字越小优先级越高") 26 | private Integer channelPriority; 27 | @ApiModelProperty("渠道图标") 28 | private String channelIcon; 29 | } 30 | -------------------------------------------------------------------------------- /tj-trade/src/main/resources/mapper/RefundApplyMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 13 | 14 | -------------------------------------------------------------------------------- /tj-promotion/src/main/java/com/tianji/promotion/config/EtcdConfig.java: -------------------------------------------------------------------------------- 1 | package com.tianji.promotion.config; 2 | 3 | import com.jd.platform.hotkey.common.configcenter.IConfigCenter; 4 | import com.jd.platform.hotkey.common.configcenter.etcd.JdEtcdBuilder; 5 | import org.springframework.beans.factory.annotation.Value; 6 | import org.springframework.context.annotation.Bean; 7 | import org.springframework.context.annotation.Configuration; 8 | 9 | /** 10 | * @author wuweifeng 11 | * @version 1.0 12 | * @date 2020-07-27 13 | */ 14 | @Configuration 15 | public class EtcdConfig { 16 | 17 | @Value("${etcd.server}") 18 | private String etcd; 19 | 20 | 21 | @Bean 22 | public IConfigCenter client() { 23 | //连接多个时,逗号分隔 24 | return JdEtcdBuilder.build(etcd); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /tj-course/src/main/resources/mapper/CourseCataSubjectMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | id, course_id, cata_id, subject_id 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /tj-learning/src/main/java/com/tianji/learning/domain/vo/PointsBoardSeasonVO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.learning.domain.vo; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | import java.time.LocalDate; 8 | 9 | /** 10 | *

11 | * 12 | *

13 | * 14 | * @author 虎哥 15 | * @since 2022-08-02 16 | */ 17 | @Data 18 | @ApiModel(description = "积分榜赛季信息") 19 | public class PointsBoardSeasonVO { 20 | 21 | @ApiModelProperty("赛季id,1,就是第1赛季") 22 | private Integer id; 23 | 24 | @ApiModelProperty("赛季名称,例如:第1赛季") 25 | private String name; 26 | 27 | @ApiModelProperty("赛季开始时间") 28 | private LocalDate beginTime; 29 | 30 | @ApiModelProperty("赛季结束时间") 31 | private LocalDate endTime; 32 | 33 | 34 | } 35 | -------------------------------------------------------------------------------- /tj-trade/src/main/java/com/tianji/trade/domain/vo/OrderConfirmVO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.trade.domain.vo; 2 | 3 | import com.tianji.api.dto.promotion.CouponDiscountDTO; 4 | import io.swagger.annotations.ApiModel; 5 | import io.swagger.annotations.ApiModelProperty; 6 | import lombok.Data; 7 | 8 | import java.util.List; 9 | 10 | @Data 11 | @ApiModel(description = "订单确认页信息") 12 | public class OrderConfirmVO { 13 | @ApiModelProperty("订单id") 14 | private Long orderId; 15 | @ApiModelProperty("订单总金额") 16 | private Integer totalAmount; 17 | // @ApiModelProperty("优惠折扣金额") 18 | // private Integer discountAmount; 19 | @ApiModelProperty("优惠折扣方案") 20 | private List discounts; 21 | @ApiModelProperty("订单中包含的课程") 22 | private List courses; 23 | } 24 | -------------------------------------------------------------------------------- /tj-media/src/main/java/com/tianji/media/domain/dto/MediaUploadResultDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.media.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | @Data 8 | @ApiModel(description = "媒体上传的结果") 9 | public class MediaUploadResultDTO { 10 | 11 | @ApiModelProperty(value = "文件在云端的唯一标示", example = "387702302659783576") 12 | private String fileId; 13 | /* 14 | @ApiModelProperty(value = "媒体播放地址", example = "http://xxx.mp4") 15 | private String mediaUrl; 16 | 17 | @ApiModelProperty(value = "媒体封面地址", example = "http://xxx.jpg") 18 | private String coverUrl; 19 | 20 | @ApiModelProperty(value = "文件名称", example = "Redis最佳实践.mp4") 21 | // TODO 限制文件名长度 22 | private String filename;*/ 23 | } 24 | -------------------------------------------------------------------------------- /tj-promotion/src/main/java/com/tianji/promotion/domain/query/CouponQuery.java: -------------------------------------------------------------------------------- 1 | package com.tianji.promotion.domain.query; 2 | 3 | import com.tianji.common.domain.query.PageQuery; 4 | import io.swagger.annotations.ApiModel; 5 | import io.swagger.annotations.ApiModelProperty; 6 | import lombok.Data; 7 | import lombok.EqualsAndHashCode; 8 | import lombok.experimental.Accessors; 9 | 10 | @EqualsAndHashCode(callSuper = true) 11 | @Data 12 | @ApiModel(description = "优惠券查询参数") 13 | @Accessors(chain = true) 14 | public class CouponQuery extends PageQuery { 15 | 16 | @ApiModelProperty("优惠券折扣类型:1:每满减,2:折扣,3:无门槛,4:满减") 17 | private Integer type; 18 | 19 | @ApiModelProperty("优惠券状态,1:待发放,2:发放中,3:已结束, 4:取消/终止") 20 | private Integer status; 21 | 22 | @ApiModelProperty("优惠券名称") 23 | private String name; 24 | } -------------------------------------------------------------------------------- /tj-promotion/src/main/java/com/tianji/promotion/utils/MyLock.java: -------------------------------------------------------------------------------- 1 | package com.tianji.promotion.utils; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | import java.util.concurrent.TimeUnit; 8 | 9 | @Retention(RetentionPolicy.RUNTIME) 10 | @Target(ElementType.METHOD) 11 | public @interface MyLock { 12 | String name(); 13 | 14 | long waitTime() default 1; 15 | 16 | long leaseTime() default -1; 17 | 18 | TimeUnit unit() default TimeUnit.SECONDS; 19 | 20 | //锁的类型 默认为可重入锁 21 | MyLockType lockType() default MyLockType.RE_ENTRANT_LOCK; 22 | 23 | //代表获取锁的失败策略 默认为重试超时后抛出异常 24 | MyLockStrategy lockStrategy() default MyLockStrategy.FAIL_AFTER_RETRY_TIMEOUT; 25 | } -------------------------------------------------------------------------------- /tj-user/src/main/java/com/tianji/user/domain/vo/UserBasicVO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.user.domain.vo; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | 9 | @Data 10 | @NoArgsConstructor 11 | @AllArgsConstructor 12 | @ApiModel(description = "用户信息") 13 | public class UserBasicVO { 14 | @ApiModelProperty(value = "用户id", example = "1") 15 | private Long id; 16 | @ApiModelProperty(value = "用户名称/昵称", example = "李四") 17 | private String name; 18 | @ApiModelProperty(value = "用户类型,1-员工,2-普通学员,3-老师", example = "2") 19 | private Integer type; 20 | @ApiModelProperty(value = "头像", example = "default-user-icon.jpg") 21 | private String icon; 22 | } 23 | -------------------------------------------------------------------------------- /tj-user/src/main/java/com/tianji/user/service/IUserDetailService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.user.service; 2 | 3 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | import com.tianji.user.domain.po.UserDetail; 6 | import com.tianji.user.domain.query.UserPageQuery; 7 | import com.tianji.common.enums.UserType; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | *

13 | * 教师详情表 服务类 14 | *

15 | * 16 | * @author 虎哥 17 | * @since 2022-08-15 18 | */ 19 | public interface IUserDetailService extends IService { 20 | 21 | UserDetail queryById(Long userId); 22 | 23 | List queryByIds(List ids); 24 | 25 | Page queryUserDetailByPage(UserPageQuery pageQuery, UserType type); 26 | } 27 | -------------------------------------------------------------------------------- /tj-common/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | com.tianji.common.autoconfigure.mq.MqConfig,\ 3 | com.tianji.common.autoconfigure.mvc.JsonConfig,\ 4 | com.tianji.common.autoconfigure.mvc.MvcConfig,\ 5 | com.tianji.common.autoconfigure.mvc.ParamCheckerConfig,\ 6 | com.tianji.common.autoconfigure.mybatis.MybatisConfig,\ 7 | com.tianji.common.autoconfigure.redisson.RedissonConfig,\ 8 | com.tianji.common.autoconfigure.swagger.Knife4jConfiguration, \ 9 | com.tianji.common.autoconfigure.xxljob.XxlJobConfig, \ 10 | com.tianji.common.autoconfigure.mq.RocketMqConfig, \ 11 | com.tianji.common.autoconfigure.cache.RedisConfig, \ 12 | com.tianji.common.autoconfigure.cache.LocalCacheConfig, \ 13 | com.tianji.common.autoconfigure.ratelimite.LimiterConfig -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/autoconfigure/mq/DelayedMessageProcessor.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.autoconfigure.mq; 2 | 3 | import org.springframework.amqp.AmqpException; 4 | import org.springframework.amqp.core.Message; 5 | 6 | import java.time.Duration; 7 | 8 | public class DelayedMessageProcessor extends BasicIdMessageProcessor { 9 | 10 | private final long delay; 11 | 12 | public DelayedMessageProcessor(Duration delay) { 13 | this.delay = delay.toMillis(); 14 | } 15 | 16 | @Override 17 | public Message postProcessMessage(Message message) throws AmqpException { 18 | // 1.添加消息id 19 | super.postProcessMessage(message); 20 | // 2.添加延迟时间 21 | message.getMessageProperties().setHeader("x-delay", delay); 22 | return message; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /tj-course/src/main/java/com/tianji/course/domain/po/Category3PO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.course.domain.po; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * @ClassName Category3PO 9 | * @Author wusongsong 10 | * @Date 2022/10/13 15:32 11 | * @Version 12 | **/ 13 | @Data 14 | public class Category3PO { 15 | private Long firstCateId; 16 | private Long secondCateId; 17 | private Long thirdCateId; 18 | 19 | public void setId(List categoryIdList) { 20 | if(firstCateId != null) { 21 | categoryIdList.add(firstCateId); 22 | } 23 | if (secondCateId != null) { 24 | categoryIdList.add(secondCateId); 25 | } 26 | if(thirdCateId != null) { 27 | categoryIdList.add(thirdCateId); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /tj-course/src/main/java/com/tianji/course/properties/CourseProperties.java: -------------------------------------------------------------------------------- 1 | package com.tianji.course.properties; 2 | 3 | import lombok.Data; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | import org.springframework.boot.context.properties.NestedConfigurationProperty; 6 | import org.springframework.context.annotation.Configuration; 7 | 8 | /** 9 | * @ClassName CourseProperties 10 | * @Author wusongsong 11 | * @Date 2022/7/20 9:13 12 | * @Version 13 | **/ 14 | @Data 15 | @Configuration 16 | @ConfigurationProperties(prefix = "course") 17 | public class CourseProperties { 18 | 19 | @NestedConfigurationProperty 20 | private Media media; 21 | 22 | @Data 23 | public static class Media { 24 | //免费试看时间 25 | private Integer trailerDuration; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /tj-learning/src/main/java/com/tianji/learning/service/IPointsBoardService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.learning.service; 2 | 3 | import com.tianji.learning.domain.po.PointsBoard; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | import com.tianji.learning.domain.query.PointsBoardQuery; 6 | import com.tianji.learning.domain.vo.PointsBoardVO; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | *

12 | * 学霸天梯榜 服务类 13 | *

14 | * 15 | * @author sefy 16 | * @since 2024-05-04 17 | */ 18 | public interface IPointsBoardService extends IService { 19 | 20 | //查询赛季积分排行榜 21 | PointsBoardVO queryPointsBoardBySeason(PointsBoardQuery query); 22 | 23 | //查询当前赛季 积分排名榜列表 redis中的zset中查询 24 | public List queryCurrentBoard(String key, Integer pageNo, Integer pageSize); 25 | } 26 | -------------------------------------------------------------------------------- /tj-learning/src/main/java/com/tianji/learning/service/IPointsRecordService.java: -------------------------------------------------------------------------------- 1 | package com.tianji.learning.service; 2 | 3 | import com.tianji.learning.domain.msg.SignInMessage; 4 | import com.tianji.learning.domain.po.PointsRecord; 5 | import com.baomidou.mybatisplus.extension.service.IService; 6 | import com.tianji.learning.domain.vo.PointsStatisticsVO; 7 | import com.tianji.learning.enums.PointsRecordType; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | *

13 | * 学习积分记录,每个月底清零 服务类 14 | *

15 | * 16 | * @author sefy 17 | * @since 2024-05-04 18 | */ 19 | public interface IPointsRecordService extends IService { 20 | 21 | //增加积分记录 22 | void addPointRecord(SignInMessage msg, PointsRecordType type); 23 | 24 | //查询我的今日积分情况 25 | List queryMyTodayPoints(); 26 | } 27 | -------------------------------------------------------------------------------- /tj-trade/src/main/resources/mapper/OrderDetailMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 11 | 17 | 18 | -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/utils/ViolationUtils.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.utils; 2 | 3 | import com.tianji.common.exceptions.BadRequestException; 4 | 5 | import javax.validation.ConstraintViolation; 6 | import java.util.Set; 7 | import java.util.stream.Collectors; 8 | 9 | /** 10 | * 手动执行Violation处理校验结果 11 | * @ClassName ViolationUtils 12 | * @author wusongsong 13 | * @since 2022/7/18 20:52 14 | * @version 1.0.0 15 | **/ 16 | public class ViolationUtils { 17 | 18 | public static void process(Set> violations) { 19 | if(CollUtils.isEmpty(violations)){ 20 | return; 21 | } 22 | String message = violations.stream().map(v -> v.getMessage()).collect(Collectors.joining("|")); 23 | throw new BadRequestException(message); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /tj-api/src/main/java/com/tianji/api/config/RequestIdRelayConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.tianji.api.config; 2 | 3 | 4 | import feign.RequestInterceptor; 5 | import org.slf4j.MDC; 6 | import org.springframework.cloud.openfeign.EnableFeignClients; 7 | import org.springframework.context.annotation.Bean; 8 | import org.springframework.context.annotation.Configuration; 9 | 10 | import static com.tianji.common.constants.Constant.*; 11 | 12 | @Configuration 13 | @EnableFeignClients(basePackages = "com.tianji.api.client") 14 | public class RequestIdRelayConfiguration { 15 | 16 | @Bean 17 | public RequestInterceptor requestIdInterceptor(){ 18 | return template -> template 19 | .header(REQUEST_ID_HEADER, MDC.get(REQUEST_ID_HEADER)) 20 | .header(REQUEST_FROM_HEADER, FEIGN_ORIGIN_NAME); 21 | } 22 | } -------------------------------------------------------------------------------- /tj-api/src/main/java/com/tianji/api/dto/course/SubNumAndCourseNumDTO.java: -------------------------------------------------------------------------------- 1 | package com.tianji.api.dto.course; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | 8 | import javax.validation.constraints.NotNull; 9 | 10 | /** 11 | * 老师负责的课程数和出题数目的集合 12 | * @ClassName SubNumAndCourseNumDTO 13 | * @author wusongsong 14 | * @since 2022/7/18 15:12 15 | * @version 1.0.0 16 | **/ 17 | @Data 18 | @AllArgsConstructor 19 | @NotNull 20 | @ApiModel("老师id和老师对应的课程数,出题数") 21 | public class SubNumAndCourseNumDTO { 22 | @ApiModelProperty("老师id") 23 | private Long teacherId; 24 | @ApiModelProperty("老师负责的课程数") 25 | private Integer courseNum; 26 | @ApiModelProperty("老师出题数") 27 | private Integer subjectNum; 28 | } 29 | -------------------------------------------------------------------------------- /tj-common/src/main/java/com/tianji/common/domain/cache/CouponBusinessCache.java: -------------------------------------------------------------------------------- 1 | package com.tianji.common.domain.cache; 2 | 3 | import com.tianji.common.domain.CommonCache; 4 | 5 | public class CouponBusinessCache extends CommonCache { 6 | 7 | private T data; 8 | 9 | public CouponBusinessCache with(T data){ 10 | this.data = data; 11 | this.exist = true; 12 | return this; 13 | } 14 | 15 | 16 | public CouponBusinessCache retryLater(){ 17 | this.retryLater = true; 18 | return this; 19 | } 20 | 21 | public CouponBusinessCache notExist(){ 22 | this.exist = false; 23 | return this; 24 | } 25 | 26 | public T getData() { 27 | return data; 28 | } 29 | 30 | public void setData(T data) { 31 | this.data = data; 32 | } 33 | } --------------------------------------------------------------------------------