package org.springblade.mdm.flow.service;
|
|
import lombok.AllArgsConstructor;
|
import org.flowable.engine.IdentityService;
|
import org.flowable.engine.RuntimeService;
|
import org.flowable.engine.runtime.ProcessInstance;
|
import org.springblade.core.log.exception.ServiceException;
|
import org.springblade.core.secure.utils.AuthUtil;
|
import org.springblade.mdm.basesetting.producedivision.entity.ProduceDivision;
|
import org.springblade.mdm.basesetting.producedivision.service.ProduceDivisionService;
|
import org.springblade.mdm.flow.constants.FlowContants;
|
import org.springblade.mdm.flow.constants.FlowVariableContants;
|
import org.springblade.mdm.flow.entity.FlowProgramFile;
|
import org.springblade.mdm.program.entity.NcNode;
|
import org.springblade.mdm.program.service.NcNodeService;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
@AllArgsConstructor
|
@Service
|
public class LockFlowService {
|
private final NcNodeService nodeService;
|
private final RuntimeService runtimeService;
|
private final IdentityService identityService;
|
private final ProduceDivisionService produceDivisionService;
|
private final FlowCommonService flowCommonService;
|
private final FlowProgramFileService flowProgramFileService;
|
/**
|
* 启动解锁流程
|
*/
|
@Transactional
|
public void startUnlock(Long nodeId,String unlockReason){
|
NcNode programPackage = nodeService.getById(nodeId);
|
if(flowCommonService.isProcessInstanceActive(programPackage.getProcessInstanceId())){
|
throw new ServiceException("流程正在进行");
|
}
|
Map<String, Object> vars = new HashMap<>();
|
flowCommonService.putFlowVariablesByNode(vars,programPackage);
|
|
ProduceDivision div = produceDivisionService.getByDrawingNoWithQinzhe(programPackage.getDrawingNo());
|
vars.put(FlowVariableContants.PROGRAMMER,div.getProgrammerId());
|
vars.put(FlowVariableContants.SENIOR,div.getSeniorId());
|
vars.put(FlowVariableContants.ASSIGNEE,div.getSeniorId());//审批用户:高师
|
|
vars.put(FlowVariableContants.TITLE,programPackage.getName()+"程序解锁");
|
|
vars.put(FlowVariableContants.MY_PROCESS_NAME,"解锁流程");
|
vars.put("comment", "解锁程序"+programPackage.getName());
|
vars.put("unlockReason", unlockReason);
|
|
String userId = String.valueOf(AuthUtil.getUserId());
|
identityService.setAuthenticatedUserId(userId);//设置流程发起人
|
vars.put(FlowVariableContants.ACT_PROGRAMMER,userId);
|
|
ProcessInstance inst = runtimeService.startProcessInstanceByKey(FlowContants.UNLOCK_PROCESS_KEY,nodeId+"",vars);
|
|
programPackage.setProcessInstanceId(inst.getId());
|
this.nodeService.updateById(programPackage);
|
|
//更新节点文件的流程实例id
|
|
updateFlowProgramFilesProcessInstance(programPackage);
|
}
|
|
/**
|
* 更新所属流程文件的流程实例id
|
* @param programPackage 要解锁的程序报名节点
|
*/
|
void updateFlowProgramFilesProcessInstance(NcNode programPackage){
|
List<NcNode> fileNodes = nodeService.getProgramFilesByPackageId(programPackage.getId());
|
List<Long> fileIds = fileNodes.stream().map(NcNode::getFlowProgramFileId).toList();
|
if(!fileIds.isEmpty()){
|
flowProgramFileService.lambdaUpdate().in(FlowProgramFile::getId, fileIds)
|
.set(FlowProgramFile::getProcessInstanceId, programPackage.getProcessInstanceId()).update();
|
}
|
}
|
}
|