Browse Source

Merge branch 'pt' of https://gitee.com/ccsens_s/ccsenscloud into pt

master
zhizhi wu 5 years ago
parent
commit
c94375cf16
  1. 1
      cloudutil/src/main/resources/application-util-test.yml
  2. 11
      tall/src/main/java/com/ccsens/tall/bean/dto/TaskDto.java
  3. 24
      tall/src/main/java/com/ccsens/tall/bean/vo/TaskVo.java
  4. 3
      tall/src/main/java/com/ccsens/tall/persist/dao/ProMemberDao.java
  5. 5
      tall/src/main/java/com/ccsens/tall/persist/dao/SysProjectDao.java
  6. 3
      tall/src/main/java/com/ccsens/tall/persist/dao/TaskSubTimeDao.java
  7. 21
      tall/src/main/java/com/ccsens/tall/service/ChartService.java
  8. 7
      tall/src/main/java/com/ccsens/tall/service/ITaskSubTimeService.java
  9. 34
      tall/src/main/java/com/ccsens/tall/service/ProMemberService.java
  10. 158
      tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java
  11. 3
      tall/src/main/java/com/ccsens/tall/service/SysDomainService.java
  12. 252
      tall/src/main/java/com/ccsens/tall/service/TaskSubTimeService.java
  13. 34
      tall/src/main/java/com/ccsens/tall/web/TaskController.java
  14. 2
      tall/src/main/resources/application-test.yml
  15. 4
      tall/src/main/resources/druid-test.yml
  16. 11
      tall/src/main/resources/mapper_dao/ProMemberDao.xml
  17. 8
      tall/src/main/resources/mapper_dao/SysProjectDao.xml
  18. 48
      tall/src/main/resources/mapper_dao/TaskSubTimeDao.xml

1
cloudutil/src/main/resources/application-util-test.yml

@ -21,6 +21,7 @@ eureka:
# 指定eureka server通信地址,注意/eureka/小尾巴不能少
#defaultZone: http://admin:admin@peer1:8761/eureka/,http://admin:admin@peer2:8762/eureka/
defaultZone: http://admin:admin@192.168.0.99:7010/eureka/
# defaultZone: http://admin:admin@test.tall.wiki:7010/eureka/
instance:
# 是否注册IP到eureka server,如不指定或设为false,那就回注册主机名到eureka server
prefer-ip-address: true

11
tall/src/main/java/com/ccsens/tall/bean/dto/TaskDto.java

@ -177,4 +177,15 @@ public class TaskDto {
private Integer completedStatus;
}
@ApiModel("修改看板信息")
@Data
public static class ChangeKanbanTask {
@NotNull(message = "任务id不能为空")
@ApiModelProperty("任务id")
private Long id;
@NotNull(message = "状态不能为空")
@ApiModelProperty("任务状态 0未完成 1进行中 2已完成")
private Integer type;
}
}

24
tall/src/main/java/com/ccsens/tall/bean/vo/TaskVo.java

@ -318,9 +318,23 @@ public class TaskVo {
private String projectName;
}
// @Data
// public static class FirstTask{
// private Long id;
// private String taskName;
// }
@ApiModel("查找看板信息")
@Data
public static class KanBanTask{
@ApiModelProperty("任务id")
private Long id;
@ApiModelProperty("任务名称")
private String taskName;
@ApiModelProperty("任务详情id")
private Long taskDetailId;
@ApiModelProperty("角色Id")
private Long roleId;
@ApiModelProperty("角色名字")
private String roleName;
@ApiModelProperty("开始时间")
private Long taskBeginTime;
@ApiModelProperty("结束时间")
private Long taskEndTime;
}
}

3
tall/src/main/java/com/ccsens/tall/persist/dao/ProMemberDao.java

@ -1,5 +1,6 @@
package com.ccsens.tall.persist.dao;
import com.ccsens.tall.bean.po.ProMember;
import com.ccsens.tall.bean.vo.MemberVo;
import com.ccsens.tall.bean.vo.WbsVo;
import com.ccsens.tall.persist.mapper.ProMemberMapper;
@ -23,4 +24,6 @@ public interface ProMemberDao extends ProMemberMapper{
* @param projectId
*/
List<Long> queryUserIdsByProjectId(@Param("projectId") Long projectId);
List<ProMember> selectMemberByRoleId(@Param("roleId")Long roleId);
}

5
tall/src/main/java/com/ccsens/tall/persist/dao/SysProjectDao.java

@ -29,13 +29,14 @@ public interface SysProjectDao extends SysProjectMapper{
List<ChartVo.CompleteTaskNum> getCompleteTaskByTime(@Param("projectId")Long projectId);
List<ChartVo.ProjectTrendVo> getProjectTrend(@Param("projectId")Long projectId, @Param("start")Long start, @Param("end")Long end, @Param("roleId")Long roleId);
List<ChartVo.ProjectTrendVo> getProjectTrend(@Param("projectId")Long projectId, @Param("start")Long start, @Param("end")Long end,
@Param("roleId")Long roleId,@Param("allMemberId")Long allMemberId);
ChartVo.ProjectOverview getOverview(@Param("projectId")Long projectId);
List<ChartVo.BurnoutFigure> getBurnoutFigure(@Param("projectId")Long projectId,
@Param("start")Long start, @Param("end")Long end,
@Param("roleId")Long roleIdm,@Param("type") Integer type);
@Param("roleId")Long roleId,@Param("allMemberId")Long allMemberId,@Param("type") Integer type);
Integer getTaskTotalByProjectId(@Param("projectId")Long projectId, @Param("start")Long start, @Param("end")Long end, @Param("roleId")Long roleId);

3
tall/src/main/java/com/ccsens/tall/persist/dao/TaskSubTimeDao.java

@ -1,6 +1,7 @@
package com.ccsens.tall.persist.dao;
import com.ccsens.tall.bean.po.ProTaskSubTime;
import com.ccsens.tall.bean.vo.TaskVo;
import com.ccsens.tall.persist.mapper.ProTaskSubTimeMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
@ -12,4 +13,6 @@ public interface TaskSubTimeDao extends ProTaskSubTimeMapper{
List<ProTaskSubTime> getUnderwayTaskByRoleId(@Param("subTaskId") Long subTaskId, @Param("roleId") Long roleId);
void clearTaskRealTime(@Param("projectId")Long projectId);
List<TaskVo.KanBanTask> getKanbanTake(@Param("projectId")Long projectId, @Param("roleId")Long roleId,@Param("type") Integer type,@Param("memberId")Long memberId);
}

