Browse Source

重构刘玉松分支

lys
Administrator 2 months ago
parent
commit
3718f5dac2
  1. 21
      pom.xml
  2. 4
      src/main/java/org/hlrj/duobao_demo/DuobaoDemoApplication.java
  3. 31
      src/main/java/org/hlrj/duobao_demo/controller/CuratedVideoController.java
  4. 47
      src/main/java/org/hlrj/duobao_demo/controller/LoginController.java
  5. 95
      src/main/java/org/hlrj/duobao_demo/controller/RecommendationController.java
  6. 58
      src/main/java/org/hlrj/duobao_demo/controller/SpecialTopicController.java
  7. 20
      src/main/java/org/hlrj/duobao_demo/controller/VideoDataController.java
  8. 24
      src/main/java/org/hlrj/duobao_demo/entity/PageBean.java
  9. 8
      src/main/java/org/hlrj/duobao_demo/entity/Recommendation.java
  10. 7
      src/main/java/org/hlrj/duobao_demo/entity/SpecialTopic.java
  11. 45
      src/main/java/org/hlrj/duobao_demo/entity/User.java
  12. 18
      src/main/java/org/hlrj/duobao_demo/entity/VideoData.java
  13. 11
      src/main/java/org/hlrj/duobao_demo/mapper/RecommendationMapper.java
  14. 3
      src/main/java/org/hlrj/duobao_demo/mapper/SpecialTopicMapper.java
  15. 17
      src/main/java/org/hlrj/duobao_demo/mapper/UserMapper.java
  16. 1
      src/main/java/org/hlrj/duobao_demo/mapper/VideoDataMapper.java
  17. 15
      src/main/java/org/hlrj/duobao_demo/service/ICuratedVideoService.java
  18. 29
      src/main/java/org/hlrj/duobao_demo/service/IRecommendationService.java
  19. 20
      src/main/java/org/hlrj/duobao_demo/service/ISpecialTopicService.java
  20. 21
      src/main/java/org/hlrj/duobao_demo/service/IUserService.java
  21. 12
      src/main/java/org/hlrj/duobao_demo/service/IVideoDataService.java
  22. 10
      src/main/java/org/hlrj/duobao_demo/service/impl/CuratedVideoServiceImpl.java
  23. 30
      src/main/java/org/hlrj/duobao_demo/service/impl/RecommendationServiceImpl.java
  24. 17
      src/main/java/org/hlrj/duobao_demo/service/impl/SpecialTopicServiceImpl.java
  25. 28
      src/main/java/org/hlrj/duobao_demo/service/impl/UserServiceImpl.java
  26. 11
      src/main/java/org/hlrj/duobao_demo/service/impl/VideoDataServiceImpl.java
  27. 35
      src/main/java/org/hlrj/duobao_demo/tool/CorsConfig.java
  28. 34
      src/main/java/org/hlrj/duobao_demo/tool/DomoFilter.java
  29. 46
      src/main/java/org/hlrj/duobao_demo/tool/JwtUtils.java
  30. 58
      src/main/java/org/hlrj/duobao_demo/tool/RedisConfig.java
  31. 3
      src/main/java/org/hlrj/duobao_demo/tool/Result.java
  32. 6
      src/main/resources/application.properties
  33. 89
      src/main/resources/mapper/RecommendationMapper.xml
  34. 52
      src/main/resources/mapper/SpecialTopicMapper.xml
  35. 25
      src/main/resources/mapper/UserMapper.xml
  36. 26
      src/main/resources/mapper/VideoDateMapper.xml
  37. 20
      src/test/java/org/hlrj/duobao_demo/DuobaoDemoApplicationTests.java

21
pom.xml

@ -3,10 +3,12 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.hlrj</groupId>
<artifactId>duobao_demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>duobao_demo</name>
<description>duobao_demo</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@ -38,6 +40,7 @@
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--mybatis-plus依赖-->
<dependency>
<groupId>com.baomidou</groupId>
@ -56,8 +59,22 @@
<version>2.9.2</version>
</dependency>
<!--redis相关依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--JWT相关依赖-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
@ -89,7 +106,9 @@
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>org.hlrj.duobao_demo.DuobaoDemoApplication</mainClass>
<skip>true</skip>
</configuration>
<executions>

4
src/main/java/org/hlrj/duobao_demo/DuobaoDemoApplication.java

