提交 215063f9 编写于 作者: zhouweidong's avatar zhouweidong

加签、待阅

上级 fdf1e93d
......@@ -8,6 +8,7 @@ import cn.ibizlab.core.workflow.service.IWFGroupService;
import cn.ibizlab.core.workflow.service.IWFProcessDefinitionService;
import cn.ibizlab.core.workflow.service.IWFUserService;
import cn.ibizlab.util.client.IBZUAAFeignClient;
import cn.ibizlab.util.enums.ProcFunction;
import cn.ibizlab.util.enums.TaskType;
import cn.ibizlab.util.errors.BadRequestAlertException;
import cn.ibizlab.util.helper.RuleUtils;
......@@ -33,7 +34,6 @@ import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.history.ProcessInstanceHistoryLog;
import org.flowable.engine.repository.Deployment;
import org.flowable.engine.repository.DeploymentBuilder;
import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.engine.task.Comment;
import org.flowable.identitylink.api.IdentityLink;
......@@ -429,6 +429,7 @@ public class WFCoreService
Map<String,Object> params = new HashMap();
params.put("srfprocessdefinitionkey",task.getProcessdefinitionkey());
params.put("srftaskdefinitionkey",task.getTaskdefinitionkey());
params.put("srftaskid",task.getId());
businessKeys.put(str,params);
}
}
......@@ -539,6 +540,20 @@ public class WFCoreService
//设置流程表单
setProcessForm(userTask);
if(userTask!=null&&userTask.getOutgoingFlows()!=null) {
//加签逻辑
String procFuncs = getParam(userTask,"form","procfunc");
if(DelegationState.PENDING == task.getDelegationState() && userId.equals(task.getAssignee())
&& !StringUtils.isEmpty(procFuncs) && procFuncs.contains(ProcFunction.BEFORESIGN.value)){
WFTaskWay way = getFuncWay(task,ProcFunction.FINISH.value);
if(way!=null)
taskWays.add(way);
return taskWays;
}
//流程辅助功能
List<WFTaskWay> functions = getProcessFunc(task,userTask);
if (functions.size() > 0) {
taskWays.addAll(functions);
}
for(SequenceFlow sequenceFlow:userTask.getOutgoingFlows()) {
WFTaskWay way=new WFTaskWay();
way.setSequenceflowid(sequenceFlow.getId());
......@@ -588,101 +603,60 @@ public class WFCoreService
setTaskWayForm(sequenceFlow,way);
taskWays.add(way);
}
LinkedHashMap rollBackMap = getTaskProcessForm(userTask);
if(rollBackMap.size()>0){
WFTaskWay rollBackWay = new WFTaskWay();
rollBackWay.set("rollback",rollBackMap.get("rollback"));
taskWays.add(rollBackWay);
}
}
}
return taskWays;
}
public static LinkedHashMap getTaskProcessForm(UserTask userTask){
if(ObjectUtils.isEmpty(userTask)){
return null;
}
List<ExtensionElement> elements = userTask.getExtensionElements().get("form");
if(ObjectUtils.isEmpty(elements)){
return null;
}
LinkedHashMap processMap = new LinkedHashMap();
for (ExtensionElement element : elements) {
List<ExtensionAttribute> extensionAttributes = element.getAttributes().get("process-form");
if(!ObjectUtils.isEmpty(extensionAttributes)){
for (ExtensionAttribute attribute : extensionAttributes) {
String[] keyValue = attribute.getValue().split(":");
if(keyValue.length > 1){
processMap.put(keyValue[0],keyValue[1]);
}
}
/**
* 流程辅助功能
* @param userTask
* @return
*/
private List<WFTaskWay> getProcessFunc(Task task , UserTask userTask) {
List<WFTaskWay> taskWays = new ArrayList<>();
String procFuncs = getParam(userTask,"form","procfunc");
if(!StringUtils.isEmpty(procFuncs)){
for(String func : procFuncs.split(";")){
WFTaskWay taskWay = getFuncWay(task,func);
if(taskWay!=null)
taskWays.add(taskWay);
}
}
return processMap;
return taskWays;
}
/**
* @param taskId 当前需要回退的节点
* @return 回退上一个节点
* 流程辅助功能连接
* @param funcType
* @return
*/
public boolean wfback(String system,String appname,String entity,String taskId) {
try {
Boolean flag = true;
String sourceRef = null;
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
String taskDefinitionKey = task.getTaskDefinitionKey();
if (taskDefinitionKey == null) {
log.debug("taskDefinitionKey不存在");
return false;
}
String processInstanceId = task.getProcessInstanceId();
if (processInstanceId == null) {
log.debug("processInstanceId不存在");
return false;
}
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(task.getProcessDefinitionId()).singleResult();
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinition.getId());
FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey());
// 获取历史路径
WFProcessInstance instance = getWFHistory(system, appname, entity, taskDefinitionKey, task.getProcessInstanceId());
if (!ObjectUtils.isEmpty(flowNode) && !ObjectUtils.isEmpty(instance)) {
List<WFProcessNode> usertasks = new ArrayList((Collection<? extends WFProcessNode>) instance.getExtensionparams().get("usertasks"));
for (WFProcessNode node : usertasks) {
for (SequenceFlow flow : flowNode.getIncomingFlows()) {
if (node.getUsertaskid().equals(flow.getSourceRef())&&flow.getSourceRef().startsWith("tid")) {
sourceRef = flow.getSourceRef();
flag = false;
break;
public WFTaskWay getFuncWay(Task task , String funcType){
WFTaskWay way = new WFTaskWay();
if(funcType.equals(ProcFunction.ROLLBACK.value)){
way.set("type",ProcFunction.ROLLBACK.value);
way.setSequenceflowname(ProcFunction.ROLLBACK.text);
}
else if(funcType.equals(ProcFunction.BEFORESIGN.value)){
way.set("type",ProcFunction.BEFORESIGN.value);
way.setSequenceflowname(ProcFunction.BEFORESIGN.text);
}
if (!flag) {
break;
else if(funcType.equals(ProcFunction.TURN.value)){
way.set("type",ProcFunction.TURN.value);
way.setSequenceflowname(ProcFunction.TURN.text);
}
else if(funcType.equals(ProcFunction.FINISH.value)){
way.set("type",ProcFunction.FINISH.value);
way.setSequenceflowname(ProcFunction.FINISH.text);
}
} else {
return false;
}
// 执行回退
runtimeService.createChangeActivityStateBuilder().processInstanceId(processInstanceId).moveActivityIdTo(taskDefinitionKey, sourceRef).changeState();
} catch (Exception e) {
throw new BadRequestAlertException("回退失败","WFCoreService","wfback");
else{
return null;
}
return true;
way.setTaskid(task.getId());
way.setTaskdefinitionkey(task.getTaskDefinitionKey());
return way;
}
// public void delegateTask(String taskId,String delegater) {
// String userId = SecurityUtils.getCurrentUserObject().getId();
// Task task = permissionService.validateDelegatePermissionOnTask(taskId, userId, delegater);
// taskService.addComment(taskId, processInstanceId, type.toString(), message);
// taskService.delegateTask(task.getId(), delegater);
// }
public WFProcessInstance wfsubmit(String system,String appname,
String entity,String businessKey,String taskId,WFTaskWay taskWay) {
......@@ -1119,7 +1093,7 @@ public class WFCoreService
bpmnLayout.execute();
byte[] bs= bpmnXMLConverter.convertToXML(entitymodel);
bmpmfileId=DigestUtils.md5DigestAsHex(bs);
if(bmpmfileId.equals(1))
if(bmpmfileId.equals(old.getMd5check()))
{
log.warn("部署流程没有变化,忽略 name:" + curProcess.getName() + " key " + processDefinitionKey + " deploy " + bmpmfileId);
deployInfo+=curProcess.getName()+" key:" + processDefinitionKey +",流程配置没有变化,忽略发布"+"\r\n";
......@@ -1413,8 +1387,8 @@ public class WFCoreService
if (StringUtils.isEmpty(userId))
throw new BadRequestAlertException("未传入当前用户", entity, businessKey);
Object signUsers = taskWay.get("users");
if (ObjectUtils.isEmpty(signUsers)) {
Object signUser = taskWay.get("srfwfannotator");
if (ObjectUtils.isEmpty(signUser)) {
throw new BadRequestAlertException("未传入加签用户", entity, businessKey);
}
Task curTask = taskService.createTaskQuery().taskId(taskId).singleResult();
......@@ -1422,7 +1396,7 @@ public class WFCoreService
throw new BadRequestAlertException(String.format("未能获取到[%s]运行任务", curTask.getId()), "", "");
}
if (DelegationState.PENDING != curTask.getDelegationState()) {
taskService.delegateTask(taskId, String.valueOf(signUsers));
taskService.delegateTask(taskId, String.valueOf(signUser));
//saveTask(curTask);
} else {
throw new BadRequestAlertException(String.format("任务正在加签中,无法进行二次加签", curTask.getId()), "", "");
......@@ -1445,7 +1419,7 @@ public class WFCoreService
if (StringUtils.isEmpty(userId))
throw new BadRequestAlertException("未传入当前用户", entity, businessKey);
Object signUser = taskWay.get("users");
Object signUser = taskWay.get("srfwftransfertor");
if (ObjectUtils.isEmpty(signUser)) {
throw new BadRequestAlertException("未传入转办用户", entity, businessKey);
}
......
package cn.ibizlab.util.enums;
/**
* 工作流辅助功能
*/
public enum ProcFunction {
/**
* 退回
*/
ROLLBACK("rollback","退回"),
/**
* 前加签
*/
BEFORESIGN("beforesign","前加签"),
/**
* 转办
*/
TURN("turn","转办"),
/**
* 加签完成
*/
FINISH("finish","完成");
ProcFunction(String value, String text) {
this.value = value;
this.text = text;
}
public String value;
public String text;
}
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册