Browse Source

修改任务状态接口、

tall3
zy_Java 4 years ago
parent
commit
e648fe2d1a
  1. 2
      common/src/main/java/com/ccsens/common/bean/dto/TaskDto.java
  2. 51
      common/src/main/java/com/ccsens/common/bean/message/TaskMessageWithStatus.java
  3. 8
      common/src/main/java/com/ccsens/common/persist/dao/ProRoleDao.java
  4. 6
      common/src/main/java/com/ccsens/common/persist/dao/ProTaskDetailDao.java
  5. 2
      common/src/main/java/com/ccsens/common/service/ITaskService.java
  6. 177
      common/src/main/java/com/ccsens/common/service/TaskService.java
  7. 1
      common/src/main/java/com/ccsens/common/util/CommonCodeError.java
  8. 27
      common/src/main/java/com/ccsens/common/util/Constant.java
  9. 104
      common/src/main/resources/application-dev.yml
  10. 8
      common/src/main/resources/application.yml
  11. 15
      common/src/main/resources/mapper_dao/ProRoleDao.xml
  12. 15
      common/src/main/resources/mapper_dao/ProTaskDetailDao.xml
  13. 13
      tall/src/main/resources/application-dev.yml

2
common/src/main/java/com/ccsens/common/bean/dto/TaskDto.java

@ -55,7 +55,7 @@ public class TaskDto {
@ApiModelProperty("任务分解id") @ApiModelProperty("任务分解id")
private Long id; private Long id;
@ApiModelProperty("0开始 1暂停 2继续 3完成 默认0") @ApiModelProperty("0开始 1暂停 2继续 3完成 默认0")
private int type; private byte type;
} }
} }

51
common/src/main/java/com/ccsens/common/bean/message/TaskMessageWithStatus.java

@ -0,0 +1,51 @@
package com.ccsens.common.bean.message;
import com.ccsens.common.util.Constant;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
/**
* @author
*/
@Data
public class TaskMessageWithStatus{
private String type = Constant.MessageType.TASK_STATUS;
private String event;
public TaskMessageWithStatus() {
}
private Data data;
@Setter
@Getter
public static class Data{
//任务分解id
Long id;
//任务详情id
Long taskDetailId;
//操作状态 0开始 1暂停 2继续 3完成
byte operationType;
//当前任务状态 0未开始 1进行中 2已暂停 3已完成
byte taskStatus;
//操作人id
Long userId;
//操作时间
Long time;
}
public TaskMessageWithStatus(Long id, Long taskDetailId,byte operationType,byte taskStatus,Long userId,Long time){
this();
Data d = new Data();
d.setId(id);
d.setTaskDetailId(taskDetailId);
d.setOperationType(operationType);
d.setTaskStatus(taskStatus);
d.setUserId(userId);
d.setTime(time);
setData(d);
}
}

8
common/src/main/java/com/ccsens/common/persist/dao/ProRoleDao.java

@ -1,10 +1,13 @@
package com.ccsens.common.persist.dao; package com.ccsens.common.persist.dao;
import com.ccsens.common.bean.po.ProTaskSub;
import com.ccsens.common.persist.mapper.ProRoleMapper; import com.ccsens.common.persist.mapper.ProRoleMapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List;
/** /**
* @author AUSU * @author AUSU
*/ */
@ -26,4 +29,9 @@ public interface ProRoleDao extends ProRoleMapper {
* 查看当前用户是否是任务的负责人 * 查看当前用户是否是任务的负责人
*/ */
Integer isExecutorByUserId(@Param("userId")Long userId, @Param("taskDetailId")Long taskDetailId); Integer isExecutorByUserId(@Param("userId")Long userId, @Param("taskDetailId")Long taskDetailId);
/**
* 根据任务分解id查找任务负责人下所有成员的userId
*/
List<String> queryExecutorUserIdBySubTaskId(@Param("subTaskId")Long subTaskId);
} }

6
common/src/main/java/com/ccsens/common/persist/dao/ProTaskDetailDao.java