@ -4,8 +4,12 @@ import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.cache.annotation.EnableCaching;
@SpringBootApplication
@EnableCaching
@ServletComponentScan
@MapperScan("org.hlrj.duobao_demo.mapper")
public class DuobaoDemoApplication {

31
src/main/java/org/hlrj/duobao_demo/controller/CuratedVideoController.java

@ -8,11 +8,7 @@ import org.hlrj.duobao_demo.service.ICuratedVideoService;
import org.hlrj.duobao_demo.service.IRecommendationService;
import org.hlrj.duobao_demo.tool.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@ -26,13 +22,13 @@ import java.util.List;
*/
@RestController
@Slf4j
@RequestMapping("/curated-video")
@RequestMapping("/curated-video/api")
public class CuratedVideoController {
@Autowired
private ICuratedVideoService curatedVideoService;
///api/brain/addUserPrivileges
//@RequestMapping(value = "/api/selectRecommendation",method = RequestMethod.POST)
@PostMapping("/api/selectCuratedVideo")
@PostMapping("/selectCuratedVideo")
public Result selectCuratedVideo() {
log.info("查询全部的精选的视频");//日志记录
@ -42,4 +38,25 @@ public class CuratedVideoController {
return Result.success(curatedVideo);
}
@PostMapping("/deleteCuratedVideo/{id}")
public Result deleteCuratedVideo(@PathVariable Integer id) {
log.info("根据id删除精选:{}",id);
curatedVideoService.delete(id);
return Result.success();
}
/**
* 根据id查询数据
* @param id
* @return
*/
@PostMapping("/selectCuratedVideoById/{id}")
public Result selectRecommendationById(@PathVariable Integer id) {
log.info("根据id进行查询:{}",id);
CuratedVideo curatedVideo = curatedVideoService.selectById(id);
return Result.success(curatedVideo);
}
}

47
src/main/java/org/hlrj/duobao_demo/controller/LoginController.java

@ -0,0 +1,47 @@
package org.hlrj.duobao_demo.controller;
import lombok.extern.slf4j.Slf4j;
import org.hlrj.duobao_demo.entity.User;
import org.hlrj.duobao_demo.service.IUserService;
import org.hlrj.duobao_demo.tool.JwtUtils;
import org.hlrj.duobao_demo.tool.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
/**
* @program: duobao_demo
* @ClassName LoginController
* @description:
* @author:liuyusong
* @create: 202504-14 11:18
* @Version 1.0
**/
@RestController
@Slf4j
public class LoginController {
@Autowired
private IUserService userService;
@PostMapping("/login")
public Result login(@RequestBody User user) {
log.info("登录操作:{}",user);
User user1 = userService.login(user);
if (user1 != null) {
Map<String, Object> map = new HashMap<>();
map.put("userid",user1.getUserid());
map.put("username",user1.getUsername());
map.put("createTime",user1.getCreateTime());
//生成jwt令牌
String jwt = JwtUtils.generateJwt(map);
return Result.success(jwt);
}
return Result.error("用户名或者密码错误");
}
}

95
src/main/java/org/hlrj/duobao_demo/controller/RecommendationController.java

@ -1,6 +1,7 @@
package org.hlrj.duobao_demo.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import net.bytebuddy.asm.Advice;
import org.hlrj.duobao_demo.entity.Recommendation;
@ -9,13 +10,13 @@ import org.hlrj.duobao_demo.tool.Result;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List;
import java.util.Optional;
/**
* <p>
@ -27,7 +28,7 @@ import java.util.List;
*/
@RestController
@Slf4j//日志记录
@RequestMapping("/recommendation")
@RequestMapping("/recommendation/api")
public class RecommendationController {
//记录日志
@ -37,7 +38,13 @@ public class RecommendationController {
private IRecommendationService recommendationService;
///api/brain/addUserPrivileges
//@RequestMapping(value = "/api/selectRecommendation",method = RequestMethod.POST)
@PostMapping("/api/selectRecommendation")
@Autowired
private RedisTemplate redisTemplate;
/**
* 查询操作
* @return
*/
@PostMapping("/selectRecommendation")
public Result selectRecommendation() {
log.info("查询全部的推荐视频");//日志记录
@ -46,4 +53,78 @@ public class RecommendationController {
return Result.success(recommendationList);
}
/**
* 删除操作
* @param id
* @return
*/
@PostMapping("/deleteRecommendation/{id}")
public Result deleteRecommendation(@PathVariable Integer id) {
log.info("根据id删除推荐:{}",id);
recommendationService.delete(id);
return Result.success();
}
// /**
// * 新增操作
// * @param recommendation
// * @return
// */
// @PostMapping("/addRecommendation")
// public Result addRecommendation(@RequestBody Recommendation recommendation) {
// log.info("新增推荐内容:{}",recommendation);
// //调用service
// recommendationService.add(recommendation);
// return Result.success();
// }
/**
* 根据id查询数据
* @param id
* @return
*/
@PostMapping("/selectRecommendationById/{id}")
public Result selectRecommendationById(@PathVariable Integer id) {
log.info("根据id进行查询:{}",id);
Recommendation recommendation = recommendationService.selectById(id);
return Result.success(recommendation);
}
/**
* 更新
* @param recommendation
* @return
*/
@PostMapping("/updateRecommendation")
public Result updateRecommendation(@RequestBody Recommendation recommendation) {
log.info("更新员工的信息:{}",recommendation);
recommendationService.updateRecommendation(recommendation);
return Result.success();
}
/**
* 点赞数量加1
* @param
* @return
*/
@PostMapping("/addLike/{id}")
public Result addLike( @PathVariable Integer id){
log.info("点赞操作:{}");
recommendationService.isLiked(id);
return Result.success();
}
/* @PostMapping("/addLike/{id}")
public Result addLike(@RequestParam Integer id) {
Recommendation recommendation = new Recommendation();
String key= String.valueOf(recommendation.getLikes());
key = "like:"+ id;
long result = redisTemplate.opsForValue().increment(key);
return Result.success(result);
}*/
}

58
src/main/java/org/hlrj/duobao_demo/controller/SpecialTopicController.java

@ -3,15 +3,13 @@ package org.hlrj.duobao_demo.controller;
import lombok.extern.slf4j.Slf4j;
import org.hlrj.duobao_demo.entity.CuratedVideo;
import org.hlrj.duobao_demo.entity.Recommendation;
import org.hlrj.duobao_demo.entity.SpecialTopic;
import org.hlrj.duobao_demo.service.ICuratedVideoService;
import org.hlrj.duobao_demo.service.ISpecialTopicService;
import org.hlrj.duobao_demo.tool.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@ -25,18 +23,66 @@ import java.util.List;
*/
@RestController
@Slf4j
@RequestMapping("/special-topic")
@RequestMapping("/special-topic/api")
public class SpecialTopicController {
@Autowired
private ISpecialTopicService specialTopicService;
@PostMapping("/api/selectSpecialTopic")
/**
* 查询全部数据
* @return
*/
@PostMapping("/selectSpecialTopic")
public Result selectSpecialTopic() {
log.info("查询全部的专题视频");//日志记录
//查询全部数据
List<SpecialTopic> specialTopic=specialTopicService.select();
return Result.success(specialTopic);
}
/**
* 根据id删除专题
* @param id
* @return
*/
@PostMapping("/deleteSpecialTopic/{id}")
public Result deleteSpecialTopic(@PathVariable Integer id) {
log.info("根据id删除专题:{}",id);
specialTopicService.delete(id);
return Result.success();
}
/**
* 根据id查询数据
* @param id
* @return
*/
@PostMapping("/selectSpecialTopicById/{id}")
public Result selectSpecialTopicById(@PathVariable Integer id) {
log.info("根据id进行查询:{}",id);
SpecialTopic specialTopic = specialTopicService.selectById(id);
return Result.success(specialTopic);
}
// /**
// * 点赞数量加1
// * @param id
// * @return
// */
// @PostMapping("/addLike/{id}")
// public Result addLike(@PathVariable Integer id){
// log.info("增加点赞操作:{}");
// SpecialTopic specialTopic = specialTopicService.selectById(id);
//
// specialTopicService.addLike(specialTopic);
// return Result.success();
// }
@PostMapping("/isLikedById/{id}")
public Result isLikedById(@PathVariable Integer id) {
log.info("点赞操作:{}",id);
specialTopicService.isLikedById(id);
return Result.success();
}
}

20
src/main/java/org/hlrj/duobao_demo/controller/VideoDataController.java

@ -8,6 +8,7 @@ import org.hlrj.duobao_demo.service.ISpecialTopicService;
import org.hlrj.duobao_demo.service.IVideoDataService;
import org.hlrj.duobao_demo.tool.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@ -25,18 +26,31 @@ import java.util.List;
*/
@RestController
@Slf4j
@RequestMapping("/video-data")
@RequestMapping("/video-data/api")
public class VideoDataController {
@Autowired
private IVideoDataService iVideoDataService;
@PostMapping("/api/selectVideoData")
@PostMapping("/selectVideoData")
public Result selectVideoData() {
log.info("查询全部的z直播广场内容");//日志记录
log.info("查询全部的直播广场内容");//日志记录
//查询全部数据
List<VideoData> videoData=iVideoDataService.select();
return Result.success(videoData);
}
@PostMapping("/deleteVideoData/{id}")
public Result deleteVideoData(@PathVariable Integer id) {
log.info("根据id删除直播:{}",id);
iVideoDataService.delete(id);
return Result.success();
}
@PostMapping("/isBookedById/{id}")
public Result isBookedById(@PathVariable Integer id) {
log.info("根据id进行预约:{}",id);
iVideoDataService.isBooked(id);
return Result.success();
}
}

24
src/main/java/org/hlrj/duobao_demo/entity/PageBean.java

@ -0,0 +1,24 @@
package org.hlrj.duobao_demo.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* @program: duobao_demo
* @ClassName PageBean
* @description: 分页查询的实体类
* @author:liuyusong
* @create: 202504-10 14:37
* @Version 1.0
**/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageBean {
private Long total;//总记录数
private List rows;//数据列表
}

8
src/main/java/org/hlrj/duobao_demo/entity/Recommendation.java

@ -7,6 +7,7 @@ import java.time.LocalDateTime;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.models.auth.In;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
@ -47,7 +48,7 @@ public class Recommendation implements Serializable {
@ApiModelProperty(value = "点赞数")
private Integer likes;
@ApiModelProperty(value = "评论数")
@ApiModelProperty(value = "观看数")
private Integer comments;
@ApiModelProperty(value = "分享数")
@ -56,5 +57,10 @@ public class Recommendation implements Serializable {
@ApiModelProperty(value = "来源")
private String source;
@ApiModelProperty(value = "头像")
private String head;
@ApiModelProperty(value = "是否点赞")
private Integer isLiked;
}

7
src/main/java/org/hlrj/duobao_demo/entity/SpecialTopic.java

@ -56,5 +56,12 @@ public class SpecialTopic implements Serializable {
@ApiModelProperty(value = "点赞数")
private Integer likeCount;
@ApiModelProperty(value = "俱乐部")
private String club;
@ApiModelProperty(value = "头像")
private String head;
@ApiModelProperty(value = "是否点赞")
private Integer isLiked;
}

45
src/main/java/org/hlrj/duobao_demo/entity/User.java

@ -0,0 +1,45 @@
package org.hlrj.duobao_demo.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* <p>
*
* </p>
*
* @author liuyusong
* @since 2025-04-14
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("user")
@ApiModel(value="User对象", description="")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "ID")
@TableId(value = "userid", type = IdType.AUTO)
private Integer userid;
@ApiModelProperty(value = "用户名")
private String username;
@ApiModelProperty(value = "密码")
private String password;
@ApiModelProperty(value = "创建时间")
private java.util.Date createTime;
}

18
src/main/java/org/hlrj/duobao_demo/entity/VideoData.java

@ -29,19 +29,23 @@ public class VideoData implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
private Integer id;//视频编号
private String mainTitle;
private String mainTitle;//主题
private String sectionTitle;
private String sectionTitle;//所属专题
private String coverImg;
private String coverImg;//封面图片
private String author;
private String author;//作者
private LocalDateTime publishTime;
private LocalDateTime publishTime;//开始时间
private String description;
private String description;//描述
private String head;//头像
private Integer isBooked;//是否预约
}

11
src/main/java/org/hlrj/duobao_demo/mapper/RecommendationMapper.java

@ -1,5 +1,9 @@
package org.hlrj.duobao_demo.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.hlrj.duobao_demo.entity.Recommendation;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@ -11,6 +15,13 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
* @author liuyusong
* @since 2025-04-09
*/
@Mapper
public interface RecommendationMapper extends BaseMapper<Recommendation> {
void updateRecommendation(Recommendation recommendation);
void addLike(Recommendation recommendation);
void isLikedById(Integer id);
}

3
src/main/java/org/hlrj/duobao_demo/mapper/SpecialTopicMapper.java

@ -13,4 +13,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public interface SpecialTopicMapper extends BaseMapper<SpecialTopic> {
void isLikedById(Integer id);
}

17
src/main/java/org/hlrj/duobao_demo/mapper/UserMapper.java

@ -0,0 +1,17 @@
package org.hlrj.duobao_demo.mapper;
import org.hlrj.duobao_demo.entity.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author liuyusong
* @since 2025-04-14
*/
public interface UserMapper extends BaseMapper<User> {
public User getUserByUsernameAndPassword(User user);
}

1
src/main/java/org/hlrj/duobao_demo/mapper/VideoDataMapper.java

@ -13,4 +13,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public interface VideoDataMapper extends BaseMapper<VideoData> {
void isBookedById(Integer id);
}

15
src/main/java/org/hlrj/duobao_demo/service/ICuratedVideoService.java

@ -19,4 +19,19 @@ public interface ICuratedVideoService extends IService<CuratedVideo> {
* @return
*/
public List<CuratedVideo> select();
/**
* 根据id删除精选
* @param id
*/
public void delete(Integer id);
/**
* 根据id查询数据
* @param id
* @return
*/
public CuratedVideo selectById(Integer id);
}

29
src/main/java/org/hlrj/duobao_demo/service/IRecommendationService.java

@ -4,6 +4,7 @@ import org.hlrj.duobao_demo.entity.Recommendation;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
import java.util.Optional;
/**
* <p>
@ -19,4 +20,32 @@ public interface IRecommendationService extends IService<Recommendation> {
* @return
*/
public List<Recommendation> select();
/**
* 删除
* @param id
*/
public void delete(Integer id);
/**
* 根据id进行查询
* @param id
* @return
*/
public Recommendation selectById(Integer id);
/**
* 更新
* @param recommendation
*/
public void updateRecommendation(Recommendation recommendation);
/**
* 进行点赞操作
* @param id
*/
public void isLiked(Integer id);
}

20
src/main/java/org/hlrj/duobao_demo/service/ISpecialTopicService.java

@ -19,4 +19,24 @@ public interface ISpecialTopicService extends IService<SpecialTopic> {
* @return
*/
public List<SpecialTopic> select();
/**
* 根据id删除专题
* @param id
*/
public void delete(Integer id);
/**
* 根据id查询数据
* @param id
* @return
*/
public SpecialTopic selectById(Integer id);
/**
* 点赞设置
* @param id
*/
public void isLikedById(Integer id);
}

21
src/main/java/org/hlrj/duobao_demo/service/IUserService.java

@ -0,0 +1,21 @@
package org.hlrj.duobao_demo.service;
import org.hlrj.duobao_demo.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 服务类
* </p>
*
* @author liuyusong
* @since 2025-04-14
*/
public interface IUserService extends IService<User> {
/**
* 用户登录
* @param user
* @return
*/
public User login(User user);
}

12
src/main/java/org/hlrj/duobao_demo/service/IVideoDataService.java

@ -19,4 +19,16 @@ public interface IVideoDataService extends IService<VideoData> {
* @return
*/
public List<VideoData> select();
/**
* 根据id删除直播
* @param id
*/
public void delete(Integer id);
/**
* 根据id进行预订
* @param id
*/
public void isBooked(Integer id);
}

10
src/main/java/org/hlrj/duobao_demo/service/impl/CuratedVideoServiceImpl.java

@ -30,4 +30,14 @@ public class CuratedVideoServiceImpl extends ServiceImpl<CuratedVideoMapper, Cur
QueryWrapper<CuratedVideo> queryWrapper = new QueryWrapper<>();
return curatedVideoMapper.selectList(queryWrapper);
}
@Override
public void delete(Integer id) {
curatedVideoMapper.deleteById(id);
}
@Override
public CuratedVideo selectById(Integer id) {
return curatedVideoMapper.selectById(id);
}
}

