package com.jsl.oa.dao;
/*
张睿相 Java
*/
import com.jsl.oa.mapper.ProjectDailyMapper;
import com.jsl.oa.mapper.ProjectMapper;
import com.jsl.oa.model.dodata.ProjectDO;
import com.jsl.oa.model.dodata.ProjectDailyDO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* ProjectDailyDAO
*
* 用于处理日报相关的请求, 包括获取日报、添加日报信息、编辑日报信息等
*
* @author zrx_hhh
* @version v1.0.0
* @since v1.0.0-SNAPSHOT
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class ProjectDailyDAO {
private final ProjectDailyMapper projectDailyMapper;
private final ProjectMapper projectMapper;
public void addProjectDaily(ProjectDailyDO projectDailyDO) {
projectDailyMapper.insert(projectDailyDO);
}
public List getMyProjectDaily(Long userId) {
// 日报数据数组
List projectDailyDOList = new ArrayList<>();
// 先获取我负责的项目下的日报数据
//获取我负责的项目
List projectDOS = projectMapper.getAllProjectByUserId(userId);
//获取项目下对应日报
for (ProjectDO projectDO:projectDOS) {
List dailyFromProject = projectDailyMapper.getProjectDailyByProject(projectDO.getId());
projectDailyDOList.addAll(dailyFromProject);
}
// 在获取本人的发布日报
List myProjectDaily = projectDailyMapper.getProjectDailyByUser(userId);
projectDailyDOList.addAll(myProjectDaily);
// 排序并去重
projectDailyDOList = sortaAndNotRepeatDailyDO(projectDailyDOList);
return projectDailyDOList;
}
public List getMyProjectDailyByTime(Long userId, Date beginTime, Date endTime) {
// 日报数据数组
List projectDailyDOList = new ArrayList<>();
// 先获取我负责的项目下的日报数据
//获取我负责的项目
List projectDOS = projectMapper.getAllProjectByUserId(userId);
//获取项目下对应日报,并根据时间筛选
for (ProjectDO projectDO:projectDOS) {
List dailyFromProject = projectDailyMapper.getProjectDailyByProjectAndTime(projectDO.getId(),
beginTime, endTime);
projectDailyDOList.addAll(dailyFromProject);
}
// 在获取本人的发布日报,并根据时间筛选
List myProjectDaily = projectDailyMapper.
getProjectDailyByUserAndTime(userId, beginTime, endTime);
projectDailyDOList.addAll(myProjectDaily);
// 排序并去重
projectDailyDOList = sortaAndNotRepeatDailyDO(projectDailyDOList);
return projectDailyDOList;
}
public List sortaAndNotRepeatDailyDO(List projectDailyDOList) {
// 去除重复的日报信息
projectDailyDOList = projectDailyDOList.stream()
// 根据 id 属性进行去重
.collect(Collectors.toMap(ProjectDailyDO::getId,
Function.identity(), (existing, replacement) -> existing))
.values().stream()
.collect(Collectors.toList());
// 根据时间进行排序
projectDailyDOList = projectDailyDOList.stream()
.sorted(Comparator.comparing(ProjectDailyDO::getCreatedAt).reversed())
.collect(Collectors.toList());
return projectDailyDOList;
}
public void deleteDailyById(Integer dailyId) {
projectDailyMapper.deleteDailyById(dailyId);
}
public ProjectDailyDO getPorjectDailyById(Integer id) {
return projectDailyMapper.getDailyById(id);
}
public void updateDaily(ProjectDailyDO projectDailyDO) {
projectDailyMapper.updateDaily(projectDailyDO);
}
}