@ -1,5 +1,6 @@
package com.ccsens.common.persist.dao; package com.ccsens.common.persist.dao;
import com.ccsens.common.bean.po.ProTaskStatusRecord;
import com.ccsens.common.bean.vo.TaskVo; import com.ccsens.common.bean.vo.TaskVo;
import com.ccsens.common.persist.mapper.ProTaskDetailMapper; import com.ccsens.common.persist.mapper.ProTaskDetailMapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@ -58,4 +59,9 @@ public interface ProTaskDetailDao extends ProTaskDetailMapper {
* 根据任务详情id查找项目id * 根据任务详情id查找项目id
*/ */
Long projectIdByTaskDetailId(@Param("taskDetailId") Long taskDetailId); Long projectIdByTaskDetailId(@Param("taskDetailId") Long taskDetailId);
/**
* 查询最后一次开始之后的记录
*/
List<ProTaskStatusRecord> calculateDuration(@Param("taskDetailId")Long subTaskId);
} }

2
common/src/main/java/com/ccsens/common/service/ITaskService.java

@ -38,5 +38,5 @@ public interface ITaskService {
* @param param 任务分解id和任务状态 * @param param 任务分解id和任务状态
* @param userId 用户id * @param userId 用户id
*/ */
void updateTaskType(TaskDto.UpdateTaskType param, Long userId); void updateTaskType(TaskDto.UpdateTaskType param, Long userId) throws Exception;
} }

177
common/src/main/java/com/ccsens/common/service/TaskService.java