30
src/main/java/org/hlrj/duobao_demo/service/impl/RecommendationServiceImpl.java

@ -8,8 +8,11 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Optional;
/**
* <p>
@ -28,4 +31,31 @@ public class RecommendationServiceImpl extends ServiceImpl<RecommendationMapper,
QueryWrapper<Recommendation> wrapper = new QueryWrapper<>();
return recommendationMapper.selectList(wrapper);
}
@Override
public void delete(Integer id) {
recommendationMapper.deleteById(id);
}
@Override
public Recommendation selectById(Integer id) {
return recommendationMapper.selectById(id);
}
@Override
public void updateRecommendation(Recommendation recommendation) {
recommendationMapper.updateRecommendation(recommendation);
}
@Override
public void isLiked(Integer id) {
recommendationMapper.isLikedById(id);
}
}

17
src/main/java/org/hlrj/duobao_demo/service/impl/SpecialTopicServiceImpl.java

@ -28,4 +28,21 @@ public class SpecialTopicServiceImpl extends ServiceImpl<SpecialTopicMapper, Spe
QueryWrapper<SpecialTopic> queryWrapper = new QueryWrapper<>();
return specialTopicMapper.selectList(queryWrapper);
}
@Override
public void delete(Integer id) {
specialTopicMapper.deleteById(id);
}
@Override
public SpecialTopic selectById(Integer id) {
return specialTopicMapper.selectById(id);
}
@Override
public void isLikedById(Integer id) {
specialTopicMapper.isLikedById(id);
}
}

28
src/main/java/org/hlrj/duobao_demo/service/impl/UserServiceImpl.java

@ -0,0 +1,28 @@
package org.hlrj.duobao_demo.service.impl;
import org.hlrj.duobao_demo.entity.User;
import org.hlrj.duobao_demo.mapper.UserMapper;
import org.hlrj.duobao_demo.service.IUserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* <p>
* 服务实现类
* </p>
*
* @author liuyusong
* @since 2025-04-14
*/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
@Autowired
private UserMapper userMapper;
@Override
public User login(User user) {
return userMapper.getUserByUsernameAndPassword(user);
}
}

