blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowCommonService.java
@@ -1,7 +1,9 @@ package org.springblade.mdm.flow.service; import lombok.AllArgsConstructor; import org.flowable.engine.HistoryService; import org.flowable.engine.RuntimeService; import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.runtime.ProcessInstance; import org.springblade.mdm.flow.constants.FlowContants; import org.springframework.stereotype.Service; @@ -12,7 +14,7 @@ @Service public class FlowCommonService { private final RuntimeService runtimeService; private final HistoryService historyService; /** * 根据流程实例id获取definitionKey * @param processInstanceId @@ -58,4 +60,28 @@ return programProperties; } /** * 流程是否在进行 * @param processInstanceId 实例id */ public boolean isProcessInstanceActive(String processInstanceId) { if(processInstanceId == null){ return false; } // 先查运行时表 ProcessInstance instance = runtimeService.createProcessInstanceQuery() .processInstanceId(processInstanceId) .singleResult(); if (instance != null) { return true; } // 再查历史表确认是否曾经存在 HistoricProcessInstance historicInstance = historyService.createHistoricProcessInstanceQuery() .processInstanceId(processInstanceId) .singleResult(); return historicInstance != null && historicInstance.getEndTime() == null; } } blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/cure/CureFinishOperateTask.java
@@ -62,15 +62,15 @@ if(!hisNode.getId().equals(pkgNode.getId())){ hisNode.setIsLastEdition(0); } hisNode.setParentId(machineNode.getParentId()); hisNode.setParentId(machineNode.getId()); hisNode.setParentIds(newParentIds); //处理程序包下层的程序节点 List<NcNode> pragramNodes = nodeService.lambdaQuery().eq(NcNode::getParentId,hisNode.getId()).list(); for(NcNode pragramNode : pragramNodes){ pragramNode.setParentIds(hisNode.getParentIds()+","+hisNode.getId()); List<NcNode> programNodes = nodeService.lambdaQuery().eq(NcNode::getParentId,hisNode.getId()).list(); for(NcNode programNode : programNodes){ programNode.setParentIds(hisNode.getParentIds()+","+hisNode.getId()); } nodeService.updateBatchById(pragramNodes); nodeService.updateBatchById(programNodes); } nodeService.updateBatchById(historyNodes); blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DNCSendBackService.java
@@ -17,6 +17,7 @@ import org.springblade.core.tool.utils.Func; import org.springblade.mdm.flow.entity.FlowProgramFile; import org.springblade.mdm.flow.service.CureFlowService; import org.springblade.mdm.flow.service.FlowCommonService; import org.springblade.mdm.flow.service.FlowProgramFileService; import org.springblade.mdm.program.entity.NcNode; import org.springblade.mdm.program.entity.NcProgramExchange; @@ -50,6 +51,7 @@ private final NcNodeService ncNodeService; private final OssTemplate ossTemplate; private final BladeRedis bladeRedis; private final FlowCommonService flowCommonService; private String getFileKey(){ return "dncexpfile-"+ AuthUtil.getUserId(); @@ -69,7 +71,7 @@ InputStream zipFileInputStream = file.getInputStream();//test //byte[] bytes = FileUtil.copyToByteArray(zipFileInputStream); list = parseDncZipFromByteArray(zipFileInputStream); list = parseProgramListFromZip(zipFileInputStream); } catch (IOException e) { log.error("上传dnc回传文件失败",e); @@ -85,7 +87,7 @@ * @return 回传程序列表 * @throws IOException 文件操作异常 */ List<DncSendBackData> parseDncZipFromByteArray(InputStream inputStream) throws IOException { List<DncSendBackData> parseProgramListFromZip(InputStream inputStream) throws IOException { List<DncSendBackData> list = new ArrayList<>(); Path tempZipFile = createTempFile(inputStream); @@ -101,16 +103,17 @@ //目录,才是程序包, //查询数据库,对应上才能确认时有效的程序包 String packageName = StringUtils.removeEnd(entryName,"/"); List<NcNode> pkgList = ncNodeService.lambdaQuery().eq(NcNode::getNodeType,NcNode.TYPE_PROGRAM_PACKAGE).eq(NcNode::getName, packageName).eq(NcNode::getIsLastEdition,1).list(); if(!pkgList.isEmpty()) { NcNode programPackageNode = pkgList.get(0); NcNode programPackageNode = ncNodeService.getLastEditionProgramPackage(packageName); //List<NcNode> pkgList = ncNodeService.lambdaQuery().eq(NcNode::getNodeType,NcNode.TYPE_PROGRAM_PACKAGE).eq(NcNode::getName, packageName).eq(NcNode::getIsLastEdition,1).list(); //if(!pkgList.isEmpty()) { //NcNode programPackageNode = pkgList.get(0); progData.setId(programPackageNode.getId()); progData.setProgramName(packageName); progData.setFileBackTime(DateUtil.fromInstant(entry.getLastModifiedTime().toInstant())); progData.setProgramNo(programPackageNode.getProgramNo()); list.add(progData); } //} } } @@ -179,10 +182,15 @@ NcNode oriProgramPkg = this.ncNodeService.getLastEditionProgramPackage(programPackageName); if(oriProgramPkg == null){ log.warn("未发现匹配的程序包名{}",programPackageName); log.warn("文件夹未发现匹配的程序包名{}",dir); continue; } //检查是否在审批过程中 //根据节点信息查询流程 boolean active = flowCommonService.isProcessInstanceActive(oriProgramPkg.getProcessInstanceId()); if(active){ throw new ServiceException(programPackageName+"正在审批中,请勿重复入库。"); } if(!programPackageIdList.contains(oriProgramPkg.getId())){ //不在勾选的范围内 log.info("{}不在勾选范围内",programPackageName); blade-service/blade-mdm/src/main/resources/processesbpmn/program-cure.bpmn20.xml
@@ -27,7 +27,7 @@ <sequenceFlow id="sid-c04cc547-0baf-4514-8056-54b1612cdefd" sourceRef="seniorApproveTask" targetRef="cureCheckTask"> <conditionExpression>${approve=='N'}</conditionExpression> </sequenceFlow> <serviceTask id="cureOKOperateTask" flowable:exclusive="true" name="固化处理任务" flowable:expression="cureFinishOperateTask.execute(execution)"> <serviceTask id="cureOKOperateTask" flowable:exclusive="true" name="固化处理任务" flowable:expression="${cureFinishOperateTask.execute(execution)}"> <documentation>设置数据的固化标志,生成固化程序列表</documentation> </serviceTask> <sequenceFlow id="sid-253f5be1-3275-47d6-a3a1-5d1eaf01ec79" sourceRef="cureOKOperateTask" targetRef="end"/>