rev:流程节点完成

This commit is contained in:
zhangzq
2024-05-23 17:36:11 +08:00
parent bcf98eaaff
commit ece2d61c3a
13 changed files with 147 additions and 20 deletions

View File

@@ -3,7 +3,6 @@ package org.nl.wms.dispatch_manage.task.handler.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import org.nl.common.enums.StatusEnum;
import org.nl.common.publish.BussEventMulticaster;
import org.nl.common.utils.SecurityUtils;
@@ -13,13 +12,10 @@ import org.nl.wms.dispatch_manage.task.handler.StructEvent;
import org.nl.wms.dispatch_manage.task.handler.TaskHandler;
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
import org.nl.wms.flow_manage.event.FlowStartEvent;
import org.nl.wms.md_manage.group_dick.service.dao.MdGruopDick;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.function.Consumer;
/*
* @author ZZQ
@@ -38,7 +34,7 @@ public class TaskStatusHandler implements TaskHandler {
public JSONObject process(JSONObject from, JSONObject param) {
//暂时出入入库的问题
from.put("task_status",param.getString("task_status"));
from.put("update_time","DateUtil.now()");
from.put("update_time",DateUtil.now());
from.put("update_name",SecurityUtils.getCurrentNickName());
SchBaseTask schBaseTask = from.toJavaObject(SchBaseTask.class);
schBaseTaskService.updateById(schBaseTask);

View File

@@ -3,11 +3,16 @@ package org.nl.wms.flow_manage.flow.controller.model;
import cn.dev33.satoken.annotation.SaIgnore;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import org.nl.common.TableDataInfo;
import org.nl.common.domain.entity.PageQuery;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.enums.StatusEnum;
import org.nl.common.utils.FileUtil;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.flow_manage.flow.framework.BpmnModel;
import org.nl.wms.flow_manage.flow.framework.converter.BpmnJSONConverter;
import org.nl.wms.flow_manage.flow.framework.engine.cmd.CommandExecutor;
import org.nl.wms.flow_manage.flow.framework.engine.cmd.unify.impl.StartInstanceCmd;
import org.nl.wms.flow_manage.flow.framework.entity.ExecutionEntity;
@@ -51,6 +56,8 @@ public class ActDeModelController {
private IActReProcdefService reProcdefService;
@Autowired
private CommandExecutor commandExecutor;
@Autowired
private BpmnJSONConverter bpmnJSONConverter;
@GetMapping
public ResponseEntity<Object> getAll(ModelQuery query, PageQuery page) {
@@ -63,15 +70,29 @@ public class ActDeModelController {
dto.setCreate_time(DateUtil.now());
dto.setId(IdUtil.getStringId());
dto.setModel_key(IdUtil.getStringId());
try {
JSONObject modelJson = JSONObject.parseObject(dto.getModel_editor_json());
BpmnModel bpmnModel = bpmnJSONConverter.convertToBpmnModel(dto.getModel_key(),"null", modelJson);
}catch (Exception ex){
ex.printStackTrace();
throw new BadRequestException("模型配置不正确:"+ex.getMessage());
}
modelService.save(dto);
return new ResponseEntity<>(HttpStatus.OK);
}
@PutMapping
public ResponseEntity<Object> update(@Validated @RequestBody ActDeModel dto) {
dto.setStatus("30");
dto.setStatus(StatusEnum.MODEL_STATUS.code("未发布"));
dto.setUpdated_id(SecurityUtils.getCurrentUserId());
dto.setUpdate_time(DateUtil.now());
try {
JSONObject modelJson = JSONObject.parseObject(dto.getModel_editor_json());
BpmnModel bpmnModel = bpmnJSONConverter.convertToBpmnModel(dto.getModel_key(),"null", modelJson);
}catch (Exception ex){
ex.printStackTrace();
throw new BadRequestException("模型配置不正确:"+ex.getMessage());
}
modelService.updateById(dto);
return new ResponseEntity<>(HttpStatus.OK);
}

View File

@@ -25,6 +25,7 @@ public class StrucFormConverter extends BaseNodeConverter {
form.setId(node.getString("id"));
form.setType(node.getString("type"));
form.setForm_type(properties.getString("form_type"));
form.setSource_data(properties.getString("sourceData"));
form.setName(properties.getString("name"));
form.setCategory(properties.getString("category"));
form.setDocumentation(properties.getString("documentation"));

View File

@@ -66,6 +66,7 @@ public abstract class FlowNodeActivityBehavior<T> {
.set("form_type",entity.getForm_type())
.set("update_time", DateUtil.now()));
this.leaveActivity(entity);
//
}catch (Exception ex){
ex.printStackTrace();
log.error(entity.getActivityName()+"流程执行异常:{}",ex.getMessage());

View File

@@ -9,16 +9,19 @@ import lombok.SneakyThrows;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.enums.StatusEnum;
import org.nl.common.publish.BussEventMulticaster;
import org.nl.common.utils.IdUtil;
import org.nl.wms.flow_manage.flow.framework.BpmnModel;
import org.nl.wms.flow_manage.flow.framework.converter.BpmnJSONConverter;
import org.nl.wms.flow_manage.flow.framework.engine.behavior.FlowNodeActivityBehavior;
import org.nl.wms.flow_manage.flow.framework.engine.cmd.CommandExecutor;
import org.nl.wms.flow_manage.flow.framework.entity.ExecutionDto;
import org.nl.wms.flow_manage.flow.framework.entity.ExecutionEntity;
import org.nl.wms.flow_manage.flow.framework.entity.node.base.impl.FlowNode;
import org.nl.wms.flow_manage.flow.service.deployment.IActReProcdefService;
import org.nl.wms.flow_manage.flow.service.deployment.dao.ActReProcdef;
import org.nl.wms.flow_manage.flow.service.execution.dao.ActRuExecution;
import org.nl.wms.flow_manage.monitor.event.FlowEndEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -30,7 +33,7 @@ import java.util.concurrent.CountDownLatch;
* 源UserTask
*/
@Service("endEvent")
public class EndEventActivityBehavior extends FlowNodeActivityBehavior {
public class EndEventActivityBehavior extends FlowNodeActivityBehavior<JSONObject> {
@Autowired
private IActReProcdefService reProcdefService;
@@ -41,12 +44,18 @@ public class EndEventActivityBehavior extends FlowNodeActivityBehavior {
@Override
public void execute(ExecutionEntity entity) {
public void execute(ExecutionEntity<JSONObject> entity) {
//流程结束:判断是否是子流程,是的话调用父流程
iActRuExecutionService.update(new UpdateWrapper<ActRuExecution>()
.eq("proc_inst_id",entity.getProc_inst_id())
.set("status", StatusEnum.FLOW_STATUS.code("完成")));
JSONObject data = entity.getT();
ExecutionDto executionDto = data.toJavaObject(ExecutionDto.class);
//后续监听器通过流程中监听事件配置
BussEventMulticaster.Publish(FlowEndEvent.builder().dto(executionDto)
.form_type(entity.getForm_type())
.form_id(entity.getForm_id()).build());
}
@Override
@@ -72,6 +81,7 @@ public class EndEventActivityBehavior extends FlowNodeActivityBehavior {
FlowNode flowNode = bpmnModel.getProcesses().get(current);
//通过该标识触发
flowNode.setPassNode(Boolean.TRUE);
entity.setT(parent.getForm_data());
entity.setCurrentFlowElement(flowNode);
entity.setProc_inst_id(parent.getProc_inst_id());
entity.setParent_id(parent.getParent_id());

View File

@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.enums.StatusEnum;
import org.nl.common.utils.CodeUtil;
@@ -16,6 +17,8 @@ import org.nl.wms.flow_manage.flow.framework.entity.ExecutionEntity;
import org.nl.wms.flow_manage.flow.framework.entity.node.base.impl.FlowElement;
import org.nl.wms.flow_manage.flow.framework.entity.node.impl.task.impl.StrucForm;
import org.nl.wms.flow_manage.flow.framework.process.nodeType.TypeHandler;
import org.nl.wms.flow_manage.flow.service.history.IActHiExecutionService;
import org.nl.wms.flow_manage.flow.service.history.dao.ActHiExecution;
import org.nl.wms.pm_manage.form_data.service.IPmFormDataService;
import org.nl.wms.pm_manage.form_data.service.dao.PmFormData;
import org.springframework.beans.factory.annotation.Autowired;
@@ -29,14 +32,17 @@ import org.springframework.stereotype.Service;
获取表单配置表
确认有没有自定义字段:如果有则创建自定义字段
生成出入库单单据
* 流程执行到后面之后需要拿到回执单对应的原始数据
*/
@Service("strucForm")
public class StrucFormActivityBehavior extends FlowNodeActivityBehavior<JSONObject> {
@Autowired
IBmFormStrucService iBmFormStrucService;
private IBmFormStrucService iBmFormStrucService;
//分配明细用公用表
@Autowired
IPmFormDataService iPmFormDataService;
private IPmFormDataService iPmFormDataService;
@Autowired
private IActHiExecutionService actHiExecutionService;
@Override
public void execute(ExecutionEntity<JSONObject> entity) {
@@ -53,14 +59,22 @@ public class StrucFormActivityBehavior extends FlowNodeActivityBehavior<JSONObje
}
//TEST:这部分数据放在框架中,每个节点都需要
entity.setForm_struc(targetStruc);
//怕断是否指定数据源:
String source_data = currentNode.getSource_data();
JSONObject sourceData = entity.getT();
if (StringUtils.isNotEmpty(source_data)){
ActHiExecution one = actHiExecutionService.getOne(new QueryWrapper<ActHiExecution>()
.eq("activity_id", source_data)
.eq("proc_inst_id", entity.getProc_inst_id()));
sourceData = one.getForm_data();
}
//处理自定义参数:
if (currentNode.getSkipExpression()!=null || currentNode.getSkipExpression().size()>0){
TypeHandler<JSONObject,JSONObject> typeHandler = TypeHandler.HANDLER_MAP.get(currentNode.getCategory());
if (typeHandler==null){
throw new BadRequestException("【flow】当前节点处理类型未定义");
}
JSONObject handler = typeHandler.handler(currentNode.getSkipExpression(), entity.getT(), targetStruc);
JSONObject handler = typeHandler.handler(currentNode.getSkipExpression(), sourceData, targetStruc);
//该参数里包含三部分:主数据基础字段,组数据自定义及明细,
//明细:基础字段,组数据自定义及参数:

View File

@@ -17,6 +17,11 @@ public class StrucForm extends ExecuteTask {
* 表单类型
*/
private String form_type;
/**
* 指定数据来源:从节点中获取
*/
private String source_data;
/**
* 表单处理类别
*/

View File

@@ -35,8 +35,14 @@ public class ClassHandler extends TypeHandler<JSONObject,ExecutionEntity<JSONOb
JSONObject form = process.process(dto.getT(), flowNode.getAuxParam());
result.put("t",form);
//后续:涉及框架的参数提到框架中处理
result.put("source_form_id",dto.getForm_id());
result.put("source_form_type",dto.getForm_type());
String source_form_type = dto.getForm_type();
String source_form_id = dto.getForm_id();
if (dto.getForm_type().equals(flowNode.getForm_type())){
source_form_type = dto.getSource_form_type();
source_form_id = dto.getSource_form_id();
}
result.put("source_form_id",source_form_id);
result.put("source_form_type",source_form_type);
result.put("form_id",form.getString("id"));
result.put("form_type",flowNode.getForm_type());

View File

@@ -1,9 +1,10 @@
package org.nl.wms.flow_manage.event;
package org.nl.wms.flow_manage.monitor;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.publish.AbstraceListener;
import org.nl.wms.flow_manage.flow.service.execution.IFlowOperationService;
import org.nl.wms.flow_manage.monitor.event.FlowStartEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

View File

@@ -0,0 +1,29 @@
package org.nl.wms.flow_manage.monitor.event;
import com.alibaba.fastjson.JSONObject;
import lombok.Builder;
import lombok.Data;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.publish.event.PublishEvent;
import org.nl.wms.flow_manage.flow.framework.entity.ExecutionDto;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
/*
* @author ZZQ
* @Date 2024/5/17 15:02
*/
@Data
@Builder
public class FlowEndEvent extends PublishEvent {
//数据传输
private ExecutionDto dto;
private String form_type;
private String form_id;
}

View File

@@ -1,4 +1,4 @@
package org.nl.wms.flow_manage.event;
package org.nl.wms.flow_manage.monitor.event;
import com.alibaba.fastjson.JSONObject;
import org.nl.common.domain.exception.BadRequestException;

View File

@@ -15,7 +15,7 @@ import org.nl.common.utils.MapOf;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.base_manage.vehicle.vehicleMater.service.IMdPbVehicleMaterService;
import org.nl.wms.base_manage.vehicle.vehicleMater.service.dao.MdPbVehicleMater;
import org.nl.wms.flow_manage.event.FlowStartEvent;
import org.nl.wms.flow_manage.monitor.event.FlowStartEvent;
import org.nl.wms.md_manage.group_dick.service.IMdGruopDtlService;
import org.nl.wms.md_manage.group_dick.service.dao.MdGruopDick;
import org.nl.wms.md_manage.group_dick.service.dao.MdGruopDtl;
@@ -23,9 +23,7 @@ import org.nl.wms.md_manage.group_dick.service.dao.mapper.MdGruopDickMapper;
import org.nl.wms.md_manage.group_dick.service.IMdGruopDickService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.nl.wms.md_manage.group_dick.service.dto.GroupDickQuery;
import org.nl.wms.md_manage.group_dick.service.dto.MdGruopDtlDto;
import org.nl.wms.md_manage.group_dick.service.dto.MdGruopDtlVo;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -39,7 +37,6 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import java.util.stream.Collectors;
/**
* <p>

View File

@@ -0,0 +1,46 @@
package org.nl.wms.stor_manage.monitor.listener;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.enums.StatusEnum;
import org.nl.common.publish.AbstraceListener;
import org.nl.wms.flow_manage.flow.framework.entity.ExecutionDto;
import org.nl.wms.flow_manage.flow.service.execution.IFlowOperationService;
import org.nl.wms.flow_manage.monitor.event.FlowEndEvent;
import org.nl.wms.flow_manage.monitor.event.FlowStartEvent;
import org.nl.wms.stor_manage.io.service.in.iostor.IStIvtIostorinvInService;
import org.nl.wms.stor_manage.io.service.in.iostor.dao.StIvtIostorinvIn;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/*
* @author ZZQ
* @Date 2024/5/17 15:27
*/
@Component
@Slf4j
public class FlowEndEventListener extends AbstraceListener<FlowEndEvent> {
@Autowired
private IStIvtIostorinvInService iStIvtIostorinvInService;
@Override
protected String doEvent(FlowEndEvent event) {
ExecutionDto dto = event.getDto();
String form_type = dto.getForm_type();
String form_id = dto.getForm_id();
if (StringUtils.isEmpty(form_type)){
throw new BadRequestException("当前结束流程数据异常");
}
if (form_type.equals("st_ivt_iostorinv_in")){
iStIvtIostorinvInService.update(new UpdateWrapper<StIvtIostorinvIn>()
.set("status", StatusEnum.FORM_STATUS.code("完成"))
.set("update_time", DateUtil.now()).eq("id",form_id));
}
return "";
}
}