|
|
@@ -7,13 +7,16 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.xunmei.common.core.domain.iot.domain.IotAlarmSubsystem;
|
|
|
import com.xunmei.common.core.domain.iot.domain.IotAlarmSubsystemLog;
|
|
|
import com.xunmei.common.core.util.BeanHelper;
|
|
|
+import com.xunmei.common.core.utils.JacksonUtils;
|
|
|
import com.xunmei.mediator.api.protection.mapper.ProtectionLogMapper;
|
|
|
import com.xunmei.mediator.api.protection.service.IIotAlarmHostService;
|
|
|
import com.xunmei.mediator.api.protection.service.IotAlarmSubsystemService;
|
|
|
import com.xunmei.mediator.iot.service.IIotDeviceInfoService;
|
|
|
import com.xunmei.mediator.websocket.constant.WebSocketConstants;
|
|
|
import com.xunmei.mediator.websocket.dto.WebsocketExecuteReq;
|
|
|
+import com.xunmei.mediator.websocket.dto.WebsocketResult;
|
|
|
import com.xunmei.mediator.websocket.enums.ProductEnums;
|
|
|
+import com.xunmei.mediator.websocket.holder.WebSocketSessionHolder;
|
|
|
import com.xunmei.mediator.websocket.service.RouterService;
|
|
|
import com.xunmei.system.api.domain.iot.IotDeviceInfo;
|
|
|
import com.xunmei.system.api.enums.ProtectionStatus;
|
|
|
@@ -21,8 +24,9 @@ import com.xunmei.system.api.util.LogUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import javax.annotation.Resource;
|
|
|
+import java.io.Serializable;
|
|
|
import java.time.LocalDateTime;
|
|
|
-import java.util.StringJoiner;
|
|
|
+import java.util.*;
|
|
|
|
|
|
@Service
|
|
|
public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterService {
|
|
|
@@ -116,6 +120,44 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public void subSystemControl(Serializable id, boolean isArm) {
|
|
|
+ try {
|
|
|
+ IotAlarmSubsystem subsystem = subsystemService.getById(id);
|
|
|
+ if (subsystem != null){
|
|
|
+ QueryWrapper<IotDeviceInfo> wrapper = new QueryWrapper<>();
|
|
|
+ wrapper.lambda()
|
|
|
+ .eq(IotDeviceInfo::getDeviceCode,subsystem.getAlarmHostCode())
|
|
|
+ .eq(IotDeviceInfo::getIotToken,subsystem.getIotToken());
|
|
|
+ IotDeviceInfo deviceInfo = iIotDeviceInfoService.getOne(wrapper);
|
|
|
+ if (deviceInfo != null){
|
|
|
+ JSONObject object = new JSONObject();
|
|
|
+ object.put("id",Integer.valueOf(subsystem.getCode()));
|
|
|
+ object.put("isArm",isArm);
|
|
|
+ String topic = "/things/" + deviceInfo.getDeviceProduct() + "/" + deviceInfo.getDeviceCode() + "/service/invoke";
|
|
|
+ LogUtils.DEVICE_CONTROL_LOG.info("报警主机布撤防控制topic:{},控制参数:{}",topic,object.toJSONString());
|
|
|
+ invokeSubSystemControl(topic,object,WebSocketConstants.SUB_SYSTEM_CONTROL);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ LogUtils.DEVICE_CONTROL_LOG.error("报警主机布撤防控制失败",e);
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void invokeSubSystemControl(String topic,JSONObject object,String service){
|
|
|
+ WebsocketResult websocketResult = new WebsocketResult();
|
|
|
+ websocketResult.setId(UUID.randomUUID().toString());
|
|
|
+ websocketResult.setTimestamp(new Date());
|
|
|
+ websocketResult.setTopic(topic);
|
|
|
+ HashMap<String, Object> hashMap = new HashMap<>();
|
|
|
+ hashMap.put(WebSocketConstants.SERVICE, service);
|
|
|
+ hashMap.put(WebSocketConstants.ARGS, object);
|
|
|
+ websocketResult.setPayload(hashMap);
|
|
|
+ WebSocketSessionHolder.sendAll(JacksonUtils.toJSONString(websocketResult));
|
|
|
+ }
|
|
|
+
|
|
|
private void saveProtectionLog(IotAlarmSubsystem protection) {
|
|
|
IotAlarmSubsystemLog protectionLog = new IotAlarmSubsystemLog();
|
|
|
BeanHelper.copyProperties(protectionLog, protection);
|