blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java
@@ -59,8 +59,6 @@ vars.put(FlowContants.ASSIGNEE,div.getTeamLeaderId());//第ä¸ä¸ªç¨æ·ç»é¿ vars.put(FlowContants.TITLE,startVO.getTitle()); //ä¸´æ¶æµç¨æ å¿ï¼æç¡®æå®Yï¼å±äºä¸´æ¶æµç¨ //æºåºç¼å· vars.put(FlowContants.MACHINE_CODE,startVO.getMachineCode()); String workshop = nodeDeptQueryService.getWorkshopNameByMachineCode(startVO.getMachineCode()); @@ -86,8 +84,9 @@ vars.put(FlowContants.IS_TEMP_FLOW,FlowContants.Y.equals(startVO.getIsTempFlow())?FlowContants.Y:FlowContants.N); NcNode curedProgramPackage = null; if(!FlowContants.Y.equals(startVO.getIsTempFlow())) { curedProgramPackage = ncNodeService.getCuredProgramPackage(programPkgName, startVO.getMachineCode()); if(!startVO.isTemporaryFlow() && !startVO.isDeviationFlow()) { //æ£å¸¸æµç¨(éä¸´æ¶æµç¨) ä¸ä¸æ¯ å离å,æå¹é åºåç¨åº curedProgramPackage = ncNodeService.getCuredProgramPackage(programPkgName,startVO.getProcessEdition(), startVO.getMachineCode()); //设置æ¯å¦æåºåç¨åºæ è®° vars.put(FlowContants.HAS_CURED_PROGRAM, curedProgramPackage != null ? FlowContants.Y : FlowContants.N); //å·¥åºç次æ¯å¦ä¸è´ï¼æ¯å¦å¨æææå blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/CureFinishOperateTask.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,96 @@ package org.springblade.mdm.flow.excution.cure; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; import org.flowable.engine.delegate.DelegateExecution; import org.springblade.core.oss.OssTemplate; import org.springblade.core.oss.model.BladeFile; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.DateUtil; import org.springblade.mdm.basesetting.machine.MachineService; import org.springblade.mdm.basesetting.machine.entity.Machine; import org.springblade.mdm.commons.contants.ParamConstants; import org.springblade.mdm.flow.entity.FlowProgramFile; import org.springblade.mdm.flow.excution.dispatch.FinishDataHandler; import org.springblade.mdm.flow.service.FlowCommonService; import org.springblade.mdm.flow.service.FlowProgramFileService; import org.springblade.mdm.flow.service.FlowProgramProperties; import org.springblade.mdm.program.entity.NcNode; import org.springblade.mdm.program.service.NcNodeAutoCreateService; import org.springblade.mdm.program.service.NcNodeService; import org.springblade.mdm.program.service.ProgramAnnotationService; import org.springblade.system.feign.ISysClient; import org.springblade.system.pojo.entity.DictBiz; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.time.LocalDate; import java.util.Arrays; import java.util.Date; import java.util.List; @Slf4j @Component("cureFinishOperateTask") @AllArgsConstructor public class CureFinishOperateTask { private final NcNodeService nodeService; private final NcNodeAutoCreateService ncNodeAutoCreateService; private final FlowCommonService flowCommonService; private final FlowProgramFileService flowProgramFileService; private final ISysClient sysClient; private final OssTemplate ossTemplate; private final NormalCureFinishDataHandler normalCureFinishDataHandler; private final DeviationCureFinishDataHandler deviationCureFinishDataHandler; private final NcNodeService ncNodeService; /** * åºå审æ¹éè¿å¤çä»»å¡ï¼ * * @param execution æµç¨execution */ @Transactional public void execute(DelegateExecution execution) throws IOException { log.info("æ§è¡åºåç¨åºä»»å¡æå¡,æµç¨å®ä¾id={}", execution.getProcessInstanceId()); //åºåç¨åºæ£æ¥æææï¼ dealWithNode(execution.getProcessInstanceId()); } /** * å¤çnodeç¶æã * * @param processInstanceId æµç¨å®ä¾id */ void dealWithNode(String processInstanceId) throws IOException { //ç¨åºå èç¹åä¸å±ç¨åºèç¹(å æ¬åå²èç¹éææ°çæ¬ç)ä»è¯åæªå°åºåä¸é¢ //ç¨åºå èç¹ è®¾ç½®æªå·²åºå NcNode pkgNode = nodeService.lambdaQuery().eq(NcNode::getProcessInstanceId, processInstanceId).one(); FlowProgramProperties flowProps = flowCommonService.getProgramProperties(processInstanceId); getDataHandler(pkgNode).handleData(flowProps); } /** * è·åæ°æ®å¤çå ¶ * @param pkgNode * @return */ FinishDataHandler getDataHandler(NcNode pkgNode) { if (pkgNode.isDeviationProgram()) { return deviationCureFinishDataHandler; }else{ return normalCureFinishDataHandler; } } } blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/DeviationCureFinishDataHandler.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,132 @@ package org.springblade.mdm.flow.excution.cure; import lombok.extern.slf4j.Slf4j; import org.springblade.core.tool.utils.Func; import org.springblade.mdm.basesetting.machine.MachineService; import org.springblade.mdm.flow.constants.FlowContants; import org.springblade.mdm.flow.entity.ApproveRecord; import org.springblade.mdm.flow.entity.FlowProgramFile; import org.springblade.mdm.flow.excution.dispatch.FinishDataHandler; import org.springblade.mdm.flow.service.ApproveRecordService; import org.springblade.mdm.flow.service.FlowProgramFileService; import org.springblade.mdm.flow.service.FlowProgramProperties; import org.springblade.mdm.program.entity.NcNode; import org.springblade.mdm.program.entity.NcProgramApproved; import org.springblade.mdm.program.service.NcNodeAutoCreateService; import org.springblade.mdm.program.service.NcNodeService; import org.springblade.mdm.program.service.NcProgramApprovedService; import org.springblade.mdm.utils.EntityUtil; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.List; /** * å离ååºåå®ææ°æ®å¤çå¨ï¼åè½ï¼æ¢³çæ èç¹ */ @Slf4j @Component("deviationCureFinishDataHandler") public class DeviationCureFinishDataHandler implements FinishDataHandler { @Autowired private NcProgramApprovedService approvedService; @Autowired private ApproveRecordService approveRecordService; @Autowired private FlowProgramFileService flowProgramFileService; @Autowired private NcNodeService nodeService; @Autowired private NcNodeAutoCreateService ncNodeAutoCreateService; @Autowired private MachineService machineService; /** * cureFinishOperateTaskè°ç¨ * @param props 屿§ */ public void handleData(FlowProgramProperties props) { // æ§è¡ä¸å¡é»è¾ String instId = props.getProcessInstanceId(); NcNode pkgNode = nodeService.lambdaQuery().eq(NcNode::getProcessInstanceId, props.getProcessInstanceId()).one(); pkgNode.lock(); pkgNode.setIsLastEdition(0); nodeService.updateById(pkgNode); NcNode newPkgNode = new NcNode(); BeanUtils.copyProperties(pkgNode, newPkgNode); EntityUtil.clearBaseProperties(newPkgNode); newPkgNode.setIsLastEdition(1); newPkgNode.upgradeVersionNumber(); nodeService.save(newPkgNode); //å¤çç¨åºå ä¸å±çç¨åºèç¹111 List<NcNode> oriProgramNodes = nodeService.lambdaQuery().eq(NcNode::getParentId,pkgNode.getId()).list(); FlowProgramFile pfile; for(NcNode programNode : oriProgramNodes){ programNode.setIsLastEdition(0); programNode.setVersionNumber(newPkgNode.getVersionNumber()); pfile = flowProgramFileService.getById(programNode.getFlowProgramFileId()); if(!pfile.isProgram()){ //å½ååºåç¨åºå åä¸çâå ¶ä»æä»¶âéç¨åºæä»¶ãä¸è®¾ç½®ä¸ºèçæ¬ï¼ç´æ¥æªå°åºåæ ä¸,两个ç½ç»ä¹é´åªäº¤æ¢ç¨åºæä»¶ï¼å ¶ä»æä»¶åªè½ä¿ç programNode.setIsLastEdition(1); } } nodeService.updateBatchById(oriProgramNodes); //æ°çæä»¶ä½ä¸ºææ°çæ¬ List<FlowProgramFile> files = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId,pkgNode.getProcessInstanceId()).list(); for(FlowProgramFile flowProgramFile : files){ NcNode newProgNode = new NcNode(); BeanUtils.copyProperties(newPkgNode, newProgNode); EntityUtil.clearBaseProperties(newProgNode); newProgNode.setName(flowProgramFile.getName()); newProgNode.setNodeType(NcNode.TYPE_PROGRAM_FILE); newProgNode.setParentId(newPkgNode.getId()); newProgNode.setParentIds(newPkgNode.getParentIds()+","+newPkgNode.getId()); newProgNode.setIsLastEdition(1); newProgNode.setVersionNumber(newPkgNode.getVersionNumber()); newProgNode.setFlowProgramFileId(flowProgramFile.getId()); newProgNode.setIsCured(0); nodeService.save(newProgNode); //ä¿®æ¹æä»¶å å®¹æ´æ°æ³¨éï¼å¹¶æ´æ°æä»¶æ°æ®çå°å //setGhAnnotation(flowProgramFile,machine.getMachineGroupCode(),annoDicts); //flowProgramFileService.updateById(flowProgramFile); } addApproveTable(pkgNode,props); updateApproveRecordNodeId(instId, pkgNode.getId()); log.info("å离åä¼ Listener宿"); } /** * ä¿å审æ¹å®æçè®°å½ * @param packageNode * @param props */ void addApproveTable(NcNode packageNode,FlowProgramProperties props){ NcProgramApproved approved = new NcProgramApproved(); approved.setProgramName(packageNode.getName()); approved.setNcNodeId(packageNode.getId());//ç¨åºå èç¹id approved.setTitle(props.getTitle()); approved.setProgrammerId(props.getProgrammerId()); approvedService.save(approved); } void updateApproveRecordNodeId(String processInstanceId,Long nodeId){ //æ´æ°å®¡æ¹è®°å½çncNodeId approveRecordService.lambdaUpdate() .eq(ApproveRecord::getProcessInstanceId, processInstanceId) .set(ApproveRecord::getNcNodeId,nodeId).update(); } } blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/NormalCureFinishDataHandler.java
ÎļþÃû´Ó blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/cure/CureFinishOperateTask.java ÐÞ¸Ä @@ -1,30 +1,35 @@ package org.springblade.mdm.flow.task.cure; package org.springblade.mdm.flow.excution.cure; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; import org.flowable.engine.delegate.DelegateExecution; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.oss.OssTemplate; import org.springblade.core.oss.model.BladeFile; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springblade.mdm.basesetting.machine.MachineService; import org.springblade.mdm.basesetting.machine.entity.Machine; import org.springblade.mdm.commons.contants.ParamConstants; import org.springblade.mdm.flow.constants.FlowContants; import org.springblade.mdm.flow.entity.ApproveRecord; import org.springblade.mdm.flow.entity.FlowProgramFile; import org.springblade.mdm.flow.service.FlowCommonService; import org.springblade.mdm.flow.excution.dispatch.FinishDataHandler; import org.springblade.mdm.flow.service.ApproveRecordService; import org.springblade.mdm.flow.service.FlowProgramFileService; import org.springblade.mdm.flow.service.FlowProgramProperties; import org.springblade.mdm.program.entity.NcNode; import org.springblade.mdm.program.entity.NcProgramApproved; import org.springblade.mdm.program.service.NcNodeAutoCreateService; import org.springblade.mdm.program.service.NcNodeService; import org.springblade.mdm.program.service.NcProgramApprovedService; import org.springblade.mdm.program.service.ProgramAnnotationService; import org.springblade.mdm.utils.FileContentUtil; import org.springblade.mdm.utils.EntityUtil; import org.springblade.system.feign.ISysClient; import org.springblade.system.pojo.entity.Dict; import org.springblade.system.pojo.entity.DictBiz; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -34,62 +39,61 @@ import java.util.Date; import java.util.List; /** * æ®éæ´¾å·¥å®ææ°æ®å¤çå¨ï¼åè½ï¼æå ¥å®¡æ¹è¡¨æ°æ®ï¼DispatchFinishListenerè°ç¨ */ @Slf4j @Component("cureFinishOperateTask") @AllArgsConstructor public class CureFinishOperateTask { private final NcNodeService nodeService; private final NcNodeAutoCreateService ncNodeAutoCreateService; private final FlowCommonService flowCommonService; private final FlowProgramFileService flowProgramFileService; private final ISysClient sysClient; private final OssTemplate ossTemplate; private final ProgramAnnotationService programAnnotationService; private final MachineService machineService; @Component("normalCureFinishDataHandler") public class NormalCureFinishDataHandler implements FinishDataHandler { @Autowired private NcProgramApprovedService approvedService; @Autowired private ApproveRecordService approveRecordService; @Autowired private FlowProgramFileService flowProgramFileService; @Autowired private NcNodeService nodeService; @Autowired private NcNodeAutoCreateService ncNodeAutoCreateService; @Autowired private MachineService machineService; @Autowired private OssTemplate ossTemplate; @Autowired private ISysClient sysClient; @Autowired private ProgramAnnotationService programAnnotationService; /** * é»è®¤æææé´ï¼ææ°ï¼,2å¹´ */ private static final int DEFAULT_VALID_MONTH = 24; private final NcNodeService ncNodeService; /** * åºå审æ¹éè¿å¤çä»»å¡ï¼ * @param execution æµç¨execution * DispatchFinishListenerä¸è°ç¨ * @param flowProps æµç¨å±æ§ */ @Transactional public void execute(DelegateExecution execution) throws IOException { log.info("æ§è¡åºåç¨åºä»»å¡æå¡,æµç¨å®ä¾id={}", execution.getProcessInstanceId()); //åºåç¨åºæ£æ¥æææï¼ dealWithNode(execution.getProcessInstanceId()); } public void handleData(FlowProgramProperties flowProps) { // æ§è¡ä¸å¡é»è¾ NcNode pkgNode = nodeService.lambdaQuery().eq(NcNode::getProcessInstanceId, flowProps.getProcessInstanceId()).one(); //è¯åç pkgNode.setIsCured(1); pkgNode.setIsLocked(NcNode.UNLOCK); //è®¾ç½®è¿ææ¥æ pkgNode.upgradeVersionNumber(); pkgNode.setExpireDate(calculateExpireDate()); nodeService.updateById(pkgNode); /** * å¤çnodeç¶æã * @param processInstanceId æµç¨å®ä¾id */ void dealWithNode(String processInstanceId) throws IOException { //ç¨åºå èç¹åä¸å±ç¨åºèç¹(å æ¬åå²èç¹éææ°çæ¬ç)ä»è¯åæªå°åºåä¸é¢ //ç¨åºå èç¹ è®¾ç½®æªå·²åºå NcNode pkgNode = nodeService.lambdaQuery().eq(NcNode::getProcessInstanceId, processInstanceId).one(); if(pkgNode.isDeviationProgram()){ //å离çç¨åºç´æ¥éå® //pkgNode.setIsLocked(1); pkgNode.lock(); nodeService.updateById(pkgNode); }else { //è¯åç pkgNode.setIsCured(1); pkgNode.setIsLocked(NcNode.UNLOCK); //è®¾ç½®è¿ææ¥æ pkgNode.upgradeVersionNumber(); pkgNode.setExpireDate(calculateExpireDate()); nodeService.updateById(pkgNode); List<NcNode> historyProgramPackageNodes = nodeService.getNodeHistory(pkgNode); moveNodeToCuredTree(pkgNode, historyProgramPackageNodes, flowCommonService.getProgramProperties(processInstanceId)); List<NcNode> historyProgramPackageNodes = nodeService.getNodeHistory(pkgNode); try { moveNodeToCuredTree(pkgNode, historyProgramPackageNodes, flowProps); }catch(Exception e) { log.error("åºåæµç¨å®æå¼å¸¸",e); throw new ServiceException("æ®éåºåæ§è¡å¼å¸¸"+e.getMessage()); } addApproveTable(pkgNode,flowProps); updateApproveRecordNodeId(flowProps.getProcessInstanceId(), pkgNode.getId()); } /** * å°èç¹ååå²èç¹æªå¨å°åºåçå级èç¹ä¸ @@ -140,27 +144,21 @@ List<FlowProgramFile> files = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId,pkgNode.getProcessInstanceId()).list(); for(FlowProgramFile flowProgramFile : files){ NcNode newProgNode = new NcNode(); BeanUtils.copyProperties(pkgNode,newProgNode); newProgNode.setName(flowProgramFile.getName()); newProgNode.setNodeType(NcNode.TYPE_PROGRAM_FILE); newProgNode.setParentId(pkgNode.getId()); newProgNode.setDrawingNo(pkgNode.getDrawingNo()); newProgNode.setDrawingNoEdition(pkgNode.getDrawingNoEdition()); newProgNode.setMachineCode(pkgNode.getMachineCode()); newProgNode.setProcessEdition(pkgNode.getProcessEdition()); newProgNode.setProcessName(pkgNode.getProcessName()); newProgNode.setProcessNo(pkgNode.getProcessNo()); newProgNode.setParentIds(pkgNode.getParentIds()+","+pkgNode.getId()); newProgNode.setIsLastEdition(1); newProgNode.setVersionNumber(pkgNode.getVersionNumber()); newProgNode.setFlowProgramFileId(flowProgramFile.getId()); newProgNode.setIsCured(1); ncNodeService.save(newProgNode); nodeService.save(newProgNode); //ä¿®æ¹æä»¶å å®¹æ´æ°æ³¨éï¼å¹¶æ´æ°æä»¶æ°æ®çå°å ///æ¿æ¢æ³¨éåæ»æ¯ä¸è¡å setGhAnnotation(flowProgramFile,machine.getMachineGroupCode(),annoDicts); flowProgramFileService.updateById(flowProgramFile); //flowProgramFileService.updateById(flowProgramFile); } } @@ -178,17 +176,7 @@ ByteArrayInputStream byteInputStream = new ByteArrayInputStream(bytes); InputStream finishedStream = programAnnotationService.setGHAnnotation(byteInputStream,machineGroup,annoDicts); /* String annoTxt = programAnnotationService.generateAnnotation("GH",machineGroup,annoDicts); //int statusLineIndex = 2; String line2 = FileContentUtil.readLineAt(byteInputStream,ProgramAnnotationService.STATUS_LINE_INDEX);//第ä¸è¡åºè¯¥æ¯ç¶ææ³¨é byteInputStream.reset(); InputStream finishedStream; if(programAnnotationService.isAnnotation(line2,machineGroup,annoDicts)){ finishedStream = FileContentUtil.replaceAtLine(byteInputStream,ProgramAnnotationService.STATUS_LINE_INDEX,annoTxt); }else{ finishedStream = FileContentUtil.insertLine(byteInputStream,ProgramAnnotationService.STATUS_LINE_INDEX,annoTxt); }*/ try(finishedStream) { finishedStream.reset(); BladeFile bfile = ossTemplate.putFile(flowProgramFile.getName(), finishedStream); @@ -214,4 +202,27 @@ return DateUtil.toDate(now.plusMonths(month)); } /** * ä¿å审æ¹å®æçè®°å½ * @param packageNode * @param props */ void addApproveTable(NcNode packageNode,FlowProgramProperties props){ NcProgramApproved approved = new NcProgramApproved(); approved.setProgramName(packageNode.getName()); approved.setNcNodeId(packageNode.getId());//ç¨åºå èç¹id approved.setTitle(props.getTitle()); approved.setProgrammerId(props.getProgrammerId()); approvedService.save(approved); } void updateApproveRecordNodeId(String processInstanceId,Long nodeId){ //æ´æ°å®¡æ¹è®°å½çncNodeId approveRecordService.lambdaUpdate() .eq(ApproveRecord::getProcessInstanceId, processInstanceId) .set(ApproveRecord::getNcNodeId,nodeId).update(); } } blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/CureFlowService.java
@@ -90,12 +90,14 @@ identityService.setAuthenticatedUserId(String.valueOf(AuthUtil.getUserId()));//设置æµç¨å起人 vars.put(FlowContants.LAST_STEP_USER_NICKNAME, AuthUtil.getNickName()); vars.put(FlowContants.TITLE,programPackage.getName()+"-åºå");//èªå¨å¢å æ é¢ if(programPackage.getDeviation() != null) { vars.put(FlowContants.MY_PROCESS_NAME, "å离åä¼ "); vars.put(FlowContants.TITLE,programPackage.getName()+"-å离åä¼ ");//èªå¨å¢å æ é¢ }else { vars.put(FlowContants.MY_PROCESS_NAME, "åºåæµç¨"); vars.put(FlowContants.TITLE,programPackage.getName()+"-åºå");//èªå¨å¢å æ é¢ } ProcessInstance inst = runtimeService.startProcessInstanceByKey(FlowContants.CURE_PROCESS_KEY,"0",vars); blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/vo/TaskAssignVO.java
@@ -2,6 +2,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import org.apache.commons.lang3.StringUtils; import org.springblade.mdm.flow.constants.FlowContants; import java.time.LocalDate; import java.time.LocalDateTime; @@ -43,4 +45,20 @@ private String deviation; @Schema(description = "æ¯å¦ä¸´æ¶æµç¨ï¼å¼:Y/N") private String isTempFlow; /** * æ¯å¦ æª ç¨åºè¡¥å æµç¨ï¼ä¸´æ¶æµç¨ï¼ * @return æ¯å¦ */ public boolean isTemporaryFlow(){ return FlowContants.Y.equals(isTempFlow); } /** * æ¯å¦å离å * @return æ¯å¦ */ public boolean isDeviationFlow(){ return StringUtils.isNotBlank(deviation); } } blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcNodeMapper.xml
@@ -126,7 +126,7 @@ <if test='status.contains("2")'> or n.parent_ids LIKE '0,2,%' </if> <if test='status.contains("2")'> <if test='status.contains("3")'> or n.parent_ids LIKE '0,3,%' </if> ) blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeService.java
@@ -318,12 +318,14 @@ * @param machineCode æºåºç¼å· * @return */ public NcNode getCuredProgramPackage(String programPkgName,String machineCode) { public NcNode getCuredProgramPackage(String programPkgName,String processEdition,String machineCode) { Machine machine = machineService.getByCode(machineCode); List<Machine> sameGroupMachines = machineService.lambdaQuery().eq(Machine::getMachineGroupCode,machine.getMachineGroupCode()).list(); List<String> machineCodesInGroup = sameGroupMachines.stream().map(Machine::getCode).toList(); List<NcNode> nodes = lambdaQuery().eq(NcNode::getNodeType,NcNode.TYPE_PROGRAM_PACKAGE) .eq(NcNode::getName, programPkgName).likeRight(NcNode::getParentIds,"0,2,").eq(NcNode::getIsCured,1) .eq(NcNode::getName, programPkgName) .eq(NcNode::getProcessEdition,processEdition) .likeRight(NcNode::getParentIds,"0,2,").eq(NcNode::getIsCured,1) .in(!machineCodesInGroup.isEmpty(),NcNode::getMachineCode,machineCodesInGroup) .eq(NcNode::getIsLastEdition,1).list(); blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BizServiceImpl; import org.springblade.core.mp.support.Condition; @@ -23,6 +24,7 @@ import org.springblade.mdm.program.mapper.NcProgramExchangeMapper; import org.springblade.mdm.program.vo.DncSendBackData; import org.springblade.system.feign.IDictClient; import org.springblade.system.pojo.entity.DictBiz; import org.springframework.stereotype.Service; import java.io.*; @@ -40,7 +42,6 @@ @AllArgsConstructor public class NcProgramExportDNCService extends BizServiceImpl<NcProgramExchangeMapper, NcProgramExchange> { //private final NcProgramService progService; private final IDictClient dictClient; private final MachineService machineService; private final NcProgramApprovedService approvedService; @@ -95,7 +96,6 @@ zipOut.putNextEntry(zipEntry); zipOut.closeEntry(); Machine machine = machineService.getByCode(packageNode.getMachineCode());//ç¨åºå èç¹ï¼è·å注éç¨ List<NcNode> programNodes = ncNodeService.lambdaQuery().eq(NcNode::getIsLastEdition,1).eq(NcNode::getParentId, approved.getNcNodeId()).list(); @@ -109,14 +109,22 @@ status = "GH"; } List<DictBiz> annotationDictList= programAnnotationService.getAnnotionList(); for (NcNode node : programNodes) { String filePathInZip = packageFolder + node.getName(); programFile = this.flowProgramFileService.getById(node.getFlowProgramFileId()); if(programFile.isProgram()) {//ç¨åºæä»¶ï¼æä¼å å ¥å缩å InputStream inputStream = ossTemplate.statFileStream(programFile.getOssName()); String sendDir = machine.getProgSendDir()==null? StringUtil.EMPTY:machine.getProgSendDir(); InputStream addedInsFinal; InputStream addedIns2 = programAnnotationService.setSendDirAndStatusAnnotation(sendDir,status,inputStream,machine.getMachineGroupCode()); this.addInputStreamToZip(zipOut, addedIns2, filePathInZip); if(StringUtils.isNotBlank(programPackageNode.getDeviation())) { //å离åï¼å¢å å离åå· addedInsFinal = programAnnotationService.setPldAnnotation(programPackageNode.getDeviation(),addedIns2, machine.getMachineGroupCode(), annotationDictList);; }else{ addedInsFinal = addedIns2; } this.addInputStreamToZip(zipOut, addedInsFinal, filePathInZip); } } blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProgramAnnotationService.java
@@ -4,6 +4,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.jetbrains.annotations.NotNull; import org.springblade.core.tool.api.R; import org.springblade.mdm.utils.FileContentUtil; import org.springblade.system.feign.IDictBizClient; @@ -41,6 +42,11 @@ * ç¶æè¡ç´¢å¼ï¼ç¬¬ä¸è¡ï¼ 0 based */ public static final int STATUS_LINE_INDEX = 2; /** * åç¦»åæ³¨éè¡ç´¢å¼å· 0 based */ public static final int STATUS_DEVIATION_INDEX = 3; public static final String SQ = "SQ"; public static final String GH = "GH"; @@ -152,33 +158,51 @@ * 设置åºå注éè¡ * @param inputStream * @param machineGroup * @param annoDicts * @param annoDictList * @return * @throws IOException */ public InputStream setGHAnnotation(InputStream inputStream, String machineGroup,List<DictBiz> annoDicts) throws IOException { public InputStream setGHAnnotation(InputStream inputStream, String machineGroup,List<DictBiz> annoDictList) throws IOException { return setAnnotationAndGetInputStream(inputStream, machineGroup, annoDictList, GH, STATUS_LINE_INDEX); } /** * 设置åç¦»åæ³¨é * @param inputStream * @param machineGroup * @param annoDictList * @return * @throws IOException */ public InputStream setPldAnnotation(String deviation,InputStream inputStream,String machineGroup,List<DictBiz> annoDictList) throws IOException { // return setAnnotationAndGetInputStream(inputStream, machineGroup, annoDictList, deviation, STATUS_DEVIATION_INDEX); } @NotNull private InputStream setAnnotationAndGetInputStream(InputStream inputStream, String machineGroup, List<DictBiz> annoDictList, String text, int lineIndex) throws IOException { InputStream finishedStream; try(inputStream){ ByteArrayInputStream byteInputStream = new ByteArrayInputStream(IOUtils.toByteArray(inputStream)); String annoTxt = generateAnnotation(GH,machineGroup,annoDicts);//å äºæ³¨éä¹åçææ¬ String annoTxt = generateAnnotation(text,machineGroup,annoDictList);//å äºæ³¨éä¹åçææ¬ String lineText = FileContentUtil.readLineAt(byteInputStream,STATUS_LINE_INDEX);//第ä¸è¡åºè¯¥æ¯ç¶ææ³¨é String lineText = FileContentUtil.readLineAt(byteInputStream, lineIndex); byteInputStream.reset(); if(isAnnotation(lineText,machineGroup,annoDicts)){ finishedStream = FileContentUtil.replaceAtLine(byteInputStream,STATUS_LINE_INDEX,annoTxt); if(isAnnotation(lineText,machineGroup,annoDictList)){ finishedStream = FileContentUtil.replaceAtLine(byteInputStream, lineIndex,annoTxt); }else{ finishedStream = FileContentUtil.insertLine(byteInputStream,STATUS_LINE_INDEX,annoTxt); finishedStream = FileContentUtil.insertLine(byteInputStream, lineIndex,annoTxt); } finishedStream.reset(); } return finishedStream; } /** * 为è¾å ¥æµè®¾ç½®åéç®å½(第äºè¡)åç¶æï¼ç¬¬ä¸è¡ï¼ * @param sendPath åéè·¯å¾