LiteFlow.xml
<?xml version="1.0" encoding="UTF-8"?>
<flow>
<!--预案确认后-->
<chain name="planExecFlowConfirmAfter">
<!--查询预案信息并组装VO方便一下逻辑运算-->
<then value="selectPlan"/>
<!--查看此预案之前是否有其他预案正在执行-->
<then value="planBeforeStop"/>
<!--修改预案状态为待执行-->
<then value="updatePlanReserveDetail"/>
<!--异步执行 预案设备任务,预案人员任务-->
<when value="planTaskDevice,planTaskPeople" any="false"/>
<!--websocket推送任务信息-->
<then value="websocketTaskDetail"/>
</chain>
LiteComponent接口
package com.metro.modules.plan.liteflow.common;
/**
-
组件id和名称
*/public interface LiteComponent { interface PlanLite { // 执行器名称 String PLAN_EXEC_FLOW_CONFIRM_AFTER="planExecFlowConfirmAfter"; String SELECT_PLAN = "selectPlan"; String SELECT_PLAN_NAME = "设置预案参数"; String PLAN_RULE = "planRule"; String PLAN_RULE_NAME = "判断预案规则"; String PLAN_BEFORE = "planBeforeStop"; String PLAN_BEFORE_NAME = "检查此预案之前是否有其他预案正在执行"; String PLAN_TASK_DEVICE = "planTaskDevice"; String PLAN_TASK_DEVICE_NAME = "预案设备任务"; String PLAN_TASK_PEOPLE = "planTaskPeople"; String PLAN_TASK_PEOPLE_NAME = "预案人员任务"; String INSERT_NEW_PLAN_RESERVE_DETAIL = "insertNewPlanReserveDetail"; String INSERT_NEW_PLAN_RESERVE_DETAIL_NAME = "插入预案手动执行记录"; String INSERT_CONDITION_NEW_PLAN_RESERVE_DETAIL = "insertConditionNewPlanReserveDetail"; String INSERT_CONDITION_NEW_PLAN_RESERVE_DETAIL_NAME = "插入条件预案执行记录"; String INSERT_TIME_NEW_PLAN_RESERVE_DETAIL = "insertTimePlanReserveDetail"; String INSERT_TIME_NEW_PLAN_RESERVE_DETAIL_NAME = "插入定时预案执行记录"; String UPDATE_PLAN_RESERVE_DETAIL = "updatePlanReserveDetail"; String UPDATE_PLAN_RESERVE_DETAIL_NAME = "修改预案状态为待执行"; String WEBSOCKET_TASK_DETAIL = "websocketTaskDetail"; String WEBSOCKET_TASK_DETAIL_NAME = "websocket推送任务信息"; }
接口实现
@GetMapping("/planExecute") @ApiOperationSupport(order = 14) @ApiOperation(value = "管理端预案确认执行", notes = "管理端预案确认执行") public R planExecute( @ApiParam(name = "id", value = "预案ID", required = true) @RequestParam(value = "id") Long id, @ApiParam(name = "dialogTime", value = "web弹窗时间", required = true) @RequestParam(value = "dialogTime") Date dialogTime) { ExecParams execParams = new ExecParams(); execParams.setId(id); execParams.setDialogTime(dialogTime); execParams.setUserId(null); LiteflowResponse<ExecSlot> response = flowExecutor.execute2Resp(LiteComponent.PlanLite.PLAN_EXEC_FLOW_CONFIRM_AFTER,execParams, ExecSlot.class); ExecSlot slot = response.getSlot(); log.info("管理端预案确认执行结束: {}", slot.toString()); if (!slot.isFlag()) { R.fail(500, slot.getMessage()); } return R.success(slot.getMessage()); }
每个类的实现
@Slf4j
@LiteflowComponent(id = LiteComponent.PlanLite.PLAN_BEFORE, name = LiteComponent.PlanLite.PLAN_BEFORE_NAME)
@AllArgsConstructor
public class PlanBeforeStopComponent extends NodeComponent {
private final IPlanReserveDetailService planReserveDetailService;
private final ITaskManageService iTaskManageService;
private final IPlanReserveDetailDeviceService iPlanReserveDetailDeviceService;
@Override
public boolean isAccess() {
ExecSlot slot = this.getSlot();
PlanManage planManage = slot.getPlanManage();
if (PlanConst.Num.num1 == planManage.getPlanCategory()) {
return true;
}
log.info("[执行预案LITE]执行的预案类型!=1,不进行暂停");
return false;
}
@Override
public void process() {
log.info("[执行预案LITE]检查此预案之前是否有其他预案正在执行");
ExecSlot slot = this.getSlot();
//查询数据
List<PlanManageTask> planManageTaskList=planManageTaskervice.list()
solt.setpPanManageTaskList(planManageTaskList);
}
ExecSlot data数据
@Data
public class ExecSlot extends AbsSlot {
// 是否执行成功
private boolean flag = true;
// 执行信息反馈
private String message = "执行成功";
// 预案信息
private PlanManage planManage;
// 预案规则信息
private List<PlanManageRule> planManageRuleList;
// 预案任务
private List<PlanManageTask> planManageTaskList;
// 预案任务设施
private Map<Long, List<PlanManageTaskFacility>> planManageTaskFacilityMap;
// 之前预案的设施
private List<PlanManageTaskFacility> previousTaskFacilityList;
// 生成的任务数据
private List<TaskManage> taskManageList;
// 预案执行记录
private PlanReserveDetail planReserveDetail;
public void setFlagAndMessage(boolean flag, String message) {
this.flag = flag;
this.message = message;
}
}