package org.springblade.mdm.flow.task.cure;
|
|
import lombok.AllArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.flowable.engine.delegate.DelegateExecution;
|
import org.springblade.core.tool.api.R;
|
import org.springblade.core.tool.utils.DateUtil;
|
import org.springblade.mdm.commons.contants.ParamContants;
|
import org.springblade.mdm.flow.service.FlowCommonService;
|
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.system.feign.ISysClient;
|
import org.springframework.stereotype.Component;
|
|
import java.time.LocalDate;
|
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 ISysClient sysClient;
|
/**
|
* 默认有效期间(月数),2年
|
*/
|
private static final int DEFAULT_VALID_MONTH = 24;
|
/**
|
* 固化审批通过处理任务,
|
* @param execution 流程execution
|
*/
|
public void execute(DelegateExecution execution) {
|
log.info("执行固化程序任务服务,流程实例id={}", execution.getProcessInstanceId());
|
//固化程序检查有效期,
|
//1.将流程设置
|
dealWithNode(execution.getProcessInstanceId());
|
}
|
|
/**
|
* 处理node状态。
|
* @param processInstanceId 流程实例id
|
*/
|
void dealWithNode(String processInstanceId) {
|
//程序包节点和下属程序节点(包括历史节点非最新版本的)从试切挪到固化下面
|
//程序包节点 设置未已固化
|
NcNode pkgNode = nodeService.lambdaQuery().eq(NcNode::getProcessInstanceId, processInstanceId).one();
|
pkgNode.setIsCured(1);
|
//设置过期日期
|
pkgNode.setExpireDate(calculateExpireDate());
|
nodeService.updateById(pkgNode);
|
|
List<NcNode> historyNodes = nodeService.getNodeHistory(pkgNode);
|
moveNodeToCuredTree(pkgNode,historyNodes,flowCommonService.getProgramProperties(processInstanceId));
|
}
|
|
/**
|
* 将节点和历史节点挪动到固化的同级节点下
|
* @param historyNodes
|
*/
|
void moveNodeToCuredTree(NcNode pkgNode,List<NcNode> historyNodes, FlowProgramProperties programProperties) {
|
//创建节点到机床级别.(固化树)
|
NcNode machineNode = ncNodeAutoCreateService.createNodeTreeToMachine(programProperties);
|
|
//移动到固化树下的机床节点下层
|
String newParentIds = machineNode.getParentIds()+","+machineNode.getId();
|
for(NcNode hisNode : historyNodes){
|
if(!hisNode.getId().equals(pkgNode.getId())){
|
hisNode.setIsLastEdition(0);
|
}
|
hisNode.setParentId(machineNode.getId());
|
hisNode.setParentIds(newParentIds);
|
|
//处理程序包下层的程序节点
|
List<NcNode> programNodes = nodeService.lambdaQuery().eq(NcNode::getParentId,hisNode.getId()).list();
|
for(NcNode programNode : programNodes){
|
programNode.setParentIds(hisNode.getParentIds()+","+hisNode.getId());
|
}
|
nodeService.updateBatchById(programNodes);
|
}
|
nodeService.updateBatchById(historyNodes);
|
|
}
|
|
/**
|
* 计算有效期
|
* @return
|
*/
|
private Date calculateExpireDate() {
|
R<String> validMonResult = sysClient.getParamValue(ParamContants.CURE_VALID_MONTH_KEY);
|
|
int month = DEFAULT_VALID_MONTH;
|
if(validMonResult.isSuccess() && validMonResult.getData()!=null){
|
month = Integer.parseInt(validMonResult.getData());
|
}
|
|
LocalDate now = LocalDate.now();
|
return DateUtil.toDate(now.plusMonths(month));
|
}
|
|
}
|