日志评论

This commit is contained in:
aikai 2024-04-11 17:53:48 +08:00
parent 98873d8b89
commit 55ed940e2f
11 changed files with 568 additions and 0 deletions

View File

@ -0,0 +1,44 @@
package cn.iocoder.yudao.module.system.controller.app.comment;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.system.controller.app.comment.dto.CommentDTO;
import cn.iocoder.yudao.module.system.controller.app.comment.vo.CommentPageListVO;
import cn.iocoder.yudao.module.system.service.comment.WorkLogCommentService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - 工作日志评论")
@RestController
@RequestMapping("/system/work-log-comment")
@Validated
public class WorkLogCommentController {
@Autowired
private WorkLogCommentService workLogCommentService;
@Operation(summary = "用户工作日志评论-分页查询评论列表")
@GetMapping(value = "/queryCommentPageList")
public CommonResult<IPage<CommentPageListVO>> queryCommentPageList(CommentDTO dto,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
Page<CommentPageListVO> page = new Page<>(pageNo, pageSize);
IPage<CommentPageListVO> pageList = workLogCommentService.queryCommentPageList(page, dto);
return success(pageList);
}
// @Operation(summary = "用户动态评论-评论/回复评论")
// @PostMapping(value = "/addComment")
// public CommonResult<String> addComment(@RequestBody MemberDynamicCommentAddDTO dto) {
// workLogCommentService.addComment(dto);
// return success("添加成功!");
// }
}

View File

@ -0,0 +1,17 @@
package cn.iocoder.yudao.module.system.controller.app.comment.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class CommentDTO {
@Schema(description = "工作日志id", required = true)
@JsonSerialize(using = ToStringSerializer.class)
private Long workLogId;
@Schema(description = "评论类型0|评论1|回评")
private Integer type;
@Schema(description = "是否需要显示日志内容 0否 1是 默认否")
private Integer isShowWorkLogContent;
}

View File

@ -0,0 +1,53 @@
package cn.iocoder.yudao.module.system.controller.app.comment.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
@Data
public class CommentPageListVO {
@JsonSerialize(using = ToStringSerializer.class)
@Schema(description = "id")
private Long id;
@Schema(description = "工作日志ID")
@JsonSerialize(using = ToStringSerializer.class)
private Long workLogId;
@Schema(description = "评论用户ID")
@JsonSerialize(using = ToStringSerializer.class)
private Long userId;
@Schema(description = "评论用户头像")
private String avatar;
@Schema(description = "评论用户名称")
private String userName;
@Schema(description = "被评论用户ID")
@JsonSerialize(using = ToStringSerializer.class)
private Long commentUserId;
@Schema(description = "被评论用户头像")
private String commentAvatar;
@Schema(description = "被评论用户名称")
private String commentUserName;
@Schema(description = "评论内容")
private String comment;
@Schema(description = "评论类型0|评论1|回评)")
private Integer type;
@Schema(description = "被回评内容")
private String replyComment;
@Schema(description = "工作日志内容(部分)")
private String workLogContent;
@Schema(description = "工作日志名称")
private String workLogName;
@Schema(description = "工作日志模版id")
private Long workFormId;
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Schema(description = "创建日期")
private String createTime;
}

View File

@ -0,0 +1,43 @@
package cn.iocoder.yudao.module.system.controller.app.comment.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 工作日志评论分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class WorkLogCommentPageReqVO extends PageParam {
@Schema(description = "动态ID", example = "26393")
private Long workLogId;
@Schema(description = "评论ID回复评论的ID", example = "25541")
private Long commentId;
@Schema(description = "评论用户ID", example = "17082")
private Long userId;
@Schema(description = "被评论用户ID", example = "22388")
private Long commentUserId;
@Schema(description = "评论内容")
private String comment;
@Schema(description = "评论类型0|评论1|回评)", example = "1")
private Boolean type;
@Schema(description = "楼栋标识")
private String buildingCode;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

View File

@ -0,0 +1,52 @@
package cn.iocoder.yudao.module.system.controller.app.comment.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 工作日志评论 Response VO")
@Data
@ExcelIgnoreUnannotated
public class WorkLogCommentRespVO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "21304")
@ExcelProperty("id")
private Long id;
@Schema(description = "动态ID", example = "26393")
@ExcelProperty("动态ID")
private Long workLogId;
@Schema(description = "评论ID回复评论的ID", example = "25541")
@ExcelProperty("评论ID回复评论的ID")
private Long commentId;
@Schema(description = "评论用户ID", example = "17082")
@ExcelProperty("评论用户ID")
private Long userId;
@Schema(description = "被评论用户ID", example = "22388")
@ExcelProperty("被评论用户ID")
private Long commentUserId;
@Schema(description = "评论内容")
@ExcelProperty("评论内容")
private String comment;
@Schema(description = "评论类型0|评论1|回评)", example = "1")
@ExcelProperty("评论类型0|评论1|回评)")
private Boolean type;
@Schema(description = "楼栋标识")
@ExcelProperty("楼栋标识")
private String buildingCode;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

