|
|
@ -12,6 +12,7 @@ import com.ccsens.util.CodeEnum; |
|
|
|
import com.ccsens.util.DateUtil; |
|
|
|
import com.ccsens.util.WebConstant; |
|
|
|
import com.ccsens.util.exception.BaseException; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.transaction.annotation.Propagation; |
|
|
@ -20,8 +21,9 @@ import org.springframework.transaction.annotation.Transactional; |
|
|
|
import java.util.*; |
|
|
|
|
|
|
|
|
|
|
|
@Slf4j |
|
|
|
@Service |
|
|
|
@Transactional(propagation = Propagation.REQUIRED) |
|
|
|
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) |
|
|
|
public class ProTaskDetailService implements IProTaskDetailService { |
|
|
|
@Autowired |
|
|
|
private IProRoleService proRoleService; |
|
|
@ -47,6 +49,8 @@ public class ProTaskDetailService implements IProTaskDetailService { |
|
|
|
private ProMemberDao proMemberDao; |
|
|
|
@Autowired |
|
|
|
private SysProjectDao sysProjectDao; |
|
|
|
@Autowired |
|
|
|
private TaskPluginDao taskPluginDao; |
|
|
|
|
|
|
|
@Override |
|
|
|
public void saveTaskDetail(ProTaskDetail taskDetail) { |
|
|
@ -56,7 +60,7 @@ public class ProTaskDetailService implements IProTaskDetailService { |
|
|
|
@Override |
|
|
|
public Object getTasksByRoleId(Long currentUserId, Long projectId, Long roleId, Long startTime, Long endTime, Integer process, Integer page, Integer pageSize) throws Exception { |
|
|
|
SysProject sysProject = sysProjectDao.selectByPrimaryKey(projectId); |
|
|
|
if(ObjectUtil.isNull(sysProject)){ |
|
|
|
if (ObjectUtil.isNull(sysProject)) { |
|
|
|
throw new BaseException(CodeEnum.NOT_PROJECT); |
|
|
|
} |
|
|
|
startTime = startTime == null ? sysProject.getBeginTime() : startTime; |
|
|
@ -64,22 +68,22 @@ public class ProTaskDetailService implements IProTaskDetailService { |
|
|
|
|
|
|
|
Object obj = null; |
|
|
|
ProRole role = proRoleDao.selectByPrimaryKey(roleId); |
|
|
|
if(ObjectUtil.isNull(role)){ |
|
|
|
if (ObjectUtil.isNull(role)) { |
|
|
|
throw new BaseException(CodeEnum.NOT_ROLE); |
|
|
|
} |
|
|
|
ProRole parentRole = proRoleDao.selectByPrimaryKey(role.getParentId()); |
|
|
|
if(ObjectUtil.isNull(parentRole)){ |
|
|
|
if (ObjectUtil.isNull(parentRole)) { |
|
|
|
throw new BaseException(CodeEnum.NOT_ROLE); |
|
|
|
} |
|
|
|
if(ObjectUtil.isNotNull(role)) { |
|
|
|
if (ObjectUtil.isNotNull(role)) { |
|
|
|
if (role.getName().equalsIgnoreCase(WebConstant.ROLE_NAME.MVP.value)) { |
|
|
|
obj = getTaskInfoByMvp(projectId, page, pageSize); |
|
|
|
} else if (parentRole.getName().equalsIgnoreCase(WebConstant.ROLE_NAME.PM.value)) { |
|
|
|
obj = getTaskInfoByProjectIdAndPM(currentUserId,projectId, startTime, endTime, process, page, pageSize); |
|
|
|
obj = getTaskInfoByProjectIdAndPM(currentUserId, projectId, startTime, endTime, process, page, pageSize); |
|
|
|
} else if (parentRole.getName().equalsIgnoreCase(WebConstant.ROLE_NAME.Member.value)) { |
|
|
|
obj = getTaskInfoByProjectIdAndRoleId(currentUserId, projectId, roleId, startTime, endTime, process, page, pageSize); |
|
|
|
} |
|
|
|
}else { |
|
|
|
} else { |
|
|
|
throw new BaseException(CodeEnum.NOT_ROLE); |
|
|
|
} |
|
|
|
return obj; |
|
|
@ -96,46 +100,46 @@ public class ProTaskDetailService implements IProTaskDetailService { |
|
|
|
TaskVo.NormalTask normalTask = null; |
|
|
|
//1、查找一级任务
|
|
|
|
SysProject project = sysProjectDao.selectByPrimaryKey(projectId); |
|
|
|
if(endTime < project.getBeginTime() || startTime > project.getEndTime()){ |
|
|
|
if (endTime < project.getBeginTime() || startTime > project.getEndTime()) { |
|
|
|
return proTaskInfo; |
|
|
|
} |
|
|
|
ProTaskDetailExample proTaskDetailExample = new ProTaskDetailExample(); |
|
|
|
proTaskDetailExample.createCriteria().andProjectIdEqualTo(projectId).andLevelEqualTo((byte) 1); |
|
|
|
List<ProTaskDetail> firstTaskDetailList = taskDetailDao.selectByExample(proTaskDetailExample); |
|
|
|
if(CollectionUtil.isNotEmpty(firstTaskDetailList)){ |
|
|
|
if (CollectionUtil.isNotEmpty(firstTaskDetailList)) { |
|
|
|
int sequence = 1; |
|
|
|
for(ProTaskDetail firstTaskDetail:firstTaskDetailList){ |
|
|
|
for (ProTaskDetail firstTaskDetail : firstTaskDetailList) { |
|
|
|
normalTask = new TaskVo.NormalTask(); |
|
|
|
BeanUtil.copyProperties(firstTaskDetail,normalTask); |
|
|
|
BeanUtil.copyProperties(firstTaskDetail, normalTask); |
|
|
|
normalTask.setDetailId(firstTaskDetail.getId()); |
|
|
|
normalTask.setId(null); |
|
|
|
normalTask.setSequence(sequence); |
|
|
|
//查找一级任务下的二级任务
|
|
|
|
List<TaskVo.NormalTask> secondNormalTaskList = taskDetailDao.selectNormalTaskListByPM(projectId,firstTaskDetail.getId(),startTime,endTime); |
|
|
|
if(CollectionUtil.isNotEmpty(secondNormalTaskList)){ |
|
|
|
for(TaskVo.NormalTask task:secondNormalTaskList){ |
|
|
|
ProSubTimeMember subTimeMember = getProcessByUserIdAndTask(currentUserId,task.getId()); |
|
|
|
if(ObjectUtil.isNotNull(subTimeMember)){ |
|
|
|
List<TaskVo.NormalTask> secondNormalTaskList = taskDetailDao.selectNormalTaskListByPM(projectId, firstTaskDetail.getId(), startTime, endTime); |
|
|
|
if (CollectionUtil.isNotEmpty(secondNormalTaskList)) { |
|
|
|
for (TaskVo.NormalTask task : secondNormalTaskList) { |
|
|
|
ProSubTimeMember subTimeMember = getProcessByUserIdAndTask(currentUserId, task.getId()); |
|
|
|
if (ObjectUtil.isNotNull(subTimeMember)) { |
|
|
|
task.setRealEndTime(subTimeMember.getRealFinishTime()); |
|
|
|
task.setProcess(subTimeMember.getComplatedStatus()); |
|
|
|
} |
|
|
|
} |
|
|
|
TaskUtil.Task task = TaskUtil.splitTask(secondNormalTaskList,startTime,endTime,process); |
|
|
|
if(CollectionUtil.isNotEmpty(task.getGlobalTask())){ |
|
|
|
for(TaskVo.NormalTask global:task.getGlobalTask()){ |
|
|
|
TaskUtil.Task task = TaskUtil.splitTask(secondNormalTaskList, startTime, endTime, process); |
|
|
|
if (CollectionUtil.isNotEmpty(task.getGlobalTask())) { |
|
|
|
for (TaskVo.NormalTask global : task.getGlobalTask()) { |
|
|
|
globalTask = new TaskVo.GlobalTask(); |
|
|
|
BeanUtil.copyProperties(global,globalTask); |
|
|
|
BeanUtil.copyProperties(global, globalTask); |
|
|
|
globalTaskList.add(globalTask); |
|
|
|
} |
|
|
|
} |
|
|
|
if(CollectionUtil.isNotEmpty(task.getCommonTask())){ |
|
|
|
if (CollectionUtil.isNotEmpty(task.getCommonTask())) { |
|
|
|
normalTask.setSecondTasks(new ArrayList<>()); |
|
|
|
normalTask.getSecondTasks().addAll(task.getCommonTask()); |
|
|
|
} |
|
|
|
} |
|
|
|
// if(CollectionUtil.isNotEmpty(normalTask.getSecondTasks())) {
|
|
|
|
normalTaskList.add(normalTask); |
|
|
|
sequence++; |
|
|
|
normalTaskList.add(normalTask); |
|
|
|
sequence++; |
|
|
|
// }
|
|
|
|
} |
|
|
|
} |
|
|
@ -148,6 +152,7 @@ public class ProTaskDetailService implements IProTaskDetailService { |
|
|
|
proTaskInfo.setNormalTaskList(normalTaskList); |
|
|
|
return proTaskInfo; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 查看任务 项目成员 |
|
|
|
*/ |
|
|
@ -159,28 +164,28 @@ public class ProTaskDetailService implements IProTaskDetailService { |
|
|
|
//获取“全体成员”角色
|
|
|
|
ProRole allMember = proRoleService.getAllMember(projectId); |
|
|
|
Long allMemberId = null; |
|
|
|
if(ObjectUtil.isNotNull(allMember)) { |
|
|
|
if (ObjectUtil.isNotNull(allMember)) { |
|
|
|
allMemberId = allMember.getId(); |
|
|
|
} |
|
|
|
//查找该角色的所有任务(全体成员的任务也是这个角色的任务)
|
|
|
|
List<TaskVo.NormalTask> secondTaskVoList = taskDetailDao.selectTaskByRoleAndAllMembers(projectId, roleId, allMemberId,startTime,endTime); |
|
|
|
if(CollectionUtil.isNotEmpty(secondTaskVoList)){ |
|
|
|
for(TaskVo.NormalTask normalTask:secondTaskVoList){ |
|
|
|
ProSubTimeMember subTimeMember = getProcessByUserIdAndTask(currentUserId,normalTask.getId()); |
|
|
|
if(ObjectUtil.isNotNull(subTimeMember)){ |
|
|
|
List<TaskVo.NormalTask> secondTaskVoList = taskDetailDao.selectTaskByRoleAndAllMembers(projectId, roleId, allMemberId, startTime, endTime); |
|
|
|
if (CollectionUtil.isNotEmpty(secondTaskVoList)) { |
|
|
|
for (TaskVo.NormalTask normalTask : secondTaskVoList) { |
|
|
|
ProSubTimeMember subTimeMember = getProcessByUserIdAndTask(currentUserId, normalTask.getId()); |
|
|
|
if (ObjectUtil.isNotNull(subTimeMember)) { |
|
|
|
normalTask.setProcess(subTimeMember.getComplatedStatus()); |
|
|
|
normalTask.setRealEndTime(subTimeMember.getRealFinishTime()); |
|
|
|
} |
|
|
|
} |
|
|
|
TaskUtil.Task task = TaskUtil.splitTask(secondTaskVoList,startTime,endTime,process); |
|
|
|
if(CollectionUtil.isNotEmpty(task.getGlobalTask())){ |
|
|
|
for(TaskVo.NormalTask global:task.getGlobalTask()){ |
|
|
|
TaskUtil.Task task = TaskUtil.splitTask(secondTaskVoList, startTime, endTime, process); |
|
|
|
if (CollectionUtil.isNotEmpty(task.getGlobalTask())) { |
|
|
|
for (TaskVo.NormalTask global : task.getGlobalTask()) { |
|
|
|
globalTask = new TaskVo.GlobalTask(); |
|
|
|
BeanUtil.copyProperties(global,globalTask); |
|
|
|
BeanUtil.copyProperties(global, globalTask); |
|
|
|
globalTaskList.add(globalTask); |
|
|
|
} |
|
|
|
} |
|
|
|
if(CollectionUtil.isNotEmpty(task.getCommonTask())){ |
|
|
|
if (CollectionUtil.isNotEmpty(task.getCommonTask())) { |
|
|
|
normalTaskList = sortTaskTime(task.getCommonTask()); |
|
|
|
} |
|
|
|
} |
|
|
@ -223,6 +228,7 @@ public class ProTaskDetailService implements IProTaskDetailService { |
|
|
|
proTaskInfo.setNormalTaskList(theNormalTaskList); |
|
|
|
return proTaskInfo; |
|
|
|
} |
|
|
|
|
|
|
|
private List<TaskVo.NormalTask> sortTaskTime(List<TaskVo.NormalTask> commonTask) { |
|
|
|
List<TaskVo.NormalTask> normalTaskList = new ArrayList<>(); |
|
|
|
List<TaskVo.NormalTask> secondTaskVoList = null; |
|
|
@ -251,8 +257,8 @@ public class ProTaskDetailService implements IProTaskDetailService { |
|
|
|
Long endTime = timeList.get(i + 1); |
|
|
|
|
|
|
|
for (TaskVo.NormalTask secondTaskVo : commonTask) { |
|
|
|
if(secondTaskVo.getTimeStatus() == 1){ |
|
|
|
if(secondTaskVo.getBeginTime().longValue() == startTime.longValue()) { |
|
|
|
if (secondTaskVo.getTimeStatus() == 1) { |
|
|
|
if (secondTaskVo.getBeginTime().longValue() == startTime.longValue()) { |
|
|
|
normalTask = new TaskVo.NormalTask(); |
|
|
|
BeanUtil.copyProperties(secondTaskVo, normalTask); |
|
|
|
normalTask.setEndTime(null); |
|
|
@ -262,8 +268,8 @@ public class ProTaskDetailService implements IProTaskDetailService { |
|
|
|
} |
|
|
|
continue; |
|
|
|
} |
|
|
|
if(secondTaskVo.getTimeStatus() == 2){ |
|
|
|
if(secondTaskVo.getEndTime().longValue() == endTime.longValue()) { |
|
|
|
if (secondTaskVo.getTimeStatus() == 2) { |
|
|
|
if (secondTaskVo.getEndTime().longValue() == endTime.longValue()) { |
|
|
|
normalTask = new TaskVo.NormalTask(); |
|
|
|
BeanUtil.copyProperties(secondTaskVo, normalTask); |
|
|
|
normalTask.setBeginTime(null); |
|
|
@ -317,14 +323,14 @@ public class ProTaskDetailService implements IProTaskDetailService { |
|
|
|
TaskVo.ProTaskInfoByMVP proTaskInfoByMVP = new TaskVo.ProTaskInfoByMVP(); |
|
|
|
List<TaskVo.TaskDeliverByMVP> taskDeliverByMVPList = new ArrayList<>(); |
|
|
|
TaskVo.TaskDeliverByMVP taskDeliverByMVP = null; |
|
|
|
List<TaskVo.FirstTask> firstTasks =new ArrayList<>(); |
|
|
|
List<TaskVo.FirstTask> firstTasks = new ArrayList<>(); |
|
|
|
TaskVo.FirstTask firstProTask = null; |
|
|
|
//查找项目下的一级任务
|
|
|
|
ProTaskDetailExample firstTaskExample = new ProTaskDetailExample(); |
|
|
|
firstTaskExample.createCriteria().andProjectIdEqualTo(projectId).andVirtualEqualTo((byte) WebConstant.TASK_VIRTUAL.Normal.value).andParentIdEqualTo(0L); |
|
|
|
List<ProTaskDetail> firstTaskList = taskDetailDao.selectByExample(firstTaskExample); |
|
|
|
if(CollectionUtil.isNotEmpty(firstTaskList)){ |
|
|
|
for(ProTaskDetail firstTask:firstTaskList){ |
|
|
|
if (CollectionUtil.isNotEmpty(firstTaskList)) { |
|
|
|
for (ProTaskDetail firstTask : firstTaskList) { |
|
|
|
taskDeliverByMVPList = new ArrayList<>(); |
|
|
|
//查找项目下所有的二级任务
|
|
|
|
ProTaskDetailExample taskExample = new ProTaskDetailExample(); |
|
|
@ -370,39 +376,39 @@ public class ProTaskDetailService implements IProTaskDetailService { |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
*通过任务id查任务详情 |
|
|
|
* 通过任务id查任务详情 |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public TaskVo.NormalTask getTaskInfoByTaskId(Long currentUserId, Long projectId, Long taskId) throws Exception { |
|
|
|
ProTaskSubTime subTime = taskSubTimeDao.selectByPrimaryKey(taskId); |
|
|
|
TaskVo.NormalTask taskDetail = null; |
|
|
|
if(ObjectUtil.isNotNull(subTime)) { |
|
|
|
taskDetail = taskDetailDao.selectTaskByTaskId(subTime.getId(),subTime.getTaskDetailId()); |
|
|
|
if (ObjectUtil.isNotNull(subTime)) { |
|
|
|
taskDetail = taskDetailDao.selectTaskByTaskId(subTime.getId(), subTime.getTaskDetailId()); |
|
|
|
//修改任务的完成状态
|
|
|
|
ProSubTimeMember subTimeMember = getProcessByUserIdAndTask(currentUserId,taskDetail.getId()); |
|
|
|
if(ObjectUtil.isNotNull(subTimeMember)){ |
|
|
|
ProSubTimeMember subTimeMember = getProcessByUserIdAndTask(currentUserId, taskDetail.getId()); |
|
|
|
if (ObjectUtil.isNotNull(subTimeMember)) { |
|
|
|
taskDetail.setProcess(subTimeMember.getComplatedStatus()); |
|
|
|
taskDetail.setRealEndTime(subTimeMember.getRealFinishTime()); |
|
|
|
} |
|
|
|
//添加项目信息和插件信息
|
|
|
|
normalTaskAddPlugin(currentUserId,subTime.getTaskDetailId(),taskDetail); |
|
|
|
normalTaskAddPlugin(currentUserId, subTime.getTaskDetailId(), taskDetail); |
|
|
|
if (ObjectUtil.isNotNull(taskDetail)) { |
|
|
|
List<TaskVo.NormalTask> groupTaskList = new ArrayList<>(); |
|
|
|
groupTaskList = taskDetailDao.selectTaskByParentId(projectId, taskDetail.getDetailId()); |
|
|
|
if (CollectionUtil.isNotEmpty(groupTaskList)) { |
|
|
|
for(TaskVo.NormalTask groupTask:groupTaskList){ |
|
|
|
for (TaskVo.NormalTask groupTask : groupTaskList) { |
|
|
|
//修改任务的完成状态
|
|
|
|
ProSubTimeMember proSubTimeMember = getProcessByUserIdAndTask(currentUserId,groupTask.getId()); |
|
|
|
if(ObjectUtil.isNotNull(proSubTimeMember)){ |
|
|
|
ProSubTimeMember proSubTimeMember = getProcessByUserIdAndTask(currentUserId, groupTask.getId()); |
|
|
|
if (ObjectUtil.isNotNull(proSubTimeMember)) { |
|
|
|
groupTask.setProcess(proSubTimeMember.getComplatedStatus()); |
|
|
|
groupTask.setRealEndTime(proSubTimeMember.getRealFinishTime()); |
|
|
|
} |
|
|
|
//添加项目信息和插件信息
|
|
|
|
normalTaskAddPlugin(currentUserId,groupTask.getDetailId(),groupTask); |
|
|
|
normalTaskAddPlugin(currentUserId, groupTask.getDetailId(), groupTask); |
|
|
|
//修改返回时子任务的名字(“任务名+(xx和XX)”)
|
|
|
|
ProTaskDetail proTaskDetail = taskDetailDao.selectByPrimaryKey(groupTask.getDetailId()); |
|
|
|
if(proTaskDetail.getAllMember()==0){ |
|
|
|
groupTask.setName(updateSubTaskName(groupTask.getDetailId(),groupTask.getName())); |
|
|
|
if (proTaskDetail.getAllMember() == 0) { |
|
|
|
groupTask.setName(updateSubTaskName(groupTask.getDetailId(), groupTask.getName())); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
@ -413,37 +419,39 @@ public class ProTaskDetailService implements IProTaskDetailService { |
|
|
|
} |
|
|
|
return taskDetail; |
|
|
|
} |
|
|
|
private void normalTaskAddPlugin(Long userId,Long taskId,TaskVo.NormalTask normalTask) throws Exception { |
|
|
|
|
|
|
|
private void normalTaskAddPlugin(Long userId, Long taskId, TaskVo.NormalTask normalTask) throws Exception { |
|
|
|
ProTaskDetail task = taskDetailDao.selectByPrimaryKey(taskId); |
|
|
|
//添加项目信息
|
|
|
|
SysProject project = sysProjectDao.selectByPrimaryKey(task.getProjectId()); |
|
|
|
if(ObjectUtil.isNotNull(project)){ |
|
|
|
if (ObjectUtil.isNotNull(project)) { |
|
|
|
normalTask.setProjectId(project.getId()); |
|
|
|
normalTask.setProjectName(project.getName()); |
|
|
|
} |
|
|
|
ProRole role = proRoleDao.selectByPrimaryKey(normalTask.getExecutorRole()); |
|
|
|
if(ObjectUtil.isNotNull(role)){ |
|
|
|
if (ObjectUtil.isNotNull(role)) { |
|
|
|
normalTask.setExecutorRoleName(role.getName()); |
|
|
|
} |
|
|
|
//添加插件
|
|
|
|
List<TaskVo.PluginVo> pluginVoList = pluginService.getPluginByTask(task.getId(),userId); |
|
|
|
List<TaskVo.PluginVo> pluginVoList = pluginService.getPluginByTask(task.getId(), userId); |
|
|
|
normalTask.setPlugins(new ArrayList<>()); |
|
|
|
normalTask.getPlugins().addAll(pluginVoList); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 修改返回时子任务的名字 格式:“任务名+(xx和XX)” |
|
|
|
*/ |
|
|
|
private String updateSubTaskName(Long taskId,String taskName){ |
|
|
|
private String updateSubTaskName(Long taskId, String taskName) { |
|
|
|
String name = taskName + "("; |
|
|
|
ProTaskMemberExample taskMemberExample = new ProTaskMemberExample(); |
|
|
|
taskMemberExample.createCriteria().andTaskDetailIdEqualTo(taskId); |
|
|
|
List<ProTaskMember> taskMemberList = taskMemberDao.selectByExample(taskMemberExample); |
|
|
|
if(CollectionUtil.isNotEmpty(taskMemberList)){ |
|
|
|
for(int i = 0;i < taskMemberList.size();i++){ |
|
|
|
if (CollectionUtil.isNotEmpty(taskMemberList)) { |
|
|
|
for (int i = 0; i < taskMemberList.size(); i++) { |
|
|
|
ProMember member = proMemberDao.selectByPrimaryKey(taskMemberList.get(i).getMemberId()); |
|
|
|
if(ObjectUtil.isNotNull(member)){ |
|
|
|
if (ObjectUtil.isNotNull(member)) { |
|
|
|
name += member.getNickname(); |
|
|
|
if(i != taskMemberList.size()-1){ |
|
|
|
if (i != taskMemberList.size() - 1) { |
|
|
|
name += "和"; |
|
|
|
} |
|
|
|
} |
|
|
@ -466,19 +474,19 @@ public class ProTaskDetailService implements IProTaskDetailService { |
|
|
|
//获取日期的开始结束时间
|
|
|
|
Long startMillisTime = null; |
|
|
|
Long endMillisTime = null; |
|
|
|
Map<String,Long> timeMap = null; |
|
|
|
if(StrUtil.isNotEmpty(start)){ |
|
|
|
Map<String, Long> timeMap = null; |
|
|
|
if (StrUtil.isNotEmpty(start)) { |
|
|
|
timeMap = DateUtil.projectFormatDateTime(start); |
|
|
|
startMillisTime = timeMap.get("startMillisTime"); |
|
|
|
} |
|
|
|
if(StrUtil.isNotEmpty(end)){ |
|
|
|
if (StrUtil.isNotEmpty(end)) { |
|
|
|
timeMap = DateUtil.projectFormatDateTime(start); |
|
|
|
endMillisTime = timeMap.get("endMillisTime"); |
|
|
|
} |
|
|
|
//获取该用户关注的项目
|
|
|
|
List<SysProject> projectList = attentionService.findProjectIdByUserId(currentUserId); |
|
|
|
if(CollectionUtil.isNotEmpty(projectList)){ |
|
|
|
if(StrUtil.isNotEmpty(role)) { |
|
|
|
if (CollectionUtil.isNotEmpty(projectList)) { |
|
|
|
if (StrUtil.isNotEmpty(role)) { |
|
|
|
switch (role) { |
|
|
|
case "创建者": |
|
|
|
for (SysProject project : projectList) { |
|
|
@ -503,7 +511,7 @@ public class ProTaskDetailService implements IProTaskDetailService { |
|
|
|
default: |
|
|
|
break; |
|
|
|
} |
|
|
|
}else { |
|
|
|
} else { |
|
|
|
for (SysProject project : projectList) { |
|
|
|
List<TaskVo.NormalTask> taskList = getTaskInfoByProjectIdAndUserId(project, currentUserId, startMillisTime, endMillisTime); |
|
|
|
if (CollectionUtil.isNotEmpty(taskList)) { |
|
|
@ -560,36 +568,37 @@ public class ProTaskDetailService implements IProTaskDetailService { |
|
|
|
taskCheckList.setPageInfo(pageInfo); |
|
|
|
return taskCheckList; |
|
|
|
} |
|
|
|
|
|
|
|
private List<TaskVo.NormalTask> getTaskInfoByProjectIdAndUserId(SysProject project, Long userId, |
|
|
|
Long startTime, Long endTime) throws Exception { |
|
|
|
List<TaskVo.NormalTask> normalTaskList = new ArrayList<>(); |
|
|
|
//获取用户的角色
|
|
|
|
List<ProRole> roleList = proRoleService.getProRoleByProjectIdAndUserId(project.getId(),userId); |
|
|
|
List<ProRole> roleList = proRoleService.getProRoleByProjectIdAndUserId(project.getId(), userId); |
|
|
|
//获取“全体成员”角色
|
|
|
|
ProRole allMember = proRoleService.getAllMember(project.getId()); |
|
|
|
Long allMemberId = null; |
|
|
|
if(ObjectUtil.isNotNull(allMember)) { |
|
|
|
if (ObjectUtil.isNotNull(allMember)) { |
|
|
|
allMemberId = allMember.getId(); |
|
|
|
} |
|
|
|
if(CollectionUtil.isNotEmpty(roleList)) { |
|
|
|
for(ProRole role:roleList) { |
|
|
|
if (CollectionUtil.isNotEmpty(roleList)) { |
|
|
|
for (ProRole role : roleList) { |
|
|
|
SysProject sysProject = sysProjectDao.selectByPrimaryKey(role.getProjectId()); |
|
|
|
List<TaskVo.NormalTask> taskList = |
|
|
|
taskDetailDao.selectTaskByRoleAndAllMembers(project.getId(), role.getId(), allMemberId, startTime, endTime); |
|
|
|
if(CollectionUtil.isNotEmpty(taskList)) { |
|
|
|
for(TaskVo.NormalTask normalTask:taskList){ |
|
|
|
if (CollectionUtil.isNotEmpty(taskList)) { |
|
|
|
for (TaskVo.NormalTask normalTask : taskList) { |
|
|
|
//修改任务的完成状态
|
|
|
|
ProSubTimeMember proSubTimeMember = getProcessByUserIdAndTask(userId,normalTask.getId()); |
|
|
|
if(ObjectUtil.isNotNull(proSubTimeMember)){ |
|
|
|
ProSubTimeMember proSubTimeMember = getProcessByUserIdAndTask(userId, normalTask.getId()); |
|
|
|
if (ObjectUtil.isNotNull(proSubTimeMember)) { |
|
|
|
normalTask.setProcess(proSubTimeMember.getComplatedStatus()); |
|
|
|
normalTask.setRealEndTime(proSubTimeMember.getRealFinishTime()); |
|
|
|
} |
|
|
|
ProRole proRole = proRoleDao.selectByPrimaryKey(normalTask.getExecutorRole()); |
|
|
|
if(ObjectUtil.isNotNull(sysProject)) { |
|
|
|
if (ObjectUtil.isNotNull(sysProject)) { |
|
|
|
normalTask.setProjectId(sysProject.getId()); |
|
|
|
normalTask.setProjectName(sysProject.getName()); |
|
|
|
} |
|
|
|
if(ObjectUtil.isNotNull(proRole)){ |
|
|
|
if (ObjectUtil.isNotNull(proRole)) { |
|
|
|
normalTask.setExecutorRoleName(proRole.getName()); |
|
|
|
} |
|
|
|
} |
|
|
@ -602,7 +611,6 @@ public class ProTaskDetailService implements IProTaskDetailService { |
|
|
|
|
|
|
|
/** |
|
|
|
* 项目内的任务清单 |
|
|
|
* |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public TaskVo.TaskCheckList selectTaskListByProject(Long projectId, Long currentUserId, Integer page, Integer pageSize, |
|
|
@ -614,18 +622,18 @@ public class ProTaskDetailService implements IProTaskDetailService { |
|
|
|
//获取日期的开始结束时间
|
|
|
|
Long startMillisTime = null; |
|
|
|
Long endMillisTime = null; |
|
|
|
Map<String,Long> timeMap = null; |
|
|
|
if(StrUtil.isNotEmpty(start)){ |
|
|
|
Map<String, Long> timeMap = null; |
|
|
|
if (StrUtil.isNotEmpty(start)) { |
|
|
|
timeMap = DateUtil.projectFormatDateTime(start); |
|
|
|
startMillisTime = timeMap.get("startMillisTime"); |
|
|
|
} |
|
|
|
if(StrUtil.isNotEmpty(end)){ |
|
|
|
if (StrUtil.isNotEmpty(end)) { |
|
|
|
timeMap = DateUtil.projectFormatDateTime(start); |
|
|
|
endMillisTime = timeMap.get("endMillisTime"); |
|
|
|
} |
|
|
|
//获取项目
|
|
|
|
SysProject sysProject = sysProjectDao.selectByPrimaryKey(projectId); |
|
|
|
if(ObjectUtil.isNotNull(sysProject)) { |
|
|
|
if (ObjectUtil.isNotNull(sysProject)) { |
|
|
|
List<TaskVo.NormalTask> taskList = getTaskInfoByProjectIdAndUserId(sysProject, currentUserId, startMillisTime, endMillisTime); |
|
|
|
if (CollectionUtil.isNotEmpty(taskList)) { |
|
|
|
normalTaskList.addAll(taskList); |
|
|
@ -684,7 +692,7 @@ public class ProTaskDetailService implements IProTaskDetailService { |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public List<TaskVo.TaskDetailByKey> getTaskDetailByKey(Long currentUserId, Long projectId, String key) { |
|
|
|
List<TaskVo.TaskDetailByKey> taskDetailByKeyList = taskDetailDao.selectTaskByKey(currentUserId,projectId,key); |
|
|
|
List<TaskVo.TaskDetailByKey> taskDetailByKeyList = taskDetailDao.selectTaskByKey(currentUserId, projectId, key); |
|
|
|
return taskDetailByKeyList; |
|
|
|
} |
|
|
|
|
|
|
@ -692,8 +700,8 @@ public class ProTaskDetailService implements IProTaskDetailService { |
|
|
|
* 查询子任务最早的一条 |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public TaskVo.NormalTask selectTaskByParentId(Long parentId, Long startTime, Long endTime){ |
|
|
|
TaskVo.NormalTask normalTask = taskDetailDao.selectTaskByParentIdAndTime(parentId,startTime,endTime); |
|
|
|
public TaskVo.NormalTask selectTaskByParentId(Long parentId, Long startTime, Long endTime) { |
|
|
|
TaskVo.NormalTask normalTask = taskDetailDao.selectTaskByParentIdAndTime(parentId, startTime, endTime); |
|
|
|
return normalTask; |
|
|
|
} |
|
|
|
|
|
|
@ -704,17 +712,17 @@ public class ProTaskDetailService implements IProTaskDetailService { |
|
|
|
ProSubTimeMember subTimeMember = null; |
|
|
|
ProTaskSubTime subTime = taskSubTimeDao.selectByPrimaryKey(subTimeId); |
|
|
|
ProTaskDetail taskDetail = taskDetailDao.selectByPrimaryKey(subTime.getTaskDetailId()); |
|
|
|
if(taskDetail.getFinishNeedAll()==0){ |
|
|
|
if (taskDetail.getFinishNeedAll() == 0) { |
|
|
|
ProSubTimeMemberExample subTimeMemberExample = new ProSubTimeMemberExample(); |
|
|
|
subTimeMemberExample.createCriteria().andTaskSubTimeIdEqualTo(subTimeId).andComplatedStatusEqualTo(2); |
|
|
|
subTimeMemberExample.setOrderByClause("real_finish_time DESC"); |
|
|
|
List<ProSubTimeMember> subTimeMemberList = proSubTimeMemberDao.selectByExample(subTimeMemberExample); |
|
|
|
if(CollectionUtil.isNotEmpty(subTimeMemberList)){ |
|
|
|
if (CollectionUtil.isNotEmpty(subTimeMemberList)) { |
|
|
|
subTimeMember = subTimeMemberList.get(0); |
|
|
|
} |
|
|
|
}else { |
|
|
|
} else { |
|
|
|
//查找此用户在任务下的成员
|
|
|
|
ProMember porMember = proMemberService.selectByUserId(userId,taskDetail.getProjectId()); |
|
|
|
ProMember porMember = proMemberService.selectByUserId(userId, taskDetail.getProjectId()); |
|
|
|
//该用户是否是任务的负责人
|
|
|
|
ProRole role = proRoleDao.selectByPrimaryKey(taskDetail.getExecutorRole()); |
|
|
|
Boolean isBelongRole = proMemberService.userIsBelongRole(userId, role.getId()); |
|
|
@ -726,7 +734,7 @@ public class ProTaskDetailService implements IProTaskDetailService { |
|
|
|
if (CollectionUtil.isNotEmpty(subTimeMemberList)) { |
|
|
|
subTimeMember = subTimeMemberList.get(0); |
|
|
|
} |
|
|
|
}else { |
|
|
|
} else { |
|
|
|
//查找任务负责人下的所有成员
|
|
|
|
List<ProMember> memberList = proMemberService.selectByRole(taskDetail.getExecutorRole()); |
|
|
|
if (CollectionUtil.isNotEmpty(memberList)) { |
|
|
@ -750,19 +758,45 @@ public class ProTaskDetailService implements IProTaskDetailService { |
|
|
|
//===================================================================
|
|
|
|
|
|
|
|
/** |
|
|
|
* 删除角色下的所有任务相关(taskDetail,taskSubTime,taskMember,plugin) |
|
|
|
* @param roleId |
|
|
|
* 删除任务和所有相关信息 |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public void deleteTaskByRoleId(Long roleId) { |
|
|
|
// taskDetailDao.deleteTaskByRoleId(roleId);
|
|
|
|
public void deleteTask(Long currentUserId, Long taskId) { |
|
|
|
//检查id是详情id还是subTimeId
|
|
|
|
ProTaskDetail taskDetail = null; |
|
|
|
ProTaskSubTime subTime = taskSubTimeDao.selectByPrimaryKey(taskId); |
|
|
|
if (ObjectUtil.isNotNull(subTime)) { |
|
|
|
taskDetail = taskDetailDao.selectByPrimaryKey(subTime.getTaskDetailId()); |
|
|
|
} else { |
|
|
|
taskDetail = taskDetailDao.selectByPrimaryKey(taskId); |
|
|
|
} |
|
|
|
//本用户在项目中的角色
|
|
|
|
List<ProRole> proRoles = proRoleService.getProRoleByProjectIdAndUserId(taskDetail.getProjectId(), currentUserId); |
|
|
|
//用户在项目中的最高权限
|
|
|
|
int power = proRoleService.selectPowerByRoleName(proRoles); |
|
|
|
if (power > 1) { |
|
|
|
if (ObjectUtil.isNotNull(taskDetail)) { |
|
|
|
deleteTaskByTaskId(taskDetail.getId()); |
|
|
|
} |
|
|
|
} else { |
|
|
|
throw new BaseException(CodeEnum.NOT_POWER); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 删除任务和所有相关信息 |
|
|
|
*/ |
|
|
|
private void deleteTaskById(Long taskId){ |
|
|
|
//删除交付物
|
|
|
|
@Override |
|
|
|
public void deleteTaskByTaskId(Long taskId) { |
|
|
|
//1、删除交付物相关信息
|
|
|
|
taskDeliverService.deleteDeliverByTaskId(taskId); |
|
|
|
//2、删除插件
|
|
|
|
ProTaskPluginExample pluginExample = new ProTaskPluginExample(); |
|
|
|
pluginExample.createCriteria().andTaskDetailIdEqualTo(taskId); |
|
|
|
taskPluginDao.deleteByExample(pluginExample); |
|
|
|
//3、删除任务与成员关联表
|
|
|
|
ProTaskMemberExample taskMemberExample = new ProTaskMemberExample(); |
|
|
|
taskMemberExample.createCriteria().andTaskDetailIdEqualTo(taskId); |
|
|
|
taskMemberDao.deleteByExample(taskMemberExample); |
|
|
|
//4、删除任务、子任务和任务完成表
|
|
|
|
taskDetailDao.selectTaskByDetailId(taskId); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|