Compare commits
2 Commits
bf965d00e2
...
2788eccbb5
| Author | SHA1 | Date |
|---|---|---|
|
|
2788eccbb5 | |
|
|
b1df85b19f |
|
|
@ -39,7 +39,7 @@ public class MeasuresLogsController {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("分页")
|
@ApiOperation("分页")
|
||||||
@PostMapping("/list")
|
@PostMapping("/page")
|
||||||
public PageResponse<MeasuresLogsCO> page(@RequestBody MeasuresLogsPageQry qry) {
|
public PageResponse<MeasuresLogsCO> page(@RequestBody MeasuresLogsPageQry qry) {
|
||||||
return measuresLogsService.listPage(qry);
|
return measuresLogsService.listPage(qry);
|
||||||
}
|
}
|
||||||
|
|
@ -50,6 +50,12 @@ public class MeasuresLogsController {
|
||||||
return MultiResponse.of(measuresLogsService.listAll(workId));
|
return MultiResponse.of(measuresLogsService.listAll(workId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ApiOperation("所有数据")
|
||||||
|
@PostMapping("/list")
|
||||||
|
public MultiResponse<MeasuresLogsCO> list(@RequestBody MeasuresLogsPageQry qry) {
|
||||||
|
return MultiResponse.of(measuresLogsService.list(qry));
|
||||||
|
}
|
||||||
|
|
||||||
@ApiOperation("详情")
|
@ApiOperation("详情")
|
||||||
@GetMapping("/{id}")
|
@GetMapping("/{id}")
|
||||||
public SingleResponse<MeasuresLogsCO> getInfoById(@PathVariable("id") Long id) {
|
public SingleResponse<MeasuresLogsCO> getInfoById(@PathVariable("id") Long id) {
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,7 @@ public class TaskLogController {
|
||||||
@PostMapping("/save")
|
@PostMapping("/save")
|
||||||
public SingleResponse<TaskLogCO> add(@Validated @RequestBody TaskLogAddCmd cmd) {
|
public SingleResponse<TaskLogCO> add(@Validated @RequestBody TaskLogAddCmd cmd) {
|
||||||
cmd.setDepartmentId(AuthContext.getOrgId());
|
cmd.setDepartmentId(AuthContext.getOrgId());
|
||||||
|
cmd.setDepartmentName(AuthContext.getCurrentUser().getOrgName());
|
||||||
return taskLogService.add(cmd);
|
return taskLogService.add(cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,33 +1,29 @@
|
||||||
package com.zcloud.eightwork.command;
|
package com.zcloud.eightwork.command;
|
||||||
|
|
||||||
import cn.hutool.core.date.DatePattern;
|
|
||||||
import com.alibaba.cola.exception.BizException;
|
import com.alibaba.cola.exception.BizException;
|
||||||
import com.alibaba.fastjson.JSONArray;
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.jjb.saas.framework.auth.utils.AuthContext;
|
import com.jjb.saas.framework.auth.utils.AuthContext;
|
||||||
import com.zcloud.eightwork.domain.gateway.TaskFlowGateway;
|
import com.zcloud.eightwork.domain.gateway.TaskFlowGateway;
|
||||||
import com.zcloud.eightwork.domain.model.TaskFlowE;
|
import com.zcloud.eightwork.domain.model.TaskFlowE;
|
||||||
import com.zcloud.eightwork.domain.model.enums.TaskLogStatus;
|
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.EightworkInfoSaveDraftCmd;
|
||||||
import com.zcloud.eightwork.dto.TaskSignStepInfoCmd;
|
import com.zcloud.eightwork.dto.TaskSignStepInfoCmd;
|
||||||
import com.zcloud.eightwork.persistence.dataobject.EightworkInfoDO;
|
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.dataobject.TaskLogDO;
|
||||||
import com.zcloud.eightwork.persistence.repository.EightworkInfoRepository;
|
import com.zcloud.eightwork.persistence.repository.EightworkInfoRepository;
|
||||||
|
import com.zcloud.eightwork.persistence.repository.MeasuresLogsRepository;
|
||||||
import com.zcloud.eightwork.persistence.repository.TaskLogRepository;
|
import com.zcloud.eightwork.persistence.repository.TaskLogRepository;
|
||||||
import com.zcloud.gbscommon.utils.Tools;
|
import com.zcloud.gbscommon.utils.Tools;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.data.redis.core.StringRedisTemplate;
|
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 八险作业暂存执行器
|
* 八险作业暂存执行器
|
||||||
|
|
@ -40,24 +36,35 @@ import java.util.concurrent.TimeUnit;
|
||||||
@Component
|
@Component
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public class EightworkInfoSaveDraftExe {
|
public class EightworkInfoSaveDraftExe {
|
||||||
/** 第一步(申请步骤)的步骤ID */
|
/**
|
||||||
|
* 第一步(申请步骤)的步骤ID
|
||||||
|
*/
|
||||||
private static final Long FIRST_STEP_ID = 1L;
|
private static final Long FIRST_STEP_ID = 1L;
|
||||||
/** 暂存状态 */
|
/**
|
||||||
|
* 暂存状态
|
||||||
|
*/
|
||||||
private static final Integer DRAFT_STATUS = 0;
|
private static final Integer DRAFT_STATUS = 0;
|
||||||
/** 进行中状态 */
|
/**
|
||||||
|
* 进行中状态
|
||||||
|
*/
|
||||||
private static final Integer IN_PROGRESS_STATUS = 1;
|
private static final Integer IN_PROGRESS_STATUS = 1;
|
||||||
|
/**
|
||||||
|
* 其他安全措施类型
|
||||||
|
*/
|
||||||
|
private static final Integer OTHER_MEASURE_TYPE = 2;
|
||||||
|
|
||||||
private final TaskFlowGateway taskFlowGateway;
|
private final TaskFlowGateway taskFlowGateway;
|
||||||
private final EightworkInfoRepository eightworkInfoRepository;
|
private final EightworkInfoRepository eightworkInfoRepository;
|
||||||
private final TaskLogRepository taskLogRepository;
|
private final TaskLogRepository taskLogRepository;
|
||||||
|
private final MeasuresLogsRepository measuresLogsRepository;
|
||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void execute(EightworkInfoSaveDraftCmd cmd) {
|
public void execute(EightworkInfoSaveDraftCmd cmd) {
|
||||||
log.info("开始暂存作业: id={}, workType={}, workLevel={}",
|
log.info("开始暂存作业: id={}, workType={}, workLevel={}",
|
||||||
cmd.getId(), cmd.getWorkType(), cmd.getWorkLevel());
|
cmd.getWorkId(), cmd.getWorkType(), cmd.getWorkLevel());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (cmd.getId() != null) {
|
if (StringUtils.isNotBlank(cmd.getWorkId())) {
|
||||||
// 更新现有暂存
|
// 更新现有暂存
|
||||||
updateDraft(cmd);
|
updateDraft(cmd);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -76,10 +83,10 @@ public class EightworkInfoSaveDraftExe {
|
||||||
* 更新现有暂存
|
* 更新现有暂存
|
||||||
*/
|
*/
|
||||||
private void updateDraft(EightworkInfoSaveDraftCmd cmd) {
|
private void updateDraft(EightworkInfoSaveDraftCmd cmd) {
|
||||||
log.info("更新现有暂存: id={}", cmd.getId());
|
log.info("更新现有暂存: id={}", cmd.getWorkId());
|
||||||
|
|
||||||
// 1. 查询现有记录
|
// 1. 查询现有记录
|
||||||
EightworkInfoDO existingInfo = eightworkInfoRepository.getById(cmd.getId());
|
EightworkInfoDO existingInfo = eightworkInfoRepository.getOne(new LambdaQueryWrapper<EightworkInfoDO>().eq(EightworkInfoDO::getWorkId, cmd.getWorkId()));
|
||||||
if (existingInfo == null) {
|
if (existingInfo == null) {
|
||||||
throw new BizException("暂存记录不存在");
|
throw new BizException("暂存记录不存在");
|
||||||
}
|
}
|
||||||
|
|
@ -104,6 +111,9 @@ public class EightworkInfoSaveDraftExe {
|
||||||
// 6. 更新主表 info 中的预设签字人信息
|
// 6. 更新主表 info 中的预设签字人信息
|
||||||
updateInfoWithSigners(existingInfo.getWorkId(), cmd.getSignLogs());
|
updateInfoWithSigners(existingInfo.getWorkId(), cmd.getSignLogs());
|
||||||
|
|
||||||
|
// 7. 处理其他安全措施
|
||||||
|
handleOtherMeasures(existingInfo.getWorkId(), cmd.getWorkType(), cmd.getOthers());
|
||||||
|
|
||||||
log.info("暂存更新成功: workId={}", existingInfo.getWorkId());
|
log.info("暂存更新成功: workId={}", existingInfo.getWorkId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -126,7 +136,7 @@ public class EightworkInfoSaveDraftExe {
|
||||||
eightworkInfo.setGasFlag(cmd.getGasFlag());
|
eightworkInfo.setGasFlag(cmd.getGasFlag());
|
||||||
eightworkInfo.setCheckNo(null); // 暂存不生成票号
|
eightworkInfo.setCheckNo(null); // 暂存不生成票号
|
||||||
eightworkInfo.setStatus(DRAFT_STATUS);
|
eightworkInfo.setStatus(DRAFT_STATUS);
|
||||||
eightworkInfo.setInfo(cmd.getInfo());
|
eightworkInfo.setInfo(cmd.getInfo().toJSONString());
|
||||||
eightworkInfo.setDepartmentId(cmd.getDepartmentId());
|
eightworkInfo.setDepartmentId(cmd.getDepartmentId());
|
||||||
|
|
||||||
eightworkInfoRepository.save(eightworkInfo);
|
eightworkInfoRepository.save(eightworkInfo);
|
||||||
|
|
@ -139,6 +149,9 @@ public class EightworkInfoSaveDraftExe {
|
||||||
// 3. 更新主表 info 中的预设签字人信息
|
// 3. 更新主表 info 中的预设签字人信息
|
||||||
updateInfoWithSigners(eightworkInfo.getWorkId(), cmd.getSignLogs());
|
updateInfoWithSigners(eightworkInfo.getWorkId(), cmd.getSignLogs());
|
||||||
|
|
||||||
|
// 4. 处理其他安全措施
|
||||||
|
handleOtherMeasures(eightworkInfo.getWorkId(), cmd.getWorkType(), cmd.getOthers());
|
||||||
|
|
||||||
log.info("暂存创建成功: workId={}", eightworkInfo.getWorkId());
|
log.info("暂存创建成功: workId={}", eightworkInfo.getWorkId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -170,7 +183,7 @@ public class EightworkInfoSaveDraftExe {
|
||||||
);
|
);
|
||||||
|
|
||||||
// 暂存时申请步骤状态为进行中
|
// 暂存时申请步骤状态为进行中
|
||||||
taskLog.setStatus(IN_PROGRESS_STATUS);
|
taskLog.setStatus(DRAFT_STATUS);
|
||||||
|
|
||||||
log.info("申请步骤 task_log 创建成功: stepName={}", applyFlow.getStepName());
|
log.info("申请步骤 task_log 创建成功: stepName={}", applyFlow.getStepName());
|
||||||
return taskLog;
|
return taskLog;
|
||||||
|
|
@ -188,7 +201,7 @@ public class EightworkInfoSaveDraftExe {
|
||||||
existingInfo.setProjectId(cmd.getProjectId());
|
existingInfo.setProjectId(cmd.getProjectId());
|
||||||
existingInfo.setXgfId(cmd.getXgfId());
|
existingInfo.setXgfId(cmd.getXgfId());
|
||||||
existingInfo.setGasFlag(cmd.getGasFlag());
|
existingInfo.setGasFlag(cmd.getGasFlag());
|
||||||
existingInfo.setInfo(cmd.getInfo());
|
existingInfo.setInfo(cmd.getInfo().toJSONString());
|
||||||
existingInfo.setDepartmentId(cmd.getDepartmentId());
|
existingInfo.setDepartmentId(cmd.getDepartmentId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -226,12 +239,10 @@ public class EightworkInfoSaveDraftExe {
|
||||||
// 添加预设签字人信息到 info(格式同 updateEightworkInfo)
|
// 添加预设签字人信息到 info(格式同 updateEightworkInfo)
|
||||||
for (TaskSignStepInfoCmd signInfo : signLogs) {
|
for (TaskSignStepInfoCmd signInfo : signLogs) {
|
||||||
JSONObject stepInfo = new JSONObject();
|
JSONObject stepInfo = new JSONObject();
|
||||||
stepInfo.put("stepName", getStepNameBySignInfo(signInfo));
|
|
||||||
stepInfo.put("actUserDepartment", signInfo.getActUserDepartment());
|
stepInfo.put("actUserDepartment", signInfo.getActUserDepartment());
|
||||||
stepInfo.put("actUserDepartmentName", signInfo.getActUserDepartmentName());
|
stepInfo.put("actUserDepartmentName", signInfo.getActUserDepartmentName());
|
||||||
stepInfo.put("actUser", signInfo.getActUser());
|
stepInfo.put("actUser", signInfo.getActUser());
|
||||||
stepInfo.put("actUserName", signInfo.getActUserName());
|
stepInfo.put("actUserName", signInfo.getActUserName());
|
||||||
stepInfo.put("signTime", cn.hutool.core.date.DateUtil.format(new Date(), DatePattern.NORM_DATETIME_PATTERN));
|
|
||||||
stepInfo.put("status", TaskLogStatus.NOT_STARTED.getCode());
|
stepInfo.put("status", TaskLogStatus.NOT_STARTED.getCode());
|
||||||
|
|
||||||
infoJson.put("step_" + signInfo.getStepId(), stepInfo);
|
infoJson.put("step_" + signInfo.getStepId(), stepInfo);
|
||||||
|
|
@ -245,11 +256,40 @@ public class EightworkInfoSaveDraftExe {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 从签字信息中获取步骤名称
|
* 处理其他安全措施
|
||||||
|
* 将暂存时填写的其他安全措施保存到 measures_logs 表
|
||||||
|
*
|
||||||
|
* @param workId 作业ID
|
||||||
|
* @param workType 作业类型
|
||||||
|
* @param others 前端传入的其他参数(包含 otherMeasures)
|
||||||
*/
|
*/
|
||||||
private String getStepNameBySignInfo(TaskSignStepInfoCmd signInfo) {
|
private void handleOtherMeasures(String workId, String workType, JSONObject others) {
|
||||||
// 这里可以通过 stepId 查询流程配置获取步骤名称
|
if (others == null) {
|
||||||
// 暂时返回空,由前端或后续处理填充
|
return;
|
||||||
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package com.zcloud.eightwork.command;
|
package com.zcloud.eightwork.command;
|
||||||
|
|
||||||
|
import cn.hutool.core.date.DatePattern;
|
||||||
import com.alibaba.cola.exception.BizException;
|
import com.alibaba.cola.exception.BizException;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
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 com.zcloud.gbscommon.utils.Tools;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.data.redis.core.StringRedisTemplate;
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
@ -59,11 +61,11 @@ public class TaskLogAddExe {
|
||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public List<TaskLogDO> execute(TaskLogAddCmd cmd) {
|
public List<TaskLogDO> execute(TaskLogAddCmd cmd) {
|
||||||
log.info("开始创建作业流程: workType={}, workLevel={}, id={}",
|
log.info("开始创建作业流程: workType={}, workLevel={}, workId={}",
|
||||||
cmd.getWorkType(), cmd.getWorkLevel(), cmd.getId());
|
cmd.getWorkType(), cmd.getWorkLevel(), cmd.getWorkId());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (cmd.getId() != null) {
|
if (StringUtils.isNotBlank(cmd.getWorkId())) {
|
||||||
// 从暂存转正式提交
|
// 从暂存转正式提交
|
||||||
return submitFromDraft(cmd);
|
return submitFromDraft(cmd);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -80,10 +82,10 @@ public class TaskLogAddExe {
|
||||||
* 从暂存转正式提交
|
* 从暂存转正式提交
|
||||||
*/
|
*/
|
||||||
private List<TaskLogDO> submitFromDraft(TaskLogAddCmd cmd) {
|
private List<TaskLogDO> submitFromDraft(TaskLogAddCmd cmd) {
|
||||||
log.info("从暂存转正式提交: id={}", cmd.getId());
|
log.info("从暂存转正式提交: id={}", cmd.getWorkId());
|
||||||
|
|
||||||
// 1. 查询暂存记录
|
// 1. 查询暂存记录
|
||||||
EightworkInfoDO existingInfo = eightworkInfoRepository.getById(cmd.getId());
|
EightworkInfoDO existingInfo = eightworkInfoRepository.getOne(new LambdaQueryWrapper<EightworkInfoDO>().eq(EightworkInfoDO::getWorkId, cmd.getWorkId()));
|
||||||
if (existingInfo == null) {
|
if (existingInfo == null) {
|
||||||
throw new BizException("暂存记录不存在");
|
throw new BizException("暂存记录不存在");
|
||||||
}
|
}
|
||||||
|
|
@ -113,8 +115,11 @@ public class TaskLogAddExe {
|
||||||
log.info("暂存转正式(保持原票号): workId={}, checkNo={}", existingInfo.getWorkId(), checkNo);
|
log.info("暂存转正式(保持原票号): workId={}, checkNo={}", existingInfo.getWorkId(), checkNo);
|
||||||
}
|
}
|
||||||
|
|
||||||
existingInfo.setStatus(TaskLogStatus.IN_PROGRESS.getCode());
|
existingInfo.setStatus(TaskLogStatus.APPROVED.getCode()); // 主表进行中=1
|
||||||
existingInfo.setInfo(processedInfo); // 设置处理后的 info(包含 rejectHistory)
|
existingInfo.setInfo(processedInfo); // 设置处理后的 info(包含 rejectHistory)
|
||||||
|
|
||||||
|
// 处理签字人信息
|
||||||
|
handleInfoStep(existingInfo,cmd.getSignLogs());
|
||||||
eightworkInfoRepository.updateById(existingInfo);
|
eightworkInfoRepository.updateById(existingInfo);
|
||||||
|
|
||||||
// 6. 获取流程配置
|
// 6. 获取流程配置
|
||||||
|
|
@ -281,19 +286,48 @@ public class TaskLogAddExe {
|
||||||
cmd.getWorkLevel(),
|
cmd.getWorkLevel(),
|
||||||
cmd.getCorpinfoId(),
|
cmd.getCorpinfoId(),
|
||||||
cmd.getXgfFlag(),
|
cmd.getXgfFlag(),
|
||||||
|
cmd.getGasFlag(),
|
||||||
cmd.getInternalOperationFlag(),
|
cmd.getInternalOperationFlag(),
|
||||||
cmd.getProjectId(),
|
cmd.getProjectId(),
|
||||||
cmd.getXgfId(),
|
cmd.getXgfId(),
|
||||||
checkNo,
|
checkNo,
|
||||||
TaskLogStatus.IN_PROGRESS.getCode(), // 初始状态为进行中
|
TaskLogStatus.APPROVED.getCode(), // 主表进行中=1
|
||||||
cmd.getInfo(),
|
cmd.getInfo(),
|
||||||
cmd.getDepartmentId()
|
cmd.getDepartmentId(),
|
||||||
|
cmd.getDepartmentName()
|
||||||
);
|
);
|
||||||
|
handleInfoStep(eightworkInfo,cmd.getSignLogs());
|
||||||
|
|
||||||
eightworkInfoRepository.save(eightworkInfo);
|
eightworkInfoRepository.save(eightworkInfo);
|
||||||
return eightworkInfo.getWorkId();
|
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 合并
|
* 将旧的 rejectInfo 转换为 rejectHistory,并与新的 info 合并
|
||||||
|
|
|
||||||
|
|
@ -11,9 +11,11 @@ import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.zcloud.eightwork.command.convertor.TaskLogConvertUtil;
|
import com.zcloud.eightwork.command.convertor.TaskLogConvertUtil;
|
||||||
import com.zcloud.eightwork.domain.gateway.EightworkSupplementaryInfoGateway;
|
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.gateway.TaskLogGateway;
|
||||||
import com.zcloud.eightwork.domain.model.EightworkSupplementaryInfoE;
|
import com.zcloud.eightwork.domain.model.EightworkSupplementaryInfoE;
|
||||||
import com.zcloud.eightwork.domain.model.MeasuresLogsE;
|
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.TaskLogE;
|
||||||
import com.zcloud.eightwork.domain.model.enums.BranchFlag;
|
import com.zcloud.eightwork.domain.model.enums.BranchFlag;
|
||||||
import com.zcloud.eightwork.domain.model.enums.StepType;
|
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.TodoListEventPusherUtil;
|
||||||
import com.zcloud.gbscommon.todolistmq.event.TodoListAddEvent;
|
import com.zcloud.gbscommon.todolistmq.event.TodoListAddEvent;
|
||||||
import com.zcloud.gbscommon.todolistmq.event.TodoListCompleteEvent;
|
import com.zcloud.gbscommon.todolistmq.event.TodoListCompleteEvent;
|
||||||
|
import com.zcloud.gbscommon.utils.Tools;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
|
@ -79,6 +82,10 @@ public class TaskLogUpdateExe {
|
||||||
* APP端待办标识
|
* APP端待办标识
|
||||||
*/
|
*/
|
||||||
private static final Integer APP_FLAG = 1;
|
private static final Integer APP_FLAG = 1;
|
||||||
|
/**
|
||||||
|
* 附件步骤标识
|
||||||
|
*/
|
||||||
|
private static final Integer FILE_STEP_FLAG = 1;
|
||||||
/**
|
/**
|
||||||
* 第一步(申请步骤)ID
|
* 第一步(申请步骤)ID
|
||||||
*/
|
*/
|
||||||
|
|
@ -93,9 +100,11 @@ public class TaskLogUpdateExe {
|
||||||
private static final Integer REJECTED_STATUS = 2;
|
private static final Integer REJECTED_STATUS = 2;
|
||||||
|
|
||||||
private final TaskLogGateway taskLogGateway;
|
private final TaskLogGateway taskLogGateway;
|
||||||
|
private final TaskFlowGateway taskFlowGateway;
|
||||||
private final TaskLogRepository taskLogRepository;
|
private final TaskLogRepository taskLogRepository;
|
||||||
private final TaskLogArchiveRepository taskLogArchiveRepository;
|
private final TaskLogArchiveRepository taskLogArchiveRepository;
|
||||||
private final MeasuresLogsRepository measuresLogsRepository;
|
private final MeasuresLogsRepository measuresLogsRepository;
|
||||||
|
private final MeasuresLogsArchiveRepository measuresLogsArchiveRepository;
|
||||||
private final EightworkInfoRepository eightworkInfoRepository;
|
private final EightworkInfoRepository eightworkInfoRepository;
|
||||||
private final TodoListEventPusherUtil todoListEventPusherUtil;
|
private final TodoListEventPusherUtil todoListEventPusherUtil;
|
||||||
private final EightworkSupplementaryInfoGateway eightworkSupplementaryInfoGateway;
|
private final EightworkSupplementaryInfoGateway eightworkSupplementaryInfoGateway;
|
||||||
|
|
@ -171,21 +180,24 @@ public class TaskLogUpdateExe {
|
||||||
// 3. 先设置后续签字人(在激活步骤之前设置,避免状态覆盖问题)
|
// 3. 先设置后续签字人(在激活步骤之前设置,避免状态覆盖问题)
|
||||||
handleSignStepsIfNeeded(currentLog, cmd, actionLogs, logs);
|
handleSignStepsIfNeeded(currentLog, cmd, actionLogs, logs);
|
||||||
|
|
||||||
// 4. 判断是否可以流转到下一步
|
// 4. 处理特殊步骤逻辑
|
||||||
|
boolean shouldProceed = handleSpecialStepIfNeeded(currentLog, cmd, actionLogs);
|
||||||
|
|
||||||
|
// 5. 处理其他安全措施
|
||||||
|
handleOtherMeasuresIfNeeded(currentLog, cmd);
|
||||||
|
// 6. 判断是否可以流转到下一步
|
||||||
if (canProceedToNext(currentLog, logs, cmd)) {
|
if (canProceedToNext(currentLog, logs, cmd)) {
|
||||||
// 5. 处理特殊步骤逻辑
|
|
||||||
boolean shouldProceed = handleSpecialStepIfNeeded(currentLog, cmd, actionLogs);
|
|
||||||
|
|
||||||
// 6. 处理其他安全措施
|
// 7. 在流转到下一步之前,检查是否被持续步骤阻塞(双重验证)
|
||||||
handleOtherMeasuresIfNeeded(currentLog, cmd);
|
checkBlockingStepBeforeProceed(currentLog, logs);
|
||||||
|
|
||||||
// 7. 流转到下一步
|
// 8. 流转到下一步
|
||||||
if (shouldProceed) {
|
if (shouldProceed) {
|
||||||
proceedToNextStep(currentLog, actionLogs, logs);
|
proceedToNextStep(currentLog, actionLogs, logs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 8. 处理分支流程
|
// 9. 处理分支流程
|
||||||
handleBranchIfNeeded(currentLog, actionLogs, logs);
|
handleBranchIfNeeded(currentLog, actionLogs, logs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -231,6 +243,12 @@ public class TaskLogUpdateExe {
|
||||||
log.info("定位步骤已保存经纬度: latitude={}, longitude={}", cmd.getLatitude(), cmd.getLongitude());
|
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());
|
sendTodoCompleteEvent(currentLog.getId());
|
||||||
|
|
||||||
|
|
@ -345,12 +363,22 @@ public class TaskLogUpdateExe {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
measuresLogsRepository.saveBatch(measuresList.stream().map(item -> {
|
if(ObjectUtil.isNotEmpty(cmd.getOthers().get("measuresType")) && cmd.getOthers().get("measuresType").equals("2")){
|
||||||
MeasuresLogsDO d = new MeasuresLogsDO();
|
measuresLogsRepository.updateBatchById(measuresList.stream().map(item -> {
|
||||||
BeanUtils.copyProperties(item, d, "id");
|
MeasuresLogsDO d = new MeasuresLogsDO();
|
||||||
d.setType(MAIN_MEASURE_TYPE);
|
BeanUtils.copyProperties(item, d);
|
||||||
return d;
|
return d;
|
||||||
}).collect(Collectors.toList()));
|
}).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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -440,6 +468,10 @@ public class TaskLogUpdateExe {
|
||||||
|
|
||||||
List<TaskLogE> nextSteps = findNextSteps(currentLog, allLogs);
|
List<TaskLogE> nextSteps = findNextSteps(currentLog, allLogs);
|
||||||
|
|
||||||
|
log.info("查找下一步: currentStepId={}, currentNextStep={}, foundNextStepsCount={}",
|
||||||
|
currentLog.getStepId(), currentLog.getNextStep(),
|
||||||
|
nextSteps != null ? nextSteps.size() : 0);
|
||||||
|
|
||||||
if (CollectionUtil.isEmpty(nextSteps)) {
|
if (CollectionUtil.isEmpty(nextSteps)) {
|
||||||
// 没有下一步,流程结束
|
// 没有下一步,流程结束
|
||||||
completeWorkflow(currentLog);
|
completeWorkflow(currentLog);
|
||||||
|
|
@ -448,6 +480,10 @@ public class TaskLogUpdateExe {
|
||||||
|
|
||||||
TaskLogE nextStep = nextSteps.get(0);
|
TaskLogE nextStep = nextSteps.get(0);
|
||||||
|
|
||||||
|
log.info("准备激活下一步: currentStepId={}, currentStepName={}, nextStepId={}, nextStepName={}, nextBranchFlag={}",
|
||||||
|
currentLog.getStepId(), currentLog.getStepName(),
|
||||||
|
nextStep.getStepId(), nextStep.getStepName(), nextStep.getBranchFlag());
|
||||||
|
|
||||||
// 判断下一步是否为跳过状态
|
// 判断下一步是否为跳过状态
|
||||||
if (TaskLogStatus.SKIPPED.equalsCode(nextStep.getStatus())) {
|
if (TaskLogStatus.SKIPPED.equalsCode(nextStep.getStatus())) {
|
||||||
log.info("下一步为跳过步骤,继续递归: {}", nextStep.getStepName());
|
log.info("下一步为跳过步骤,继续递归: {}", nextStep.getStepName());
|
||||||
|
|
@ -455,35 +491,8 @@ public class TaskLogUpdateExe {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 判断下一步是否为合并节点(需要等待所有前置步骤都完成)
|
|
||||||
if (isMergeNode(nextStep)) {
|
|
||||||
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());
|
|
||||||
}
|
|
||||||
|
|
||||||
// 判断下一步是否被持续步骤阻塞(如气体检测必须填写指定次数)
|
|
||||||
if (isBlockedByOngoingStep(nextStep, allLogs)) {
|
|
||||||
TaskLogE blockingStep = findBlockingStep(nextStep, allLogs);
|
|
||||||
log.info("步骤被持续步骤阻塞: step={}, blockingStep={}, currentTimes={}, requiredTimes={}",
|
|
||||||
nextStep.getStepName(),
|
|
||||||
blockingStep != null ? blockingStep.getStepName() : "未知",
|
|
||||||
blockingStep != null ? blockingStep.getCurrentFillTimes() : 0,
|
|
||||||
blockingStep != null ? blockingStep.getMinFillTimes() : 0);
|
|
||||||
// 不激活步骤,等待持续步骤填写足够次数
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 激活下一步
|
// 激活下一步
|
||||||
activateNextSteps(nextSteps, actionLogs, currentLog);
|
activateNextSteps(nextSteps, actionLogs, currentLog, allLogs);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -534,24 +543,6 @@ public class TaskLogUpdateExe {
|
||||||
return pendingSteps;
|
return pendingSteps;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 判断步骤是否被持续步骤阻塞
|
|
||||||
* 持续步骤(如气体检测)必须填写指定次数后,阻塞的步骤才能激活
|
|
||||||
*/
|
|
||||||
private boolean isBlockedByOngoingStep(TaskLogE step, List<TaskLogE> allLogs) {
|
|
||||||
// 找出阻塞当前步骤的持续步骤
|
|
||||||
TaskLogE blockingStep = findBlockingStep(step, allLogs);
|
|
||||||
if (blockingStep == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 检查填写次数是否满足要求
|
|
||||||
Integer currentTimes = blockingStep.getCurrentFillTimes();
|
|
||||||
Integer requiredTimes = blockingStep.getMinFillTimes();
|
|
||||||
|
|
||||||
return currentTimes == null || currentTimes < requiredTimes;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查找阻塞指定步骤的持续步骤
|
* 查找阻塞指定步骤的持续步骤
|
||||||
*/
|
*/
|
||||||
|
|
@ -559,6 +550,7 @@ public class TaskLogUpdateExe {
|
||||||
for (TaskLogE log : allLogs) {
|
for (TaskLogE log : allLogs) {
|
||||||
// 找出持续步骤,且其阻塞的步骤ID等于当前步骤ID
|
// 找出持续步骤,且其阻塞的步骤ID等于当前步骤ID
|
||||||
if (Integer.valueOf(1).equals(log.getOngoingFlag())
|
if (Integer.valueOf(1).equals(log.getOngoingFlag())
|
||||||
|
&& !TaskLogStatus.SKIPPED.equalsCode(log.getStatus())
|
||||||
&& step.getStepId().equals(log.getBlockingStepId())) {
|
&& step.getStepId().equals(log.getBlockingStepId())) {
|
||||||
return log;
|
return log;
|
||||||
}
|
}
|
||||||
|
|
@ -566,12 +558,53 @@ public class TaskLogUpdateExe {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 阻塞信息内部类
|
||||||
|
*/
|
||||||
|
private static class BlockingInfo {
|
||||||
|
TaskLogE blockingStep;
|
||||||
|
Integer currentTimes;
|
||||||
|
Integer requiredTimes;
|
||||||
|
boolean isCompleted;
|
||||||
|
|
||||||
|
BlockingInfo(TaskLogE blockingStep, Integer currentTimes, Integer requiredTimes) {
|
||||||
|
this.blockingStep = blockingStep;
|
||||||
|
this.currentTimes = currentTimes != null ? currentTimes : 0;
|
||||||
|
this.requiredTimes = requiredTimes != null ? requiredTimes : 0;
|
||||||
|
this.isCompleted = currentTimes != null && currentTimes >= requiredTimes;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取阻塞信息
|
||||||
|
*/
|
||||||
|
private BlockingInfo getBlockingInfo(TaskLogE step, List<TaskLogE> allLogs) {
|
||||||
|
TaskLogE blockingStep = findBlockingStep(step, allLogs);
|
||||||
|
if (blockingStep == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Integer currentTimes = blockingStep.getCurrentFillTimes();
|
||||||
|
Integer requiredTimes = blockingStep.getMinFillTimes();
|
||||||
|
|
||||||
|
return new BlockingInfo(blockingStep, currentTimes, requiredTimes);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查找下一步骤
|
* 查找下一步骤
|
||||||
|
* 优先检查 nextStep,如果是分支结束节点则检查 branchMergeStep
|
||||||
*/
|
*/
|
||||||
private List<TaskLogE> findNextSteps(TaskLogE currentLog, List<TaskLogE> allLogs) {
|
private List<TaskLogE> findNextSteps(TaskLogE currentLog, List<TaskLogE> allLogs) {
|
||||||
|
Long targetStepId = currentLog.getNextStep();
|
||||||
|
|
||||||
|
// 如果 nextStep 为空,检查是否为分支结束节点(使用 branchMergeStep)
|
||||||
|
if (targetStepId == null && currentLog.getBranchMergeStep() != null) {
|
||||||
|
targetStepId = currentLog.getBranchMergeStep();
|
||||||
|
}
|
||||||
|
|
||||||
|
Long finalTargetStepId = targetStepId;
|
||||||
return allLogs.stream()
|
return allLogs.stream()
|
||||||
.filter(log -> log.getStepId().equals(currentLog.getNextStep()))
|
.filter(log -> log.getStepId().equals(finalTargetStepId))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -580,11 +613,26 @@ public class TaskLogUpdateExe {
|
||||||
* - 设置状态为进行中
|
* - 设置状态为进行中
|
||||||
* - 发送待办通知
|
* - 发送待办通知
|
||||||
* - 更新作业当前步骤
|
* - 更新作业当前步骤
|
||||||
|
* - 如果有阻塞步骤已完成,标记为通过
|
||||||
*/
|
*/
|
||||||
private void activateNextSteps(List<TaskLogE> nextSteps, List<TaskLogDO> actionLogs, TaskLogE currentLog) {
|
private void activateNextSteps(List<TaskLogE> nextSteps, List<TaskLogDO> actionLogs, TaskLogE currentLog, List<TaskLogE> allLogs) {
|
||||||
Long workId = getWorkId(currentLog.getWorkId());
|
Long workId = getWorkId(currentLog.getWorkId());
|
||||||
|
BlockingInfo info = getBlockingInfo(currentLog, allLogs);
|
||||||
|
|
||||||
|
if (info != null && !info.isCompleted) {
|
||||||
|
// 阻塞步骤未完成,不激活该步骤
|
||||||
|
log.info("步骤被持续步骤阻塞,跳过激活: step={}, blockingStep={}, currentTimes={}, requiredTimes={}",
|
||||||
|
currentLog.getStepName(), info.blockingStep.getStepName(), info.currentTimes, info.requiredTimes);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 如果有阻塞步骤且已完成,标记为通过
|
||||||
|
if (info != null && info.isCompleted) {
|
||||||
|
completeBlockingStep(info.blockingStep, actionLogs);
|
||||||
|
}
|
||||||
|
|
||||||
for (TaskLogE next : nextSteps) {
|
for (TaskLogE next : nextSteps) {
|
||||||
|
|
||||||
|
// 激活步骤
|
||||||
next.setStatus(TaskLogStatus.IN_PROGRESS.getCode());
|
next.setStatus(TaskLogStatus.IN_PROGRESS.getCode());
|
||||||
addActionLog(actionLogs, next);
|
addActionLog(actionLogs, next);
|
||||||
|
|
||||||
|
|
@ -592,14 +640,26 @@ public class TaskLogUpdateExe {
|
||||||
sendTodoAddEvent(workId, next, currentLog.getWorkType());
|
sendTodoAddEvent(workId, next, currentLog.getWorkType());
|
||||||
|
|
||||||
log.info("已激活下一步: {}", next.getStepName());
|
log.info("已激活下一步: {}", next.getStepName());
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 更新作业当前步骤
|
// 如果有步骤被激活,更新作业当前步骤
|
||||||
eightworkInfoRepository.updateWorkStatus(
|
if (!actionLogs.isEmpty()) {
|
||||||
currentLog.getWorkId(),
|
// 找到第一个被激活的步骤
|
||||||
nextSteps.get(0).getStepName(),
|
TaskLogDO firstActivated = actionLogs.stream()
|
||||||
null
|
.filter(log -> log.getTaskLogId().equals(nextSteps.get(0).getTaskLogId()))
|
||||||
);
|
.findFirst()
|
||||||
|
.orElse(null);
|
||||||
|
|
||||||
|
if (firstActivated != null) {
|
||||||
|
eightworkInfoRepository.updateWorkStatus(
|
||||||
|
currentLog.getWorkId(),
|
||||||
|
firstActivated.getStepName(),
|
||||||
|
null
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -686,12 +746,16 @@ public class TaskLogUpdateExe {
|
||||||
// 4. 删除辅助数据(delay、gas、measures)
|
// 4. 删除辅助数据(delay、gas、measures)
|
||||||
deleteSupplementaryInfo(cmd.getWorkId());
|
deleteSupplementaryInfo(cmd.getWorkId());
|
||||||
|
|
||||||
// 5. 更新主表状态为暂存,添加打回信息
|
// 5. 新建一条新的申请记录,status=0(暂存状态)
|
||||||
|
createNewApplyTaskLog(cmd.getWorkId());
|
||||||
|
|
||||||
|
// 6. 更新主表状态为暂存,添加打回信息
|
||||||
updateMainInfoForReject(cmd.getWorkId(), currentLog, cmd.getOthers());
|
updateMainInfoForReject(cmd.getWorkId(), currentLog, cmd.getOthers());
|
||||||
|
|
||||||
// 6. 发送待办完成事件
|
// 7. 发送待办完成事件
|
||||||
sendTodoCompleteEvent(currentLog.getId());
|
sendTodoCompleteEvent(currentLog.getId());
|
||||||
|
|
||||||
|
|
||||||
log.info("工作流已打回到申请步骤: workId={}", cmd.getWorkId());
|
log.info("工作流已打回到申请步骤: workId={}", cmd.getWorkId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -702,10 +766,6 @@ public class TaskLogUpdateExe {
|
||||||
List<TaskLogArchiveDO> archiveList = new ArrayList<>();
|
List<TaskLogArchiveDO> archiveList = new ArrayList<>();
|
||||||
|
|
||||||
for (TaskLogE log : allLogs) {
|
for (TaskLogE log : allLogs) {
|
||||||
// 跳过申请步骤(stepId=1)
|
|
||||||
if (FIRST_STEP_ID.equals(log.getStepId())) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
// 只归档已处理的记录(状态不是未开始)
|
// 只归档已处理的记录(状态不是未开始)
|
||||||
if (!TaskLogStatus.NOT_STARTED.equalsCode(log.getStatus())) {
|
if (!TaskLogStatus.NOT_STARTED.equalsCode(log.getStatus())) {
|
||||||
TaskLogArchiveDO archiveDO = new TaskLogArchiveDO();
|
TaskLogArchiveDO archiveDO = new TaskLogArchiveDO();
|
||||||
|
|
@ -727,6 +787,7 @@ public class TaskLogUpdateExe {
|
||||||
* 归档辅助数据到 eightwork_supplementary_info_archive 表
|
* 归档辅助数据到 eightwork_supplementary_info_archive 表
|
||||||
*/
|
*/
|
||||||
private void archiveSupplementaryInfo(String workId) {
|
private void archiveSupplementaryInfo(String workId) {
|
||||||
|
// 归档 eightwork_supplementary_info
|
||||||
List<EightworkSupplementaryInfoDO> infoList = eightworkSupplementaryInfoRepository.list(
|
List<EightworkSupplementaryInfoDO> infoList = eightworkSupplementaryInfoRepository.list(
|
||||||
new LambdaQueryWrapper<EightworkSupplementaryInfoDO>()
|
new LambdaQueryWrapper<EightworkSupplementaryInfoDO>()
|
||||||
.eq(EightworkSupplementaryInfoDO::getWorkId, workId)
|
.eq(EightworkSupplementaryInfoDO::getWorkId, workId)
|
||||||
|
|
@ -741,17 +802,28 @@ public class TaskLogUpdateExe {
|
||||||
}
|
}
|
||||||
log.info("已归档 {} 条辅助数据记录", infoList.size());
|
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
|
* 删除除申请步骤外的所有 task_log
|
||||||
*/
|
*/
|
||||||
private void deleteTaskLogsExceptFirst(String workId) {
|
private void deleteTaskLogsExceptFirst(String workId) {
|
||||||
taskLogRepository.remove(
|
taskLogRepository.physicalDeleteByWorkId(workId);
|
||||||
new LambdaQueryWrapper<TaskLogDO>()
|
|
||||||
.eq(TaskLogDO::getWorkId, workId)
|
|
||||||
.ne(TaskLogDO::getStepId, FIRST_STEP_ID)
|
|
||||||
);
|
|
||||||
log.info("已删除除申请步骤外的 task_log: workId={}", workId);
|
log.info("已删除除申请步骤外的 task_log: workId={}", workId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -760,20 +832,63 @@ public class TaskLogUpdateExe {
|
||||||
*/
|
*/
|
||||||
private void deleteSupplementaryInfo(String workId) {
|
private void deleteSupplementaryInfo(String workId) {
|
||||||
// 删除 eightwork_supplementary_info 中的记录
|
// 删除 eightwork_supplementary_info 中的记录
|
||||||
eightworkSupplementaryInfoRepository.remove(
|
eightworkSupplementaryInfoRepository.physicalDeleteByWorkId(workId);
|
||||||
new LambdaQueryWrapper<EightworkSupplementaryInfoDO>()
|
|
||||||
.eq(EightworkSupplementaryInfoDO::getWorkId, workId)
|
|
||||||
);
|
|
||||||
log.info("已删除辅助数据: workId={}", workId);
|
log.info("已删除辅助数据: workId={}", workId);
|
||||||
|
|
||||||
// 删除 measures_logs 中的记录(如果有的话)
|
// 删除 measures_logs 中的记录(如果有的话)
|
||||||
measuresLogsRepository.remove(
|
measuresLogsRepository.physicalDeleteByWorkId(workId);
|
||||||
new LambdaQueryWrapper<MeasuresLogsDO>()
|
|
||||||
.eq(MeasuresLogsDO::getWorkId, workId)
|
|
||||||
);
|
|
||||||
log.info("已删除安全措施记录: workId={}", 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());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新主表信息(打回后)
|
* 更新主表信息(打回后)
|
||||||
*/
|
*/
|
||||||
|
|
@ -819,12 +934,12 @@ public class TaskLogUpdateExe {
|
||||||
// 将 rejectInfo 放入主 info
|
// 将 rejectInfo 放入主 info
|
||||||
infoJson.put("rejectInfo", rejectInfo);
|
infoJson.put("rejectInfo", rejectInfo);
|
||||||
|
|
||||||
// 更新主表状态为暂存
|
// 更新主表状态为打回
|
||||||
infoDO.setStatus(DRAFT_STATUS);
|
infoDO.setStatus(TaskLogStatus.REJECTED.getCode());
|
||||||
infoDO.setInfo(infoJson.toJSONString());
|
infoDO.setInfo(infoJson.toJSONString());
|
||||||
eightworkInfoRepository.updateById(infoDO);
|
eightworkInfoRepository.updateById(infoDO);
|
||||||
|
|
||||||
log.info("主表已更新为暂存状态并添加打回信息: workId={}", workId);
|
log.info("主表已更新为打回状态并添加打回信息: workId={}", workId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -894,14 +1009,6 @@ public class TaskLogUpdateExe {
|
||||||
signInfo.getActUserName()
|
signInfo.getActUserName()
|
||||||
);
|
);
|
||||||
|
|
||||||
// 如果步骤当前是未开始状态,需要激活它(设置签字人后应该变为进行中)
|
|
||||||
if (TaskLogStatus.NOT_STARTED.equalsCode(signStepLog.getStatus())) {
|
|
||||||
signStepLog.setStatus(TaskLogStatus.IN_PROGRESS.getCode());
|
|
||||||
// 发送待办通知
|
|
||||||
sendTodoAddEvent(getWorkId(signStepLog.getWorkId()), signStepLog, currentLog.getWorkType());
|
|
||||||
log.info("已激活签字步骤: {}", signStepLog.getStepName());
|
|
||||||
}
|
|
||||||
|
|
||||||
addActionLog(actionLogs, signStepLog);
|
addActionLog(actionLogs, signStepLog);
|
||||||
log.info("已设置签字人: step={}, user={}", signStepLog.getStepName(), signInfo.getActUserName());
|
log.info("已设置签字人: step={}, user={}", signStepLog.getStepName(), signInfo.getActUserName());
|
||||||
}
|
}
|
||||||
|
|
@ -1024,6 +1131,10 @@ public class TaskLogUpdateExe {
|
||||||
if (source.getLongitude() != null) {
|
if (source.getLongitude() != null) {
|
||||||
target.setLongitude(source.getLongitude());
|
target.setLongitude(source.getLongitude());
|
||||||
}
|
}
|
||||||
|
// 附件:允许覆盖(最新的附件信息)
|
||||||
|
if (source.getFilePath() != null) {
|
||||||
|
target.setFilePath(source.getFilePath());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -1078,6 +1189,11 @@ public class TaskLogUpdateExe {
|
||||||
stepInfo.put("location", location);
|
stepInfo.put("location", location);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 附件步骤,添加附件信息
|
||||||
|
if (StringUtils.isNotBlank(logDO.getFilePath())) {
|
||||||
|
stepInfo.put("filePath", logDO.getFilePath());
|
||||||
|
}
|
||||||
|
|
||||||
// 其他自定义步骤,添加 otherParams
|
// 其他自定义步骤,添加 otherParams
|
||||||
if (StringUtils.isNotBlank(logDO.getOtherParams())) {
|
if (StringUtils.isNotBlank(logDO.getOtherParams())) {
|
||||||
try {
|
try {
|
||||||
|
|
@ -1098,4 +1214,47 @@ public class TaskLogUpdateExe {
|
||||||
|
|
||||||
log.info("已批量更新步骤 info: workId={}, count={}", workId, actionLogs.size());
|
log.info("已批量更新步骤 info: workId={}, count={}", workId, actionLogs.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 在流转到下一步之前,检查是否被持续步骤阻塞(双重验证)
|
||||||
|
* 如果被阻塞且未完成,抛出异常回滚整个事务
|
||||||
|
*/
|
||||||
|
private void checkBlockingStepBeforeProceed(TaskLogE currentLog, List<TaskLogE> allLogs) {
|
||||||
|
BlockingInfo info = getBlockingInfo(currentLog, allLogs);
|
||||||
|
|
||||||
|
if (info != null && !info.isCompleted) {
|
||||||
|
// 阻塞步骤未完成,抛出异常回滚整个事务
|
||||||
|
String errorMsg = String.format("【%s】未完成,当前填写%d次,应填写%d次,无法流转到下一步",
|
||||||
|
info.blockingStep.getStepName(),
|
||||||
|
info.currentTimes,
|
||||||
|
info.requiredTimes);
|
||||||
|
|
||||||
|
log.warn("步骤被阻塞,阻止流转: stepId={}, stepName={}, blockingStep={}, currentTimes={}, requiredTimes={}",
|
||||||
|
currentLog.getStepId(), currentLog.getStepName(),
|
||||||
|
info.blockingStep.getStepName(), info.currentTimes, info.requiredTimes);
|
||||||
|
|
||||||
|
throw new BizException(errorMsg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 完成阻塞步骤
|
||||||
|
* 如果阻塞步骤填写次数已达标,标记为通过
|
||||||
|
*/
|
||||||
|
private void completeBlockingStep(TaskLogE blockingStep, List<TaskLogDO> actionLogs) {
|
||||||
|
// 检查阻塞步骤当前状态是否为进行中,如果是则标记为通过
|
||||||
|
if (TaskLogStatus.IN_PROGRESS.equalsCode(blockingStep.getStatus())) {
|
||||||
|
blockingStep.setStatus(TaskLogStatus.APPROVED.getCode());
|
||||||
|
addActionLog(actionLogs, blockingStep);
|
||||||
|
sendTodoCompleteEvent(blockingStep.getId());
|
||||||
|
|
||||||
|
Integer currentTimes = blockingStep.getCurrentFillTimes();
|
||||||
|
Integer requiredTimes = blockingStep.getMinFillTimes();
|
||||||
|
|
||||||
|
log.info("阻塞步骤已完成,标记为通过: stepId={}, stepName={}, currentTimes={}, requiredTimes={}",
|
||||||
|
blockingStep.getStepId(), blockingStep.getStepName(),
|
||||||
|
currentTimes != null ? currentTimes : 0,
|
||||||
|
requiredTimes != null ? requiredTimes : 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package com.zcloud.eightwork.command.query;
|
package com.zcloud.eightwork.command.query;
|
||||||
|
|
||||||
import com.alibaba.cola.dto.PageResponse;
|
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.command.convertor.MeasuresLogsCoConvertor;
|
||||||
import com.zcloud.eightwork.domain.gateway.TaskLogGateway;
|
import com.zcloud.eightwork.domain.gateway.TaskLogGateway;
|
||||||
import com.zcloud.eightwork.domain.model.TaskLogE;
|
import com.zcloud.eightwork.domain.model.TaskLogE;
|
||||||
|
|
@ -62,5 +63,12 @@ public class MeasuresLogsQueryExe {
|
||||||
});
|
});
|
||||||
return measuresLogsCOS;
|
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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.zcloud.eightwork.command.convertor.EightworkInfoCoConvertor;
|
import com.zcloud.eightwork.command.convertor.EightworkInfoCoConvertor;
|
||||||
import com.zcloud.eightwork.command.convertor.TaskLogCoConvertor;
|
import com.zcloud.eightwork.command.convertor.TaskLogCoConvertor;
|
||||||
import com.zcloud.eightwork.domain.model.TodoCountE;
|
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.TaskLogPageQry;
|
||||||
|
import com.zcloud.eightwork.dto.clientobject.BlockingStepInfoCO;
|
||||||
import com.zcloud.eightwork.dto.clientobject.EightworkInfoCO;
|
import com.zcloud.eightwork.dto.clientobject.EightworkInfoCO;
|
||||||
import com.zcloud.eightwork.dto.clientobject.TaskLogCO;
|
import com.zcloud.eightwork.dto.clientobject.TaskLogCO;
|
||||||
import com.zcloud.eightwork.dto.clientobject.TodoCountCO;
|
import com.zcloud.eightwork.dto.clientobject.TodoCountCO;
|
||||||
|
|
@ -15,6 +17,7 @@ import com.zcloud.eightwork.persistence.repository.TaskLogRepository;
|
||||||
import com.zcloud.gbscommon.utils.PageQueryHelper;
|
import com.zcloud.gbscommon.utils.PageQueryHelper;
|
||||||
import com.alibaba.cola.dto.PageResponse;
|
import com.alibaba.cola.dto.PageResponse;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
@ -30,6 +33,7 @@ import java.util.stream.Collectors;
|
||||||
* @Author fangjiakai
|
* @Author fangjiakai
|
||||||
* @Date 2025-11-05 09:53:53
|
* @Date 2025-11-05 09:53:53
|
||||||
*/
|
*/
|
||||||
|
@Slf4j
|
||||||
@Component
|
@Component
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public class TaskLogQueryExe {
|
public class TaskLogQueryExe {
|
||||||
|
|
@ -37,6 +41,8 @@ public class TaskLogQueryExe {
|
||||||
private final TaskLogCoConvertor taskLogCoConvertor;
|
private final TaskLogCoConvertor taskLogCoConvertor;
|
||||||
private final EightworkInfoRepository eightworkInfoRepository;
|
private final EightworkInfoRepository eightworkInfoRepository;
|
||||||
private final EightworkInfoCoConvertor eightworkInfoCoConvertor;
|
private final EightworkInfoCoConvertor eightworkInfoCoConvertor;
|
||||||
|
/** 持续步骤标识 */
|
||||||
|
private static final Integer ONGOING_FLAG = 1;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分页
|
* 分页
|
||||||
|
|
@ -74,9 +80,52 @@ public class TaskLogQueryExe {
|
||||||
taskLogCO.setWorkInfo(eightworkInfoCoConvertor.converDOToCO(eightworkInfoRepository.getOne(
|
taskLogCO.setWorkInfo(eightworkInfoCoConvertor.converDOToCO(eightworkInfoRepository.getOne(
|
||||||
new LambdaQueryWrapper<EightworkInfoDO>().eq(EightworkInfoDO::getWorkId, taskLogDO.getWorkId())
|
new LambdaQueryWrapper<EightworkInfoDO>().eq(EightworkInfoDO::getWorkId, taskLogDO.getWorkId())
|
||||||
)));
|
)));
|
||||||
|
|
||||||
|
// 检查是否有持续步骤阻塞当前步骤
|
||||||
|
checkBlockingStep(taskLogDO, taskLogCO);
|
||||||
|
|
||||||
return taskLogCO;
|
return taskLogCO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查是否有持续步骤阻塞当前步骤
|
||||||
|
*/
|
||||||
|
private void checkBlockingStep(TaskLogDO currentStepDO, TaskLogCO taskLogCO) {
|
||||||
|
// 查询同一工作流的所有步骤
|
||||||
|
List<TaskLogDO> allSteps = taskLogRepository.listAllByWorkId(taskLogCO.getWorkId());
|
||||||
|
|
||||||
|
if (CollectionUtils.isEmpty(allSteps)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查找阻塞当前步骤的持续步骤
|
||||||
|
for (TaskLogDO step : allSteps) {
|
||||||
|
// 检查是否为持续步骤且阻塞当前步骤
|
||||||
|
if (ONGOING_FLAG.equals(step.getOngoingFlag()) && !TaskLogStatus.SKIPPED.equalsCode(step.getStatus())
|
||||||
|
&& taskLogCO.getStepId().equals(step.getBlockingStepId())) {
|
||||||
|
// 检查填写次数是否达标
|
||||||
|
Integer currentTimes = step.getCurrentFillTimes();
|
||||||
|
Integer requiredTimes = step.getMinFillTimes();
|
||||||
|
|
||||||
|
boolean isCompleted = currentTimes != null && currentTimes >= requiredTimes;
|
||||||
|
|
||||||
|
// 设置阻塞信息
|
||||||
|
BlockingStepInfoCO blockingInfo = new BlockingStepInfoCO();
|
||||||
|
blockingInfo.setStepId(step.getStepId());
|
||||||
|
blockingInfo.setStepName(step.getStepName());
|
||||||
|
blockingInfo.setCurrentFillTimes(currentTimes != null ? currentTimes : 0);
|
||||||
|
blockingInfo.setMinFillTimes(requiredTimes != null ? requiredTimes : 0);
|
||||||
|
blockingInfo.setIsCompleted(isCompleted);
|
||||||
|
|
||||||
|
taskLogCO.setBlockingStepInfo(blockingInfo);
|
||||||
|
|
||||||
|
log.info("当前步骤被持续步骤阻塞: currentStepId={}, blockingStepId={}, currentTimes={}, requiredTimes={}",
|
||||||
|
taskLogCO.getStepId(), step.getStepId(), currentTimes, requiredTimes);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public List<TaskLogCO> listAll(String workId) {
|
public List<TaskLogCO> listAll(String workId) {
|
||||||
return taskLogCoConvertor.converDOsToCOs(taskLogRepository.listAllByWorkId(workId));
|
return taskLogCoConvertor.converDOsToCOs(taskLogRepository.listAllByWorkId(workId));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -66,5 +66,10 @@ public class MeasuresLogsServiceImpl implements MeasuresLogsServiceI {
|
||||||
public List<MeasuresLogsCO> listAll(String workId){
|
public List<MeasuresLogsCO> listAll(String workId){
|
||||||
return measuresLogsQueryExe.listAll(workId);
|
return measuresLogsQueryExe.listAll(workId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<MeasuresLogsCO> list(MeasuresLogsPageQry qry){
|
||||||
|
return measuresLogsQueryExe.list(qry);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,5 +29,7 @@ public interface MeasuresLogsServiceI {
|
||||||
void removeBatch(Long[] ids);
|
void removeBatch(Long[] ids);
|
||||||
|
|
||||||
List<MeasuresLogsCO> listAll(String workId);
|
List<MeasuresLogsCO> listAll(String workId);
|
||||||
|
|
||||||
|
List<MeasuresLogsCO> list(MeasuresLogsPageQry qry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -68,10 +68,13 @@ public class ConfinedSpaceAddCmd extends Command {
|
||||||
@NotNull(message = "最大作业人数不能为空")
|
@NotNull(message = "最大作业人数不能为空")
|
||||||
private Integer maximumNumber;
|
private Integer maximumNumber;
|
||||||
|
|
||||||
@ApiModelProperty(value = "是否有应急指导书,0否1是", name = "isEmergencyBook", required = true)
|
@ApiModelProperty(value = "是否有应急指导书,1是2否", name = "isEmergencyBook", required = true)
|
||||||
@NotNull(message = "是否有应急指导书,0否1是不能为空")
|
@NotNull(message = "是否有应急指导书,1是2否不能为空")
|
||||||
private Integer isEmergencyBook;
|
private Integer isEmergencyBook;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "应急指导书附件", name = "emergencyBookFile")
|
||||||
|
private String emergencyBookFile;
|
||||||
|
|
||||||
@ApiModelProperty(value = "位置及范围", name = "position", required = true)
|
@ApiModelProperty(value = "位置及范围", name = "position", required = true)
|
||||||
@NotEmpty(message = "位置及范围不能为空")
|
@NotEmpty(message = "位置及范围不能为空")
|
||||||
private String position;
|
private String position;
|
||||||
|
|
|
||||||
|
|
@ -63,9 +63,11 @@ public class ConfinedSpaceUpdateCmd extends Command {
|
||||||
@ApiModelProperty(value = "最大作业人数", name = "maximumNumber", required = true)
|
@ApiModelProperty(value = "最大作业人数", name = "maximumNumber", required = true)
|
||||||
@NotNull(message = "最大作业人数不能为空")
|
@NotNull(message = "最大作业人数不能为空")
|
||||||
private Integer maximumNumber;
|
private Integer maximumNumber;
|
||||||
@ApiModelProperty(value = "是否有应急指导书,0否1是", name = "isEmergencyBook", required = true)
|
@ApiModelProperty(value = "是否有应急指导书,1是2否", name = "isEmergencyBook", required = true)
|
||||||
@NotNull(message = "是否有应急指导书,0否1是不能为空")
|
@NotNull(message = "是否有应急指导书,1是2否不能为空")
|
||||||
private Integer isEmergencyBook;
|
private Integer isEmergencyBook;
|
||||||
|
@ApiModelProperty(value = "应急指导书附件", name = "emergencyBookFile")
|
||||||
|
private String emergencyBookFile;
|
||||||
@ApiModelProperty(value = "位置及范围", name = "position", required = true)
|
@ApiModelProperty(value = "位置及范围", name = "position", required = true)
|
||||||
@NotEmpty(message = "位置及范围不能为空")
|
@NotEmpty(message = "位置及范围不能为空")
|
||||||
private String position;
|
private String position;
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,8 @@ public class EightworkInfoPageQry extends PageQuery {
|
||||||
private String eqWorkType;
|
private String eqWorkType;
|
||||||
private String eqCheckNo;
|
private String eqCheckNo;
|
||||||
private Integer eqStatus;
|
private Integer eqStatus;
|
||||||
|
private String eqWorkLevel;
|
||||||
|
private String likeWorkContent;
|
||||||
private Long eqDepartmentId;
|
private Long eqDepartmentId;
|
||||||
private Long eqCreateId;
|
private Long eqCreateId;
|
||||||
private Integer eqXgfFlag;
|
private Integer eqXgfFlag;
|
||||||
|
|
@ -42,6 +44,10 @@ public class EightworkInfoPageQry extends PageQuery {
|
||||||
|
|
||||||
private String geCreateTime;
|
private String geCreateTime;
|
||||||
|
|
||||||
|
private String leWorkStartTime;
|
||||||
|
|
||||||
|
private String geWorkStartTime;
|
||||||
|
|
||||||
private String likeCreateName;
|
private String likeCreateName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package com.zcloud.eightwork.dto;
|
package com.zcloud.eightwork.dto;
|
||||||
|
|
||||||
import com.alibaba.cola.dto.Command;
|
import com.alibaba.cola.dto.Command;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
@ -26,45 +27,41 @@ public class EightworkInfoSaveDraftCmd extends Command {
|
||||||
* 主表ID(有值表示修改暂存,无值表示新建暂存)
|
* 主表ID(有值表示修改暂存,无值表示新建暂存)
|
||||||
*/
|
*/
|
||||||
@ApiModelProperty(value = "主表ID")
|
@ApiModelProperty(value = "主表ID")
|
||||||
private Long id;
|
private String workId;
|
||||||
|
|
||||||
@ApiModelProperty(value = "企业", name = "corpinfoId", required = true)
|
@ApiModelProperty(value = "企业", name = "corpinfoId", required = true)
|
||||||
@NotNull(message = "企业不能为空")
|
|
||||||
private Long corpinfoId;
|
private Long corpinfoId;
|
||||||
|
|
||||||
@ApiModelProperty(value = "是否相关方1是", name = "xgfFlag", required = true)
|
@ApiModelProperty(value = "是否相关方1是", name = "xgfFlag", required = true)
|
||||||
@NotNull(message = "是否相关方1是不能为空")
|
|
||||||
private Integer xgfFlag;
|
private Integer xgfFlag;
|
||||||
|
|
||||||
@ApiModelProperty(value = "是否内部作业1是2否", name = "internalOperationFlag")
|
@ApiModelProperty(value = "是否内部作业1是2否", name = "internalOperationFlag")
|
||||||
private Integer internalOperationFlag;
|
private Integer internalOperationFlag;
|
||||||
|
|
||||||
@ApiModelProperty(value = "所属项目", name = "projectId", required = true)
|
@ApiModelProperty(value = "所属项目", name = "projectId", required = true)
|
||||||
@NotEmpty(message = "所属项目不能为空")
|
|
||||||
private String projectId;
|
private String projectId;
|
||||||
|
|
||||||
@ApiModelProperty(value = "相关方id", name = "xgfId", required = true)
|
@ApiModelProperty(value = "相关方id", name = "xgfId", required = true)
|
||||||
@NotNull(message = "相关方id不能为空")
|
|
||||||
private Long xgfId;
|
private Long xgfId;
|
||||||
|
|
||||||
@ApiModelProperty(value = "是否需要气体检测1是2否", name = "gasFlag")
|
@ApiModelProperty(value = "是否需要气体检测1是2否", name = "gasFlag")
|
||||||
private Integer gasFlag;
|
private Integer gasFlag;
|
||||||
|
|
||||||
@ApiModelProperty(value = "工作类型", name = "workType", required = true)
|
@ApiModelProperty(value = "工作类型", name = "workType", required = true)
|
||||||
@NotEmpty(message = "工作类型不能为空")
|
|
||||||
private String workType;
|
private String workType;
|
||||||
|
|
||||||
@ApiModelProperty(value = "级别", name = "workLevel", required = true)
|
@ApiModelProperty(value = "级别", name = "workLevel", required = true)
|
||||||
@NotEmpty(message = "级别不能为空")
|
|
||||||
private String workLevel;
|
private String workLevel;
|
||||||
|
|
||||||
@ApiModelProperty(value = "详细信息", name = "info", required = true)
|
@ApiModelProperty(value = "详细信息", name = "info", required = true)
|
||||||
@NotEmpty(message = "详细信息不能为空")
|
private JSONObject info;
|
||||||
private String info;
|
|
||||||
|
|
||||||
@ApiModelProperty(value = "签字步骤", name = "signLogs")
|
@ApiModelProperty(value = "签字步骤", name = "signLogs")
|
||||||
private java.util.List<TaskSignStepInfoCmd> signLogs;
|
private java.util.List<TaskSignStepInfoCmd> signLogs;
|
||||||
|
|
||||||
@ApiModelProperty(value = "部门id", name = "departmentId")
|
@ApiModelProperty(value = "部门id", name = "departmentId")
|
||||||
private Long departmentId;
|
private Long departmentId;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "其他参数", name = "others")
|
||||||
|
private JSONObject others;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,8 @@ public class MeasuresLogsPageQry extends PageQuery {
|
||||||
* - `le`: 小于等于比较查询
|
* - `le`: 小于等于比较查询
|
||||||
* - `ne`: 不等比较查询,对应SQL的!=操作符
|
* - `ne`: 不等比较查询,对应SQL的!=操作符
|
||||||
*/
|
*/
|
||||||
private String likeWorkType;
|
private String eqWorkType;
|
||||||
|
private String eqWorkId;
|
||||||
|
private Long eqUpdateId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ import java.util.List;
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public class TaskLogAddCmd extends Command {
|
public class TaskLogAddCmd extends Command {
|
||||||
@ApiModelProperty(value = "主表ID(有值表示从暂存转正式,无值表示首次正式提交)")
|
@ApiModelProperty(value = "主表ID(有值表示从暂存转正式,无值表示首次正式提交)")
|
||||||
private Long id;
|
private String workId;
|
||||||
|
|
||||||
@ApiModelProperty(value = "任务类型", name = "workType",required = true)
|
@ApiModelProperty(value = "任务类型", name = "workType",required = true)
|
||||||
@NotBlank
|
@NotBlank
|
||||||
|
|
@ -56,6 +56,7 @@ public class TaskLogAddCmd extends Command {
|
||||||
|
|
||||||
@ApiModelProperty(value = "部门id", name = "departmentId")
|
@ApiModelProperty(value = "部门id", name = "departmentId")
|
||||||
private Long departmentId;
|
private Long departmentId;
|
||||||
|
private String departmentName;
|
||||||
@ApiModelProperty(value = "其他参数", name = "others")
|
@ApiModelProperty(value = "其他参数", name = "others")
|
||||||
private JSONObject others;
|
private JSONObject others;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -50,5 +50,8 @@ public class TaskLogNextCmd extends Command {
|
||||||
//经度
|
//经度
|
||||||
@ApiModelProperty(value = "经度")
|
@ApiModelProperty(value = "经度")
|
||||||
private String longitude;
|
private String longitude;
|
||||||
|
//附件
|
||||||
|
@ApiModelProperty(value = "附件")
|
||||||
|
private String filePath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,9 @@ public class TaskSignStepInfoCmd extends Command {
|
||||||
//步骤ID
|
//步骤ID
|
||||||
@ApiModelProperty(value = "步骤ID")
|
@ApiModelProperty(value = "步骤ID")
|
||||||
private Long stepId;
|
private Long stepId;
|
||||||
|
//步骤名
|
||||||
|
@ApiModelProperty(value = "步骤名")
|
||||||
|
private String stepName;
|
||||||
//操作人
|
//操作人
|
||||||
@ApiModelProperty(value = "操作人编码")
|
@ApiModelProperty(value = "操作人编码")
|
||||||
private String actorField;
|
private String actorField;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
@ -55,9 +55,12 @@ public class ConfinedSpaceCO extends ClientObject {
|
||||||
//最大作业人数
|
//最大作业人数
|
||||||
@ApiModelProperty(value = "最大作业人数")
|
@ApiModelProperty(value = "最大作业人数")
|
||||||
private Integer maximumNumber;
|
private Integer maximumNumber;
|
||||||
//是否有应急指导书,0否1是
|
//是否有应急指导书,1是2否
|
||||||
@ApiModelProperty(value = "是否有应急指导书,0否1是")
|
@ApiModelProperty(value = "是否有应急指导书,1是2否")
|
||||||
private Integer isEmergencyBook;
|
private Integer isEmergencyBook;
|
||||||
|
//应急指导书附件
|
||||||
|
@ApiModelProperty(value = "应急指导书附件")
|
||||||
|
private String emergencyBookFile;
|
||||||
//位置及范围
|
//位置及范围
|
||||||
@ApiModelProperty(value = "位置及范围")
|
@ApiModelProperty(value = "位置及范围")
|
||||||
private String position;
|
private String position;
|
||||||
|
|
|
||||||
|
|
@ -136,6 +136,9 @@ public class TaskLogCO extends ClientObject {
|
||||||
//经度
|
//经度
|
||||||
@ApiModelProperty(value = "经度")
|
@ApiModelProperty(value = "经度")
|
||||||
private String longitude;
|
private String longitude;
|
||||||
|
//附件
|
||||||
|
@ApiModelProperty(value = "附件")
|
||||||
|
private String filePath;
|
||||||
//其他参数(special_step_code==other 时使用)
|
//其他参数(special_step_code==other 时使用)
|
||||||
@ApiModelProperty(value = "其他参数")
|
@ApiModelProperty(value = "其他参数")
|
||||||
private String otherParams;
|
private String otherParams;
|
||||||
|
|
@ -148,5 +151,8 @@ public class TaskLogCO extends ClientObject {
|
||||||
|
|
||||||
@ApiModelProperty(value = "工作票信息")
|
@ApiModelProperty(value = "工作票信息")
|
||||||
private EightworkInfoCO workInfo;
|
private EightworkInfoCO workInfo;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "阻塞步骤信息(当前步骤被持续步骤阻塞时)")
|
||||||
|
private BlockingStepInfoCO blockingStepInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -37,8 +37,10 @@ public class ConfinedSpaceE extends BaseE {
|
||||||
private String separateSafetyMeasures;
|
private String separateSafetyMeasures;
|
||||||
//最大作业人数
|
//最大作业人数
|
||||||
private Integer maximumNumber;
|
private Integer maximumNumber;
|
||||||
//是否有应急指导书,0否1是
|
//是否有应急指导书,1是2否
|
||||||
private Integer isEmergencyBook;
|
private Integer isEmergencyBook;
|
||||||
|
//应急指导书附件
|
||||||
|
private String emergencyBookFile;
|
||||||
//位置及范围
|
//位置及范围
|
||||||
private String position;
|
private String position;
|
||||||
//所属部门
|
//所属部门
|
||||||
|
|
|
||||||
|
|
@ -93,6 +93,8 @@ public class TaskLogE extends BaseE {
|
||||||
private String latitude;
|
private String latitude;
|
||||||
//经度
|
//经度
|
||||||
private String longitude;
|
private String longitude;
|
||||||
|
//附件
|
||||||
|
private String filePath;
|
||||||
//其他参数(special_step_code==other 时使用)
|
//其他参数(special_step_code==other 时使用)
|
||||||
private String otherParams;
|
private String otherParams;
|
||||||
//手机端组件名称(special_step_code==other 时使用)
|
//手机端组件名称(special_step_code==other 时使用)
|
||||||
|
|
@ -115,6 +117,7 @@ public class TaskLogE extends BaseE {
|
||||||
this.multipleFlag = log.getMultipleFlag();
|
this.multipleFlag = log.getMultipleFlag();
|
||||||
this.stepType = log.getStepType();
|
this.stepType = log.getStepType();
|
||||||
this.signStepFlag = log.getSignStepFlag();
|
this.signStepFlag = log.getSignStepFlag();
|
||||||
|
this.selectLevel = log.getSelectLevel();
|
||||||
this.fileStepFlag = log.getFileStepFlag();
|
this.fileStepFlag = log.getFileStepFlag();
|
||||||
this.locateStepFlag = log.getLocateStepFlag();
|
this.locateStepFlag = log.getLocateStepFlag();
|
||||||
this.specialStepCode = log.getSpecialStepCode();
|
this.specialStepCode = log.getSpecialStepCode();
|
||||||
|
|
@ -132,6 +135,7 @@ public class TaskLogE extends BaseE {
|
||||||
this.currentFillTimes = log.getCurrentFillTimes();
|
this.currentFillTimes = log.getCurrentFillTimes();
|
||||||
this.latitude = log.getLatitude();
|
this.latitude = log.getLatitude();
|
||||||
this.longitude = log.getLongitude();
|
this.longitude = log.getLongitude();
|
||||||
|
this.filePath = log.getFilePath();
|
||||||
this.otherParams = log.getOtherParams();
|
this.otherParams = log.getOtherParams();
|
||||||
this.componentName = log.getComponentName();
|
this.componentName = log.getComponentName();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -57,9 +57,12 @@ public class ConfinedSpaceDO extends BaseDO {
|
||||||
//最大作业人数
|
//最大作业人数
|
||||||
@ApiModelProperty(value = "最大作业人数")
|
@ApiModelProperty(value = "最大作业人数")
|
||||||
private Integer maximumNumber;
|
private Integer maximumNumber;
|
||||||
//是否有应急指导书,0否1是
|
//是否有应急指导书,1是2否
|
||||||
@ApiModelProperty(value = "是否有应急指导书,0否1是")
|
@ApiModelProperty(value = "是否有应急指导书,1是2否")
|
||||||
private Integer isEmergencyBook;
|
private Integer isEmergencyBook;
|
||||||
|
//应急指导书附件
|
||||||
|
@ApiModelProperty(value = "应急指导书附件")
|
||||||
|
private String emergencyBookFile;
|
||||||
//位置及范围
|
//位置及范围
|
||||||
@ApiModelProperty(value = "位置及范围")
|
@ApiModelProperty(value = "位置及范围")
|
||||||
private String position;
|
private String position;
|
||||||
|
|
|
||||||
|
|
@ -62,12 +62,13 @@ public class EightworkInfoDO extends BaseDO {
|
||||||
|
|
||||||
@ApiModelProperty(value = "部门id", name = "departmentId")
|
@ApiModelProperty(value = "部门id", name = "departmentId")
|
||||||
private Long departmentId;
|
private Long departmentId;
|
||||||
|
private String departmentName;
|
||||||
|
|
||||||
public EightworkInfoDO(String workId) {
|
public EightworkInfoDO(String workId) {
|
||||||
this.workId = 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.workId = uuid;
|
||||||
this.workType = workType;
|
this.workType = workType;
|
||||||
this.workLevel = workLevel;
|
this.workLevel = workLevel;
|
||||||
|
|
@ -80,10 +81,12 @@ public class EightworkInfoDO extends BaseDO {
|
||||||
this.internalOperationFlag = internalOperationFlag;
|
this.internalOperationFlag = internalOperationFlag;
|
||||||
this.projectId = projectId;
|
this.projectId = projectId;
|
||||||
this.xgfId = xgfId;
|
this.xgfId = xgfId;
|
||||||
|
this.gasFlag = gasFlag;
|
||||||
this.checkNo = checkNo;
|
this.checkNo = checkNo;
|
||||||
this.status = status;
|
this.status = status;
|
||||||
this.info = info.toJSONString();
|
this.info = info.toJSONString();
|
||||||
this.departmentId = departmentId;
|
this.departmentId = departmentId;
|
||||||
|
this.departmentName = departmentName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
@ -133,6 +133,9 @@ public class TaskLogArchiveDO extends BaseDO {
|
||||||
//经度
|
//经度
|
||||||
@ApiModelProperty(value = "经度")
|
@ApiModelProperty(value = "经度")
|
||||||
private String longitude;
|
private String longitude;
|
||||||
|
//附件
|
||||||
|
@ApiModelProperty(value = "附件")
|
||||||
|
private String filePath;
|
||||||
//其他参数(special_step_code==other 时使用)
|
//其他参数(special_step_code==other 时使用)
|
||||||
@ApiModelProperty(value = "其他参数")
|
@ApiModelProperty(value = "其他参数")
|
||||||
private String otherParams;
|
private String otherParams;
|
||||||
|
|
|
||||||
|
|
@ -134,6 +134,9 @@ public class TaskLogDO extends BaseDO {
|
||||||
//经度
|
//经度
|
||||||
@ApiModelProperty(value = "经度")
|
@ApiModelProperty(value = "经度")
|
||||||
private String longitude;
|
private String longitude;
|
||||||
|
//附件
|
||||||
|
@ApiModelProperty(value = "附件")
|
||||||
|
private String filePath;
|
||||||
//其他参数(special_step_code==other 时使用)
|
//其他参数(special_step_code==other 时使用)
|
||||||
@ApiModelProperty(value = "其他参数")
|
@ApiModelProperty(value = "其他参数")
|
||||||
private String otherParams;
|
private String otherParams;
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package com.zcloud.eightwork.persistence.mapper;
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.zcloud.eightwork.persistence.dataobject.EightworkSupplementaryInfoDO;
|
import com.zcloud.eightwork.persistence.dataobject.EightworkSupplementaryInfoDO;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* web-infrastructure
|
* web-infrastructure
|
||||||
|
|
@ -13,5 +14,12 @@ import org.apache.ibatis.annotations.Mapper;
|
||||||
@Mapper
|
@Mapper
|
||||||
public interface EightworkSupplementaryInfoMapper extends BaseMapper<EightworkSupplementaryInfoDO> {
|
public interface EightworkSupplementaryInfoMapper extends BaseMapper<EightworkSupplementaryInfoDO> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 物理删除指定 workId 的所有记录
|
||||||
|
*
|
||||||
|
* @param workId 作业ID
|
||||||
|
* @return 删除的记录数
|
||||||
|
*/
|
||||||
|
int physicalDeleteByWorkId(@Param("workId") String workId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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> {
|
||||||
|
}
|
||||||
|
|
@ -3,6 +3,7 @@ package com.zcloud.eightwork.persistence.mapper;
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.zcloud.eightwork.persistence.dataobject.MeasuresLogsDO;
|
import com.zcloud.eightwork.persistence.dataobject.MeasuresLogsDO;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* web-infrastructure
|
* web-infrastructure
|
||||||
|
|
@ -12,5 +13,11 @@ import org.apache.ibatis.annotations.Mapper;
|
||||||
@Mapper
|
@Mapper
|
||||||
public interface MeasuresLogsMapper extends BaseMapper<MeasuresLogsDO> {
|
public interface MeasuresLogsMapper extends BaseMapper<MeasuresLogsDO> {
|
||||||
|
|
||||||
}
|
/**
|
||||||
|
* 物理删除指定 workId 的所有记录
|
||||||
|
*
|
||||||
|
* @param workId 作业ID
|
||||||
|
* @return 删除的记录数
|
||||||
|
*/
|
||||||
|
int physicalDeleteByWorkId(@Param("workId") String workId);
|
||||||
|
}
|
||||||
|
|
@ -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);
|
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);
|
TaskLogDO getByWorkIdAndStepId(@Param("workId") String workId, @Param("stepId") Long stepId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 物理删除指定 workId 的所有记录
|
||||||
|
*
|
||||||
|
* @param workId 作业ID
|
||||||
|
* @return 删除的记录数
|
||||||
|
*/
|
||||||
|
int physicalDeleteByWorkId(@Param("workId") String workId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,5 +17,13 @@ public interface EightworkSupplementaryInfoRepository extends BaseRepository<Eig
|
||||||
PageResponse<EightworkSupplementaryInfoDO> listPage(Map<String, Object> params);
|
PageResponse<EightworkSupplementaryInfoDO> listPage(Map<String, Object> params);
|
||||||
|
|
||||||
List<EightworkSupplementaryInfoDO> listAll(String workId);
|
List<EightworkSupplementaryInfoDO> listAll(String workId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 物理删除指定 workId 的所有记录
|
||||||
|
*
|
||||||
|
* @param workId 作业ID
|
||||||
|
* @return 删除的记录数
|
||||||
|
*/
|
||||||
|
int physicalDeleteByWorkId(String workId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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> {
|
||||||
|
}
|
||||||
|
|
@ -16,5 +16,13 @@ public interface MeasuresLogsRepository extends BaseRepository<MeasuresLogsDO> {
|
||||||
PageResponse<MeasuresLogsDO> listPage(Map<String,Object> params);
|
PageResponse<MeasuresLogsDO> listPage(Map<String,Object> params);
|
||||||
|
|
||||||
List<MeasuresLogsDO> listAll(String workId);
|
List<MeasuresLogsDO> listAll(String workId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 物理删除指定 workId 的所有记录
|
||||||
|
*
|
||||||
|
* @param workId 作业ID
|
||||||
|
* @return 删除的记录数
|
||||||
|
*/
|
||||||
|
int physicalDeleteByWorkId(String workId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,5 +26,13 @@ public interface TaskLogRepository extends BaseRepository<TaskLogDO> {
|
||||||
List<TodoCountE> getTodoCountForWork(Long orgId, Long userId, String workType);
|
List<TodoCountE> getTodoCountForWork(Long orgId, Long userId, String workType);
|
||||||
|
|
||||||
TaskLogDO getByWorkIdAndStepId(String workId, Long stepId);
|
TaskLogDO getByWorkIdAndStepId(String workId, Long stepId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 物理删除指定 workId 的所有记录
|
||||||
|
*
|
||||||
|
* @param workId 作业ID
|
||||||
|
* @return 删除的记录数
|
||||||
|
*/
|
||||||
|
int physicalDeleteByWorkId(String workId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -44,5 +44,11 @@ public class EightworkSupplementaryInfoRepositoryImpl extends BaseRepositoryImpl
|
||||||
queryWrapper.eq(EightworkSupplementaryInfoDO::getWorkId, workId);
|
queryWrapper.eq(EightworkSupplementaryInfoDO::getWorkId, workId);
|
||||||
return list(queryWrapper);
|
return list(queryWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int physicalDeleteByWorkId(String workId) {
|
||||||
|
// 使用 Mapper 中定义的物理删除 SQL
|
||||||
|
return eightworkSupplementaryInfoMapper.physicalDeleteByWorkId(workId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
}
|
||||||
|
|
@ -46,5 +46,11 @@ public class MeasuresLogsRepositoryImpl extends BaseRepositoryImpl<MeasuresLogsM
|
||||||
queryWrapper.orderByAsc(MeasuresLogsDO::getCreateTime);
|
queryWrapper.orderByAsc(MeasuresLogsDO::getCreateTime);
|
||||||
return list(queryWrapper);
|
return list(queryWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int physicalDeleteByWorkId(String workId) {
|
||||||
|
// 使用 Mapper 中定义的物理删除 SQL
|
||||||
|
return measuresLogsMapper.physicalDeleteByWorkId(workId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -63,5 +63,11 @@ public class TaskLogRepositoryImpl extends BaseRepositoryImpl<TaskLogMapper, Tas
|
||||||
public TaskLogDO getByWorkIdAndStepId(String workId, Long stepId) {
|
public TaskLogDO getByWorkIdAndStepId(String workId, Long stepId) {
|
||||||
return taskLogMapper.getByWorkIdAndStepId(workId, stepId);
|
return taskLogMapper.getByWorkIdAndStepId(workId, stepId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int physicalDeleteByWorkId(String workId) {
|
||||||
|
// 使用 Mapper 中定义的物理删除 SQL
|
||||||
|
return taskLogMapper.physicalDeleteByWorkId(workId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
select t.*
|
select t.*
|
||||||
from eightwork_info t
|
from eightwork_info t
|
||||||
where t.delete_enum = 'FALSE'
|
where t.delete_enum = 'FALSE'
|
||||||
|
and t.status != 0
|
||||||
<if test="params.eqWorkType != null and params.eqWorkType != ''">
|
<if test="params.eqWorkType != null and params.eqWorkType != ''">
|
||||||
and t.work_type = #{params.eqWorkType}
|
and t.work_type = #{params.eqWorkType}
|
||||||
</if>
|
</if>
|
||||||
|
|
@ -16,6 +17,9 @@
|
||||||
<if test="params.eqStatus != null">
|
<if test="params.eqStatus != null">
|
||||||
and t.status = #{params.eqStatus}
|
and t.status = #{params.eqStatus}
|
||||||
</if>
|
</if>
|
||||||
|
<if test="params.eqWorkLevel != null and params.eqWorkLevel != ''">
|
||||||
|
and t.work_level = #{params.eqWorkLevel}
|
||||||
|
</if>
|
||||||
<if test="params.eqDepartmentId != null">
|
<if test="params.eqDepartmentId != null">
|
||||||
and t.department_id = #{params.eqDepartmentId}
|
and t.department_id = #{params.eqDepartmentId}
|
||||||
</if>
|
</if>
|
||||||
|
|
@ -31,6 +35,7 @@
|
||||||
<if test="params.eqProjectId != null and params.eqProjectId != ''">
|
<if test="params.eqProjectId != null and params.eqProjectId != ''">
|
||||||
and t.project_id = #{params.eqProjectId}
|
and t.project_id = #{params.eqProjectId}
|
||||||
</if>
|
</if>
|
||||||
|
|
||||||
<if test="params.eqWorkDepartmentId != null">
|
<if test="params.eqWorkDepartmentId != null">
|
||||||
and exists (select 1
|
and exists (select 1
|
||||||
from task_log log
|
from task_log log
|
||||||
|
|
@ -58,6 +63,15 @@
|
||||||
<if test="params.likeCreateName != null and params.likeCreateName != ''">
|
<if test="params.likeCreateName != null and params.likeCreateName != ''">
|
||||||
and t.create_name like concat('%', #{params.likeCreateName}, '%')
|
and t.create_name like concat('%', #{params.likeCreateName}, '%')
|
||||||
</if>
|
</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' >= #{params.geWorkStartTime}
|
||||||
|
</if>
|
||||||
|
<if test="params.leWorkStartTime != null and params.leWorkStartTime != ''">
|
||||||
|
and t.info->>'$.workStartTime' <= #{params.leWorkStartTime}
|
||||||
|
</if>
|
||||||
<if test="params.eqCurrentStepId != null">
|
<if test="params.eqCurrentStepId != null">
|
||||||
and exists (select 1
|
and exists (select 1
|
||||||
from task_log log
|
from task_log log
|
||||||
|
|
|
||||||
|
|
@ -4,5 +4,9 @@
|
||||||
|
|
||||||
<mapper namespace="com.zcloud.eightwork.persistence.mapper.EightworkSupplementaryInfoMapper">
|
<mapper namespace="com.zcloud.eightwork.persistence.mapper.EightworkSupplementaryInfoMapper">
|
||||||
|
|
||||||
|
<delete id="physicalDeleteByWorkId">
|
||||||
|
DELETE FROM eightwork_supplementary_info WHERE work_id = #{workId}
|
||||||
|
</delete>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -4,5 +4,9 @@
|
||||||
|
|
||||||
<mapper namespace="com.zcloud.eightwork.persistence.mapper.MeasuresLogsMapper">
|
<mapper namespace="com.zcloud.eightwork.persistence.mapper.MeasuresLogsMapper">
|
||||||
|
|
||||||
|
<delete id="physicalDeleteByWorkId">
|
||||||
|
DELETE FROM measures_logs WHERE work_id = #{workId}
|
||||||
|
</delete>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,25 +5,30 @@
|
||||||
<mapper namespace="com.zcloud.eightwork.persistence.mapper.TaskLogMapper">
|
<mapper namespace="com.zcloud.eightwork.persistence.mapper.TaskLogMapper">
|
||||||
|
|
||||||
<select id="getTodoCount" resultType="com.zcloud.eightwork.domain.model.TodoCountE">
|
<select id="getTodoCount" resultType="com.zcloud.eightwork.domain.model.TodoCountE">
|
||||||
select work_type,
|
select task_log.work_type,
|
||||||
count(1) as todoCount
|
count(1) as todoCount
|
||||||
from task_log
|
from task_log
|
||||||
where status = 0
|
left join eightwork_info on task_log.work_id = eightwork_info.work_id
|
||||||
and (act_user = #{userId}
|
where task_log.status = 0
|
||||||
or (act_user_department = #{orgId} and act_user is null))
|
and eightwork_info.status != 0
|
||||||
group by work_type
|
and (task_log.act_user = #{userId}
|
||||||
|
or (task_log.act_user_department = #{orgId} and task_log.act_user is null))
|
||||||
|
group by task_log.work_type
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="getTodoCountForWork" resultType="com.zcloud.eightwork.domain.model.TodoCountE">
|
<select id="getTodoCountForWork" resultType="com.zcloud.eightwork.domain.model.TodoCountE">
|
||||||
select work_type,
|
select task_log.work_type,
|
||||||
step_id,
|
task_log.step_id,
|
||||||
count(1) as todoCount
|
count(1) as todoCount
|
||||||
from task_log
|
from task_log
|
||||||
where status = 0
|
left join eightwork_info on task_log.work_id = eightwork_info.work_id
|
||||||
and work_type = #{workType}
|
where task_log.status = 0
|
||||||
and (act_user = #{userId}
|
and task_log.work_type = #{workType}
|
||||||
or (act_user_department = #{orgId} and act_user is null))
|
and eightwork_info.status != 0
|
||||||
group by step_id
|
and (task_log.act_user = #{userId}
|
||||||
|
or (task_log.act_user_department = #{orgId}
|
||||||
|
and task_log.act_user is null))
|
||||||
|
group by task_log.step_id
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="getByWorkIdAndStepId" resultType="com.zcloud.eightwork.persistence.dataobject.TaskLogDO">
|
<select id="getByWorkIdAndStepId" resultType="com.zcloud.eightwork.persistence.dataobject.TaskLogDO">
|
||||||
|
|
@ -33,5 +38,9 @@
|
||||||
and step_id = #{stepId}
|
and step_id = #{stepId}
|
||||||
limit 1
|
limit 1
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<delete id="physicalDeleteByWorkId">
|
||||||
|
DELETE FROM task_log WHERE work_id = #{workId}
|
||||||
|
</delete>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue