feat(task): 添加按作业类型查询任务列表功能

- 在 EightworkTaskController 中新增 listByWorkType 接口
- 实现 listByWorkTypeOrderByLevel 方法按作业级别升序排序
- 新增 EightworkTaskQry 和 EightworkTaskLevelCO 数据传输对象
- 优化 TaskLog 初始化逻辑,默认状态设为未开始
- 修复持续步骤状态管理,提交时保持进行中状态
- 更新数据库表名从 eightwork_task_log 到 task_log
- 添加部门ID、创建时间等查询条件支持
master
fangjiakai 2026-03-18 11:25:55 +08:00
parent 6f9146dc55
commit 19059e1d4c
15 changed files with 127 additions and 18 deletions

View File

@ -4,8 +4,10 @@ package com.zcloud.eightwork.web;
import com.zcloud.eightwork.api.EightworkTaskServiceI;
import com.zcloud.eightwork.dto.EightworkTaskAddCmd;
import com.zcloud.eightwork.dto.EightworkTaskPageQry;
import com.zcloud.eightwork.dto.EightworkTaskQry;
import com.zcloud.eightwork.dto.EightworkTaskUpdateCmd;
import com.zcloud.eightwork.dto.clientobject.EightworkTaskCO;
import com.zcloud.eightwork.dto.clientobject.EightworkTaskLevelCO;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
@ -46,6 +48,12 @@ public class EightworkTaskController {
return eightworkTaskService.listPage(qry);
}
@ApiOperation("根据作业类型查询任务列表")
@PostMapping("/listByWorkType")
public MultiResponse<EightworkTaskLevelCO> listByWorkType(@Validated @RequestBody EightworkTaskQry qry) {
return eightworkTaskService.listByWorkTypeOrderByLevel(qry);
}
@ApiOperation("所有数据")
@GetMapping("/listAll")
public MultiResponse<EightworkTaskCO> listAll() {

View File

@ -89,15 +89,14 @@ public class TaskLogAddExe {
TaskLogDO taskLogDO = new TaskLogDO(Tools.get32UUID());
BeanUtils.copyProperties(flow, taskLogDO, "id");
taskLogDO.setWorkId(workId);
taskLogDO.setWorkType(cmd.getWorkType());
// 持续步骤(如气体检测):申请后就开始,且状态始终为进行中
// 默认状态为未开始
taskLogDO.setStatus(TaskLogStatus.NOT_STARTED.getCode());
// 持续步骤初始化填写次数
if (flow.getOngoingFlag() != null && flow.getOngoingFlag() == 1) {
taskLogDO.setStatus(TaskLogStatus.IN_PROGRESS.getCode());
taskLogDO.setCurrentFillTimes(0);
log.info("持续步骤已初始化: stepName={}", flow.getStepName());
} else {
// 默认状态为未开始
taskLogDO.setStatus(TaskLogStatus.NOT_STARTED.getCode());
}
// 第一步自动设置为当前申请人
@ -151,7 +150,6 @@ public class TaskLogAddExe {
signInfo.getActUser(),
signInfo.getActUserName()
);
taskLogDO.setWorkType(cmd.getWorkType());
log.info("已设置预设签字人: stepName={}, userName={}", flow.getStepName(), signInfo.getActUserName());
}
}

View File

