From 3718f5dac2aa961f23bb3e4c9360b0efea63bd75 Mon Sep 17 00:00:00 2001 From: Administrator Date: Sat, 19 Apr 2025 18:27:51 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=E5=88=98=E7=8E=89=E6=9D=BE?= =?UTF-8?q?=E5=88=86=E6=94=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 21 ++++- .../hlrj/duobao_demo/DuobaoDemoApplication.java | 4 + .../controller/CuratedVideoController.java | 31 +++++-- .../duobao_demo/controller/LoginController.java | 47 +++++++++++ .../controller/RecommendationController.java | 95 ++++++++++++++++++++-- .../controller/SpecialTopicController.java | 58 +++++++++++-- .../controller/VideoDataController.java | 20 ++++- .../java/org/hlrj/duobao_demo/entity/PageBean.java | 24 ++++++ .../hlrj/duobao_demo/entity/Recommendation.java | 8 +- .../org/hlrj/duobao_demo/entity/SpecialTopic.java | 7 ++ .../java/org/hlrj/duobao_demo/entity/User.java | 45 ++++++++++ .../org/hlrj/duobao_demo/entity/VideoData.java | 18 ++-- .../duobao_demo/mapper/RecommendationMapper.java | 11 +++ .../duobao_demo/mapper/SpecialTopicMapper.java | 3 + .../org/hlrj/duobao_demo/mapper/UserMapper.java | 17 ++++ .../hlrj/duobao_demo/mapper/VideoDataMapper.java | 1 + .../duobao_demo/service/ICuratedVideoService.java | 15 ++++ .../service/IRecommendationService.java | 29 +++++++ .../duobao_demo/service/ISpecialTopicService.java | 20 +++++ .../org/hlrj/duobao_demo/service/IUserService.java | 21 +++++ .../duobao_demo/service/IVideoDataService.java | 12 +++ .../service/impl/CuratedVideoServiceImpl.java | 10 +++ .../service/impl/RecommendationServiceImpl.java | 30 +++++++ .../service/impl/SpecialTopicServiceImpl.java | 17 ++++ .../duobao_demo/service/impl/UserServiceImpl.java | 28 +++++++ .../service/impl/VideoDataServiceImpl.java | 11 +++ .../java/org/hlrj/duobao_demo/tool/CorsConfig.java | 35 ++++++++ .../java/org/hlrj/duobao_demo/tool/DomoFilter.java | 34 ++++++++ .../java/org/hlrj/duobao_demo/tool/JwtUtils.java | 46 +++++++++++ .../org/hlrj/duobao_demo/tool/RedisConfig.java | 58 +++++++++++++ .../java/org/hlrj/duobao_demo/tool/Result.java | 3 +- src/main/resources/application.properties | 6 ++ src/main/resources/mapper/RecommendationMapper.xml | 89 ++++++++++++++++++++ src/main/resources/mapper/SpecialTopicMapper.xml | 52 ++++++++++++ src/main/resources/mapper/UserMapper.xml | 25 ++++++ src/main/resources/mapper/VideoDateMapper.xml | 26 ++++++ .../duobao_demo/DuobaoDemoApplicationTests.java | 20 +++++ 37 files changed, 964 insertions(+), 33 deletions(-) create mode 100644 src/main/java/org/hlrj/duobao_demo/controller/LoginController.java create mode 100644 src/main/java/org/hlrj/duobao_demo/entity/PageBean.java create mode 100644 src/main/java/org/hlrj/duobao_demo/entity/User.java create mode 100644 src/main/java/org/hlrj/duobao_demo/mapper/UserMapper.java create mode 100644 src/main/java/org/hlrj/duobao_demo/service/IUserService.java create mode 100644 src/main/java/org/hlrj/duobao_demo/service/impl/UserServiceImpl.java create mode 100644 src/main/java/org/hlrj/duobao_demo/tool/CorsConfig.java create mode 100644 src/main/java/org/hlrj/duobao_demo/tool/DomoFilter.java create mode 100644 src/main/java/org/hlrj/duobao_demo/tool/JwtUtils.java create mode 100644 src/main/java/org/hlrj/duobao_demo/tool/RedisConfig.java create mode 100644 src/main/resources/mapper/UserMapper.xml create mode 100644 src/main/resources/mapper/VideoDateMapper.xml diff --git a/pom.xml b/pom.xml index 52cba82..51dda5f 100644 --- a/pom.xml +++ b/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"> 4.0.0 org.hlrj + duobao_demo 0.0.1-SNAPSHOT duobao_demo duobao_demo + 1.8 UTF-8 @@ -38,6 +40,7 @@ spring-boot-starter-test test + com.baomidou @@ -56,8 +59,22 @@ 2.9.2 + + + org.springframework.boot + spring-boot-starter-data-redis + + + + io.jsonwebtoken + jjwt + 0.9.1 + - + + org.springframework.boot + spring-boot-starter-data-jpa + @@ -89,7 +106,9 @@ spring-boot-maven-plugin ${spring-boot.version} + org.hlrj.duobao_demo.DuobaoDemoApplication + true diff --git a/src/main/java/org/hlrj/duobao_demo/DuobaoDemoApplication.java b/src/main/java/org/hlrj/duobao_demo/DuobaoDemoApplication.java index 1739a1a..74d97bf 100644 --- a/src/main/java/org/hlrj/duobao_demo/DuobaoDemoApplication.java +++ b/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 { diff --git a/src/main/java/org/hlrj/duobao_demo/controller/CuratedVideoController.java b/src/main/java/org/hlrj/duobao_demo/controller/CuratedVideoController.java index b1cb0be..015b3d0 100644 --- a/src/main/java/org/hlrj/duobao_demo/controller/CuratedVideoController.java +++ b/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); + } + + } diff --git a/src/main/java/org/hlrj/duobao_demo/controller/LoginController.java b/src/main/java/org/hlrj/duobao_demo/controller/LoginController.java new file mode 100644 index 0000000..0b67795 --- /dev/null +++ b/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: 2025−04-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 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("用户名或者密码错误"); + } +} diff --git a/src/main/java/org/hlrj/duobao_demo/controller/RecommendationController.java b/src/main/java/org/hlrj/duobao_demo/controller/RecommendationController.java index b6bd558..1b93612 100644 --- a/src/main/java/org/hlrj/duobao_demo/controller/RecommendationController.java +++ b/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; /** *

