|
|
|
@ -9,29 +9,25 @@ import com.ccsens.tall.bean.dto.TaskDto; |
|
|
|
import com.ccsens.tall.bean.dto.message.BaseMessageDto; |
|
|
|
import com.ccsens.tall.bean.dto.message.SyncMessageWithStartDto; |
|
|
|
import com.ccsens.tall.bean.po.*; |
|
|
|
import com.ccsens.tall.bean.vo.MessageVo; |
|
|
|
import com.ccsens.tall.bean.vo.TaskVo; |
|
|
|
import com.ccsens.tall.persist.dao.*; |
|
|
|
|
|
|
|
import com.ccsens.tall.util.RobotUtil; |
|
|
|
import com.ccsens.util.CodeEnum; |
|
|
|
import com.ccsens.util.WebConstant; |
|
|
|
import com.ccsens.util.cron.CronConstant; |
|
|
|
import com.ccsens.util.cron.NatureToDate; |
|
|
|
import com.ccsens.util.exception.BaseException; |
|
|
|
import com.github.pagehelper.PageHelper; |
|
|
|
import com.github.pagehelper.PageInfo; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.context.annotation.Lazy; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.transaction.annotation.Propagation; |
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
|
|
|
|
import javax.annotation.Resource; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.Date; |
|
|
|
import java.util.List; |
|
|
|
import java.util.concurrent.atomic.AtomicBoolean; |
|
|
|
import java.util.concurrent.atomic.AtomicInteger; |
|
|
|
|
|
|
|
@Slf4j |
|
|
|
@Service |
|
|
|
@ -48,8 +44,6 @@ public class TaskSubTimeService implements ITaskSubTimeService { |
|
|
|
@Autowired |
|
|
|
private ProSubTimeMemberDao proSubTimeMemberDao; |
|
|
|
@Autowired |
|
|
|
private IUserService userService; |
|
|
|
@Autowired |
|
|
|
private ProTaskDeliverPostLogDao proTaskDeliverPostLogDao; |
|
|
|
@Autowired |
|
|
|
private TaskDetailDao taskDetailDao; |
|
|
|
@ -60,8 +54,6 @@ public class TaskSubTimeService implements ITaskSubTimeService { |
|
|
|
@Autowired |
|
|
|
private IProMemberService proMemberService; |
|
|
|
@Autowired |
|
|
|
private IProRoleService proRoleService; |
|
|
|
@Autowired |
|
|
|
private IProTaskDetailService taskDetailService; |
|
|
|
@Autowired |
|
|
|
private IMessageService messageService; |
|
|
|
@ -79,13 +71,16 @@ public class TaskSubTimeService implements ITaskSubTimeService { |
|
|
|
|
|
|
|
/** |
|
|
|
* 完成任务 |
|
|
|
* @param currentUserId |
|
|
|
* @param subTimeId |
|
|
|
* @throws Exception |
|
|
|
* |
|
|
|
* @param currentUserId userId |
|
|
|
* @param subTimeId 任务日期id |
|
|
|
* @throws Exception 任务详情 |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public TaskVo.NormalTask finishTask(Long currentUserId, TaskDto.TaskSubTimeId subTimeId) throws Exception { |
|
|
|
int completedStatus = subTimeId.getCompletedStatus() == null ? 2 : subTimeId.getCompletedStatus(); |
|
|
|
//获取当前时间
|
|
|
|
Long now = System.currentTimeMillis(); |
|
|
|
//查找taskSubTime
|
|
|
|
ProTaskSubTime taskSubTime = taskSubTimeDao.selectByPrimaryKey(subTimeId.getId()); |
|
|
|
if (ObjectUtil.isNull(taskSubTime)) { |
|
|
|
@ -107,8 +102,11 @@ public class TaskSubTimeService implements ITaskSubTimeService { |
|
|
|
} |
|
|
|
//查找此用户在任务下的成员
|
|
|
|
ProMember member = proMemberService.selectByUserId(currentUserId, taskDetail.getProjectId()); |
|
|
|
//是否需要全部打卡完成
|
|
|
|
if(taskDetail.getFinishNeedAll()==0) { |
|
|
|
if (ObjectUtil.isNull(member)) { |
|
|
|
throw new BaseException(CodeEnum.NOT_MEMBER); |
|
|
|
} |
|
|
|
//如果是完成任务,判断子任务是否完成,交付物是否上传
|
|
|
|
if (subTimeId.getCompletedStatus() == 2) { |
|
|
|
//是否有分组
|
|
|
|
if (taskDetail.getHasGroup() == 1) { |
|
|
|
//检查分组下的任务的完成状态
|
|
|
|
@ -140,6 +138,7 @@ public class TaskSubTimeService implements ITaskSubTimeService { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//添加成员完成记录
|
|
|
|
ProSubTimeMember subTimeMember = isFinishTask(member.getId(), subTimeId.getId()); |
|
|
|
if (ObjectUtil.isNull(subTimeMember)) { |
|
|
|
subTimeMember = new ProSubTimeMember(); |
|
|
|
@ -147,29 +146,36 @@ public class TaskSubTimeService implements ITaskSubTimeService { |
|
|
|
subTimeMember.setComplatedStatus((byte) completedStatus); |
|
|
|
subTimeMember.setMemberId(member.getId()); |
|
|
|
subTimeMember.setTaskSubTimeId(subTimeId.getId()); |
|
|
|
subTimeMember.setRealFinishTime(System.currentTimeMillis()); |
|
|
|
subTimeMember.setRealFinishTime(now); |
|
|
|
proSubTimeMemberDao.insertSelective(subTimeMember); |
|
|
|
} else { |
|
|
|
subTimeMember.setComplatedStatus((byte) completedStatus); |
|
|
|
subTimeMember.setRealFinishTime(System.currentTimeMillis()); |
|
|
|
subTimeMember.setRealFinishTime(now); |
|
|
|
proSubTimeMemberDao.updateByPrimaryKeySelective(subTimeMember); |
|
|
|
} |
|
|
|
//不需要全部成员点完成,直接修改任务状态
|
|
|
|
if(taskDetail.getFinishNeedAll() == 0){ |
|
|
|
taskSubTime.setRealEndTime(now); |
|
|
|
taskSubTime.setComplatedStatus(subTimeId.getCompletedStatus()); |
|
|
|
taskSubTimeDao.updateByPrimaryKeySelective(taskSubTime); |
|
|
|
} |
|
|
|
} else { |
|
|
|
ProSubTimeMember subTimeMember = isFinishTask(member.getId(),subTimeId.getId()); |
|
|
|
if(ObjectUtil.isNotNull(subTimeMember)){ |
|
|
|
subTimeMember.setComplatedStatus((byte) completedStatus); |
|
|
|
subTimeMember.setRealFinishTime(System.currentTimeMillis()); |
|
|
|
proSubTimeMemberDao.updateByPrimaryKeySelective(subTimeMember); |
|
|
|
ProSubTimeMember proSubTimeMember = new ProSubTimeMember(); |
|
|
|
proSubTimeMember.setRecStatus((byte) 2); |
|
|
|
ProSubTimeMemberExample subTimeMemberExample = new ProSubTimeMemberExample(); |
|
|
|
if (taskDetail.getFinishNeedAll() == 0) { |
|
|
|
subTimeMemberExample.createCriteria().andTaskSubTimeIdEqualTo(subTimeId.getId()); |
|
|
|
} else { |
|
|
|
subTimeMember = new ProSubTimeMember(); |
|
|
|
subTimeMember.setId(snowflake.nextId()); |
|
|
|
subTimeMember.setComplatedStatus((byte) completedStatus); |
|
|
|
subTimeMember.setTaskSubTimeId(subTimeId.getId()); |
|
|
|
subTimeMember.setMemberId(member.getId()); |
|
|
|
subTimeMember.setRealFinishTime(System.currentTimeMillis()); |
|
|
|
proSubTimeMemberDao.insertSelective(subTimeMember); |
|
|
|
subTimeMemberExample.createCriteria().andTaskSubTimeIdEqualTo(subTimeId.getId()).andMemberIdEqualTo(member.getId()); |
|
|
|
} |
|
|
|
proSubTimeMemberDao.updateByExampleSelective(proSubTimeMember, subTimeMemberExample); |
|
|
|
//修改任务状态,删除完成时间
|
|
|
|
taskSubTime.setRealEndTime((long) 0); |
|
|
|
taskSubTime.setComplatedStatus(subTimeId.getCompletedStatus()); |
|
|
|
taskSubTimeDao.updateByPrimaryKeySelective(taskSubTime); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//返回的任务详细信息
|
|
|
|
TaskVo.NormalTask normalTask = taskDetailService.getTaskInfoByTaskId(currentUserId, taskDetail.getProjectId(), subTimeId.getId()); |
|
|
|
//用智能助手发送消息
|
|
|
|
@ -192,11 +198,13 @@ public class TaskSubTimeService implements ITaskSubTimeService { |
|
|
|
} |
|
|
|
return subTimeMember; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 开始任务 |
|
|
|
* @param currentUserId |
|
|
|
* @param startTaskDto |
|
|
|
* @throws Exception |
|
|
|
* |
|
|
|
* @param currentUserId userid |
|
|
|
* @param startTaskDto 开始任务 |
|
|
|
* @throws Exception void |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public void startTask(Long currentUserId, TaskDto.StartTask startTaskDto) throws Exception { |
|
|
|
@ -259,13 +267,6 @@ public class TaskSubTimeService implements ITaskSubTimeService { |
|
|
|
syncMessage.setReceivers(messageUserList); |
|
|
|
messageService.sendStartTaskMessage(syncMessage); |
|
|
|
|
|
|
|
// //发送同步消息
|
|
|
|
// SysProject project = sysProjectDao.selectByPrimaryKey(startTaskDto.getProjectId());
|
|
|
|
// //已发布的项目才同步
|
|
|
|
// if (ObjectUtil.isNotNull(project.getPublished()) && project.getPublished() == 1) {
|
|
|
|
// messageService.sendSyncMessageWithStart(currentUserId, startTaskDto.getProjectId(), startTaskDto.getRoleId(), taskSubTime.getTaskDetailId(), now,
|
|
|
|
// taskSubTime.getEndTime() - taskSubTime.getBeginTime(),player);
|
|
|
|
// }
|
|
|
|
//3.添加记录
|
|
|
|
proLogService.addNewProLog(now, taskSubTime.getId(), |
|
|
|
WebConstant.TASK_Execute_Type.Start.value, |
|
|
|
@ -277,8 +278,9 @@ public class TaskSubTimeService implements ITaskSubTimeService { |
|
|
|
|
|
|
|
/** |
|
|
|
* 结束其他进行中的任务 |
|
|
|
* @param roleId |
|
|
|
* @param time |
|
|
|
* |
|
|
|
* @param roleId 角色id |
|
|
|
* @param time 时间 |
|
|
|
*/ |
|
|
|
private void completeTask(Long subTaskId, Long roleId, Long time) { |
|
|
|
List<ProTaskSubTime> proTaskSubTimeList = taskSubTimeDao.getUnderwayTaskByRoleId(subTaskId, roleId); |
|
|
|
@ -319,8 +321,6 @@ public class TaskSubTimeService implements ITaskSubTimeService { |
|
|
|
throw new BaseException(CodeEnum.PARAM_ERROR); |
|
|
|
} |
|
|
|
if (ObjectUtil.isNotNull(addTask.getParentTaskId())) { |
|
|
|
// ProTaskSubTime subTime = taskSubTimeDao.selectByPrimaryKey(addTask.getParentTaskId());
|
|
|
|
// if(ObjectUtil.isNotNull(subTime)) {
|
|
|
|
ProTaskDetail taskDetail = taskDetailDao.selectByPrimaryKey(addTask.getParentTaskId()); |
|
|
|
if (ObjectUtil.isNotNull(taskDetail)) { |
|
|
|
detail.setProjectId(taskDetail.getProjectId()); |
|
|
|
@ -428,10 +428,54 @@ public class TaskSubTimeService implements ITaskSubTimeService { |
|
|
|
|
|
|
|
/** |
|
|
|
* 清空项目下所有任务的实际开始结束时间,和运行状态 |
|
|
|
* |
|
|
|
* @param projectId |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public void clearTaskRealTime(Long projectId) { |
|
|
|
taskSubTimeDao.clearTaskRealTime(projectId); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 看板上查找任务信息 |
|
|
|
* |
|
|
|
* @param currentUserId userId |
|
|
|
* @param projectId 项目id |
|
|
|
* @param roleId 角色id |
|
|
|
* @param type 任务状态 0未开始 1进行中 2已完成 |
|
|
|
* @param page 页数 |
|
|
|
* @param pageSize 每页数量 |
|
|
|
* @return 任务列表 |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public PageInfo<TaskVo.KanBanTask> getKanbanTake(Long currentUserId, Long projectId, Long roleId, Integer type, Integer page, Integer pageSize) throws Exception { |
|
|
|
//查找此用户在任务下的成员
|
|
|
|
ProMember member = proMemberService.selectByUserId(currentUserId, projectId); |
|
|
|
if (ObjectUtil.isNull(member)) { |
|
|
|
throw new BaseException(CodeEnum.NOT_MEMBER); |
|
|
|
} |
|
|
|
PageHelper.startPage(page, pageSize); |
|
|
|
List<TaskVo.KanBanTask> kanBanTaskList = taskSubTimeDao.getKanbanTake(projectId,roleId,type,member.getId()); |
|
|
|
// return new PageInfo<>(vos);
|
|
|
|
return new PageInfo<>(kanBanTaskList); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 修改看板上的任务状态 |
|
|
|
* |
|
|
|
* @param currentUserId |
|
|
|
* @param changeKanbanTask |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public void changeKanbanTake(Long currentUserId, TaskDto.ChangeKanbanTask changeKanbanTask) throws Exception { |
|
|
|
//查找任务
|
|
|
|
ProTaskSubTime proTaskSubTime = taskSubTimeDao.selectByPrimaryKey(changeKanbanTask.getId()); |
|
|
|
if (ObjectUtil.isNull(proTaskSubTime)) { |
|
|
|
throw new BaseException(CodeEnum.NOT_TASK); |
|
|
|
} |
|
|
|
TaskDto.TaskSubTimeId subTimeId = new TaskDto.TaskSubTimeId(); |
|
|
|
subTimeId.setId(changeKanbanTask.getId()); |
|
|
|
subTimeId.setCompletedStatus(changeKanbanTask.getType()); |
|
|
|
finishTask(currentUserId,subTimeId); |
|
|
|
} |
|
|
|
} |
|
|
|
|