feat(api): 调整测量日志接口并增强作业流程功能

- 修改 MeasuresLogsController 中的分页接口路径从 /list 为 /page
- 添加新的 /list 接口用于查询所有测量日志数据
- 在 TaskLogController 的保存接口中添加部门名称字段
- 为 MeasurementsLogsQueryExe 添加 list 查询方法支持
- 修复 TaskLogQueryExe 中的阻塞步骤逻辑,排除已跳过的步骤
- 在 EightworkInfoSaveDraftExe 中优化暂存处理,添加其他安全措施处理
- 更新 TaskLogAddExe 中的日志和查询逻辑,使用 workId 替代 id
- 重构 TaskLogUpdateExe 中的特殊步骤和阻塞检查逻辑
- 添加附件步骤处理和应急指导书附件功能
- 优化打回流程,创建新的申请步骤记录而不是重置状态
- 增强安全措施处理,支持不同类型的措施更新方式
- 添加阻塞步骤信息的数据传输对象 BlockingStepInfoCO
master
fangjiakai 2026-03-27 13:43:53 +08:00
parent b1df85b19f
commit 2788eccbb5
44 changed files with 566 additions and 125 deletions

View File

@ -39,7 +39,7 @@ public class MeasuresLogsController {
}
@ApiOperation("分页")
@PostMapping("/list")
@PostMapping("/page")
public PageResponse<MeasuresLogsCO> page(@RequestBody MeasuresLogsPageQry qry) {
return measuresLogsService.listPage(qry);
}
@ -50,6 +50,12 @@ public class MeasuresLogsController {
return MultiResponse.of(measuresLogsService.listAll(workId));
}
@ApiOperation("所有数据")
@PostMapping("/list")
public MultiResponse<MeasuresLogsCO> list(@RequestBody MeasuresLogsPageQry qry) {
return MultiResponse.of(measuresLogsService.list(qry));
}
@ApiOperation("详情")
@GetMapping("/{id}")
public SingleResponse<MeasuresLogsCO> getInfoById(@PathVariable("id") Long id) {

View File

@ -45,6 +45,7 @@ public class TaskLogController {
@PostMapping("/save")
public SingleResponse<TaskLogCO> add(@Validated @RequestBody TaskLogAddCmd cmd) {
cmd.setDepartmentId(AuthContext.getOrgId());
cmd.setDepartmentName(AuthContext.getCurrentUser().getOrgName());
return taskLogService.add(cmd);
}

View File

@ -1,33 +1,29 @@
package com.zcloud.eightwork.command;
import cn.hutool.core.date.DatePattern;
import com.alibaba.cola.exception.BizException;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.eightwork.domain.gateway.TaskFlowGateway;
import com.zcloud.eightwork.domain.model.TaskFlowE;
import com.zcloud.eightwork.domain.model.enums.TaskLogStatus;
import com.zcloud.eightwork.domain.model.enums.WorkCodeEnum;
import com.zcloud.eightwork.dto.EightworkInfoSaveDraftCmd;
import com.zcloud.eightwork.dto.TaskSignStepInfoCmd;
import com.zcloud.eightwork.persistence.dataobject.EightworkInfoDO;
import com.zcloud.eightwork.persistence.dataobject.MeasuresLogsDO;
import com.zcloud.eightwork.persistence.dataobject.TaskLogDO;
import com.zcloud.eightwork.persistence.repository.EightworkInfoRepository;
import com.zcloud.eightwork.persistence.repository.MeasuresLogsRepository;
import com.zcloud.eightwork.persistence.repository.TaskLogRepository;
import com.zcloud.gbscommon.utils.Tools;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
*
@ -40,24 +36,35 @@ import java.util.concurrent.TimeUnit;
@Component
@AllArgsConstructor
public class EightworkInfoSaveDraftExe {
/** 第一步申请步骤的步骤ID */
/**
* ID
*/
private static final Long FIRST_STEP_ID = 1L;
/** 暂存状态 */
/**
*
*/
private static final Integer DRAFT_STATUS = 0;
/** 进行中状态 */
/**
*
*/
private static final Integer IN_PROGRESS_STATUS = 1;
/**
*
*/
private static final Integer OTHER_MEASURE_TYPE = 2;
private final TaskFlowGateway taskFlowGateway;
private final EightworkInfoRepository eightworkInfoRepository;
private final TaskLogRepository taskLogRepository;
private final MeasuresLogsRepository measuresLogsRepository;
@Transactional(rollbackFor = Exception.class)
public void execute(EightworkInfoSaveDraftCmd cmd) {
log.info("开始暂存作业: id={}, workType={}, workLevel={}",
cmd.getId(), cmd.getWorkType(), cmd.getWorkLevel());
cmd.getWorkId(), cmd.getWorkType(), cmd.getWorkLevel());
try {
if (cmd.getId() != null) {
if (StringUtils.isNotBlank(cmd.getWorkId())) {
// 更新现有暂存
updateDraft(cmd);
} else {
@ -76,10 +83,10 @@ public class EightworkInfoSaveDraftExe {
*
*/
private void updateDraft(EightworkInfoSaveDraftCmd cmd) {
log.info("更新现有暂存: id={}", cmd.getId());
log.info("更新现有暂存: id={}", cmd.getWorkId());
// 1. 查询现有记录
EightworkInfoDO existingInfo = eightworkInfoRepository.getById(cmd.getId());
EightworkInfoDO existingInfo = eightworkInfoRepository.getOne(new LambdaQueryWrapper<EightworkInfoDO>().eq(EightworkInfoDO::getWorkId, cmd.getWorkId()));
if (existingInfo == null) {
throw new BizException("暂存记录不存在");
}
@ -104,6 +111,9 @@ public class EightworkInfoSaveDraftExe {
// 6. 更新主表 info 中的预设签字人信息
updateInfoWithSigners(existingInfo.getWorkId(), cmd.getSignLogs());
// 7. 处理其他安全措施
handleOtherMeasures(existingInfo.getWorkId(), cmd.getWorkType(), cmd.getOthers());
log.info("暂存更新成功: workId={}", existingInfo.getWorkId());
}
@ -139,6 +149,9 @@ public class EightworkInfoSaveDraftExe {
// 3. 更新主表 info 中的预设签字人信息
updateInfoWithSigners(eightworkInfo.getWorkId(), cmd.getSignLogs());
// 4. 处理其他安全措施
handleOtherMeasures(eightworkInfo.getWorkId(), cmd.getWorkType(), cmd.getOthers());
log.info("暂存创建成功: workId={}", eightworkInfo.getWorkId());
}
@ -241,4 +254,42 @@ public class EightworkInfoSaveDraftExe {
log.info("预设签字人信息已保存: workId={}, count={}", workId, signLogs.size());
}
/**
*
* measures_logs
*
* @param workId ID
* @param workType
* @param others otherMeasures
*/
private void handleOtherMeasures(String workId, String workType, JSONObject others) {
if (others == null) {
return;
}
// 从 others 中获取 otherMeasures
String otherMeasures = others.getString("otherMeasures");
if (StringUtils.isBlank(otherMeasures)) {
log.info("暂存时没有填写其他安全措施: workId={}", workId);
return;
}
// 删除旧的其他安全措施记录(如果有)
measuresLogsRepository.remove(
new LambdaQueryWrapper<MeasuresLogsDO>()
.eq(MeasuresLogsDO::getWorkId, workId)
.eq(MeasuresLogsDO::getType, OTHER_MEASURE_TYPE)
);
// 保存新的其他安全措施
MeasuresLogsDO measuresLogsDO = new MeasuresLogsDO(
otherMeasures,
workId,
workType
);
measuresLogsRepository.save(measuresLogsDO);
log.info("暂存时已保存其他安全措施: workId={}, content={}", workId, otherMeasures);
}
}

View File

@ -1,5 +1,6 @@
package com.zcloud.eightwork.command;
import cn.hutool.core.date.DatePattern;
import com.alibaba.cola.exception.BizException;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -19,6 +20,7 @@ import com.zcloud.gbscommon.utils.DateUtil;
import com.zcloud.gbscommon.utils.Tools;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
@ -59,11 +61,11 @@ public class TaskLogAddExe {
@Transactional(rollbackFor = Exception.class)
public List<TaskLogDO> execute(TaskLogAddCmd cmd) {
log.info("开始创建作业流程: workType={}, workLevel={}, id={}",
cmd.getWorkType(), cmd.getWorkLevel(), cmd.getId());
log.info("开始创建作业流程: workType={}, workLevel={}, workId={}",
cmd.getWorkType(), cmd.getWorkLevel(), cmd.getWorkId());
try {
if (cmd.getId() != null) {
if (StringUtils.isNotBlank(cmd.getWorkId())) {
// 从暂存转正式提交
return submitFromDraft(cmd);
} else {
@ -80,10 +82,10 @@ public class TaskLogAddExe {
*
*/
private List<TaskLogDO> submitFromDraft(TaskLogAddCmd cmd) {
log.info("从暂存转正式提交: id={}", cmd.getId());
log.info("从暂存转正式提交: id={}", cmd.getWorkId());
// 1. 查询暂存记录
EightworkInfoDO existingInfo = eightworkInfoRepository.getById(cmd.getId());
EightworkInfoDO existingInfo = eightworkInfoRepository.getOne(new LambdaQueryWrapper<EightworkInfoDO>().eq(EightworkInfoDO::getWorkId, cmd.getWorkId()));
if (existingInfo == null) {
throw new BizException("暂存记录不存在");
}
@ -115,6 +117,9 @@ public class TaskLogAddExe {
existingInfo.setStatus(TaskLogStatus.APPROVED.getCode()); // 主表进行中=1
existingInfo.setInfo(processedInfo); // 设置处理后的 info包含 rejectHistory
// 处理签字人信息
handleInfoStep(existingInfo,cmd.getSignLogs());
eightworkInfoRepository.updateById(existingInfo);
// 6. 获取流程配置
@ -281,19 +286,48 @@ public class TaskLogAddExe {
cmd.getWorkLevel(),
cmd.getCorpinfoId(),
cmd.getXgfFlag(),
cmd.getGasFlag(),
cmd.getInternalOperationFlag(),
cmd.getProjectId(),
cmd.getXgfId(),
checkNo,
TaskLogStatus.APPROVED.getCode(), // 主表进行中=1
cmd.getInfo(),
cmd.getDepartmentId()
cmd.getDepartmentId(),
cmd.getDepartmentName()
);
handleInfoStep(eightworkInfo,cmd.getSignLogs());
eightworkInfoRepository.save(eightworkInfo);
return eightworkInfo.getWorkId();
}
private void handleInfoStep(EightworkInfoDO info,List<TaskSignStepInfoCmd> signLogs){
JSONObject infoJson;
if (StringUtils.isNotBlank(info.getInfo())) {
try {
infoJson = JSONObject.parseObject(info.getInfo());
} catch (Exception e) {
log.warn("解析 info 失败,使用空对象: workId={}", info.getWorkId(), e);
infoJson = new JSONObject();
}
} else {
infoJson = new JSONObject();
}
for (TaskSignStepInfoCmd logDO : signLogs) {
JSONObject stepInfo = new JSONObject();
stepInfo.put("stepName", logDO.getStepName());
stepInfo.put("actUserDepartment", logDO.getActUserDepartment());
stepInfo.put("actUserDepartmentName", logDO.getActUserDepartmentName());
stepInfo.put("actUser", logDO.getActUser());
stepInfo.put("actUserName", logDO.getActUserName());
infoJson.put("step_" + logDO.getStepId(), stepInfo);
}
info.setInfo(infoJson.toJSONString());
}
/**
*
* rejectInfo rejectHistory info

View File

@ -11,9 +11,11 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zcloud.eightwork.command.convertor.TaskLogConvertUtil;
import com.zcloud.eightwork.domain.gateway.EightworkSupplementaryInfoGateway;
import com.zcloud.eightwork.domain.gateway.TaskFlowGateway;
import com.zcloud.eightwork.domain.gateway.TaskLogGateway;
import com.zcloud.eightwork.domain.model.EightworkSupplementaryInfoE;
import com.zcloud.eightwork.domain.model.MeasuresLogsE;
import com.zcloud.eightwork.domain.model.TaskFlowE;
import com.zcloud.eightwork.domain.model.TaskLogE;
import com.zcloud.eightwork.domain.model.enums.BranchFlag;
import com.zcloud.eightwork.domain.model.enums.StepType;
@ -27,6 +29,7 @@ import com.zcloud.eightwork.persistence.repository.*;
import com.zcloud.gbscommon.todolistmq.TodoListEventPusherUtil;
import com.zcloud.gbscommon.todolistmq.event.TodoListAddEvent;
import com.zcloud.gbscommon.todolistmq.event.TodoListCompleteEvent;
import com.zcloud.gbscommon.utils.Tools;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
@ -79,6 +82,10 @@ public class TaskLogUpdateExe {
* APP
*/
private static final Integer APP_FLAG = 1;
/**
*
*/
private static final Integer FILE_STEP_FLAG = 1;
/**
* ID
*/
@ -93,9 +100,11 @@ public class TaskLogUpdateExe {
private static final Integer REJECTED_STATUS = 2;
private final TaskLogGateway taskLogGateway;
private final TaskFlowGateway taskFlowGateway;
private final TaskLogRepository taskLogRepository;
private final TaskLogArchiveRepository taskLogArchiveRepository;
private final MeasuresLogsRepository measuresLogsRepository;
private final MeasuresLogsArchiveRepository measuresLogsArchiveRepository;
private final EightworkInfoRepository eightworkInfoRepository;
private final TodoListEventPusherUtil todoListEventPusherUtil;
private final EightworkSupplementaryInfoGateway eightworkSupplementaryInfoGateway;
@ -171,13 +180,13 @@ public class TaskLogUpdateExe {
// 3. 先设置后续签字人(在激活步骤之前设置,避免状态覆盖问题)
handleSignStepsIfNeeded(currentLog, cmd, actionLogs, logs);
// 4. 判断是否可以流转到下一步
if (canProceedToNext(currentLog, logs, cmd)) {
// 5. 处理特殊步骤逻辑
// 4. 处理特殊步骤逻辑
boolean shouldProceed = handleSpecialStepIfNeeded(currentLog, cmd, actionLogs);
// 6. 处理其他安全措施
// 5. 处理其他安全措施
handleOtherMeasuresIfNeeded(currentLog, cmd);
// 6. 判断是否可以流转到下一步
if (canProceedToNext(currentLog, logs, cmd)) {
// 7. 在流转到下一步之前,检查是否被持续步骤阻塞(双重验证)
checkBlockingStepBeforeProceed(currentLog, logs);
@ -234,6 +243,12 @@ public class TaskLogUpdateExe {
log.info("定位步骤已保存经纬度: latitude={}, longitude={}", cmd.getLatitude(), cmd.getLongitude());
}
// 附件步骤,保存附件
if (FILE_STEP_FLAG.equals(currentLog.getFileStepFlag())) {
currentLog.setFilePath(cmd.getFilePath());
log.info("附件步骤已保存附件: filePath={}", cmd.getFilePath());
}
// 发送待办完成事件
sendTodoCompleteEvent(currentLog.getId());
@ -348,12 +363,22 @@ public class TaskLogUpdateExe {
}
}
if(ObjectUtil.isNotEmpty(cmd.getOthers().get("measuresType")) && cmd.getOthers().get("measuresType").equals("2")){
measuresLogsRepository.updateBatchById(measuresList.stream().map(item -> {
MeasuresLogsDO d = new MeasuresLogsDO();
BeanUtils.copyProperties(item, d);
return d;
}).collect(Collectors.toList()));
}else {
measuresLogsRepository.saveBatch(measuresList.stream().map(item -> {
MeasuresLogsDO d = new MeasuresLogsDO();
BeanUtils.copyProperties(item, d, "id");
d.setType(MAIN_MEASURE_TYPE);
return d;
}).collect(Collectors.toList()));
}
return true;
}
@ -466,36 +491,6 @@ public class TaskLogUpdateExe {
return;
}
// 判断下一步是否为合并节点(需要等待所有前置步骤都完成)
boolean isMerge = isMergeNode(nextStep);
log.info("检查是否为合并节点: stepId={}, stepName={}, branchFlag={}, isMerge={}",
nextStep.getStepId(), nextStep.getStepName(), nextStep.getBranchFlag(), isMerge);
if (isMerge) {
if (!areAllBranchesCompleted(nextStep, allLogs)) {
List<TaskLogE> pendingSteps = getPendingBranches(nextStep, allLogs);
log.info("合并节点等待其他前置步骤完成: mergeNode={}, waitingSteps={}",
nextStep.getStepName(),
pendingSteps.stream()
.map(TaskLogE::getStepName)
.collect(java.util.stream.Collectors.joining(", ")));
// 不激活合并节点,等待其他前置步骤完成
return;
}
log.info("所有前置步骤已完成,激活合并节点: {}", nextStep.getStepName());
}
// 判断下一步是否被持续步骤阻塞(如气体检测必须填写指定次数)
BlockingInfo blockingInfo = getBlockingInfo(nextStep, allLogs);
if (blockingInfo != null && !blockingInfo.isCompleted) {
log.info("步骤被持续步骤阻塞: step={}, blockingStep={}, currentTimes={}, requiredTimes={}",
nextStep.getStepName(),
blockingInfo.blockingStep.getStepName(),
blockingInfo.currentTimes,
blockingInfo.requiredTimes);
// 不激活步骤,等待持续步骤填写足够次数
return;
}
// 激活下一步
activateNextSteps(nextSteps, actionLogs, currentLog, allLogs);
}
@ -555,6 +550,7 @@ public class TaskLogUpdateExe {
for (TaskLogE log : allLogs) {
// 找出持续步骤且其阻塞的步骤ID等于当前步骤ID
if (Integer.valueOf(1).equals(log.getOngoingFlag())
&& !TaskLogStatus.SKIPPED.equalsCode(log.getStatus())
&& step.getStepId().equals(log.getBlockingStepId())) {
return log;
}
@ -580,7 +576,7 @@ public class TaskLogUpdateExe {
}
/**
*
*
*/
private BlockingInfo getBlockingInfo(TaskLogE step, List<TaskLogE> allLogs) {
TaskLogE blockingStep = findBlockingStep(step, allLogs);
@ -621,17 +617,20 @@ public class TaskLogUpdateExe {
*/
private void activateNextSteps(List<TaskLogE> nextSteps, List<TaskLogDO> actionLogs, TaskLogE currentLog, List<TaskLogE> allLogs) {
Long workId = getWorkId(currentLog.getWorkId());
for (TaskLogE next : nextSteps) {
// 使用统一的 getBlockingInfo 方法
BlockingInfo info = getBlockingInfo(next, allLogs);
BlockingInfo info = getBlockingInfo(currentLog, allLogs);
if (info != null && !info.isCompleted) {
// 阻塞步骤未完成,不激活该步骤
log.info("步骤被持续步骤阻塞,跳过激活: step={}, blockingStep={}, currentTimes={}, requiredTimes={}",
next.getStepName(), info.blockingStep.getStepName(), info.currentTimes, info.requiredTimes);
continue;
currentLog.getStepName(), info.blockingStep.getStepName(), info.currentTimes, info.requiredTimes);
return;
}
// 如果有阻塞步骤且已完成,标记为通过
if (info != null && info.isCompleted) {
completeBlockingStep(info.blockingStep, actionLogs);
}
for (TaskLogE next : nextSteps) {
// 激活步骤
next.setStatus(TaskLogStatus.IN_PROGRESS.getCode());
@ -642,10 +641,7 @@ public class TaskLogUpdateExe {
log.info("已激活下一步: {}", next.getStepName());
// 如果有阻塞步骤且已完成,标记为通过
if (info != null && info.isCompleted) {
completeBlockingStep(info.blockingStep, actionLogs);
}
}
// 如果有步骤被激活,更新作业当前步骤
@ -750,12 +746,16 @@ public class TaskLogUpdateExe {
// 4. 删除辅助数据delay、gas、measures
deleteSupplementaryInfo(cmd.getWorkId());
// 5. 更新主表状态为暂存,添加打回信息
// 5. 新建一条新的申请记录status=0暂存状态
createNewApplyTaskLog(cmd.getWorkId());
// 6. 更新主表状态为暂存,添加打回信息
updateMainInfoForReject(cmd.getWorkId(), currentLog, cmd.getOthers());
// 6. 发送待办完成事件
// 7. 发送待办完成事件
sendTodoCompleteEvent(currentLog.getId());
log.info("工作流已打回到申请步骤: workId={}", cmd.getWorkId());
}
@ -766,10 +766,6 @@ public class TaskLogUpdateExe {
List<TaskLogArchiveDO> archiveList = new ArrayList<>();
for (TaskLogE log : allLogs) {
// 跳过申请步骤stepId=1
if (FIRST_STEP_ID.equals(log.getStepId())) {
continue;
}
// 只归档已处理的记录(状态不是未开始)
if (!TaskLogStatus.NOT_STARTED.equalsCode(log.getStatus())) {
TaskLogArchiveDO archiveDO = new TaskLogArchiveDO();
@ -791,6 +787,7 @@ public class TaskLogUpdateExe {
* eightwork_supplementary_info_archive
*/
private void archiveSupplementaryInfo(String workId) {
// 归档 eightwork_supplementary_info
List<EightworkSupplementaryInfoDO> infoList = eightworkSupplementaryInfoRepository.list(
new LambdaQueryWrapper<EightworkSupplementaryInfoDO>()
.eq(EightworkSupplementaryInfoDO::getWorkId, workId)
@ -805,17 +802,28 @@ public class TaskLogUpdateExe {
}
log.info("已归档 {} 条辅助数据记录", infoList.size());
}
// 归档 measures_logs
List<MeasuresLogsDO> measuresList = measuresLogsRepository.list(
new LambdaQueryWrapper<MeasuresLogsDO>()
.eq(MeasuresLogsDO::getWorkId, workId)
);
if (!measuresList.isEmpty()) {
for (MeasuresLogsDO measuresDO : measuresList) {
MeasuresLogsArchiveDO archiveDO = new MeasuresLogsArchiveDO();
BeanUtils.copyProperties(measuresDO, archiveDO, "id");
measuresLogsArchiveRepository.save(archiveDO);
}
log.info("已归档 {} 条安全措施记录", measuresList.size());
}
}
/**
* task_log
*/
private void deleteTaskLogsExceptFirst(String workId) {
taskLogRepository.remove(
new LambdaQueryWrapper<TaskLogDO>()
.eq(TaskLogDO::getWorkId, workId)
.ne(TaskLogDO::getStepId, FIRST_STEP_ID)
);
taskLogRepository.physicalDeleteByWorkId(workId);
log.info("已删除除申请步骤外的 task_log: workId={}", workId);
}
@ -824,20 +832,63 @@ public class TaskLogUpdateExe {
*/
private void deleteSupplementaryInfo(String workId) {
// 删除 eightwork_supplementary_info 中的记录
eightworkSupplementaryInfoRepository.remove(
new LambdaQueryWrapper<EightworkSupplementaryInfoDO>()
.eq(EightworkSupplementaryInfoDO::getWorkId, workId)
);
eightworkSupplementaryInfoRepository.physicalDeleteByWorkId(workId);
log.info("已删除辅助数据: workId={}", workId);
// 删除 measures_logs 中的记录(如果有的话)
measuresLogsRepository.remove(
new LambdaQueryWrapper<MeasuresLogsDO>()
.eq(MeasuresLogsDO::getWorkId, workId)
);
measuresLogsRepository.physicalDeleteByWorkId(workId);
log.info("已删除安全措施记录: workId={}", workId);
}
/**
* status=0
*
*/
private void createNewApplyTaskLog(String workId) {
// 获取主表信息
EightworkInfoDO infoDO = eightworkInfoRepository.getOne(
new LambdaQueryWrapper<EightworkInfoDO>()
.eq(EightworkInfoDO::getWorkId, workId)
);
if (infoDO == null) {
log.warn("未找到作业信息,无法创建申请记录: workId={}", workId);
return;
}
// 获取申请步骤的流程配置
List<TaskFlowE> flows = taskFlowGateway.listAllByWorkType(infoDO.getWorkType(), infoDO.getWorkLevel());
TaskFlowE applyFlow = flows.stream()
.filter(f -> FIRST_STEP_ID.equals(f.getStepId()))
.findFirst()
.orElse(null);
if (applyFlow == null) {
log.warn("未找到申请步骤配置: workType={}, workLevel={}", infoDO.getWorkType(), infoDO.getWorkLevel());
return;
}
// 创建新的申请步骤记录
TaskLogDO taskLog = new TaskLogDO();
BeanUtils.copyProperties(applyFlow, taskLog, "id");
taskLog.setTaskLogId(Tools.get32UUID());
taskLog.setWorkId(workId);
taskLog.setWorkType(infoDO.getWorkType());
taskLog.setCorpinfoId(infoDO.getCorpinfoId());
taskLog.setActUserDepartment(infoDO.getDepartmentId());
taskLog.setActUserDepartmentName(infoDO.getDepartmentName());
taskLog.setActUser(infoDO.getCreateId());
taskLog.setActUserName(infoDO.getCreateName());
taskLog.setCheckNo(""); // 打回后重新提交会使用原票号
taskLog.setCurrentFillTimes(0);
// 设置状态为 0暂存状态
taskLog.setStatus(DRAFT_STATUS);
// 保存
taskLogRepository.save(taskLog);
log.info("已创建新的申请步骤记录: workId={}, taskLogId={}, status=0", workId, taskLog.getTaskLogId());
}
/**
*
*/
@ -1080,6 +1131,10 @@ public class TaskLogUpdateExe {
if (source.getLongitude() != null) {
target.setLongitude(source.getLongitude());
}
// 附件:允许覆盖(最新的附件信息)
if (source.getFilePath() != null) {
target.setFilePath(source.getFilePath());
}
}
/**
@ -1134,6 +1189,11 @@ public class TaskLogUpdateExe {
stepInfo.put("location", location);
}
// 附件步骤,添加附件信息
if (StringUtils.isNotBlank(logDO.getFilePath())) {
stepInfo.put("filePath", logDO.getFilePath());
}
// 其他自定义步骤,添加 otherParams
if (StringUtils.isNotBlank(logDO.getOtherParams())) {
try {
@ -1160,16 +1220,7 @@ public class TaskLogUpdateExe {
*
*/
private void checkBlockingStepBeforeProceed(TaskLogE currentLog, List<TaskLogE> allLogs) {
List<TaskLogE> nextSteps = findNextSteps(currentLog, allLogs);
if (CollectionUtil.isEmpty(nextSteps)) {
return;
}
TaskLogE nextStep = nextSteps.get(0);
// 使用统一的 getBlockingInfo 方法
BlockingInfo info = getBlockingInfo(nextStep, allLogs);
BlockingInfo info = getBlockingInfo(currentLog, allLogs);
if (info != null && !info.isCompleted) {
// 阻塞步骤未完成,抛出异常回滚整个事务
@ -1179,7 +1230,7 @@ public class TaskLogUpdateExe {
info.requiredTimes);
log.warn("步骤被阻塞,阻止流转: stepId={}, stepName={}, blockingStep={}, currentTimes={}, requiredTimes={}",
nextStep.getStepId(), nextStep.getStepName(),
currentLog.getStepId(), currentLog.getStepName(),
info.blockingStep.getStepName(), info.currentTimes, info.requiredTimes);
throw new BizException(errorMsg);

View File

@ -1,6 +1,7 @@
package com.zcloud.eightwork.command.query;
import com.alibaba.cola.dto.PageResponse;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zcloud.eightwork.command.convertor.MeasuresLogsCoConvertor;
import com.zcloud.eightwork.domain.gateway.TaskLogGateway;
import com.zcloud.eightwork.domain.model.TaskLogE;
@ -62,5 +63,12 @@ public class MeasuresLogsQueryExe {
});
return measuresLogsCOS;
}
public List<MeasuresLogsCO> list(MeasuresLogsPageQry qry) {
Map<String,Object> params = PageQueryHelper.toHashMap(qry);
QueryWrapper<MeasuresLogsDO> queryWrapper = new QueryWrapper<>();
queryWrapper = PageQueryHelper.createPageQueryWrapper(queryWrapper, params);
return measuresLogsCoConvertor.converDOsToCOs(measuresLogsRepository.list(queryWrapper));
}
}

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zcloud.eightwork.command.convertor.EightworkInfoCoConvertor;
import com.zcloud.eightwork.command.convertor.TaskLogCoConvertor;
import com.zcloud.eightwork.domain.model.TodoCountE;
import com.zcloud.eightwork.domain.model.enums.TaskLogStatus;
import com.zcloud.eightwork.dto.TaskLogPageQry;
import com.zcloud.eightwork.dto.clientobject.BlockingStepInfoCO;
import com.zcloud.eightwork.dto.clientobject.EightworkInfoCO;
@ -100,7 +101,7 @@ public class TaskLogQueryExe {
// 查找阻塞当前步骤的持续步骤
for (TaskLogDO step : allSteps) {
// 检查是否为持续步骤且阻塞当前步骤
if (ONGOING_FLAG.equals(step.getOngoingFlag())
if (ONGOING_FLAG.equals(step.getOngoingFlag()) && !TaskLogStatus.SKIPPED.equalsCode(step.getStatus())
&& taskLogCO.getStepId().equals(step.getBlockingStepId())) {
// 检查填写次数是否达标
Integer currentTimes = step.getCurrentFillTimes();

View File

@ -66,5 +66,10 @@ public class MeasuresLogsServiceImpl implements MeasuresLogsServiceI {
public List<MeasuresLogsCO> listAll(String workId){
return measuresLogsQueryExe.listAll(workId);
}
@Override
public List<MeasuresLogsCO> list(MeasuresLogsPageQry qry){
return measuresLogsQueryExe.list(qry);
}
}

View File

@ -29,5 +29,7 @@ public interface MeasuresLogsServiceI {
void removeBatch(Long[] ids);
List<MeasuresLogsCO> listAll(String workId);
List<MeasuresLogsCO> list(MeasuresLogsPageQry qry);
}

View File

@ -68,10 +68,13 @@ public class ConfinedSpaceAddCmd extends Command {
@NotNull(message = "最大作业人数不能为空")
private Integer maximumNumber;
@ApiModelProperty(value = "是否有应急指导书,0否1是", name = "isEmergencyBook", required = true)
@NotNull(message = "是否有应急指导书,0否1是不能为空")
@ApiModelProperty(value = "是否有应急指导书,1是2否", name = "isEmergencyBook", required = true)
@NotNull(message = "是否有应急指导书,1是2否不能为空")
private Integer isEmergencyBook;
@ApiModelProperty(value = "应急指导书附件", name = "emergencyBookFile")
private String emergencyBookFile;
@ApiModelProperty(value = "位置及范围", name = "position", required = true)
@NotEmpty(message = "位置及范围不能为空")
private String position;

View File

@ -63,9 +63,11 @@ public class ConfinedSpaceUpdateCmd extends Command {
@ApiModelProperty(value = "最大作业人数", name = "maximumNumber", required = true)
@NotNull(message = "最大作业人数不能为空")
private Integer maximumNumber;
@ApiModelProperty(value = "是否有应急指导书,0否1是", name = "isEmergencyBook", required = true)
@NotNull(message = "是否有应急指导书,0否1是不能为空")
@ApiModelProperty(value = "是否有应急指导书,1是2否", name = "isEmergencyBook", required = true)
@NotNull(message = "是否有应急指导书,1是2否不能为空")
private Integer isEmergencyBook;
@ApiModelProperty(value = "应急指导书附件", name = "emergencyBookFile")
private String emergencyBookFile;
@ApiModelProperty(value = "位置及范围", name = "position", required = true)
@NotEmpty(message = "位置及范围不能为空")
private String position;

View File

@ -28,6 +28,8 @@ public class EightworkInfoPageQry extends PageQuery {
private String eqWorkType;
private String eqCheckNo;
private Integer eqStatus;
private String eqWorkLevel;
private String likeWorkContent;
private Long eqDepartmentId;
private Long eqCreateId;
private Integer eqXgfFlag;
@ -42,6 +44,10 @@ public class EightworkInfoPageQry extends PageQuery {
private String geCreateTime;
private String leWorkStartTime;
private String geWorkStartTime;
private String likeCreateName;
/**

View File

@ -27,7 +27,7 @@ public class EightworkInfoSaveDraftCmd extends Command {
* ID
*/
@ApiModelProperty(value = "主表ID")
private Long id;
private String workId;
@ApiModelProperty(value = "企业", name = "corpinfoId", required = true)
private Long corpinfoId;
@ -61,4 +61,7 @@ public class EightworkInfoSaveDraftCmd extends Command {
@ApiModelProperty(value = "部门id", name = "departmentId")
private Long departmentId;
@ApiModelProperty(value = "其他参数", name = "others")
private JSONObject others;
}

View File

@ -23,6 +23,8 @@ public class MeasuresLogsPageQry extends PageQuery {
* - `le`:
* - `ne`: SQL!=
*/
private String likeWorkType;
private String eqWorkType;
private String eqWorkId;
private Long eqUpdateId;
}

View File

@ -23,7 +23,7 @@ import java.util.List;
@AllArgsConstructor
public class TaskLogAddCmd extends Command {
@ApiModelProperty(value = "主表ID有值表示从暂存转正式无值表示首次正式提交")
private Long id;
private String workId;
@ApiModelProperty(value = "任务类型", name = "workType",required = true)
@NotBlank
@ -56,6 +56,7 @@ public class TaskLogAddCmd extends Command {
@ApiModelProperty(value = "部门id", name = "departmentId")
private Long departmentId;
private String departmentName;
@ApiModelProperty(value = "其他参数", name = "others")
private JSONObject others;
}

View File

@ -50,5 +50,8 @@ public class TaskLogNextCmd extends Command {
//经度
@ApiModelProperty(value = "经度")
private String longitude;
//附件
@ApiModelProperty(value = "附件")
private String filePath;
}

View File

@ -21,6 +21,9 @@ public class TaskSignStepInfoCmd extends Command {
//步骤ID
@ApiModelProperty(value = "步骤ID")
private Long stepId;
//步骤名
@ApiModelProperty(value = "步骤名")
private String stepName;
//操作人
@ApiModelProperty(value = "操作人编码")
private String actorField;

View File

@ -0,0 +1,35 @@
package com.zcloud.eightwork.dto.clientobject;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* CO
*
* @Author fangjiakai
* @Date 2026-03-24
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("阻塞步骤信息")
public class BlockingStepInfoCO {
@ApiModelProperty(value = "阻塞步骤ID")
private Long stepId;
@ApiModelProperty(value = "阻塞步骤名称")
private String stepName;
@ApiModelProperty(value = "当前填写次数")
private Integer currentFillTimes;
@ApiModelProperty(value = "应填写次数")
private Integer minFillTimes;
@ApiModelProperty(value = "是否已达成条件")
private Boolean isCompleted;
}

View File

@ -55,9 +55,12 @@ public class ConfinedSpaceCO extends ClientObject {
//最大作业人数
@ApiModelProperty(value = "最大作业人数")
private Integer maximumNumber;
//是否有应急指导书,0否1是
@ApiModelProperty(value = "是否有应急指导书,0否1是")
//是否有应急指导书,1是2否
@ApiModelProperty(value = "是否有应急指导书,1是2否")
private Integer isEmergencyBook;
//应急指导书附件
@ApiModelProperty(value = "应急指导书附件")
private String emergencyBookFile;
//位置及范围
@ApiModelProperty(value = "位置及范围")
private String position;

View File

@ -136,6 +136,9 @@ public class TaskLogCO extends ClientObject {
//经度
@ApiModelProperty(value = "经度")
private String longitude;
//附件
@ApiModelProperty(value = "附件")
private String filePath;
//其他参数special_step_code==other 时使用)
@ApiModelProperty(value = "其他参数")
private String otherParams;

View File

@ -37,8 +37,10 @@ public class ConfinedSpaceE extends BaseE {
private String separateSafetyMeasures;
//最大作业人数
private Integer maximumNumber;
//是否有应急指导书,0否1是
//是否有应急指导书,1是2否
private Integer isEmergencyBook;
//应急指导书附件
private String emergencyBookFile;
//位置及范围
private String position;
//所属部门

View File

@ -93,6 +93,8 @@ public class TaskLogE extends BaseE {
private String latitude;
//经度
private String longitude;
//附件
private String filePath;
//其他参数special_step_code==other 时使用)
private String otherParams;
//手机端组件名称special_step_code==other 时使用)
@ -133,6 +135,7 @@ public class TaskLogE extends BaseE {
this.currentFillTimes = log.getCurrentFillTimes();
this.latitude = log.getLatitude();
this.longitude = log.getLongitude();
this.filePath = log.getFilePath();
this.otherParams = log.getOtherParams();
this.componentName = log.getComponentName();

View File

@ -57,9 +57,12 @@ public class ConfinedSpaceDO extends BaseDO {
//最大作业人数
@ApiModelProperty(value = "最大作业人数")
private Integer maximumNumber;
//是否有应急指导书,0否1是
@ApiModelProperty(value = "是否有应急指导书,0否1是")
//是否有应急指导书,1是2否
@ApiModelProperty(value = "是否有应急指导书,1是2否")
private Integer isEmergencyBook;
//应急指导书附件
@ApiModelProperty(value = "应急指导书附件")
private String emergencyBookFile;
//位置及范围
@ApiModelProperty(value = "位置及范围")
private String position;

View File

@ -62,12 +62,13 @@ public class EightworkInfoDO extends BaseDO {
@ApiModelProperty(value = "部门id", name = "departmentId")
private Long departmentId;
private String departmentName;
public EightworkInfoDO(String workId) {
this.workId = workId;
}
public EightworkInfoDO(String uuid, String workType, String workLevel, Long corpinfoId, Integer xgfFlag, Integer internalOperationFlag, String projectId, Long xgfId, String checkNo, Integer status, JSONObject info,Long departmentId) {
public EightworkInfoDO(String uuid, String workType, String workLevel, Long corpinfoId, Integer xgfFlag,Integer gasFlag, Integer internalOperationFlag, String projectId, Long xgfId, String checkNo, Integer status, JSONObject info,Long departmentId,String departmentName) {
this.workId = uuid;
this.workType = workType;
this.workLevel = workLevel;
@ -80,10 +81,12 @@ public class EightworkInfoDO extends BaseDO {
this.internalOperationFlag = internalOperationFlag;
this.projectId = projectId;
this.xgfId = xgfId;
this.gasFlag = gasFlag;
this.checkNo = checkNo;
this.status = status;
this.info = info.toJSONString();
this.departmentId = departmentId;
this.departmentName = departmentName;
}
}

View File

@ -0,0 +1,52 @@
package com.zcloud.eightwork.persistence.dataobject;
import com.baomidou.mybatisplus.annotation.TableName;
import com.jjb.saas.framework.repository.basedo.BaseDO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
/**
* web-infrastructure
*
*
* @Author fangjiakai
* @Date 2026-03-25
*/
@Data
@TableName("measures_logs_archive")
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class MeasuresLogsArchiveDO extends BaseDO {
//作业类型
@ApiModelProperty(value = "作业类型")
private String workType;
//防护措施
@ApiModelProperty(value = "防护措施")
private String content;
//问题 &&分割
@ApiModelProperty(value = "问题 &&分割")
private String questions;
//作业票id
@ApiModelProperty(value = "作业票id")
private String workId;
//所属步骤id
@ApiModelProperty(value = "所属步骤id")
private String taskLogId;
//答案 &&分割
@ApiModelProperty(value = "答案 &&分割")
private String answer;
//是否合格1是2否
@ApiModelProperty(value = "是否合格1是2否")
private Integer status;
//签字
@ApiModelProperty(value = "签字")
private String signPath;
//类型1主要2其他
@ApiModelProperty(value = "类型1主要2其他")
private Integer type;
//排序
@ApiModelProperty(value = "排序")
private Integer orderBy;
}

View File

@ -133,6 +133,9 @@ public class TaskLogArchiveDO extends BaseDO {
//经度
@ApiModelProperty(value = "经度")
private String longitude;
//附件
@ApiModelProperty(value = "附件")
private String filePath;
//其他参数special_step_code==other 时使用)
@ApiModelProperty(value = "其他参数")
private String otherParams;

View File

@ -134,6 +134,9 @@ public class TaskLogDO extends BaseDO {
//经度
@ApiModelProperty(value = "经度")
private String longitude;
//附件
@ApiModelProperty(value = "附件")
private String filePath;
//其他参数special_step_code==other 时使用)
@ApiModelProperty(value = "其他参数")
private String otherParams;

View File

@ -3,6 +3,7 @@ package com.zcloud.eightwork.persistence.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zcloud.eightwork.persistence.dataobject.EightworkSupplementaryInfoDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* web-infrastructure
@ -13,5 +14,12 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface EightworkSupplementaryInfoMapper extends BaseMapper<EightworkSupplementaryInfoDO> {
/**
* workId
*
* @param workId ID
* @return
*/
int physicalDeleteByWorkId(@Param("workId") String workId);
}

View File

@ -0,0 +1,16 @@
package com.zcloud.eightwork.persistence.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zcloud.eightwork.persistence.dataobject.MeasuresLogsArchiveDO;
import org.apache.ibatis.annotations.Mapper;
/**
* web-infrastructure
* Mapper
*
* @Author fangjiakai
* @Date 2026-03-25
*/
@Mapper
public interface MeasuresLogsArchiveMapper extends BaseMapper<MeasuresLogsArchiveDO> {
}

View File

@ -3,6 +3,7 @@ package com.zcloud.eightwork.persistence.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zcloud.eightwork.persistence.dataobject.MeasuresLogsDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* web-infrastructure
@ -12,5 +13,11 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface MeasuresLogsMapper extends BaseMapper<MeasuresLogsDO> {
}
/**
* workId
*
* @param workId ID
* @return
*/
int physicalDeleteByWorkId(@Param("workId") String workId);
}

View File

@ -22,5 +22,13 @@ public interface TaskLogMapper extends BaseMapper<TaskLogDO> {
List<TodoCountE> getTodoCountForWork(@Param("orgId") Long orgId,@Param("userId") Long userId,@Param("workType") String workType);
TaskLogDO getByWorkIdAndStepId(@Param("workId") String workId, @Param("stepId") Long stepId);
/**
* workId
*
* @param workId ID
* @return
*/
int physicalDeleteByWorkId(@Param("workId") String workId);
}

View File

@ -17,5 +17,13 @@ public interface EightworkSupplementaryInfoRepository extends BaseRepository<Eig
PageResponse<EightworkSupplementaryInfoDO> listPage(Map<String, Object> params);
List<EightworkSupplementaryInfoDO> listAll(String workId);
/**
* workId
*
* @param workId ID
* @return
*/
int physicalDeleteByWorkId(String workId);
}

View File

@ -0,0 +1,14 @@
package com.zcloud.eightwork.persistence.repository;
import com.jjb.saas.framework.repository.repo.BaseRepository;
import com.zcloud.eightwork.persistence.dataobject.MeasuresLogsArchiveDO;
/**
* web-infrastructure
* Repository
*
* @Author fangjiakai
* @Date 2026-03-25
*/
public interface MeasuresLogsArchiveRepository extends BaseRepository<MeasuresLogsArchiveDO> {
}

View File

@ -16,5 +16,13 @@ public interface MeasuresLogsRepository extends BaseRepository<MeasuresLogsDO> {
PageResponse<MeasuresLogsDO> listPage(Map<String,Object> params);
List<MeasuresLogsDO> listAll(String workId);
/**
* workId
*
* @param workId ID
* @return
*/
int physicalDeleteByWorkId(String workId);
}

View File

@ -26,5 +26,13 @@ public interface TaskLogRepository extends BaseRepository<TaskLogDO> {
List<TodoCountE> getTodoCountForWork(Long orgId, Long userId, String workType);
TaskLogDO getByWorkIdAndStepId(String workId, Long stepId);
/**
* workId
*
* @param workId ID
* @return
*/
int physicalDeleteByWorkId(String workId);
}

View File

@ -44,5 +44,11 @@ public class EightworkSupplementaryInfoRepositoryImpl extends BaseRepositoryImpl
queryWrapper.eq(EightworkSupplementaryInfoDO::getWorkId, workId);
return list(queryWrapper);
}
@Override
public int physicalDeleteByWorkId(String workId) {
// 使用 Mapper 中定义的物理删除 SQL
return eightworkSupplementaryInfoMapper.physicalDeleteByWorkId(workId);
}
}

View File

@ -0,0 +1,20 @@
package com.zcloud.eightwork.persistence.repository.impl;
import com.jjb.saas.framework.repository.repo.impl.BaseRepositoryImpl;
import com.zcloud.eightwork.persistence.dataobject.MeasuresLogsArchiveDO;
import com.zcloud.eightwork.persistence.mapper.MeasuresLogsArchiveMapper;
import com.zcloud.eightwork.persistence.repository.MeasuresLogsArchiveRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
/**
* web-infrastructure
* Repository
*
* @Author fangjiakai
* @Date 2026-03-25
*/
@Service
@RequiredArgsConstructor
public class MeasuresLogsArchiveRepositoryImpl extends BaseRepositoryImpl<MeasuresLogsArchiveMapper, MeasuresLogsArchiveDO> implements MeasuresLogsArchiveRepository {
}

View File

@ -46,5 +46,11 @@ public class MeasuresLogsRepositoryImpl extends BaseRepositoryImpl<MeasuresLogsM
queryWrapper.orderByAsc(MeasuresLogsDO::getCreateTime);
return list(queryWrapper);
}
@Override
public int physicalDeleteByWorkId(String workId) {
// 使用 Mapper 中定义的物理删除 SQL
return measuresLogsMapper.physicalDeleteByWorkId(workId);
}
}

View File

@ -63,5 +63,11 @@ public class TaskLogRepositoryImpl extends BaseRepositoryImpl<TaskLogMapper, Tas
public TaskLogDO getByWorkIdAndStepId(String workId, Long stepId) {
return taskLogMapper.getByWorkIdAndStepId(workId, stepId);
}
@Override
public int physicalDeleteByWorkId(String workId) {
// 使用 Mapper 中定义的物理删除 SQL
return taskLogMapper.physicalDeleteByWorkId(workId);
}
}

View File

@ -7,6 +7,7 @@
select t.*
from eightwork_info t
where t.delete_enum = 'FALSE'
and t.status != 0
<if test="params.eqWorkType != null and params.eqWorkType != ''">
and t.work_type = #{params.eqWorkType}
</if>
@ -16,6 +17,9 @@
<if test="params.eqStatus != null">
and t.status = #{params.eqStatus}
</if>
<if test="params.eqWorkLevel != null and params.eqWorkLevel != ''">
and t.work_level = #{params.eqWorkLevel}
</if>
<if test="params.eqDepartmentId != null">
and t.department_id = #{params.eqDepartmentId}
</if>
@ -31,6 +35,7 @@
<if test="params.eqProjectId != null and params.eqProjectId != ''">
and t.project_id = #{params.eqProjectId}
</if>
<if test="params.eqWorkDepartmentId != null">
and exists (select 1
from task_log log
@ -58,6 +63,15 @@
<if test="params.likeCreateName != null and params.likeCreateName != ''">
and t.create_name like concat('%', #{params.likeCreateName}, '%')
</if>
<if test="params.likeWorkContent != null and params.likeWorkContent != ''">
and t.info->>'$.workContent' like concat('%', #{params.likeCreateName}, '%')
</if>
<if test="params.geWorkStartTime != null and params.geWorkStartTime != ''">
and t.info->>'$.workStartTime' &gt;= #{params.geWorkStartTime}
</if>
<if test="params.leWorkStartTime != null and params.leWorkStartTime != ''">
and t.info->>'$.workStartTime' &lt;= #{params.leWorkStartTime}
</if>
<if test="params.eqCurrentStepId != null">
and exists (select 1
from task_log log

View File

@ -4,5 +4,9 @@
<mapper namespace="com.zcloud.eightwork.persistence.mapper.EightworkSupplementaryInfoMapper">
<delete id="physicalDeleteByWorkId">
DELETE FROM eightwork_supplementary_info WHERE work_id = #{workId}
</delete>
</mapper>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zcloud.eightwork.persistence.mapper.MeasuresLogsArchiveMapper">
</mapper>

View File

@ -4,5 +4,9 @@
<mapper namespace="com.zcloud.eightwork.persistence.mapper.MeasuresLogsMapper">
<delete id="physicalDeleteByWorkId">
DELETE FROM measures_logs WHERE work_id = #{workId}
</delete>
</mapper>

View File

@ -21,12 +21,13 @@
task_log.step_id,
count(1) as todoCount
from task_log
where task_log.status = 0
left join eightwork_info on task_log.work_id = eightwork_info.work_id
where task_log.status = 0
and task_log.work_type = #{workType}
and eightwork_info.status != 0
and (task_log.act_user = #{userId}
or (task_log.act_user_department = #{orgId} and task_log.act_user is null))
or (task_log.act_user_department = #{orgId}
and task_log.act_user is null))
group by task_log.step_id
</select>
@ -37,5 +38,9 @@
and step_id = #{stepId}
limit 1
</select>
<delete id="physicalDeleteByWorkId">
DELETE FROM task_log WHERE work_id = #{workId}
</delete>
</mapper>