@ -1,19 +1,26 @@
package com.ccsens.common.service; package com.ccsens.common.service;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.BooleanUtil; import cn.hutool.core.util.BooleanUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.ccsens.common.bean.dto.TaskDto; import com.ccsens.common.bean.dto.TaskDto;
import com.ccsens.common.bean.po.ProTaskDetail; import com.ccsens.common.bean.message.TaskMessageWithStatus;
import com.ccsens.common.bean.po.ProTaskStatusRecord;
import com.ccsens.common.bean.po.ProTaskSub; import com.ccsens.common.bean.po.ProTaskSub;
import com.ccsens.common.bean.vo.TaskVo; import com.ccsens.common.bean.vo.TaskVo;
import com.ccsens.common.persist.dao.*; import com.ccsens.common.persist.dao.*;
import com.ccsens.common.persist.mapper.ProTaskStatusRecordMapper;
import com.ccsens.common.persist.mapper.ProTaskSubMapper; import com.ccsens.common.persist.mapper.ProTaskSubMapper;
import com.ccsens.common.util.CommonCodeError; import com.ccsens.common.util.CommonCodeError;
import com.ccsens.common.util.Constant; import com.ccsens.common.util.Constant;
import com.ccsens.util.JacksonUtil;
import com.ccsens.util.bean.message.common.InMessage;
import com.ccsens.util.bean.message.common.MessageConstant;
import com.ccsens.util.config.RabbitMQConfig;
import com.ccsens.util.exception.BaseException; import com.ccsens.util.exception.BaseException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import lombok.val; import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -45,9 +52,16 @@ public class TaskService implements ITaskService{
private ProTaskSubMapper taskSubMapper; private ProTaskSubMapper taskSubMapper;
@Resource @Resource
private ProTaskPluginDao taskPluginDao; private ProTaskPluginDao taskPluginDao;
@Resource
private Snowflake snowflake;
@Resource
private ProTaskStatusRecordMapper taskStatusRecordMapper;
@Resource
private AmqpTemplate rabbitTemplate;
/** /**
* 判断当前用户的角色是否被设置不可见(是否有权限查看任务) * 判断当前用户的角色是否被设置不可见(是否有权限查看任务)
*
* @param roleId 查看的角色id * @param roleId 查看的角色id
* @param userId 用户id * @param userId 用户id
* @return 是否可见(true可见, false不可见) * @return 是否可见(true可见, false不可见)
@ -86,6 +100,7 @@ public class TaskService implements ITaskService{
/** /**
* 查询任务的插件相关信息 * 查询任务的插件相关信息
*
* @param taskList 任务列表 * @param taskList 任务列表
*/ */
public void queryPluginForTask(List<TaskVo.QueryTask> taskList) { public void queryPluginForTask(List<TaskVo.QueryTask> taskList) {
@ -116,6 +131,7 @@ public class TaskService implements ITaskService{
/** /**
* 根据插件的最大行列创建面板 * 根据插件的最大行列创建面板
*
* @param taskDetailId 任务详情id * @param taskDetailId 任务详情id
* @param plugins 插件列表 * @param plugins 插件列表
* @param queryTask 任务 * @param queryTask 任务
@ -136,6 +152,7 @@ public class TaskService implements ITaskService{
/** /**
* 创建面板 * 创建面板
*
* @param plugins 插件列表 * @param plugins 插件列表
* @param row * @param row
* @param col * @param col
@ -152,6 +169,7 @@ public class TaskService implements ITaskService{
/** /**
* 向空面板里插入插件详情 * 向空面板里插入插件详情
*
* @param taskPluginInfoList 插件详情列表 * @param taskPluginInfoList 插件详情列表
* @param plugins 插件列表 * @param plugins 插件列表
* @param queryTask 任务 * @param queryTask 任务
@ -218,9 +236,7 @@ public class TaskService implements ITaskService{
List<TaskVo.QueryTask> replenishTask = taskDetailDao.continueQueryTask(param.getRoleId(), param.getTimeUnit(), param.getTimeNode(), param.getQueryType(), query, timeFormat); List<TaskVo.QueryTask> replenishTask = taskDetailDao.continueQueryTask(param.getRoleId(), param.getTimeUnit(), param.getTimeNode(), param.getQueryType(), query, timeFormat);
Map<String, List<TaskVo.QueryTask>> taskMap = replenishTask.stream().collect(Collectors.groupingBy(task -> new SimpleDateFormat("yyyy-MM-dd").format(new Date(task.getPlanStart())))); Map<String, List<TaskVo.QueryTask>> taskMap = replenishTask.stream().collect(Collectors.groupingBy(task -> new SimpleDateFormat("yyyy-MM-dd").format(new Date(task.getPlanStart()))));
List<String> mapOfKey = new ArrayList<>(); List<String> mapOfKey = new ArrayList<>();
taskMap.forEach((key,val)->{ taskMap.forEach((key, val) -> mapOfKey.add(key));
mapOfKey.add(key);
});
if (CollectionUtil.isNotEmpty(mapOfKey)) { if (CollectionUtil.isNotEmpty(mapOfKey)) {
if (0 == param.getQueryType()) { if (0 == param.getQueryType()) {
String max = Collections.max(mapOfKey); String max = Collections.max(mapOfKey);
@ -242,11 +258,12 @@ public class TaskService implements ITaskService{
/** /**
* 修改任务状态 * 修改任务状态
*
* @param param 任务分解id和任务状态 * @param param 任务分解id和任务状态
* @param userId 用户id * @param userId 用户id
*/ */
@Override @Override
public void updateTaskType(TaskDto.UpdateTaskType param, Long userId) { public void updateTaskType(TaskDto.UpdateTaskType param, Long userId) throws Exception {
//验证任务是否存在 //验证任务是否存在
ProTaskSub proTaskSub = taskSubMapper.selectByPrimaryKey(param.getId()); ProTaskSub proTaskSub = taskSubMapper.selectByPrimaryKey(param.getId());
if (ObjectUtil.isNull(proTaskSub)) { if (ObjectUtil.isNull(proTaskSub)) {
@ -261,13 +278,149 @@ public class TaskService implements ITaskService{
Integer pm = roleDao.isPmByUserId(userId, projectId); Integer pm = roleDao.isPmByUserId(userId, projectId);
//验证是否是任务负责人 //验证是否是任务负责人
Integer executor = roleDao.isExecutorByUserId(userId, proTaskSub.getTaskDetailId()); Integer executor = roleDao.isExecutorByUserId(userId, proTaskSub.getTaskDetailId());
//只有负责人或者是项目经理才能操作任务的状态
if (pm < 2 && executor == 0) { if (pm < 2 && executor == 0) {
throw new BaseException(CommonCodeError.NOT_TASK); throw new BaseException(CommonCodeError.NOT_PERMISSION);
} }
//根据状态修改信息 //获取当前时间
//开始 添加操作记录 修改任务的状态为进行中,实际开始时间为当前时间,实际时长清空 Long now = System.currentTimeMillis();
//暂停 判断任务是否是进行中, 修改任务的状态为暂停,计算实际时长 添加操作记录 //添加记录
//继续 判断任务是否是暂停中 修改任务状态进行中,添加操作记录 saveTaskStatusRecord(param, userId, now);
//完成 判断任务的交付物信息 修改任务的状态为完成,计算任务的实际时长 记录操作记录 switch (param.getType()) {
case Constant.TaskOperationType.START:
//开始 修改任务的状态为进行中,实际开始时间为当前时间,实际时长清空
proTaskSub.setTaskStatus(Constant.TaskType.PROCESSING);
proTaskSub.setRealStartTime(now);
proTaskSub.setRealDuration(0L);
proTaskSub.setRealEndTime(0L);
taskSubMapper.updateByPrimaryKeySelective(proTaskSub);
break;
case Constant.TaskOperationType.PAUSE:
//暂停 判断任务是否是进行中,
if (proTaskSub.getTaskStatus() != Constant.TaskType.PROCESSING) {
throw new BaseException(CommonCodeError.OPERATION_ERROR);
}
//修改任务的状态为暂停,计算实际时长
proTaskSub.setTaskStatus(Constant.TaskType.PAUSE);
//计算当前任务实际时长
Long duration = calculateDuration(param.getId());
proTaskSub.setRealDuration(duration);
taskSubMapper.updateByPrimaryKeySelective(proTaskSub);
break;
case Constant.TaskOperationType.TASK_CONTINUE:
//继续 判断任务是否是暂停中
if (proTaskSub.getTaskStatus() != Constant.TaskType.PAUSE) {
throw new BaseException(CommonCodeError.OPERATION_ERROR);
}
//修改任务状态为进行中
proTaskSub.setTaskStatus(Constant.TaskType.PROCESSING);
taskSubMapper.updateByPrimaryKeySelective(proTaskSub);
break;
case Constant.TaskOperationType.COMPLETE:
//TODO 验证交付物
//修改任务状态
proTaskSub.setTaskStatus(Constant.TaskType.COMPLETED);
proTaskSub.setRealEndTime(now);
//计算当前任务实际时长
Long d = calculateDuration(param.getId());
proTaskSub.setRealDuration(d);
taskSubMapper.updateByPrimaryKeySelective(proTaskSub);
break;
default:
throw new BaseException(CommonCodeError.OPERATION_ERROR);
}
//发送消息
sendToTaskStatus(userId,proTaskSub,param.getType(),now);
}
/**发送任务状态修改的消息*/
private void sendToTaskStatus(Long userId, ProTaskSub proTaskSub,byte operationType,Long now) throws Exception {
//查找任务所有的负责人下的所有的成员
List<String> userIdList = roleDao.queryExecutorUserIdBySubTaskId(proTaskSub.getId());
Set<String> userIdSet = new HashSet<>(userIdList);
TaskMessageWithStatus taskMessageWithStatus =
new TaskMessageWithStatus(proTaskSub.getId(),proTaskSub.getTaskDetailId(),operationType,proTaskSub.getTaskStatus(),userId,now);
//封装成inMessage
InMessage inMessage = new InMessage();
inMessage.setToDomain(MessageConstant.DomainType.User);
inMessage.setTos(userIdSet);
inMessage.setData(JacksonUtil.beanToJson(taskMessageWithStatus));
log.info("发送消息--任务状态改变--:{}",inMessage);
rabbitTemplate.convertAndSend(RabbitMQConfig.MESSAGE_QUEUE_NAME,
JacksonUtil.beanToJson(inMessage));
}
/**
* 计算实际时长
*/
private Long calculateDuration(Long subTaskId) {
long time = 0L;
long duration = 0L;
byte type = 0;
List<ProTaskStatusRecord> taskStatusRecords = taskDetailDao.calculateDuration(subTaskId);
if (CollectionUtil.isNotEmpty(taskStatusRecords)) {
for (ProTaskStatusRecord taskStatusRecord : taskStatusRecords) {
if(taskStatusRecord.getTaskStatus() == Constant.TaskOperationType.START){
//时长为零
duration = 0L;
//记录开始时间和状态
time = taskStatusRecord.getUpdateStatusTime();
type = taskStatusRecord.getTaskStatus();
}else if(taskStatusRecord.getTaskStatus() == Constant.TaskOperationType.PAUSE){
//上一个阶段到这一个阶段的时间 加上以保存的时长
duration += taskStatusRecord.getUpdateStatusTime() - time;
//记录暂停的时间 和状态
time = taskStatusRecord.getUpdateStatusTime();
type = taskStatusRecord.getTaskStatus();
}else if(taskStatusRecord.getTaskStatus() == Constant.TaskOperationType.TASK_CONTINUE){
//时长暂时不动
//记录一下暂停的时间
time = taskStatusRecord.getUpdateStatusTime();
type = taskStatusRecord.getTaskStatus();
}else if(taskStatusRecord.getTaskStatus() == Constant.TaskOperationType.COMPLETE){
if(type == Constant.TaskOperationType.START){
//如果是开始 用当前时间减去上一个阶段的时间 等于时长
duration = taskStatusRecord.getUpdateStatusTime() - time;
//记录一下时间和类型
time = taskStatusRecord.getUpdateStatusTime();
type = taskStatusRecord.getTaskStatus();
}else if(type == Constant.TaskOperationType.PAUSE){
//如果是暂停 直接用之前的时长
//记录一下时间和类型
time = taskStatusRecord.getUpdateStatusTime();
type = taskStatusRecord.getTaskStatus();
}else if(type == Constant.TaskOperationType.TASK_CONTINUE){
//如果是继续 用当前时间减去继续的时间,加上之前的时长
duration += taskStatusRecord.getUpdateStatusTime() - time;
//记录一下时间和类型
time = taskStatusRecord.getUpdateStatusTime();
type = taskStatusRecord.getTaskStatus();
}else if(type == Constant.TaskOperationType.COMPLETE){
//如果是停止,直接返回时长
//记录一下时间和类型
time = taskStatusRecord.getUpdateStatusTime();
type = taskStatusRecord.getTaskStatus();
}
}
}
}
log.info("查询当前任务的时长-{}",duration);
return duration;
}
/**
* 修改任务状态时添加修改记录
*/
public void saveTaskStatusRecord(TaskDto.UpdateTaskType param, Long userId, Long now) {
ProTaskStatusRecord taskStatusRecord = new ProTaskStatusRecord();
taskStatusRecord.setId(snowflake.nextId());
taskStatusRecord.setTaskStatus(param.getType());
taskStatusRecord.setTaskSubId(param.getId());
taskStatusRecord.setUserId(userId);
taskStatusRecord.setUpdateStatusTime(now);
taskStatusRecordMapper.insertSelective(taskStatusRecord);
} }
} }

1
common/src/main/java/com/ccsens/common/util/CommonCodeError.java

@ -11,5 +11,6 @@ public class CommonCodeError extends CodeError {
public static final Code NOT_TASK = new Code(2,"未找到对应任务", true); public static final Code NOT_TASK = new Code(2,"未找到对应任务", true);
public static final Code NOT_PERMISSION = new Code(3,"没有权限!", true); public static final Code NOT_PERMISSION = new Code(3,"没有权限!", true);
public static final Code ROLE_ERROR = new Code(4,"角色信息错误!", true); public static final Code ROLE_ERROR = new Code(4,"角色信息错误!", true);
public static final Code OPERATION_ERROR = new Code(5,"请选择正确的操作!", true);
} }

27
common/src/main/java/com/ccsens/common/util/Constant.java

@ -1,5 +1,7 @@
package com.ccsens.common.util; package com.ccsens.common.util;
import org.omg.CORBA.StringHolder;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -29,4 +31,29 @@ public class Constant {
timeFormat.put(8,"%Y"); timeFormat.put(8,"%Y");
} }
public static final class TaskType {
/**未开始*/
public static final byte PENDING = 0;
/**进行中*/
public static final byte PROCESSING = 1;
/**暂停中*/
public static final byte PAUSE = 2;
/**已结束*/
public static final byte COMPLETED = 3;
}
public static final class TaskOperationType {
/**开始*/
public static final byte START = 0;
/**暂停*/
public static final byte PAUSE = 1;
/**继续*/
public static final byte TASK_CONTINUE = 2;
/**完成*/
public static final byte COMPLETE = 3;
}
public static final class MessageType {
/**修改任务状态*/
public static final String TASK_STATUS = "taskStatus";
}
} }

