提交 bb4b113c 作者: xiaowang 提交者: 余乾开

论坛相关

上级 f6088f6d
...@@ -8,6 +8,8 @@ import lombok.Builder; ...@@ -8,6 +8,8 @@ import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.util.List;
/** /**
* @Author LW * @Author LW
* *
...@@ -25,11 +27,14 @@ public class DynamicInfoDTO { ...@@ -25,11 +27,14 @@ public class DynamicInfoDTO {
private String description; private String description;
@ApiModelProperty(value = "图片/视频") @ApiModelProperty(value = "图片/视频")
private MediaVO mediaVO; private List<MediaVO> mediaVO;
@ApiModelProperty(value = "show: 0显示 1隐藏") @ApiModelProperty(value = "show: 0显示 1隐藏")
private Integer show; private Integer show;
@ApiModelProperty(value = "发布动态用户信息") @ApiModelProperty(value = "发布动态用户信息")
private UserBaseInfoVO userBaseInfo; private UserBaseInfoVO userBaseInfo;
@ApiModelProperty(value = "用户id")
private Integer userAccountId;
} }
...@@ -10,22 +10,29 @@ import java.io.Serializable; ...@@ -10,22 +10,29 @@ import java.io.Serializable;
/** /**
* @Author LW * @Author LW
* @date 2023/6/19 11:12 *
* 概要: * @date 2023/6/19 11:12 概要:
*/ */
@Data @Data
public class DynamicQO implements Serializable { public class DynamicQO implements Serializable {
@ApiModelProperty(value = "关键字", required = true,example = "作者") @ApiModelProperty(value = "关键字", required = false, example = "作者")
private String keyword; private String keyword;
@ApiModelProperty(value = "页码", required = true,example = "1")
@NotNull(message = "页码不能为空", groups = { Page.class }) @ApiModelProperty(value = "页码", required = true, example = "1")
@Min(value = 1, groups = Page.class) @NotNull(
private Integer pageNo; message = "页码不能为空",
@ApiModelProperty(value = "每页显示数", required = true,example = "10") groups = {Page.class})
@NotNull(message = "每页显示数不能为空", groups = { Page.class }) @Min(value = 1, groups = Page.class)
@Min(value = 1, groups = Page.class) private Integer pageNo;
private Integer pageSize;
public void buildCurrentPage() { @ApiModelProperty(value = "每页显示数", required = true, example = "10")
this.pageNo = (pageNo - 1) * pageSize; @NotNull(
} message = "每页显示数不能为空",
groups = {Page.class})
@Min(value = 1, groups = Page.class)
private Integer pageSize;
public void buildCurrentPage() {
this.pageNo = (pageNo - 1) * pageSize;
}
} }
...@@ -12,29 +12,28 @@ import java.util.List; ...@@ -12,29 +12,28 @@ import java.util.List;
/** /**
* @Author LW * @Author LW
* @date 2023/5/15 10:29 *
* 概要:评论信息参数 * @date 2023/5/15 10:29 概要:评论信息参数
*/ */
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Builder @Builder
public class CommentAndReplyVO implements Serializable { public class CommentAndReplyVO implements Serializable {
@ApiModelProperty(value = "评论id") @ApiModelProperty(value = "评论id")
private Integer id; private Integer id;
@ApiModelProperty(value = "动态id")
private Integer dynamicId; @ApiModelProperty(value = "用户信息")
@ApiModelProperty(value = "父级评论id") private UserBaseInfoVO userBaseInfoVO;
private Integer parentId;
@ApiModelProperty(value = "动态发布人的id") @ApiModelProperty(value = "评论内容")
private Integer userId; private String content;
@ApiModelProperty(value = "用户信息")
private UserBaseInfoVO userBaseInfoVO; @ApiModelProperty(value = "评论点赞数")
@ApiModelProperty(value = "评论内容") private Integer likesCount;
private String content;
@ApiModelProperty(value = "评论点赞数") @ApiModelProperty(value = "评论时间")
private Integer likesCount; private Date createTime;
@ApiModelProperty(value = "评论时间")
private Date createTime; private List<CommentAndReplyVO> children;
private List<CommentAndReplyVO> children;
} }
...@@ -10,20 +10,20 @@ import java.io.Serializable; ...@@ -10,20 +10,20 @@ import java.io.Serializable;
/** /**
* @Author LW * @Author LW
* @date 2023/5/15 10:29 *
* 概要:评论信息参数 * @date 2023/5/15 10:29 概要:评论信息参数
*/ */
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Builder @Builder
public class CommentVO implements Serializable { public class CommentVO implements Serializable {
@ApiModelProperty(value = "评论id") @ApiModelProperty(value = "根节点路径")
private Integer id; private String rootPath;
@ApiModelProperty(value = "动态id")
private Integer dynamicId; @ApiModelProperty(value = "动态id")
@ApiModelProperty(value = "父级评论id(不传则是评论动态 传了则是回复评论)") private Integer dynamicId;
private Integer parentId;
@ApiModelProperty(value = "评论内容") @ApiModelProperty(value = "评论内容")
private String content; private String content;
} }
...@@ -13,38 +13,50 @@ import java.util.List; ...@@ -13,38 +13,50 @@ import java.util.List;
/** /**
* @Author LW * @Author LW
* @date 2023/5/15 10:29 *
* 概要:动态信息参数 * @date 2023/5/15 10:29 概要:动态信息参数
*/ */
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Builder @Builder
public class DynamicVO implements Serializable { public class DynamicVO implements Serializable {
@ApiModelProperty(value = "发布动态用户信息") @ApiModelProperty(value = "发布动态用户信息")
private UserBaseInfoVO userBaseInfo; private UserBaseInfoVO userBaseInfo;
@ApiModelProperty(value = "动态id")
private Integer id; @ApiModelProperty(value = "用户id")
@ApiModelProperty(value = "动态标题") private Integer userAccountId;
private String title;
@ApiModelProperty(value = "动态描述") @ApiModelProperty(value = "动态id")
private String description; private Integer id;
@ApiModelProperty(value = "位置信息")
private String location; @ApiModelProperty(value = "动态描述")
@ApiModelProperty(value = "纬度") private String description;
private BigDecimal lat;
@ApiModelProperty(value = "经度") @ApiModelProperty(value = "位置信息")
private BigDecimal lon; private String location;
@ApiModelProperty(value = "图片/视频")
private MediaVO mediaVO; @ApiModelProperty(value = "纬度")
@ApiModelProperty(value = "点赞数") private BigDecimal lat;
private Integer likesCount;
@ApiModelProperty(value = "评论数") @ApiModelProperty(value = "经度")
private Integer commentCount; private BigDecimal lon;
@ApiModelProperty(value = "是否点赞")
private Boolean likes; @ApiModelProperty(value = "媒体资源")
@ApiModelProperty(value = "动态发布时间") private List<MediaVO> mediaVO;
private Date dynamicPublishTime;
@ApiModelProperty(value = "评论信息") @ApiModelProperty(value = "点赞数")
private List<CommentAndReplyVO> commentAndReplyVO; private Integer likesCount;
@ApiModelProperty(value = "评论数")
private Integer commentCount;
@ApiModelProperty(value = "是否点赞")
private Boolean likes;
@ApiModelProperty(value = "动态发布时间")
private Date dynamicPublishTime;
@ApiModelProperty(value = "评论信息")
private List<DynamicVO> commentAndReplyVO;
} }
...@@ -2,24 +2,25 @@ package com.mmc.csf.release.forum.vo; ...@@ -2,24 +2,25 @@ package com.mmc.csf.release.forum.vo;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.io.Serializable; import java.io.Serializable;
import java.util.List;
/** /**
* @Author LW * @Author LW
* @date 2023/5/16 10:42 *
* 概要:图片或影像 * @date 2023/5/16 10:42 概要:图片或影像
*/ */
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Builder
public class MediaVO implements Serializable { public class MediaVO implements Serializable {
@ApiModelProperty("图片") @ApiModelProperty("url")
private List<String> picture; private String url;
@ApiModelProperty("视频")
private String videoUrl;
@ApiModelProperty("类型: 0:图片 1:视频")
private Integer type;
} }
...@@ -9,23 +9,25 @@ import java.io.Serializable; ...@@ -9,23 +9,25 @@ import java.io.Serializable;
/** /**
* @Author LW * @Author LW
* @date 2023/5/29 15:30 *
* 概要: * @date 2023/5/29 15:30 概要:
*/ */
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
public class UserBaseInfoVO implements Serializable { public class UserBaseInfoVO implements Serializable {
@ApiModelProperty(value = "用户id") @ApiModelProperty(value = "用户昵称")
private Integer id; private String nickName;
@ApiModelProperty(value = "用户昵称")
private String nickName; @ApiModelProperty(value = "用户头像")
@ApiModelProperty(value = "用户头像") private String userImg;
private String userImg;
@ApiModelProperty(value = "用户名称") @ApiModelProperty(value = "用户名称")
private String userName; private String userName;
@ApiModelProperty(value = "手机号")
private String phone; @ApiModelProperty(value = "手机号")
@ApiModelProperty(value = "UID") private String phone;
private String uid;
@ApiModelProperty(value = "UID")
private String uid;
} }
package com.mmc.csf.release.controller; package com.mmc.csf.release.controller;
import com.mmc.csf.common.util.web.ResultBody; import com.mmc.csf.common.util.web.ResultBody;
import com.mmc.csf.release.forum.vo.CommentAndReplyVO;
import com.mmc.csf.release.forum.vo.CommentVO; import com.mmc.csf.release.forum.vo.CommentVO;
import com.mmc.csf.release.forum.vo.DynamicVO; import com.mmc.csf.release.forum.vo.DynamicVO;
import com.mmc.csf.release.service.DynamicService; import com.mmc.csf.release.service.DynamicService;
...@@ -13,63 +12,53 @@ import javax.servlet.http.HttpServletRequest; ...@@ -13,63 +12,53 @@ import javax.servlet.http.HttpServletRequest;
/** /**
* @Author LW * @Author LW
* @date 2023/5/15 10:29 *
* 概要:动态信息控制层 * @date 2023/5/15 10:29 概要:动态信息控制层
*/ */
@Api(tags = {"web-小程序-论坛社区-模块"}) @Api(tags = {"web-小程序-论坛社区-模块"})
@RestController @RestController
@RequestMapping("/dynamic") @RequestMapping("/dynamic")
public class DynamicController extends BaseController { public class DynamicController extends BaseController {
@Resource @Resource private DynamicService dynamicService;
private DynamicService dynamicService;
@ApiOperation(value = "动态发布") @ApiOperation(value = "动态发布")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)}) @ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("/publish") @PostMapping("/publish")
public ResultBody publishDynamic(@RequestBody DynamicVO dynamicVO, HttpServletRequest request) { public ResultBody publishDynamic(@RequestBody DynamicVO dynamicVO, HttpServletRequest request) {
return dynamicService.insertDynamic(dynamicVO,this.getUserLoginInfoFromRedis(request).getUserAccountId()); return dynamicService.insertDynamic(
} dynamicVO, this.getUserLoginInfoFromRedis(request).getUserAccountId());
}
@ApiOperation(value = "点赞或取消点赞") @ApiOperation(value = "点赞或取消点赞")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)}) @ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@GetMapping("/likeOrCancel") @GetMapping("/likeOrCancel")
public ResultBody likeOrCancel(HttpServletRequest request, @ApiParam(value = "动态id") @RequestParam Integer dynamicId) { public ResultBody likeOrCancel(
return dynamicService.likeDynamic(this.getUserLoginInfoFromRedis(request).getUserAccountId(), dynamicId); HttpServletRequest request, @ApiParam(value = "动态id") @RequestParam Integer dynamicId) {
} return dynamicService.likeDynamic(
this.getUserLoginInfoFromRedis(request).getUserAccountId(), dynamicId);
}
@ApiOperation(value = "评论动态或回复评论") @ApiOperation(value = "评论动态或回复评论")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)}) @ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("/comment") @PostMapping("/comment")
public ResultBody commentDynamic(@RequestBody CommentVO commentVO,HttpServletRequest request) { public ResultBody commentDynamic(@RequestBody CommentVO commentVO, HttpServletRequest request) {
return dynamicService.commentDynamic(commentVO,this.getUserLoginInfoFromRedis(request).getUserAccountId()); return dynamicService.commentDynamic(
} commentVO, this.getUserLoginInfoFromRedis(request).getUserAccountId());
}
@ApiOperation(value = "删除评论") @ApiOperation(value = "删除评论")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)}) @ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@DeleteMapping("/removeComment") @DeleteMapping("/removeComment")
public ResultBody removeComment(@RequestParam Integer id) { public ResultBody removeComment(@RequestParam Integer id) {
return dynamicService.deleteComment(id); return dynamicService.deleteComment(id);
} }
@ApiOperation(value = "根据动态查看评论") @ApiOperation(value = "动态详情")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = CommentAndReplyVO.class)}) @ApiResponses({@ApiResponse(code = 200, message = "OK", response = DynamicVO.class)})
@GetMapping("/byDynamic") @GetMapping("/dynamicDetails")
public ResultBody getCommentsByDynamic(@RequestParam Integer dynamicId, HttpServletRequest request) { public ResultBody dynamicDetails(@RequestParam Integer dynamicId, HttpServletRequest request) {
return ResultBody.success(dynamicService.getCommentAndReply(dynamicId, request)); return dynamicService.dynamicDetails(
} dynamicId, this.getUserLoginInfoFromRedis(request).getUserAccountId(), request);
}
@ApiOperation(value = "动态详情")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = DynamicVO.class)})
@GetMapping("/dynamicDetails")
public ResultBody dynamicDetails(@RequestParam Integer dynamicId,HttpServletRequest request) {
return dynamicService.dynamicDetails(dynamicId,this.getUserLoginInfoFromRedis(request).getUserAccountId(), request);
}
@ApiOperation(value = "动态列表")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = DynamicVO.class)})
@GetMapping("/dynamicList")
public ResultBody dynamicList(@RequestParam Integer pageNo, @RequestParam Integer pageSize,HttpServletRequest request) {
return ResultBody.success(dynamicService.dynamicList(pageNo, pageSize, this.getUserLoginInfoFromRedis(request).getUserAccountId(), request));
}
} }
package com.mmc.csf.release.dao; package com.mmc.csf.release.dao;
import com.mmc.csf.release.entity.forum.ForumDynamicDO;
import com.mmc.csf.release.forum.vo.CommentAndReplyVO; import com.mmc.csf.release.forum.vo.CommentAndReplyVO;
import com.mmc.csf.release.forum.vo.CommentVO; import com.mmc.csf.release.forum.vo.CommentVO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
...@@ -9,52 +10,61 @@ import java.util.List; ...@@ -9,52 +10,61 @@ import java.util.List;
/** /**
* @Author LW * @Author LW
* @date 2023/5/15 10:29 *
* 概要:动态评论数据访问层 * @date 2023/5/15 10:29 概要:动态评论数据访问层
*/ */
@Mapper @Mapper
public interface CommentDAO { public interface CommentDAO {
/** /**
* 插入评论 * 插入评论
* *
* @param userId 用户id * @param userId 用户id
* @param dynamicId 动态id * @param dynamicId 动态id
* @param content 内容 * @param content 内容
*/ */
void insertComment(@Param("userId") int userId, @Param("dynamicId") int dynamicId, @Param("content") String content); void insertComment(
@Param("userId") int userId,
/** @Param("dynamicId") int dynamicId,
* 删除评论 @Param("content") String content);
*
* @param id id /**
* @return int * 删除评论
*/ *
int deleteComment(int id); * @param id id
* @return int
/** */
* 插入回复评论 int deleteComment(int id);
*
* @param userId 用户id /**
* @param dynamicId 动态id * 插入回复评论
* @param content 内容 *
* @param parentId 父id * @param userId 用户id
*/ * @param dynamicId 动态id
void insertReplyComment(@Param("userId") int userId, @Param("dynamicId") int dynamicId, @Param("content") String content, @Param("parentId") Integer parentId); * @param content 内容
* @param parentId 父id
/** */
* 查询评论列表 void insertReplyComment(
* @Param("userId") int userId,
* @param dynamicId 动态id @Param("dynamicId") int dynamicId,
* @return {@link List}<{@link CommentAndReplyVO}> @Param("content") String content,
*/ @Param("parentId") Integer parentId);
List<CommentAndReplyVO> selectCommentList(@Param("dynamicId") Integer dynamicId);
/**
/** * 查询评论列表
* 查询子评论列表 *
* * @param dynamicId 动态id
* @param parentIds 父id * @return {@link List}<{@link CommentAndReplyVO}>
* @return {@link List}<{@link CommentVO}> */
*/ List<CommentAndReplyVO> selectCommentList(@Param("dynamicId") Integer dynamicId);
List<CommentVO> selectSubCommentList(List<Integer> parentIds);
/**
* 查询子评论列表
*
* @param parentIds 父id
* @return {@link List}<{@link CommentVO}>
*/
List<CommentVO> selectSubCommentList(List<Integer> parentIds);
List<ForumDynamicDO> findByRoot(Integer dynamicId);
} }
package com.mmc.csf.release.dao; package com.mmc.csf.release.dao;
import com.mmc.csf.release.entity.forum.ForumDynamicDO; import com.mmc.csf.release.entity.forum.ForumDynamicDO;
import com.mmc.csf.release.entity.forum.ForumImageDO; import com.mmc.csf.release.entity.forum.ForumResourceDO;
import com.mmc.csf.release.entity.forum.ForumVideoDO; import com.mmc.csf.release.entity.forum.ForumVideoDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
...@@ -92,9 +92,9 @@ public interface DynamicDAO { ...@@ -92,9 +92,9 @@ public interface DynamicDAO {
* 列表动态图片 * 列表动态图片
* *
* @param ids id * @param ids id
* @return {@link List}<{@link ForumImageDO}> * @return {@link List}<{@link ForumResourceDO}>
*/ */
List<ForumImageDO> listDynamicPicture(List<Integer> ids); List<ForumResourceDO> listDynamicPicture(List<Integer> ids);
/** /**
* 动态视频列表 * 动态视频列表
...@@ -108,9 +108,9 @@ public interface DynamicDAO { ...@@ -108,9 +108,9 @@ public interface DynamicDAO {
* 动态图片 * 动态图片
* *
* @param dynamicId 动态id * @param dynamicId 动态id
* @return {@link List}<{@link ForumImageDO}> * @return {@link List}<{@link ForumResourceDO}>
*/ */
List<ForumImageDO> dynamicPicture(Integer dynamicId); List<ForumResourceDO> dynamicPicture(Integer dynamicId);
/** /**
* 动态视频 * 动态视频
...@@ -119,4 +119,11 @@ public interface DynamicDAO { ...@@ -119,4 +119,11 @@ public interface DynamicDAO {
* @return {@link ForumVideoDO} * @return {@link ForumVideoDO}
*/ */
ForumVideoDO dynamicVideo(Integer dynamicId); ForumVideoDO dynamicVideo(Integer dynamicId);
void insertResource(
@Param("dynamicId") Integer dynamicId, @Param("type") int type, @Param("url") String url);
List<ForumResourceDO> listDynamicResources(Integer dynamicId);
List<ForumDynamicDO> getDynamicComment(String dynamicId);
} }
package com.mmc.csf.release.entity.common;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @Author LW
*
* @date 2023/6/21 10:47 概要:基础实体
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BaseDO implements Serializable {
private Integer id;
private Date createTime;
private Date updateTime;
private Integer deleted;
}
package com.mmc.csf.release.entity.forum; package com.mmc.csf.release.entity.forum;
import com.mmc.csf.release.entity.common.BaseDO;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date;
/** /**
* 评论表(ForumCommentDO)实体类 * 评论表(ForumCommentDO)实体类
...@@ -18,22 +18,13 @@ import java.util.Date; ...@@ -18,22 +18,13 @@ import java.util.Date;
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@Accessors(chain = true) @Accessors(chain = true)
public class ForumCommentDO implements Serializable { public class ForumCommentDO extends BaseDO implements Serializable {
private static final long serialVersionUID = 768897358613182410L; private static final long serialVersionUID = 768897358613182410L;
/** 评论id */ private Integer userAccountId;
private Integer id;
/** 用户id,外键,关联user表 */
private Integer userId; // todo userAccountId
/** 动态id,外键,关联dynamic表 */ /** 动态id,外键,关联dynamic表 */
private Integer dynamicId; private Integer dynamicId;
/** 评论内容 */ /** 评论内容 */
private String content; private String content;
/** 点赞数量 */ /** 点赞数量 */
private Integer likesCount; private Integer likesCount;
/** 创建时间 */
private Date createTime;
/** 修改时间 */
private Date updateTime;
/** 是否删除,0表示未删除,1表示已删除 */
private Integer deleted;
} }
package com.mmc.csf.release.entity.forum; package com.mmc.csf.release.entity.forum;
import com.mmc.csf.release.entity.common.BaseDO;
import com.mmc.csf.release.forum.dto.DynamicInfoDTO; import com.mmc.csf.release.forum.dto.DynamicInfoDTO;
import com.mmc.csf.release.forum.vo.DynamicVO; import com.mmc.csf.release.forum.vo.DynamicVO;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
...@@ -9,7 +10,6 @@ import lombok.experimental.Accessors; ...@@ -9,7 +10,6 @@ import lombok.experimental.Accessors;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date;
/** /**
* 动态信息表(ForumDynamicDO)实体类 * 动态信息表(ForumDynamicDO)实体类
...@@ -21,16 +21,12 @@ import java.util.Date; ...@@ -21,16 +21,12 @@ import java.util.Date;
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@Accessors(chain = true) @Accessors(chain = true)
public class ForumDynamicDO implements Serializable { public class ForumDynamicDO extends BaseDO implements Serializable {
private static final long serialVersionUID = 570379773690905364L; private static final long serialVersionUID = 570379773690905364L;
/** 主键,自增长 */ /** 版本字段 */
private Integer id; private Integer version;
/** 版本字段pid */
private Integer pid; // todo 修改为 version
/** 动态标题 */
private String title; // todo 删除
/** 发布用户ID */ /** 发布用户ID */
private Integer userId; // todo 改userAccountId private Integer userAccountId;
/** 动态描述 */ /** 动态描述 */
private String description; private String description;
/** 发布动态具体位置 */ /** 发布动态具体位置 */
...@@ -43,15 +39,10 @@ public class ForumDynamicDO implements Serializable { ...@@ -43,15 +39,10 @@ public class ForumDynamicDO implements Serializable {
private Integer likesCount; private Integer likesCount;
/** 评论数 */ /** 评论数 */
private Integer commentsCount; private Integer commentsCount;
/** 创建时间 */ /** 记录父节点id */
private Date createTime; private String rootPath;
/** 修改时间 */
private Date updateTime;
/** 是否删除,默认为0表示未删除 */
private Integer deleted;
public ForumDynamicDO(DynamicVO dynamicVO) { public ForumDynamicDO(DynamicVO dynamicVO) {
this.title = dynamicVO.getTitle();
this.description = dynamicVO.getDescription(); this.description = dynamicVO.getDescription();
this.location = dynamicVO.getLocation(); this.location = dynamicVO.getLocation();
this.lat = dynamicVO.getLat(); this.lat = dynamicVO.getLat();
...@@ -60,19 +51,30 @@ public class ForumDynamicDO implements Serializable { ...@@ -60,19 +51,30 @@ public class ForumDynamicDO implements Serializable {
public DynamicVO buildDynamicVO() { public DynamicVO buildDynamicVO() {
return DynamicVO.builder() return DynamicVO.builder()
.id(id) .id(this.getId())
.userAccountId(userAccountId)
.description(description) .description(description)
.commentCount(commentsCount) .commentCount(commentsCount)
.likesCount(likesCount) .likesCount(likesCount)
.lat(lat) .lat(lat)
.lon(lon) .lon(lon)
.location(location) .location(location)
.title(title) .dynamicPublishTime(this.getCreateTime())
.dynamicPublishTime(createTime)
.build(); .build();
} }
public DynamicInfoDTO buildDynamicInfoDTO() { public DynamicInfoDTO buildDynamicInfoDTO() {
return DynamicInfoDTO.builder().id(id).description(description).show(deleted).build(); return DynamicInfoDTO.builder()
.id(this.getId())
.userAccountId(userAccountId)
.description(description)
.show(this.getDeleted())
.build();
}
public void defaultInfo() {
this.lon = null;
this.lat = null;
this.location = null;
} }
} }
package com.mmc.csf.release.entity.forum; package com.mmc.csf.release.entity.forum;
import com.mmc.csf.release.forum.vo.MediaVO;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
...@@ -9,7 +10,7 @@ import java.io.Serializable; ...@@ -9,7 +10,7 @@ import java.io.Serializable;
import java.util.Date; import java.util.Date;
/** /**
* 动态图片表(ForumImageDO)实体类 * 动态图片表(ForumResourceDO)实体类
* *
* @author lw * @author lw
* @since 2023-05-16 09:57:50 * @since 2023-05-16 09:57:50
...@@ -18,18 +19,20 @@ import java.util.Date; ...@@ -18,18 +19,20 @@ import java.util.Date;
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@Accessors(chain = true) @Accessors(chain = true)
public class ForumImageDO implements Serializable { public class ForumResourceDO implements Serializable {
private static final long serialVersionUID = 678578415154893126L; private static final long serialVersionUID = 678578415154893126L;
/** 主键,自增长 */
private Integer id; // todo 删除
/** 动态ID,必填 */ /** 动态ID,必填 */
private Integer dynamicId; private Integer dynamicId;
/** 图片URL,必填 */ /** 图片URL,必填 */
private String url; private String resourceUrl;
/** 创建时间 */ /** 创建时间 */
private Date createTime; private Date createTime;
/** 修改时间 */ /** 修改时间 */
private Date updateTime; private Date updateTime;
/** 是否删除,默认为0表示未删除 */ /** 类型 */
private Integer deleted; // todo 删除 private Integer type;
public MediaVO buildMedia() {
return MediaVO.builder().type(type).url(resourceUrl).build();
}
} }
package com.mmc.csf.release.enums;
/**
* @Author LW
*
* @date 2023/6/21 17:15 概要:论坛枚举
*/
public enum ForumEnum {
PICTURE(0, "图片"),
VIDEO(1, "视频");
private Integer code;
private String name;
ForumEnum(Integer code, String name) {
this.code = code;
this.name = name;
}
public void setCode(Integer code) {
this.code = code;
}
public Integer getCode() {
return this.code;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
package com.mmc.csf.release.service; package com.mmc.csf.release.service;
import com.mmc.csf.common.util.page.PageResult;
import com.mmc.csf.common.util.web.ResultBody; import com.mmc.csf.common.util.web.ResultBody;
import com.mmc.csf.release.forum.vo.CommentAndReplyVO;
import com.mmc.csf.release.forum.vo.CommentVO; import com.mmc.csf.release.forum.vo.CommentVO;
import com.mmc.csf.release.forum.vo.DynamicVO; import com.mmc.csf.release.forum.vo.DynamicVO;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.util.List;
/** /**
* @Author LW * @Author LW
* @date 2023/5/15 10:29 *
* 概要:动态信息service层 * @date 2023/5/15 10:29 概要:动态信息service层
*/ */
public interface DynamicService { public interface DynamicService {
/** /**
* 插入动态 * 插入动态
* *
* @param dynamicVO 动态 * @param dynamicVO 动态
* @return {@link ResultBody} * @return {@link ResultBody}
*/ */
ResultBody insertDynamic(DynamicVO dynamicVO,Integer userAccountId); ResultBody insertDynamic(DynamicVO dynamicVO, Integer userAccountId);
/** /**
* 点赞动态 * 点赞动态
* *
* @param userId 用户id * @param userId 用户id
* @param dynamicId 动态id * @param dynamicId 动态id
* @return {@link ResultBody} * @return {@link ResultBody}
*/ */
ResultBody likeDynamic(Integer userId, Integer dynamicId); ResultBody likeDynamic(Integer userId, Integer dynamicId);
/** /**
* 评论动态 * 评论动态
* *
* @param commentVO 评论信息 * @param commentVO 评论信息
* @return {@link ResultBody} * @return {@link ResultBody}
*/ */
ResultBody commentDynamic(CommentVO commentVO,Integer userAccountId); ResultBody commentDynamic(CommentVO commentVO, Integer userAccountId);
/** /**
* 删除评论 * 删除评论
* *
* @param id id * @param id id
* @return {@link ResultBody} * @return {@link ResultBody}
*/ */
ResultBody deleteComment(Integer id); ResultBody deleteComment(Integer id);
/** /**
* 根据动态查看评论 * 动态细节
* *
* @param dynamicId 动态id * @param dynamicId 动态id
* @param request * @param userId 用户id
* @return {@link List}<{@link CommentVO}> * @return {@link ResultBody}
*/ */
List<CommentAndReplyVO> getCommentAndReply(Integer dynamicId, HttpServletRequest request); ResultBody dynamicDetails(Integer dynamicId, Integer userId, HttpServletRequest request);
/**
* 动态列表
*
* @param pageNo 页面
* @param pageSize 页面大小
* @param userId
* @param request
* @return {@link List}<{@link DynamicVO}>
*/
PageResult dynamicList(Integer pageNo, Integer pageSize, Integer userId, HttpServletRequest request);
/**
* 动态细节
*
* @param dynamicId 动态id
* @param userId 用户id
* @return {@link ResultBody}
*/
ResultBody dynamicDetails(Integer dynamicId, Integer userId, HttpServletRequest request);
} }
...@@ -2,18 +2,16 @@ package com.mmc.csf.release.service.impl; ...@@ -2,18 +2,16 @@ package com.mmc.csf.release.service.impl;
import com.mmc.csf.common.util.page.PageResult; import com.mmc.csf.common.util.page.PageResult;
import com.mmc.csf.infomation.dto.UserAccountSimpleDTO; import com.mmc.csf.infomation.dto.UserAccountSimpleDTO;
import com.mmc.csf.release.auth.qo.BUserAccountQO;
import com.mmc.csf.release.auth.qo.UserAccountQO; import com.mmc.csf.release.auth.qo.UserAccountQO;
import com.mmc.csf.release.constant.TokenConstant; import com.mmc.csf.release.constant.TokenConstant;
import com.mmc.csf.release.dao.BackstageForumDao; import com.mmc.csf.release.dao.BackstageForumDao;
import com.mmc.csf.release.dao.DynamicDAO; import com.mmc.csf.release.dao.DynamicDAO;
import com.mmc.csf.release.entity.forum.ForumDynamicDO; import com.mmc.csf.release.entity.forum.ForumDynamicDO;
import com.mmc.csf.release.entity.forum.ForumImageDO; import com.mmc.csf.release.entity.forum.ForumResourceDO;
import com.mmc.csf.release.entity.forum.ForumVideoDO; import com.mmc.csf.release.entity.forum.ForumVideoDO;
import com.mmc.csf.release.feign.UserAppApi; import com.mmc.csf.release.feign.UserAppApi;
import com.mmc.csf.release.forum.dto.DynamicInfoDTO; import com.mmc.csf.release.forum.dto.DynamicInfoDTO;
import com.mmc.csf.release.forum.qo.DynamicQO; import com.mmc.csf.release.forum.qo.DynamicQO;
import com.mmc.csf.release.forum.vo.MediaVO;
import com.mmc.csf.release.forum.vo.UserBaseInfoVO; import com.mmc.csf.release.forum.vo.UserBaseInfoVO;
import com.mmc.csf.release.service.BackstageForumService; import com.mmc.csf.release.service.BackstageForumService;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
...@@ -47,7 +45,7 @@ public class BackstageForumServiceImpl implements BackstageForumService { ...@@ -47,7 +45,7 @@ public class BackstageForumServiceImpl implements BackstageForumService {
userAccountQO.setKeyword(dynamic.getKeyword()); userAccountQO.setKeyword(dynamic.getKeyword());
// 获取筛选的用户id // 获取筛选的用户id
List<UserAccountSimpleDTO> userAccountSimpleDTOS = List<UserAccountSimpleDTO> userAccountSimpleDTOS =
userAppApi.feignListAppUserAccount(userAccountQO, request.getHeader(TokenConstant.TOKEN)); userAppApi.feignListAppUserAccount(userAccountQO, request.getHeader(TokenConstant.TOKEN));
if (CollectionUtils.isNotEmpty(userAccountSimpleDTOS)) { if (CollectionUtils.isNotEmpty(userAccountSimpleDTOS)) {
// 获取用户id // 获取用户id
userIds = userIds =
...@@ -71,20 +69,20 @@ public class BackstageForumServiceImpl implements BackstageForumService { ...@@ -71,20 +69,20 @@ public class BackstageForumServiceImpl implements BackstageForumService {
List<Integer> ids = List<Integer> ids =
dynamicList.stream().map(ForumDynamicDO::getId).collect(Collectors.toList()); dynamicList.stream().map(ForumDynamicDO::getId).collect(Collectors.toList());
// 根据id集合查询图片 // 根据id集合查询图片
List<ForumImageDO> forumImageList = dynamicDAO.listDynamicPicture(ids); List<ForumResourceDO> forumImageList = dynamicDAO.listDynamicPicture(ids);
Map<Integer, List<ForumImageDO>> ImageMap = Map<Integer, List<ForumResourceDO>> ImageMap =
forumImageList.stream().collect(Collectors.groupingBy(ForumImageDO::getDynamicId)); forumImageList.stream().collect(Collectors.groupingBy(ForumResourceDO::getDynamicId));
// 获取视频信息 // 获取视频信息
List<ForumVideoDO> forumVideoList = dynamicDAO.listDynamicVideo(ids); List<ForumVideoDO> forumVideoList = dynamicDAO.listDynamicVideo(ids);
// 获取查询到的列表用户信息 // 获取查询到的列表用户信息
// 获取用户信息 // 获取用户信息
Set<Integer> ListUserIds = Set<Integer> ListUserIds =
dynamicList.stream().map(ForumDynamicDO::getUserId).collect(Collectors.toSet()); dynamicList.stream().map(ForumDynamicDO::getUserAccountId).collect(Collectors.toSet());
List<Integer> userIdList = new ArrayList<>(ListUserIds); List<Integer> userIdList = new ArrayList<>(ListUserIds);
UserAccountQO accountQO = new UserAccountQO(); UserAccountQO accountQO = new UserAccountQO();
accountQO.setUserIds(userIdList); accountQO.setUserIds(userIdList);
List<UserAccountSimpleDTO> userAccountSimpleList = List<UserAccountSimpleDTO> userAccountSimpleList =
userAppApi.feignListAppUserAccount(accountQO, request.getHeader(TokenConstant.TOKEN)); userAppApi.feignListAppUserAccount(accountQO, request.getHeader(TokenConstant.TOKEN));
Map<Integer, UserAccountSimpleDTO> userAccountInfoMap = Map<Integer, UserAccountSimpleDTO> userAccountInfoMap =
userAccountSimpleList.stream() userAccountSimpleList.stream()
.collect(Collectors.toMap(UserAccountSimpleDTO::getId, Function.identity())); .collect(Collectors.toMap(UserAccountSimpleDTO::getId, Function.identity()));
...@@ -93,23 +91,10 @@ public class BackstageForumServiceImpl implements BackstageForumService { ...@@ -93,23 +91,10 @@ public class BackstageForumServiceImpl implements BackstageForumService {
.map( .map(
d -> { d -> {
DynamicInfoDTO dynamicInfoDTO = d.buildDynamicInfoDTO(); DynamicInfoDTO dynamicInfoDTO = d.buildDynamicInfoDTO();
MediaVO mediaVO = new MediaVO(); UserAccountSimpleDTO userAccountSimpleDTO =
if (CollectionUtils.isNotEmpty(ImageMap.get(d.getId()))) { userAccountInfoMap.get(d.getUserAccountId());
mediaVO.setPicture(
ImageMap.get(d.getId()).stream()
.map(ForumImageDO::getUrl)
.collect(Collectors.toList()));
}
for (ForumVideoDO forumVideoDO : forumVideoList) {
if (forumVideoDO.getDynamicId().equals(d.getId())) {
mediaVO.setVideoUrl(forumVideoDO.getUrl());
break;
}
}
UserAccountSimpleDTO userAccountSimpleDTO = userAccountInfoMap.get(d.getUserId());
if (userAccountSimpleDTO != null) { if (userAccountSimpleDTO != null) {
UserBaseInfoVO userBaseInfoVO = new UserBaseInfoVO(); UserBaseInfoVO userBaseInfoVO = new UserBaseInfoVO();
userBaseInfoVO.setId(d.getUserId());
userBaseInfoVO.setNickName(userAccountSimpleDTO.getNickName()); userBaseInfoVO.setNickName(userAccountSimpleDTO.getNickName());
userBaseInfoVO.setUserImg(userAccountSimpleDTO.getUserImg()); userBaseInfoVO.setUserImg(userAccountSimpleDTO.getUserImg());
userBaseInfoVO.setUserName(userAccountSimpleDTO.getUserName()); userBaseInfoVO.setUserName(userAccountSimpleDTO.getUserName());
...@@ -117,7 +102,6 @@ public class BackstageForumServiceImpl implements BackstageForumService { ...@@ -117,7 +102,6 @@ public class BackstageForumServiceImpl implements BackstageForumService {
userBaseInfoVO.setUid(userAccountSimpleDTO.getUid()); userBaseInfoVO.setUid(userAccountSimpleDTO.getUid());
dynamicInfoDTO.setUserBaseInfo(userBaseInfoVO); dynamicInfoDTO.setUserBaseInfo(userBaseInfoVO);
} }
dynamicInfoDTO.setMediaVO(mediaVO);
return dynamicInfoDTO; return dynamicInfoDTO;
}) })
.collect(Collectors.toList()); .collect(Collectors.toList());
......
...@@ -14,8 +14,12 @@ ...@@ -14,8 +14,12 @@
</insert> </insert>
<insert id="insertDynamic" keyProperty="id" useGeneratedKeys="true" <insert id="insertDynamic" keyProperty="id" useGeneratedKeys="true"
parameterType="com.mmc.csf.release.entity.forum.ForumDynamicDO"> parameterType="com.mmc.csf.release.entity.forum.ForumDynamicDO">
INSERT INTO forum_dynamic(title, user_id, description, location, lat, lon) INSERT INTO forum_dynamic(user_account_id, description, location, lat, lon, root_path)
VALUES (#{title}, #{userId}, #{description}, #{location}, #{lat}, #{lon}) VALUES (#{userAccountId}, #{description}, #{location}, #{lat}, #{lon}, #{rootPath})
</insert>
<insert id="insertResource">
insert into forum_resource(dynamic_id, resource_url, `type`)
values (#{dynamicId}, #{url}, #{type})
</insert> </insert>
<update id="updateDynamicLikeCount"> <update id="updateDynamicLikeCount">
update forum_dynamic update forum_dynamic
...@@ -40,9 +44,9 @@ ...@@ -40,9 +44,9 @@
</update> </update>
<select id="getDynamicInfo" resultType="com.mmc.csf.release.entity.forum.ForumDynamicDO"> <select id="getDynamicInfo" resultType="com.mmc.csf.release.entity.forum.ForumDynamicDO">
select id, select id,
pid, version,
title, user_account_id,
user_id, root_path,
description, description,
location, location,
lat, lat,
...@@ -77,7 +81,7 @@ ...@@ -77,7 +81,7 @@
LIMIT #{itemIndex}, #{pageSize} LIMIT #{itemIndex}, #{pageSize}
</select> </select>
<select id="listDynamicPicture" resultType="com.mmc.csf.release.entity.forum.ForumImageDO"> <select id="listDynamicPicture" resultType="com.mmc.csf.release.entity.forum.ForumResourceDO">
select id, url , dynamic_id select id, url , dynamic_id
from forum_image from forum_image
where where
...@@ -95,7 +99,7 @@ ...@@ -95,7 +99,7 @@
#{item} #{item}
</foreach> </foreach>
</select> </select>
<select id="dynamicPicture" resultType="com.mmc.csf.release.entity.forum.ForumImageDO"> <select id="dynamicPicture" resultType="com.mmc.csf.release.entity.forum.ForumResourceDO">
select id, select id,
dynamic_id, dynamic_id,
url url
...@@ -111,4 +115,28 @@ ...@@ -111,4 +115,28 @@
where dynamic_id = #{dynamicId} where dynamic_id = #{dynamicId}
and is_deleted = 0 and is_deleted = 0
</select> </select>
<select id="listDynamicResources" resultType="com.mmc.csf.release.entity.forum.ForumResourceDO">
select resource_url,
`type`,
create_time,
update_time
from forum_resource
where dynamic_id = #{dynamicId}
</select>
<select id="getDynamicComment" resultType="com.mmc.csf.release.entity.forum.ForumDynamicDO">
select id,
version,
user_account_id,
root_path,
description,
location,
lat,
lon,
likes_count,
comments_count,
create_time
from forum_dynamic
where root_path = #{dynamicId}
and is_deleted = 0
</select>
</mapper> </mapper>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论