@@ -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); + + }*/ } diff --git a/src/main/java/org/hlrj/duobao_demo/controller/SpecialTopicController.java b/src/main/java/org/hlrj/duobao_demo/controller/SpecialTopicController.java index 562da3b..5203b63 100644 --- a/src/main/java/org/hlrj/duobao_demo/controller/SpecialTopicController.java +++ b/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=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(); + } } diff --git a/src/main/java/org/hlrj/duobao_demo/controller/VideoDataController.java b/src/main/java/org/hlrj/duobao_demo/controller/VideoDataController.java index d21f0ad..3fb036a 100644 --- a/src/main/java/org/hlrj/duobao_demo/controller/VideoDataController.java +++ b/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=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(); + } } diff --git a/src/main/java/org/hlrj/duobao_demo/entity/PageBean.java b/src/main/java/org/hlrj/duobao_demo/entity/PageBean.java new file mode 100644 index 0000000..ae2437e --- /dev/null +++ b/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: 2025−04-10 14:37 + * @Version 1.0 + **/ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class PageBean { + + private Long total;//总记录数 + private List rows;//数据列表 +} diff --git a/src/main/java/org/hlrj/duobao_demo/entity/Recommendation.java b/src/main/java/org/hlrj/duobao_demo/entity/Recommendation.java index f05d485..095e047 100644 --- a/src/main/java/org/hlrj/duobao_demo/entity/Recommendation.java +++ b/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; } diff --git a/src/main/java/org/hlrj/duobao_demo/entity/SpecialTopic.java b/src/main/java/org/hlrj/duobao_demo/entity/SpecialTopic.java index bb5fb08..ea853b2 100644 --- a/src/main/java/org/hlrj/duobao_demo/entity/SpecialTopic.java +++ b/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; } diff --git a/src/main/java/org/hlrj/duobao_demo/entity/User.java b/src/main/java/org/hlrj/duobao_demo/entity/User.java new file mode 100644 index 0000000..6022957 --- /dev/null +++ b/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; + +/** + *

+ * + *

+ * + * @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; + + +} diff --git a/src/main/java/org/hlrj/duobao_demo/entity/VideoData.java b/src/main/java/org/hlrj/duobao_demo/entity/VideoData.java index 81437bb..de0bae7 100644 --- a/src/main/java/org/hlrj/duobao_demo/entity/VideoData.java +++ b/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;//是否预约 } diff --git a/src/main/java/org/hlrj/duobao_demo/mapper/RecommendationMapper.java b/src/main/java/org/hlrj/duobao_demo/mapper/RecommendationMapper.java index 47978d1..a97f109 100644 --- a/src/main/java/org/hlrj/duobao_demo/mapper/RecommendationMapper.java +++ b/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 { + + void updateRecommendation(Recommendation recommendation); + + void addLike(Recommendation recommendation); + + void isLikedById(Integer id); } diff --git a/src/main/java/org/hlrj/duobao_demo/mapper/SpecialTopicMapper.java b/src/main/java/org/hlrj/duobao_demo/mapper/SpecialTopicMapper.java index 997a1ef..c816b37 100644 --- a/src/main/java/org/hlrj/duobao_demo/mapper/SpecialTopicMapper.java +++ b/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 { + + + void isLikedById(Integer id); } diff --git a/src/main/java/org/hlrj/duobao_demo/mapper/UserMapper.java b/src/main/java/org/hlrj/duobao_demo/mapper/UserMapper.java new file mode 100644 index 0000000..bb5c242 --- /dev/null +++ b/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; + +/** + *