@ -111,8 +111,15 @@ public class TaskLogUpdateExe {
throw new BizException("未找到对应的步骤记录");
}
// 1. 完成当前步骤
completeCurrentStep(currentLog, cmd, actionLogs);
// 检查是否为持续步骤的特殊提交
// 持续步骤提交时不应改变状态为 APPROVED而应保持 IN_PROGRESS
boolean isOngoingStepSubmit = currentLog.getOngoingFlag() != null && currentLog.getOngoingFlag() == 1
&& StringUtils.isNotBlank(cmd.getSpecialStepCode());
// 1. 完成当前步骤(持续步骤的特殊提交跳过此步骤)
if (!isOngoingStepSubmit) {
completeCurrentStep(currentLog, cmd, actionLogs);
}
// 2. 判断是否通过,通过才流转
if (TaskLogStatus.APPROVED.equalsCode(cmd.getStatus())) {
@ -314,6 +321,11 @@ public class TaskLogUpdateExe {
currentTimes = 0;
}
currentLog.setCurrentFillTimes(currentTimes + 1);
// 持续步骤状态保持 IN_PROGRESS不随审批流转
currentLog.setStatus(TaskLogStatus.IN_PROGRESS.getCode());
// 添加到待更新列表
actionLogs.add(TaskLogConvertUtil.toDO(currentLog));
log.info("气体检测记录已保存,当前填写次数: {}", currentTimes + 1);

View File

@ -1,11 +1,15 @@
package com.zcloud.eightwork.command.query;
import com.zcloud.eightwork.command.convertor.EightworkTaskCoConvertor;
import com.zcloud.eightwork.domain.model.EightworkTaskLevelE;
import com.zcloud.eightwork.dto.EightworkTaskPageQry;
import com.zcloud.eightwork.dto.EightworkTaskQry;
import com.zcloud.eightwork.dto.clientobject.EightworkTaskCO;
import com.zcloud.eightwork.dto.clientobject.EightworkTaskLevelCO;
import com.zcloud.eightwork.persistence.dataobject.EightworkTaskDO;
import com.zcloud.eightwork.persistence.repository.EightworkTaskRepository;
import com.zcloud.gbscommon.utils.PageQueryHelper;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.PageResponse;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Component;
@ -38,5 +42,26 @@ public class EightworkTaskQueryExe {
List<EightworkTaskCO> examCenterCOS = eightworkTaskCoConvertor.converDOsToCOs(pageResponse.getData());
return PageResponse.of(examCenterCOS, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
}
/**
*
*
* @param qry
* @return
*/
public MultiResponse<EightworkTaskLevelCO> listByWorkTypeOrderByLevel(EightworkTaskQry qry) {
List<EightworkTaskDO> taskDOList = eightworkTaskRepository.listByWorkTypeOrderByLevel(qry.getWorkType());
// 手动转换为 EightworkTaskLevelCO
List<EightworkTaskLevelCO> taskCOList = new java.util.ArrayList<>();
for (EightworkTaskDO taskDO : taskDOList) {
EightworkTaskLevelCO co = new EightworkTaskLevelCO();
co.setTaskName(taskDO.getTaskName());
co.setWorkLevel(taskDO.getWorkLevel());
taskCOList.add(co);
}
return MultiResponse.of(taskCOList);
}
}

View File

@ -8,8 +8,11 @@ import com.zcloud.eightwork.command.query.EightworkTaskQueryExe;
import com.zcloud.eightwork.dto.EightworkTaskAddCmd;
import com.zcloud.eightwork.dto.EightworkTaskPageQry;
import com.zcloud.eightwork.dto.EightworkTaskUpdateCmd;
import com.zcloud.eightwork.dto.EightworkTaskQry;
import com.zcloud.eightwork.dto.clientobject.EightworkTaskCO;
import com.zcloud.eightwork.dto.clientobject.EightworkTaskLevelCO;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.SingleResponse;
import lombok.AllArgsConstructor;
@ -56,5 +59,10 @@ public class EightworkTaskServiceImpl implements EightworkTaskServiceI {
public void removeBatch(Long[] ids) {
eightworkTaskRemoveExe.execute(ids);
}
@Override
public MultiResponse<EightworkTaskLevelCO> listByWorkTypeOrderByLevel(EightworkTaskQry qry) {
return eightworkTaskQueryExe.listByWorkTypeOrderByLevel(qry);
}
}

View File

@ -3,10 +3,15 @@ package com.zcloud.eightwork.api;
import com.zcloud.eightwork.dto.EightworkTaskAddCmd;
import com.zcloud.eightwork.dto.EightworkTaskPageQry;
import com.zcloud.eightwork.dto.EightworkTaskUpdateCmd;
import com.zcloud.eightwork.dto.EightworkTaskQry;
import com.zcloud.eightwork.dto.clientobject.EightworkTaskCO;
import com.zcloud.eightwork.dto.clientobject.EightworkTaskLevelCO;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.SingleResponse;
import com.alibaba.cola.dto.MultiResponse;
import java.util.List;
/**
* web-client
@ -24,5 +29,13 @@ public interface EightworkTaskServiceI {
void remove(Long id);
void removeBatch(Long[] ids);
/**
*
*
* @param qry
* @return
*/
MultiResponse<EightworkTaskLevelCO> listByWorkTypeOrderByLevel(EightworkTaskQry qry);
}

View File

@ -3,6 +3,8 @@ package com.zcloud.eightwork.dto;
import com.alibaba.cola.dto.PageQuery;
import lombok.Data;
import java.util.List;
/**
* web-client
@ -33,5 +35,14 @@ public class EightworkInfoPageQry extends PageQuery {
private Long eqProjectId;
private Long eqWorkDepartmentId;
private Long eqWorkUserId;
private List<Long> inDepartmentId;
private String leCreateTime;
private String geCreateTime;
private String likeCreateName;
}

View File

@ -23,6 +23,7 @@ public class EightworkSupplementaryInfoPageQry extends PageQuery {
* - `le`:
* - `ne`: SQL!=
*/
private String likeSupplementaryInfoId;
private String eqWorkId;
private String eqType;
}

View File