View File

@ -0,0 +1,37 @@
package cn.iocoder.yudao.module.system.controller.app.comment.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
import java.util.*;
@Schema(description = "管理后台 - 工作日志评论新增/修改 Request VO")
@Data
public class WorkLogCommentSaveReqVO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "21304")
private Long id;
@Schema(description = "动态ID", example = "26393")
private Long workLogId;
@Schema(description = "评论ID回复评论的ID", example = "25541")
private Long commentId;
@Schema(description = "评论用户ID", example = "17082")
private Long userId;
@Schema(description = "被评论用户ID", example = "22388")
private Long commentUserId;
@Schema(description = "评论内容")
private String comment;
@Schema(description = "评论类型0|评论1|回评)", example = "1")
private Boolean type;
@Schema(description = "楼栋标识")
private String buildingCode;
}

View File

@ -0,0 +1,59 @@
package cn.iocoder.yudao.module.system.dal.dataobject.comment;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
/**
* 工作日志评论 DO
*
* @author 艾楷
*/
@TableName("work_log_comment")
@KeySequence("work_log_comment_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class WorkLogCommentDO extends BaseDO {
/**
* id
*/
@TableId
private Long id;
/**
* 动态ID
*/
private Long workLogId;
/**
* 评论ID回复评论的ID
*/
private Long commentId;
/**
* 评论用户ID
*/
private Long userId;
/**
* 被评论用户ID
*/
private Long commentUserId;
/**
* 评论内容
*/
private String comment;
/**
* 评论类型0|评论1|回评
*/
private Boolean type;
/**
* 楼栋标识
*/
private String buildingCode;
}

View File

@ -0,0 +1,44 @@
package cn.iocoder.yudao.module.system.dal.mysql.comment;
import java.util.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.system.controller.app.comment.dto.CommentDTO;
import cn.iocoder.yudao.module.system.dal.dataobject.comment.WorkLogCommentDO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.system.controller.app.comment.vo.*;
import org.apache.ibatis.annotations.Param;
/**
* 工作日志评论 Mapper
*
* @author 艾楷
*/
@Mapper
public interface WorkLogCommentMapper extends BaseMapperX<WorkLogCommentDO> {
default PageResult<WorkLogCommentDO> selectPage(WorkLogCommentPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<WorkLogCommentDO>()
.eqIfPresent(WorkLogCommentDO::getWorkLogId, reqVO.getWorkLogId())
.eqIfPresent(WorkLogCommentDO::getCommentId, reqVO.getCommentId())
.eqIfPresent(WorkLogCommentDO::getUserId, reqVO.getUserId())
.eqIfPresent(WorkLogCommentDO::getCommentUserId, reqVO.getCommentUserId())
.eqIfPresent(WorkLogCommentDO::getComment, reqVO.getComment())
.eqIfPresent(WorkLogCommentDO::getType, reqVO.getType())
.eqIfPresent(WorkLogCommentDO::getBuildingCode, reqVO.getBuildingCode())
.betweenIfPresent(WorkLogCommentDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(WorkLogCommentDO::getId));
}
/**
*
* @param page
* @param dto
* @return
*/
IPage<CommentPageListVO> queryCommentPageList(@Param("page") Page<CommentPageListVO> page, @Param("dto") CommentDTO dto);
}

View File

@ -0,0 +1,66 @@
package cn.iocoder.yudao.module.system.service.comment;
import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.system.controller.app.comment.dto.CommentDTO;
import cn.iocoder.yudao.module.system.controller.app.comment.vo.*;
import cn.iocoder.yudao.module.system.dal.dataobject.comment.WorkLogCommentDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
/**
* 工作日志评论 Service 接口
*
* @author 艾楷
*/
public interface WorkLogCommentService {
/**
* 创建工作日志评论
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createWorkLogComment(@Valid WorkLogCommentSaveReqVO createReqVO);
/**
* 更新工作日志评论
*
* @param updateReqVO 更新信息
*/
void updateWorkLogComment(@Valid WorkLogCommentSaveReqVO updateReqVO);
/**
* 删除工作日志评论
*
* @param id 编号
*/
void deleteWorkLogComment(Long id);
/**
* 获得工作日志评论
*
* @param id 编号
* @return 工作日志评论
*/
WorkLogCommentDO getWorkLogComment(Long id);
/**
* 获得工作日志评论分页
*
* @param pageReqVO 分页查询
* @return 工作日志评论分页
*/
PageResult<WorkLogCommentDO> getWorkLogCommentPage(WorkLogCommentPageReqVO pageReqVO);
/**
*
* @param page
* @param dto
* @return
*/
IPage<CommentPageListVO> queryCommentPageList(Page<CommentPageListVO> page, CommentDTO dto);
}

View File

