├── .DS_Store ├── src ├── .DS_Store ├── test │ ├── .DS_Store │ └── java │ │ └── com │ │ └── xiaobaitiao │ │ └── springbootinit │ │ ├── MainApplicationTests.java │ │ ├── manager │ │ └── CosManagerTest.java │ │ ├── mapper │ │ ├── PostMapperTest.java │ │ └── PostFavourMapperTest.java │ │ ├── service │ │ ├── PostThumbServiceTest.java │ │ ├── PostServiceTest.java │ │ ├── UserServiceTest.java │ │ └── PostFavourServiceTest.java │ │ └── utils │ │ └── EasyExcelTest.java └── main │ ├── resources │ ├── test_excel.xlsx │ ├── banner.txt │ ├── application-test.yml │ ├── templates │ │ ├── model │ │ │ ├── TemplateAddRequest.java.ftl │ │ │ ├── TemplateEditRequest.java.ftl │ │ │ ├── TemplateUpdateRequest.java.ftl │ │ │ └── TemplateQueryRequest.java.ftl │ │ └── TemplateService.java.ftl │ ├── mapper │ │ ├── CommodityTypeMapper.xml │ │ ├── PostThumbMapper.xml │ │ ├── CommodityScoreMapper.xml │ │ ├── NoticeMapper.xml │ │ ├── UserAiMessageMapper.xml │ │ ├── BarrageMapper.xml │ │ ├── UserCommodityFavoritesMapper.xml │ │ ├── CommentMapper.xml │ │ ├── PostFavourMapper.xml │ │ ├── PrivateMessageMapper.xml │ │ ├── CommodityOrderMapper.xml │ │ └── PostMapper.xml │ ├── application-prod.yml │ └── META-INF │ │ └── additional-spring-configuration-metadata.json │ └── java │ └── com │ └── xiaobaitiao │ └── springbootinit │ ├── wxmp │ ├── WxMpConstant.java │ └── handler │ │ ├── EventHandler.java │ │ ├── MessageHandler.java │ │ └── SubscribeHandler.java │ ├── constant │ ├── FileConstant.java │ ├── QuestionConstant.java │ ├── CommonConstant.java │ └── UserConstant.java │ ├── model │ ├── dto │ │ ├── commodityOrder │ │ │ ├── PayCommodityOrderRequest.java │ │ │ ├── CommodityOrderEditRequest.java │ │ │ ├── CommodityOrderUpdateRequest.java │ │ │ ├── CommodityOrderAddRequest.java │ │ │ └── CommodityOrderQueryRequest.java │ │ ├── file │ │ │ └── UploadFileRequest.java │ │ ├── postthumb │ │ │ └── PostThumbAddRequest.java │ │ ├── postfavour │ │ │ ├── PostFavourAddRequest.java │ │ │ └── PostFavourQueryRequest.java │ │ ├── user │ │ │ ├── UserLoginRequest.java │ │ │ ├── UserRegisterRequest.java │ │ │ ├── UserUpdateMyRequest.java │ │ │ ├── UserAddRequest.java │ │ │ ├── UserUpdateRequest.java │ │ │ └── UserQueryRequest.java │ │ ├── comment │ │ │ ├── CommentEditRequest.java │ │ │ ├── CommentAddRequest.java │ │ │ ├── CommentUpdateRequest.java │ │ │ └── CommentQueryRequest.java │ │ ├── commodityType │ │ │ ├── CommodityTypeUpdateRequest.java │ │ │ ├── CommodityTypeQueryRequest.java │ │ │ ├── CommodityTypeAddRequest.java │ │ │ └── CommodityTypeEditRequest.java │ │ ├── post │ │ │ ├── PostAddRequest.java │ │ │ ├── PostEditRequest.java │ │ │ ├── PostUpdateRequest.java │ │ │ └── PostQueryRequest.java │ │ ├── userAiMessage │ │ │ ├── UserAiMessageAddRequest.java │ │ │ ├── UserAiMessageEditRequest.java │ │ │ ├── UserAiMessageUpdateRequest.java │ │ │ └── UserAiMessageQueryRequest.java │ │ ├── commodityScore │ │ │ ├── CommodityScoreUpdateRequest.java │ │ │ ├── CommodityScoreQueryRequest.java │ │ │ ├── CommodityScoreAddRequest.java │ │ │ └── CommodityScoreEditRequest.java │ │ ├── barrage │ │ │ ├── BarrageUpdateRequest.java │ │ │ ├── BarrageAddRequest.java │ │ │ ├── BarrageEditRequest.java │ │ │ └── BarrageQueryRequest.java │ │ ├── notice │ │ │ ├── NoticeAddRequest.java │ │ │ ├── NoticeEditRequest.java │ │ │ ├── NoticeUpdateRequest.java │ │ │ └── NoticeQueryRequest.java │ │ ├── commodity │ │ │ ├── BuyCommodityRequest.java │ │ │ ├── CommodityAddRequest.java │ │ │ ├── CommodityEditRequest.java │ │ │ ├── CommodityUpdateRequest.java │ │ │ └── CommodityQueryRequest.java │ │ ├── userCommodityFavorites │ │ │ ├── UserCommodityFavoritesUpdateRequest.java │ │ │ ├── UserCommodityFavoritesQueryRequest.java │ │ │ ├── UserCommodityFavoritesAddRequest.java │ │ │ └── UserCommodityFavoritesEditRequest.java │ │ └── privateMessage │ │ │ ├── PrivateMessageAddRequest.java │ │ │ ├── PrivateMessageEditRequest.java │ │ │ ├── PrivateMessageUpdateRequest.java │ │ │ └── PrivateMessageQueryRequest.java │ ├── vo │ │ ├── MyCommentVO.java │ │ ├── LoginUserVO.java │ │ └── UserVO.java │ ├── entity │ │ ├── PostThumb.java │ │ ├── PostFavour.java │ │ ├── CommodityType.java │ │ ├── Comment.java │ │ ├── Barrage.java │ │ ├── Notice.java │ │ ├── UserAiMessage.java │ │ ├── CommodityScore.java │ │ ├── UserCommodityFavorites.java │ │ ├── CommodityOrder.java │ │ ├── PrivateMessage.java │ │ └── Post.java │ └── enums │ │ ├── FileUploadBizEnum.java │ │ └── UserRoleEnum.java │ ├── mapper │ ├── PostThumbMapper.java │ ├── NoticeMapper.java │ ├── CommentMapper.java │ ├── BarrageMapper.java │ ├── UserMapper.java │ ├── UserAiMessageMapper.java │ ├── CommodityOrderMapper.java │ ├── CommodityTypeMapper.java │ ├── PrivateMessageMapper.java │ ├── CommodityMapper.java │ ├── UserCommodityFavoritesMapper.java │ ├── PostMapper.java │ ├── CommodityScoreMapper.java │ └── PostFavourMapper.java │ ├── common │ ├── DeleteRequest.java │ ├── PageRequest.java │ ├── ErrorCode.java │ ├── JwtProperties.java │ ├── BaseResponse.java │ └── ResultUtils.java │ ├── manager │ ├── constant │ │ ├── SparkMessageRole.java │ │ └── SparkApiVersion.java │ ├── model │ │ ├── response │ │ │ ├── SparkResponseUsage.java │ │ │ ├── SparkResponse.java │ │ │ ├── SparkResponsePayload.java │ │ │ ├── SparkResponseChoices.java │ │ │ ├── SparkResponseHeader.java │ │ │ ├── SparkResponseFunctionCall.java │ │ │ └── SparkTextUsage.java │ │ ├── request │ │ │ ├── SparkRequestParameter.java │ │ │ ├── SparkRequestMessage.java │ │ │ ├── function │ │ │ │ ├── SparkRequestFunctions.java │ │ │ │ ├── SparkRequestFunctionProperty.java │ │ │ │ ├── SparkRequestFunctionMessage.java │ │ │ │ └── SparkRequestFunctionParameters.java │ │ │ ├── SparkRequestHeader.java │ │ │ ├── SparkRequestPayload.java │ │ │ └── SparkRequest.java │ │ └── SparkSyncChatResponse.java │ ├── exception │ │ └── SparkException.java │ └── CosManager.java │ ├── esdao │ └── PostEsDao.java │ ├── annotation │ └── AuthCheck.java │ ├── utils │ ├── SqlUtils.java │ ├── SpringContextUtils.java │ └── NetUtils.java │ ├── service │ ├── PostThumbService.java │ ├── PostFavourService.java │ ├── impl │ │ └── CaptchaCacheServiceRedisImpl.java │ ├── NoticeService.java │ ├── BarrageService.java │ ├── PostService.java │ ├── CommodityTypeService.java │ ├── UserAiMessageService.java │ ├── PrivateMessageService.java │ ├── CommentService.java │ ├── CommodityService.java │ └── CommodityScoreService.java │ ├── config │ ├── CaptchaConfig.java │ ├── CorsConfig.java │ ├── AuthInterceptorConfig.java │ ├── MyBatisPlusConfig.java │ ├── JsonConfig.java │ ├── ThreadPoolExecutorConfig.java │ ├── RedisConfig.java │ ├── CosClientConfig.java │ └── WxOpenConfig.java │ ├── exception │ ├── BusinessException.java │ ├── GlobalExceptionHandler.java │ └── ThrowUtils.java │ ├── MainApplication.java │ └── job │ └── once │ └── FullSyncPostToEs.java ├── doc └── swagger.png ├── .mvn └── wrapper │ └── maven-wrapper.properties ├── Dockerfile └── sql └── post_es_mapping.json /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luoye6/vue3_trade_backend/HEAD/.DS_Store -------------------------------------------------------------------------------- /src/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luoye6/vue3_trade_backend/HEAD/src/.DS_Store -------------------------------------------------------------------------------- /doc/swagger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luoye6/vue3_trade_backend/HEAD/doc/swagger.png -------------------------------------------------------------------------------- /src/test/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luoye6/vue3_trade_backend/HEAD/src/test/.DS_Store -------------------------------------------------------------------------------- /src/main/resources/test_excel.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luoye6/vue3_trade_backend/HEAD/src/main/resources/test_excel.xlsx -------------------------------------------------------------------------------- /src/main/resources/banner.txt: -------------------------------------------------------------------------------- 1 | by 程序员小白条 2 | GitEE: https://gitee.com/falle22222n-leaves 3 | GitHub: https://github.com/luoye6 4 | 个人博客: https://luoye6.github.io/ 5 | Knife4j 在线接口文档调用地址(注意全局参数加 Token 后调用):http://localhost:8102/api/doc.html#/home -------------------------------------------------------------------------------- /.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.1/apache-maven-3.8.1-bin.zip 2 | wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar 3 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/wxmp/WxMpConstant.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.wxmp; 2 | 3 | /** 4 | * 微信公众号相关常量 5 | * 6 | * @author 程序员小白条 7 | * @from 个人博客 8 | **/ 9 | public class WxMpConstant { 10 | 11 | /** 12 | * 点击菜单 key 13 | */ 14 | public static final String CLICK_MENU_KEY = "CLICK_MENU_KEY"; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/constant/FileConstant.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.constant; 2 | 3 | /** 4 | * 文件常量 5 | * 6 | * @author 程序员小白条 7 | * @from 个人博客 8 | */ 9 | public interface FileConstant { 10 | 11 | /** 12 | * COS 访问地址 13 | * todo 需替换配置 14 | */ 15 | String COS_HOST = "https://xiaobaitiao.icu"; 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/commodityOrder/PayCommodityOrderRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.commodityOrder; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @author 程序员小白条 7 | * @date 2025/3/12 15:19 8 | * @gitee https://gitee.com/falle22222n-leaves/vue_-book-manage-system 9 | */ 10 | @Data 11 | public class PayCommodityOrderRequest { 12 | private Long commodityOrderId; 13 | } 14 | -------------------------------------------------------------------------------- /src/test/java/com/xiaobaitiao/springbootinit/MainApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.springframework.boot.test.context.SpringBootTest; 5 | 6 | /** 7 | * 主类测试 8 | * 9 | * @author 程序员小白条 10 | * @from 个人博客 11 | */ 12 | @SpringBootTest 13 | class MainApplicationTests { 14 | 15 | @Test 16 | void contextLoads() { 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # Docker 镜像构建 2 | # @author 程序员小白条 3 | # @from 个人博客 4 | FROM maven:3.8.1-jdk-8-slim as builder 5 | 6 | # Copy local code to the container image. 7 | WORKDIR /app 8 | COPY pom.xml . 9 | COPY src ./src 10 | 11 | # Build a release artifact. 12 | RUN mvn package -DskipTests 13 | 14 | # Run the web service on container startup. 15 | CMD ["java","-jar","/app/target/springboot-init-0.0.1-SNAPSHOT.jar","--spring.profiles.active=prod"] -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/mapper/PostThumbMapper.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.mapper; 2 | 3 | import com.xiaobaitiao.springbootinit.model.entity.PostThumb; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | /** 7 | * 帖子点赞数据库操作 8 | * 9 | * @author 程序员小白条 10 | * @from 个人博客 11 | */ 12 | public interface PostThumbMapper extends BaseMapper { 13 | 14 | } 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/common/DeleteRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.common; 2 | 3 | import java.io.Serializable; 4 | import lombok.Data; 5 | 6 | /** 7 | * 删除请求 8 | * 9 | * @author 程序员小白条 10 | * @from 个人博客 11 | */ 12 | @Data 13 | public class DeleteRequest implements Serializable { 14 | 15 | /** 16 | * id 17 | */ 18 | private Long id; 19 | 20 | private static final long serialVersionUID = 1L; 21 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/manager/constant/SparkMessageRole.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.manager.constant; 2 | 3 | /** 4 | * 消息角色常量 5 | * 6 | * @author briqt 7 | */ 8 | public interface SparkMessageRole { 9 | 10 | /** 11 | * 用户 12 | */ 13 | String USER = "user"; 14 | 15 | /** 16 | * 机器人助手 17 | */ 18 | String ASSISTANT = "assistant"; 19 | 20 | /** 21 | * 系统指令 22 | */ 23 | String SYSTEM = "system"; 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/mapper/NoticeMapper.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.xiaobaitiao.springbootinit.model.entity.Notice; 5 | 6 | /** 7 | * @author zhao9 8 | * @description 针对表【notice】的数据库操作Mapper 9 | * @createDate 2025-01-25 15:44:30 10 | * @Entity generator.domain.Notice 11 | */ 12 | public interface NoticeMapper extends BaseMapper { 13 | 14 | } 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/mapper/CommentMapper.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.xiaobaitiao.springbootinit.model.entity.Comment; 5 | 6 | /** 7 | * @author 程序员小白条 8 | * @description 针对表【comment】的数据库操作Mapper 9 | * @createDate 2024-12-02 10:41:09 10 | * @Entity com.yupi.mianshiya.model.entity.Comment 11 | */ 12 | public interface CommentMapper extends BaseMapper { 13 | 14 | } 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/file/UploadFileRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.file; 2 | 3 | import java.io.Serializable; 4 | import lombok.Data; 5 | 6 | /** 7 | * 文件上传请求 8 | * 9 | * @author 程序员小白条 10 | * @from 个人博客 11 | */ 12 | @Data 13 | public class UploadFileRequest implements Serializable { 14 | 15 | /** 16 | * 业务 17 | */ 18 | private String biz; 19 | 20 | private static final long serialVersionUID = 1L; 21 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/mapper/BarrageMapper.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.mapper; 2 | 3 | import com.xiaobaitiao.springbootinit.model.entity.Barrage; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | /** 7 | * @author zhao9 8 | * @description 针对表【barrage】的数据库操作Mapper 9 | * @createDate 2025-01-30 12:10:23 10 | * @Entity com.xiaobaitiao.springbootinit.model.entity.Barrage 11 | */ 12 | public interface BarrageMapper extends BaseMapper { 13 | 14 | } 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/mapper/UserMapper.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.xiaobaitiao.springbootinit.model.entity.User; 5 | 6 | /** 7 | * @author zhao9 8 | * @description 针对表【user(用户)】的数据库操作Mapper 9 | * @createDate 2025-01-09 13:13:26 10 | * @Entity generator.domain.User 11 | */ 12 | public interface UserMapper extends BaseMapper { 13 | User selectByIdWithLock(Long id); 14 | } 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/mapper/UserAiMessageMapper.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.xiaobaitiao.springbootinit.model.entity.UserAiMessage; 5 | 6 | /** 7 | * @author zhao9 8 | * @description 针对表【user_ai_message】的数据库操作Mapper 9 | * @createDate 2025-02-07 16:02:58 10 | * @Entity generator.domain.UserAiMessage 11 | */ 12 | public interface UserAiMessageMapper extends BaseMapper { 13 | 14 | } 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/postthumb/PostThumbAddRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.postthumb; 2 | 3 | import java.io.Serializable; 4 | import lombok.Data; 5 | 6 | /** 7 | * 帖子点赞请求 8 | * 9 | * @author 程序员小白条 10 | * @from 个人博客 11 | */ 12 | @Data 13 | public class PostThumbAddRequest implements Serializable { 14 | 15 | /** 16 | * 帖子 id 17 | */ 18 | private Long postId; 19 | 20 | private static final long serialVersionUID = 1L; 21 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/mapper/CommodityOrderMapper.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.xiaobaitiao.springbootinit.model.entity.CommodityOrder; 5 | 6 | /** 7 | * @author zhao9 8 | * @description 针对表【commodity_order】的数据库操作Mapper 9 | * @createDate 2025-03-11 15:16:08 10 | * @Entity generator.domain.CommodityOrder 11 | */ 12 | public interface CommodityOrderMapper extends BaseMapper { 13 | 14 | } 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/mapper/CommodityTypeMapper.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.mapper; 2 | 3 | 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import com.xiaobaitiao.springbootinit.model.entity.CommodityType; 6 | 7 | /** 8 | * @author zhao9 9 | * @description 针对表【commodity_type】的数据库操作Mapper 10 | * @createDate 2025-03-14 13:27:45 11 | * @Entity generator.domain.CommodityType 12 | */ 13 | public interface CommodityTypeMapper extends BaseMapper { 14 | 15 | } 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/mapper/PrivateMessageMapper.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.xiaobaitiao.springbootinit.model.entity.PrivateMessage; 5 | 6 | /** 7 | * @author zhao9 8 | * @description 针对表【private_message】的数据库操作Mapper 9 | * @createDate 2025-03-15 13:45:41 10 | * @Entity generator.domain.PrivateMessage 11 | */ 12 | public interface PrivateMessageMapper extends BaseMapper { 13 | 14 | } 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/esdao/PostEsDao.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.esdao; 2 | 3 | import com.xiaobaitiao.springbootinit.model.dto.post.PostEsDTO; 4 | import java.util.List; 5 | import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; 6 | 7 | /** 8 | * 帖子 ES 操作 9 | * 10 | * @author 程序员小白条 11 | * @from 个人博客 12 | */ 13 | public interface PostEsDao extends ElasticsearchRepository { 14 | 15 | List findByUserId(Long userId); 16 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/postfavour/PostFavourAddRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.postfavour; 2 | 3 | import java.io.Serializable; 4 | import lombok.Data; 5 | 6 | /** 7 | * 帖子收藏 / 取消收藏请求 8 | * 9 | * @author 程序员小白条 10 | * @from 个人博客 11 | */ 12 | @Data 13 | public class PostFavourAddRequest implements Serializable { 14 | 15 | /** 16 | * 帖子 id 17 | */ 18 | private Long postId; 19 | 20 | private static final long serialVersionUID = 1L; 21 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/mapper/CommodityMapper.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.xiaobaitiao.springbootinit.model.entity.Commodity; 5 | 6 | /** 7 | * @author zhao9 8 | * @description 针对表【commodity】的数据库操作Mapper 9 | * @createDate 2025-03-11 13:35:54 10 | * @Entity generator.domain.Commodity 11 | */ 12 | public interface CommodityMapper extends BaseMapper { 13 | Commodity selectByIdWithLock(Long id); 14 | } 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/user/UserLoginRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.user; 2 | 3 | import java.io.Serializable; 4 | import lombok.Data; 5 | 6 | /** 7 | * 用户登录请求 8 | * 9 | * @author 程序员小白条 10 | * @from 个人博客 11 | */ 12 | @Data 13 | public class UserLoginRequest implements Serializable { 14 | 15 | private static final long serialVersionUID = 3191241716373120793L; 16 | 17 | private String userAccount; 18 | 19 | private String userPassword; 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/mapper/UserCommodityFavoritesMapper.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.xiaobaitiao.springbootinit.model.entity.UserCommodityFavorites; 5 | 6 | /** 7 | * @author zhao9 8 | * @description 针对表【user_commodity_favorites】的数据库操作Mapper 9 | * @createDate 2025-03-12 13:22:44 10 | * @Entity generator.domain.UserCommodityFavorites 11 | */ 12 | public interface UserCommodityFavoritesMapper extends BaseMapper { 13 | 14 | } 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/constant/QuestionConstant.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.constant; 2 | 3 | /** 4 | * @author 程序员小白条 5 | * @date 2025/1/31 14:49 6 | * @gitee https://gitee.com/falle22222n-leaves/vue_-book-manage-system 7 | */ 8 | public interface QuestionConstant { 9 | /** 10 | * 简单 11 | */ 12 | String QUESTION_DIFFICULTY_EASY = "easy"; 13 | 14 | /** 15 | * 中等 16 | */ 17 | String QUESTION_DIFFICULTY_MEDIUM = "medium"; 18 | 19 | /** 20 | * 困难 21 | */ 22 | String QUESTION_DIFFICULTY_HARD = "hard"; 23 | } 24 | -------------------------------------------------------------------------------- /src/test/java/com/xiaobaitiao/springbootinit/manager/CosManagerTest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.manager; 2 | 3 | import javax.annotation.Resource; 4 | import org.junit.jupiter.api.Test; 5 | import org.springframework.boot.test.context.SpringBootTest; 6 | 7 | /** 8 | * Cos 操作测试 9 | * 10 | * @author 程序员小白条 11 | * @from 个人博客 12 | */ 13 | @SpringBootTest 14 | class CosManagerTest { 15 | 16 | @Resource 17 | private CosManager cosManager; 18 | 19 | @Test 20 | void putObject() { 21 | cosManager.putObject("test", "test.json"); 22 | } 23 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/comment/CommentEditRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.comment; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * 编辑请求 9 | * 10 | * @author 码羊 11 | */ 12 | @Data 13 | public class CommentEditRequest implements Serializable { 14 | 15 | /** 16 | * 评论 ID 17 | */ 18 | private Long id; 19 | 20 | 21 | /** 22 | * 评论内容 23 | */ 24 | private String content; 25 | 26 | 27 | 28 | private static final long serialVersionUID = 1L; 29 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/mapper/PostMapper.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.xiaobaitiao.springbootinit.model.entity.Post; 5 | import java.util.Date; 6 | import java.util.List; 7 | 8 | /** 9 | * 帖子数据库操作 10 | * 11 | * @author 程序员小白条 12 | * @from 个人博客 13 | */ 14 | public interface PostMapper extends BaseMapper { 15 | 16 | /** 17 | * 查询帖子列表(包括已被删除的数据) 18 | */ 19 | List listPostWithDelete(Date minUpdateTime); 20 | 21 | } 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/manager/model/response/SparkResponseUsage.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.manager.model.response; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * $.payload.usage 7 | * 8 | * @author briqt 9 | */ 10 | public class SparkResponseUsage implements Serializable { 11 | private static final long serialVersionUID = 2181817132625461079L; 12 | 13 | private SparkTextUsage text; 14 | 15 | public SparkTextUsage getText() { 16 | return text; 17 | } 18 | 19 | public void setText(SparkTextUsage text) { 20 | this.text = text; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/constant/CommonConstant.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.constant; 2 | 3 | /** 4 | * 通用常量 5 | * 6 | * @author 程序员小白条 7 | * @from 个人博客 8 | */ 9 | public interface CommonConstant { 10 | 11 | /** 12 | * 升序 13 | */ 14 | String SORT_ORDER_ASC = "ascend"; 15 | 16 | /** 17 | * 降序 18 | */ 19 | String SORT_ORDER_DESC = " descend"; 20 | /** 21 | * 预检请求 22 | */ 23 | String OPTIONS = "OPTIONS"; 24 | /** 25 | * 无敌令牌(仅用于测试接口文档) 26 | */ 27 | String INVINCIBLE_TOKEN = "InvincibleToken"; 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/user/UserRegisterRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.user; 2 | 3 | import java.io.Serializable; 4 | import lombok.Data; 5 | 6 | /** 7 | * 用户注册请求体 8 | * 9 | * @author 程序员小白条 10 | * @from 个人博客 11 | */ 12 | @Data 13 | public class UserRegisterRequest implements Serializable { 14 | 15 | private static final long serialVersionUID = 3191241716373120793L; 16 | 17 | private String userAccount; 18 | 19 | private String userPassword; 20 | 21 | private String checkPassword; 22 | 23 | // private String captchaVerification; 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/annotation/AuthCheck.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.annotation; 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 | 8 | /** 9 | * 权限校验 10 | * 11 | * @author 程序员小白条 12 | * @from 个人博客 13 | */ 14 | @Target(ElementType.METHOD) 15 | @Retention(RetentionPolicy.RUNTIME) 16 | public @interface AuthCheck { 17 | 18 | /** 19 | * 必须有某个角色 20 | * 21 | * @return 22 | */ 23 | String mustRole() default ""; 24 | 25 | } 26 | 27 | -------------------------------------------------------------------------------- /src/main/resources/application-test.yml: -------------------------------------------------------------------------------- 1 | # 测试配置文件 2 | # @author 程序员小白条 3 | # @from 个人博客 4 | server: 5 | port: 8101 6 | spring: 7 | # 数据库配置 8 | # todo 需替换配置 9 | datasource: 10 | driver-class-name: com.mysql.cj.jdbc.Driver 11 | url: jdbc:mysql://localhost:3306/mianshi 12 | username: root 13 | password: 123456 14 | # Redis 配置 15 | # todo 需替换配置 16 | redis: 17 | database: 1 18 | host: localhost 19 | port: 6379 20 | timeout: 5000 21 | password: 123456 22 | # Elasticsearch 配置 23 | # todo 需替换配置 24 | elasticsearch: 25 | uris: http://localhost:9200 26 | username: root 27 | password: 123456 -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/commodityType/CommodityTypeUpdateRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.commodityType; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.util.List; 7 | 8 | /** 9 | * 更新商品类别表请求 10 | * 11 | * @author 程序员小白条 12 | * @from 个人博客 13 | */ 14 | @Data 15 | public class CommodityTypeUpdateRequest implements Serializable { 16 | /** 17 | * 商品分类 ID 18 | */ 19 | private Long id; 20 | 21 | /** 22 | * 商品类别名称 23 | */ 24 | private String typeName; 25 | 26 | private static final long serialVersionUID = 1L; 27 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/constant/UserConstant.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.constant; 2 | 3 | /** 4 | * 用户常量 5 | * 6 | * @author 程序员小白条 7 | * @from 个人博客 8 | */ 9 | public interface UserConstant { 10 | 11 | /** 12 | * 用户登录态键 13 | */ 14 | String USER_LOGIN_STATE = "user_login"; 15 | 16 | // region 权限 17 | 18 | /** 19 | * 默认角色 20 | */ 21 | String DEFAULT_ROLE = "user"; 22 | 23 | /** 24 | * 管理员角色 25 | */ 26 | String ADMIN_ROLE = "admin"; 27 | 28 | /** 29 | * 被封号 30 | */ 31 | String BAN_ROLE = "ban"; 32 | 33 | // endregion 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/utils/SqlUtils.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.utils; 2 | 3 | import org.apache.commons.lang3.StringUtils; 4 | 5 | /** 6 | * SQL 工具 7 | * 8 | * @author 程序员小白条 9 | * @from 个人博客 10 | */ 11 | public class SqlUtils { 12 | 13 | /** 14 | * 校验排序字段是否合法(防止 SQL 注入) 15 | * 16 | * @param sortField 17 | * @return 18 | */ 19 | public static boolean validSortField(String sortField) { 20 | if (StringUtils.isBlank(sortField)) { 21 | return false; 22 | } 23 | return !StringUtils.containsAny(sortField, "=", "(", ")", " "); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/comment/CommentAddRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.comment; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * 创建请求 9 | * 10 | * @author 码羊 11 | */ 12 | @Data 13 | public class CommentAddRequest implements Serializable { 14 | 15 | 16 | /** 17 | * 面经帖子 ID 18 | */ 19 | private Long postId; 20 | 21 | /** 22 | * 评论内容 23 | */ 24 | private String content; 25 | 26 | /** 27 | * 父评论 ID,支持多级嵌套回复 28 | */ 29 | private Long parentId; 30 | 31 | 32 | private static final long serialVersionUID = 1L; 33 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/user/UserUpdateMyRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.user; 2 | 3 | import java.io.Serializable; 4 | import lombok.Data; 5 | 6 | /** 7 | * 用户更新个人信息请求 8 | * 9 | * @author 程序员小白条 10 | * @from 个人博客 11 | */ 12 | @Data 13 | public class UserUpdateMyRequest implements Serializable { 14 | 15 | /** 16 | * 用户昵称 17 | */ 18 | private String userName; 19 | 20 | /** 21 | * 用户头像 22 | */ 23 | private String userAvatar; 24 | 25 | /** 26 | * 简介 27 | */ 28 | private String userProfile; 29 | 30 | private static final long serialVersionUID = 1L; 31 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/post/PostAddRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.post; 2 | 3 | import java.io.Serializable; 4 | import java.util.List; 5 | import lombok.Data; 6 | 7 | /** 8 | * 创建请求 9 | * 10 | * @author 程序员小白条 11 | * @from 个人博客 12 | */ 13 | @Data 14 | public class PostAddRequest implements Serializable { 15 | 16 | /** 17 | * 标题 18 | */ 19 | private String title; 20 | 21 | /** 22 | * 内容 23 | */ 24 | private String content; 25 | 26 | /** 27 | * 标签列表 28 | */ 29 | private List tags; 30 | 31 | private static final long serialVersionUID = 1L; 32 | } -------------------------------------------------------------------------------- /src/main/resources/templates/model/TemplateAddRequest.java.ftl: -------------------------------------------------------------------------------- 1 | package ${packageName}.model.dto.${dataKey}; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.util.List; 7 | 8 | /** 9 | * 创建${dataName}请求 10 | * 11 | * @author 程序员小白条 12 | * @from 个人博客 13 | */ 14 | @Data 15 | public class ${upperDataKey}AddRequest implements Serializable { 16 | 17 | /** 18 | * 标题 19 | */ 20 | private String title; 21 | 22 | /** 23 | * 内容 24 | */ 25 | private String content; 26 | 27 | /** 28 | * 标签列表 29 | */ 30 | private List tags; 31 | 32 | private static final long serialVersionUID = 1L; 33 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/common/PageRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.common; 2 | 3 | import com.xiaobaitiao.springbootinit.constant.CommonConstant; 4 | import lombok.Data; 5 | 6 | /** 7 | * 分页请求 8 | * 9 | * @author 程序员小白条 10 | * @from 个人博客 11 | */ 12 | @Data 13 | public class PageRequest { 14 | 15 | /** 16 | * 当前页号 17 | */ 18 | private int current = 1; 19 | 20 | /** 21 | * 页面大小 22 | */ 23 | private int pageSize = 10; 24 | 25 | /** 26 | * 排序字段 27 | */ 28 | private String sortField; 29 | 30 | /** 31 | * 排序顺序(默认升序) 32 | */ 33 | private String sortOrder = CommonConstant.SORT_ORDER_ASC; 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/post/PostEditRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.post; 2 | 3 | import java.io.Serializable; 4 | import java.util.List; 5 | import lombok.Data; 6 | 7 | /** 8 | * 编辑请求 9 | * 10 | * @author 程序员小白条 11 | * @from 个人博客 12 | */ 13 | @Data 14 | public class PostEditRequest implements Serializable { 15 | 16 | /** 17 | * id 18 | */ 19 | private Long id; 20 | 21 | /** 22 | * 标题 23 | */ 24 | private String title; 25 | 26 | /** 27 | * 内容 28 | */ 29 | private String content; 30 | 31 | /** 32 | * 标签列表 33 | */ 34 | private List tags; 35 | 36 | private static final long serialVersionUID = 1L; 37 | } -------------------------------------------------------------------------------- /src/main/resources/templates/model/TemplateEditRequest.java.ftl: -------------------------------------------------------------------------------- 1 | package ${packageName}.model.dto.${dataKey}; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.util.List; 7 | 8 | /** 9 | * 编辑${dataName}请求 10 | * 11 | * @author 程序员小白条 12 | * @from 个人博客 13 | */ 14 | @Data 15 | public class ${upperDataKey}EditRequest implements Serializable { 16 | 17 | /** 18 | * id 19 | */ 20 | private Long id; 21 | 22 | /** 23 | * 标题 24 | */ 25 | private String title; 26 | 27 | /** 28 | * 内容 29 | */ 30 | private String content; 31 | 32 | /** 33 | * 标签列表 34 | */ 35 | private List tags; 36 | 37 | private static final long serialVersionUID = 1L; 38 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/post/PostUpdateRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.post; 2 | 3 | import java.io.Serializable; 4 | import java.util.List; 5 | import lombok.Data; 6 | 7 | /** 8 | * 更新请求 9 | * 10 | * @author 程序员小白条 11 | * @from 个人博客 12 | */ 13 | @Data 14 | public class PostUpdateRequest implements Serializable { 15 | 16 | /** 17 | * id 18 | */ 19 | private Long id; 20 | 21 | /** 22 | * 标题 23 | */ 24 | private String title; 25 | 26 | /** 27 | * 内容 28 | */ 29 | private String content; 30 | 31 | /** 32 | * 标签列表 33 | */ 34 | private List tags; 35 | 36 | private static final long serialVersionUID = 1L; 37 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/user/UserAddRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.user; 2 | 3 | import java.io.Serializable; 4 | import lombok.Data; 5 | 6 | /** 7 | * 用户创建请求 8 | * 9 | * @author 程序员小白条 10 | * @from 个人博客 11 | */ 12 | @Data 13 | public class UserAddRequest implements Serializable { 14 | 15 | /** 16 | * 用户昵称 17 | */ 18 | private String userName; 19 | 20 | /** 21 | * 账号 22 | */ 23 | private String userAccount; 24 | 25 | /** 26 | * 用户头像 27 | */ 28 | private String userAvatar; 29 | 30 | /** 31 | * 用户角色: user, admin 32 | */ 33 | private String userRole; 34 | 35 | private static final long serialVersionUID = 1L; 36 | } -------------------------------------------------------------------------------- /src/main/resources/templates/model/TemplateUpdateRequest.java.ftl: -------------------------------------------------------------------------------- 1 | package ${packageName}.model.dto.${dataKey}; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.util.List; 7 | 8 | /** 9 | * 更新${dataName}请求 10 | * 11 | * @author 程序员小白条 12 | * @from 个人博客 13 | */ 14 | @Data 15 | public class ${upperDataKey}UpdateRequest implements Serializable { 16 | 17 | /** 18 | * id 19 | */ 20 | private Long id; 21 | 22 | /** 23 | * 标题 24 | */ 25 | private String title; 26 | 27 | /** 28 | * 内容 29 | */ 30 | private String content; 31 | 32 | /** 33 | * 标签列表 34 | */ 35 | private List tags; 36 | 37 | private static final long serialVersionUID = 1L; 38 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/userAiMessage/UserAiMessageAddRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.userAiMessage; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.util.Date; 7 | import java.util.List; 8 | 9 | /** 10 | * 创建用户对话表请求 11 | * 12 | * @author 程序员小白条 13 | * @from 个人博客 14 | */ 15 | @Data 16 | public class UserAiMessageAddRequest implements Serializable { 17 | 18 | 19 | /** 20 | * 用户输入 21 | */ 22 | private String userInputText; 23 | 24 | /** 25 | * AI 生成结果 26 | */ 27 | private String aiGenerateText; 28 | 29 | /** 30 | * 用户ID 31 | */ 32 | private Long userId; 33 | 34 | 35 | 36 | 37 | private static final long serialVersionUID = 1L; 38 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/commodityType/CommodityTypeQueryRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.commodityType; 2 | 3 | import com.xiaobaitiao.springbootinit.common.PageRequest; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | 7 | import java.io.Serializable; 8 | import java.util.List; 9 | 10 | /** 11 | * 查询商品类别表请求 12 | * 13 | * @author 程序员小白条 14 | * @from 个人博客 15 | */ 16 | @EqualsAndHashCode(callSuper = true) 17 | @Data 18 | public class CommodityTypeQueryRequest extends PageRequest implements Serializable { 19 | 20 | /** 21 | * 商品分类 ID 22 | */ 23 | private Long id; 24 | 25 | /** 26 | * 商品类别名称 27 | */ 28 | private String typeName; 29 | 30 | private static final long serialVersionUID = 1L; 31 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/commodityScore/CommodityScoreUpdateRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.commodityScore; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.util.List; 7 | 8 | /** 9 | * 更新商品评分表请求 10 | * 11 | * @author 程序员小白条 12 | * @from 个人博客 13 | */ 14 | @Data 15 | public class CommodityScoreUpdateRequest implements Serializable { 16 | /** 17 | * 商品评分 ID 18 | */ 19 | private Long id; 20 | 21 | /** 22 | * 商品 ID 23 | */ 24 | private Long commodityId; 25 | 26 | /** 27 | * 用户 ID 28 | */ 29 | private Long userId; 30 | 31 | /** 32 | * 评分(0-5,星级评分) 33 | */ 34 | private Integer score; 35 | 36 | private static final long serialVersionUID = 1L; 37 | } -------------------------------------------------------------------------------- /src/test/java/com/xiaobaitiao/springbootinit/mapper/PostMapperTest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.mapper; 2 | 3 | import com.xiaobaitiao.springbootinit.model.entity.Post; 4 | import java.util.Date; 5 | import java.util.List; 6 | import javax.annotation.Resource; 7 | import org.junit.jupiter.api.Assertions; 8 | import org.junit.jupiter.api.Test; 9 | import org.springframework.boot.test.context.SpringBootTest; 10 | 11 | /** 12 | * 帖子数据库操作测试 13 | * 14 | * @author 程序员小白条 15 | * @from 个人博客 16 | */ 17 | @SpringBootTest 18 | class PostMapperTest { 19 | 20 | @Resource 21 | private PostMapper postMapper; 22 | 23 | @Test 24 | void listPostWithDelete() { 25 | List postList = postMapper.listPostWithDelete(new Date()); 26 | Assertions.assertNotNull(postList); 27 | } 28 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/comment/CommentUpdateRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.comment; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * 更新请求 9 | * 10 | * @author 码羊 11 | */ 12 | @Data 13 | public class CommentUpdateRequest implements Serializable { 14 | 15 | /** 16 | * 评论 ID 17 | */ 18 | private Long id; 19 | 20 | 21 | /** 22 | * 面经帖子 ID 23 | */ 24 | private Long postId; 25 | 26 | /** 27 | * 用户 ID 28 | */ 29 | private Long userId; 30 | 31 | /** 32 | * 评论内容 33 | */ 34 | private String content; 35 | 36 | /** 37 | * 父评论 ID,支持多级嵌套回复 38 | */ 39 | private Long parentId; 40 | 41 | 42 | private static final long serialVersionUID = 1L; 43 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/postfavour/PostFavourQueryRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.postfavour; 2 | 3 | import com.xiaobaitiao.springbootinit.common.PageRequest; 4 | import com.xiaobaitiao.springbootinit.model.dto.post.PostQueryRequest; 5 | import java.io.Serializable; 6 | import lombok.Data; 7 | import lombok.EqualsAndHashCode; 8 | 9 | /** 10 | * 帖子收藏查询请求 11 | * 12 | * @author 程序员小白条 13 | * @from 个人博客 14 | */ 15 | @Data 16 | @EqualsAndHashCode(callSuper = true) 17 | public class PostFavourQueryRequest extends PageRequest implements Serializable { 18 | 19 | /** 20 | * 帖子查询请求 21 | */ 22 | private PostQueryRequest postQueryRequest; 23 | 24 | /** 25 | * 用户 id 26 | */ 27 | private Long userId; 28 | 29 | private static final long serialVersionUID = 1L; 30 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/service/PostThumbService.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.service; 2 | 3 | import com.xiaobaitiao.springbootinit.model.entity.PostThumb; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | import com.xiaobaitiao.springbootinit.model.entity.User; 6 | 7 | /** 8 | * 帖子点赞服务 9 | * 10 | * @author 程序员小白条 11 | * @from 个人博客 12 | */ 13 | public interface PostThumbService extends IService { 14 | 15 | /** 16 | * 点赞 17 | * 18 | * @param postId 19 | * @param loginUser 20 | * @return 21 | */ 22 | int doPostThumb(long postId, User loginUser); 23 | 24 | /** 25 | * 帖子点赞(内部服务) 26 | * 27 | * @param userId 28 | * @param postId 29 | * @return 30 | */ 31 | int doPostThumbInner(long userId, long postId); 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/mapper/CommodityScoreMapper.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.xiaobaitiao.springbootinit.model.entity.CommodityScore; 5 | import org.apache.ibatis.annotations.Select; 6 | 7 | /** 8 | * @author zhao9 9 | * @description 针对表【commodity_score】的数据库操作Mapper 10 | * @createDate 2025-03-13 13:48:18 11 | * @Entity generator.domain.CommodityScore 12 | */ 13 | public interface CommodityScoreMapper extends BaseMapper { 14 | /** 15 | * 查询商品的平均评分 16 | * 17 | * @param commodityId 商品 ID 18 | * @return 平均评分 19 | */ 20 | @Select("SELECT AVG(score) AS averageScore FROM commodity_score WHERE commodityId = #{commodityId} AND isDelete = 0") 21 | Double getAverageScoreByCommodityId(Long commodityId); 22 | } 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/manager/model/request/SparkRequestParameter.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.manager.model.request; 2 | 3 | 4 | 5 | import com.xiaobaitiao.springbootinit.manager.model.SparkChatParameter; 6 | 7 | import java.io.Serializable; 8 | 9 | /** 10 | * $.parameter 11 | * 12 | * @author briqt 13 | */ 14 | public class SparkRequestParameter implements Serializable { 15 | private static final long serialVersionUID = 4502096141480336425L; 16 | 17 | private SparkChatParameter chat; 18 | 19 | public SparkRequestParameter() { 20 | } 21 | 22 | public SparkRequestParameter(SparkChatParameter chat) { 23 | this.chat = chat; 24 | } 25 | 26 | public SparkChatParameter getChat() { 27 | return chat; 28 | } 29 | 30 | public void setChat(SparkChatParameter chat) { 31 | this.chat = chat; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/manager/model/response/SparkResponse.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.manager.model.response; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * SparkResponse 7 | * 8 | * @author briqt 9 | */ 10 | public class SparkResponse implements Serializable { 11 | private static final long serialVersionUID = 886720558849587945L; 12 | 13 | private SparkResponseHeader header; 14 | 15 | private SparkResponsePayload payload; 16 | 17 | public SparkResponseHeader getHeader() { 18 | return header; 19 | } 20 | 21 | public void setHeader(SparkResponseHeader header) { 22 | this.header = header; 23 | } 24 | 25 | public SparkResponsePayload getPayload() { 26 | return payload; 27 | } 28 | 29 | public void setPayload(SparkResponsePayload payload) { 30 | this.payload = payload; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/manager/model/response/SparkResponsePayload.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.manager.model.response; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * $.payload 7 | * 8 | * @author briqt 9 | */ 10 | public class SparkResponsePayload implements Serializable { 11 | private static final long serialVersionUID = 8090192271782303700L; 12 | 13 | private SparkResponseChoices choices; 14 | 15 | private SparkResponseUsage usage; 16 | 17 | public SparkResponseChoices getChoices() { 18 | return choices; 19 | } 20 | 21 | public void setChoices(SparkResponseChoices choices) { 22 | this.choices = choices; 23 | } 24 | 25 | public SparkResponseUsage getUsage() { 26 | return usage; 27 | } 28 | 29 | public void setUsage(SparkResponseUsage usage) { 30 | this.usage = usage; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/barrage/BarrageUpdateRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.barrage; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.util.List; 7 | 8 | /** 9 | * 更新弹幕请求 10 | * 11 | * @author 程序员小白条 12 | * @from 个人博客 13 | */ 14 | @Data 15 | public class BarrageUpdateRequest implements Serializable { 16 | /** 17 | * id 18 | */ 19 | private Long id; 20 | 21 | /** 22 | * 弹幕文本 23 | */ 24 | private String message; 25 | 26 | /** 27 | * 用户头像 28 | */ 29 | private String userAvatar; 30 | 31 | /** 32 | * 用户id 33 | */ 34 | private Long userId; 35 | 36 | /** 37 | * 是否精选(默认0,精选为1) 38 | */ 39 | private Integer isSelected; 40 | 41 | 42 | 43 | private static final long serialVersionUID = 1L; 44 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/config/CaptchaConfig.java: -------------------------------------------------------------------------------- 1 | //package com.xiaobaitiao.springbootinit.config; 2 | // 3 | //import com.anji.captcha.properties.AjCaptchaProperties; 4 | //import com.anji.captcha.service.CaptchaCacheService; 5 | //import com.anji.captcha.service.impl.CaptchaServiceFactory; 6 | //import org.springframework.context.annotation.Bean; 7 | //import org.springframework.context.annotation.Configuration; 8 | //import org.springframework.context.annotation.Primary; 9 | // 10 | ////@Configuration 11 | //public class CaptchaConfig { 12 | // 13 | // 14 | // 15 | //// @Bean(name = "CaptchaCacheService") 16 | //// @Primary 17 | // public CaptchaCacheService captchaCacheService(AjCaptchaProperties config){ 18 | // //缓存类型redis/local/.... 19 | // CaptchaCacheService ret = CaptchaServiceFactory.getCache(config.getCacheType().name()); 20 | // return ret; 21 | // } 22 | //} -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/manager/model/request/SparkRequestMessage.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.manager.model.request; 2 | 3 | 4 | 5 | import com.xiaobaitiao.springbootinit.manager.model.SparkMessage; 6 | 7 | import java.io.Serializable; 8 | import java.util.List; 9 | 10 | /** 11 | * $.payload.message 12 | * 13 | * @author briqt 14 | */ 15 | public class SparkRequestMessage implements Serializable { 16 | private static final long serialVersionUID = 6725091574720504980L; 17 | 18 | private List text; 19 | 20 | public SparkRequestMessage() { 21 | } 22 | 23 | public SparkRequestMessage(List text) { 24 | this.text = text; 25 | } 26 | 27 | public List getText() { 28 | return text; 29 | } 30 | 31 | public void setText(List text) { 32 | this.text = text; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/manager/model/request/function/SparkRequestFunctions.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.manager.model.request.function; 2 | 3 | import java.io.Serializable; 4 | import java.util.List; 5 | 6 | /** 7 | * $.payload.functions 8 | * 9 | * @author briqt 10 | */ 11 | public class SparkRequestFunctions implements Serializable { 12 | 13 | private static final long serialVersionUID = -7696196392354475586L; 14 | 15 | private List text; 16 | 17 | public SparkRequestFunctions() { 18 | } 19 | 20 | public SparkRequestFunctions(List text) { 21 | this.text = text; 22 | } 23 | 24 | public List getText() { 25 | return text; 26 | } 27 | 28 | public void setText(List text) { 29 | this.text = text; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/commodityType/CommodityTypeAddRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.commodityType; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import com.baomidou.mybatisplus.annotation.TableLogic; 7 | import com.fasterxml.jackson.annotation.JsonFormat; 8 | import lombok.Data; 9 | 10 | import java.io.Serializable; 11 | import java.util.Date; 12 | import java.util.List; 13 | 14 | /** 15 | * 创建商品类别表请求 16 | * 17 | * @author 程序员小白条 18 | * @from 个人博客 19 | */ 20 | @Data 21 | public class CommodityTypeAddRequest implements Serializable { 22 | 23 | 24 | 25 | /** 26 | * 商品类别名称 27 | */ 28 | private String typeName; 29 | 30 | 31 | private static final long serialVersionUID = 1L; 32 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/barrage/BarrageAddRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.barrage; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import com.baomidou.mybatisplus.annotation.TableLogic; 7 | import lombok.Data; 8 | 9 | import java.io.Serializable; 10 | import java.util.Date; 11 | import java.util.List; 12 | 13 | /** 14 | * 创建弹幕请求 15 | * 16 | * @author 程序员小白条 17 | * @from 个人博客 18 | */ 19 | @Data 20 | public class BarrageAddRequest implements Serializable { 21 | 22 | 23 | /** 24 | * 弹幕文本 25 | */ 26 | private String message; 27 | 28 | /** 29 | * 用户头像 30 | */ 31 | private String userAvatar; 32 | 33 | 34 | 35 | 36 | private static final long serialVersionUID = 1L; 37 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/notice/NoticeAddRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.notice; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import lombok.Data; 7 | 8 | import java.io.Serializable; 9 | import java.util.Date; 10 | import java.util.List; 11 | 12 | /** 13 | * 创建公告请求 14 | * 15 | * @author 程序员小白条 16 | * @from 个人博客 17 | */ 18 | @Data 19 | public class NoticeAddRequest implements Serializable { 20 | 21 | 22 | /** 23 | * 公告标题 24 | */ 25 | private String noticeTitle; 26 | 27 | /** 28 | * 公告内容 29 | */ 30 | private String noticeContent; 31 | 32 | /** 33 | * 发布公告的管理员 id 34 | */ 35 | private Long noticeAdminId; 36 | 37 | 38 | private static final long serialVersionUID = 1L; 39 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/notice/NoticeEditRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.notice; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import lombok.Data; 7 | 8 | import java.io.Serializable; 9 | import java.util.Date; 10 | import java.util.List; 11 | 12 | /** 13 | * 编辑公告请求 14 | * 15 | * @author 程序员小白条 16 | * @from 个人博客 17 | */ 18 | @Data 19 | public class NoticeEditRequest implements Serializable { 20 | 21 | /** 22 | * id 23 | */ 24 | private Long id; 25 | 26 | /** 27 | * 公告标题 28 | */ 29 | private String noticeTitle; 30 | 31 | /** 32 | * 公告内容 33 | */ 34 | private String noticeContent; 35 | 36 | /** 37 | * 发布公告的管理员 id 38 | */ 39 | private Long noticeAdminId; 40 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/vo/MyCommentVO.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.vo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | import java.io.Serializable; 8 | import java.util.Date; 9 | 10 | /** 11 | * 12 | * @TableName comment 13 | */ 14 | @NoArgsConstructor 15 | @AllArgsConstructor 16 | @Data 17 | public class MyCommentVO implements Serializable { 18 | /** 19 | * 评论 ID 20 | */ 21 | private Long id; 22 | 23 | /** 24 | * 评论内容 25 | */ 26 | private String content; 27 | 28 | 29 | /** 30 | * 面经帖子 ID 31 | */ 32 | private Long postId; 33 | /** 34 | * 面经帖子标题 35 | */ 36 | private String postTitle; 37 | /** 38 | * 面经帖子内容 39 | */ 40 | private String postContent; 41 | 42 | 43 | /** 44 | * 更新时间 45 | */ 46 | private Date updateTime; 47 | 48 | 49 | } 50 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/commodity/BuyCommodityRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.commodity; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.math.BigDecimal; 7 | 8 | /** 9 | * @author 程序员小白条 10 | * @date 2025/3/12 14:16 11 | * @gitee https://gitee.com/falle22222n-leaves/vue_-book-manage-system 12 | */ 13 | @Data 14 | public class BuyCommodityRequest implements Serializable { 15 | 16 | /** 17 | * 商品 ID 18 | */ 19 | private Long commodityId; 20 | 21 | 22 | /** 23 | * 购买商品的数量 24 | */ 25 | private Integer buyNumber; 26 | /** 27 | * 支付金额 28 | */ 29 | private BigDecimal paymentAmount; 30 | /** 31 | * 支付状态(1已支付,0未支付)默认0 32 | */ 33 | private Integer payStatus; 34 | 35 | /** 36 | * 订单备注 37 | */ 38 | private String remark; 39 | 40 | private static final long serialVersionUID = 1L; 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/userCommodityFavorites/UserCommodityFavoritesUpdateRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.userCommodityFavorites; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.util.List; 7 | 8 | /** 9 | * 更新用户商品收藏表请求 10 | * 11 | * @author 程序员小白条 12 | * @from 个人博客 13 | */ 14 | @Data 15 | public class UserCommodityFavoritesUpdateRequest implements Serializable { 16 | 17 | 18 | /** 19 | * 20 | */ 21 | private Long id; 22 | 23 | /** 24 | * 用户 ID 25 | */ 26 | private Long userId; 27 | 28 | /** 29 | * 商品 ID 30 | */ 31 | private Long commodityId; 32 | 33 | /** 34 | * 1-正常收藏 0-取消收藏 35 | */ 36 | private Integer status; 37 | 38 | /** 39 | * 用户备注 40 | */ 41 | private String remark; 42 | 43 | private static final long serialVersionUID = 1L; 44 | } -------------------------------------------------------------------------------- /src/main/resources/mapper/CommodityTypeMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | id,typeName,createTime, 17 | updateTime,isDelete 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/exception/BusinessException.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.exception; 2 | 3 | import com.xiaobaitiao.springbootinit.common.ErrorCode; 4 | 5 | /** 6 | * 自定义异常类 7 | * 8 | * @author 程序员小白条 9 | * @from 个人博客 10 | */ 11 | public class BusinessException extends RuntimeException { 12 | 13 | /** 14 | * 错误码 15 | */ 16 | private final int code; 17 | 18 | public BusinessException(int code, String message) { 19 | super(message); 20 | this.code = code; 21 | } 22 | 23 | public BusinessException(ErrorCode errorCode) { 24 | super(errorCode.getMessage()); 25 | this.code = errorCode.getCode(); 26 | } 27 | 28 | public BusinessException(ErrorCode errorCode, String message) { 29 | super(message); 30 | this.code = errorCode.getCode(); 31 | } 32 | 33 | public int getCode() { 34 | return code; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/commodityType/CommodityTypeEditRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.commodityType; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import com.baomidou.mybatisplus.annotation.TableLogic; 7 | import com.fasterxml.jackson.annotation.JsonFormat; 8 | import lombok.Data; 9 | 10 | import java.io.Serializable; 11 | import java.util.Date; 12 | import java.util.List; 13 | 14 | /** 15 | * 编辑商品类别表请求 16 | * 17 | * @author 程序员小白条 18 | * @from 个人博客 19 | */ 20 | @Data 21 | public class CommodityTypeEditRequest implements Serializable { 22 | 23 | /** 24 | * 商品分类 ID 25 | */ 26 | private Long id; 27 | 28 | /** 29 | * 商品类别名称 30 | */ 31 | private String typeName; 32 | 33 | private static final long serialVersionUID = 1L; 34 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/commodityScore/CommodityScoreQueryRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.commodityScore; 2 | 3 | import com.xiaobaitiao.springbootinit.common.PageRequest; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | 7 | import java.io.Serializable; 8 | import java.util.List; 9 | 10 | /** 11 | * 查询商品评分表请求 12 | * 13 | * @author 程序员小白条 14 | * @from 个人博客 15 | */ 16 | @EqualsAndHashCode(callSuper = true) 17 | @Data 18 | public class CommodityScoreQueryRequest extends PageRequest implements Serializable { 19 | 20 | /** 21 | * 商品评分 ID 22 | */ 23 | private Long id; 24 | 25 | /** 26 | * 商品 ID 27 | */ 28 | private Long commodityId; 29 | 30 | /** 31 | * 用户 ID 32 | */ 33 | private Long userId; 34 | 35 | /** 36 | * 评分(0-5,星级评分) 37 | */ 38 | private Integer score; 39 | 40 | private static final long serialVersionUID = 1L; 41 | } -------------------------------------------------------------------------------- /src/test/java/com/xiaobaitiao/springbootinit/service/PostThumbServiceTest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.service; 2 | 3 | import com.xiaobaitiao.springbootinit.model.entity.User; 4 | import javax.annotation.Resource; 5 | import org.junit.jupiter.api.Assertions; 6 | import org.junit.jupiter.api.BeforeAll; 7 | import org.junit.jupiter.api.Test; 8 | import org.springframework.boot.test.context.SpringBootTest; 9 | 10 | /** 11 | * 帖子点赞服务测试 12 | * 13 | * @author 程序员小白条 14 | * @from 个人博客 15 | */ 16 | @SpringBootTest 17 | class PostThumbServiceTest { 18 | 19 | @Resource 20 | private PostThumbService postThumbService; 21 | 22 | private static final User loginUser = new User(); 23 | 24 | @BeforeAll 25 | static void setUp() { 26 | loginUser.setId(1L); 27 | } 28 | 29 | @Test 30 | void doPostThumb() { 31 | int i = postThumbService.doPostThumb(1L, loginUser); 32 | Assertions.assertTrue(i >= 0); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/notice/NoticeUpdateRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.notice; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import lombok.Data; 7 | 8 | import java.io.Serializable; 9 | import java.util.Date; 10 | import java.util.List; 11 | 12 | /** 13 | * 更新公告请求 14 | * 15 | * @author 程序员小白条 16 | * @from 个人博客 17 | */ 18 | @Data 19 | public class NoticeUpdateRequest implements Serializable { 20 | 21 | /** 22 | * id 23 | */ 24 | private Long id; 25 | 26 | /** 27 | * 公告标题 28 | */ 29 | private String noticeTitle; 30 | 31 | /** 32 | * 公告内容 33 | */ 34 | private String noticeContent; 35 | 36 | /** 37 | * 发布公告的管理员 id 38 | */ 39 | private Long noticeAdminId; 40 | private static final long serialVersionUID = 1L; 41 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/userAiMessage/UserAiMessageEditRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.userAiMessage; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.util.Date; 7 | import java.util.List; 8 | 9 | /** 10 | * 编辑用户对话表请求 11 | * 12 | * @author 程序员小白条 13 | * @from 个人博客 14 | */ 15 | @Data 16 | public class UserAiMessageEditRequest implements Serializable { 17 | /** 18 | * 19 | */ 20 | private Long id; 21 | 22 | /** 23 | * 用户输入 24 | */ 25 | private String userInputText; 26 | 27 | /** 28 | * AI 生成结果 29 | */ 30 | private String aiGenerateText; 31 | 32 | /** 33 | * 用户ID 34 | */ 35 | private Long userId; 36 | 37 | /** 38 | * 创建时间 39 | */ 40 | private Date createTime; 41 | 42 | /** 43 | * 更新时间 44 | */ 45 | private Date updateTime; 46 | 47 | 48 | private static final long serialVersionUID = 1L; 49 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/userAiMessage/UserAiMessageUpdateRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.userAiMessage; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.util.Date; 7 | import java.util.List; 8 | 9 | /** 10 | * 更新用户对话表请求 11 | * 12 | * @author 程序员小白条 13 | * @from 个人博客 14 | */ 15 | @Data 16 | public class UserAiMessageUpdateRequest implements Serializable { 17 | 18 | /** 19 | * 20 | */ 21 | private Long id; 22 | 23 | /** 24 | * 用户输入 25 | */ 26 | private String userInputText; 27 | 28 | /** 29 | * AI 生成结果 30 | */ 31 | private String aiGenerateText; 32 | 33 | /** 34 | * 用户ID 35 | */ 36 | private Long userId; 37 | 38 | /** 39 | * 创建时间 40 | */ 41 | private Date createTime; 42 | 43 | /** 44 | * 更新时间 45 | */ 46 | private Date updateTime; 47 | 48 | 49 | private static final long serialVersionUID = 1L; 50 | } -------------------------------------------------------------------------------- /src/main/resources/mapper/PostThumbMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | id,postId, 19 | userId,createTime,updateTime 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/main/resources/application-prod.yml: -------------------------------------------------------------------------------- 1 | # 线上配置文件 2 | # @author 程序员小白条 3 | # @from 个人博客 4 | server: 5 | port: 8102 6 | spring: 7 | # 数据库配置 8 | # todo 需替换配置 9 | datasource: 10 | driver-class-name: com.mysql.cj.jdbc.Driver 11 | url: jdbc:mysql://localhost:3306/test_db_xbt 12 | username: root 13 | password: hsp 14 | # Redis 配置 15 | # todo 需替换配置 16 | redis: 17 | database: 1 18 | host: localhost 19 | port: 6379 20 | timeout: 5000 21 | password: 123456 22 | # Elasticsearch 配置 23 | # todo 需替换配置 24 | elasticsearch: 25 | uris: http://localhost:9200 26 | username: root 27 | password: 123456 28 | mybatis-plus: 29 | configuration: 30 | # 生产环境关闭日志 31 | log-impl: '' 32 | # 接口文档配置 33 | knife4j: 34 | basic: 35 | enable: true 36 | username: root 37 | password: 123456 38 | #jwt config 39 | jwt: 40 | tokenHeader: Authorization #JWT存储的请求头 41 | secret: mall-jwt-test #jwt加解密使用的密钥 42 | expiration: 36000000 #JWT的超时时间 43 | tokenHead: Bearer #JWT负载中拿到的开头 -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/config/CorsConfig.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.config; 2 | 3 | import org.springframework.context.annotation.Configuration; 4 | import org.springframework.web.servlet.config.annotation.CorsRegistry; 5 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 6 | 7 | /** 8 | * 全局跨域配置 9 | * 10 | * @author 程序员小白条 11 | * @from 个人博客 12 | */ 13 | @Configuration 14 | public class CorsConfig implements WebMvcConfigurer { 15 | 16 | @Override 17 | public void addCorsMappings(CorsRegistry registry) { 18 | // 覆盖所有请求 19 | registry.addMapping("/**") 20 | // 允许发送 Cookie 21 | .allowCredentials(true) 22 | // 放行哪些域名(必须用 patterns,否则 * 会和 allowCredentials 冲突) 23 | .allowedOriginPatterns("*") 24 | .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") 25 | .allowedHeaders("*") 26 | .exposedHeaders("*"); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/manager/model/request/SparkRequestHeader.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.manager.model.request; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * $.header 9 | * 10 | * @author briqt 11 | */ 12 | public class SparkRequestHeader implements Serializable { 13 | private static final long serialVersionUID = -1426143090218924505L; 14 | 15 | /** 16 | * 应用appid,从开放平台控制台创建的应用中获取
17 | * 必传 18 | */ 19 | @JsonProperty("app_id") 20 | private String appId; 21 | 22 | /** 23 | * 每个用户的id,用于区分不同用户
24 | * 非必传,最大长度32 25 | */ 26 | private String uid; 27 | 28 | public String getAppId() { 29 | return appId; 30 | } 31 | 32 | public void setAppId(String appId) { 33 | this.appId = appId; 34 | } 35 | 36 | public String getUid() { 37 | return uid; 38 | } 39 | 40 | public void setUid(String uid) { 41 | this.uid = uid; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/test/java/com/xiaobaitiao/springbootinit/service/PostServiceTest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.service; 2 | 3 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 4 | import com.xiaobaitiao.springbootinit.model.dto.post.PostQueryRequest; 5 | import com.xiaobaitiao.springbootinit.model.entity.Post; 6 | import javax.annotation.Resource; 7 | import org.junit.jupiter.api.Assertions; 8 | import org.junit.jupiter.api.Test; 9 | import org.springframework.boot.test.context.SpringBootTest; 10 | 11 | /** 12 | * 帖子服务测试 13 | * 14 | * @author 程序员小白条 15 | * @from
个人博客 16 | */ 17 | @SpringBootTest 18 | class PostServiceTest { 19 | 20 | @Resource 21 | private PostService postService; 22 | 23 | @Test 24 | void searchFromEs() { 25 | PostQueryRequest postQueryRequest = new PostQueryRequest(); 26 | postQueryRequest.setUserId(1L); 27 | Page postPage = postService.searchFromEs(postQueryRequest); 28 | Assertions.assertNotNull(postPage); 29 | } 30 | 31 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/user/UserUpdateRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.user; 2 | 3 | import java.io.Serializable; 4 | import java.math.BigDecimal; 5 | 6 | import lombok.Data; 7 | 8 | /** 9 | * 用户更新请求 10 | * 11 | * @author 程序员小白条 12 | * @from 个人博客 13 | */ 14 | @Data 15 | public class UserUpdateRequest implements Serializable { 16 | /** 17 | * id 18 | */ 19 | private Long id; 20 | 21 | /** 22 | * 用户昵称 23 | */ 24 | private String userName; 25 | 26 | /** 27 | * 用户头像 28 | */ 29 | private String userAvatar; 30 | 31 | /** 32 | * 简介 33 | */ 34 | private String userProfile; 35 | 36 | /** 37 | * 用户角色:user/admin/ban 38 | */ 39 | private String userRole; 40 | /** 41 | * 用户余额 42 | */ 43 | private BigDecimal balance; 44 | /** 45 | * 用户 AI 剩余可使用次数 46 | */ 47 | private Integer aiRemainNumber; 48 | private static final long serialVersionUID = 1L; 49 | } -------------------------------------------------------------------------------- /src/main/resources/META-INF/additional-spring-configuration-metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "properties": [ 3 | { 4 | "name": "cos.client.accessKey", 5 | "type": "java.lang.String", 6 | "description": "Description for cos.client.accessKey." 7 | }, 8 | { 9 | "name": "cos.client.secretKey", 10 | "type": "java.lang.String", 11 | "description": "Description for cos.client.secretKey." 12 | }, 13 | { 14 | "name": "cos.client.region", 15 | "type": "java.lang.String", 16 | "description": "Description for cos.client.region." 17 | }, 18 | { 19 | "name": "cos.client.bucket", 20 | "type": "java.lang.String", 21 | "description": "Description for cos.client.bucket." 22 | }, 23 | { 24 | "name": "wx.open.appId", 25 | "type": "java.lang.String", 26 | "description": "Description for wx.open.appId." 27 | }, 28 | { 29 | "name": "wx.open.appSecret", 30 | "type": "java.lang.String", 31 | "description": "Description for wx.open.appSecret." 32 | } 33 | ] 34 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/MainApplication.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit; 2 | 3 | import org.mybatis.spring.annotation.MapperScan; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; 7 | import org.springframework.context.annotation.EnableAspectJAutoProxy; 8 | import org.springframework.scheduling.annotation.EnableScheduling; 9 | 10 | /** 11 | * 主类(项目启动入口) 12 | * 13 | * @author 程序员小白条 14 | * @from 个人博客 15 | */ 16 | // todo 如需开启 Redis,须移除 exclude 中的内容 17 | @SpringBootApplication(exclude = RedisAutoConfiguration.class) 18 | @MapperScan("com.xiaobaitiao.springbootinit.mapper") 19 | @EnableScheduling 20 | @EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true) 21 | public class MainApplication { 22 | 23 | public static void main(String[] args) { 24 | SpringApplication.run(MainApplication.class, args); 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/config/AuthInterceptorConfig.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.config; 2 | 3 | import com.xiaobaitiao.springbootinit.aop.AuthInterceptorHandler; 4 | import org.springframework.context.annotation.Bean; 5 | import org.springframework.context.annotation.Configuration; 6 | import org.springframework.web.servlet.config.annotation.InterceptorRegistry; 7 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 8 | 9 | /** 10 | * @author 小白条 11 | * @from 个人博客 12 | */ 13 | @Configuration 14 | public class AuthInterceptorConfig implements WebMvcConfigurer { 15 | @Override 16 | public void addInterceptors(InterceptorRegistry registry) { 17 | registry.addInterceptor(authInterceptorHandler()).excludePathPatterns("/**/login","/**/register","/**/register_verify").excludePathPatterns("/doc.html"); 18 | } 19 | 20 | @Bean 21 | public AuthInterceptorHandler authInterceptorHandler(){ 22 | return new AuthInterceptorHandler(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/comment/CommentQueryRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.comment; 2 | 3 | import com.xiaobaitiao.springbootinit.common.PageRequest; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | 7 | import java.io.Serializable; 8 | 9 | /** 10 | * 查询请求 11 | * 12 | * @author 码羊 13 | */ 14 | @EqualsAndHashCode(callSuper = true) 15 | @Data 16 | public class CommentQueryRequest extends PageRequest implements Serializable { 17 | 18 | /** 19 | * 评论 ID 20 | */ 21 | private Long id; 22 | 23 | 24 | /** 25 | * 面经帖子 ID 26 | */ 27 | private Long postId; 28 | 29 | /** 30 | * 用户 ID 31 | */ 32 | private Long userId; 33 | 34 | /** 35 | * 评论内容 36 | */ 37 | private String content; 38 | 39 | /** 40 | * 父评论 ID,支持多级嵌套回复 41 | */ 42 | private Long parentId; 43 | /** 44 | * 顶级父 ID,支持多级嵌套回复 45 | */ 46 | private Long ancestorId; 47 | 48 | 49 | private static final long serialVersionUID = 1L; 50 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/commodityOrder/CommodityOrderEditRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.commodityOrder; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import com.baomidou.mybatisplus.annotation.TableLogic; 7 | import com.fasterxml.jackson.annotation.JsonFormat; 8 | import lombok.Data; 9 | 10 | import java.io.Serializable; 11 | import java.math.BigDecimal; 12 | import java.util.Date; 13 | import java.util.List; 14 | 15 | /** 16 | * 编辑商品订单表请求 17 | * 18 | * @author 程序员小白条 19 | * @from 个人博客 20 | */ 21 | @Data 22 | public class CommodityOrderEditRequest implements Serializable { 23 | /** 24 | * 订单 ID 25 | */ 26 | private Long id; 27 | 28 | /** 29 | * 订单备注 30 | */ 31 | private String remark; 32 | 33 | /** 34 | * 0-未支付 1-已支付 35 | */ 36 | private Integer payStatus; 37 | 38 | private static final long serialVersionUID = 1L; 39 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/commodityScore/CommodityScoreAddRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.commodityScore; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import com.baomidou.mybatisplus.annotation.TableLogic; 7 | import com.fasterxml.jackson.annotation.JsonFormat; 8 | import lombok.Data; 9 | 10 | import java.io.Serializable; 11 | import java.util.Date; 12 | import java.util.List; 13 | 14 | /** 15 | * 创建商品评分表请求 16 | * 17 | * @author 程序员小白条 18 | * @from 个人博客 19 | */ 20 | @Data 21 | public class CommodityScoreAddRequest implements Serializable { 22 | 23 | 24 | /** 25 | * 商品 ID 26 | */ 27 | private Long commodityId; 28 | 29 | /** 30 | * 用户 ID 31 | */ 32 | private Long userId; 33 | 34 | /** 35 | * 评分(0-5,星级评分) 36 | */ 37 | private Integer score; 38 | 39 | 40 | 41 | 42 | private static final long serialVersionUID = 1L; 43 | } -------------------------------------------------------------------------------- /src/test/java/com/xiaobaitiao/springbootinit/utils/EasyExcelTest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.utils; 2 | 3 | import com.alibaba.excel.EasyExcel; 4 | import com.alibaba.excel.support.ExcelTypeEnum; 5 | import org.junit.jupiter.api.Test; 6 | import org.springframework.boot.test.context.SpringBootTest; 7 | import org.springframework.util.ResourceUtils; 8 | 9 | import java.io.File; 10 | import java.io.FileNotFoundException; 11 | import java.util.List; 12 | import java.util.Map; 13 | 14 | /** 15 | * EasyExcel 测试 16 | * 17 | * @author 程序员小白条 18 | * @from 个人博客 19 | */ 20 | @SpringBootTest 21 | public class EasyExcelTest { 22 | 23 | @Test 24 | public void doImport() throws FileNotFoundException { 25 | File file = ResourceUtils.getFile("classpath:test_excel.xlsx"); 26 | List> list = EasyExcel.read(file) 27 | .excelType(ExcelTypeEnum.XLSX) 28 | .sheet() 29 | .headRowNumber(0) 30 | .doReadSync(); 31 | System.out.println(list); 32 | } 33 | 34 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/config/MyBatisPlusConfig.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.config; 2 | 3 | import com.baomidou.mybatisplus.annotation.DbType; 4 | import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; 5 | import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; 6 | import org.mybatis.spring.annotation.MapperScan; 7 | import org.springframework.context.annotation.Bean; 8 | import org.springframework.context.annotation.Configuration; 9 | 10 | /** 11 | * MyBatis Plus 配置 12 | * 13 | * @author https://github.com/lixiaobaitiao 14 | */ 15 | @Configuration 16 | @MapperScan("com.xiaobaitiao.springbootinit.mapper") 17 | public class MyBatisPlusConfig { 18 | 19 | /** 20 | * 拦截器配置 21 | * 22 | * @return 23 | */ 24 | @Bean 25 | public MybatisPlusInterceptor mybatisPlusInterceptor() { 26 | MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); 27 | // 分页插件 28 | interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); 29 | return interceptor; 30 | } 31 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/userCommodityFavorites/UserCommodityFavoritesQueryRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.userCommodityFavorites; 2 | 3 | import com.xiaobaitiao.springbootinit.common.PageRequest; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | 7 | import java.io.Serializable; 8 | import java.util.List; 9 | 10 | /** 11 | * 查询用户商品收藏表请求 12 | * 13 | * @author 程序员小白条 14 | * @from 个人博客 15 | */ 16 | @EqualsAndHashCode(callSuper = true) 17 | @Data 18 | public class UserCommodityFavoritesQueryRequest extends PageRequest implements Serializable { 19 | 20 | 21 | /** 22 | * 23 | */ 24 | private Long id; 25 | 26 | /** 27 | * 用户 ID 28 | */ 29 | private Long userId; 30 | 31 | /** 32 | * 商品 ID 33 | */ 34 | private Long commodityId; 35 | 36 | /** 37 | * 1-正常收藏 0-取消收藏 38 | */ 39 | private Integer status; 40 | 41 | /** 42 | * 用户备注 43 | */ 44 | private String remark; 45 | 46 | private static final long serialVersionUID = 1L; 47 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/vo/LoginUserVO.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.vo; 2 | 3 | import java.io.Serializable; 4 | import java.util.Date; 5 | import lombok.Data; 6 | 7 | /** 8 | * 已登录用户视图(脱敏) 9 | * 10 | * @author 程序员小白条 11 | * @from 个人博客 12 | **/ 13 | @Data 14 | public class LoginUserVO implements Serializable { 15 | 16 | /** 17 | * 用户 id 18 | */ 19 | private Long id; 20 | 21 | /** 22 | * 用户昵称 23 | */ 24 | private String userName; 25 | 26 | /** 27 | * 用户头像 28 | */ 29 | private String userAvatar; 30 | 31 | /** 32 | * 用户简介 33 | */ 34 | private String userProfile; 35 | 36 | /** 37 | * 用户角色:user/admin/ban 38 | */ 39 | private String userRole; 40 | /** 41 | * 用户余额(仅 AI 接口调用) 42 | */ 43 | private Integer balance; 44 | 45 | /** 46 | * 创建时间 47 | */ 48 | private Date createTime; 49 | 50 | /** 51 | * 更新时间 52 | */ 53 | private Date updateTime; 54 | 55 | private static final long serialVersionUID = 1L; 56 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/commodityOrder/CommodityOrderUpdateRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.commodityOrder; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.math.BigDecimal; 7 | import java.util.List; 8 | 9 | /** 10 | * 更新商品订单表请求 11 | * 12 | * @author 程序员小白条 13 | * @from 个人博客 14 | */ 15 | @Data 16 | public class CommodityOrderUpdateRequest implements Serializable { 17 | 18 | /** 19 | * 订单 ID 20 | */ 21 | private Long id; 22 | 23 | /** 24 | * 用户 ID 25 | */ 26 | private Long userId; 27 | /** 28 | * 商品 ID 29 | */ 30 | private Long commodityId; 31 | 32 | /** 33 | * 订单备注 34 | */ 35 | private String remark; 36 | 37 | /** 38 | * 购买数量 39 | */ 40 | private Integer buyNumber; 41 | 42 | /** 43 | * 订单总支付金额 44 | */ 45 | private BigDecimal paymentAmount; 46 | 47 | /** 48 | * 0-未支付 1-已支付 49 | */ 50 | private Integer payStatus; 51 | 52 | private static final long serialVersionUID = 1L; 53 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/common/ErrorCode.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.common; 2 | 3 | /** 4 | * 自定义错误码 5 | * 6 | * @author 程序员小白条 7 | * @from 个人博客 8 | */ 9 | public enum ErrorCode { 10 | 11 | SUCCESS(0, "ok"), 12 | PARAMS_ERROR(40000, "请求参数错误"), 13 | NOT_LOGIN_ERROR(40100, "未登录"), 14 | NO_AUTH_ERROR(40101, "无权限"), 15 | NOT_FOUND_ERROR(40400, "请求数据不存在"), 16 | FORBIDDEN_ERROR(40300, "禁止访问"), 17 | SYSTEM_ERROR(50000, "系统内部异常"), 18 | OPERATION_ERROR(50001, "操作失败"), 19 | WORD_FORBIDDEN_ERROR(422200, "包含违禁词,多次违禁将封禁账号"), 20 | USER_BALANCE_NOT_ENOUGH(50002,"用户余额不足,无法调用 AI"); 21 | 22 | /** 23 | * 状态码 24 | */ 25 | private final int code; 26 | 27 | /** 28 | * 信息 29 | */ 30 | private final String message; 31 | 32 | ErrorCode(int code, String message) { 33 | this.code = code; 34 | this.message = message; 35 | } 36 | 37 | public int getCode() { 38 | return code; 39 | } 40 | 41 | public String getMessage() { 42 | return message; 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/mapper/PostFavourMapper.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.conditions.Wrapper; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import com.baomidou.mybatisplus.core.metadata.IPage; 6 | import com.baomidou.mybatisplus.core.toolkit.Constants; 7 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 8 | import com.xiaobaitiao.springbootinit.model.entity.Post; 9 | import com.xiaobaitiao.springbootinit.model.entity.PostFavour; 10 | import org.apache.ibatis.annotations.Param; 11 | 12 | /** 13 | * 帖子收藏数据库操作 14 | * 15 | * @author 程序员小白条 16 | * @from 个人博客 17 | */ 18 | public interface PostFavourMapper extends BaseMapper { 19 | 20 | /** 21 | * 分页查询收藏帖子列表 22 | * 23 | * @param page 24 | * @param queryWrapper 25 | * @param favourUserId 26 | * @return 27 | */ 28 | Page listFavourPostByPage(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper, 29 | long favourUserId); 30 | 31 | } 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /src/test/java/com/xiaobaitiao/springbootinit/service/UserServiceTest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.service; 2 | 3 | import javax.annotation.Resource; 4 | import org.junit.jupiter.api.Assertions; 5 | import org.junit.jupiter.api.Test; 6 | import org.springframework.boot.test.context.SpringBootTest; 7 | 8 | /** 9 | * 用户服务测试 10 | * 11 | * @author 程序员小白条 12 | * @from 个人博客 13 | */ 14 | @SpringBootTest 15 | public class UserServiceTest { 16 | 17 | @Resource 18 | private UserService userService; 19 | 20 | @Test 21 | void userRegister() { 22 | String userAccount = "xiaobaitiao"; 23 | String userPassword = ""; 24 | String checkPassword = "123456"; 25 | try { 26 | long result = userService.userRegister(userAccount, userPassword, checkPassword); 27 | Assertions.assertEquals(-1, result); 28 | userAccount = "yu"; 29 | result = userService.userRegister(userAccount, userPassword, checkPassword); 30 | Assertions.assertEquals(-1, result); 31 | } catch (Exception e) { 32 | 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/commodityScore/CommodityScoreEditRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.commodityScore; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import com.baomidou.mybatisplus.annotation.TableLogic; 7 | import com.fasterxml.jackson.annotation.JsonFormat; 8 | import lombok.Data; 9 | 10 | import java.io.Serializable; 11 | import java.util.Date; 12 | import java.util.List; 13 | 14 | /** 15 | * 编辑商品评分表请求 16 | * 17 | * @author 程序员小白条 18 | * @from 个人博客 19 | */ 20 | @Data 21 | public class CommodityScoreEditRequest implements Serializable { 22 | 23 | /** 24 | * 商品评分 ID 25 | */ 26 | private Long id; 27 | 28 | /** 29 | * 商品 ID 30 | */ 31 | private Long commodityId; 32 | 33 | /** 34 | * 用户 ID 35 | */ 36 | private Long userId; 37 | 38 | /** 39 | * 评分(0-5,星级评分) 40 | */ 41 | private Integer score; 42 | 43 | private static final long serialVersionUID = 1L; 44 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/barrage/BarrageEditRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.barrage; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import com.baomidou.mybatisplus.annotation.TableLogic; 7 | import lombok.Data; 8 | 9 | import java.io.Serializable; 10 | import java.util.Date; 11 | import java.util.List; 12 | 13 | /** 14 | * 编辑弹幕请求 15 | * 16 | * @author 程序员小白条 17 | * @from 个人博客 18 | */ 19 | @Data 20 | public class BarrageEditRequest implements Serializable { 21 | 22 | /** 23 | * id 24 | */ 25 | private Long id; 26 | 27 | /** 28 | * 弹幕文本 29 | */ 30 | private String message; 31 | 32 | /** 33 | * 用户头像 34 | */ 35 | private String userAvatar; 36 | 37 | /** 38 | * 用户id 39 | */ 40 | private Long userId; 41 | 42 | /** 43 | * 是否精选(默认0,精选为1) 44 | */ 45 | private Integer isSelected; 46 | 47 | 48 | 49 | private static final long serialVersionUID = 1L; 50 | } -------------------------------------------------------------------------------- /src/main/resources/templates/model/TemplateQueryRequest.java.ftl: -------------------------------------------------------------------------------- 1 | package ${packageName}.model.dto.${dataKey}; 2 | 3 | import ${packageName}.common.PageRequest; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | 7 | import java.io.Serializable; 8 | import java.util.List; 9 | 10 | /** 11 | * 查询${dataName}请求 12 | * 13 | * @author 程序员小白条 14 | * @from 个人博客 15 | */ 16 | @EqualsAndHashCode(callSuper = true) 17 | @Data 18 | public class ${upperDataKey}QueryRequest extends PageRequest implements Serializable { 19 | 20 | /** 21 | * id 22 | */ 23 | private Long id; 24 | 25 | /** 26 | * id 27 | */ 28 | private Long notId; 29 | 30 | /** 31 | * 搜索词 32 | */ 33 | private String searchText; 34 | 35 | /** 36 | * 标题 37 | */ 38 | private String title; 39 | 40 | /** 41 | * 内容 42 | */ 43 | private String content; 44 | 45 | /** 46 | * 标签列表 47 | */ 48 | private List tags; 49 | 50 | /** 51 | * 创建用户 id 52 | */ 53 | private Long userId; 54 | 55 | private static final long serialVersionUID = 1L; 56 | } -------------------------------------------------------------------------------- /src/main/resources/mapper/CommodityScoreMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | id,commodityId,userId, 19 | score,createTime,updateTime, 20 | isDelete 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/notice/NoticeQueryRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.notice; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import com.xiaobaitiao.springbootinit.common.PageRequest; 7 | import lombok.Data; 8 | import lombok.EqualsAndHashCode; 9 | 10 | import java.io.Serializable; 11 | import java.util.Date; 12 | import java.util.List; 13 | 14 | /** 15 | * 查询公告请求 16 | * 17 | * @author 程序员小白条 18 | * @from 个人博客 19 | */ 20 | @EqualsAndHashCode(callSuper = true) 21 | @Data 22 | public class NoticeQueryRequest extends PageRequest implements Serializable { 23 | 24 | /** 25 | * id 26 | */ 27 | private Long id; 28 | 29 | /** 30 | * 公告标题 31 | */ 32 | private String noticeTitle; 33 | 34 | /** 35 | * 公告内容 36 | */ 37 | private String noticeContent; 38 | 39 | /** 40 | * 发布公告的管理员 id 41 | */ 42 | private Long noticeAdminId; 43 | 44 | private static final long serialVersionUID = 1L; 45 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/entity/PostThumb.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import com.baomidou.mybatisplus.annotation.TableName; 7 | import java.io.Serializable; 8 | import java.util.Date; 9 | import lombok.Data; 10 | 11 | /** 12 | * 帖子点赞 13 | * 14 | * @author 程序员小白条 15 | * @from 个人博客 16 | */ 17 | @TableName(value = "post_thumb") 18 | @Data 19 | public class PostThumb implements Serializable { 20 | 21 | /** 22 | * id 23 | */ 24 | @TableId(type = IdType.ASSIGN_ID) 25 | private Long id; 26 | 27 | /** 28 | * 帖子 id 29 | */ 30 | private Long postId; 31 | 32 | /** 33 | * 创建用户 id 34 | */ 35 | private Long userId; 36 | 37 | /** 38 | * 创建时间 39 | */ 40 | private Date createTime; 41 | 42 | /** 43 | * 更新时间 44 | */ 45 | private Date updateTime; 46 | 47 | @TableField(exist = false) 48 | private static final long serialVersionUID = 1L; 49 | } -------------------------------------------------------------------------------- /src/main/resources/mapper/NoticeMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | id,noticeTitle,noticeContent, 19 | noticeAdminId,createTime,updateTime, 20 | isDelete 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/entity/PostFavour.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import com.baomidou.mybatisplus.annotation.TableName; 7 | import java.io.Serializable; 8 | import java.util.Date; 9 | import lombok.Data; 10 | 11 | /** 12 | * 帖子收藏 13 | * 14 | * @author 程序员小白条 15 | * @from 个人博客 16 | **/ 17 | @TableName(value = "post_favour") 18 | @Data 19 | public class PostFavour implements Serializable { 20 | 21 | /** 22 | * id 23 | */ 24 | @TableId(type = IdType.ASSIGN_ID) 25 | private Long id; 26 | 27 | /** 28 | * 帖子 id 29 | */ 30 | private Long postId; 31 | 32 | /** 33 | * 创建用户 id 34 | */ 35 | private Long userId; 36 | 37 | /** 38 | * 创建时间 39 | */ 40 | private Date createTime; 41 | 42 | /** 43 | * 更新时间 44 | */ 45 | private Date updateTime; 46 | 47 | @TableField(exist = false) 48 | private static final long serialVersionUID = 1L; 49 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/userAiMessage/UserAiMessageQueryRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.userAiMessage; 2 | 3 | import com.xiaobaitiao.springbootinit.common.PageRequest; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | 7 | import java.io.Serializable; 8 | import java.util.Date; 9 | import java.util.List; 10 | 11 | /** 12 | * 查询用户对话表请求 13 | * 14 | * @author 程序员小白条 15 | * @from 个人博客 16 | */ 17 | @EqualsAndHashCode(callSuper = true) 18 | @Data 19 | public class UserAiMessageQueryRequest extends PageRequest implements Serializable { 20 | 21 | /** 22 | * 23 | */ 24 | private Long id; 25 | 26 | /** 27 | * 用户输入 28 | */ 29 | private String userInputText; 30 | 31 | /** 32 | * AI 生成结果 33 | */ 34 | private String aiGenerateText; 35 | 36 | /** 37 | * 用户ID 38 | */ 39 | private Long userId; 40 | 41 | /** 42 | * 创建时间 43 | */ 44 | private Date createTime; 45 | 46 | /** 47 | * 更新时间 48 | */ 49 | private Date updateTime; 50 | 51 | 52 | private static final long serialVersionUID = 1L; 53 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/entity/CommodityType.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.*; 4 | import com.fasterxml.jackson.annotation.JsonFormat; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | import java.util.Date; 9 | 10 | /** 11 | * 12 | * @TableName commodity_type 13 | */ 14 | @TableName(value ="commodity_type") 15 | @Data 16 | public class CommodityType implements Serializable { 17 | /** 18 | * 商品分类 ID 19 | */ 20 | @TableId(type = IdType.ASSIGN_ID) 21 | private Long id; 22 | 23 | /** 24 | * 商品类别名称 25 | */ 26 | private String typeName; 27 | 28 | /** 29 | * 创建时间 30 | */ 31 | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") 32 | private Date createTime; 33 | 34 | /** 35 | * 更新时间 36 | */ 37 | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") 38 | private Date updateTime; 39 | 40 | /** 41 | * 是否删除 42 | */ 43 | @TableLogic 44 | private Integer isDelete; 45 | 46 | @TableField(exist = false) 47 | private static final long serialVersionUID = 1L; 48 | } -------------------------------------------------------------------------------- /src/main/resources/mapper/UserAiMessageMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | id,userInputText,aiGenerateText, 19 | userId,createTime,updateTime, 20 | isDelete 21 | 22 | 23 | -------------------------------------------------------------------------------- /sql/post_es_mapping.json: -------------------------------------------------------------------------------- 1 | { 2 | "aliases": { 3 | "post": {} 4 | }, 5 | "mappings": { 6 | "properties": { 7 | "title": { 8 | "type": "text", 9 | "analyzer": "ik_max_word", 10 | "search_analyzer": "ik_smart", 11 | "fields": { 12 | "keyword": { 13 | "type": "keyword", 14 | "ignore_above": 256 15 | } 16 | } 17 | }, 18 | "content": { 19 | "type": "text", 20 | "analyzer": "ik_max_word", 21 | "search_analyzer": "ik_smart", 22 | "fields": { 23 | "keyword": { 24 | "type": "keyword", 25 | "ignore_above": 256 26 | } 27 | } 28 | }, 29 | "tags": { 30 | "type": "keyword" 31 | }, 32 | "thumbNum": { 33 | "type": "long" 34 | }, 35 | "favourNum": { 36 | "type": "long" 37 | }, 38 | "userId": { 39 | "type": "keyword" 40 | }, 41 | "createTime": { 42 | "type": "date" 43 | }, 44 | "updateTime": { 45 | "type": "date" 46 | }, 47 | "isDelete": { 48 | "type": "keyword" 49 | } 50 | } 51 | } 52 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/manager/constant/SparkApiVersion.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.manager.constant; 2 | 3 | /** 4 | * SparkApiVersion 5 | * 6 | * @author briqt 7 | * @date 2023/8/31 8 | */ 9 | public enum SparkApiVersion { 10 | 11 | /** 12 | * 1.5版本 13 | */ 14 | V1_5("v1.1", "https://spark-api.xf-yun.com/v1.1/chat", "general"), 15 | 16 | /** 17 | * 2.0版本 18 | */ 19 | V2_0("v2.1", "https://spark-api.xf-yun.com/v2.1/chat", "generalv2"), 20 | 21 | /** 22 | * 3.5版本 23 | */ 24 | V3_0("v4.0", "https://spark-api.xf-yun.com/v4.0/chat", "4.0Ultra"), 25 | ; 26 | 27 | SparkApiVersion(String version, String url, String domain) { 28 | this.version = version; 29 | this.url = url; 30 | this.domain = domain; 31 | } 32 | 33 | private final String version; 34 | 35 | private final String url; 36 | 37 | private final String domain; 38 | 39 | public String getVersion() { 40 | return version; 41 | } 42 | 43 | public String getUrl() { 44 | return url; 45 | } 46 | 47 | public String getDomain() { 48 | return domain; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/entity/Comment.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.*; 4 | 5 | import java.io.Serializable; 6 | import java.util.Date; 7 | import lombok.Data; 8 | 9 | /** 10 | * 11 | * @TableName comment 12 | */ 13 | @TableName(value ="comment") 14 | @Data 15 | public class Comment implements Serializable { 16 | /** 17 | * 评论 ID 18 | */ 19 | @TableId(type = IdType.ASSIGN_ID) 20 | private Long id; 21 | 22 | /** 23 | * 面经帖子 ID 24 | */ 25 | private Long postId; 26 | 27 | /** 28 | * 用户 ID 29 | */ 30 | private Long userId; 31 | 32 | /** 33 | * 评论内容 34 | */ 35 | private String content; 36 | 37 | /** 38 | * 父评论 ID,支持多级嵌套回复 39 | */ 40 | private Long parentId; 41 | /** 42 | * 顶级父 ID,支持多级嵌套回复 43 | */ 44 | private Long ancestorId; 45 | 46 | /** 47 | * 创建时间 48 | */ 49 | private Date createTime; 50 | 51 | /** 52 | * 更新时间 53 | */ 54 | private Date updateTime; 55 | 56 | /** 57 | * 是否删除 58 | */ 59 | @TableLogic 60 | private Integer isDelete; 61 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/common/JwtProperties.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.common; 2 | 3 | import lombok.Data; 4 | import org.springframework.beans.factory.annotation.Value; 5 | import org.springframework.stereotype.Component; 6 | 7 | /** 8 | * JWT配置类,读取Application.yml中的配置 9 | * 10 | * @author AdminMall 11 | */ 12 | @Component 13 | @Data 14 | public class JwtProperties { 15 | /** 16 | * JWT存储的请求头 17 | */ 18 | @Value("${jwt.tokenHeader}") 19 | private String tokenHeader; 20 | /** 21 | * jwt加解密使用的密钥 22 | */ 23 | @Value("${jwt.secret}") 24 | private String secret; 25 | /** 26 | * JWT的超时时间 27 | */ 28 | @Value("${jwt.expiration}") 29 | private long expiration; 30 | 31 | public JwtProperties() { 32 | } 33 | 34 | /** 35 | * JWT负载中拿到的开头 36 | */ 37 | @Value("${jwt.tokenHead}") 38 | private String tokenHead; 39 | 40 | public JwtProperties(String tokenHeader, String secret, long expiration, String tokenHead) { 41 | this.tokenHeader = tokenHeader; 42 | this.secret = secret; 43 | this.expiration = expiration; 44 | this.tokenHead = tokenHead; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/userCommodityFavorites/UserCommodityFavoritesAddRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.userCommodityFavorites; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import com.baomidou.mybatisplus.annotation.TableLogic; 7 | import com.fasterxml.jackson.annotation.JsonFormat; 8 | import lombok.Data; 9 | 10 | import java.io.Serializable; 11 | import java.util.Date; 12 | import java.util.List; 13 | 14 | /** 15 | * 创建用户商品收藏表请求 16 | * 17 | * @author 程序员小白条 18 | * @from 个人博客 19 | */ 20 | @Data 21 | public class UserCommodityFavoritesAddRequest implements Serializable { 22 | 23 | 24 | /** 25 | * 用户 ID 26 | */ 27 | private Long userId; 28 | 29 | /** 30 | * 商品 ID 31 | */ 32 | private Long commodityId; 33 | 34 | /** 35 | * 1-正常收藏 0-取消收藏 36 | */ 37 | private Integer status; 38 | 39 | /** 40 | * 用户备注 41 | */ 42 | private String remark; 43 | 44 | 45 | 46 | private static final long serialVersionUID = 1L; 47 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/config/JsonConfig.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.config; 2 | 3 | import com.fasterxml.jackson.databind.ObjectMapper; 4 | import com.fasterxml.jackson.databind.module.SimpleModule; 5 | import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; 6 | import org.springframework.boot.jackson.JsonComponent; 7 | import org.springframework.context.annotation.Bean; 8 | import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; 9 | 10 | /** 11 | * Spring MVC Json 配置 12 | * 13 | * @author 程序员小白条 14 | * @from 个人博客 15 | */ 16 | @JsonComponent 17 | public class JsonConfig { 18 | 19 | /** 20 | * 添加 Long 转 json 精度丢失的配置 21 | */ 22 | @Bean 23 | public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) { 24 | ObjectMapper objectMapper = builder.createXmlMapper(false).build(); 25 | SimpleModule module = new SimpleModule(); 26 | module.addSerializer(Long.class, ToStringSerializer.instance); 27 | module.addSerializer(Long.TYPE, ToStringSerializer.instance); 28 | objectMapper.registerModule(module); 29 | return objectMapper; 30 | } 31 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/vo/UserVO.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.vo; 2 | 3 | import java.io.Serializable; 4 | import java.math.BigDecimal; 5 | import java.util.Date; 6 | import lombok.Data; 7 | 8 | /** 9 | * 用户视图(脱敏) 10 | * 11 | * @author 程序员小白条 12 | * @from 个人博客 13 | */ 14 | @Data 15 | public class UserVO implements Serializable { 16 | 17 | /** 18 | * id 19 | */ 20 | private Long id; 21 | 22 | /** 23 | * 用户昵称 24 | */ 25 | private String userName; 26 | 27 | /** 28 | * 用户头像 29 | */ 30 | private String userAvatar; 31 | 32 | /** 33 | * 用户简介 34 | */ 35 | private String userProfile; 36 | 37 | /** 38 | * 用户角色:user/admin/ban 39 | */ 40 | private String userRole; 41 | /** 42 | * 联系方式 43 | */ 44 | private String userPhone; 45 | /** 46 | * 用户余额 47 | */ 48 | private BigDecimal balance; 49 | /** 50 | * 用户 AI 剩余可使用次数 51 | */ 52 | private Integer aiRemainNumber; 53 | /** 54 | * 创建时间 55 | */ 56 | private Date createTime; 57 | 58 | private static final long serialVersionUID = 1L; 59 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/exception/GlobalExceptionHandler.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.exception; 2 | 3 | import com.xiaobaitiao.springbootinit.common.BaseResponse; 4 | import com.xiaobaitiao.springbootinit.common.ErrorCode; 5 | import com.xiaobaitiao.springbootinit.common.ResultUtils; 6 | import lombok.extern.slf4j.Slf4j; 7 | import org.springframework.web.bind.annotation.ExceptionHandler; 8 | import org.springframework.web.bind.annotation.RestControllerAdvice; 9 | 10 | /** 11 | * 全局异常处理器 12 | * 13 | * @author 程序员小白条 14 | * @from 个人博客 15 | */ 16 | @RestControllerAdvice 17 | @Slf4j 18 | public class GlobalExceptionHandler { 19 | 20 | @ExceptionHandler(BusinessException.class) 21 | public BaseResponse businessExceptionHandler(BusinessException e) { 22 | log.error("BusinessException", e); 23 | return ResultUtils.error(e.getCode(), e.getMessage()); 24 | } 25 | 26 | @ExceptionHandler(RuntimeException.class) 27 | public BaseResponse runtimeExceptionHandler(RuntimeException e) { 28 | log.error("RuntimeException", e); 29 | return ResultUtils.error(ErrorCode.SYSTEM_ERROR, "系统错误"); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/entity/Barrage.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.*; 4 | 5 | import java.io.Serializable; 6 | import java.util.Date; 7 | import lombok.Data; 8 | 9 | /** 10 | * 11 | * @TableName barrage 12 | */ 13 | @TableName(value ="barrage") 14 | @Data 15 | public class Barrage implements Serializable { 16 | /** 17 | * id 18 | */ 19 | @TableId(type = IdType.ASSIGN_ID) 20 | private Long id; 21 | 22 | /** 23 | * 弹幕文本 24 | */ 25 | private String message; 26 | 27 | /** 28 | * 用户头像 29 | */ 30 | private String userAvatar; 31 | 32 | /** 33 | * 用户id 34 | */ 35 | private Long userId; 36 | 37 | /** 38 | * 是否精选(默认0,精选为1) 39 | */ 40 | private Integer isSelected; 41 | 42 | /** 43 | * 创建时间 44 | */ 45 | private Date createTime; 46 | 47 | /** 48 | * 更新时间 49 | */ 50 | private Date updateTime; 51 | 52 | /** 53 | * 是否删除 54 | */ 55 | @TableLogic 56 | private Integer isDelete; 57 | 58 | @TableField(exist = false) 59 | private static final long serialVersionUID = 1L; 60 | } -------------------------------------------------------------------------------- /src/test/java/com/xiaobaitiao/springbootinit/mapper/PostFavourMapperTest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 4 | import com.baomidou.mybatisplus.core.metadata.IPage; 5 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 6 | import com.xiaobaitiao.springbootinit.model.entity.Post; 7 | import javax.annotation.Resource; 8 | import org.junit.jupiter.api.Assertions; 9 | import org.junit.jupiter.api.Test; 10 | import org.springframework.boot.test.context.SpringBootTest; 11 | 12 | /** 13 | * 帖子收藏数据库操作测试 14 | * 15 | * @author 程序员小白条 16 | * @from 个人博客 17 | */ 18 | @SpringBootTest 19 | class PostFavourMapperTest { 20 | 21 | @Resource 22 | private PostFavourMapper postFavourMapper; 23 | 24 | @Test 25 | void listUserFavourPostByPage() { 26 | IPage page = new Page<>(2, 1); 27 | QueryWrapper queryWrapper = new QueryWrapper<>(); 28 | queryWrapper.eq("id", 1); 29 | queryWrapper.like("content", "a"); 30 | IPage result = postFavourMapper.listFavourPostByPage(page, queryWrapper, 1); 31 | Assertions.assertNotNull(result); 32 | } 33 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/common/BaseResponse.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.common; 2 | 3 | import java.io.Serializable; 4 | import java.util.HashMap; 5 | 6 | import lombok.Data; 7 | 8 | /** 9 | * 通用返回类 10 | * 11 | * @param 12 | * @author 程序员小白条 13 | * @from 个人博客 14 | */ 15 | @Data 16 | public class BaseResponse implements Serializable { 17 | 18 | private int code; 19 | 20 | private T data; 21 | 22 | private String message; 23 | 24 | private HashMap hashMap = new HashMap<>(); 25 | public BaseResponse(int code, T data, String message) { 26 | this.code = code; 27 | this.data = data; 28 | this.message = message; 29 | } 30 | 31 | public BaseResponse(int code, T data) { 32 | this(code, data, ""); 33 | } 34 | 35 | public BaseResponse(ErrorCode errorCode) { 36 | this(errorCode.getCode(), null, errorCode.getMessage()); 37 | } 38 | 39 | public BaseResponse(int code, T data, String message,HashMap hashMap) { 40 | this.code = code; 41 | this.data = data; 42 | this.message = message; 43 | this.hashMap = hashMap; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/exception/ThrowUtils.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.exception; 2 | 3 | import com.xiaobaitiao.springbootinit.common.ErrorCode; 4 | 5 | /** 6 | * 抛异常工具类 7 | * 8 | * @author 程序员小白条 9 | * @from 个人博客 10 | */ 11 | public class ThrowUtils { 12 | 13 | /** 14 | * 条件成立则抛异常 15 | * 16 | * @param condition 17 | * @param runtimeException 18 | */ 19 | public static void throwIf(boolean condition, RuntimeException runtimeException) { 20 | if (condition) { 21 | throw runtimeException; 22 | } 23 | } 24 | 25 | /** 26 | * 条件成立则抛异常 27 | * 28 | * @param condition 29 | * @param errorCode 30 | */ 31 | public static void throwIf(boolean condition, ErrorCode errorCode) { 32 | throwIf(condition, new BusinessException(errorCode)); 33 | } 34 | 35 | /** 36 | * 条件成立则抛异常 37 | * 38 | * @param condition 39 | * @param errorCode 40 | * @param message 41 | */ 42 | public static void throwIf(boolean condition, ErrorCode errorCode, String message) { 43 | throwIf(condition, new BusinessException(errorCode, message)); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/resources/mapper/BarrageMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | id,message,userAvatar, 20 | userId,isSelected,createTime, 21 | updateTime,isDelete 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/config/ThreadPoolExecutorConfig.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.config; 2 | 3 | /** 4 | * @author 小白条 5 | * @from 个人博客 6 | */ 7 | import org.springframework.context.annotation.Bean; 8 | import org.springframework.context.annotation.Configuration; 9 | 10 | import java.util.concurrent.ArrayBlockingQueue; 11 | import java.util.concurrent.ThreadFactory; 12 | import java.util.concurrent.ThreadPoolExecutor; 13 | import java.util.concurrent.TimeUnit; 14 | 15 | @Configuration 16 | public class ThreadPoolExecutorConfig { 17 | 18 | @Bean 19 | public ThreadPoolExecutor threadPoolExecutor() { 20 | ThreadFactory threadFactory = new ThreadFactory() { 21 | private int count = 1; 22 | 23 | @Override 24 | public Thread newThread( Runnable r) { 25 | Thread thread = new Thread(r); 26 | thread.setName("线程" + count); 27 | count++; 28 | return thread; 29 | } 30 | }; 31 | return new ThreadPoolExecutor(2, 4, 100, TimeUnit.SECONDS, 32 | new ArrayBlockingQueue<>(4), threadFactory); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/userCommodityFavorites/UserCommodityFavoritesEditRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.userCommodityFavorites; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import com.baomidou.mybatisplus.annotation.TableLogic; 7 | import com.fasterxml.jackson.annotation.JsonFormat; 8 | import lombok.Data; 9 | 10 | import java.io.Serializable; 11 | import java.util.Date; 12 | import java.util.List; 13 | 14 | /** 15 | * 编辑用户商品收藏表请求 16 | * 17 | * @author 程序员小白条 18 | * @from 个人博客 19 | */ 20 | @Data 21 | public class UserCommodityFavoritesEditRequest implements Serializable { 22 | 23 | /** 24 | * 25 | */ 26 | private Long id; 27 | 28 | /** 29 | * 用户 ID 30 | */ 31 | private Long userId; 32 | 33 | /** 34 | * 商品 ID 35 | */ 36 | private Long commodityId; 37 | 38 | /** 39 | * 1-正常收藏 0-取消收藏 40 | */ 41 | private Integer status; 42 | 43 | /** 44 | * 用户备注 45 | */ 46 | private String remark; 47 | 48 | private static final long serialVersionUID = 1L; 49 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/wxmp/handler/EventHandler.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.wxmp.handler; 2 | 3 | import java.util.Map; 4 | import me.chanjar.weixin.common.error.WxErrorException; 5 | import me.chanjar.weixin.common.session.WxSessionManager; 6 | import me.chanjar.weixin.mp.api.WxMpMessageHandler; 7 | import me.chanjar.weixin.mp.api.WxMpService; 8 | import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; 9 | import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; 10 | import org.springframework.stereotype.Component; 11 | 12 | /** 13 | * 事件处理器 14 | * 15 | * @author 程序员小白条 16 | * @from 个人博客 17 | **/ 18 | @Component 19 | public class EventHandler implements WxMpMessageHandler { 20 | 21 | @Override 22 | public WxMpXmlOutMessage handle(WxMpXmlMessage wxMpXmlMessage, Map map, WxMpService wxMpService, 23 | WxSessionManager wxSessionManager) throws WxErrorException { 24 | final String content = "您点击了菜单"; 25 | // 调用接口,返回验证码 26 | return WxMpXmlOutMessage.TEXT().content(content) 27 | .fromUser(wxMpXmlMessage.getToUser()) 28 | .toUser(wxMpXmlMessage.getFromUser()) 29 | .build(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/wxmp/handler/MessageHandler.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.wxmp.handler; 2 | 3 | import java.util.Map; 4 | import me.chanjar.weixin.common.error.WxErrorException; 5 | import me.chanjar.weixin.common.session.WxSessionManager; 6 | import me.chanjar.weixin.mp.api.WxMpMessageHandler; 7 | import me.chanjar.weixin.mp.api.WxMpService; 8 | import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; 9 | import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; 10 | import org.springframework.stereotype.Component; 11 | 12 | /** 13 | * 消息处理器 14 | * 15 | * @author 程序员小白条 16 | * @from 个人博客 17 | **/ 18 | @Component 19 | public class MessageHandler implements WxMpMessageHandler { 20 | 21 | @Override 22 | public WxMpXmlOutMessage handle(WxMpXmlMessage wxMpXmlMessage, Map map, 23 | WxMpService wxMpService, WxSessionManager wxSessionManager) throws WxErrorException { 24 | String content = "我是复读机:" + wxMpXmlMessage.getContent(); 25 | return WxMpXmlOutMessage.TEXT().content(content) 26 | .fromUser(wxMpXmlMessage.getToUser()) 27 | .toUser(wxMpXmlMessage.getFromUser()) 28 | .build(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/wxmp/handler/SubscribeHandler.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.wxmp.handler; 2 | 3 | import java.util.Map; 4 | import me.chanjar.weixin.common.error.WxErrorException; 5 | import me.chanjar.weixin.common.session.WxSessionManager; 6 | import me.chanjar.weixin.mp.api.WxMpMessageHandler; 7 | import me.chanjar.weixin.mp.api.WxMpService; 8 | import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; 9 | import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; 10 | import org.springframework.stereotype.Component; 11 | 12 | /** 13 | * 关注处理器 14 | * 15 | * @author 程序员小白条 16 | * @from 个人博客 17 | **/ 18 | @Component 19 | public class SubscribeHandler implements WxMpMessageHandler { 20 | 21 | @Override 22 | public WxMpXmlOutMessage handle(WxMpXmlMessage wxMpXmlMessage, Map map, 23 | WxMpService wxMpService, WxSessionManager wxSessionManager) throws WxErrorException { 24 | final String content = "感谢关注"; 25 | // 调用接口,返回验证码 26 | return WxMpXmlOutMessage.TEXT().content(content) 27 | .fromUser(wxMpXmlMessage.getToUser()) 28 | .toUser(wxMpXmlMessage.getFromUser()) 29 | .build(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/resources/mapper/UserCommodityFavoritesMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | id,userId,commodityId, 20 | status,remark,createTime, 21 | updateTime,isDelete 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/manager/model/request/function/SparkRequestFunctionProperty.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.manager.model.request.function; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * $.payload.functions.text.parameters.properties.* 7 | * 8 | * @author briqt 9 | */ 10 | public class SparkRequestFunctionProperty implements Serializable { 11 | 12 | private static final long serialVersionUID = -343415637582994606L; 13 | 14 | /** 15 | * 必传;参数信息描述;该内容由用户定义,需要返回的参数是什么类型 16 | */ 17 | private String type; 18 | 19 | /** 20 | * 必传;参数详细描述;该内容由用户定义,需要返回的参数的具体描述 21 | */ 22 | private String description; 23 | 24 | public SparkRequestFunctionProperty() { 25 | } 26 | 27 | public SparkRequestFunctionProperty(String type, String description) { 28 | this.type = type; 29 | this.description = description; 30 | } 31 | 32 | public String getType() { 33 | return type; 34 | } 35 | 36 | public void setType(String type) { 37 | this.type = type; 38 | } 39 | 40 | public String getDescription() { 41 | return description; 42 | } 43 | 44 | public void setDescription(String description) { 45 | this.description = description; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/user/UserQueryRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.user; 2 | 3 | import com.xiaobaitiao.springbootinit.common.PageRequest; 4 | import java.io.Serializable; 5 | import java.math.BigDecimal; 6 | 7 | import lombok.Data; 8 | import lombok.EqualsAndHashCode; 9 | 10 | /** 11 | * 用户查询请求 12 | * 13 | * @author 程序员小白条 14 | * @from 个人博客 15 | */ 16 | @EqualsAndHashCode(callSuper = true) 17 | @Data 18 | public class UserQueryRequest extends PageRequest implements Serializable { 19 | /** 20 | * id 21 | */ 22 | private Long id; 23 | 24 | /** 25 | * 开放平台id 26 | */ 27 | private String unionId; 28 | 29 | /** 30 | * 公众号openId 31 | */ 32 | private String mpOpenId; 33 | 34 | /** 35 | * 用户昵称 36 | */ 37 | private String userName; 38 | 39 | /** 40 | * 简介 41 | */ 42 | private String userProfile; 43 | /** 44 | * 用户余额 45 | */ 46 | private BigDecimal balance; 47 | /** 48 | * 用户 AI 剩余可使用次数 49 | */ 50 | private Integer aiRemainNumber; 51 | /** 52 | * 用户角色:user/admin/ban 53 | */ 54 | private String userRole; 55 | 56 | private static final long serialVersionUID = 1L; 57 | } -------------------------------------------------------------------------------- /src/main/resources/mapper/CommentMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | id,questionId,userId, 21 | content,parentId,createTime, 22 | updateTime,isDelete,ancestorId 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/entity/Notice.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.*; 4 | import com.fasterxml.jackson.annotation.JsonFormat; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | import java.util.Date; 9 | 10 | /** 11 | * 12 | * @TableName 公告表 13 | */ 14 | @TableName(value ="notice") 15 | @Data 16 | public class Notice implements Serializable { 17 | /** 18 | * id 19 | */ 20 | @TableId(type = IdType.ASSIGN_ID) 21 | private Long id; 22 | 23 | /** 24 | * 公告标题 25 | */ 26 | private String noticeTitle; 27 | 28 | /** 29 | * 公告内容 30 | */ 31 | private String noticeContent; 32 | 33 | /** 34 | * 发布公告的管理员 id 35 | */ 36 | private Long noticeAdminId; 37 | 38 | /** 39 | * 创建时间 40 | */ 41 | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") 42 | private Date createTime; 43 | 44 | /** 45 | * 更新时间 46 | */ 47 | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") 48 | private Date updateTime; 49 | 50 | /** 51 | * 是否删除 52 | */ 53 | @TableLogic 54 | private Integer isDelete; 55 | 56 | @TableField(exist = false) 57 | private static final long serialVersionUID = 1L; 58 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/post/PostQueryRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.post; 2 | 3 | import com.xiaobaitiao.springbootinit.common.PageRequest; 4 | import java.io.Serializable; 5 | import java.util.List; 6 | import lombok.Data; 7 | import lombok.EqualsAndHashCode; 8 | 9 | /** 10 | * 查询请求 11 | * 12 | * @author 程序员小白条 13 | * @from 个人博客 14 | */ 15 | @EqualsAndHashCode(callSuper = true) 16 | @Data 17 | public class PostQueryRequest extends PageRequest implements Serializable { 18 | 19 | /** 20 | * id 21 | */ 22 | private Long id; 23 | 24 | /** 25 | * id 26 | */ 27 | private Long notId; 28 | 29 | /** 30 | * 搜索词 31 | */ 32 | private String searchText; 33 | 34 | /** 35 | * 标题 36 | */ 37 | private String title; 38 | 39 | /** 40 | * 内容 41 | */ 42 | private String content; 43 | 44 | /** 45 | * 标签列表 46 | */ 47 | private List tags; 48 | 49 | /** 50 | * 至少有一个标签 51 | */ 52 | private List orTags; 53 | 54 | /** 55 | * 创建用户 id 56 | */ 57 | private Long userId; 58 | 59 | /** 60 | * 收藏用户 id 61 | */ 62 | private Long favourUserId; 63 | 64 | private static final long serialVersionUID = 1L; 65 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/manager/model/response/SparkResponseChoices.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.manager.model.response; 2 | 3 | 4 | import com.xiaobaitiao.springbootinit.manager.model.SparkMessage; 5 | 6 | import java.io.Serializable; 7 | import java.util.List; 8 | 9 | /** 10 | * $.payload.choices 11 | * 12 | * @author briqt 13 | */ 14 | public class SparkResponseChoices implements Serializable { 15 | private static final long serialVersionUID = 3908073548592366629L; 16 | 17 | /** 18 | * 文本响应状态,取值为[0,1,2]; 0代表首个文本结果;1代表中间文本结果;2代表最后一个文本结果 19 | */ 20 | private Integer status; 21 | 22 | /** 23 | * 返回的数据序号,取值为[0,9999999] 24 | */ 25 | private Integer seq; 26 | 27 | /** 28 | * 消息列表 29 | */ 30 | private List text; 31 | 32 | public Integer getStatus() { 33 | return status; 34 | } 35 | 36 | public void setStatus(Integer status) { 37 | this.status = status; 38 | } 39 | 40 | public Integer getSeq() { 41 | return seq; 42 | } 43 | 44 | public void setSeq(Integer seq) { 45 | this.seq = seq; 46 | } 47 | 48 | public List getText() { 49 | return text; 50 | } 51 | 52 | public void setText(List text) { 53 | this.text = text; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/entity/UserAiMessage.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.*; 4 | import com.fasterxml.jackson.annotation.JsonFormat; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | import java.util.Date; 9 | 10 | /** 11 | * 12 | * @TableName user_ai_message 13 | */ 14 | @TableName(value ="user_ai_message") 15 | @Data 16 | public class UserAiMessage implements Serializable { 17 | /** 18 | * 19 | */ 20 | @TableId(type= IdType.ASSIGN_ID) 21 | private Long id; 22 | 23 | /** 24 | * 用户输入 25 | */ 26 | private String userInputText; 27 | 28 | /** 29 | * AI 生成结果 30 | */ 31 | private String aiGenerateText; 32 | 33 | /** 34 | * 用户ID 35 | */ 36 | private Long userId; 37 | 38 | /** 39 | * 创建时间 40 | */ 41 | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") 42 | private Date createTime; 43 | 44 | /** 45 | * 更新时间 46 | */ 47 | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") 48 | private Date updateTime; 49 | 50 | /** 51 | * 逻辑删除 52 | */ 53 | @TableLogic 54 | private Integer isDelete; 55 | 56 | @TableField(exist = false) 57 | private static final long serialVersionUID = 1L; 58 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/commodityOrder/CommodityOrderAddRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.commodityOrder; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import com.baomidou.mybatisplus.annotation.TableLogic; 7 | import com.fasterxml.jackson.annotation.JsonFormat; 8 | import lombok.Data; 9 | 10 | import java.io.Serializable; 11 | import java.math.BigDecimal; 12 | import java.util.Date; 13 | import java.util.List; 14 | 15 | /** 16 | * 创建商品订单表请求 17 | * 18 | * @author 程序员小白条 19 | * @from 个人博客 20 | */ 21 | @Data 22 | public class CommodityOrderAddRequest implements Serializable { 23 | 24 | /** 25 | * 用户 ID 26 | */ 27 | private Long userId; 28 | 29 | /** 30 | * 商品 ID 31 | */ 32 | private Long commodityId; 33 | 34 | /** 35 | * 订单备注 36 | */ 37 | private String remark; 38 | 39 | /** 40 | * 购买数量 41 | */ 42 | private Integer buyNumber; 43 | 44 | /** 45 | * 订单总支付金额 46 | */ 47 | private BigDecimal paymentAmount; 48 | 49 | /** 50 | * 0-未支付 1-已支付 51 | */ 52 | private Integer payStatus; 53 | 54 | private static final long serialVersionUID = 1L; 55 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/entity/CommodityScore.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.*; 4 | import com.fasterxml.jackson.annotation.JsonFormat; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | import java.util.Date; 9 | 10 | /** 11 | * 12 | * @TableName commodity_score 13 | */ 14 | @TableName(value ="commodity_score") 15 | @Data 16 | public class CommodityScore implements Serializable { 17 | /** 18 | * 商品评分 ID 19 | */ 20 | @TableId(type = IdType.ASSIGN_ID) 21 | private Long id; 22 | 23 | /** 24 | * 商品 ID 25 | */ 26 | private Long commodityId; 27 | 28 | /** 29 | * 用户 ID 30 | */ 31 | private Long userId; 32 | 33 | /** 34 | * 评分(0-5,星级评分) 35 | */ 36 | private Integer score; 37 | 38 | /** 39 | * 创建时间 40 | 41 | */ 42 | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") 43 | private Date createTime; 44 | 45 | /** 46 | * 更新时间 47 | */ 48 | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") 49 | private Date updateTime; 50 | 51 | /** 52 | * 是否删除 53 | */ 54 | @TableLogic 55 | private Integer isDelete; 56 | 57 | @TableField(exist = false) 58 | private static final long serialVersionUID = 1L; 59 | } -------------------------------------------------------------------------------- /src/main/resources/mapper/PostFavourMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | id,postId,userId, 19 | createTime,updateTime 20 | 21 | 22 | 29 | 30 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/privateMessage/PrivateMessageAddRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.privateMessage; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import com.baomidou.mybatisplus.annotation.TableLogic; 7 | import com.fasterxml.jackson.annotation.JsonFormat; 8 | import lombok.Data; 9 | 10 | import java.io.Serializable; 11 | import java.util.Date; 12 | import java.util.List; 13 | 14 | /** 15 | * 创建私信表请求 16 | * 17 | * @author 程序员小白条 18 | * @from 个人博客 19 | */ 20 | @Data 21 | public class PrivateMessageAddRequest implements Serializable { 22 | 23 | /** 24 | * 发送者 ID 25 | */ 26 | private Long senderId; 27 | 28 | /** 29 | * 接收者 ID 30 | */ 31 | private Long recipientId; 32 | 33 | /** 34 | * 消息内容 35 | */ 36 | private String content; 37 | 38 | /** 39 | * 0-未阅读 1-已阅读 40 | */ 41 | private Integer alreadyRead; 42 | 43 | /** 44 | * 消息发送类型(用户发送还是管理员发送,user Or admin)枚举 45 | */ 46 | private String type; 47 | 48 | /** 49 | * 是否撤回 0-未撤回 1-已撤回 50 | */ 51 | private Integer isRecalled; 52 | 53 | 54 | 55 | private static final long serialVersionUID = 1L; 56 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/manager/model/request/SparkRequestPayload.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.manager.model.request; 2 | 3 | 4 | 5 | import com.xiaobaitiao.springbootinit.manager.model.request.function.SparkRequestFunctions; 6 | 7 | import java.io.Serializable; 8 | 9 | /** 10 | * $.payload 11 | * 12 | * @author briqt 13 | */ 14 | public class SparkRequestPayload implements Serializable { 15 | private static final long serialVersionUID = 2084163918219863102L; 16 | 17 | private SparkRequestMessage message; 18 | 19 | private SparkRequestFunctions functions; 20 | 21 | public SparkRequestPayload() { 22 | } 23 | 24 | public SparkRequestPayload(SparkRequestMessage message) { 25 | this.message = message; 26 | } 27 | 28 | public SparkRequestPayload(SparkRequestMessage message, SparkRequestFunctions functions) { 29 | this.message = message; 30 | this.functions = functions; 31 | } 32 | 33 | public SparkRequestMessage getMessage() { 34 | return message; 35 | } 36 | 37 | public void setMessage(SparkRequestMessage message) { 38 | this.message = message; 39 | } 40 | 41 | public SparkRequestFunctions getFunctions() { 42 | return functions; 43 | } 44 | 45 | public void setFunctions(SparkRequestFunctions functions) { 46 | this.functions = functions; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/manager/exception/SparkException.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.manager.exception; 2 | 3 | 4 | import com.xiaobaitiao.springbootinit.manager.constant.SparkErrorCode; 5 | 6 | /** 7 | * SparkException 8 | * 9 | * @author briqt 10 | */ 11 | public class SparkException extends RuntimeException { 12 | 13 | private static final long serialVersionUID = 3053312855506511893L; 14 | 15 | private Integer code; 16 | 17 | private String sid; 18 | 19 | public SparkException(Integer code, String message) { 20 | super(message); 21 | this.code = code; 22 | } 23 | 24 | public SparkException(Integer code, String message, Throwable t) { 25 | super(message, t); 26 | this.code = code; 27 | } 28 | 29 | public static SparkException bizFailed(Integer code) { 30 | String errorMessage = SparkErrorCode.RESPONSE_ERROR_MAP.get(code); 31 | if (null == errorMessage) { 32 | errorMessage = "未知的错误码"; 33 | } 34 | return new SparkException(code, errorMessage); 35 | } 36 | 37 | public Integer getCode() { 38 | return code; 39 | } 40 | 41 | public void setCode(Integer code) { 42 | this.code = code; 43 | } 44 | 45 | public String getSid() { 46 | return sid; 47 | } 48 | 49 | public void setSid(String sid) { 50 | this.sid = sid; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/service/PostFavourService.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.service; 2 | 3 | import com.baomidou.mybatisplus.core.conditions.Wrapper; 4 | import com.baomidou.mybatisplus.core.metadata.IPage; 5 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 6 | import com.baomidou.mybatisplus.extension.service.IService; 7 | import com.xiaobaitiao.springbootinit.model.entity.Post; 8 | import com.xiaobaitiao.springbootinit.model.entity.PostFavour; 9 | import com.xiaobaitiao.springbootinit.model.entity.User; 10 | 11 | /** 12 | * 帖子收藏服务 13 | * 14 | * @author 程序员小白条 15 | * @from 个人博客 16 | */ 17 | public interface PostFavourService extends IService { 18 | 19 | /** 20 | * 帖子收藏 21 | * 22 | * @param postId 23 | * @param loginUser 24 | * @return 25 | */ 26 | int doPostFavour(long postId, User loginUser); 27 | 28 | /** 29 | * 分页获取用户收藏的帖子列表 30 | * 31 | * @param page 32 | * @param queryWrapper 33 | * @param favourUserId 34 | * @return 35 | */ 36 | Page listFavourPostByPage(IPage page, Wrapper queryWrapper, 37 | long favourUserId); 38 | 39 | /** 40 | * 帖子收藏(内部服务) 41 | * 42 | * @param userId 43 | * @param postId 44 | * @return 45 | */ 46 | int doPostFavourInner(long userId, long postId); 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/commodityOrder/CommodityOrderQueryRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.commodityOrder; 2 | 3 | import com.xiaobaitiao.springbootinit.common.PageRequest; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | 7 | import java.io.Serializable; 8 | import java.math.BigDecimal; 9 | import java.util.List; 10 | 11 | /** 12 | * 查询商品订单表请求 13 | * 14 | * @author 程序员小白条 15 | * @from 个人博客 16 | */ 17 | @EqualsAndHashCode(callSuper = true) 18 | @Data 19 | public class CommodityOrderQueryRequest extends PageRequest implements Serializable { 20 | 21 | /** 22 | * 订单 ID 23 | */ 24 | private Long id; 25 | 26 | /** 27 | * 用户 ID 28 | */ 29 | private Long userId; 30 | /** 31 | * 联系人 32 | */ 33 | private String userName; 34 | /** 35 | * 联系电话 36 | */ 37 | private String userPhone; 38 | /** 39 | * 商品 ID 40 | */ 41 | private Long commodityId; 42 | 43 | /** 44 | * 订单备注 45 | */ 46 | private String remark; 47 | 48 | /** 49 | * 购买数量 50 | */ 51 | private Integer buyNumber; 52 | 53 | /** 54 | * 订单总支付金额 55 | */ 56 | private BigDecimal paymentAmount; 57 | 58 | /** 59 | * 0-未支付 1-已支付 60 | */ 61 | private Integer payStatus; 62 | 63 | private static final long serialVersionUID = 1L; 64 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/privateMessage/PrivateMessageEditRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.privateMessage; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import com.baomidou.mybatisplus.annotation.TableLogic; 7 | import com.fasterxml.jackson.annotation.JsonFormat; 8 | import lombok.Data; 9 | 10 | import java.io.Serializable; 11 | import java.util.Date; 12 | import java.util.List; 13 | 14 | /** 15 | * 编辑私信表请求 16 | * 17 | * @author 程序员小白条 18 | * @from 个人博客 19 | */ 20 | @Data 21 | public class PrivateMessageEditRequest implements Serializable { 22 | 23 | /** 24 | * 消息 ID 25 | */ 26 | private Long id; 27 | 28 | /** 29 | * 发送者 ID 30 | */ 31 | private Long senderId; 32 | 33 | /** 34 | * 接收者 ID 35 | */ 36 | private Long recipientId; 37 | 38 | /** 39 | * 消息内容 40 | */ 41 | private String content; 42 | 43 | /** 44 | * 0-未阅读 1-已阅读 45 | */ 46 | private Integer alreadyRead; 47 | 48 | /** 49 | * 消息发送类型(用户发送还是管理员发送,user Or admin)枚举 50 | */ 51 | private String type; 52 | 53 | /** 54 | * 是否撤回 0-未撤回 1-已撤回 55 | */ 56 | private Integer isRecalled; 57 | 58 | private static final long serialVersionUID = 1L; 59 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/privateMessage/PrivateMessageUpdateRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.privateMessage; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import com.baomidou.mybatisplus.annotation.TableLogic; 7 | import com.fasterxml.jackson.annotation.JsonFormat; 8 | import lombok.Data; 9 | 10 | import java.io.Serializable; 11 | import java.util.Date; 12 | import java.util.List; 13 | 14 | /** 15 | * 更新私信表请求 16 | * 17 | * @author 程序员小白条 18 | * @from 个人博客 19 | */ 20 | @Data 21 | public class PrivateMessageUpdateRequest implements Serializable { 22 | 23 | /** 24 | * 消息 ID 25 | */ 26 | private Long id; 27 | 28 | /** 29 | * 发送者 ID 30 | */ 31 | private Long senderId; 32 | 33 | /** 34 | * 接收者 ID 35 | */ 36 | private Long recipientId; 37 | 38 | /** 39 | * 消息内容 40 | */ 41 | private String content; 42 | 43 | /** 44 | * 0-未阅读 1-已阅读 45 | */ 46 | private Integer alreadyRead; 47 | 48 | /** 49 | * 消息发送类型(用户发送还是管理员发送,user Or admin)枚举 50 | */ 51 | private String type; 52 | 53 | /** 54 | * 是否撤回 0-未撤回 1-已撤回 55 | */ 56 | private Integer isRecalled; 57 | 58 | private static final long serialVersionUID = 1L; 59 | } -------------------------------------------------------------------------------- /src/main/resources/mapper/PrivateMessageMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | id,senderId,recipientId, 22 | content,alreadyRead,`type`, 23 | isRecalled,createTime,updateTime, 24 | isDelete 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/entity/UserCommodityFavorites.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.*; 4 | import com.fasterxml.jackson.annotation.JsonFormat; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | import java.util.Date; 9 | 10 | /** 11 | * 12 | * @TableName user_commodity_favorites 13 | */ 14 | @TableName(value ="user_commodity_favorites") 15 | @Data 16 | public class UserCommodityFavorites implements Serializable { 17 | /** 18 | * 19 | */ 20 | @TableId(type = IdType.ASSIGN_ID) 21 | private Long id; 22 | 23 | /** 24 | * 用户 ID 25 | */ 26 | private Long userId; 27 | 28 | /** 29 | * 商品 ID 30 | */ 31 | private Long commodityId; 32 | 33 | /** 34 | * 1-正常收藏 0-取消收藏 35 | */ 36 | private Integer status; 37 | 38 | /** 39 | * 用户备注 40 | */ 41 | private String remark; 42 | 43 | /** 44 | * 创建时间 45 | */ 46 | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") 47 | private Date createTime; 48 | 49 | /** 50 | * 更新时间 51 | */ 52 | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") 53 | private Date updateTime; 54 | 55 | /** 56 | * 是否删除 57 | */ 58 | @TableLogic 59 | private Integer isDelete; 60 | 61 | @TableField(exist = false) 62 | private static final long serialVersionUID = 1L; 63 | } -------------------------------------------------------------------------------- /src/main/resources/mapper/CommodityOrderMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | id,userId,commodityId, 22 | remark,buyNumber,paymentAmount, 23 | payStatus,createTime,updateTime, 24 | isDelete 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/config/RedisConfig.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.config; 2 | 3 | import org.springframework.context.annotation.Bean; 4 | import org.springframework.context.annotation.Configuration; 5 | import org.springframework.data.redis.connection.RedisConnectionFactory; 6 | import org.springframework.data.redis.core.RedisTemplate; 7 | import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; 8 | import org.springframework.data.redis.serializer.RedisSerializer; 9 | 10 | //@Configuration 11 | public class RedisConfig { 12 | // 因为用到了jsonRedisSerializer,所以要导入jackson依赖 13 | @Bean 14 | public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory){ 15 | // 创建RedisTemplate对象 16 | RedisTemplate template = new RedisTemplate<>(); 17 | // 设置连接工厂 18 | template.setConnectionFactory(connectionFactory); 19 | // 创建JSON序列化工具 20 | GenericJackson2JsonRedisSerializer jsonRedisSerializer = 21 | new GenericJackson2JsonRedisSerializer(); 22 | // 设置Key的序列化 23 | template.setKeySerializer(RedisSerializer.string()); 24 | template.setHashKeySerializer(RedisSerializer.string()); 25 | // 设置Value的序列化 26 | template.setValueSerializer(jsonRedisSerializer); 27 | template.setHashValueSerializer(jsonRedisSerializer); 28 | // 返回 29 | return template; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/barrage/BarrageQueryRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.barrage; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import com.baomidou.mybatisplus.annotation.TableLogic; 7 | import com.xiaobaitiao.springbootinit.common.PageRequest; 8 | import lombok.Data; 9 | import lombok.EqualsAndHashCode; 10 | 11 | import java.io.Serializable; 12 | import java.util.Date; 13 | import java.util.List; 14 | 15 | /** 16 | * 查询弹幕请求 17 | * 18 | * @author 程序员小白条 19 | * @from 个人博客 20 | */ 21 | @EqualsAndHashCode(callSuper = true) 22 | @Data 23 | public class BarrageQueryRequest extends PageRequest implements Serializable { 24 | 25 | /** 26 | * id 27 | */ 28 | private Long id; 29 | 30 | /** 31 | * 弹幕文本 32 | */ 33 | private String message; 34 | 35 | /** 36 | * 用户头像 37 | */ 38 | private String userAvatar; 39 | 40 | /** 41 | * 用户id 42 | */ 43 | private Long userId; 44 | 45 | /** 46 | * 是否精选(默认0,精选为1) 47 | */ 48 | private Integer isSelected; 49 | 50 | /** 51 | * 创建时间 52 | */ 53 | private Date createTime; 54 | 55 | /** 56 | * 更新时间 57 | */ 58 | private Date updateTime; 59 | 60 | 61 | private static final long serialVersionUID = 1L; 62 | } -------------------------------------------------------------------------------- /src/test/java/com/xiaobaitiao/springbootinit/service/PostFavourServiceTest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.service; 2 | 3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 4 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 5 | import com.xiaobaitiao.springbootinit.model.entity.Post; 6 | import com.xiaobaitiao.springbootinit.model.entity.User; 7 | import javax.annotation.Resource; 8 | import org.junit.jupiter.api.Assertions; 9 | import org.junit.jupiter.api.BeforeAll; 10 | import org.junit.jupiter.api.Test; 11 | import org.springframework.boot.test.context.SpringBootTest; 12 | 13 | /** 14 | * 帖子收藏服务测试 15 | * 16 | * @author 程序员小白条 17 | * @from 个人博客 18 | */ 19 | @SpringBootTest 20 | class PostFavourServiceTest { 21 | 22 | @Resource 23 | private PostFavourService postFavourService; 24 | 25 | private static final User loginUser = new User(); 26 | 27 | @BeforeAll 28 | static void setUp() { 29 | loginUser.setId(1L); 30 | } 31 | 32 | @Test 33 | void doPostFavour() { 34 | int i = postFavourService.doPostFavour(1L, loginUser); 35 | Assertions.assertTrue(i >= 0); 36 | } 37 | 38 | @Test 39 | void listFavourPostByPage() { 40 | QueryWrapper postQueryWrapper = new QueryWrapper<>(); 41 | postQueryWrapper.eq("id", 1L); 42 | postFavourService.listFavourPostByPage(Page.of(0, 1), postQueryWrapper, loginUser.getId()); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/manager/model/response/SparkResponseHeader.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.manager.model.response; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * $.header 7 | * 8 | * @author briqt 9 | */ 10 | public class SparkResponseHeader implements Serializable { 11 | private static final long serialVersionUID = -2828057068263022569L; 12 | 13 | /** 14 | * 错误码,0表示正常,非0表示出错;详细释义可在接口说明文档最后的错误码说明了解 15 | */ 16 | private Integer code; 17 | 18 | /** 19 | * 会话状态,取值为[0,1,2];0代表首次结果;1代表中间结果;2代表最后一个结果 20 | */ 21 | private Integer status; 22 | 23 | /** 24 | * 会话是否成功的描述信息 25 | */ 26 | private String message; 27 | 28 | /** 29 | * 会话的唯一id,用于讯飞技术人员查询服务端会话日志使用,出现调用错误时建议留存该字段 30 | */ 31 | private String sid; 32 | 33 | public Integer getCode() { 34 | return code; 35 | } 36 | 37 | public void setCode(Integer code) { 38 | this.code = code; 39 | } 40 | 41 | public Integer getStatus() { 42 | return status; 43 | } 44 | 45 | public void setStatus(Integer status) { 46 | this.status = status; 47 | } 48 | 49 | public String getMessage() { 50 | return message; 51 | } 52 | 53 | public void setMessage(String message) { 54 | this.message = message; 55 | } 56 | 57 | public String getSid() { 58 | return sid; 59 | } 60 | 61 | public void setSid(String sid) { 62 | this.sid = sid; 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/commodity/CommodityAddRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.commodity; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.math.BigDecimal; 7 | import java.util.Date; 8 | import java.util.List; 9 | 10 | /** 11 | * 创建商品表请求 12 | * 13 | * @author 程序员小白条 14 | * @from 个人博客 15 | */ 16 | @Data 17 | public class CommodityAddRequest implements Serializable { 18 | /** 19 | * 商品名称 20 | */ 21 | private String commodityName; 22 | 23 | /** 24 | * 商品简介 25 | */ 26 | private String commodityDescription; 27 | 28 | /** 29 | * 商品封面图 30 | */ 31 | private String commodityAvatar; 32 | 33 | /** 34 | * 商品新旧程度(例如 9成新) 35 | */ 36 | private String degree; 37 | 38 | /** 39 | * 商品分类 ID 40 | */ 41 | private Long commodityTypeId; 42 | 43 | /** 44 | * 管理员 ID (某人创建该商品) 45 | */ 46 | private Long adminId; 47 | 48 | /** 49 | * 是否上架(默认0未上架,1已上架) 50 | */ 51 | private Integer isListed; 52 | 53 | /** 54 | * 商品数量(默认0) 55 | */ 56 | private Integer commodityInventory; 57 | 58 | /** 59 | * 商品价格 60 | */ 61 | private BigDecimal price; 62 | 63 | /** 64 | * 商品浏览量 65 | */ 66 | private Integer viewNum; 67 | 68 | /** 69 | * 商品收藏量 70 | */ 71 | private Integer favourNum; 72 | 73 | private static final long serialVersionUID = 1L; 74 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/service/impl/CaptchaCacheServiceRedisImpl.java: -------------------------------------------------------------------------------- 1 | //package com.xiaobaitiao.springbootinit.service.impl; 2 | // 3 | //import com.anji.captcha.service.CaptchaCacheService; 4 | //import org.springframework.data.redis.core.StringRedisTemplate; 5 | // 6 | //import java.util.concurrent.TimeUnit; 7 | // 8 | //public class CaptchaCacheServiceRedisImpl implements CaptchaCacheService { 9 | // 10 | // @Override 11 | // public String type() { 12 | // return "redis"; 13 | // } 14 | // 15 | // public void setStringRedisTemplate(StringRedisTemplate stringRedisTemplate) { 16 | // this.stringRedisTemplate = stringRedisTemplate; 17 | // } 18 | // 19 | // private StringRedisTemplate stringRedisTemplate; 20 | // 21 | // @Override 22 | // public void set(String key, String value, long expiresInSeconds) { 23 | // stringRedisTemplate.opsForValue().set(key, value, expiresInSeconds, TimeUnit.SECONDS); 24 | // } 25 | // 26 | // @Override 27 | // public boolean exists(String key) { 28 | // return Boolean.TRUE.equals(stringRedisTemplate.hasKey(key)); 29 | // } 30 | // 31 | // @Override 32 | // public void delete(String key) { 33 | // stringRedisTemplate.delete(key); 34 | // } 35 | // 36 | // @Override 37 | // public String get(String key) { 38 | // return stringRedisTemplate.opsForValue().get(key); 39 | // } 40 | // 41 | // @Override 42 | // public Long increment(String key, long val) { 43 | // return stringRedisTemplate.opsForValue().increment(key,val); 44 | // } 45 | //} -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/config/CosClientConfig.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.config; 2 | 3 | import com.qcloud.cos.COSClient; 4 | import com.qcloud.cos.ClientConfig; 5 | import com.qcloud.cos.auth.BasicCOSCredentials; 6 | import com.qcloud.cos.auth.COSCredentials; 7 | import com.qcloud.cos.region.Region; 8 | import lombok.Data; 9 | import org.springframework.boot.context.properties.ConfigurationProperties; 10 | import org.springframework.context.annotation.Bean; 11 | import org.springframework.context.annotation.Configuration; 12 | 13 | /** 14 | * 腾讯云对象存储客户端 15 | * 16 | * @author 程序员小白条 17 | * @from 个人博客 18 | */ 19 | @Configuration 20 | @ConfigurationProperties(prefix = "cos.client") 21 | @Data 22 | public class CosClientConfig { 23 | 24 | /** 25 | * accessKey 26 | */ 27 | private String accessKey; 28 | 29 | /** 30 | * secretKey 31 | */ 32 | private String secretKey; 33 | 34 | /** 35 | * 区域 36 | */ 37 | private String region; 38 | 39 | /** 40 | * 桶名 41 | */ 42 | private String bucket; 43 | 44 | @Bean 45 | public COSClient cosClient() { 46 | // 初始化用户身份信息(secretId, secretKey) 47 | COSCredentials cred = new BasicCOSCredentials(accessKey, secretKey); 48 | // 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224 49 | ClientConfig clientConfig = new ClientConfig(new Region(region)); 50 | // 生成cos客户端 51 | return new COSClient(cred, clientConfig); 52 | } 53 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/manager/CosManager.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.manager; 2 | 3 | import com.qcloud.cos.COSClient; 4 | import com.qcloud.cos.model.PutObjectRequest; 5 | import com.qcloud.cos.model.PutObjectResult; 6 | import com.xiaobaitiao.springbootinit.config.CosClientConfig; 7 | import java.io.File; 8 | import javax.annotation.Resource; 9 | import org.springframework.stereotype.Component; 10 | 11 | /** 12 | * Cos 对象存储操作 13 | * 14 | * @author 程序员小白条 15 | * @from 个人博客 16 | */ 17 | @Component 18 | public class CosManager { 19 | 20 | @Resource 21 | private CosClientConfig cosClientConfig; 22 | 23 | @Resource 24 | private COSClient cosClient; 25 | 26 | /** 27 | * 上传对象 28 | * 29 | * @param key 唯一键 30 | * @param localFilePath 本地文件路径 31 | * @return 32 | */ 33 | public PutObjectResult putObject(String key, String localFilePath) { 34 | PutObjectRequest putObjectRequest = new PutObjectRequest(cosClientConfig.getBucket(), key, 35 | new File(localFilePath)); 36 | return cosClient.putObject(putObjectRequest); 37 | } 38 | 39 | /** 40 | * 上传对象 41 | * 42 | * @param key 唯一键 43 | * @param file 文件 44 | * @return 45 | */ 46 | public PutObjectResult putObject(String key, File file) { 47 | PutObjectRequest putObjectRequest = new PutObjectRequest(cosClientConfig.getBucket(), key, 48 | file); 49 | return cosClient.putObject(putObjectRequest); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/service/NoticeService.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.service; 2 | 3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 4 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 5 | import com.baomidou.mybatisplus.extension.service.IService; 6 | import com.xiaobaitiao.springbootinit.model.dto.notice.NoticeQueryRequest; 7 | import com.xiaobaitiao.springbootinit.model.entity.Notice; 8 | import com.xiaobaitiao.springbootinit.model.vo.NoticeVO; 9 | 10 | import javax.servlet.http.HttpServletRequest; 11 | 12 | /** 13 | * 公告服务 14 | * 15 | * @author 程序员小白条 16 | * @from 个人博客 17 | */ 18 | public interface NoticeService extends IService { 19 | 20 | /** 21 | * 校验数据 22 | * 23 | * @param notice 24 | * @param add 对创建的数据进行校验 25 | */ 26 | void validNotice(Notice notice, boolean add); 27 | 28 | /** 29 | * 获取查询条件 30 | * 31 | * @param noticeQueryRequest 32 | * @return 33 | */ 34 | QueryWrapper getQueryWrapper(NoticeQueryRequest noticeQueryRequest); 35 | 36 | /** 37 | * 获取公告封装 38 | * 39 | * @param notice 40 | * @param request 41 | * @return 42 | */ 43 | NoticeVO getNoticeVO(Notice notice, HttpServletRequest request); 44 | 45 | /** 46 | * 分页获取公告封装 47 | * 48 | * @param noticePage 49 | * @param request 50 | * @return 51 | */ 52 | Page getNoticeVOPage(Page noticePage, HttpServletRequest request); 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/common/ResultUtils.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.common; 2 | 3 | import java.util.HashMap; 4 | 5 | /** 6 | * 返回工具类 7 | * 8 | * @author 程序员小白条 9 | * @from 个人博客 10 | */ 11 | public class ResultUtils { 12 | 13 | /** 14 | * 成功 15 | * 16 | * @param data 17 | * @param 18 | * @return 19 | */ 20 | public static BaseResponse success(T data) { 21 | return new BaseResponse<>(200, data, "ok"); 22 | } 23 | 24 | /** 25 | * 失败 26 | * 27 | * @param errorCode 28 | * @return 29 | */ 30 | public static BaseResponse error(ErrorCode errorCode) { 31 | return new BaseResponse<>(errorCode); 32 | } 33 | 34 | /** 35 | * 失败 36 | * 37 | * @param code 38 | * @param message 39 | * @return 40 | */ 41 | public static BaseResponse error(int code, String message) { 42 | return new BaseResponse(code, null, message); 43 | } 44 | 45 | /** 46 | * 失败 47 | * 48 | * @param errorCode 49 | * @return 50 | */ 51 | public static BaseResponse error(ErrorCode errorCode, String message) { 52 | return new BaseResponse(errorCode.getCode(), null, message); 53 | } 54 | /** 55 | * 成功并添加动态参数 56 | * @param data 57 | * @return 58 | * @param 59 | */ 60 | public static BaseResponse successDynamic(T data, HashMap hashMap) { 61 | return new BaseResponse<>(200, data, "ok",hashMap); 62 | } 63 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/enums/FileUploadBizEnum.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.enums; 2 | 3 | import java.util.Arrays; 4 | import java.util.List; 5 | import java.util.stream.Collectors; 6 | import org.apache.commons.lang3.ObjectUtils; 7 | 8 | /** 9 | * 文件上传业务类型枚举 10 | * 11 | * @author 程序员小白条 12 | * @from 个人博客 13 | */ 14 | public enum FileUploadBizEnum { 15 | 16 | USER_AVATAR("用户头像", "user_avatar"); 17 | 18 | private final String text; 19 | 20 | private final String value; 21 | 22 | FileUploadBizEnum(String text, String value) { 23 | this.text = text; 24 | this.value = value; 25 | } 26 | 27 | /** 28 | * 获取值列表 29 | * 30 | * @return 31 | */ 32 | public static List getValues() { 33 | return Arrays.stream(values()).map(item -> item.value).collect(Collectors.toList()); 34 | } 35 | 36 | /** 37 | * 根据 value 获取枚举 38 | * 39 | * @param value 40 | * @return 41 | */ 42 | public static FileUploadBizEnum getEnumByValue(String value) { 43 | if (ObjectUtils.isEmpty(value)) { 44 | return null; 45 | } 46 | for (FileUploadBizEnum anEnum : FileUploadBizEnum.values()) { 47 | if (anEnum.value.equals(value)) { 48 | return anEnum; 49 | } 50 | } 51 | return null; 52 | } 53 | 54 | public String getValue() { 55 | return value; 56 | } 57 | 58 | public String getText() { 59 | return text; 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/service/BarrageService.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.service; 2 | 3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 4 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 5 | import com.baomidou.mybatisplus.extension.service.IService; 6 | import com.xiaobaitiao.springbootinit.model.dto.barrage.BarrageQueryRequest; 7 | import com.xiaobaitiao.springbootinit.model.entity.Barrage; 8 | import com.xiaobaitiao.springbootinit.model.vo.BarrageVO; 9 | 10 | import javax.servlet.http.HttpServletRequest; 11 | 12 | /** 13 | * 弹幕服务 14 | * 15 | * @author 程序员小白条 16 | * @from 个人博客 17 | */ 18 | public interface BarrageService extends IService { 19 | 20 | /** 21 | * 校验数据 22 | * 23 | * @param barrage 24 | * @param add 对创建的数据进行校验 25 | */ 26 | void validBarrage(Barrage barrage, boolean add); 27 | 28 | /** 29 | * 获取查询条件 30 | * 31 | * @param barrageQueryRequest 32 | * @return 33 | */ 34 | QueryWrapper getQueryWrapper(BarrageQueryRequest barrageQueryRequest); 35 | 36 | /** 37 | * 获取弹幕封装 38 | * 39 | * @param barrage 40 | * @param request 41 | * @return 42 | */ 43 | BarrageVO getBarrageVO(Barrage barrage, HttpServletRequest request); 44 | 45 | /** 46 | * 分页获取弹幕封装 47 | * 48 | * @param barragePage 49 | * @param request 50 | * @return 51 | */ 52 | Page getBarrageVOPage(Page barragePage, HttpServletRequest request); 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/privateMessage/PrivateMessageQueryRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.privateMessage; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import com.baomidou.mybatisplus.annotation.TableLogic; 7 | import com.fasterxml.jackson.annotation.JsonFormat; 8 | import com.xiaobaitiao.springbootinit.common.PageRequest; 9 | import lombok.Data; 10 | import lombok.EqualsAndHashCode; 11 | 12 | import java.io.Serializable; 13 | import java.util.Date; 14 | import java.util.List; 15 | 16 | /** 17 | * 查询私信表请求 18 | * 19 | * @author 程序员小白条 20 | * @from 个人博客 21 | */ 22 | @EqualsAndHashCode(callSuper = true) 23 | @Data 24 | public class PrivateMessageQueryRequest extends PageRequest implements Serializable { 25 | 26 | /** 27 | * 消息 ID 28 | */ 29 | private Long id; 30 | 31 | /** 32 | * 发送者 ID 33 | */ 34 | private Long senderId; 35 | 36 | /** 37 | * 接收者 ID 38 | */ 39 | private Long recipientId; 40 | 41 | /** 42 | * 消息内容 43 | */ 44 | private String content; 45 | 46 | /** 47 | * 0-未阅读 1-已阅读 48 | */ 49 | private Integer alreadyRead; 50 | 51 | /** 52 | * 消息发送类型(用户发送还是管理员发送,user Or admin)枚举 53 | */ 54 | private String type; 55 | 56 | /** 57 | * 是否撤回 0-未撤回 1-已撤回 58 | */ 59 | private Integer isRecalled; 60 | 61 | 62 | private static final long serialVersionUID = 1L; 63 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/enums/UserRoleEnum.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.enums; 2 | 3 | import java.util.Arrays; 4 | import java.util.List; 5 | import java.util.stream.Collectors; 6 | import org.apache.commons.lang3.ObjectUtils; 7 | 8 | /** 9 | * 用户角色枚举 10 | * 11 | * @author 程序员小白条 12 | * @from 个人博客 13 | */ 14 | public enum UserRoleEnum { 15 | 16 | USER("用户", "user"), 17 | ADMIN("管理员", "admin"), 18 | BAN("被封号", "ban"); 19 | 20 | private final String text; 21 | 22 | private final String value; 23 | 24 | UserRoleEnum(String text, String value) { 25 | this.text = text; 26 | this.value = value; 27 | } 28 | 29 | /** 30 | * 获取值列表 31 | * 32 | * @return 33 | */ 34 | public static List getValues() { 35 | return Arrays.stream(values()).map(item -> item.value).collect(Collectors.toList()); 36 | } 37 | 38 | /** 39 | * 根据 value 获取枚举 40 | * 41 | * @param value 42 | * @return 43 | */ 44 | public static UserRoleEnum getEnumByValue(String value) { 45 | if (ObjectUtils.isEmpty(value)) { 46 | return null; 47 | } 48 | for (UserRoleEnum anEnum : UserRoleEnum.values()) { 49 | if (anEnum.value.equals(value)) { 50 | return anEnum; 51 | } 52 | } 53 | return null; 54 | } 55 | 56 | public String getValue() { 57 | return value; 58 | } 59 | 60 | public String getText() { 61 | return text; 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/commodity/CommodityEditRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.commodity; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.math.BigDecimal; 7 | import java.util.Date; 8 | import java.util.List; 9 | 10 | /** 11 | * 编辑商品表请求 12 | * 13 | * @author 程序员小白条 14 | * @from 个人博客 15 | */ 16 | @Data 17 | public class CommodityEditRequest implements Serializable { 18 | 19 | 20 | /** 21 | * 商品 ID 22 | */ 23 | private Long id; 24 | 25 | /** 26 | * 商品名称 27 | */ 28 | private String commodityName; 29 | 30 | /** 31 | * 商品简介 32 | */ 33 | private String commodityDescription; 34 | 35 | /** 36 | * 商品封面图 37 | */ 38 | private String commodityAvatar; 39 | 40 | /** 41 | * 商品新旧程度(例如 9成新) 42 | */ 43 | private String degree; 44 | 45 | /** 46 | * 商品分类 ID 47 | */ 48 | private Long commodityTypeId; 49 | 50 | /** 51 | * 管理员 ID (某人创建该商品) 52 | */ 53 | private Long adminId; 54 | 55 | /** 56 | * 是否上架(默认0未上架,1已上架) 57 | */ 58 | private Integer isListed; 59 | 60 | /** 61 | * 商品数量(默认0) 62 | */ 63 | private Integer commodityInventory; 64 | 65 | /** 66 | * 商品价格 67 | */ 68 | private BigDecimal price; 69 | 70 | /** 71 | * 商品浏览量 72 | */ 73 | private Integer viewNum; 74 | 75 | /** 76 | * 商品收藏量 77 | */ 78 | private Integer favourNum; 79 | 80 | private static final long serialVersionUID = 1L; 81 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/config/WxOpenConfig.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.config; 2 | 3 | import lombok.Data; 4 | import lombok.extern.slf4j.Slf4j; 5 | import me.chanjar.weixin.mp.api.WxMpService; 6 | import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl; 7 | import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl; 8 | import org.springframework.boot.context.properties.ConfigurationProperties; 9 | import org.springframework.context.annotation.Configuration; 10 | 11 | /** 12 | * 微信开放平台配置 13 | * 14 | * @author 程序员小白条 15 | * @from 个人博客 16 | */ 17 | @Slf4j 18 | @Configuration 19 | @ConfigurationProperties(prefix = "wx.open") 20 | @Data 21 | public class WxOpenConfig { 22 | 23 | private String appId; 24 | 25 | private String appSecret; 26 | 27 | private WxMpService wxMpService; 28 | 29 | /** 30 | * 单例模式(不用 @Bean 是为了防止和公众号的 service 冲突) 31 | * 32 | * @return 33 | */ 34 | public WxMpService getWxMpService() { 35 | if (wxMpService != null) { 36 | return wxMpService; 37 | } 38 | synchronized (this) { 39 | if (wxMpService != null) { 40 | return wxMpService; 41 | } 42 | WxMpDefaultConfigImpl config = new WxMpDefaultConfigImpl(); 43 | config.setAppId(appId); 44 | config.setSecret(appSecret); 45 | WxMpService service = new WxMpServiceImpl(); 46 | service.setWxMpConfigStorage(config); 47 | wxMpService = service; 48 | return wxMpService; 49 | } 50 | } 51 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/commodity/CommodityUpdateRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.commodity; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.math.BigDecimal; 7 | import java.util.Date; 8 | import java.util.List; 9 | 10 | /** 11 | * 更新商品表请求 12 | * 13 | * @author 程序员小白条 14 | * @from 个人博客 15 | */ 16 | @Data 17 | public class CommodityUpdateRequest implements Serializable { 18 | 19 | /** 20 | * 商品 ID 21 | */ 22 | private Long id; 23 | 24 | /** 25 | * 商品名称 26 | */ 27 | private String commodityName; 28 | 29 | /** 30 | * 商品简介 31 | */ 32 | private String commodityDescription; 33 | 34 | /** 35 | * 商品封面图 36 | */ 37 | private String commodityAvatar; 38 | 39 | /** 40 | * 商品新旧程度(例如 9成新) 41 | */ 42 | private String degree; 43 | 44 | /** 45 | * 商品分类 ID 46 | */ 47 | private Long commodityTypeId; 48 | 49 | /** 50 | * 管理员 ID (某人创建该商品) 51 | */ 52 | private Long adminId; 53 | 54 | /** 55 | * 是否上架(默认0未上架,1已上架) 56 | */ 57 | private Integer isListed; 58 | 59 | /** 60 | * 商品数量(默认0) 61 | */ 62 | private Integer commodityInventory; 63 | 64 | /** 65 | * 商品价格 66 | */ 67 | private BigDecimal price; 68 | 69 | /** 70 | * 商品浏览量 71 | */ 72 | private Integer viewNum; 73 | 74 | /** 75 | * 商品收藏量 76 | */ 77 | private Integer favourNum; 78 | 79 | 80 | 81 | private static final long serialVersionUID = 1L; 82 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/manager/model/response/SparkResponseFunctionCall.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.manager.model.response; 2 | 3 | import com.fasterxml.jackson.annotation.JsonInclude; 4 | import com.fasterxml.jackson.core.JsonProcessingException; 5 | import com.fasterxml.jackson.core.type.TypeReference; 6 | import com.fasterxml.jackson.databind.ObjectMapper; 7 | 8 | import java.io.Serializable; 9 | import java.util.Map; 10 | 11 | /** 12 | * SparkResponseFunctionCall 13 | * 14 | * @author briqt 15 | * @date 2023/11/25 16 | */ 17 | public class SparkResponseFunctionCall implements Serializable { 18 | private static final long serialVersionUID = -1586729944571910329L; 19 | private final ObjectMapper objectMapper = new ObjectMapper(); 20 | 21 | { 22 | objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); 23 | } 24 | 25 | private String arguments; 26 | 27 | private String name; 28 | 29 | public String getArguments() { 30 | return arguments; 31 | } 32 | 33 | public void setArguments(String arguments) { 34 | this.arguments = arguments; 35 | } 36 | 37 | public String getName() { 38 | return name; 39 | } 40 | 41 | public void setName(String name) { 42 | this.name = name; 43 | } 44 | 45 | public Map getMapArguments() { 46 | try { 47 | return objectMapper.readValue(arguments, new TypeReference>() { 48 | }); 49 | } catch (JsonProcessingException e) { 50 | throw new RuntimeException(e); 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/entity/CommodityOrder.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.*; 4 | import com.fasterxml.jackson.annotation.JsonFormat; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | import java.math.BigDecimal; 9 | import java.util.Date; 10 | 11 | /** 12 | * 13 | * @TableName commodity_order 14 | */ 15 | @TableName(value ="commodity_order") 16 | @Data 17 | public class CommodityOrder implements Serializable { 18 | /** 19 | * 订单 ID 20 | */ 21 | @TableId(type = IdType.ASSIGN_ID) 22 | private Long id; 23 | 24 | /** 25 | * 用户 ID 26 | */ 27 | private Long userId; 28 | 29 | /** 30 | * 商品 ID 31 | */ 32 | private Long commodityId; 33 | 34 | /** 35 | * 订单备注 36 | */ 37 | private String remark; 38 | 39 | /** 40 | * 购买数量 41 | */ 42 | private Integer buyNumber; 43 | 44 | /** 45 | * 订单总支付金额 46 | */ 47 | private BigDecimal paymentAmount; 48 | 49 | /** 50 | * 0-未支付 1-已支付 51 | */ 52 | private Integer payStatus; 53 | 54 | /** 55 | * 创建时间 56 | */ 57 | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") 58 | private Date createTime; 59 | 60 | /** 61 | * 更新时间 62 | */ 63 | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") 64 | private Date updateTime; 65 | 66 | /** 67 | * 是否删除 68 | */ 69 | @TableLogic 70 | private Integer isDelete; 71 | 72 | @TableField(exist = false) 73 | private static final long serialVersionUID = 1L; 74 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/entity/PrivateMessage.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.*; 4 | import com.fasterxml.jackson.annotation.JsonFormat; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | import java.util.Date; 9 | 10 | /** 11 | * 12 | * @TableName private_message 13 | */ 14 | @TableName(value ="private_message") 15 | @Data 16 | public class PrivateMessage implements Serializable { 17 | /** 18 | * 消息 ID 19 | */ 20 | @TableId(type = IdType.ASSIGN_ID) 21 | private Long id; 22 | 23 | /** 24 | * 发送者 ID 25 | */ 26 | private Long senderId; 27 | 28 | /** 29 | * 接收者 ID 30 | */ 31 | private Long recipientId; 32 | 33 | /** 34 | * 消息内容 35 | */ 36 | private String content; 37 | 38 | /** 39 | * 0-未阅读 1-已阅读 40 | */ 41 | private Integer alreadyRead; 42 | 43 | /** 44 | * 消息发送类型(用户发送还是管理员发送,user Or admin)枚举 45 | */ 46 | private String type; 47 | 48 | /** 49 | * 是否撤回 0-未撤回 1-已撤回 50 | */ 51 | private Integer isRecalled; 52 | 53 | /** 54 | * 创建时间 55 | */ 56 | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") 57 | private Date createTime; 58 | 59 | /** 60 | * 更新时间 61 | */ 62 | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") 63 | private Date updateTime; 64 | 65 | /** 66 | * 是否删除 67 | */ 68 | @TableLogic 69 | private Integer isDelete; 70 | 71 | @TableField(exist = false) 72 | private static final long serialVersionUID = 1L; 73 | } -------------------------------------------------------------------------------- /src/main/resources/mapper/PostMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | id,title,content,tags, 24 | thumbNum,favourNum,userId, 25 | createTime,updateTime,isDelete 26 | 27 | 28 | 33 | 34 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/dto/commodity/CommodityQueryRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.dto.commodity; 2 | 3 | import com.xiaobaitiao.springbootinit.common.PageRequest; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | 7 | import java.io.Serializable; 8 | import java.math.BigDecimal; 9 | import java.util.Date; 10 | import java.util.List; 11 | 12 | /** 13 | * 查询商品表请求 14 | * 15 | * @author 程序员小白条 16 | * @from 个人博客 17 | */ 18 | @EqualsAndHashCode(callSuper = true) 19 | @Data 20 | public class CommodityQueryRequest extends PageRequest implements Serializable { 21 | 22 | /** 23 | * 商品 ID 24 | */ 25 | private Long id; 26 | 27 | /** 28 | * 商品名称 29 | */ 30 | private String commodityName; 31 | 32 | /** 33 | * 商品简介 34 | */ 35 | private String commodityDescription; 36 | 37 | /** 38 | * 商品新旧程度(例如 9成新) 39 | */ 40 | private String degree; 41 | 42 | /** 43 | * 商品分类 ID 44 | */ 45 | private Long commodityTypeId; 46 | 47 | /** 48 | * 管理员 ID (某人创建该商品) 49 | */ 50 | private Long adminId; 51 | 52 | /** 53 | * 是否上架(默认0未上架,1已上架) 54 | */ 55 | private Integer isListed; 56 | 57 | /** 58 | * 商品数量(默认0) 59 | */ 60 | private Integer commodityInventory; 61 | 62 | /** 63 | * 商品价格 64 | */ 65 | private BigDecimal price; 66 | 67 | /** 68 | * 商品浏览量 69 | */ 70 | private Integer viewNum; 71 | 72 | /** 73 | * 商品收藏量 74 | */ 75 | private Integer favourNum; 76 | 77 | private static final long serialVersionUID = 1L; 78 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/service/PostService.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.service; 2 | 3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 4 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 5 | import com.baomidou.mybatisplus.extension.service.IService; 6 | import com.xiaobaitiao.springbootinit.model.dto.post.PostQueryRequest; 7 | import com.xiaobaitiao.springbootinit.model.entity.Post; 8 | import com.xiaobaitiao.springbootinit.model.vo.PostVO; 9 | import javax.servlet.http.HttpServletRequest; 10 | 11 | /** 12 | * 帖子服务 13 | * 14 | * @author 程序员小白条 15 | * @from 个人博客 16 | */ 17 | public interface PostService extends IService { 18 | 19 | /** 20 | * 校验 21 | * 22 | * @param post 23 | * @param add 24 | */ 25 | void validPost(Post post, boolean add); 26 | 27 | /** 28 | * 获取查询条件 29 | * 30 | * @param postQueryRequest 31 | * @return 32 | */ 33 | QueryWrapper getQueryWrapper(PostQueryRequest postQueryRequest); 34 | 35 | /** 36 | * 从 ES 查询 37 | * 38 | * @param postQueryRequest 39 | * @return 40 | */ 41 | Page searchFromEs(PostQueryRequest postQueryRequest); 42 | 43 | /** 44 | * 获取帖子封装 45 | * 46 | * @param post 47 | * @param request 48 | * @return 49 | */ 50 | PostVO getPostVO(Post post, HttpServletRequest request); 51 | 52 | /** 53 | * 分页获取帖子封装 54 | * 55 | * @param postPage 56 | * @param request 57 | * @return 58 | */ 59 | Page getPostVOPage(Page postPage, HttpServletRequest request); 60 | } 61 | -------------------------------------------------------------------------------- /src/main/resources/templates/TemplateService.java.ftl: -------------------------------------------------------------------------------- 1 | package ${packageName}.service; 2 | 3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 4 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 5 | import com.baomidou.mybatisplus.extension.service.IService; 6 | import ${packageName}.model.dto.${dataKey}.${upperDataKey}QueryRequest; 7 | import ${packageName}.model.entity.${upperDataKey}; 8 | import ${packageName}.model.vo.${upperDataKey}VO; 9 | 10 | import javax.servlet.http.HttpServletRequest; 11 | 12 | /** 13 | * ${dataName}服务 14 | * 15 | * @author 程序员小白条 16 | * @from 个人博客 17 | */ 18 | public interface ${upperDataKey}Service extends IService<${upperDataKey}> { 19 | 20 | /** 21 | * 校验数据 22 | * 23 | * @param ${dataKey} 24 | * @param add 对创建的数据进行校验 25 | */ 26 | void valid${upperDataKey}(${upperDataKey} ${dataKey}, boolean add); 27 | 28 | /** 29 | * 获取查询条件 30 | * 31 | * @param ${dataKey}QueryRequest 32 | * @return 33 | */ 34 | QueryWrapper<${upperDataKey}> getQueryWrapper(${upperDataKey}QueryRequest ${dataKey}QueryRequest); 35 | 36 | /** 37 | * 获取${dataName}封装 38 | * 39 | * @param ${dataKey} 40 | * @param request 41 | * @return 42 | */ 43 | ${upperDataKey}VO get${upperDataKey}VO(${upperDataKey} ${dataKey}, HttpServletRequest request); 44 | 45 | /** 46 | * 分页获取${dataName}封装 47 | * 48 | * @param ${dataKey}Page 49 | * @param request 50 | * @return 51 | */ 52 | Page<${upperDataKey}VO> get${upperDataKey}VOPage(Page<${upperDataKey}> ${dataKey}Page, HttpServletRequest request); 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/utils/SpringContextUtils.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.utils; 2 | 3 | import org.jetbrains.annotations.NotNull; 4 | import org.springframework.beans.BeansException; 5 | import org.springframework.context.ApplicationContext; 6 | import org.springframework.context.ApplicationContextAware; 7 | import org.springframework.stereotype.Component; 8 | 9 | /** 10 | * Spring 上下文获取工具 11 | * 12 | * @author 程序员小白条 13 | * @from 个人博客 14 | */ 15 | @Component 16 | public class SpringContextUtils implements ApplicationContextAware { 17 | 18 | private static ApplicationContext applicationContext; 19 | 20 | @Override 21 | public void setApplicationContext(@NotNull ApplicationContext applicationContext) throws BeansException { 22 | SpringContextUtils.applicationContext = applicationContext; 23 | } 24 | 25 | /** 26 | * 通过名称获取 Bean 27 | * 28 | * @param beanName 29 | * @return 30 | */ 31 | public static Object getBean(String beanName) { 32 | return applicationContext.getBean(beanName); 33 | } 34 | 35 | /** 36 | * 通过 class 获取 Bean 37 | * 38 | * @param beanClass 39 | * @param 40 | * @return 41 | */ 42 | public static T getBean(Class beanClass) { 43 | return applicationContext.getBean(beanClass); 44 | } 45 | 46 | /** 47 | * 通过名称和类型获取 Bean 48 | * 49 | * @param beanName 50 | * @param beanClass 51 | * @param 52 | * @return 53 | */ 54 | public static T getBean(String beanName, Class beanClass) { 55 | return applicationContext.getBean(beanName, beanClass); 56 | } 57 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/manager/model/request/function/SparkRequestFunctionMessage.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.manager.model.request.function; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * $.payload.functions.text 7 | * 8 | * @author briqt 9 | */ 10 | public class SparkRequestFunctionMessage implements Serializable { 11 | 12 | private static final long serialVersionUID = 6587302404547694700L; 13 | 14 | /** 15 | * 必传;function名称;用户输入命中后,会返回该名称 16 | */ 17 | private String name; 18 | 19 | /** 20 | * 必传;function功能描述;描述function功能即可,越详细越有助于大模型理解该function 21 | */ 22 | private String description; 23 | 24 | /** 25 | * 必传;function参数列表 26 | */ 27 | private SparkRequestFunctionParameters parameters; 28 | 29 | public SparkRequestFunctionMessage() { 30 | } 31 | 32 | public SparkRequestFunctionMessage(String name, String description, SparkRequestFunctionParameters parameters) { 33 | this.name = name; 34 | this.description = description; 35 | this.parameters = parameters; 36 | } 37 | 38 | public String getName() { 39 | return name; 40 | } 41 | 42 | public void setName(String name) { 43 | this.name = name; 44 | } 45 | 46 | public String getDescription() { 47 | return description; 48 | } 49 | 50 | public void setDescription(String description) { 51 | this.description = description; 52 | } 53 | 54 | public SparkRequestFunctionParameters getParameters() { 55 | return parameters; 56 | } 57 | 58 | public void setParameters(SparkRequestFunctionParameters parameters) { 59 | this.parameters = parameters; 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/service/CommodityTypeService.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.service; 2 | 3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 4 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 5 | import com.baomidou.mybatisplus.extension.service.IService; 6 | import com.xiaobaitiao.springbootinit.model.dto.commodityType.CommodityTypeQueryRequest; 7 | import com.xiaobaitiao.springbootinit.model.entity.CommodityType; 8 | import com.xiaobaitiao.springbootinit.model.vo.CommodityTypeVO; 9 | 10 | import javax.servlet.http.HttpServletRequest; 11 | 12 | /** 13 | * 商品类别表服务 14 | * 15 | * @author 程序员小白条 16 | * @from 个人博客 17 | */ 18 | public interface CommodityTypeService extends IService { 19 | 20 | /** 21 | * 校验数据 22 | * 23 | * @param commodityType 24 | * @param add 对创建的数据进行校验 25 | */ 26 | void validCommodityType(CommodityType commodityType, boolean add); 27 | 28 | /** 29 | * 获取查询条件 30 | * 31 | * @param commodityTypeQueryRequest 32 | * @return 33 | */ 34 | QueryWrapper getQueryWrapper(CommodityTypeQueryRequest commodityTypeQueryRequest); 35 | 36 | /** 37 | * 获取商品类别表封装 38 | * 39 | * @param commodityType 40 | * @param request 41 | * @return 42 | */ 43 | CommodityTypeVO getCommodityTypeVO(CommodityType commodityType, HttpServletRequest request); 44 | 45 | /** 46 | * 分页获取商品类别表封装 47 | * 48 | * @param commodityTypePage 49 | * @param request 50 | * @return 51 | */ 52 | Page getCommodityTypeVOPage(Page commodityTypePage, HttpServletRequest request); 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/service/UserAiMessageService.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.service; 2 | 3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 4 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 5 | import com.baomidou.mybatisplus.extension.service.IService; 6 | import com.xiaobaitiao.springbootinit.model.dto.userAiMessage.UserAiMessageQueryRequest; 7 | import com.xiaobaitiao.springbootinit.model.entity.UserAiMessage; 8 | import com.xiaobaitiao.springbootinit.model.vo.UserAiMessageVO; 9 | 10 | import javax.servlet.http.HttpServletRequest; 11 | 12 | /** 13 | * 用户对话表服务 14 | * 15 | * @author 程序员小白条 16 | * @from 个人博客 17 | */ 18 | public interface UserAiMessageService extends IService { 19 | 20 | /** 21 | * 校验数据 22 | * 23 | * @param userAiMessage 24 | * @param add 对创建的数据进行校验 25 | */ 26 | void validUserAiMessage(UserAiMessage userAiMessage, boolean add); 27 | 28 | /** 29 | * 获取查询条件 30 | * 31 | * @param userAiMessageQueryRequest 32 | * @return 33 | */ 34 | QueryWrapper getQueryWrapper(UserAiMessageQueryRequest userAiMessageQueryRequest); 35 | 36 | /** 37 | * 获取用户对话表封装 38 | * 39 | * @param userAiMessage 40 | * @param request 41 | * @return 42 | */ 43 | UserAiMessageVO getUserAiMessageVO(UserAiMessage userAiMessage, HttpServletRequest request); 44 | 45 | /** 46 | * 分页获取用户对话表封装 47 | * 48 | * @param userAiMessagePage 49 | * @param request 50 | * @return 51 | */ 52 | Page getUserAiMessageVOPage(Page userAiMessagePage, HttpServletRequest request); 53 | 54 | } 55 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/job/once/FullSyncPostToEs.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.job.once; 2 | 3 | import com.xiaobaitiao.springbootinit.esdao.PostEsDao; 4 | import com.xiaobaitiao.springbootinit.model.dto.post.PostEsDTO; 5 | import com.xiaobaitiao.springbootinit.model.entity.Post; 6 | import com.xiaobaitiao.springbootinit.service.PostService; 7 | import java.util.List; 8 | import java.util.stream.Collectors; 9 | import javax.annotation.Resource; 10 | import lombok.extern.slf4j.Slf4j; 11 | import cn.hutool.core.collection.CollUtil; 12 | import org.springframework.boot.CommandLineRunner; 13 | 14 | /** 15 | * 全量同步帖子到 es 16 | * 17 | * @author 程序员小白条 18 | * @from 个人博客 19 | */ 20 | // todo 取消注释开启任务 21 | //@Component 22 | @Slf4j 23 | public class FullSyncPostToEs implements CommandLineRunner { 24 | 25 | @Resource 26 | private PostService postService; 27 | 28 | @Resource 29 | private PostEsDao postEsDao; 30 | 31 | @Override 32 | public void run(String... args) { 33 | List postList = postService.list(); 34 | if (CollUtil.isEmpty(postList)) { 35 | return; 36 | } 37 | List postEsDTOList = postList.stream().map(PostEsDTO::objToDto).collect(Collectors.toList()); 38 | final int pageSize = 500; 39 | int total = postEsDTOList.size(); 40 | log.info("FullSyncPostToEs start, total {}", total); 41 | for (int i = 0; i < total; i += pageSize) { 42 | int end = Math.min(i + pageSize, total); 43 | log.info("sync from {} to {}", i, end); 44 | postEsDao.saveAll(postEsDTOList.subList(i, end)); 45 | } 46 | log.info("FullSyncPostToEs end, total {}", total); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/service/PrivateMessageService.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.service; 2 | 3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 4 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 5 | import com.baomidou.mybatisplus.extension.service.IService; 6 | import com.xiaobaitiao.springbootinit.model.dto.privateMessage.PrivateMessageQueryRequest; 7 | import com.xiaobaitiao.springbootinit.model.entity.PrivateMessage; 8 | import com.xiaobaitiao.springbootinit.model.vo.PrivateMessageVO; 9 | 10 | import javax.servlet.http.HttpServletRequest; 11 | 12 | /** 13 | * 私信表服务 14 | * 15 | * @author 程序员小白条 16 | * @from 个人博客 17 | */ 18 | public interface PrivateMessageService extends IService { 19 | 20 | /** 21 | * 校验数据 22 | * 23 | * @param privateMessage 24 | * @param add 对创建的数据进行校验 25 | */ 26 | void validPrivateMessage(PrivateMessage privateMessage, boolean add); 27 | 28 | /** 29 | * 获取查询条件 30 | * 31 | * @param privateMessageQueryRequest 32 | * @return 33 | */ 34 | QueryWrapper getQueryWrapper(PrivateMessageQueryRequest privateMessageQueryRequest); 35 | 36 | /** 37 | * 获取私信表封装 38 | * 39 | * @param privateMessage 40 | * @param request 41 | * @return 42 | */ 43 | PrivateMessageVO getPrivateMessageVO(PrivateMessage privateMessage, HttpServletRequest request); 44 | 45 | /** 46 | * 分页获取私信表封装 47 | * 48 | * @param privateMessagePage 49 | * @param request 50 | * @return 51 | */ 52 | Page getPrivateMessageVOPage(Page privateMessagePage, HttpServletRequest request); 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/service/CommentService.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.service; 2 | 3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 4 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 5 | import com.baomidou.mybatisplus.extension.service.IService; 6 | import com.xiaobaitiao.springbootinit.model.dto.comment.CommentQueryRequest; 7 | import com.xiaobaitiao.springbootinit.model.entity.Comment; 8 | import com.xiaobaitiao.springbootinit.model.vo.CommentVO; 9 | 10 | import javax.servlet.http.HttpServletRequest; 11 | import java.util.List; 12 | 13 | /** 14 | * 帖子评论服务 15 | * 16 | */ 17 | public interface CommentService extends IService { 18 | 19 | /** 20 | * 校验数据 21 | * 22 | * @param comment 23 | * @param add 对创建的数据进行校验 24 | */ 25 | void validComment(Comment comment, boolean add); 26 | 27 | /** 28 | * 获取查询条件 29 | * 30 | * @param commentQueryRequest 31 | * @return 32 | */ 33 | QueryWrapper getQueryWrapper(CommentQueryRequest commentQueryRequest); 34 | 35 | /** 36 | * 获取帖子评论封装 37 | * 38 | * @param comment 39 | * @param request 40 | * @return 41 | */ 42 | CommentVO getCommentVO(Comment comment, HttpServletRequest request); 43 | 44 | /** 45 | * 分页获取帖子评论封装 46 | * 47 | * @param commentPage 48 | * @param request 49 | * @return 50 | */ 51 | Page getCommentVOPage(Page commentPage, HttpServletRequest request); 52 | 53 | /** 54 | * 根据帖子Id获取评论 55 | * 56 | * @param postId 57 | * @param request 58 | * @return 59 | */ 60 | 61 | List getCommentsByPostId(long postId, HttpServletRequest request) ; 62 | } 63 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/service/CommodityService.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.service; 2 | 3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 4 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 5 | import com.baomidou.mybatisplus.extension.service.IService; 6 | import com.xiaobaitiao.springbootinit.model.dto.commodity.CommodityQueryRequest; 7 | import com.xiaobaitiao.springbootinit.model.entity.Commodity; 8 | import com.xiaobaitiao.springbootinit.model.vo.CommodityVO; 9 | 10 | import javax.servlet.http.HttpServletRequest; 11 | 12 | /** 13 | * 商品表服务 14 | * 15 | * @author 程序员小白条 16 | * @from 个人博客 17 | */ 18 | public interface CommodityService extends IService { 19 | 20 | /** 21 | * 校验数据 22 | * 23 | * @param commodity 24 | * @param add 对创建的数据进行校验 25 | */ 26 | void validCommodity(Commodity commodity, boolean add); 27 | 28 | /** 29 | * 获取查询条件 30 | * 31 | * @param commodityQueryRequest 32 | * @return 33 | */ 34 | QueryWrapper getQueryWrapper(CommodityQueryRequest commodityQueryRequest); 35 | 36 | /** 37 | * 获取商品表封装 38 | * 39 | * @param commodity 40 | * @param request 41 | * @return 42 | */ 43 | CommodityVO getCommodityVO(Commodity commodity, HttpServletRequest request); 44 | 45 | /** 46 | * 分页获取商品表封装 47 | * 48 | * @param commodityPage 49 | * @param request 50 | * @return 51 | */ 52 | Page getCommodityVOPage(Page commodityPage, HttpServletRequest request); 53 | 54 | /** 55 | * 根据 ID 获取商品信息加锁 56 | * @param id 57 | * @return 58 | */ 59 | Commodity getByIdWithLock(Long id); 60 | } 61 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/manager/model/request/SparkRequest.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.manager.model.request; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnore; 4 | import com.xiaobaitiao.springbootinit.manager.constant.SparkApiVersion; 5 | import com.xiaobaitiao.springbootinit.manager.model.SparkRequestBuilder; 6 | 7 | import java.io.Serializable; 8 | 9 | /** 10 | * SparkRequest 11 | * 12 | * @author briqt 13 | */ 14 | public class SparkRequest implements Serializable { 15 | private static final long serialVersionUID = 8142547165395379456L; 16 | 17 | private SparkRequestHeader header; 18 | 19 | private SparkRequestParameter parameter; 20 | 21 | private SparkRequestPayload payload; 22 | 23 | private transient SparkApiVersion apiVersion = SparkApiVersion.V3_0; 24 | 25 | public static SparkRequestBuilder builder() { 26 | return new SparkRequestBuilder(); 27 | } 28 | 29 | public SparkRequestHeader getHeader() { 30 | return header; 31 | } 32 | 33 | public void setHeader(SparkRequestHeader header) { 34 | this.header = header; 35 | } 36 | 37 | public SparkRequestParameter getParameter() { 38 | return parameter; 39 | } 40 | 41 | public void setParameter(SparkRequestParameter parameter) { 42 | this.parameter = parameter; 43 | } 44 | 45 | public SparkRequestPayload getPayload() { 46 | return payload; 47 | } 48 | 49 | public void setPayload(SparkRequestPayload payload) { 50 | this.payload = payload; 51 | } 52 | 53 | @JsonIgnore 54 | public SparkApiVersion getApiVersion() { 55 | return apiVersion; 56 | } 57 | 58 | @JsonIgnore 59 | public void setApiVersion(SparkApiVersion apiVersion) { 60 | this.apiVersion = apiVersion; 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/model/entity/Post.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.model.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import com.baomidou.mybatisplus.annotation.TableLogic; 7 | import com.baomidou.mybatisplus.annotation.TableName; 8 | import java.io.Serializable; 9 | import java.util.Date; 10 | 11 | import com.fasterxml.jackson.annotation.JsonFormat; 12 | import lombok.Data; 13 | 14 | /** 15 | * 帖子 16 | * 17 | * @author 程序员小白条 18 | * @from 个人博客 19 | */ 20 | @TableName(value = "post") 21 | @Data 22 | public class Post implements Serializable { 23 | 24 | /** 25 | * id 26 | */ 27 | @TableId(type = IdType.ASSIGN_ID) 28 | private Long id; 29 | 30 | /** 31 | * 标题 32 | */ 33 | private String title; 34 | 35 | /** 36 | * 内容 37 | */ 38 | private String content; 39 | 40 | /** 41 | * 标签列表 json 42 | */ 43 | private String tags; 44 | 45 | /** 46 | * 点赞数 47 | */ 48 | private Integer thumbNum; 49 | 50 | /** 51 | * 收藏数 52 | */ 53 | private Integer favourNum; 54 | 55 | /** 56 | * 创建用户 id 57 | */ 58 | private Long userId; 59 | 60 | /** 61 | * 创建时间 62 | */ 63 | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") 64 | private Date createTime; 65 | 66 | /** 67 | * 更新时间 68 | */ 69 | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") 70 | private Date updateTime; 71 | 72 | /** 73 | * 是否删除 74 | */ 75 | @TableLogic 76 | private Integer isDelete; 77 | 78 | @TableField(exist = false) 79 | private static final long serialVersionUID = 1L; 80 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/utils/NetUtils.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.utils; 2 | 3 | import java.net.InetAddress; 4 | import javax.servlet.http.HttpServletRequest; 5 | 6 | /** 7 | * 网络工具类 8 | * 9 | * @author 程序员小白条 10 | * @from 个人博客 11 | */ 12 | public class NetUtils { 13 | 14 | /** 15 | * 获取客户端 IP 地址 16 | * 17 | * @param request 18 | * @return 19 | */ 20 | public static String getIpAddress(HttpServletRequest request) { 21 | String ip = request.getHeader("x-forwarded-for"); 22 | if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 23 | ip = request.getHeader("Proxy-Client-IP"); 24 | } 25 | if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 26 | ip = request.getHeader("WL-Proxy-Client-IP"); 27 | } 28 | if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 29 | ip = request.getRemoteAddr(); 30 | if (ip.equals("127.0.0.1")) { 31 | // 根据网卡取本机配置的 IP 32 | InetAddress inet = null; 33 | try { 34 | inet = InetAddress.getLocalHost(); 35 | } catch (Exception e) { 36 | e.printStackTrace(); 37 | } 38 | if (inet != null) { 39 | ip = inet.getHostAddress(); 40 | } 41 | } 42 | } 43 | // 多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割 44 | if (ip != null && ip.length() > 15) { 45 | if (ip.indexOf(",") > 0) { 46 | ip = ip.substring(0, ip.indexOf(",")); 47 | } 48 | } 49 | if (ip == null) { 50 | return "127.0.0.1"; 51 | } 52 | return ip; 53 | } 54 | 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/manager/model/request/function/SparkRequestFunctionParameters.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.manager.model.request.function; 2 | 3 | import java.io.Serializable; 4 | import java.util.List; 5 | import java.util.Map; 6 | 7 | /** 8 | * $.payload.functions.text 9 | * 10 | * @author briqt 11 | */ 12 | public class SparkRequestFunctionParameters implements Serializable { 13 | 14 | private static final long serialVersionUID = 1079801431462837232L; 15 | 16 | /** 17 | * 必传;参数类型 18 | */ 19 | private String type; 20 | 21 | /** 22 | * 必传;参数信息描述;该内容由用户定义,命中该方法时需要返回哪些参数
23 | * key:参数名称
24 | * value:参数信息描述 25 | */ 26 | private Map properties; 27 | 28 | /** 29 | * 必传;必须返回的参数列表;该内容由用户定义,命中方法时必须返回的字段;properties中的key 30 | */ 31 | private List required; 32 | 33 | public SparkRequestFunctionParameters() { 34 | } 35 | 36 | public SparkRequestFunctionParameters(String type, Map properties, List required) { 37 | this.type = type; 38 | this.properties = properties; 39 | this.required = required; 40 | } 41 | 42 | public String getType() { 43 | return type; 44 | } 45 | 46 | public void setType(String type) { 47 | this.type = type; 48 | } 49 | 50 | public Map getProperties() { 51 | return properties; 52 | } 53 | 54 | public void setProperties(Map properties) { 55 | this.properties = properties; 56 | } 57 | 58 | public List getRequired() { 59 | return required; 60 | } 61 | 62 | public void setRequired(List required) { 63 | this.required = required; 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/manager/model/response/SparkTextUsage.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.manager.model.response; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | 5 | import java.io.Serializable; 6 | 7 | 8 | /** 9 | * $.payload.usage.text 10 | * 11 | * @author briqt 12 | */ 13 | public class SparkTextUsage implements Serializable { 14 | private static final long serialVersionUID = 8295933047877077971L; 15 | 16 | /** 17 | * 包含历史问题的总tokens大小(提问tokens大小) 18 | */ 19 | @JsonProperty("prompt_tokens") 20 | private Integer promptTokens; 21 | 22 | /** 23 | * 回答的tokens大小 24 | */ 25 | @JsonProperty("completion_tokens") 26 | private Integer completionTokens; 27 | 28 | /** 29 | * prompt_tokens和completion_tokens的和,也是本次交互计费的tokens大小 30 | */ 31 | @JsonProperty("total_tokens") 32 | private Integer totalTokens; 33 | 34 | /** 35 | * 保留字段,可忽略 36 | */ 37 | @JsonProperty("question_tokens") 38 | private Integer questionTokens; 39 | 40 | public Integer getPromptTokens() { 41 | return promptTokens; 42 | } 43 | 44 | public void setPromptTokens(Integer promptTokens) { 45 | this.promptTokens = promptTokens; 46 | } 47 | 48 | public Integer getCompletionTokens() { 49 | return completionTokens; 50 | } 51 | 52 | public void setCompletionTokens(Integer completionTokens) { 53 | this.completionTokens = completionTokens; 54 | } 55 | 56 | public Integer getTotalTokens() { 57 | return totalTokens; 58 | } 59 | 60 | public void setTotalTokens(Integer totalTokens) { 61 | this.totalTokens = totalTokens; 62 | } 63 | 64 | public Integer getQuestionTokens() { 65 | return questionTokens; 66 | } 67 | 68 | public void setQuestionTokens(Integer questionTokens) { 69 | this.questionTokens = questionTokens; 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/manager/model/SparkSyncChatResponse.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.manager.model; 2 | 3 | 4 | 5 | import com.xiaobaitiao.springbootinit.manager.model.response.SparkResponseFunctionCall; 6 | import com.xiaobaitiao.springbootinit.manager.model.response.SparkTextUsage; 7 | 8 | import java.io.Serializable; 9 | 10 | /** 11 | * SparkTextChatResponse 12 | * 13 | * @author briqt 14 | */ 15 | public class SparkSyncChatResponse implements Serializable { 16 | private static final long serialVersionUID = -6785055441385392782L; 17 | 18 | /** 19 | * 回答内容 20 | */ 21 | private String content; 22 | 23 | private SparkResponseFunctionCall functionCall; 24 | 25 | /** 26 | * tokens统计 27 | */ 28 | private SparkTextUsage textUsage; 29 | 30 | /** 31 | * 内部自用字段 32 | */ 33 | private boolean ok = false; 34 | 35 | private Throwable exception; 36 | 37 | public String getContent() { 38 | return content; 39 | } 40 | 41 | public void setContent(String content) { 42 | this.content = content; 43 | } 44 | 45 | public SparkResponseFunctionCall getFunctionCall() { 46 | return functionCall; 47 | } 48 | 49 | public void setFunctionCall(SparkResponseFunctionCall functionCall) { 50 | this.functionCall = functionCall; 51 | } 52 | 53 | public SparkTextUsage getTextUsage() { 54 | return textUsage; 55 | } 56 | 57 | public void setTextUsage(SparkTextUsage textUsage) { 58 | this.textUsage = textUsage; 59 | } 60 | 61 | public boolean isOk() { 62 | return ok; 63 | } 64 | 65 | public void setOk(boolean ok) { 66 | this.ok = ok; 67 | } 68 | 69 | public Throwable getException() { 70 | return exception; 71 | } 72 | 73 | public void setException(Throwable exception) { 74 | this.exception = exception; 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /src/main/java/com/xiaobaitiao/springbootinit/service/CommodityScoreService.java: -------------------------------------------------------------------------------- 1 | package com.xiaobaitiao.springbootinit.service; 2 | 3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 4 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 5 | import com.baomidou.mybatisplus.extension.service.IService; 6 | import com.xiaobaitiao.springbootinit.model.dto.commodityScore.CommodityScoreQueryRequest; 7 | import com.xiaobaitiao.springbootinit.model.entity.CommodityScore; 8 | import com.xiaobaitiao.springbootinit.model.vo.CommodityScoreVO; 9 | 10 | import javax.servlet.http.HttpServletRequest; 11 | 12 | /** 13 | * 商品评分表服务 14 | * 15 | * @author 程序员小白条 16 | * @from
个人博客 17 | */ 18 | public interface CommodityScoreService extends IService { 19 | 20 | /** 21 | * 校验数据 22 | * 23 | * @param commodityScore 24 | * @param add 对创建的数据进行校验 25 | */ 26 | void validCommodityScore(CommodityScore commodityScore, boolean add); 27 | 28 | /** 29 | * 获取查询条件 30 | * 31 | * @param commodityScoreQueryRequest 32 | * @return 33 | */ 34 | QueryWrapper getQueryWrapper(CommodityScoreQueryRequest commodityScoreQueryRequest); 35 | 36 | /** 37 | * 获取商品评分表封装 38 | * 39 | * @param commodityScore 40 | * @param request 41 | * @return 42 | */ 43 | CommodityScoreVO getCommodityScoreVO(CommodityScore commodityScore, HttpServletRequest request); 44 | 45 | /** 46 | * 分页获取商品评分表封装 47 | * 48 | * @param commodityScorePage 49 | * @param request 50 | * @return 51 | */ 52 | Page getCommodityScoreVOPage(Page commodityScorePage, HttpServletRequest request); 53 | /** 54 | * 获取商品的平均评分 55 | * 56 | * @param spotId 商品 ID 57 | * @return 平均评分 58 | */ 59 | Double getAverageScoreBySpotId(Long spotId); 60 | } 61 | --------------------------------------------------------------------------------