@ -32,7 +32,6 @@ public class TaskLogAddCmd extends Command {
private Long corpinfoId;
@ApiModelProperty(value = "是否相关方1是", name = "xgfFlag", required = true)
@NotNull(message = "是否相关方1是不能为空")
private Integer xgfFlag;
@ApiModelProperty(value = "是否内部作业1是2否", name = "internalOperationFlag")

View File

@ -39,7 +39,6 @@ public class TaskLogNextCmd extends Command {
private String specialStepCode;
//签字图片路径
@ApiModelProperty(value = "签字图片路径")
@NotEmpty(message = "签字图片路径不能为空")
private String signPath;
@ApiModelProperty(value = "签字步骤", name = "signLogs")
private List<TaskSignStepInfoCmd> signLogs;

View File

@ -5,6 +5,7 @@ import com.alibaba.cola.dto.PageResponse;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jjb.saas.framework.repository.repo.BaseRepository;
import java.util.List;
import java.util.Map;
/**
@ -15,5 +16,13 @@ import java.util.Map;
*/
public interface EightworkTaskRepository extends BaseRepository<EightworkTaskDO> {
PageResponse<EightworkTaskDO> listPage(Map<String, Object> params);
/**
*
*
* @param workType
* @return
*/
List<EightworkTaskDO> listByWorkTypeOrderByLevel(String workType);
}

View File

@ -1,18 +1,19 @@
package com.zcloud.eightwork.persistence.repository.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jjb.saas.framework.repository.common.PageHelper;
import com.jjb.saas.framework.repository.repo.impl.BaseRepositoryImpl;
import com.zcloud.eightwork.persistence.dataobject.EightworkTaskDO;
import com.zcloud.eightwork.persistence.mapper.EightworkTaskMapper;
import com.zcloud.eightwork.persistence.repository.EightworkTaskRepository;
import com.alibaba.cola.dto.PageResponse;
import com.zcloud.gbscommon.utils.PageQueryHelper;
import com.zcloud.gbscommon.utils.Query;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jjb.saas.framework.repository.repo.impl.BaseRepositoryImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
@ -35,5 +36,14 @@ public class EightworkTaskRepositoryImpl extends BaseRepositoryImpl<EightworkTas
IPage<EightworkTaskDO> result = eightworkTaskMapper.selectPage(iPage, queryWrapper);
return PageHelper.pageToResponse(result, result.getRecords());
}
@Override
public List<EightworkTaskDO> listByWorkTypeOrderByLevel(String workType) {
QueryWrapper<EightworkTaskDO> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("work_type", workType);
queryWrapper.select("task_name", "work_level");
queryWrapper.orderByAsc("work_level");
return eightworkTaskMapper.selectList(queryWrapper);
}
}

View File

@ -43,6 +43,7 @@ public class MeasuresLogsRepositoryImpl extends BaseRepositoryImpl<MeasuresLogsM
queryWrapper.eq(MeasuresLogsDO::getWorkId, workId);
queryWrapper.orderByAsc(MeasuresLogsDO::getType);
queryWrapper.orderByAsc(MeasuresLogsDO::getOrderBy);
queryWrapper.orderByAsc(MeasuresLogsDO::getCreateTime);
return list(queryWrapper);
}
}

View File

@ -43,6 +43,21 @@
where log.work_id = t.work_id
and log.act_user = #{params.eqWorkUserId})
</if>
<if test="params.inDepartmentId != null and params.inDepartmentId.size() > 0">
and t.department_id in
<foreach collection="params.inDepartmentId" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="params.geCreateTime != null and params.geCreateTime != ''">
and t.create_time &gt;= #{params.geCreateTime}
</if>
<if test="params.leCreateTime != null and params.leCreateTime != ''">
and t.create_time &lt;= #{params.leCreateTime}
</if>
<if test="params.likeCreateName != null and params.likeCreateName != ''">
and t.create_name like concat('%', #{params.likeCreateName}, '%')
</if>
order by t.create_time desc
</select>

View File

@ -7,7 +7,7 @@
<select id="getTodoCount" resultType="com.zcloud.eightwork.domain.model.TodoCountE">
select work_type,
count(1) as todoCount
from eightwork_task_log
from task_log
where status = 0
and (act_user = #{userId}
or (act_user_department = #{orgId} and act_user is null))
@ -18,7 +18,7 @@
select work_type,
step_id,
count(1) as todoCount
from eightwork_task_log
from task_log
where status = 0
and work_type = #{workType}
and (act_user = #{userId}
@ -28,7 +28,7 @@
<select id="getByWorkIdAndStepId" resultType="com.zcloud.eightwork.persistence.dataobject.TaskLogDO">
select *
from eightwork_task_log
from task_log
where work_id = #{workId}
and step_id = #{stepId}
limit 1