yangys
2025-08-06 d36af1e4c9f7601b97dac825744a0df2b809f0b9
固化流程,建立node;OK
已修改4个文件
64 ■■■■ 文件已修改
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowCommonService.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/cure/CureFinishOperateTask.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DNCSendBackService.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/resources/processesbpmn/program-cure.bpmn20.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
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"/>