104
common/src/main/resources/application-dev.yml

@ -1,52 +1,52 @@
server: #server:
port: 7200 # port: 7200
servlet: # servlet:
context-path: # context-path:
spring: #spring:
snowflake: # snowflake:
datacenterId: 1 # datacenterId: 1
workerId: 1 # workerId: 1
application: # application:
name: common # name: common
datasource: # datasource:
type: com.alibaba.druid.pool.DruidDataSource # type: com.alibaba.druid.pool.DruidDataSource
rabbitmq: # rabbitmq:
host: 192.168.0.99 # host: 192.168.0.99
password: 111111 # password: 111111
port: 5672 # port: 5672
username: admin # username: admin
redis: # redis:
database: 0 # database: 0
host: 127.0.0.1 # host: 127.0.0.1
jedis: # jedis:
pool: # pool:
max-active: 200 # max-active: 200
max-idle: 10 # max-idle: 10
max-wait: -1ms # max-wait: -1ms
min-idle: 0 # min-idle: 0
password: '' # password: ''
port: 6379 # port: 6379
timeout: 1000ms # timeout: 1000ms
swagger: #swagger:
enable: true # enable: true
mybatisCache: #mybatisCache:
database: 1 # database: 1
host: 127.0.0.1 # host: 127.0.0.1
jedis: # jedis:
pool: # pool:
max-active: 200 # max-active: 200
max-idle: 10 # max-idle: 10
max-wait: -1 # max-wait: -1
min-idle: 0 # min-idle: 0
password: '' # password: ''
port: 6379 # port: 6379
timeout: 1000 # timeout: 1000
#
gatewayUrl: https://test.tall.wiki/gateway/ #gatewayUrl: https://test.tall.wiki/gateway/
notGatewayUrl: /home/staticrec/logo.png #notGatewayUrl: /home/staticrec/logo.png
smsCode: 0 #smsCode: 0
#
file: #file:
path: /home/cloud/common/uploads/ # path: /home/cloud/common/uploads/
domain: http://localhost:7030/v1.0/ # domain: http://localhost:7030/v1.0/
imgDomain: http://localhost:7030/v1.0/uploads # imgDomain: http://localhost:7030/v1.0/uploads

