|
|
@@ -5,6 +5,7 @@ import com.yunfeiyun.agmp.common.utils.StringUtils;
|
|
|
import com.yunfeiyun.agmp.common.utils.spring.SpringUtils;
|
|
|
import com.yunfeiyun.agmp.iot.common.constant.devicetype.IotDeviceDictConst;
|
|
|
import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
|
|
|
+import com.yunfeiyun.agmp.iot.common.enums.IotDeviceStatusTypeEnum;
|
|
|
import com.yunfeiyun.agmp.iot.common.model.device.IotDeviceStatusResVo;
|
|
|
import com.yunfeiyun.agmp.iots.core.manager.ConnectionManager;
|
|
|
import com.yunfeiyun.agmp.iots.service.IIotDeviceService;
|
|
|
@@ -42,19 +43,18 @@ public class IotStatusService {
|
|
|
@PostConstruct
|
|
|
void init() {
|
|
|
// 目前基于已经实现将最新数据放到DeviceConfig的设备,没有的将进行实现
|
|
|
- validateDeviceType.add(IotDeviceDictConst.TYPE_YF_CBD);// 云飞测报灯
|
|
|
- validateDeviceType.add(IotDeviceDictConst.TYPE_YF_BZY);// 云飞孢子仪
|
|
|
- validateDeviceType.add(IotDeviceDictConst.TYPE_YF_SCD);// 云飞杀虫灯
|
|
|
- validateDeviceType.add(IotDeviceDictConst.TYPE_YF_SQZ);// 云飞墒情站
|
|
|
- validateDeviceType.add(IotDeviceDictConst.TYPE_YF_QXZ);// 云飞环境监测
|
|
|
- validateDeviceType.add(IotDeviceDictConst.TYPE_XPH_YF_GSSQ);// 新浦会管式墒情
|
|
|
- validateDeviceType.add(IotDeviceDictConst.TYPE_XPH_YF_SQZ);// 新浦会云飞墒情站
|
|
|
- validateDeviceType.add(IotDeviceDictConst.TYPE_ADZN_GSSQ);// 爱迪智农管式墒情
|
|
|
- validateDeviceType.add(IotDeviceDictConst.TYPE_YF_XYCB_2);// 性诱测报2.0
|
|
|
- validateDeviceType.add(IotDeviceDictConst.TYPE_YF_XYCB_III);// 云飞-性诱测报灯III
|
|
|
- validateDeviceType.add(IotDeviceDictConst.TYPE_ZJSF_XYCB);// 中捷四方性诱
|
|
|
- validateDeviceType.add(IotDeviceDictConst.TYPE_YF_XCT);// 云飞吸虫塔
|
|
|
-
|
|
|
+// validateDeviceType.add(IotDeviceDictConst.TYPE_YF_CBD);// 云飞测报灯
|
|
|
+// validateDeviceType.add(IotDeviceDictConst.TYPE_YF_BZY);// 云飞孢子仪
|
|
|
+// validateDeviceType.add(IotDeviceDictConst.TYPE_YF_SCD);// 云飞杀虫灯
|
|
|
+// validateDeviceType.add(IotDeviceDictConst.TYPE_YF_SQZ);// 云飞墒情站
|
|
|
+// validateDeviceType.add(IotDeviceDictConst.TYPE_YF_QXZ);// 云飞环境监测
|
|
|
+// validateDeviceType.add(IotDeviceDictConst.TYPE_XPH_YF_GSSQ);// 新浦会管式墒情
|
|
|
+// validateDeviceType.add(IotDeviceDictConst.TYPE_XPH_YF_SQZ);// 新浦会云飞墒情站
|
|
|
+// validateDeviceType.add(IotDeviceDictConst.TYPE_ADZN_GSSQ);// 爱迪智农管式墒情
|
|
|
+// validateDeviceType.add(IotDeviceDictConst.TYPE_YF_XYCB_2);// 性诱测报2.0
|
|
|
+// validateDeviceType.add(IotDeviceDictConst.TYPE_YF_XYCB_III);// 云飞-性诱测报灯III
|
|
|
+// validateDeviceType.add(IotDeviceDictConst.TYPE_ZJSF_XYCB);// 中捷四方性诱
|
|
|
+// validateDeviceType.add(IotDeviceDictConst.TYPE_YF_XCT);// 云飞吸虫塔
|
|
|
|
|
|
|
|
|
//validateDeviceType.add(IotDeviceDictConst.TYPE_ZHAO_HE_SFJ);// 赵赫水肥机
|
|
|
@@ -71,6 +71,29 @@ public class IotStatusService {
|
|
|
//validateDeviceType.add(IotDeviceDictConst.TYPE_BY_SFJ);// 云飞水肥机
|
|
|
//validateDeviceType.add(IotDeviceDictConst.TYPE_HT_SFJ);// 宏泰水肥机
|
|
|
|
|
|
+ String[] deviceTypes = {
|
|
|
+ IotDeviceDictConst.TYPE_YF_CBD,
|
|
|
+ IotDeviceDictConst.TYPE_YF_BZY,
|
|
|
+ IotDeviceDictConst.TYPE_YF_SCD,
|
|
|
+ IotDeviceDictConst.TYPE_YF_SQZ,
|
|
|
+ IotDeviceDictConst.TYPE_YF_QXZ,
|
|
|
+ IotDeviceDictConst.TYPE_XPH_YF_GSSQ,
|
|
|
+ IotDeviceDictConst.TYPE_XPH_YF_SQZ,
|
|
|
+ IotDeviceDictConst.TYPE_ADZN_GSSQ,
|
|
|
+ IotDeviceDictConst.TYPE_YF_XYCB_2,
|
|
|
+ IotDeviceDictConst.TYPE_YF_XYCB_III,
|
|
|
+ IotDeviceDictConst.TYPE_ZJSF_XYCB,
|
|
|
+ IotDeviceDictConst.TYPE_YF_XCT,
|
|
|
+ IotDeviceDictConst.TYPE_HS_YBQ_DWB,
|
|
|
+ IotDeviceDictConst.TYPE_HS_YBQ_CMB,
|
|
|
+ IotDeviceDictConst.TYPE_HS_YBQ_DBB,
|
|
|
+ IotDeviceDictConst.TYPE_HS_YBQ_TXB,
|
|
|
+ IotDeviceDictConst.TYPE_HS_YBQ_BFB
|
|
|
+ };
|
|
|
+
|
|
|
+ Collections.addAll(validateDeviceType, deviceTypes);
|
|
|
+
|
|
|
+
|
|
|
try {
|
|
|
validateStatusByDevType();
|
|
|
} catch (Exception e) {
|
|
|
@@ -82,7 +105,7 @@ public class IotStatusService {
|
|
|
/**
|
|
|
* 定期根据类型查设备最新设备数据,是否长时间不上报。
|
|
|
*/
|
|
|
- //@Scheduled(cron = "0 0 */1 * * ?")
|
|
|
+// @Scheduled(cron = "30 * * * * ?")
|
|
|
@Scheduled(cron = "0 0/20 * * * ? ")
|
|
|
public void validateStatusByDevType() {
|
|
|
if(!connectionManager.initCompleted()){
|
|
|
@@ -112,43 +135,54 @@ public class IotStatusService {
|
|
|
// 获取设备类型id,存在的在进行检查,因为有些设备不是基于device config 上报
|
|
|
String devtypeBid = iotDeviceStatusResVo.getDevtypeBid();
|
|
|
if (validateDeviceType.contains(devtypeBid)) {
|
|
|
+ String devStatus = iotDeviceStatusResVo.getDevStatus();
|
|
|
// 获取最新上报时间
|
|
|
+ // 如果没有更新的上报时间,使用创建时间
|
|
|
+ // 因为刚创建的离线设备,不会上报激活设备,导致设备一直处于待激活状态
|
|
|
+ // 如果没有更新的上报时间,则跳过不处理,正常他本身就是离线
|
|
|
String updateTime = iotDeviceStatusResVo.getDevUpdateddate();
|
|
|
- /**
|
|
|
- * 如果没有更新的上报时间,则跳过不处理,正常他本身就是离线
|
|
|
- */
|
|
|
+ if(StringUtils.isEmpty(updateTime) && IotDeviceStatusTypeEnum.WAIT_ACTIVATE.getCode().equals(devStatus)){
|
|
|
+ updateTime = iotDeviceStatusResVo.getDevCreateddate();
|
|
|
+ }
|
|
|
+
|
|
|
if (StringUtils.isEmpty(updateTime)) {
|
|
|
return;
|
|
|
}
|
|
|
String devCode = iotDeviceStatusResVo.getDevCode();
|
|
|
String devName = iotDeviceStatusResVo.getDevName();
|
|
|
String devBid = iotDeviceStatusResVo.getDevBid();
|
|
|
- String devStatus = iotDeviceStatusResVo.getDevStatus();
|
|
|
+
|
|
|
// 检查时间上报间隔是否异常,60分钟没有,则异常
|
|
|
- if (!validateTime(updateTime, 60)) {
|
|
|
+ if (!validateTime(updateTime, 90)) {
|
|
|
log.info("【设备检测】【正常】:设备:{} {} 上次时间:{}", iotDeviceStatusResVo.getDevName(), iotDeviceStatusResVo.getDevCode(), updateTime);
|
|
|
return;
|
|
|
}
|
|
|
// 1. 当前在线的进行检查;
|
|
|
- if ("1".equals(devStatus)) {
|
|
|
+ if (!IotDeviceStatusTypeEnum.OFFLINE.getCode().equals(devStatus)) {
|
|
|
// 更新状态
|
|
|
IotDevice iotDevice = new IotDevice();
|
|
|
iotDevice.setDevCode(iotDeviceStatusResVo.getDevCode());
|
|
|
iotDevice.setDevBid(devBid);
|
|
|
- iotDevice.setDevStatus("0");
|
|
|
+ iotDevice.setDevStatus(IotDeviceStatusTypeEnum.OFFLINE.getCode());
|
|
|
iotDevice.setDevOfflinedate(DateUtils.dateTimeNow());
|
|
|
iotDevice.setDevModifieddate(DateUtils.dateTimeNow());
|
|
|
iotDevice.setDevtypeBid(iotDeviceStatusResVo.getDevtypeBid());
|
|
|
iotDevice.setDevconnBid(iotDeviceStatusResVo.getDevconnBid());
|
|
|
+
|
|
|
+ if(IotDeviceStatusTypeEnum.WAIT_ACTIVATE.getCode().equals(devStatus)){
|
|
|
+ iotDevice.setDevUpdateddate(iotDeviceStatusResVo.getDevCreateddate());
|
|
|
+ }
|
|
|
iIotDeviceService.updateIotDevice(iotDevice);
|
|
|
log.info("【设备检测】【设备状态异常更新-设备类型{} 】设备标识:{} 设备编号 {} 设备名称 {} 异常状态 {}", type, devBid, devCode, devName, iotDeviceStatusResVo.getDevStatus());
|
|
|
reCreateDeviceTopic(iotDevice);
|
|
|
}else{
|
|
|
+ log.info("【设备检测】【设备状态异常更新-不处理-设备类型{} 】设备标识:{} 设备编号 {} 设备名称 {} 异常状态 {}", type, devBid, devCode, devName, iotDeviceStatusResVo.getDevStatus());
|
|
|
+
|
|
|
// 更新状态
|
|
|
- IotDevice iotDevice = new IotDevice();
|
|
|
- iotDevice.setDevBid(devBid);
|
|
|
- iotDevice.setDevStatus("1");
|
|
|
- iIotDeviceService.updateIotDevice(iotDevice);
|
|
|
+// IotDevice iotDevice = new IotDevice();
|
|
|
+// iotDevice.setDevBid(devBid);
|
|
|
+// iotDevice.setDevStatus(IotDeviceStatusTypeEnum.ONLINE.getCode());
|
|
|
+// iIotDeviceService.updateIotDevice(iotDevice);
|
|
|
}
|
|
|
}
|
|
|
} catch (Exception e) {
|