Browse Source

20220318LWBS

master
zy_Java 3 years ago
parent
commit
f4ed648449
  1. 6
      src/main/java/com/ccsens/ptos_zero/persist/dao/ProRoleDao.java
  2. 11
      src/main/java/com/ccsens/ptos_zero/persist/dao/ProTaskDetailDao.java
  3. 156
      src/main/java/com/ccsens/ptos_zero/service/TallService.java
  4. 14
      src/main/resources/mapper_dao/ProRoleDao.xml
  5. 193
      src/main/resources/mapper_dao/ProTaskDetailDao.xml

6
src/main/java/com/ccsens/ptos_zero/persist/dao/ProRoleDao.java

@ -62,4 +62,10 @@ public interface ProRoleDao extends ProRoleMapper {
*/
List<Long> queryRoleListOfProject(@Param("projectId")Long projectId);
/**
* 根据userID查找所有所属的角色
* @param userId 用户id
* @return 返回角色id
*/
List<Long> allRoleByUserId(@Param("userId")Long userId);
}

11
src/main/java/com/ccsens/ptos_zero/persist/dao/ProTaskDetailDao.java

@ -137,6 +137,17 @@ public interface ProTaskDetailDao extends ProTaskDetailMapper {
* @return 任务列表
*/
List<TaskVo.TaskOfProject> queryTaskOfProject(TaskDto.QueryTaskOfProject param);
/**
* 查找所有任务不分项目
* @param roleList 角色列表
* @param timeNode 时间基准点
* @param timeUnit 时间颗粒度
* @param queryType 上查下查
* @param taskId 任务id
* @return 返回任务列表
*/
List<TallTaskVo.QueryTask> getAllTaskByRoleList(@Param("roleList")List<Long> roleList, @Param("timeNode")Long timeNode, @Param("timeUnit")int timeUnit, @Param("queryType")int queryType, @Param("taskId")String taskId);
//
// /**
// * 根据任务id查询关联的插件信息

156
src/main/java/com/ccsens/ptos_zero/service/TallService.java

@ -1,5 +1,6 @@
package com.ccsens.ptos_zero.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
@ -8,9 +9,10 @@ import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.ccsens.ptos_zero.bean.po.ProRole;
import com.ccsens.ptos_zero.bean.po.ProRoleExample;
import com.ccsens.ptos_zero.bean.po.ProTaskSub;
import com.ccsens.ptos_zero.bean.po.ProUser;
import com.ccsens.ptos_zero.bean.vo.DeliverVo;
import com.ccsens.ptos_zero.persist.dao.*;
@ -18,6 +20,7 @@ import com.ccsens.ptos_zero.util.Constant;
import com.ccsens.ptos_zero.util.ZeroCodeError;
import com.ccsens.util.CodeEnum;
import com.ccsens.util.PropUtil;
import com.ccsens.util.RestTemplateUtil;
import com.ccsens.util.WebConstant;
import com.ccsens.util.exception.BaseException;
import com.ccsensptos.tallsdk.bean.dto.TallProjectDto;
@ -681,65 +684,120 @@ public class TallService implements ITallService {
@Override
public PageInfo<TallTaskVo.QueryTask> pageQueryRegularTask(String token, TallTaskDto.PageQueryRegularTask param) {
//TODO 根据token获取用户信息
List<TallTaskVo.QueryTask> regularTask = new ArrayList<>();
//根据token获取用户信息
TallTokenVo.UserIdByToken userByToken = TokenUtil.getUserByToken(new TallTokenDto.GetUserByToken(token, Constant.APP_ID, Constant.APP_SECRET));
if(ObjectUtil.isNull(userByToken)){
throw new BaseException(CodeEnum.NOT_LOGIN);
}
//通过手机号获取用户在服务内的userId
ProUser user = null;
if(ObjectUtil.isNotNull(userByToken) && StrUtil.isNotBlank(userByToken.getPhone())){
user = userDao.getUserIdByPhone(userByToken.getPhone());
}
// if(ObjectUtil.isNull(user)){
// throw new BaseException(ZeroCodeError.NOT_USER_SERVER);
// }
//查询用的时间
Long queryTime = System.currentTimeMillis();
if(ObjectUtil.isNotNull(param.getTaskId())){
//根据任务id查找任务,以任务的开始时间当做查询的时间点
ProTaskSub proTaskSub = proTaskSubDao.selectByPrimaryKey(param.getTaskId());
if(ObjectUtil.isNotNull(proTaskSub) && proTaskSub.getPlanStartTime() != 0L){
queryTime = proTaskSub.getPlanStartTime();
//调用tall的接口查询所有的任务
String url = com.ccsensptos.tallsdk.util.Constant.GATEWAY_URL + com.ccsensptos.tallsdk.util.Constant.QUERY_ALL_TASK;
log.info("调用接口:{}--", url);
//接口参数
TallTaskDto.QueryAllTask queryAllTask = new TallTaskDto.QueryAllTask();
BeanUtil.copyProperties(param,queryAllTask);
queryAllTask.setPhone(userByToken.getPhone());
String postBody = null;
try{
//请求接口
postBody = RestTemplateUtil.postBody(url, queryAllTask);
}catch (Exception e){
log.error("查询所有任务--" + e);
}
if(StrUtil.isNotBlank(postBody)){
JSONObject jsonObject = JSONObject.parseObject(postBody);
log.info("接口返回:{}", jsonObject);
Integer code = jsonObject.getInteger("code");
if (code != null && code == 200) {
JSONArray data = jsonObject.getJSONArray("data");
if(CollectionUtil.isNotEmpty(data)){
for (Object object : data) {
TallTaskVo.QueryTask queryTask;
try {
JSONObject object1 = (JSONObject) object;
queryTask = object1.toJavaObject(TallTaskVo.QueryTask.class);
regularTask.add(queryTask);
}catch (Exception e){
log.error("项目转换失败"+e);
}
}
}
}
}else {
if(ObjectUtil.isNotNull(param.getTimeNode())){
//没有任务id则根据时间基准线查询当前正在进行的任务(如果多个则选择时间最早的一个)
Long startTime = proTaskSubDao.getTimeByProgressTask(param.getTimeNode(),param.getRoleId());
if(ObjectUtil.isNotNull(startTime)){
queryTime = startTime;
}
List<TallTaskVo.QueryTask> tasks = new ArrayList<>();
if(CollectionUtil.isNotEmpty(regularTask)) {
//给任务排序
regularTask.sort((o1, o2) -> {
Long x1 = o1.getPlanStart();
Long x2 = o2.getPlanStart();
int sComp = param.getQueryType() == 1 ? x1.compareTo(x2) : x2.compareTo(x1);
if (sComp != 0) {
return sComp;
} else {
Long a1 = o1.getId();
Long a2 = o2.getId();
return param.getQueryType() == 1 ? a1.compareTo(a2) : a2.compareTo(a1);
}
}else {
//如果没有时间基准线则按当前时间查询查询任务
Long startTime = proTaskSubDao.getTimeByProgressTask(System.currentTimeMillis(),param.getRoleId());
if(ObjectUtil.isNotNull(startTime)){
queryTime = startTime;
});
//分页
for (int i = 0; i < regularTask.size() && i < param.getPageSize(); i++) {
TallTaskVo.QueryTask queryTask = regularTask.get(i);
//TODO 给任务添加插件(本服务任务添加任务名插件,其他服务的任务添加跳转项目的插件)
List<List<TallTaskVo.TaskPluginInfo>> pluginRow = new ArrayList<>();
List<TallTaskVo.TaskPluginInfo> pluginCol = new ArrayList<>();
if(Constant.BUSINESS_CODE.equals(queryTask.getBusinessCode())) {
//任务名插件
TallTaskVo.TaskPluginInfo plugin = new TallTaskVo.TaskPluginInfo();
plugin.setRow(1);
plugin.setCol(1);
plugin.setColspan(1);
plugin.setRowspan(1);
plugin.setPluginId(1L);
plugin.setInner((byte) 1);
pluginCol.add(plugin);
}else {
//任务名插件
TallTaskVo.TaskPluginInfo plugin = new TallTaskVo.TaskPluginInfo();
plugin.setRow(1);
plugin.setCol(1);
plugin.setColspan(1);
plugin.setRowspan(1);
plugin.setPluginId(24L);
plugin.setInner((byte) 1);
pluginCol.add(plugin);
}
pluginRow.add(pluginCol);
queryTask.setPlugins(pluginRow);
tasks.add(queryTask);
}
}
//获取任务列表
PageHelper.startPage(param.getPageNum(),param.getPageSize());
List<TallTaskVo.QueryTask> regularTask = taskDetailDao.pageQueryRegularTask(param.getRoleId(),queryTime,param.getTimeUnit(),param.getQueryType());
PageInfo<TallTaskVo.QueryTask> queryTaskPageInfo = new PageInfo<>(regularTask);
if(CollectionUtil.isNotEmpty(queryTaskPageInfo.getList())){
if(param.getQueryType() == 0){
//向上查找任务顺序是倒的,需要改成正序
List<TallTaskVo.QueryTask> taskList = new ArrayList<>();
for (int i = queryTaskPageInfo.getList().size() - 1; i >= 0; i--) {
taskList.add(queryTaskPageInfo.getList().get(i));
}
queryTaskPageInfo.setList(taskList);
Collections.reverse(tasks);
}
//查询任务下的插件
queryPluginForTask(queryTaskPageInfo.getList());
//查询任务下的检查人
queryCheckerOfTask(queryTaskPageInfo.getList());
//TODO 查询插件展示信息
queryPluginShow(queryTaskPageInfo.getList(),user == null ? null : user.getId());
}
return queryTaskPageInfo;
return new PageInfo<>(tasks);
}
@Override
public List<TallTaskVo.QueryTask> queryAllTask(TallTaskDto.QueryAllTask param) {
List<TallTaskVo.QueryTask> queryTaskList = null;
//通过手机号查找服务内的用户
ProUser user = userDao.getUserIdByPhone(param.getPhone());
if(ObjectUtil.isNull(user)){
return queryTaskList;
}
//查找用户所属的成员,查找所属的角色
List<Long> roleList = roleDao.allRoleByUserId(user.getId());
if(CollectionUtil.isNotEmpty(roleList)){
//通过角色和时间等信息,查找任务,如果传入的参数有任务id且code符合当前服务,则排除该任务
String taskId = Constant.BUSINESS_CODE.equals(param.getBusinessCode()) ? param.getTaskId() : null;
PageHelper.startPage(param.getPageNum(),param.getPageSize());
queryTaskList = taskDetailDao.getAllTaskByRoleList(roleList,param.getTimeNode(),param.getTimeUnit(),param.getQueryType(),taskId);
}
return queryTaskList;
}
}

14
src/main/resources/mapper_dao/ProRoleDao.xml

@ -155,4 +155,18 @@
rec_status = 0
AND project_id = #{projectId}
</select>
<select id="allRoleByUserId" resultType="java.lang.Long">
SELECT
r.id
FROM
t_pro_role r
LEFT JOIN t_pro_role_member rm on r.id = rm.role_id and rm.rec_status = 0
LEFT JOIN t_pro_member m on m.id = rm.member_id and m.rec_status = 0
LEFT JOIN t_pro_task_detail d on r.project_id = d.id
WHERE
m.user_id = #{userId}
and r.rec_status = 0
and d.rec_status = 0
GROUP BY r.id
</select>
</mapper>

193
src/main/resources/mapper_dao/ProTaskDetailDao.xml

@ -515,109 +515,6 @@
ORDER BY alltask.planStart,id
</if>
</select>
<!-- <select id="projectIdByTaskDetailId" resultType="java.lang.Long">-->
<!-- SELECT-->
<!-- b.business_id-->
<!-- FROM-->
<!-- (SELECT l.id as labelId FROM t_label l LEFT JOIN t_label_type lt on l.label_type_id = lt.id WHERE lt.label_type = 1 and l.level = 0 and l.rec_status = 0 and lt.rec_status = 0) l,-->
<!-- (SELECT-->
<!-- @r as _id ,-->
<!-- @r:=(SELECT @r:=parent_task_detail_id FROM t_pro_parent_task WHERE task_detail_id = _id and rec_status = 0) as parentId-->
<!-- FROM-->
<!-- (SELECT @r := #{taskDetailId}) d,-->
<!-- t_pro_parent_task p-->
<!-- WHERE-->
<!-- @r is not null-->
<!-- )p,-->
<!-- t_label_business b-->
<!-- WHERE-->
<!-- l.labelId = b.label_id-->
<!-- and p.parentId = b.business_id-->
<!-- and b.rec_status = 0-->
<!-- limit 1-->
<!-- </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>-->
<!-- <select id="findSonTask" resultType="com.ccsens.common.bean.vo.CTaskVo$SonTaskDetail">-->
<!-- SELECT-->
<!-- d.id AS detailId,-->
<!-- d.`name`,-->
<!-- d.description,-->
<!-- d.cycle,-->
<!-- s.plan_start_time,-->
<!-- s.plan_duration,-->
<!-- s.plan_end_time,-->
<!-- s.real_start_time,-->
<!-- s.real_duration,-->
<!-- s.real_end_time,-->
<!-- s.task_status-->
<!-- FROM-->
<!-- t_pro_parent_task AS pt-->
<!-- LEFT JOIN t_pro_task_detail AS d ON d.id = pt.task_detail_id-->
<!-- LEFT JOIN t_pro_task_sub AS s ON s.task_detail_id = pt.task_detail_id-->
<!-- LEFT JOIN t_label_business AS lb ON pt.task_detail_id = lb.business_id-->
<!-- LEFT JOIN t_label AS l ON lb.label_id = l.id-->
<!-- LEFT JOIN t_label_type AS lt ON l.label_type_id = lt.id-->
<!-- WHERE-->
<!-- lb.rec_status = 0-->
<!-- AND pt.rec_status = 0-->
<!-- AND d.rec_status = 0-->
<!-- AND s.rec_status = 0-->
<!-- AND l.rec_status = 0-->
<!-- AND lt.rec_status = 0-->
<!-- AND l.`level` != 0-->
<!-- AND lt.label_type = 1-->
<!-- AND pt.parent_task_detail_id = #{detailId}-->
<!-- </select>-->
<!-- <select id="queryTaskById" resultType="com.ccsens.common.bean.vo.CTaskVo$QueryTask">-->
<!-- SELECT-->
<!-- ts.id,-->
<!-- td.id AS detailId,-->
<!-- td.`name`,-->
<!-- td.description,-->
<!-- ts.plan_start_time AS planStart,-->
<!-- ts.plan_duration,-->
<!-- ts.plan_end_time AS planEnd,-->
<!-- ts.real_start_time AS realStart,-->
<!-- ts.real_duration,-->
<!-- ts.real_end_time AS realEnd,-->
<!-- ts.task_status AS process,-->
<!-- tf.flow_type AS skip,-->
<!-- tf.jump_task_detail_id AS skipTaskId,-->
<!-- tpi.back_color AS backgroundColor,-->
<!-- tpi.round_corner AS borderRadius,-->
<!-- tpi.border AS border,-->
<!-- tpi.shadow AS shadow,-->
<!-- tpi.width AS width,-->
<!-- tpi.height AS height,-->
<!-- tpi.`row` AS `row`,-->
<!-- tpi.col AS col-->
<!-- FROM-->
<!-- t_pro_task_detail AS td-->
<!-- LEFT JOIN t_pro_task_sub AS ts ON ts.task_detail_id = td.id-->
<!-- LEFT JOIN t_pro_task_flow AS tf ON tf.task_detail_id = td.id AND tf.rec_status = 0-->
<!-- LEFT JOIN t_pro_role_task AS rt ON rt.task_id = td.id-->
<!-- LEFT JOIN t_pro_task_panel_info AS tpi ON tpi.task_detail_id = td.id AND tpi.rec_status = 0-->
<!-- WHERE-->
<!-- td.rec_status = 0 AND ts.rec_status = 0 AND rt.rec_status = 0-->
<!-- AND td.id = #{taskDetailId}-->
<!-- LIMIT 1-->
<!-- </select>-->
<select id="queryTaskOfProject" resultType="com.ccsens.ptos_zero.bean.vo.TaskVo$TaskOfProject">
SELECT
@ -640,23 +537,77 @@
)
AND t.`name` LIKE CONCAT('%',#{name},'%')
</select>
<!-- <select id="queryPluginByTaskId" resultType="com.ccsens.common.bean.vo.CPluginVo$TaskPlugin">-->
<!-- SELECT-->
<!-- pp.id,-->
<!-- pp.`name`,-->
<!-- p.param,-->
<!-- p.plgin_row as `row`,-->
<!-- p.plgin_col as `col`,-->
<!-- p.colspan,-->
<!-- p.rowspan-->
<!-- FROM-->
<!-- t_pro_task_plugin p,-->
<!-- plugin.t_pro_plugin pp-->
<!-- WHERE-->
<!-- p.plugin_id = pp.id-->
<!-- and p.task_detail_id = #{detailId}-->
<!-- and p.rec_status = 0-->
<!-- and pp.rec_status = 0-->
<!-- </select>-->
<select id="getAllTaskByRoleList" resultType="com.ccsensptos.tallsdk.bean.vo.TallTaskVo$QueryTask">
SELECT
alltask.*
FROM
(
SELECT
ts.id,
td.id AS detailId,
td.`name`,
td.description,
ts.plan_start_time AS planStart,
ts.plan_duration,
ts.plan_end_time,
ts.real_end_time,
ts.real_start_time AS realStart,
ts.real_duration,
ts.task_status AS process,
r.project_id as projectId,
rt.role_id as executorRoleId
FROM
t_pro_task_detail AS td
LEFT JOIN t_pro_task_sub AS ts ON ts.task_detail_id = td.id
LEFT JOIN t_pro_role_task AS rt ON rt.task_id = td.id
LEFT JOIN t_pro_role as r on rt.role_id = r.id
LEFT JOIN t_label_business AS lb ON td.id = lb.business_id
LEFT JOIN t_label AS l ON l.id = lb.label_id
LEFT JOIN t_label_type AS lt ON lt.id = l.label_type_id
WHERE
td.rec_status = 0
AND ts.rec_status = 0
AND lb.rec_status = 0
AND l.rec_status = 0
AND lt.rec_status = 0
AND rt.rec_status = 0
AND r.rec_status = 0
AND lb.business_type = 0
AND l.`level` = 3
AND lt.label_type = 1
AND ts.plan_start_time != 0
AND ts.plan_duration != 0
AND rt.role_id in
<foreach collection="roleList" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
<if test="queryType == 0">
AND plan_start_time &lt; #{timeNode}
</if>
<if test="queryType == 1">
AND plan_start_time >= #{timeNode}
</if>
<if test="taskId != null">
and ts.id != #{taskId}
</if>
) AS alltask
LEFT JOIN t_label_business AS llbb ON alltask.detailId = llbb.business_id
LEFT JOIN t_label AS ll ON llbb.label_id = ll.id
LEFT JOIN t_label_type AS lltt ON ll.label_type_id = lltt.id
WHERE
llbb.rec_status = 0
AND ll.rec_status = 0
AND lltt.rec_status = 0
AND lltt.label_type = 0
AND llbb.business_type = 0
AND ll.`level` >= #{timeUnit}
<if test="queryType == 0">
ORDER BY alltask.planStart DESC,id DESC
</if>
<if test="queryType == 1">
ORDER BY alltask.planStart,id
</if>
</select>
</mapper>
Loading…
Cancel
Save