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 oldProgramNode : oriProgramNodes){
|
oldProgramNode.setIsLastEdition(0);
|
oldProgramNode.setVersionNumber(pkgNode.getVersionNumber());
|
pfile = flowProgramFileService.getById(oldProgramNode.getFlowProgramFileId());
|
if(!pfile.isProgram()){
|
//当前固化程序包名下的“其他文件”非程序文件。不设置为老版本,直接挪到固化树下,两个网络之间只交换程序文件,其他文件只能保留
|
oldProgramNode.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);
|
|
}
|
|
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();
|
}
|
}
|