@ -0,0 +1,105 @@
package cn.iocoder.yudao.module.system.service.comment;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.system.controller.app.comment.dto.CommentDTO;
import cn.iocoder.yudao.module.system.controller.app.comment.vo.CommentPageListVO;
import cn.iocoder.yudao.module.system.controller.app.comment.vo.WorkLogCommentPageReqVO;
import cn.iocoder.yudao.module.system.controller.app.comment.vo.WorkLogCommentSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.comment.WorkLogCommentDO;
import cn.iocoder.yudao.module.system.dal.mysql.comment.WorkLogCommentMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 工作日志评论 Service 实现类
*
* @author 艾楷
*/
@Service
@Validated
public class WorkLogCommentServiceImpl implements WorkLogCommentService {
@Resource
private WorkLogCommentMapper workLogCommentMapper;
@Override
public Long createWorkLogComment(WorkLogCommentSaveReqVO createReqVO) {
// 插入
WorkLogCommentDO workLogComment = BeanUtils.toBean(createReqVO, WorkLogCommentDO.class);
workLogCommentMapper.insert(workLogComment);
// 返回
return workLogComment.getId();
}
@Override
public void updateWorkLogComment(WorkLogCommentSaveReqVO updateReqVO) {
// 校验存在
// validateWorkLogCommentExists(updateReqVO.getId());
// 更新
WorkLogCommentDO updateObj = BeanUtils.toBean(updateReqVO, WorkLogCommentDO.class);
workLogCommentMapper.updateById(updateObj);
}
@Override
public void deleteWorkLogComment(Long id) {
// 校验存在
// validateWorkLogCommentExists(id);
// 删除
workLogCommentMapper.deleteById(id);
}
// private void validateWorkLogCommentExists(Long id) {
// if (workLogCommentMapper.selectById(id) == null) {
// throw exception(WORK_LOG_COMMENT_NOT_EXISTS);
// }
// }
@Override
public WorkLogCommentDO getWorkLogComment(Long id) {
return workLogCommentMapper.selectById(id);
}
@Override
public PageResult<WorkLogCommentDO> getWorkLogCommentPage(WorkLogCommentPageReqVO pageReqVO) {
return workLogCommentMapper.selectPage(pageReqVO);
}
@Override
public IPage<CommentPageListVO> queryCommentPageList(Page<CommentPageListVO> page, CommentDTO dto) {
IPage<CommentPageListVO> pageList = workLogCommentMapper.queryCommentPageList(page, dto);
if (dto.getIsShowWorkLogContent() != null && dto.getIsShowWorkLogContent() == 1) {
List<CommentPageListVO> records = pageList.getRecords();
//模版ids过滤
List<Long> workFormIds = records.stream().map(CommentPageListVO::getWorkFormId).collect(Collectors.toList());
// TODO: 2024/4/11 查询模版列表
pageList.getRecords().forEach(item -> {
// TODO: 2024/4/11 - 这里需要通过模版id
item.setWorkLogContent(null);
});
}
return pageList;
}
public static void main(String[] args) {
List<CommentPageListVO> records = Arrays.asList(
new CommentPageListVO().setWorkLogId(1L).setWorkFormId("1"),
new CommentPageListVO().setWorkLogId(1L).setWorkFormId("1"),
new CommentPageListVO().setWorkLogId(1L).setWorkFormId("1"),
new CommentPageListVO().setWorkLogId(2L).setWorkFormId("1"));
Map<Long, String> collect = records.stream().collect(Collectors.toMap(CommentPageListVO::getWorkLogId, CommentPageListVO::getWorkFormId));
System.out.println(collect);
}
}

View File

@ -0,0 +1,48 @@
<?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="cn.iocoder.yudao.module.system.dal.mysql.comment.WorkLogCommentMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
<select id="queryCommentPageList"
resultType="cn.iocoder.yudao.module.system.controller.app.comment.vo.CommentPageListVO">
SELECT a.id,
a.work_log_id AS workLogId,
a.user_id AS userId,
c.avatar AS avatar,
c.nickname AS userName,
a.comment_user_id AS commentUserId,
d.avatar AS commentAvatar,
d.nickname AS commentUserName,
a.COMMENT AS COMMENT,
a.type AS type e.COMMENT AS replyComment,
<if test="dto.isShowWorkLogContent != null and dto.isShowWorkLogContent == 1">
b.name as workLogName,
b.form_variables AS workLogContent,
b.form_id as workFormId,
</if>
a.create_time AS createTime
FROM work_log_comment AS a
<if test="dto.isShowWorkLogContent != null and dto.isShowWorkLogContent == 1">
LEFT JOIN work_log_instance_ext AS b ON a.work_log_id = b.id
</if>
LEFT JOIN system_users AS c ON a.user_id = c.id
LEFT JOIN system_users AS d ON a.comment_user_id = d.id
LEFT JOIN work_log_comment AS e ON a.comment_id = e.id
<where>
<if test="dto.workLogId != null">
and a.work_log_id = #{dto.workLogId}
</if>
<if test="dto.type != null">
and a.type = #{dto.type}
</if>
</where>
ORDER BY a.create_time DESC
</select>
</mapper>