11
src/main/java/org/hlrj/duobao_demo/service/impl/VideoDataServiceImpl.java

@ -21,6 +21,7 @@ import java.util.List;
*/
@Service
public class VideoDataServiceImpl extends ServiceImpl<VideoDataMapper, VideoData> implements IVideoDataService {
@Autowired
private VideoDataMapper videoDataMapper;
@Override
@ -28,4 +29,14 @@ public class VideoDataServiceImpl extends ServiceImpl<VideoDataMapper, VideoData
QueryWrapper<VideoData> queryWrapper = new QueryWrapper<>();
return videoDataMapper.selectList(queryWrapper);
}
@Override
public void delete(Integer id) {
videoDataMapper.deleteById(id);
}
@Override
public void isBooked(Integer id) {
videoDataMapper.isBookedById(id);
}
}

35
src/main/java/org/hlrj/duobao_demo/tool/CorsConfig.java

@ -0,0 +1,35 @@
package org.hlrj.duobao_demo.tool;
/**
* @program: duobao_demo
* @ClassName CorsConfig
* @description: 跨域所用到的跨域类
* @author:liuyusong
* @create: 202504-14 19:02
* @Version 1.0
**/
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
@Configuration
public class CorsConfig {
// 当前跨域请求最大有效时长这里默认1天
private static final long MAX_AGE = 24 * 60 * 60;
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedOrigin("*"); // 1 设置访问源地址
corsConfiguration.addAllowedHeader("*"); // 2 设置访问源请求头
corsConfiguration.addAllowedMethod("*"); // 3 设置访问源请求方法
corsConfiguration.setMaxAge(MAX_AGE);
source.registerCorsConfiguration("/**", corsConfiguration); // 4 对接口配置跨域设置
return new CorsFilter(source);
}
}