8
common/src/main/resources/application.yml

@ -1,4 +1,4 @@
spring: #spring:
profiles: # profiles:
active: dev # active: dev
include: util-dev,common # include: util-dev,common

15
common/src/main/resources/mapper_dao/ProRoleDao.xml

@ -46,14 +46,25 @@
count(*) count(*)
FROM FROM
t_pro_member m t_pro_member m
LEFT JOIN t_pro_role_member rm on m.id = rm.member_id LEFT JOIN t_pro_role_member rm on m.id = rm.member_id and rm.rec_status = 0
LEFT JOIN t_pro_role_task rt on rm.role_id = rt.role_id LEFT JOIN t_pro_role_task rt on rm.role_id = rt.role_id
WHERE WHERE
m.user_id = #{userId} m.user_id = #{userId}
and m.rec_status = 0 and m.rec_status = 0
and rm.rec_status = 0
and rt.task_id = #{taskDetailId} and rt.task_id = #{taskDetailId}
and rt.rec_status = 0 and rt.rec_status = 0
</select> </select>
<select id="queryExecutorUserIdBySubTaskId" resultType="java.lang.String">
SELECT
m.user_id
FROM
t_pro_task_sub s
LEFT JOIN t_pro_role_task rt on s.task_detail_id = rt.task_id and rt.rec_status = 0
LEFT JOIN t_pro_role_member rm on rt.role_id = rm.role_id and rm.rec_status = 0
LEFT JOIN t_pro_member m on rm.member_id = m.id and m.rec_status = 0
WHERE
s.id = #{subTaskId}
and s.rec_status = 0
</select>
</mapper> </mapper>