21
tall/src/main/java/com/ccsens/tall/service/ChartService.java

@ -5,6 +5,7 @@ import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.ccsens.tall.bean.dto.ChartDto;
import com.ccsens.tall.bean.po.ProRole;
import com.ccsens.tall.bean.po.SysProject;
import com.ccsens.tall.bean.vo.ChartVo;
import com.ccsens.tall.persist.dao.SysProjectDao;
@ -23,6 +24,8 @@ import java.util.concurrent.atomic.AtomicReference;
public class ChartService implements IChartService{
@Autowired
private SysProjectDao sysProjectDao;
@Autowired
private ProRoleService proRoleService;
/**
* 任务执行者分布图
@ -66,7 +69,13 @@ public class ChartService implements IChartService{
public List<ChartVo.ProjectTrendVo> getProjectTrend(Long currentUserId, ChartDto.ProjectTrendDto projectTrendDto) {
Long start = DateUtil.parse(projectTrendDto.getStart()).getTime();
Long end = DateUtil.parse(projectTrendDto.getEnd()).getTime();
List<ChartVo.ProjectTrendVo> projectTrendVoList = sysProjectDao.getProjectTrend(projectTrendDto.getProjectId(),start,end,projectTrendDto.getRoleId());
//获取“全体成员”角色
ProRole allMember = proRoleService.getAllMember(projectTrendDto.getProjectId());
Long allMemberId = null;
if (ObjectUtil.isNotNull(allMember)) {
allMemberId = allMember.getId();
}
List<ChartVo.ProjectTrendVo> projectTrendVoList = sysProjectDao.getProjectTrend(projectTrendDto.getProjectId(),start,end,projectTrendDto.getRoleId(),allMemberId);
return projectTrendVoList;
}
@ -101,8 +110,14 @@ public class ChartService implements IChartService{
public List<ChartVo.BurnoutFigure> getBurnoutFigure(Long currentUserId, ChartDto.ProjectTrendDto projectTrendDto) {
Long start = DateUtil.parse(projectTrendDto.getStart()).getTime();
Long end = DateUtil.parse(projectTrendDto.getEnd()).getTime();
//获取“全体成员”角色
ProRole allMember = proRoleService.getAllMember(projectTrendDto.getProjectId());
Long allMemberId = null;
if (ObjectUtil.isNotNull(allMember)) {
allMemberId = allMember.getId();
}
//获取任务总数(如果type传1 查询规定条件内的任务总数,若传null,则按天分组查找)
List<ChartVo.BurnoutFigure> totalList = sysProjectDao.getBurnoutFigure(projectTrendDto.getProjectId(),start,end,projectTrendDto.getRoleId(),1);
List<ChartVo.BurnoutFigure> totalList = sysProjectDao.getBurnoutFigure(projectTrendDto.getProjectId(),start,end,projectTrendDto.getRoleId(),allMemberId,1);
//理想
AtomicReference<BigDecimal> idealTotal = new AtomicReference<>();
BigDecimal idealTotalInt = new BigDecimal(0);
@ -117,7 +132,7 @@ public class ChartService implements IChartService{
realTotal.set(totalList.get(0).getTotalDay());
}
//按天获取信息
List<ChartVo.BurnoutFigure> burnoutFigureList = sysProjectDao.getBurnoutFigure(projectTrendDto.getProjectId(),start,end,projectTrendDto.getRoleId(),null);
List<ChartVo.BurnoutFigure> burnoutFigureList = sysProjectDao.getBurnoutFigure(projectTrendDto.getProjectId(),start,end,projectTrendDto.getRoleId(),allMemberId,null);
if(CollectionUtil.isNotEmpty(burnoutFigureList)){
//每天理想完成数,总数/天数=每天理想完成数
BigDecimal idealFinish = idealTotalInt.divide(BigDecimal.valueOf(burnoutFigureList.size()),1,BigDecimal.ROUND_HALF_UP);

7
tall/src/main/java/com/ccsens/tall/service/ITaskSubTimeService.java

@ -3,6 +3,9 @@ package com.ccsens.tall.service;
import com.ccsens.tall.bean.dto.TaskDto;
import com.ccsens.tall.bean.po.ProTaskSubTime;
import com.ccsens.tall.bean.vo.TaskVo;
import com.github.pagehelper.PageInfo;
import java.util.List;
public interface ITaskSubTimeService {
void saveProTaskSubTask(ProTaskSubTime proTaskSubTime);
@ -14,4 +17,8 @@ public interface ITaskSubTimeService {
TaskVo.NormalTask addTask(Long currentUserId, TaskDto.AddTask addTask) throws Exception;
void clearTaskRealTime(Long projectId);
PageInfo<TaskVo.KanBanTask> getKanbanTake(Long currentUserId, Long projectId, Long roleId, Integer type, Integer page, Integer pageSize) throws Exception;
void changeKanbanTake(Long currentUserId, TaskDto.ChangeKanbanTask changeKanbanTask) throws Exception;
}

34
tall/src/main/java/com/ccsens/tall/service/ProMemberService.java

@ -7,7 +7,9 @@ import com.ccsens.tall.bean.po.*;
import com.ccsens.tall.bean.vo.MemberVo;
import com.ccsens.tall.bean.vo.ProjectVo;
import com.ccsens.tall.persist.dao.*;
import com.ccsens.util.CodeEnum;
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;
@ -121,7 +123,7 @@ public class ProMemberService implements IProMemberService {
@Override
public Boolean userIsBelongRole(Long userId, Long roleId) {
Boolean flag = false;
//如果角色是全体成员返回true
//如果角色是全体成员返回true
ProRole role = proRoleDao.selectByPrimaryKey(roleId);
if(role.getName().equalsIgnoreCase(WebConstant.ROLE_NAME.AllMember.phase)){
flag = true;
@ -191,16 +193,28 @@ public class ProMemberService implements IProMemberService {
@Override
public List<ProMember> selectByRole(Long roleId){
List<ProMember> memberList = new ArrayList<>();
ProMemberRoleExample memberRoleExample = new ProMemberRoleExample();
memberRoleExample.createCriteria().andRoleIdEqualTo(roleId);
List<ProMemberRole> memberRoleList = proMemberRoleDao.selectByExample(memberRoleExample);
if(CollectionUtil.isNotEmpty(memberRoleList)){
for(ProMemberRole memberRole:memberRoleList){
ProMember member = proMemberDao.selectByPrimaryKey(memberRole.getMemberId());
memberList.add(member);
}
ProRole role = proRoleDao.selectByPrimaryKey(roleId);
if(ObjectUtil.isNull(role)){
throw new BaseException(CodeEnum.NOT_ROLE);
}
return memberList;
if(role.getName().equalsIgnoreCase(WebConstant.ROLE_NAME.AllMember.phase)){
ProMemberExample proMemberExample = new ProMemberExample();
proMemberExample.createCriteria().andProjectIdEqualTo(role.getProjectId());
return proMemberDao.selectByExample(proMemberExample);
}
return proMemberDao.selectMemberByRoleId(roleId);
// ProMemberRoleExample memberRoleExample = new ProMemberRoleExample();
// memberRoleExample.createCriteria().andRoleIdEqualTo(roleId);
// List<ProMemberRole> memberRoleList = proMemberRoleDao.selectByExample(memberRoleExample);
// if(CollectionUtil.isNotEmpty(memberRoleList)){
// for(ProMemberRole memberRole:memberRoleList){
// ProMember member = proMemberDao.selectByPrimaryKey(memberRole.getMemberId());
// memberList.add(member);
// }
// }
// return memberList;
}
/**

158
tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java

@ -14,7 +14,6 @@ import com.ccsens.tall.bean.vo.TaskVo;
import com.ccsens.tall.persist.dao.*;
import com.ccsens.tall.persist.dao.ProTaskShowDao;
import com.ccsens.tall.persist.mapper.ProPluginConfigMapper;
import com.ccsens.tall.util.RobotUtil;
import com.ccsens.tall.util.TaskUtil;
import com.ccsens.util.CodeEnum;
import com.ccsens.util.DateUtil;
@ -23,7 +22,6 @@ import com.ccsens.util.cron.CronConstant;
import com.ccsens.util.cron.NatureToDate;
import com.ccsens.util.exception.BaseException;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.apache.bcel.classfile.Code;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
@ -32,7 +30,6 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
@Slf4j
@ -115,35 +112,6 @@ public class ProTaskDetailService implements IProTaskDetailService {
return obj;
}
// /**
// * 获取项目里的任务展示配置
// */
// private TaskVo.ProShow getProShow(Long projectId)throws Exception{
// TaskVo.ProShow proShowInfo = new TaskVo.ProShow();
// ProShow proShow = proShowService.selectByProjectId(projectId);
//// ProTaskShow proTaskShow = proShowService.selectByProjectId(projectId);
// if(ObjectUtil.isNotNull(proShow)){
// proShowInfo.setSlide(proShow.getSlide());
// proShowInfo.setFilter(proShow.getFilter());
// proShowInfo.setIsShowMvp(proShow.getIsShowMvp());
// proShowInfo.setCreateTask(proShow.getCreateTask());
// proShowInfo.setDuration(proShow.getDuration());
// proShowInfo.setShowTimeFormat(proShow.getTimeShow());
// proShowInfo.setShowShortcuts(proShow.getShowShortcuts());
// if(proShow.getDuration() == 1) {
// proShowInfo.setShowTimeFormat(null);
// }
// }else {
// proShowInfo.setSlide(0);
// proShowInfo.setFilter(0);
// proShowInfo.setIsShowMvp(1);
// proShowInfo.setCreateTask(1);
// proShowInfo.setDuration(0);
// proShowInfo.setShowTimeFormat("MM-dd HH:mm");
// proShowInfo.setShowShortcuts(1);
// }
// return proShowInfo;
// }
/**
* 查找任务配置
@ -220,10 +188,12 @@ public class ProTaskDetailService implements IProTaskDetailService {
//处理插件
managePlugin(currentUserId,roleId,task);
//二级任务完成状态
ProSubTimeMember subTimeMember = getProcessByUserIdAndTask(currentUserId, task.getId());
if (ObjectUtil.isNotNull(subTimeMember)) {
task.setRealEndTime(subTimeMember.getRealFinishTime());
task.setProcess(subTimeMember.getComplatedStatus());
if(task.getProcess() != 2) {
ProSubTimeMember subTimeMember = getProcessByUserIdAndTask(currentUserId, task.getId());
if (ObjectUtil.isNotNull(subTimeMember)) {
task.setRealEndTime(subTimeMember.getRealFinishTime());
task.setProcess(subTimeMember.getComplatedStatus());
}
}
//二级任务配置
task.setProTaskConfig(getProTaskShow(task.getDetailId()));
@ -287,10 +257,13 @@ public class ProTaskDetailService implements IProTaskDetailService {
}
//处理插件
managePlugin(currentUserId,roleId,normalTask);
ProSubTimeMember subTimeMember = getProcessByUserIdAndTask(currentUserId, normalTask.getId());
if (ObjectUtil.isNotNull(subTimeMember)) {
normalTask.setProcess(subTimeMember.getComplatedStatus());
normalTask.setRealEndTime(subTimeMember.getRealFinishTime());
//任务完成状态
if(normalTask.getProcess() != 2) {
ProSubTimeMember subTimeMember = getProcessByUserIdAndTask(currentUserId, normalTask.getId());
if (ObjectUtil.isNotNull(subTimeMember)) {
normalTask.setProcess(subTimeMember.getComplatedStatus());
normalTask.setRealEndTime(subTimeMember.getRealFinishTime());
}
}
//任务配置
normalTask.setProTaskConfig(getProTaskShow(normalTask.getDetailId()));
@ -558,10 +531,12 @@ public class ProTaskDetailService implements IProTaskDetailService {
// //处理查询到的任务的插件
// managePlugin(currentUserId,task.getExecutorRole(),taskDetail);
//任务的完成状态
ProSubTimeMember subTimeMember = getProcessByUserIdAndTask(currentUserId, taskDetail.getId());
if (ObjectUtil.isNotNull(subTimeMember)) {
taskDetail.setProcess(subTimeMember.getComplatedStatus());
taskDetail.setRealEndTime(subTimeMember.getRealFinishTime());
if(taskDetail.getProcess() == 0) {
ProSubTimeMember subTimeMember = getProcessByUserIdAndTask(currentUserId, taskDetail.getId());
if (ObjectUtil.isNotNull(subTimeMember)) {
taskDetail.setProcess(subTimeMember.getComplatedStatus());
taskDetail.setRealEndTime(subTimeMember.getRealFinishTime());
}
}
//添加项目信息和插件信息
@ -582,10 +557,12 @@ public class ProTaskDetailService implements IProTaskDetailService {
// //处理查询到的任务的插件
// managePlugin(currentUserId,task.getExecutorRole(),taskDetail);
//任务的完成状态
ProSubTimeMember proSubTimeMember = getProcessByUserIdAndTask(currentUserId, groupTask.getId());
if (ObjectUtil.isNotNull(proSubTimeMember)) {
groupTask.setProcess(proSubTimeMember.getComplatedStatus());
groupTask.setRealEndTime(proSubTimeMember.getRealFinishTime());
if(taskDetail.getProcess() == 0) {
ProSubTimeMember proSubTimeMember = getProcessByUserIdAndTask(currentUserId, groupTask.getId());
if (ObjectUtil.isNotNull(proSubTimeMember)) {
groupTask.setProcess(proSubTimeMember.getComplatedStatus());
groupTask.setRealEndTime(proSubTimeMember.getRealFinishTime());
}
}
//添加项目信息和插件信息
@ -780,10 +757,12 @@ public class ProTaskDetailService implements IProTaskDetailService {
if (CollectionUtil.isNotEmpty(taskList)) {
for (TaskVo.NormalTask normalTask : taskList) {
//任务的完成状态
ProSubTimeMember proSubTimeMember = getProcessByUserIdAndTask(userId, normalTask.getId());
if (ObjectUtil.isNotNull(proSubTimeMember)) {
normalTask.setProcess(proSubTimeMember.getComplatedStatus());
normalTask.setRealEndTime(proSubTimeMember.getRealFinishTime());
if(normalTask.getProcess() != 2) {
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)) {
@ -939,51 +918,52 @@ public class ProTaskDetailService implements IProTaskDetailService {
if(ObjectUtil.isNull(taskDetail)){
throw new BaseException(CodeEnum.NOT_TASK);
}
if (taskDetail.getFinishNeedAll() == 0) {
ProSubTimeMemberExample subTimeMemberExample = new ProSubTimeMemberExample();
subTimeMemberExample.createCriteria().andTaskSubTimeIdEqualTo(subTimeId).andComplatedStatusEqualTo((byte) 2);
subTimeMemberExample.setOrderByClause("real_finish_time DESC");
List<ProSubTimeMember> subTimeMemberList = proSubTimeMemberDao.selectByExample(subTimeMemberExample);
if (CollectionUtil.isNotEmpty(subTimeMemberList)) {
ProSubTimeMemberExample subTimeMemberExample = new ProSubTimeMemberExample();
subTimeMemberExample.createCriteria().andTaskSubTimeIdEqualTo(subTimeId).andComplatedStatusEqualTo((byte) 2);
subTimeMemberExample.setOrderByClause("real_finish_time DESC");
List<ProSubTimeMember> subTimeMemberList = proSubTimeMemberDao.selectByExample(subTimeMemberExample);
if (CollectionUtil.isNotEmpty(subTimeMemberList)) {
if (taskDetail.getFinishNeedAll() == 0) {
subTimeMember = subTimeMemberList.get(0);
}
} else {
//查找此用户在任务下的成员
ProMember porMember = proMemberService.selectByUserId(userId, taskDetail.getProjectId());
//该用户是否是任务的负责人
ProRole role = proRoleDao.selectByPrimaryKey(taskDetail.getExecutorRole());
Boolean isBelongRole = proMemberService.userIsBelongRole(userId, role.getId());
if (role.getName().equalsIgnoreCase(WebConstant.ROLE_NAME.AllMember.phase) || isBelongRole) {
ProSubTimeMemberExample subTimeMemberExample = new ProSubTimeMemberExample();
subTimeMemberExample.createCriteria().andTaskSubTimeIdEqualTo(subTimeId)
.andMemberIdEqualTo(porMember.getId()).andComplatedStatusEqualTo((byte) 2);
List<ProSubTimeMember> subTimeMemberList = proSubTimeMemberDao.selectByExample(subTimeMemberExample);
if (CollectionUtil.isNotEmpty(subTimeMemberList)) {
subTimeMember = subTimeMemberList.get(0);
}
} else {
//查找任务负责人下的所有成员
List<ProMember> memberList = proMemberService.selectByRole(taskDetail.getExecutorRole());
if (CollectionUtil.isNotEmpty(memberList)) {
boolean flag = false;
for (ProMember member : memberList) {
ProSubTimeMemberExample subTimeMemberExample = new ProSubTimeMemberExample();
subTimeMemberExample.createCriteria().andTaskSubTimeIdEqualTo(subTimeId)
.andMemberIdEqualTo(member.getId()).andComplatedStatusEqualTo((byte) 2);
subTimeMemberExample.setOrderByClause("real_finish_time");
List<ProSubTimeMember> subTimeMemberList = proSubTimeMemberDao.selectByExample(subTimeMemberExample);
if (CollectionUtil.isEmpty(subTimeMemberList)) {
flag = true;
}else {
//查找此用户在任务下的成员
ProMember porMember = proMemberService.selectByUserId(userId, taskDetail.getProjectId());
//该用户是否是任务的负责人
ProRole role = proRoleDao.selectByPrimaryKey(taskDetail.getExecutorRole());
Boolean isBelongRole = proMemberService.userIsBelongRole(userId, role.getId());
if (isBelongRole) {
for(ProSubTimeMember sTimeMember:subTimeMemberList){
if(sTimeMember.getMemberId().longValue() == porMember.getId()){
subTimeMember = sTimeMember;
break;
}
subTimeMember = subTimeMemberList.get(0);
}
if(flag){
subTimeMember = null;
}else {
//查找任务负责人下的所有成员
List<ProMember> memberList = proMemberService.selectByRole(taskDetail.getExecutorRole());
if (CollectionUtil.isNotEmpty(memberList)) {
boolean flag = false;
for (ProMember member : memberList) {
ProSubTimeMemberExample sTimeMemberExample = new ProSubTimeMemberExample();
sTimeMemberExample.createCriteria().andTaskSubTimeIdEqualTo(subTimeId)
.andMemberIdEqualTo(member.getId()).andComplatedStatusEqualTo((byte) 2);
sTimeMemberExample.setOrderByClause("real_finish_time");
List<ProSubTimeMember> sTimeMemberList = proSubTimeMemberDao.selectByExample(sTimeMemberExample);
if (CollectionUtil.isEmpty(subTimeMemberList)) {
flag = true;
break;
}
subTimeMember = subTimeMemberList.get(0);
}
if(flag){
subTimeMember = null;
}
}
}
}
}
return subTimeMember;
}

3
tall/src/main/java/com/ccsens/tall/service/SysDomainService.java

@ -8,6 +8,7 @@ import com.ccsens.tall.bean.po.SysDomain;
import com.ccsens.tall.bean.po.SysDomainExample;
import com.ccsens.tall.bean.vo.DomainVo;
import com.ccsens.tall.persist.dao.SysDomainDao;
import com.ccsens.util.PropUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -36,7 +37,7 @@ public class SysDomainService implements ISysDomainService{
}
if(ObjectUtil.isNull(domainInfo)){
domainInfo = new DomainVo.DomainInfo();
domainInfo.setDomainName("https://test.tall.wiki/gateway/tall/v1.0");
domainInfo.setDomainName(PropUtil.notGatewayUrl + "gateway/tall/v1.0");
domainInfo.setLogo("");
domainInfo.setCompanyName("传控电子科技有限公司");
domainInfo.setSystemName("TALL时物链条");

252
tall/src/main/java/com/ccsens/tall/service/TaskSubTimeService.java

@ -9,33 +9,29 @@ 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
@Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public class TaskSubTimeService implements ITaskSubTimeService {
@Autowired
private TaskSubTimeDao taskSubTimeDao;
@ -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,45 +71,51 @@ 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)){
log.info("找不到此任务:subTimeId{}",subTimeId.getId());
if (ObjectUtil.isNull(taskSubTime)) {
log.info("找不到此任务:subTimeId{}", subTimeId.getId());
throw new BaseException(CodeEnum.NOT_TASK);
}
//查找taskDetail
ProTaskDetail taskDetail = taskDetailDao.selectByPrimaryKey(taskSubTime.getTaskDetailId());
if(ObjectUtil.isNull(taskDetail)){
log.info("找不到此任务:taskId{}",taskSubTime.getTaskDetailId());
if (ObjectUtil.isNull(taskDetail)) {
log.info("找不到此任务:taskId{}", taskSubTime.getTaskDetailId());
throw new BaseException(CodeEnum.NOT_TASK);
}
//该用户是否是任务的负责人
ProRole role = proRoleDao.selectByPrimaryKey(taskDetail.getExecutorRole());
Boolean isBelongRole = proMemberService.userIsBelongRole(currentUserId, role.getId());
if (!role.getName().equalsIgnoreCase(WebConstant.ROLE_NAME.AllMember.phase) && !isBelongRole) {
log.info("此用户不是该任务的负责人:{}",role);
log.info("此用户不是该任务的负责人:{}", role);
throw new BaseException(CodeEnum.IS_NOT_EXECUTOR);
}
//查找此用户在任务下的成员
ProMember member = proMemberService.selectByUserId(currentUserId,taskDetail.getProjectId());
//是否需要全部打卡完成
if(taskDetail.getFinishNeedAll()==0) {
ProMember member = proMemberService.selectByUserId(currentUserId, taskDetail.getProjectId());
if (ObjectUtil.isNull(member)) {
throw new BaseException(CodeEnum.NOT_MEMBER);
}
//如果是完成任务,判断子任务是否完成,交付物是否上传
if (subTimeId.getCompletedStatus() == 2) {
//是否有分组
if (taskDetail.getHasGroup() == 1) {
//检查分组下的任务的完成状态
List<ProTaskSubTime> subTimeList = taskDetailDao.selectSubTaskByGroupId(taskDetail.getId(), taskSubTime.getBeginTime(), taskSubTime.getEndTime());
if(CollectionUtil.isNotEmpty(subTimeList)){
if (CollectionUtil.isNotEmpty(subTimeList)) {
for (ProTaskSubTime subTime : subTimeList) {
ProSubTimeMember subTimeMember = taskDetailService.getProcessByUserIdAndTask(currentUserId, subTime.getId());
if(ObjectUtil.isNull(subTimeMember) || subTimeMember.getComplatedStatus() != 2){
log.info("分组下任务未全部完成:{}",subTime.getId());
if (ObjectUtil.isNull(subTimeMember) || subTimeMember.getComplatedStatus() != 2) {
log.info("分组下任务未全部完成:{}", subTime.getId());
throw new BaseException(CodeEnum.SUB_TASK_IS_NOT_FINISH);
}
}
@ -140,40 +138,48 @@ public class TaskSubTimeService implements ITaskSubTimeService {
}
}
ProSubTimeMember subTimeMember = isFinishTask(member.getId(),subTimeId.getId());
if(ObjectUtil.isNull(subTimeMember)){
//添加成员完成记录
ProSubTimeMember subTimeMember = isFinishTask(member.getId(), subTimeId.getId());
if (ObjectUtil.isNull(subTimeMember)) {
subTimeMember = new ProSubTimeMember();
subTimeMember.setId(snowflake.nextId());
subTimeMember.setComplatedStatus((byte) completedStatus);
subTimeMember.setMemberId(member.getId());
subTimeMember.setTaskSubTimeId(subTimeId.getId());
subTimeMember.setRealFinishTime(System.currentTimeMillis());
subTimeMember.setRealFinishTime(now);
proSubTimeMemberDao.insertSelective(subTimeMember);
}else {
} else {
subTimeMember.setComplatedStatus((byte) completedStatus);
subTimeMember.setRealFinishTime(System.currentTimeMillis());
subTimeMember.setRealFinishTime(now);
proSubTimeMemberDao.updateByPrimaryKeySelective(subTimeMember);
}
}else {
ProSubTimeMember subTimeMember = isFinishTask(member.getId(),subTimeId.getId());
if(ObjectUtil.isNotNull(subTimeMember)){
subTimeMember.setComplatedStatus((byte) completedStatus);
subTimeMember.setRealFinishTime(System.currentTimeMillis());
proSubTimeMemberDao.updateByPrimaryKeySelective(subTimeMember);
}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);
//不需要全部成员点完成,直接修改任务状态
if(taskDetail.getFinishNeedAll() == 0){
taskSubTime.setRealEndTime(now);
taskSubTime.setComplatedStatus(subTimeId.getCompletedStatus());
taskSubTimeDao.updateByPrimaryKeySelective(taskSubTime);
}
} else {
ProSubTimeMember proSubTimeMember = new ProSubTimeMember();
proSubTimeMember.setRecStatus((byte) 2);
ProSubTimeMemberExample subTimeMemberExample = new ProSubTimeMemberExample();
if (taskDetail.getFinishNeedAll() == 0) {
subTimeMemberExample.createCriteria().andTaskSubTimeIdEqualTo(subTimeId.getId());
} else {
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());
TaskVo.NormalTask normalTask = taskDetailService.getTaskInfoByTaskId(currentUserId, taskDetail.getProjectId(), subTimeId.getId());
//用智能助手发送消息
robotService.finishTaskRobotSend(currentUserId,normalTask.getProjectId(),normalTask.getProjectName(),normalTask.getName(),normalTask.getExecutorRole(),completedStatus);
robotService.finishTaskRobotSend(currentUserId, normalTask.getProjectId(), normalTask.getProjectName(), normalTask.getName(), normalTask.getExecutorRole(), completedStatus);
return normalTask;
}
@ -181,33 +187,35 @@ public class TaskSubTimeService implements ITaskSubTimeService {
/**
* 该成员是否完成了此任务(返回成员对任务的完成情况)
*/
private ProSubTimeMember isFinishTask(Long memberId, Long subTimeId){
private ProSubTimeMember isFinishTask(Long memberId, Long subTimeId) {
ProSubTimeMember subTimeMember = null;
ProSubTimeMemberExample subTimeMemberExample = new ProSubTimeMemberExample();
subTimeMemberExample.createCriteria().andMemberIdEqualTo(memberId)
.andTaskSubTimeIdEqualTo(subTimeId);
List<ProSubTimeMember> subTimeMemberList = proSubTimeMemberDao.selectByExample(subTimeMemberExample);
if(CollectionUtil.isNotEmpty(subTimeMemberList)){
if (CollectionUtil.isNotEmpty(subTimeMemberList)) {
subTimeMember = subTimeMemberList.get(0);
}
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 {
ProTaskSubTime taskSubTime = taskSubTimeDao.selectByPrimaryKey(startTaskDto.getId());
Long now = startTaskDto.getStartTime() == null ? System.currentTimeMillis() : startTaskDto.getStartTime();
if(ObjectUtil.isNotNull(taskSubTime)){
if(taskSubTime.getComplatedStatus() != 0){
if (ObjectUtil.isNotNull(taskSubTime)) {
if (taskSubTime.getComplatedStatus() != 0) {
throw new BaseException(CodeEnum.TASK_PREPARATION);
}
//结束其他进行中的任务
completeTask(startTaskDto.getId(),startTaskDto.getRoleId(),now);
completeTask(startTaskDto.getId(), startTaskDto.getRoleId(), now);
//开始指定的任务
taskSubTime.setRealBeginTime(now);
@ -217,7 +225,7 @@ public class TaskSubTimeService implements ITaskSubTimeService {
//查找任务的负责人名
String player = null;
ProTaskDetail taskDetail = taskDetailDao.selectByPrimaryKey(taskSubTime.getTaskDetailId());
if(ObjectUtil.isNotNull(taskDetail)){
if (ObjectUtil.isNotNull(taskDetail)) {
player = taskDetail.getDescription();
}
@ -233,9 +241,9 @@ public class TaskSubTimeService implements ITaskSubTimeService {
ProMemberExample memberExample = new ProMemberExample();
memberExample.createCriteria().andProjectIdEqualTo(startTaskDto.getProjectId());
List<ProMember> memberList = proMemberDao.selectByExample(memberExample);
if(CollectionUtil.isNotEmpty(memberList)){
for(ProMember member:memberList){
if(ObjectUtil.isNotNull(member.getUserId())){
if (CollectionUtil.isNotEmpty(memberList)) {
for (ProMember member : memberList) {
if (ObjectUtil.isNotNull(member.getUserId())) {
BaseMessageDto.MessageUser messageUser = new BaseMessageDto.MessageUser();
messageUser.setUserId(member.getUserId());
messageUserList.add(messageUser);
@ -259,31 +267,25 @@ 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,
WebConstant.TASK_Execute_Type.Start.phase, currentUserId);
}else {
} else {
throw new BaseException(CodeEnum.NOT_TASK);
}
}
/**
* 结束其他进行中的任务
* @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);
if(CollectionUtil.isNotEmpty(proTaskSubTimeList)){
for(ProTaskSubTime proTaskSubTime : proTaskSubTimeList){
private void completeTask(Long subTaskId, Long roleId, Long time) {
List<ProTaskSubTime> proTaskSubTimeList = taskSubTimeDao.getUnderwayTaskByRoleId(subTaskId, roleId);
if (CollectionUtil.isNotEmpty(proTaskSubTimeList)) {
for (ProTaskSubTime proTaskSubTime : proTaskSubTimeList) {
proTaskSubTime.setRealEndTime(time);
proTaskSubTime.setComplatedStatus(2);
taskSubTimeDao.updateByPrimaryKeySelective(proTaskSubTime);
@ -305,51 +307,49 @@ public class TaskSubTimeService implements ITaskSubTimeService {
detail.setExecutorRole(addTask.getExecutorId());
SysProject project = null;
if(ObjectUtil.isNotNull(addTask.getProjectId())){
if (ObjectUtil.isNotNull(addTask.getProjectId())) {
project = sysProjectDao.selectByPrimaryKey(addTask.getProjectId());
if (ObjectUtil.isNotNull(project)) {
detail.setProjectId(addTask.getProjectId());
detail.setBeginTime(project.getBeginTime());
detail.setEndTime(project.getEndTime());
detail.setLevel((byte) 2);
}else {
} else {
throw new BaseException("项目信息不正确");
}
} else {
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());
detail.setParentId(taskDetail.getId());
detail.setBeginTime(taskDetail.getBeginTime());
detail.setEndTime(taskDetail.getEndTime());
detail.setLevel((byte) (taskDetail.getLevel() + 1));
if(taskDetail.getLevel() == 1){
detail.setBeginTime(System.currentTimeMillis());
detail.setEndTime(com.ccsens.util.DateUtil.getYMD(DateUtil.tomorrow()).getTime());
}
if (ObjectUtil.isNotNull(addTask.getParentTaskId())) {
ProTaskDetail taskDetail = taskDetailDao.selectByPrimaryKey(addTask.getParentTaskId());
if (ObjectUtil.isNotNull(taskDetail)) {
detail.setProjectId(taskDetail.getProjectId());
detail.setParentId(taskDetail.getId());
detail.setBeginTime(taskDetail.getBeginTime());
detail.setEndTime(taskDetail.getEndTime());
detail.setLevel((byte) (taskDetail.getLevel() + 1));
if (taskDetail.getLevel() == 1) {
detail.setBeginTime(System.currentTimeMillis());
detail.setEndTime(com.ccsens.util.DateUtil.getYMD(DateUtil.tomorrow()).getTime());
}
// taskDetail.setHasGroup((byte) 1);
// taskDetailDao.updateByPrimaryKeySelective(taskDetail);
} else {
throw new BaseException("任务信息不正确");
}
} else {
throw new BaseException("任务信息不正确");
}
// }
}else{
} else {
detail.setLevel((byte) 1);
}
if(ObjectUtil.isNotNull(addTask.getBeginTime())){
if (ObjectUtil.isNotNull(addTask.getBeginTime())) {
detail.setBeginTime(addTask.getBeginTime());
}
if(ObjectUtil.isNotNull(addTask.getEndTime())){
if (ObjectUtil.isNotNull(addTask.getEndTime())) {
detail.setEndTime(addTask.getEndTime());
}
taskDetailDao.insertSelective(detail);
if(ObjectUtil.isNotNull(addTask.getProjectId())){
if(ObjectUtil.isNotNull(project)) {
if (ObjectUtil.isNotNull(addTask.getProjectId())) {
if (ObjectUtil.isNotNull(project)) {
if (detail.getBeginTime() < project.getBeginTime()) {
project.setBeginTime(detail.getBeginTime());
}
@ -361,7 +361,7 @@ public class TaskSubTimeService implements ITaskSubTimeService {
}
//TaskSubTime
List<ProTaskSubTime> proTaskSubTimeList = new ArrayList<>();
if(ObjectUtil.isNotNull(detail.getProjectId())){
if (ObjectUtil.isNotNull(detail.getProjectId())) {
//cycle为空,只加一条数据
if (StrUtil.isEmpty(detail.getCycle())) {
ProTaskSubTime proTaskSubTime = new ProTaskSubTime();
@ -390,7 +390,7 @@ public class TaskSubTimeService implements ITaskSubTimeService {
}
}
//交付物
if(StrUtil.isNotEmpty(addTask.getTaskDeliver())){
if (StrUtil.isNotEmpty(addTask.getTaskDeliver())) {
ProTaskDeliver deliver = new ProTaskDeliver();
deliver.setId(snowflake.nextId());
deliver.setTaskDetailId(detail.getId());
@ -398,8 +398,8 @@ public class TaskSubTimeService implements ITaskSubTimeService {
taskDeliverDao.insertSelective(deliver);
}
//插件
if(CollectionUtil.isNotEmpty(addTask.getPluginList())){
for(Long pluginId:addTask.getPluginList()){
if (CollectionUtil.isNotEmpty(addTask.getPluginList())) {
for (Long pluginId : addTask.getPluginList()) {
ProTaskPlugin plugin = new ProTaskPlugin();
plugin.setId(snowflake.nextId());
plugin.setTaskDetailId(detail.getId());
@ -410,17 +410,17 @@ public class TaskSubTimeService implements ITaskSubTimeService {
}
//获取符合当前时间的subtimeId
Long subTimeId = taskDetailDao.selectSubTimeByTaskIdAndTime(detail.getId(), System.currentTimeMillis());
if(ObjectUtil.isNull(subTimeId) && CollectionUtil.isNotEmpty(proTaskSubTimeList)){
if (ObjectUtil.isNull(subTimeId) && CollectionUtil.isNotEmpty(proTaskSubTimeList)) {
subTimeId = proTaskSubTimeList.get(0).getId();
}
//返回
TaskVo.NormalTask taskDetail = taskDetailDao.selectTaskByTaskId(subTimeId, detail.getId(),detail.getExecutorRole());
TaskVo.NormalTask taskDetail = taskDetailDao.selectTaskByTaskId(subTimeId, detail.getId(), detail.getExecutorRole());
if(ObjectUtil.isNotNull(taskDetail)) {
if (ObjectUtil.isNotNull(taskDetail)) {
taskDetailService.managePlugin(currentUserId, detail.getExecutorRole(), taskDetail);
}
//通过智能助手发送通知
robotService.addTaskRobotSend(currentUserId,project,addTask.getTaskName(),addTask.getExecutorId());
robotService.addTaskRobotSend(currentUserId, project, addTask.getTaskName(), addTask.getExecutorId());
return taskDetail;
}
@ -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);
}
}

34
tall/src/main/java/com/ccsens/tall/web/TaskController.java

@ -8,6 +8,7 @@ import com.ccsens.tall.service.ITaskSubTimeService;
import com.ccsens.util.JsonResponse;
import com.ccsens.util.WebConstant;
import com.ccsens.util.annotation.OperateType;
import com.github.pagehelper.PageInfo;
import io.jsonwebtoken.Claims;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
@ -121,6 +122,39 @@ public class TaskController {
return JsonResponse.newInstance().ok();
}
@ApiOperation(value = "看板上查找任务信息", notes = "")
@ApiImplicitParams({
@ApiImplicitParam(name = "projectId", value = "项目id 必填", required = true, paramType = "query"),
@ApiImplicitParam(name = "type", value = "必填 任务状态 0未开始 1进行中 2已完成", required = true, paramType = "query"),
@ApiImplicitParam(name = "roleId", value = "角色id 不传则查找全部", required = true, paramType = "query")
})
@RequestMapping(value = "kanban", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"})
public JsonResponse<PageInfo<TaskVo.KanBanTask>> getKanbanTake(HttpServletRequest request,
@RequestParam(required = true)Long projectId,
@RequestParam(required = false)Long roleId,
@RequestParam(required = true)Integer type,
@RequestParam(required = false)Integer page,
@RequestParam(required = false)Integer pageSize) throws Exception {
page = page == null ? 1 : page;
pageSize = pageSize == null ? 10 : pageSize;
Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject());
PageInfo<TaskVo.KanBanTask> kanbanTaskList = subTimeService.getKanbanTake(currentUserId,projectId,roleId,type,page,pageSize);
return JsonResponse.newInstance().ok(kanbanTaskList);
}
@ApiOperation(value = "看板上修改任务信息", notes = "")
@ApiImplicitParams({
@ApiImplicitParam(name = "projectId", value = "项目id 必填", required = true, paramType = "query"),
@ApiImplicitParam(name = "type", value = "必填 任务状态 0未开始 1进行中 2已完成", required = true, paramType = "query"),
@ApiImplicitParam(name = "roleId", value = "角色id 不传则查找全部", required = true, paramType = "query")
})
@RequestMapping(value = "kanban/change", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse changeKanbanTake(HttpServletRequest request,
@ApiParam @Validated @RequestBody TaskDto.ChangeKanbanTask changeKanbanTask) throws Exception {
Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject());
subTimeService.changeKanbanTake(currentUserId,changeKanbanTask);
return JsonResponse.newInstance().ok();
}
//==============================================================

2
tall/src/main/resources/application-test.yml

@ -12,6 +12,7 @@ spring:
type: com.alibaba.druid.pool.DruidDataSource
rabbitmq:
host: 127.0.0.1
# host: api.ccsens.com
password: 111111
port: 5672
username: admin
@ -32,5 +33,6 @@ swagger:
eureka:
instance:
ip-address: 192.168.0.99
# ip-address: 49.233.89.188
gatewayUrl: http://192.168.0.99/gateway/
notGatewayUrl: http://192.168.0.99/

4
tall/src/main/resources/druid-test.yml

@ -15,6 +15,7 @@ spring:
maxWait: 60000
minEvictableIdleTimeMillis: 300000
minIdle: 5
# password:
password: 68073a279b399baa1fa12cf39bfbb65bfc1480ffee7b659ccc81cf19be8c4473
poolPreparedStatements: true
servletLogSlowSql: true
@ -27,7 +28,8 @@ spring:
testOnReturn: false
testWhileIdle: true
timeBetweenEvictionRunsMillis: 60000
url: jdbc:mysql://49.233.89.188/tall?useUnicode=true&characterEncoding=UTF-8
# url: jdbc:mysql://127.0.0.1/tall?useUnicode=true&characterEncoding=UTF-8
url: jdbc:mysql://test.tall.wiki/tall?useUnicode=true&characterEncoding=UTF-8
username: root
validationQuery: SELECT 1 FROM DUAL
env: CCSENS_TALL

11
tall/src/main/resources/mapper_dao/ProMemberDao.xml

@ -98,6 +98,17 @@
mr.role_id = #{roleId}
</select>
<select id="selectMemberByRoleId" parameterType="java.util.Map" resultType="com.ccsens.tall.bean.po.ProMember">
select
*
FROM
t_pro_member m join t_pro_member_role mr on m.id = mr.member_id
WHERE
m.rec_status = 0
and
mr.role_id = #{roleId}
</select>
<select id="getMemberAndStakeholder" parameterType="java.util.Map" resultType="com.ccsens.tall.bean.vo.WbsVo$MemberAndStakeholder">
SELECT
t.memberName,

8
tall/src/main/resources/mapper_dao/SysProjectDao.xml

@ -142,7 +142,8 @@
t_sys_user_attention a
left JOIN t_sys_project p ON a.project_id = p.id
left join t_sys_project_label pl on pl.project_id = p.id
left join t_sys_label l on pl.label_id = l.id
left join t_sys_label l on pl.label_id = l.id and
l.user_id = #{userId}
WHERE
a.user_id = #{userId}
AND
@ -198,7 +199,8 @@
t_sys_user_attention a
left JOIN t_sys_project p ON a.project_id = p.id
left join t_sys_project_label pl on pl.project_id = p.id
left join t_sys_label l on pl.label_id = l.id
left join t_sys_label l on pl.label_id = l.id and
l.user_id = #{userId}
WHERE
a.user_id = #{userId}
AND
@ -349,7 +351,7 @@
s.end_time &gt; #{start}
<if test="roleId != null">
and
d.executor_role = #{roleId}
d.executor_role in (#{roleId},#{allMemberId})
</if>
and
d.project_id = #{projectId}

48
tall/src/main/resources/mapper_dao/TaskSubTimeDao.xml

@ -28,4 +28,52 @@
p.id = #{projectId}
</update>
<select id="getKanbanTake" parameterType="java.util.Map" resultType="com.ccsens.tall.bean.vo.TaskVo$KanBanTask">
SELECT
d.id as taskDetailId,
s.id as id,
d.name as taskName,
d.executor_role as roleId,
r.name as roleName,
s.begin_time as taskBegintime,
s.end_time as taskEndTime
FROM
t_pro_task_detail d LEFT JOIN t_pro_task_sub_time s on d.id = s.task_detail_id
LEFT JOIN t_pro_role r on r.id = d.executor_role
LEFT JOIN
(
SELECT
count(m.id) as mid,
s.id as sId
FROM
t_pro_sub_time_member m LEFT JOIN t_pro_task_sub_time s on m.task_sub_time_id = s.id
WHERE
m.member_id = #{memberId}
and
m.rec_status = 0
)t on t.sId = s.id
WHERE
d.project_id = #{projectId}
and
d.level != 0
<if test="roleId != null">
and
r.id = #{roleId}
</if>
and
s.complated_status = #{type}
and
(
(
d.finish_need_all = 0
)
or
(
d.finish_need_all = 1
and
t.mid > 0
)
)
</select>
</mapper>
Loading…
Cancel
Save