34
src/main/java/org/hlrj/duobao_demo/tool/DomoFilter.java

@ -0,0 +1,34 @@
package org.hlrj.duobao_demo.tool;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
/**
* @program: duobao_demo
* @ClassName DomoFilter
* @description:
* @author:liuyusong
* @create: 202504-14 15:43
* @Version 1.0
**/
@WebFilter(urlPatterns="/*")
public class DomoFilter implements Filter {
@Override//初始化方法只调用一次
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("init,初始化方法执行了");
}
@Override//拦截到请求之后调用调用多次
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
filterChain.doFilter(servletRequest, servletResponse);
}
@Override//销毁方法只能调用一次
public void destroy() {
System.out.println("destroy 销毁方法执行了");
}
}

46
src/main/java/org/hlrj/duobao_demo/tool/JwtUtils.java

@ -0,0 +1,46 @@
package org.hlrj.duobao_demo.tool;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.Map;
/**
* @program: duobao_demo
* @ClassName JwtUtils
* @description:
* @author:liuyusong
* @create: 202504-14 14:38
* @Version 1.0
**/
public class JwtUtils {
private static String singKey="hongli";//签名密钥
private static Long expire = 30*60*1000L;//设置过期时间为半小时
/**
* 生成JWT令牌
* @param claims
* @return
*/
public static String generateJwt(Map<String, Object> claims){
String jwt = Jwts.builder()
.addClaims(claims)
.signWith(SignatureAlgorithm.HS256,singKey)
.setExpiration(new Date(System.currentTimeMillis()+expire))
.compact();
return jwt;
}
public static Claims parseJwt(String jwt){
Claims claims = Jwts.parser()
.setSigningKey(singKey)
.parseClaimsJws(jwt)
.getBody();
return claims;
}
}

