|
|
|
@ -0,0 +1,296 @@
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* * | Licensed 未经许可不能去掉「OPENIITA」相关版权
|
|
|
|
|
|
|
|
* * +----------------------------------------------------------------------
|
|
|
|
|
|
|
|
* * | Author: xw2sy@163.com
|
|
|
|
|
|
|
|
* * +----------------------------------------------------------------------
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* Copyright [2024] [OPENIITA]
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
|
|
|
|
* you may not use this file except in compliance with the License.
|
|
|
|
|
|
|
|
* You may obtain a copy of the License at
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
|
|
|
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
|
|
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
|
|
|
|
* See the License for the specific language governing permissions and
|
|
|
|
|
|
|
|
* limitations under the License.
|
|
|
|
|
|
|
|
* /
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
package cc.iotkit.openapi.service.impl;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import cc.iotkit.common.enums.ErrCode;
|
|
|
|
|
|
|
|
import cc.iotkit.common.exception.BizException;
|
|
|
|
|
|
|
|
import cc.iotkit.common.thing.ThingModelMessage;
|
|
|
|
|
|
|
|
import cc.iotkit.data.manager.IDeviceInfoData;
|
|
|
|
|
|
|
|
import cc.iotkit.model.device.DeviceInfo;
|
|
|
|
|
|
|
|
import cc.iotkit.openapi.dto.bo.chicheng.ChichengThingBo;
|
|
|
|
|
|
|
|
import cc.iotkit.openapi.dto.bo.chicheng.ChichengUpdDataBo;
|
|
|
|
|
|
|
|
import cc.iotkit.openapi.dto.bo.chicheng.DeviceStatusBo;
|
|
|
|
|
|
|
|
import cc.iotkit.openapi.dto.bo.chicheng.HomeBo;
|
|
|
|
|
|
|
|
import cc.iotkit.openapi.dto.bo.chicheng.IndustryBo;
|
|
|
|
|
|
|
|
import cc.iotkit.openapi.service.ChichengService;
|
|
|
|
|
|
|
|
import cc.iotkit.temporal.IThingModelMessageData;
|
|
|
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
|
|
|
import org.springframework.beans.factory.annotation.Qualifier;
|
|
|
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
import java.util.UUID;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Slf4j
|
|
|
|
|
|
|
|
@Service
|
|
|
|
|
|
|
|
public class ChichengServiceImpl implements ChichengService {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
|
|
|
private IThingModelMessageData thingModelMessageData;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
|
|
|
@Qualifier("deviceInfoDataCache")
|
|
|
|
|
|
|
|
private IDeviceInfoData deviceInfoData;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
|
|
|
private ObjectMapper objectMapper;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public boolean receiveData1(HomeBo data) {
|
|
|
|
|
|
|
|
String requestId=UUID.randomUUID().toString();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
log.info("接收到驰诚的数据:mstype={},imei={},deviceName={},data={}",data.getMsgtype(),data.getImei(),data.getMsgtype(),data.getData());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Long time=data.getTimestamp()!=null?data.getTimestamp():System.currentTimeMillis();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
switch (data.getMsgtype()){
|
|
|
|
|
|
|
|
case "heartbeat":
|
|
|
|
|
|
|
|
case "data":
|
|
|
|
|
|
|
|
case "alarm":
|
|
|
|
|
|
|
|
handleReceiveData(data,time);
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
|
|
|
log.warn("接收驰诚的数据中出现了未知类i型数据:msgtype={},data={}",data.getMsgtype(),data.getData());
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public boolean receiveData2(IndustryBo data) {
|
|
|
|
|
|
|
|
String requestId=UUID.randomUUID().toString();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
log.info("接收到驰诚的数据:mstype={},imei={},deviceName={},data={}",data.getMsgtype(),data.getImei(),data.getMsgtype(),data.getData());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Long time=data.getTimestamp()!=null?data.getTimestamp():System.currentTimeMillis();
|
|
|
|
|
|
|
|
handleReceiveData(data,time);
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public boolean modifyDeviceStatus(DeviceStatusBo data) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DeviceInfo device=deviceInfoData.findByDeviceName(data.getDevicename());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (device == null) {
|
|
|
|
|
|
|
|
throw new BizException(ErrCode.DEVICE_NOT_FOUND);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if(!data.getMsgtype().equals("online") && !data.getMsgtype().equals("offline")){
|
|
|
|
|
|
|
|
throw new BizException(ErrCode.PARAMS_EXCEPTION);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
device.setState(new DeviceInfo.State(data.getMsgtype().equals("online"),device.getState().getOnlineTime(), device.getState().getOfflineTime()));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
deviceInfoData.save(device);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public boolean receiveThingData(ChichengThingBo data) {
|
|
|
|
|
|
|
|
if (data == null || data.getParams() == null || data.getParams().getUpd_data() == null) {
|
|
|
|
|
|
|
|
throw new BizException(ErrCode.PARAMS_EXCEPTION);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
ChichengUpdDataBo updData = objectMapper.readValue(data.getParams().getUpd_data(), ChichengUpdDataBo.class);
|
|
|
|
|
|
|
|
Long time = data.getTime() != null ? data.getTime() : System.currentTimeMillis();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Map<String, Object> dataMap = new HashMap<>();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dataMap.put("id", data.getId());
|
|
|
|
|
|
|
|
dataMap.put("version", data.getVersion());
|
|
|
|
|
|
|
|
dataMap.put("productKey", data.getProductKey());
|
|
|
|
|
|
|
|
dataMap.put("deviceName", data.getDeviceName());
|
|
|
|
|
|
|
|
dataMap.put("time", data.getTime());
|
|
|
|
|
|
|
|
dataMap.put("method", data.getMethod());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dataMap.put("raw_upd_data", data.getParams().getUpd_data());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dataMap.put("msg_type", updData.getMsg_type());
|
|
|
|
|
|
|
|
dataMap.put("error_val", updData.getError_val());
|
|
|
|
|
|
|
|
dataMap.put("ch_cnt", updData.getCh_cnt());
|
|
|
|
|
|
|
|
dataMap.put("erro_cnt", updData.getErro_cnt());
|
|
|
|
|
|
|
|
dataMap.put("alarm_low_cnt", updData.getAlarm_low_cnt());
|
|
|
|
|
|
|
|
dataMap.put("alarm_high_cnt", updData.getAlarm_high_cnt());
|
|
|
|
|
|
|
|
dataMap.put("offline_cnt", updData.getOffline_cnt());
|
|
|
|
|
|
|
|
dataMap.put("fault_state", updData.getFault_state());
|
|
|
|
|
|
|
|
dataMap.put("bsp_state", updData.getBsp_state());
|
|
|
|
|
|
|
|
dataMap.put("csq", updData.getCsq());
|
|
|
|
|
|
|
|
dataMap.put("rtd_val", updData.getRtd_val());
|
|
|
|
|
|
|
|
dataMap.put("adc_val", updData.getAdc_val());
|
|
|
|
|
|
|
|
dataMap.put("status_val", updData.getStatus_val());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (updData.getWireless() != null) {
|
|
|
|
|
|
|
|
dataMap.put("wireless", updData.getWireless());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (updData.getHost() != null) {
|
|
|
|
|
|
|
|
dataMap.put("host", updData.getHost());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dataMap.put("channel_status", buildChannelStatus(updData));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ThingModelMessage message = ThingModelMessage.builder()
|
|
|
|
|
|
|
|
.mid(UUID.randomUUID().toString())
|
|
|
|
|
|
|
|
.deviceId(data.getDeviceName())
|
|
|
|
|
|
|
|
.deviceName(data.getDeviceName())
|
|
|
|
|
|
|
|
.type(ThingModelMessage.TYPE_PROPERTY)
|
|
|
|
|
|
|
|
.identifier(ThingModelMessage.ID_PROPERTY_REPORT)
|
|
|
|
|
|
|
|
.code(0)
|
|
|
|
|
|
|
|
.data(dataMap)
|
|
|
|
|
|
|
|
.time(time)
|
|
|
|
|
|
|
|
.occurred(time)
|
|
|
|
|
|
|
|
.build();
|
|
|
|
|
|
|
|
thingModelMessageData.add(message);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
log.info("接收到驰诚设备上报数据:msg_type={}, deviceName={}, ch_cnt={}",
|
|
|
|
|
|
|
|
updData.getMsg_type(), data.getDeviceName(), updData.getCh_cnt());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
|
|
log.error("解析驰诚设备上报数据失败:{}", e.getMessage(), e);
|
|
|
|
|
|
|
|
throw new BizException(ErrCode.PARAMS_EXCEPTION);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private List<Map<String, Object>> buildChannelStatus(ChichengUpdDataBo updData) {
|
|
|
|
|
|
|
|
List<Map<String, Object>> channelStatus = new ArrayList<>();
|
|
|
|
|
|
|
|
Integer[] rtdVal = updData.getRtd_val();
|
|
|
|
|
|
|
|
Integer[] statusVal = updData.getStatus_val();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int channelCount = updData.getCh_cnt() != null ? updData.getCh_cnt() : 0;
|
|
|
|
|
|
|
|
for (int i = 0; i < channelCount; i++) {
|
|
|
|
|
|
|
|
Map<String, Object> channel = new HashMap<>();
|
|
|
|
|
|
|
|
channel.put("channel", i + 1);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Integer rtd = rtdVal != null && i < rtdVal.length ? rtdVal[i] : null;
|
|
|
|
|
|
|
|
channel.put("rtd_val", rtd);
|
|
|
|
|
|
|
|
if (rtd != null) {
|
|
|
|
|
|
|
|
if (rtd == 65535) {
|
|
|
|
|
|
|
|
channel.put("rtd_desc", "离线");
|
|
|
|
|
|
|
|
} else if (rtd == -1) {
|
|
|
|
|
|
|
|
channel.put("rtd_desc", "无效");
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
channel.put("rtd_desc", "有效");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Integer status = statusVal != null && i < statusVal.length ? statusVal[i] : null;
|
|
|
|
|
|
|
|
channel.put("status_val", status);
|
|
|
|
|
|
|
|
channel.put("status_desc", parseStatusDesc(status));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
channelStatus.add(channel);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return channelStatus;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private String parseStatusDesc(Integer status) {
|
|
|
|
|
|
|
|
if (status == null) {
|
|
|
|
|
|
|
|
return "未知";
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (status) {
|
|
|
|
|
|
|
|
case 0:
|
|
|
|
|
|
|
|
return "正常";
|
|
|
|
|
|
|
|
case 1:
|
|
|
|
|
|
|
|
return "低报";
|
|
|
|
|
|
|
|
case 2:
|
|
|
|
|
|
|
|
return "高报";
|
|
|
|
|
|
|
|
case 3:
|
|
|
|
|
|
|
|
return "故障";
|
|
|
|
|
|
|
|
case 4:
|
|
|
|
|
|
|
|
return "离线";
|
|
|
|
|
|
|
|
case 5:
|
|
|
|
|
|
|
|
return "超量程";
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
|
|
|
return "未知(" + status + ")";
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 处理工业控制器上报的数据
|
|
|
|
|
|
|
|
* */
|
|
|
|
|
|
|
|
private void handleReceiveData(IndustryBo data,Long time){
|
|
|
|
|
|
|
|
Map<String,Object> data_map=new HashMap<>();
|
|
|
|
|
|
|
|
data_map.put("msgtype",data.getMsgtype());
|
|
|
|
|
|
|
|
data_map.put("software_version",data.getSoftware_version());
|
|
|
|
|
|
|
|
data_map.put("sinr",data.getSinr());
|
|
|
|
|
|
|
|
data_map.put("rsrp",data.getRsrp());
|
|
|
|
|
|
|
|
data_map.put("timestamp",data.getTimestamp());
|
|
|
|
|
|
|
|
data_map.put("imei",data.getImei());
|
|
|
|
|
|
|
|
data_map.put("iccid",data.getIccid());
|
|
|
|
|
|
|
|
data_map.put("devicename",data.getDevicename());
|
|
|
|
|
|
|
|
data_map.put("data",data.getData());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ThingModelMessage message= ThingModelMessage.builder()
|
|
|
|
|
|
|
|
.mid(UUID.randomUUID().toString())
|
|
|
|
|
|
|
|
.deviceId(data.getImei())
|
|
|
|
|
|
|
|
.deviceName(data.getDevicename())
|
|
|
|
|
|
|
|
.type(ThingModelMessage.TYPE_PROPERTY)
|
|
|
|
|
|
|
|
.identifier(ThingModelMessage.ID_PROPERTY_REPORT)
|
|
|
|
|
|
|
|
.code(0)
|
|
|
|
|
|
|
|
.data(data_map)
|
|
|
|
|
|
|
|
.time(time)
|
|
|
|
|
|
|
|
.occurred(time)
|
|
|
|
|
|
|
|
.build();
|
|
|
|
|
|
|
|
thingModelMessageData.add(message);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 处理家报和独立探头上报的数据
|
|
|
|
|
|
|
|
* */
|
|
|
|
|
|
|
|
private void handleReceiveData(HomeBo data,Long time){
|
|
|
|
|
|
|
|
Map<String,Object> data_map=new HashMap<>();
|
|
|
|
|
|
|
|
data_map.put("msgtype",data.getMsgtype());
|
|
|
|
|
|
|
|
data_map.put("software_version",data.getSoftware_version());
|
|
|
|
|
|
|
|
data_map.put("sinr",data.getSinr());
|
|
|
|
|
|
|
|
data_map.put("rsrp",data.getRsrp());
|
|
|
|
|
|
|
|
data_map.put("timestamp",data.getTimestamp());
|
|
|
|
|
|
|
|
data_map.put("imei",data.getImei());
|
|
|
|
|
|
|
|
data_map.put("iccid",data.getIccid());
|
|
|
|
|
|
|
|
data_map.put("devicename",data.getDevicename());
|
|
|
|
|
|
|
|
data_map.put("data",data.getData());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ThingModelMessage message= ThingModelMessage.builder()
|
|
|
|
|
|
|
|
.mid(UUID.randomUUID().toString())
|
|
|
|
|
|
|
|
.deviceId(data.getImei())
|
|
|
|
|
|
|
|
.deviceName(data.getDevicename())
|
|
|
|
|
|
|
|
.type(ThingModelMessage.TYPE_PROPERTY)
|
|
|
|
|
|
|
|
.identifier(ThingModelMessage.ID_PROPERTY_REPORT)
|
|
|
|
|
|
|
|
.code(0)
|
|
|
|
|
|
|
|
.data(data_map)
|
|
|
|
|
|
|
|
.time(time)
|
|
|
|
|
|
|
|
.occurred(time)
|
|
|
|
|
|
|
|
.build();
|
|
|
|
|
|
|
|
thingModelMessageData.add(message);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|