| ÎļþÃû´Ó blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/cure/CureFinishOperateTask.java ÐÞ¸Ä |
| | |
| | | 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; |
| | |
| | | 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()); |
| | | } |
| | | |
| | | /** |
| | | * å¤ç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 { |
| | | public void handleData(FlowProgramProperties flowProps) { |
| | | // æ§è¡ä¸å¡é»è¾ |
| | | NcNode pkgNode = nodeService.lambdaQuery().eq(NcNode::getProcessInstanceId, flowProps.getProcessInstanceId()).one(); |
| | | //è¯åç |
| | | pkgNode.setIsCured(1); |
| | | pkgNode.setIsLocked(NcNode.UNLOCK); |
| | |
| | | nodeService.updateById(pkgNode); |
| | | |
| | | List<NcNode> historyProgramPackageNodes = nodeService.getNodeHistory(pkgNode); |
| | | moveNodeToCuredTree(pkgNode, historyProgramPackageNodes, flowCommonService.getProgramProperties(processInstanceId)); |
| | | try { |
| | | moveNodeToCuredTree(pkgNode, historyProgramPackageNodes, flowProps); |
| | | }catch(Exception e) { |
| | | log.error("åºåæµç¨å®æå¼å¸¸",e); |
| | | throw new ServiceException("æ®éåºåæ§è¡å¼å¸¸"+e.getMessage()); |
| | | } |
| | | addApproveTable(pkgNode,flowProps); |
| | | updateApproveRecordNodeId(flowProps.getProcessInstanceId(), pkgNode.getId()); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * å°èç¹ååå²èç¹æªå¨å°åºåçå级èç¹ä¸ |
| | |
| | | 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); |
| | | } |
| | | } |
| | | |
| | |
| | | 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); |
| | |
| | | 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(); |
| | | } |
| | | } |