58
src/main/java/org/hlrj/duobao_demo/tool/RedisConfig.java

@ -0,0 +1,58 @@
package org.hlrj.duobao_demo.tool;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import java.net.UnknownHostException;
/**
* @program: duobao_demo
* @ClassName RedisConfig
* @description:
* @author:liuyusong
* @create: 202504-11 15:46
* @Version 1.0
**/
@Configuration
public class RedisConfig {
@Bean
@ConditionalOnMissingBean(name = "redisTemplate")
public RedisTemplate<String, Object> redisTemplate(
RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(redisConnectionFactory);
template.setKeySerializer(jackson2JsonRedisSerializer);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.setHashKeySerializer(jackson2JsonRedisSerializer);
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
@Bean
@ConditionalOnMissingBean(StringRedisTemplate.class)
public StringRedisTemplate stringRedisTemplate(
RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
}

3
src/main/java/org/hlrj/duobao_demo/tool/Result.java

@ -29,6 +29,7 @@ public class Result {
return new Result(200, "success", data);
}
public static Result success(String msg) {
return new Result(400,"msg",null);
return new Result(200,"msg",msg);
}
public static Result error(String msg) {return new Result(400,"msg",msg);}
}

6
src/main/resources/application.properties

@ -1,8 +1,14 @@
# 应用服务 WEB 访问端口
server.port=8080
#<<<<<<< HEAD
spring.datasource.url=jdbc:mysql://localhost:3306/duobao?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#=======
#>>>>>>> 3430379550bce337a88771020e4a1dfb7cbf7dd7
spring.redis.host=localhost
spring.redis.port=6379

89
src/main/resources/mapper/RecommendationMapper.xml

@ -13,6 +13,95 @@
<result column="comments" property="comments" />
<result column="shares" property="shares" />
<result column="source" property="source" />
<result column="head" property="head"/>
<result column="is_liked" property="isLiked"/>
</resultMap>
<!-- &lt;!&ndash;点赞操作&ndash;&gt;-->
<!-- <update id="addLike" parameterType="org.hlrj.duobao_demo.entity.Recommendation">-->
<!-- update Recommendation-->
<!-- <set>-->
<!-- <if test="imageUrl !=null and imageUrl!=''">-->
<!-- image_url=#{imageUrl},-->
<!-- </if>-->
<!-- <if test="title !=null and title!=''">-->
<!-- title=#{title},-->
<!-- </if>-->
<!-- <if test="author !=null and author!=''">-->
<!-- author=#{author},-->
<!-- </if>-->
<!-- <if test="publishTime !=null">-->
<!-- publish_time=#{publishTime},-->
<!-- </if>-->
<!-- <if test="comments !=null and comments!=''">-->
<!-- comments=#{comments},-->
<!-- </if>-->
<!-- <if test="shares !=null">-->
<!-- shares=#{shares},-->
<!-- </if>-->
<!-- <if test="source !=null">-->
<!-- source=#{source},-->
<!-- </if>-->
<!-- <if test="head !=null and head!=''">-->
<!-- head=#{head},-->
<!-- </if>-->
<!-- likes = likes + 1-->
<!-- </set>-->
<!-- where id = #{id}-->
<!-- </update>-->
<!--更新操作-->
<update id="updateRecommendation" parameterType="org.hlrj.duobao_demo.entity.Recommendation">
update Recommendation
<set>
<if test="imageUrl !=null and imageUrl!=''">
image_url=#{imageUrl},
</if>
<if test="title !=null and title!=''">
title=#{title},
</if>
<if test="author !=null and author!=''">
author=#{author},
</if>
<if test="publishTime !=null and publishTime!=''">
publish_time=#{publishTime},
</if>
<if test="likes !=null">
likes=#{likes},
</if>
<if test="comments !=null and comments!=''">
comments=#{comments},
</if>
<if test="shares !=null">
shares=#{shares},
</if>
<if test="source !=null">
source=#{source},
</if>
<if test="head !=null and head!=''">
head=#{head},
</if>
<if test="isLiked !=null and isLiked!=''">
isLiked=#{isLiked}
</if>
</set>
where id = #{id}
</update>
<update id="isLikedById" parameterType="java.lang.Integer">
UPDATE Recommendation
SET
is_liked = CASE
WHEN is_liked = 0 THEN 1
ELSE 0
END,
likes = CASE
WHEN is_liked = 0 THEN likes + 1
ELSE likes - 1
END
WHERE id = #{id}
</update>
</mapper>

52
src/main/resources/mapper/SpecialTopicMapper.xml

@ -13,6 +13,58 @@
<result column="view_count" property="viewCount" />
<result column="comment_count" property="commentCount" />
<result column="like_count" property="likeCount" />
<result column="club" property="club"/>
<result column="is_liked" property="isLiked"/>
</resultMap>
<update id="isLikedById" parameterType="java.lang.Integer">
UPDATE Special_topic
SET
is_liked = CASE
WHEN is_liked = 0 THEN 1
ELSE 0
END,
like_count = CASE
WHEN is_liked = 0 THEN like_count + 1
ELSE like_count - 1
END
WHERE id = #{id}
</update>
<!-- &lt;!&ndash;点赞操作&ndash;&gt;-->
<!-- <update id="addLike" parameterType="org.hlrj.duobao_demo.entity.SpecialTopic">-->
<!-- update Special_topic-->
<!-- <set>-->
<!-- <if test="mainTitle !=null and mainTitle!=''">-->
<!-- main_title=#{mainTitle},-->
<!-- </if>-->
<!-- <if test="sectionTitle !=null and sectionTitle!=''">-->
<!-- section_title=#{sectionTitle},-->
<!-- </if>-->
<!-- <if test="coverImg !=null and coverImg!=''">-->
<!-- cover_img=#{coverImg},-->
<!-- </if>-->
<!-- <if test="author !=null and author!=''">-->
<!-- author=#{author},-->
<!-- </if>-->
<!-- <if test="publishTime !=null and publishTime!=''">-->
<!-- publish_time=#{publishTime},-->
<!-- </if>-->
<!-- <if test="viewCount !=null">-->
<!-- view_count=#{viewCount},-->
<!-- </if>-->
<!-- <if test="commentCount !=null">-->
<!-- commentCount=#{commentCount},-->
<!-- </if>-->
<!-- <if test="club !=null and club!=''">-->
<!-- club=#{club},-->
<!-- </if>-->
<!-- <if test="head !=null and head!=''">-->
<!-- head=#{head},-->
<!-- </if>-->
<!-- like_count = like_count + 1-->
<!-- </set>-->
<!-- where id = #{id}-->
<!-- </update>-->
</mapper>

25
src/main/resources/mapper/UserMapper.xml

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.hlrj.duobao_demo.mapper.UserMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="org.hlrj.duobao_demo.entity.User">
<id column="userid" property="userid" />
<result column="username" property="username" />
<result column="password" property="password" />
<result column="createTime" property="createTime" />
</resultMap>
<select id="getUserByUsernameAndPassword" resultMap="BaseResultMap" parameterType="org.hlrj.duobao_demo.entity.User">
SELECT
userid,
username,
password,
createTime
FROM
user
WHERE
username = #{username}
AND
password = #{password}
</select>
</mapper>

26
src/main/resources/mapper/VideoDateMapper.xml

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.hlrj.duobao_demo.mapper.VideoDataMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="org.hlrj.duobao_demo.entity.VideoData">
<id column="id" property="id" />
<result column="main_title" property="mainTitle" />
<result column="section_title" property="sectionTitle" />
<result column="cover_img" property="coverImg" />
<result column="author" property="author" />
<result column="publish_time" property="publishTime" />
<result column="description" property="description" />
<result column="head" property="head"/>
<result column="is_booked" property="isBooked"/>
</resultMap>
<update id="isBookedById" parameterType="java.lang.Integer">
UPDATE Video_data
SET is_booked = CASE
WHEN is_booked = 0 THEN 1
ELSE 0
END
WHERE id = #{id}
</update>
</mapper>

20
src/test/java/org/hlrj/duobao_demo/DuobaoDemoApplicationTests.java

@ -1,13 +1,33 @@
package org.hlrj.duobao_demo;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@SpringBootTest
class DuobaoDemoApplicationTests {
@Test
void contextLoads() {
}
/* @Test
public void testGenJwt(){
Map<String,Object> map=new HashMap<>();
map.put("id",1);
map.put("name","liuyusong");
String jwt = Jwts.builder()
.signWith(SignatureAlgorithm.HS256,"hongli")//签名算法
.setClaims(map)//自定义内容有效载荷
.setExpiration(new Date(System.currentTimeMillis()+3600*1000))//设置有效期为一个小时
.compact();
System.out.println(jwt);
}*/
}
Loading…
Cancel
Save