|
|
@@ -8,6 +8,7 @@ import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
|
|
import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workflowwork.vo.WorkflowWorkPageReqVO;
|
|
|
import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workflowwork.vo.WorkflowWorkRespVO;
|
|
|
import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workflowwork.vo.WorkflowWorkSaveReqVO;
|
|
|
+import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workflowworknode.vo.StartWorkVO;
|
|
|
import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workflowworknode.vo.WorkflowWorkNodeRespVO;
|
|
|
import cn.iocoder.yudao.module.iscs.dal.dataobject.workdesign.WorkflowDesignDO;
|
|
|
import cn.iocoder.yudao.module.iscs.dal.dataobject.workdesign.WorkflowWorkDO;
|
|
|
@@ -17,10 +18,13 @@ import cn.iocoder.yudao.module.iscs.dal.mysql.workdesign.WorkflowWorkMapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import jakarta.annotation.Resource;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.validation.annotation.Validated;
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@@ -143,4 +147,56 @@ public class WorkflowWorkServiceImpl extends ServiceImpl<WorkflowWorkMapper, Wor
|
|
|
return workflowWorkMapper.selectPage(pageReqVO);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public List<String> checkWorkById(Long id) {
|
|
|
+ Assert.notNull(id, "请告知需要检查的ID!");
|
|
|
+ List<WorkflowWorkNodeDO> list = workflowWorkNodeService.list(Wrappers.<WorkflowWorkNodeDO>lambdaQuery()
|
|
|
+ .eq(WorkflowWorkNodeDO::getWorkId, id));
|
|
|
+ List<String> mes = new ArrayList<>();
|
|
|
+ if (!list.isEmpty()) {
|
|
|
+ // 1.检查负责人和负责人组同时为空的
|
|
|
+ List<WorkflowWorkNodeDO> list1 = list.stream().filter(o -> o.getWorkerUserId() == null
|
|
|
+ && o.getWorkerGroupId() == null && !"createJob".equals(o.getType())
|
|
|
+ && !"1".equals(o.getIsolationType())).toList();
|
|
|
+ list1.forEach( o -> mes.add("节点[" + o.getNodeName() + "]:未选择负责人/负责人组" ));
|
|
|
+
|
|
|
+ // 2.检查isolation类型的隔离点位数据是否为空
|
|
|
+ List<WorkflowWorkNodeDO> list2 = list.stream().filter(o -> "isolation".equals(o.getType()) && StringUtils.isBlank(o.getIsolationPoints())).toList();
|
|
|
+ list2.forEach( o -> mes.add("节点[" + o.getNodeName() + "]:未选择隔离点" ));
|
|
|
+
|
|
|
+ // 3.检查isolation类型的隔离方式是否为空
|
|
|
+ List<WorkflowWorkNodeDO> list3 = list.stream().filter(o -> "isolation".equals(o.getType()) && StringUtils.isBlank(o.getIsolationType())).toList();
|
|
|
+ list3.forEach( o -> mes.add("节点[" + o.getNodeName() + "]:未选择隔离方式" ));
|
|
|
+ }
|
|
|
+ return mes;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional
|
|
|
+ @Override
|
|
|
+ public Boolean updateStartWork(StartWorkVO vo) {
|
|
|
+ Assert.notNull(vo.getWorkId(), "作业ID不能为空!");
|
|
|
+ Assert.notNull(vo.getStartType(), "发布方式不能为空!");
|
|
|
+ Assert.isFalse("1".equals(vo.getStartType()) && vo.getPlanTime() == null, "时间不能为空!");
|
|
|
+
|
|
|
+ if ("1".equals(vo.getStartType())) {
|
|
|
+ // 1.定时
|
|
|
+ update(Wrappers.<WorkflowWorkDO>lambdaUpdate()
|
|
|
+ .eq(WorkflowWorkDO::getId, vo.getWorkId())
|
|
|
+ .set(WorkflowWorkDO::getPlanTime, vo.getPlanTime())
|
|
|
+ .set(WorkflowWorkDO::getStatus, "scheduled"));
|
|
|
+ } else {
|
|
|
+ // 2.立即
|
|
|
+ update(Wrappers.<WorkflowWorkDO>lambdaUpdate()
|
|
|
+ .eq(WorkflowWorkDO::getId, vo.getWorkId())
|
|
|
+ .set(WorkflowWorkDO::getStatus, "pending"));
|
|
|
+ // 开始更新node
|
|
|
+ workflowWorkNodeService.update(Wrappers.<WorkflowWorkNodeDO>lambdaUpdate()
|
|
|
+ .eq(WorkflowWorkNodeDO::getWorkId, vo.getWorkId())
|
|
|
+ .and(o -> o.isNull(WorkflowWorkNodeDO::getParentUuid).or().eq(WorkflowWorkNodeDO::getParentUuid, ""))
|
|
|
+ .set(WorkflowWorkNodeDO::getApprovalStatus, "unaudited")
|
|
|
+ .set(WorkflowWorkNodeDO::getStartTime, LocalDateTime.now()));
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
}
|