15
common/src/main/resources/mapper_dao/ProTaskDetailDao.xml

@ -292,5 +292,20 @@
and b.rec_status = 0 and b.rec_status = 0
limit 1 limit 1
</select> </select>
<select id="calculateDuration" resultType="com.ccsens.common.bean.po.ProTaskStatusRecord">
SELECT
task_status,
update_status_time
FROM
`t_pro_task_status_record`
WHERE
task_sub_id = #{taskDetailId}
and rec_status = 0
and update_status_time >= (
SELECT update_status_time FROM `t_pro_task_status_record`
WHERE task_sub_id = #{taskDetailId}
and task_status = 0 and rec_status = 0 ORDER BY update_status_time DESC limit 1)
ORDER BY update_status_time
</select>
</mapper> </mapper>

13
tall/src/main/resources/application-dev.yml

@ -10,12 +10,17 @@ spring:
name: tall name: tall
datasource: datasource:
type: com.alibaba.druid.pool.DruidDataSource type: com.alibaba.druid.pool.DruidDataSource
# rabbitmq:
# host: 192.168.0.99
# #host: 127.0.0.1
# password: 111111
# port: 5672
# username: admin
rabbitmq: rabbitmq:
host: 192.168.0.99 host: 127.0.0.1
#host: 127.0.0.1 password: guest
password: 111111
port: 5672 port: 5672
username: admin username: guest
redis: redis:
database: 0 database: 0
host: 127.0.0.1 host: 127.0.0.1

Loading…
Cancel
Save