package org.springblade.mdm.flow.excution.dispatch;
|
|
import lombok.extern.slf4j.Slf4j;
|
import org.springblade.mdm.flow.constants.FlowContants;
|
import org.springblade.mdm.flow.entity.FlowProgramFile;
|
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;
|
|
/**
|
* 普通派工完成数据处理器,功能:插入审批表数据,DispatchFinishListener调用
|
*/
|
@Slf4j
|
@Component("normalDispatchFinishDataHandler")
|
public class NormalFinishDataHandler implements FinishDataHandler{
|
@Autowired
|
private NcProgramApprovedService approvedService;
|
@Autowired
|
private ApproveRecordService approveRecordService;
|
@Autowired
|
private FlowProgramFileService flowProgramFileService;
|
@Autowired
|
private NcNodeService ncNodeService;
|
@Autowired
|
private NcNodeAutoCreateService ncNodeAutoCreateService;
|
/**
|
* DispatchFinishListener中调用
|
* @param props 执行对象
|
*/
|
public void handleData(FlowProgramProperties props) {
|
// 执行业务逻辑
|
String instId = props.getProcessInstanceId();
|
NcNode packageNode;
|
if(FlowContants.Y.equals(props.getHasCuredProgram())){
|
//有固化
|
packageNode = ncNodeService.getById(props.getCuredNodeId());
|
|
if(FlowContants.N.equals(props.getCureProgramUseable())) {
|
//程序不可用
|
//原来的固化节点锁定
|
packageNode.lock();
|
ncNodeService.updateById(packageNode);
|
|
Integer newVersion = packageNode.genNewVersionNumber();
|
packageNode = ncNodeAutoCreateService.createNodeTreeWithProgram(props,newVersion);
|
}else{
|
//可用,升版(修改其工序版本),原来的节点清除
|
moveToNewProcessEdition(packageNode,props);
|
}
|
|
}else{
|
packageNode = ncNodeAutoCreateService.createNodeTreeWithProgram(props,1);
|
}
|
|
addApproveTable(packageNode,props);
|
//updateApproveRecordNodeId(instId, packageNode.getId());
|
log.info("普通流程已完成in DispatchFinishListener");
|
}
|
|
private void moveToNewProcessEdition(NcNode packageNode, FlowProgramProperties props) {
|
ncNodeService.deleteMachineNodeByParentId(packageNode.getParentId());
|
|
FlowProgramProperties tempProps = new FlowProgramProperties();
|
BeanUtils.copyProperties(props,tempProps);
|
tempProps.setProcessDefinitionKey(FlowContants.CURE_PROCESS_KEY);//临时修改其为固化,在固化下创建节点
|
NcNode machineNode = ncNodeAutoCreateService.createNodeTreeToMachine(tempProps);
|
|
//移动历史节点到新的版次节点下
|
List<NcNode> packageHisNodes = ncNodeService.getNodeHistory(packageNode);//该包的历史节点列表
|
for(NcNode hisPackageNode : packageHisNodes){
|
hisPackageNode.setParentId(machineNode.getParentId());
|
hisPackageNode.setParentIds(machineNode.getParentIds());
|
|
List<NcNode> oriProgramNodes = ncNodeService.lambdaQuery().eq(NcNode::getParentId,hisPackageNode.getId()).list();
|
|
for(NcNode oldProgramNode : oriProgramNodes){
|
oldProgramNode.setParentIds(hisPackageNode.getParentIds()+","+hisPackageNode.getId());
|
}
|
ncNodeService.updateBatchById(oriProgramNodes);
|
}
|
ncNodeService.updateBatchById(packageHisNodes);
|
|
//移动程序包名节点
|
packageNode.setProcessEdition(tempProps.getProcessEdition());
|
packageNode.setParentId(machineNode.getParentId());
|
packageNode.setParentIds(machineNode.getParentIds());
|
this.ncNodeService.updateById(packageNode);
|
|
//移动程序节点
|
List<NcNode> programNodes = ncNodeService.getProgramFilesByPackageId(packageNode.getId());
|
for(NcNode programNode : programNodes){
|
programNode.setParentIds(packageNode.getParentIds()+","+packageNode.getId());
|
programNode.setProcessEdition(tempProps.getProcessEdition());//修改工序版次
|
programNode.setVersionNumber(packageNode.getVersionNumber());
|
}
|
ncNodeService.updateBatchById(programNodes);
|
|
|
}
|
|
|
/**
|
* 保存审批完成的记录
|
* @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());
|
approved.setProcessInstanceId(props.getProcessInstanceId());
|
approvedService.save(approved);
|
|
}
|
|
}
|