package jnpf.memberLog.mapper;

import jnpf.model.memberLog.dto.CommentQueryDto;
import jnpf.model.memberLog.dto.LogQueryDto;
import jnpf.model.memberLog.dto.StatQueryDto;
import jnpf.model.memberLog.po.LogComment;
import jnpf.model.memberLog.vo.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 工作日志mapper
 *
 * @author yanwenfu
 * @create 2023-08-08
 */
public interface WorkLogMapper {

    /**
     * 查询日志主表
     * @param logId 日志id
     * @return jnpf.model.memberLog.vo.MiniMemberLogVo
     */
    MiniMemberLogVo getLog(String logId);

    /**
     * 查询评论列表
     * @param queryDto 查询条件
     * @return java.util.List<jnpf.model.memberLog.vo.LogCommentVo>
     */
    List<LogCommentVo> getCommentList(CommentQueryDto queryDto);

    /**
     * 查询日志评论
     * @param id 评论id
     * @return jnpf.model.memberLog.po.LogComment
     */
    LogComment getLogComment(String id);

    /**
     * 新增日志评论
     * @param logComment 评论
     * @return int
     */
    int addCommentReply(LogComment logComment);

    /**
     * 查询成员日志信息关联
     * @param logId 日志id
     * @param userId 用户id
     * @param type 类型(1: 汇报, 2: 抄送, 3: 转发, 4: 点赞)
     * @return jnpf.model.memberLog.vo.LogAssociationVo
     */
    LogAssociationVo getLogAssociation(@Param("logId") String logId, @Param("userId") String userId, @Param("type") int type);

    /**
     * 删除点赞记录
     * @param associationId 关联id
     * @return int
     */
    int deleteLikeRecord(String associationId);

    /**
     * 新增点赞记录
     * @param association 点赞信息
     * @return int
     */
    int addAssociationRecord(LogAssociationVo association);

    /**
     * 根据日期统计用户写日志数量
     * @param queryDto 查询条件
     * @param userIds 筛选成员
     * @return java.util.List<jnpf.model.memberLog.vo.LogDataVo>
     */
    List<LogDataVo> getLogDataStat(@Param("queryDto") StatQueryDto queryDto, @Param("userIds") List<String> userIds);

    /**
     * 查询与我相关的全部日志列表
     * @param queryDto 查询条件
     * @return java.util.List<jnpf.model.memberLog.vo.MiniLogVo>
     */
    List<MiniLogVo> getAllLogList(LogQueryDto queryDto);

    /**
     * 我发布的日志列表
     * @param queryDto 查询条件
     * @return java.util.List<jnpf.model.memberLog.vo.MiniLogVo>
     */
    List<MiniLogVo> getMyLogList(LogQueryDto queryDto);

    /**
     * 查询与我部门相关的日志列表
     * @param userId 用户id
     * @param orgUserIds 部门用户ids
     * @param beginDate 开始时间
     * @param endDate 结束时间
     * @return java.util.List<jnpf.model.memberLog.vo.MiniLogVo>
     */
    List<MiniLogVo> getMyOrganizeLogList(@Param("userId") String userId, @Param("orgUserIds") List<String> orgUserIds, @Param("beginDate") String beginDate, @Param("endDate") String endDate);

    /**
     * 可查看的字段列表
     * @param logIds 日志ids
     * @return java.util.List<jnpf.model.memberLog.vo.LogMemberFieldVo>
     */
    List<LogMemberFieldVo> getViewableFieldList(@Param("logIds") List<String> logIds);

    /**
     * 查询日志列表
     * @param queryType 类型(日志, 日报, 周报, 月报, 拜访记录, 业绩日报)
     * @param beginDate 开始时间(yyyy-MM-dd)
     * @param endDate 结束时间(yyyy-MM-dd)
     * @param content 模糊查询(内容)
     * @param userIds 用户ids
     * @return java.util.List<jnpf.model.memberLog.vo.WebLogVo>
     */
    List<WebLogVo> getWebLogList(@Param("queryType") String queryType, @Param("beginDate") String beginDate, @Param("endDate") String endDate,
                                 @Param("content") String content, @Param("userIds") List<String> userIds);

    /**
     * 查询我创建的, 别人抄送/汇报给我的
     * @param queryType 类型(日志, 日报, 周报, 月报, 拜访记录, 业绩日报)
     * @param beginDate 开始时间(yyyy-MM-dd)
     * @param endDate 结束时间(yyyy-MM-dd)
     * @param content 模糊查询(内容)
     * @param userIds 用户ids
     * @param userId 当前登录用户id
     * @param selfQuery 是否查询自己创建的(1: 是, 0: 否)
     * @return java.util.List<jnpf.model.memberLog.vo.WebLogVo>
     */
    List<WebLogVo> getWebLogListByAuth(@Param("queryType") String queryType, @Param("beginDate") String beginDate, @Param("endDate") String endDate,
                                       @Param("content") String content, @Param("userIds") List<String> userIds, @Param("userId") String userId, @Param("selfQuery") String selfQuery);

    /**
     * 根据条件查询日志列表
     * @param userId 当前登录人
     * @param content 内容
     * @param userIds 用户ids
     * @return java.util.List<jnpf.model.memberLog.vo.MiniLogVo>
     */
    List<MiniLogVo> getLogListByCondition(@Param("userId") String userId, @Param("content") String content, @Param("userIds") List<String> userIds);

    /**
     * 日志列表 - 指定人员查询
     * @param userId 用户id
     * @param beginDate 开始时间
     * @param endDate 结束时间
     * @return java.util.List<jnpf.model.memberLog.vo.MiniLogVo>
     */
    List<MiniLogVo> getLogListByUser(@Param("userId") String userId, @Param("beginDate") String beginDate, @Param("endDate") String endDate);

    /**
     * 查询评论/回复详情
     * @param id 评论/回复id
     * @return jnpf.model.memberLog.vo.LogCommentVo
     */
    LogCommentVo getLogCommentVo(String id);

    /**
     * 删除回复/评论
     * @param commentId 评论id
     * @param userId 删除人id
     * @return int
     */
    int deleteLogCommentByPath(@Param("commentId") String commentId, @Param("userId") String userId);

    /**
     * 批量新增转发信息
     * @param list 转发信息
     * @return int
     */
    int addAssociationRecordBatch(@Param("list") List<LogAssociationVo> list);

    /**
     * 评论总条数
     * @param logId 日志id
     * @return java.lang.Integer
     */
    Integer getCommentTotalNum(String logId);

    /**
     * 删除评论
     * @param commentId 评论id
     * @param userId 用户id
     * @return int
     */
    int deleteLogCommentById(@Param("commentId") String commentId, @Param("userId") String userId);
}
