|
|
@@ -1,9 +1,91 @@
|
|
|
package com.usky.rule.util;
|
|
|
|
|
|
+import com.fasterxml.jackson.core.type.TypeReference;
|
|
|
+import com.usky.rule.domain.RuleEngineLog;
|
|
|
+import com.usky.rule.enums.ActionTypeEnum;
|
|
|
+import com.usky.rule.listeners.CommonListener;
|
|
|
+import com.usky.rule.service.BaseSpaceService;
|
|
|
+import com.usky.rule.service.RuleEngineLogService;
|
|
|
+import com.usky.rule.service.RuleEngineService;
|
|
|
+import com.usky.rule.vo.Result;
|
|
|
+//import com.leo.common.context.UserContext;
|
|
|
+//import com.usky.rule.util.DateTimeUtil;
|
|
|
+//import com.usky.rule.util.JsonUtil;
|
|
|
+//import com.leo.common.util.SnowflakeIdGenerator;
|
|
|
+//import com.leo.dao.po.AlarmEvent;
|
|
|
+//import com.leo.dao.po.Message;
|
|
|
+//import com.leo.dao.po.RuleEngineLog;
|
|
|
+//import com.leo.dao.po.Space;
|
|
|
+//import com.leo.dao.po.UserMessage;
|
|
|
+//import com.leo.dao.po.WorkOrder;
|
|
|
+//import com.leo.dao.po.WorkOrderStatusRecord;
|
|
|
+//import com.leo.model.dto.GatewayControlParamsDTO;
|
|
|
+//import com.usky.rule.enums.ActionTypeEnum;
|
|
|
+//import com.usky.rule.enums.AlarmEventStatusEnum;
|
|
|
+//import com.usky.rule.enums.WorkOrderStatusEnum;
|
|
|
+//import com.leo.model.vo.ruleEngine.action.AlarmEventAction;
|
|
|
+//import com.usky.rule.vo.action.DeviceControlAction;
|
|
|
+//import com.usky.rule.vo.action.RuleEngineAction;
|
|
|
+//import com.leo.model.vo.ruleEngine.log.vo.AlarmActionLog;
|
|
|
+//import com.leo.model.vo.ruleEngine.log.vo.AlarmEventLog;
|
|
|
+//import com.usky.rule.vo.log.BaseLog;
|
|
|
+//import com.usky.rule.vo.log.Control;
|
|
|
+//import com.usky.rule.vo.log.ControlAction;
|
|
|
+//import com.usky.rule.vo.log.DeviceControlResult;
|
|
|
+//import com.usky.rule.vo.log.RuleEngineDetailLog;
|
|
|
+//import com.usky.rule.vo.visualization.SimpleVO;
|
|
|
+//import com.usky.rule.listeners.CommonListener;
|
|
|
+//import com.leo.service.alarm.AlarmEventService;
|
|
|
+//import com.leo.service.device.DeviceFunctionService;
|
|
|
+//import com.leo.service.device.DeviceService;
|
|
|
+//import com.leo.service.device.GatewayService;
|
|
|
+//import com.leo.service.message.MessageService;
|
|
|
+//import com.leo.service.message.UserMessageService;
|
|
|
+//import com.leo.service.product.ProductTemplateFunctionValueService;
|
|
|
+//import com.usky.rule.service.RuleEngineLogService;
|
|
|
+//import com.usky.rule.service.RuleEngineService;
|
|
|
+//import com.usky.rule.service.BaseSpaceService;
|
|
|
+//import com.leo.service.workOrder.WorkOrderService;
|
|
|
+//import com.leo.service.workOrder.WorkOrderStatusRecordService;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.Year;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.HashSet;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Set;
|
|
|
+
|
|
|
+import com.usky.rule.vo.Result;
|
|
|
+import com.usky.rule.vo.action.AlarmEventAction;
|
|
|
+import com.usky.rule.vo.action.DeviceControlAction;
|
|
|
+import com.usky.rule.vo.action.RuleEngineAction;
|
|
|
+import com.usky.rule.vo.log.BaseLog;
|
|
|
+import com.usky.rule.vo.log.ControlAction;
|
|
|
+import com.usky.rule.vo.log.DeviceControlResult;
|
|
|
+import com.usky.rule.vo.log.RuleEngineDetailLog;
|
|
|
+import com.usky.rule.vo.visualization.SimpleVO;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.jetbrains.annotations.NotNull;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
@Component
|
|
|
public class RuleEngineUtil {
|
|
|
+ private static final Logger LOGGER = LoggerFactory.getLogger(CommonListener.class);
|
|
|
+ private RuleEngineLogService ruleEngineLogService;
|
|
|
+ private RuleEngineService ruleEngineService;
|
|
|
+// private GatewayService gatewayService;
|
|
|
+// private BaseSpaceService spaceService;
|
|
|
+// private DeviceFunctionService deviceFunctionService;
|
|
|
+// private DeviceService deviceService;
|
|
|
+// private AlarmEventService alarmEventService;
|
|
|
+// private MessageService messageService;
|
|
|
+// private UserMessageService userMessageService;
|
|
|
+// private WorkOrderStatusRecordService workOrderStatusRecordService;
|
|
|
+// private ProductTemplateFunctionValueService productTemplateFunctionValueService;
|
|
|
+
|
|
|
public static String getJobGroup(Long ruleEngineId) {
|
|
|
return "trigger-" + ruleEngineId;
|
|
|
}
|
|
|
@@ -11,4 +93,253 @@ public class RuleEngineUtil {
|
|
|
public static String getTriggerCronJobName(Integer index) {
|
|
|
return "job-" + index;
|
|
|
}
|
|
|
+
|
|
|
+ public void performMultipleDevicesControl(Long ruleEngineId, boolean isAuto, String triggerType, Long projectId, Long spaceId, List<RuleEngineAction> actionList, RuleEngineDetailLog ruleEngineDetail) {
|
|
|
+ List<BaseLog> baseLogs = new ArrayList();
|
|
|
+ ruleEngineDetail.setActions(baseLogs);
|
|
|
+// LocalDateTime now = LocalDateTime.now();
|
|
|
+// Set<String> deviceActionTypes = new HashSet(3);
|
|
|
+// String ruleEngineName = this.ruleEngineService.getName(ruleEngineId);
|
|
|
+//
|
|
|
+// for(RuleEngineAction ruleEngineAction : actionList) {
|
|
|
+// if (ActionTypeEnum.DEVICE_CONTROL.getType().equals(ruleEngineAction.getType())) {
|
|
|
+// DeviceControlAction deviceControlAction = (DeviceControlAction)ruleEngineAction;
|
|
|
+// deviceActionTypes.add("deviceControl");
|
|
|
+// BaseLog baseLog = new BaseLog();
|
|
|
+// baseLog.setType(ActionTypeEnum.DEVICE_CONTROL.getType());
|
|
|
+// ControlAction controlAction = new ControlAction();
|
|
|
+// this.performSingleDeviceControl(deviceControlAction, controlAction, now);
|
|
|
+// baseLog.setDetail(controlAction);
|
|
|
+// baseLogs.add(baseLog);
|
|
|
+// } else if (ActionTypeEnum.ALARM_EVENT.getType().equals(ruleEngineAction.getType())) {
|
|
|
+// this.generateAlarmEvent(ruleEngineId, ruleEngineName, projectId, spaceId, Collections.singletonList(ruleEngineAction), ruleEngineDetail);
|
|
|
+// deviceActionTypes.add("alarmEvent");
|
|
|
+// BaseLog baseLog = new BaseLog();
|
|
|
+// baseLog.setType(ActionTypeEnum.ALARM_EVENT.getType());
|
|
|
+// baseLog.setDetail(getAlarmActionLog(now, (AlarmEventAction)ruleEngineAction));
|
|
|
+// baseLogs.add(baseLog);
|
|
|
+// } else if (ActionTypeEnum.WORK_ORDER.getType().equals(ruleEngineAction.getType())) {
|
|
|
+// this.generateWorkOrder(ruleEngineId, ruleEngineName, projectId, spaceId, Collections.singletonList(ruleEngineAction), ruleEngineDetail);
|
|
|
+// deviceActionTypes.add("workOrder");
|
|
|
+// BaseLog baseLog = new BaseLog();
|
|
|
+// baseLog.setType(ActionTypeEnum.WORK_ORDER.getType());
|
|
|
+// baseLog.setDetail(getAlarmActionLog(now, (AlarmEventAction)ruleEngineAction));
|
|
|
+// baseLogs.add(baseLog);
|
|
|
+// }
|
|
|
+//
|
|
|
+// RuleEngineLog ruleEngineLog = new RuleEngineLog();
|
|
|
+// ruleEngineLog.setDetail(JsonUtil.toJson(ruleEngineDetail));
|
|
|
+// ruleEngineLog.setRuleEngineId(ruleEngineId);
|
|
|
+// ruleEngineLog.setRuleEngineName(ruleEngineName);
|
|
|
+// ruleEngineLog.setAutoTrigger((byte)(isAuto ? 1 : 0));
|
|
|
+// ruleEngineLog.setProjectId(projectId);
|
|
|
+// ruleEngineLog.setAction(String.join(",", deviceActionTypes));
|
|
|
+// ruleEngineLog.setTriggerType(triggerType);
|
|
|
+// ruleEngineLog.setUpdateTime(now);
|
|
|
+// ruleEngineLog.setCreateTime(now);
|
|
|
+// ruleEngineLog.setCreatedBy(1L);
|
|
|
+// ruleEngineLog.setUpdatedBy(1L);
|
|
|
+// ruleEngineLog.setTime(now);
|
|
|
+// this.ruleEngineLogService.save(ruleEngineLog);
|
|
|
+// }
|
|
|
+//
|
|
|
+ }
|
|
|
+//
|
|
|
+// @NotNull
|
|
|
+// private static AlarmActionLog getAlarmActionLog(LocalDateTime now, AlarmEventAction ruleEngineAction) {
|
|
|
+// AlarmActionLog alarmActionLog = new AlarmActionLog();
|
|
|
+// List<AlarmEventLog> alarmEventLogs = new ArrayList();
|
|
|
+// alarmActionLog.setAlarms(alarmEventLogs);
|
|
|
+// alarmActionLog.setTime(DateTimeUtil.format(now));
|
|
|
+// AlarmEventLog alarmEventLog = new AlarmEventLog();
|
|
|
+// alarmEventLog.setNotifiers(ruleEngineAction.getNotifiers());
|
|
|
+// alarmEventLog.setLevel(ruleEngineAction.getLevel());
|
|
|
+// alarmEventLog.setMethod(ruleEngineAction.getMethod());
|
|
|
+// alarmEventLogs.add(alarmEventLog);
|
|
|
+// return alarmActionLog;
|
|
|
+// }
|
|
|
+//
|
|
|
+// public void generateAlarmEvent(Long ruleEngineId, String ruleEngineName, Long projectId, Long spaceId, List<RuleEngineAction> actions, RuleEngineDetailLog ruleEngineDetail) {
|
|
|
+// List<AlarmEvent> events = new ArrayList();
|
|
|
+// actions.forEach((action) -> {
|
|
|
+// AlarmEventAction alarmEventAction = (AlarmEventAction)action;
|
|
|
+// String alarmContent = this.ruleEngineLogService.getAlarmContent(ruleEngineDetail);
|
|
|
+// AlarmEvent alarmEvent = new AlarmEvent();
|
|
|
+// Short level = Short.parseShort(alarmEventAction.getLevel());
|
|
|
+// assignValueForAlarmEvent(ruleEngineId, projectId, spaceId, level, alarmEvent);
|
|
|
+// Space space = (Space)this.spaceService.getById(spaceId);
|
|
|
+// alarmEvent.setSpacePathName(space != null ? space.getPathName() : "");
|
|
|
+// alarmEvent.setStatus(AlarmEventStatusEnum.PENDING.getValue());
|
|
|
+// alarmEvent.setContent(alarmContent);
|
|
|
+// LocalDateTime now = LocalDateTime.now();
|
|
|
+// alarmEvent.setCreateTime(now);
|
|
|
+// alarmEvent.setCreatedBy(0L);
|
|
|
+// alarmEvent.setUpdatedBy(0L);
|
|
|
+// alarmEvent.setUpdateTime(now);
|
|
|
+// events.add(alarmEvent);
|
|
|
+// this.generateMessage(ruleEngineName, alarmEventAction.getNotifiers(), alarmContent, now);
|
|
|
+// });
|
|
|
+// this.alarmEventService.saveBatch(events);
|
|
|
+// }
|
|
|
+//
|
|
|
+// public void generateWorkOrder(Long ruleEngineId, String ruleEngineName, Long projectId, Long spaceId, List<RuleEngineAction> actions, RuleEngineDetailLog ruleEngineDetail) {
|
|
|
+// actions.forEach((action) -> {
|
|
|
+// AlarmEventAction alarmEventAction = (AlarmEventAction)action;
|
|
|
+// AlarmEvent alarmEvent = new AlarmEvent();
|
|
|
+// Short level = Short.parseShort(alarmEventAction.getLevel());
|
|
|
+// assignValueForAlarmEvent(ruleEngineId, projectId, spaceId, level, alarmEvent);
|
|
|
+// Space space = (Space)this.spaceService.getById(spaceId);
|
|
|
+// String spacePathName = space != null ? space.getPathName() : "";
|
|
|
+// alarmEvent.setSpacePathName(spacePathName);
|
|
|
+// alarmEvent.setStatus(AlarmEventStatusEnum.PENDING.getValue());
|
|
|
+// String alarmContent = this.ruleEngineLogService.getAlarmContent(ruleEngineDetail);
|
|
|
+// alarmEvent.setContent(alarmContent);
|
|
|
+// LocalDateTime now = LocalDateTime.now();
|
|
|
+// alarmEvent.setCreateTime(now);
|
|
|
+// alarmEvent.setCreatedBy(0L);
|
|
|
+// alarmEvent.setUpdatedBy(0L);
|
|
|
+// alarmEvent.setUpdateTime(now);
|
|
|
+// this.alarmEventService.save(alarmEvent);
|
|
|
+// WorkOrder workOrder = new WorkOrder();
|
|
|
+// workOrder.setProjectId(projectId);
|
|
|
+// workOrder.setSpaceId(spaceId);
|
|
|
+// workOrder.setSpacePathName(spacePathName);
|
|
|
+// workOrder.setContent(alarmContent);
|
|
|
+// workOrder.setNumber(String.valueOf(Year.now().getValue()) + SnowflakeIdGenerator.getInstance().nextId());
|
|
|
+// workOrder.setLevel(Short.parseShort(alarmEventAction.getLevel()));
|
|
|
+// workOrder.setStatus(WorkOrderStatusEnum.NOT_ASSIGN.getValue());
|
|
|
+// workOrder.setClassification(Short.valueOf((short)1));
|
|
|
+// workOrder.setCreateTime(now);
|
|
|
+// workOrder.setCreatedBy(0L);
|
|
|
+// workOrder.setUpdatedBy(0L);
|
|
|
+// workOrder.setUpdateTime(now);
|
|
|
+// workOrder.setBizId(alarmEvent.getId().toString());
|
|
|
+// this.workOrderService.save(workOrder);
|
|
|
+// WorkOrderStatusRecord workOrderStatusRecord = new WorkOrderStatusRecord();
|
|
|
+// workOrderStatusRecord.setWorkOrderId(workOrder.getId());
|
|
|
+// workOrderStatusRecord.setStatus(WorkOrderStatusEnum.NOT_ASSIGN.getValue());
|
|
|
+// workOrderStatusRecord.setOperatorId(UserContext.getUserId());
|
|
|
+// workOrderStatusRecord.setOperator("雷优人");
|
|
|
+// workOrderStatusRecord.setOperatorId(0L);
|
|
|
+// workOrderStatusRecord.setBizParamDescr("雷优人 提交工单 " + DateTimeUtil.format(LocalDateTime.now()));
|
|
|
+// workOrderStatusRecord.setCreateTime(now);
|
|
|
+// workOrderStatusRecord.setCreatedBy(0L);
|
|
|
+// workOrderStatusRecord.setUpdatedBy(0L);
|
|
|
+// workOrderStatusRecord.setUpdateTime(now);
|
|
|
+// this.workOrderStatusRecordService.save(workOrderStatusRecord);
|
|
|
+// this.generateMessage(ruleEngineName, alarmEventAction.getNotifiers(), alarmContent, now);
|
|
|
+// });
|
|
|
+// }
|
|
|
+//
|
|
|
+// private void generateMessage(String ruleEngineName, List<SimpleVO> notifiers, String alarmContent, LocalDateTime now) {
|
|
|
+// Message message = new Message();
|
|
|
+// message.setContent(alarmContent);
|
|
|
+// message.setCreateTime(now);
|
|
|
+// message.setCreatedBy(0L);
|
|
|
+// message.setUpdatedBy(0L);
|
|
|
+// message.setUpdateTime(now);
|
|
|
+// this.messageService.save(message);
|
|
|
+// if (notifiers != null) {
|
|
|
+// List<UserMessage> userMessages = new ArrayList();
|
|
|
+// notifiers.forEach((notifier) -> {
|
|
|
+// UserMessage userMessage = new UserMessage();
|
|
|
+// userMessage.setMsgId(message.getId());
|
|
|
+// userMessage.setTitle(ruleEngineName);
|
|
|
+// userMessage.setMsgType(Short.valueOf((short)1));
|
|
|
+// userMessage.setSubMsgType(Short.valueOf((short)1));
|
|
|
+// userMessage.setUserId(Long.parseLong(notifier.getId()));
|
|
|
+// userMessage.setSentTime(now);
|
|
|
+// userMessage.setCreateTime(now);
|
|
|
+// userMessage.setCreatedBy(0L);
|
|
|
+// userMessage.setUpdatedBy(0L);
|
|
|
+// userMessage.setUpdateTime(now);
|
|
|
+// userMessages.add(userMessage);
|
|
|
+// });
|
|
|
+// this.userMessageService.saveBatch(userMessages);
|
|
|
+// }
|
|
|
+//
|
|
|
+// }
|
|
|
+//
|
|
|
+// private static void assignValueForAlarmEvent(Long ruleEngineId, Long projectId, Long spaceId, Short level, AlarmEvent alarmEvent) {
|
|
|
+// alarmEvent.setProjectId(projectId);
|
|
|
+// alarmEvent.setSn(String.valueOf(Year.now().getValue()) + SnowflakeIdGenerator.getInstance().nextId());
|
|
|
+// alarmEvent.setLevel(level);
|
|
|
+// alarmEvent.setType(Short.valueOf((short)1));
|
|
|
+// alarmEvent.setBizId(ruleEngineId.toString());
|
|
|
+// alarmEvent.setTime(LocalDateTime.now());
|
|
|
+// alarmEvent.setSpaceId(spaceId);
|
|
|
+// }
|
|
|
+//
|
|
|
+// public void performSingleDeviceControl(DeviceControlAction deviceControlAction, ControlAction controlAction, LocalDateTime now) {
|
|
|
+// List<SimpleVO> devices = deviceControlAction.getDevices();
|
|
|
+// if (devices != null && !devices.isEmpty()) {
|
|
|
+// String deviceId = ((SimpleVO)devices.get(0)).getId();
|
|
|
+// List<DeviceControlAction.Functions> functions = deviceControlAction.getFunctions();
|
|
|
+// List<Control> controls = new ArrayList();
|
|
|
+// List<DeviceControlResult> deviceControlResults = new ArrayList();
|
|
|
+// controlAction.setControls(controls);
|
|
|
+// controlAction.setDevices(deviceControlResults);
|
|
|
+// controlAction.setTime(DateTimeUtil.format(now));
|
|
|
+//
|
|
|
+// for(DeviceControlAction.Functions function : functions) {
|
|
|
+// HashMap<String, String> functionMap = new HashMap();
|
|
|
+// functionMap.put(function.getIdentifier(), function.getValue());
|
|
|
+// Control control = new Control();
|
|
|
+// control.setDelaySeconds(function.getDelaySeconds());
|
|
|
+// control.setIdentifier(function.getIdentifier());
|
|
|
+// control.setName(this.deviceFunctionService.getName(deviceId, function.getIdentifier()));
|
|
|
+// control.setValue(function.getValue());
|
|
|
+// String valueDesc = this.productTemplateFunctionValueService.getValueDesc(deviceId, function.getIdentifier(), function.getValue());
|
|
|
+// control.setValueDesc(valueDesc);
|
|
|
+// controls.add(control);
|
|
|
+//
|
|
|
+// for(SimpleVO device : devices) {
|
|
|
+// String id = device.getId();
|
|
|
+// String name = device.getName();
|
|
|
+// GatewayControlParamsDTO dto = new GatewayControlParamsDTO();
|
|
|
+// dto.setDeviceId(id);
|
|
|
+// dto.setFunctions(functionMap);
|
|
|
+// dto.setTimeout(function.getDelaySeconds());
|
|
|
+// dto.setType(Short.valueOf((short)5));
|
|
|
+// DeviceControlResult deviceControlResult = new DeviceControlResult();
|
|
|
+// deviceControlResult.setId(id);
|
|
|
+// deviceControlResult.setName(StringUtils.isBlank(name) ? this.deviceService.getName(id) : name);
|
|
|
+// ArrayList<DeviceControlResult.Result> results = new ArrayList();
|
|
|
+// deviceControlResult.setResult(results);
|
|
|
+// deviceControlResults.add(deviceControlResult);
|
|
|
+// DeviceControlResult.Result result = new DeviceControlResult.Result();
|
|
|
+//
|
|
|
+// try {
|
|
|
+// result.setReqTime(DateTimeUtil.format(LocalDateTime.now()));
|
|
|
+// String content = this.gatewayService.controlDevice(dto);
|
|
|
+// Result<?> reponseResult = (Result)JsonUtil.parse(content, new TypeReference<Result<?>>() {
|
|
|
+// });
|
|
|
+// result.setCode(reponseResult.getCode());
|
|
|
+// } catch (Exception e) {
|
|
|
+// result.setCode("200001");
|
|
|
+// result.setMessage(e.getMessage());
|
|
|
+// }
|
|
|
+//
|
|
|
+// result.setRespTime(DateTimeUtil.format(LocalDateTime.now()));
|
|
|
+// results.add(result);
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// public RuleEngineUtil(final RuleEngineLogService ruleEngineLogService, final RuleEngineService ruleEngineService, final GatewayService gatewayService, final SpaceService spaceService, final DeviceFunctionService deviceFunctionService, final DeviceService deviceService, final AlarmEventService alarmEventService, final WorkOrderService workOrderService, final MessageService messageService, final UserMessageService userMessageService, final WorkOrderStatusRecordService workOrderStatusRecordService, final ProductTemplateFunctionValueService productTemplateFunctionValueService) {
|
|
|
+// this.ruleEngineLogService = ruleEngineLogService;
|
|
|
+// this.ruleEngineService = ruleEngineService;
|
|
|
+// this.gatewayService = gatewayService;
|
|
|
+// this.spaceService = spaceService;
|
|
|
+// this.deviceFunctionService = deviceFunctionService;
|
|
|
+// this.deviceService = deviceService;
|
|
|
+// this.alarmEventService = alarmEventService;
|
|
|
+// this.workOrderService = workOrderService;
|
|
|
+// this.messageService = messageService;
|
|
|
+// this.userMessageService = userMessageService;
|
|
|
+// this.workOrderStatusRecordService = workOrderStatusRecordService;
|
|
|
+// this.productTemplateFunctionValueService = productTemplateFunctionValueService;
|
|
|
+// }
|
|
|
}
|