+ * Mapper 接口 + *

+ * + * @author liuyusong + * @since 2025-04-14 + */ +public interface UserMapper extends BaseMapper { + + public User getUserByUsernameAndPassword(User user); +} diff --git a/src/main/java/org/hlrj/duobao_demo/mapper/VideoDataMapper.java b/src/main/java/org/hlrj/duobao_demo/mapper/VideoDataMapper.java index 3b43d9c..9e3a8ab 100644 --- a/src/main/java/org/hlrj/duobao_demo/mapper/VideoDataMapper.java +++ b/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 { + void isBookedById(Integer id); } diff --git a/src/main/java/org/hlrj/duobao_demo/service/ICuratedVideoService.java b/src/main/java/org/hlrj/duobao_demo/service/ICuratedVideoService.java index d71c00e..29c11d8 100644 --- a/src/main/java/org/hlrj/duobao_demo/service/ICuratedVideoService.java +++ b/src/main/java/org/hlrj/duobao_demo/service/ICuratedVideoService.java @@ -19,4 +19,19 @@ public interface ICuratedVideoService extends IService { * @return */ public List select(); + + /** + * 根据id删除精选 + * @param id + */ + public void delete(Integer id); + + /** + * 根据id查询数据 + * @param id + * @return + */ + public CuratedVideo selectById(Integer id); + + } diff --git a/src/main/java/org/hlrj/duobao_demo/service/IRecommendationService.java b/src/main/java/org/hlrj/duobao_demo/service/IRecommendationService.java index c4d1477..f31de04 100644 --- a/src/main/java/org/hlrj/duobao_demo/service/IRecommendationService.java +++ b/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; /** *

@@ -19,4 +20,32 @@ public interface IRecommendationService extends IService { * @return */ public List 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); } diff --git a/src/main/java/org/hlrj/duobao_demo/service/ISpecialTopicService.java b/src/main/java/org/hlrj/duobao_demo/service/ISpecialTopicService.java index 9823317..52a2bbe 100644 --- a/src/main/java/org/hlrj/duobao_demo/service/ISpecialTopicService.java +++ b/src/main/java/org/hlrj/duobao_demo/service/ISpecialTopicService.java @@ -19,4 +19,24 @@ public interface ISpecialTopicService extends IService { * @return */ public List 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); } diff --git a/src/main/java/org/hlrj/duobao_demo/service/IUserService.java b/src/main/java/org/hlrj/duobao_demo/service/IUserService.java new file mode 100644 index 0000000..1751012 --- /dev/null +++ b/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; + +/** + *

+ * 服务类 + *

+ * + * @author liuyusong + * @since 2025-04-14 + */ +public interface IUserService extends IService { + /** + * 用户登录 + * @param user + * @return + */ + public User login(User user); +} diff --git a/src/main/java/org/hlrj/duobao_demo/service/IVideoDataService.java b/src/main/java/org/hlrj/duobao_demo/service/IVideoDataService.java index cebf29c..4057b8a 100644 --- a/src/main/java/org/hlrj/duobao_demo/service/IVideoDataService.java +++ b/src/main/java/org/hlrj/duobao_demo/service/IVideoDataService.java @@ -19,4 +19,16 @@ public interface IVideoDataService extends IService { * @return */ public List select(); + + /** + * 根据id删除直播 + * @param id + */ + public void delete(Integer id); + + /** + * 根据id进行预订 + * @param id + */ + public void isBooked(Integer id); } diff --git a/src/main/java/org/hlrj/duobao_demo/service/impl/CuratedVideoServiceImpl.java b/src/main/java/org/hlrj/duobao_demo/service/impl/CuratedVideoServiceImpl.java index 44f6e8a..a7b85b9 100644 --- a/src/main/java/org/hlrj/duobao_demo/service/impl/CuratedVideoServiceImpl.java +++ b/src/main/java/org/hlrj/duobao_demo/service/impl/CuratedVideoServiceImpl.java @@ -30,4 +30,14 @@ public class CuratedVideoServiceImpl extends ServiceImpl 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); + } } diff --git a/src/main/java/org/hlrj/duobao_demo/service/impl/RecommendationServiceImpl.java b/src/main/java/org/hlrj/duobao_demo/service/impl/RecommendationServiceImpl.java index 09880d7..9988804 100644 --- a/src/main/java/org/hlrj/duobao_demo/service/impl/RecommendationServiceImpl.java +++ b/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; /** *

@@ -28,4 +31,31 @@ public class RecommendationServiceImpl extends ServiceImpl 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); + } + + + + } diff --git a/src/main/java/org/hlrj/duobao_demo/service/impl/SpecialTopicServiceImpl.java b/src/main/java/org/hlrj/duobao_demo/service/impl/SpecialTopicServiceImpl.java index 2cdc87f..2b6558e 100644 --- a/src/main/java/org/hlrj/duobao_demo/service/impl/SpecialTopicServiceImpl.java +++ b/src/main/java/org/hlrj/duobao_demo/service/impl/SpecialTopicServiceImpl.java @@ -28,4 +28,21 @@ public class SpecialTopicServiceImpl extends ServiceImpl 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); + } + + } diff --git a/src/main/java/org/hlrj/duobao_demo/service/impl/UserServiceImpl.java b/src/main/java/org/hlrj/duobao_demo/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..a5491ae --- /dev/null +++ b/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; + +/** + *

+ * 服务实现类 + *

+ * + * @author liuyusong + * @since 2025-04-14 + */ +@Service +public class UserServiceImpl extends ServiceImpl implements IUserService { + + @Autowired + private UserMapper userMapper; + + @Override + public User login(User user) { + return userMapper.getUserByUsernameAndPassword(user); + } +} diff --git a/src/main/java/org/hlrj/duobao_demo/service/impl/VideoDataServiceImpl.java b/src/main/java/org/hlrj/duobao_demo/service/impl/VideoDataServiceImpl.java index 425c4b0..ff18770 100644 --- a/src/main/java/org/hlrj/duobao_demo/service/impl/VideoDataServiceImpl.java +++ b/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 implements IVideoDataService { + @Autowired private VideoDataMapper videoDataMapper; @Override @@ -28,4 +29,14 @@ public class VideoDataServiceImpl extends ServiceImpl 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); + } } diff --git a/src/main/java/org/hlrj/duobao_demo/tool/CorsConfig.java b/src/main/java/org/hlrj/duobao_demo/tool/CorsConfig.java new file mode 100644 index 0000000..0dd5ccf --- /dev/null +++ b/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: 2025−04-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); + } +} diff --git a/src/main/java/org/hlrj/duobao_demo/tool/DomoFilter.java b/src/main/java/org/hlrj/duobao_demo/tool/DomoFilter.java new file mode 100644 index 0000000..1ffe759 --- /dev/null +++ b/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: 2025−04-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 销毁方法执行了"); + } +} diff --git a/src/main/java/org/hlrj/duobao_demo/tool/JwtUtils.java b/src/main/java/org/hlrj/duobao_demo/tool/JwtUtils.java new file mode 100644 index 0000000..9404196 --- /dev/null +++ b/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: 2025−04-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 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; + } +} diff --git a/src/main/java/org/hlrj/duobao_demo/tool/RedisConfig.java b/src/main/java/org/hlrj/duobao_demo/tool/RedisConfig.java new file mode 100644 index 0000000..3924739 --- /dev/null +++ b/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: 2025−04-11 15:46 + * @Version 1.0 + **/ +@Configuration +public class RedisConfig { + @Bean + @ConditionalOnMissingBean(name = "redisTemplate") + public RedisTemplate redisTemplate( + RedisConnectionFactory redisConnectionFactory) + throws UnknownHostException { + + Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); + ObjectMapper om = new ObjectMapper(); + om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); + jackson2JsonRedisSerializer.setObjectMapper(om); + + RedisTemplate template = new RedisTemplate(); + 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; + } +} diff --git a/src/main/java/org/hlrj/duobao_demo/tool/Result.java b/src/main/java/org/hlrj/duobao_demo/tool/Result.java index 40b604e..f783267 100644 --- a/src/main/java/org/hlrj/duobao_demo/tool/Result.java +++ b/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);} } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 501a6e0..68c274e 100644 --- a/src/main/resources/application.properties +++ b/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 diff --git a/src/main/resources/mapper/RecommendationMapper.xml b/src/main/resources/mapper/RecommendationMapper.xml index 402152b..fdc57dc 100644 --- a/src/main/resources/mapper/RecommendationMapper.xml +++ b/src/main/resources/mapper/RecommendationMapper.xml @@ -13,6 +13,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + update Recommendation + + + image_url=#{imageUrl}, + + + title=#{title}, + + + author=#{author}, + + + publish_time=#{publishTime}, + + + likes=#{likes}, + + + comments=#{comments}, + + + shares=#{shares}, + + + source=#{source}, + + + head=#{head}, + + + isLiked=#{isLiked} + + + + + where id = #{id} + + + + 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} + + diff --git a/src/main/resources/mapper/SpecialTopicMapper.xml b/src/main/resources/mapper/SpecialTopicMapper.xml index a9bbd63..840aa59 100644 --- a/src/main/resources/mapper/SpecialTopicMapper.xml +++ b/src/main/resources/mapper/SpecialTopicMapper.xml @@ -13,6 +13,58 @@ + + + + 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} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml new file mode 100644 index 0000000..251100f --- /dev/null +++ b/src/main/resources/mapper/UserMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/VideoDateMapper.xml b/src/main/resources/mapper/VideoDateMapper.xml new file mode 100644 index 0000000..38cc8b2 --- /dev/null +++ b/src/main/resources/mapper/VideoDateMapper.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + UPDATE Video_data + SET is_booked = CASE + WHEN is_booked = 0 THEN 1 + ELSE 0 + END + WHERE id = #{id} + + + diff --git a/src/test/java/org/hlrj/duobao_demo/DuobaoDemoApplicationTests.java b/src/test/java/org/hlrj/duobao_demo/DuobaoDemoApplicationTests.java index 03a9a9a..16c1e33 100644 --- a/src/test/java/org/hlrj/duobao_demo/DuobaoDemoApplicationTests.java +++ b/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 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); + }*/ + }