浏览代码

新增中捷四方性诱和吸虫塔对接

liuyaowen 1 年之前
父节点
当前提交
fd19ad65e9

+ 14 - 8
src/main/java/com/yunfeiyun/agmp/iots/core/http/ZjsfXycbHttpClient.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson2.JSONObject;
 import com.yunfeiyun.agmp.common.utils.JSONUtils;
 import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
 import com.yunfeiyun.agmp.iots.common.annotate.HttpCore;
+import com.yunfeiyun.agmp.iots.common.modal.IotDeviceconnResVo;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.http.util.TextUtils;
 
@@ -38,6 +39,8 @@ public class ZjsfXycbHttpClient extends HttpClient {
     public static final String SIGNATURE_ALGORITHM = "SHA256withRSA";
     public static final String RSA_TYPE = "RSA/ECB/PKCS1Padding";
     private static final int KEY_SIZE = 2048;//秘钥长度
+    private IotDeviceconnResVo iotDeviceconnResVo;
+    private JSONObject clientConfig;
 
     /**
      * 厂商标识
@@ -79,18 +82,21 @@ public class ZjsfXycbHttpClient extends HttpClient {
     public void init(String firmBid, HttpConfig httpConfig, String devtypeBid) {
         super.init(firmBid, httpConfig, devtypeBid);
 
-        this.firmBid = firmBid;
-        this.devtypeBid = devtypeBid;
 
+
+    }
+    @Override
+    public void init(IotDeviceconnResVo iotDeviceconnResVo, JSONObject configJson){
+        super.init(iotDeviceconnResVo,configJson);
+        this.iotDeviceconnResVo = iotDeviceconnResVo;
+        this.clientConfig = configJson;
         if (TextUtils.isEmpty(this.firmBid)) {
             log.error("厂家标识 empty");
         }
-
-        this.baseUrl = httpConfig.getBaseurl();
-        this.acctount = httpConfig.getAcctount();
-        this.secret = httpConfig.getSecret();
-        this.appid = httpConfig.getAppid();
-
+        this.baseUrl = configJson.getString("baseurl");
+        this.acctount = configJson.getString("acctount");
+        this.secret = configJson.getString("secret");
+        this.appid = configJson.getString("appid");
     }
 
     //获取私钥

+ 0 - 1
src/main/java/com/yunfeiyun/agmp/iots/core/manager/MqttManager.java

@@ -110,7 +110,6 @@ public class MqttManager {
                 }
                 iotMqttTopicCacheService.addTopicCache(iotDevice.getDevCode(),topics);
             }
-            mqttTopicValues.toArray();
             String[] topics = new String[mqttTopicValues.size()];
             if (!mqttTopicValues.isEmpty()) {
                 for (int i = 0; i < mqttTopicValues.size(); i++) {

+ 6 - 0
src/main/java/com/yunfeiyun/agmp/iots/device/service/IYfXctDevice.java

@@ -0,0 +1,6 @@
+package com.yunfeiyun.agmp.iots.device.service;
+
+import com.yunfeiyun.agmp.iots.device.common.Device;
+
+public interface IYfXctDevice extends Device {
+}

+ 14 - 0
src/main/java/com/yunfeiyun/agmp/iots/device/service/ZjsfXycbDevice.java

@@ -0,0 +1,14 @@
+package com.yunfeiyun.agmp.iots.device.service;
+
+import com.yunfeiyun.agmp.iots.core.http.ZjsfXycbHttpClient;
+import com.yunfeiyun.agmp.iots.device.common.Device;
+
+/**
+ * 中捷四方性诱测报
+ *
+ * @author
+ */
+public interface ZjsfXycbDevice extends Device {
+
+    public void syncDeviceList(String devConnBid);
+}

+ 383 - 0
src/main/java/com/yunfeiyun/agmp/iots/device/serviceImp/IYfXctDeviceImpl.java

@@ -0,0 +1,383 @@
+package com.yunfeiyun.agmp.iots.device.serviceImp;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
+import com.yunfeiyun.agmp.common.service.LocationService;
+import com.yunfeiyun.agmp.common.utils.DateUtils;
+import com.yunfeiyun.agmp.common.utils.JSONUtils;
+import com.yunfeiyun.agmp.common.utils.StringUtils;
+import com.yunfeiyun.agmp.common.utils.reflect.ReflectUtils;
+import com.yunfeiyun.agmp.iot.common.constant.cmd.CmdDef;
+import com.yunfeiyun.agmp.iot.common.constant.devicetype.IotDeviceDictConst;
+import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
+import com.yunfeiyun.agmp.iot.common.constant.mqtt.IotMqttConstant;
+import com.yunfeiyun.agmp.iot.common.domain.IotBaseEntity;
+import com.yunfeiyun.agmp.iot.common.domain.IotCbddata;
+import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
+import com.yunfeiyun.agmp.iot.common.domain.IotPest;
+import com.yunfeiyun.agmp.iot.common.model.cmd.CmdModel;
+import com.yunfeiyun.agmp.iot.common.service.MongoService;
+import com.yunfeiyun.agmp.iots.core.manager.MqttManager;
+import com.yunfeiyun.agmp.iots.device.common.DeviceAbstractImpl;
+import com.yunfeiyun.agmp.iots.device.domain.cbd.YfCbdConfigMsg;
+import com.yunfeiyun.agmp.iots.device.domain.cbd.YfCbdMsgUtil;
+import com.yunfeiyun.agmp.iots.device.domain.cbd.YfCbdReqMsg;
+import com.yunfeiyun.agmp.iots.device.domain.cbd.YfCbdTakephotoMsg;
+import com.yunfeiyun.agmp.iots.device.mapper.IotPestMapper;
+import com.yunfeiyun.agmp.iots.device.service.IYfXctDevice;
+import com.yunfeiyun.agmp.iots.service.*;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.util.TextUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import java.util.*;
+
+@Component(ServiceNameConst.SERVICE_YF_XCT)
+@Slf4j
+public class IYfXctDeviceImpl extends DeviceAbstractImpl implements IYfXctDevice {
+    @Autowired
+    private MqttManager mqttManager;
+
+    @Autowired
+    private IIotDeviceconfigService iIotDeviceconfigService;
+
+    @Autowired
+    private IIotDevicelasteddataService iIotDevicelasteddataService;
+
+    @Autowired
+    private MongoService<IotBaseEntity> mongoService;
+
+    @Autowired
+    private LocationService locationService;
+
+    @Autowired
+    private IotCbdImgService iotCbdImgService;
+
+    @Autowired
+    private IIotDeviceService iIotDeviceService;
+
+    @Autowired
+    private IIotCmdlogService iIotCmdlogService;
+
+    @Autowired
+    private IotDeviceAddressService iotDeviceAddressService;
+
+
+
+    @Override
+    public Object sendCmd(CmdModel cmdModel) throws Exception {
+        log.info("【吸虫塔】发送指令 任务 cmdModel={}", cmdModel);
+        // 获取执行的指令
+        CmdModel.Cmd cmdDistribution = cmdModel.getCmdDistribution();
+        // 获取执行的方法 ,方法可以通过反射获取执行,也可以临时case 匹配
+        String methodName = cmdModel.getCmdDistribution().getFunc();
+        String mqttMsgContent = "";
+        String clogSendresult = "发送指令成功";
+        switch (methodName) {
+            case CmdDef.YfCbdCmdDef.CMD_REQ_DATA:
+                mqttMsgContent = JSON.toJSON(new YfCbdReqMsg()).toString();
+                log.info("【吸虫塔】发送指令【reqData】 mqttMsgContent={}", mqttMsgContent);
+                break;
+            case CmdDef.YfCbdCmdDef.CMD_CONFIG:
+                JSONObject jobjParam = cmdDistribution.getJsons();
+
+                YfCbdConfigMsg yfCbdConfigMsg = new YfCbdConfigMsg();
+                YfCbdConfigMsg.Config config = new YfCbdConfigMsg.Config();
+
+                Set<String> keys = jobjParam.keySet();
+                Iterator<String> itor = keys.iterator();
+                while (itor.hasNext()) {
+                    String key = itor.next();
+                    try {
+                        YfCbdMsgUtil.setField(config, key, jobjParam.getString(key));
+                    } catch (Exception e) {
+                        log.error("异常", e);
+                    }
+                }
+
+                yfCbdConfigMsg.setExt(config);
+                mqttMsgContent = JSON.toJSON(yfCbdConfigMsg).toString();
+                log.info("【吸虫塔】发送指令【config】 mqttMsgContent={}", mqttMsgContent);
+                break;
+            case CmdDef.YfCbdCmdDef.CMD_TAKEPHOTO:
+                mqttMsgContent = JSON.toJSON(new YfCbdTakephotoMsg()).toString();
+                log.info("【吸虫塔】发送指令【takephoto】 mqttMsgContent={}", mqttMsgContent);
+                break;
+            case CmdDef.YfCbdCmdDef.CMD_REFRESH: {
+                mqttMsgContent = JSONUtils.toJSONString(cmdDistribution.getJsons());
+                log.info("【吸虫塔】发送指令【refresh】 mqttMsgContent={}", mqttMsgContent);
+                break;
+            }
+        }
+        String topic = IotMqttConstant.YFCbdTopic.TOPIC_CBD_CMD_PREFIX + cmdModel.getIotDevice().getDevCode();
+        IotDevice iotDevice = iIotDeviceService.selectIotDeviceByDevBid(cmdModel.getIotDevice().getDevBid());
+        mqttManager.publishMsg(iotDevice.getDevconnBid(), topic, mqttMsgContent);
+
+        log.info("【吸虫塔】发送指令完毕!connectionId:{},topic :{} mqttMsgContent: {}", iotDevice.getDevconnBid(), topic, mqttMsgContent);
+
+        cmdModel.setClogSendresult(clogSendresult);
+        cmdModel.setClogDesc(mqttMsgContent);
+
+        iIotCmdlogService.insertSuccessCmdlog(cmdModel);
+
+        //返回值待定
+        return true;
+
+    }
+
+    public String xctData(JSONObject ext, String cId, IotDevice iotDevice) {
+
+        String[] keyArrays = {
+                "dat_f",
+                "shake_sec",
+                "shake",
+                "ds",
+                "dver",
+                "st",
+                "et"
+        };
+
+        JSONObject extConf = new JSONObject();
+        for (String k : keyArrays) {
+            String v = "0";
+            if (ext.containsKey(k)) {
+                v = ext.getString(k);
+            }
+            extConf.put(k, v);
+        }
+        return JSONUtils.toJSONString(extConf);
+    }
+
+    /**
+     * @param ext
+     * @param devUpdateddate
+     * @param topic
+     * @param connectionId
+     * @throws Exception
+     */
+    public void cmdData(JSONObject ext, String devUpdateddate, String topic, String connectionId) throws Exception {
+        log.info("【吸虫塔】数据解析 {}", ext.toString());
+        String devId = mqttManager.getDevIdByTopic(connectionId, topic);
+        IotDevice iotDeviceFromDb = iIotDeviceService.selectIotDeviceByDevBid(devId);
+        if (iotDeviceFromDb == null) {
+            log.info("【吸虫塔】iotDeviceFromDb 空 {} ", devId);
+            return;
+        }
+
+        String vtype = ext.getString("vtype");
+        if (ext.containsKey("dat_f")) {
+            ext.put("datt", ext.getString("dat_f"));
+        }
+
+        iotDeviceFromDb.setDevUpdateddate(devUpdateddate);
+        iotDeviceFromDb.setDevStatus("1");
+
+        HashMap<String, String> keyMaps = new HashMap<>();
+        keyMaps.put("dver", "devVersion");
+        keyMaps.put("imei", "devCode");
+        keyMaps.put("gps", "devPositiontype");
+
+        for (Map.Entry<String, String> entry : keyMaps.entrySet()) {
+            String k = entry.getValue();
+            String v = ext.getString(entry.getKey());
+            if (StringUtils.isNotEmpty(v)) {
+                ReflectUtils.invokeSetter(iotDeviceFromDb, k, v);
+            }
+        }
+
+        String lat = ext.getString("lat");
+        String lng = ext.getString("lng");
+
+        if (!Objects.equals(iotDeviceFromDb.getDevPositionstatus(), "0")) {
+            iotDeviceAddressService.setDeviceAddress(iotDeviceFromDb, lng, lat);
+        }
+
+        try {
+            // 单独处理是否识别是否开启识别:0禁用(不带识别)1识别 2 计数
+            String disable = ext.getString("disable");
+            log.info("【吸虫塔-解析识别状态】disable:{}", disable);
+        } catch (Exception e) {
+            log.error("【吸虫塔-解析识别状态 异常】disable:{}", e.getMessage());
+        }
+        // 更新设备基础信息数据库 mysql
+        iIotDeviceService.updateIotDevice(iotDeviceFromDb);
+
+        // 更新设备数据信息到数据库 mongodb
+        String cId = iotDeviceFromDb.getTid();
+        String devConfig = this.xctData(ext, cId, iotDeviceFromDb);
+        // 创建或更新设备配置信息
+        if (StringUtils.isNotEmpty(devConfig)) {
+            iIotDeviceconfigService.createOrUpdateDevConfig(iotDeviceFromDb, devConfig, iotDeviceFromDb.getDevUpdateddate());
+        }
+
+        // 保存 设备最新数据 到redis
+        iIotDevicelasteddataService.createOrUpdateDeviceLastedData(
+                ext, iotDeviceFromDb, iotDeviceFromDb.getDevUpdateddate(), 60 * 60 * 24L);
+    }
+
+    /**
+     * @param ext
+     * @param topic
+     * @param connectionId
+     */
+    public void cmdOffline(JSONObject ext, String topic, String connectionId) {
+        log.debug("测报灯离线数据 {}", ext.toString());
+        String devId = mqttManager.getDevIdByTopic(connectionId, topic);
+        IotDevice iotDevice = iIotDeviceService.selectIotDeviceByDevBid(devId);
+        if (iotDevice == null) {
+            return;
+        }
+        IotDevice newIotDevice = new IotDevice();
+        newIotDevice.setDevBid(devId);
+        newIotDevice.setDevStatus("0");
+        newIotDevice.setDevOfflinedate(DateUtils.dateTimeNow());
+        iIotDeviceService.updateIotDevice(newIotDevice);
+    }
+
+    /**
+     * @param topic
+     * @param dataJson
+     * @param connectionId
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public Object receiveData(String topic, JSONObject dataJson, String connectionId) throws Exception {
+        log.info("【吸虫塔】收到的 设备上报数据 {}", dataJson.toString());
+        // 接收设备上报数据后的处理逻辑
+        String devUpdateddate = DateUtils.dateTimeNow();
+        if(topic.startsWith(IotMqttConstant.YFXctTopic.TOPIC_XCT_PEST_IMG)){
+            Object result = this.receivePicData(dataJson, devUpdateddate, topic, connectionId);
+            log.info("【吸虫塔】图片数据处理完成");
+            return result;
+        }
+        if(topic.startsWith(IotMqttConstant.YFCbdTopic.TOPIC_CBD_REPORT_PREFIX)){
+            String cmd = dataJson.getString("cmd");
+            if (TextUtils.isEmpty(cmd)) {
+                log.error("未取到cmd");
+                return false;
+            }
+            if("data".equals("cmd")){
+                JSONObject ext = dataJson.getJSONObject("ext");
+                if (ext == null) {
+                    log.error("未取到ext");
+                    return false;
+                }
+                if (cmd.equals("data")) {
+                    this.cmdData(ext, devUpdateddate, topic, connectionId);
+                } else if (cmd.equals("offline")) {
+                    this.cmdOffline(ext, topic, connectionId);
+                }
+            }
+        }
+        return true;
+    }
+
+    /**
+     * @param jsonObject
+     * @param devUpdateddate
+     * @param topic
+     * @param connectionId
+     * @return
+     */
+ 
+    public Object receivePicData(JSONObject jsonObject, String devUpdateddate, String topic, String connectionId) {
+        String devId = mqttManager.getDevIdByTopic(connectionId, topic);
+        IotDevice iotDevice = iIotDeviceService.selectIotDeviceByDevBid(devId);
+        if (iotDevice == null) {
+            return "设备不存在 就不在处理";
+        }
+        String devtypeBid = iotDevice.getDevtypeBid();
+        String deviceTypeId = iotDevice.getDevtypeBid();
+        String devCode = jsonObject.getString("device_id");
+        log.info("【解析测报灯图片数据】:devtypeBid:{},deviceTypeId,{},devCode:{}", devtypeBid, deviceTypeId, devCode);
+        String cbdimgAddr = jsonObject.getString("img");
+        if (StringUtils.isEmpty(cbdimgAddr)) {
+            return "图片地址不存在,则不处理";
+        }
+        // 由于吸虫塔和测报灯的害虫编号重复将吸虫塔中的虫子编号进行转化
+        transXctPestPoint(jsonObject);
+        // 将吸虫塔的数据格式转化成测报灯的数据格式
+        jsonObject = transXctDataToCbdData(jsonObject);
+
+        // 保存测报灯图片数据到mongodb
+        iotCbdImgService.insertIotCbdimg(iotDevice, jsonObject, devUpdateddate);
+
+        return "测报灯指令上报的图片结果";
+    }
+
+    private JSONObject transXctDataToCbdData(JSONObject jsonObject) {
+        JSONObject result = new JSONObject();
+        result.put("imei",jsonObject.get("device_id"));
+        result.put("Image",jsonObject.get("img"));
+        result.put("Result",jsonObject.get("label"));
+        result.put("Result_image",jsonObject.get("img"));
+        result.put("Result_code",jsonObject.get("return_string"));
+        result.put("Image_b","0");
+        result.put("Result_b","0");
+        result.put("Result_image_b","0");
+        result.put("Result_code_b","0");
+        result.put("Result_c",jsonObject.get("Result_c"));
+        result.put("disable","0");
+        return result;
+    }
+    private void transXctPestPoint(JSONObject dataJson){
+        String cbdrecogMachinemark = dataJson.getString("return_string");
+        String cbdrecogResult = dataJson.getString("label");
+
+        JSONArray jsonArray = JSONArray.parseArray(cbdrecogMachinemark);
+        JSONArray transAfterData = new JSONArray();
+
+        int totalPestNum = 0;
+        for(int i = jsonArray.size()-1;i>=0;i--){
+            JSONObject returnStrItem = jsonArray.getJSONObject(i);
+            for(Map.Entry<String,Object> entry : returnStrItem.entrySet()){
+                String key = entry.getKey();
+                Object value = entry.getValue();
+                totalPestNum++;
+                if(!"4".equals(key)) {
+                    returnStrItem.remove(key);
+                    returnStrItem.put("xct"+key,value);
+                    transAfterData.add(returnStrItem);
+                }
+            }
+        }
+
+        dataJson.put("return_string",transAfterData.toJSONString());
+        for(int i = 1;i<=3;i++){
+            cbdrecogResult = cbdrecogResult.replaceFirst(i+",","xct"+i+",");
+        }
+        cbdrecogResult = cbdrecogResult.replaceAll("4,\\d+#|#4,\\d+","");
+        dataJson.put("label",cbdrecogResult);
+        dataJson.put("Result_c",totalPestNum);
+    }
+
+    /**
+     * @param jobjMsg
+     * @return
+     */
+    @Override
+    public boolean isDeviceProps(JSONObject jobjMsg) {
+        if ("data".equals(jobjMsg.getString("cmd"))) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * @param topic
+     * @param jobjMsg
+     * @param connectionId
+     * @return
+     */
+    @Override
+    public IotDevice findIotDevice(String topic, JSONObject jobjMsg, String connectionId) {
+        String devId = mqttManager.getDevIdByTopic(connectionId, topic);
+        IotDevice ret = iIotDeviceService.selectIotDeviceByDevBid(devId);
+        log.debug("查到了一个iotdevice {}", ret);
+        return ret;
+    }
+}

+ 370 - 0
src/main/java/com/yunfeiyun/agmp/iots/device/serviceImp/ZjsfXycbDeviceImpl.java

@@ -0,0 +1,370 @@
+package com.yunfeiyun.agmp.iots.device.serviceImp;
+
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
+import com.yunfeiyun.agmp.common.utils.DateUtils;
+import com.yunfeiyun.agmp.common.utils.JSONUtils;
+import com.yunfeiyun.agmp.common.utils.StringUtils;
+import com.yunfeiyun.agmp.iot.common.constant.devicetype.IotDeviceDictConst;
+import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
+import com.yunfeiyun.agmp.iot.common.domain.*;
+import com.yunfeiyun.agmp.iot.common.model.cmd.CmdModel;
+import com.yunfeiyun.agmp.iot.common.service.MongoService;
+
+import com.yunfeiyun.agmp.iots.common.modal.IotDeviceconnResVo;
+import com.yunfeiyun.agmp.iots.core.http.EzvizHttpClient;
+import com.yunfeiyun.agmp.iots.core.http.ZjsfXycbHttpClient;
+import com.yunfeiyun.agmp.iots.core.manager.HttpManager;
+import com.yunfeiyun.agmp.iots.device.common.HttpDeviceAbstractImpl;
+import com.yunfeiyun.agmp.iots.device.service.ZjsfXycbDevice;
+import com.yunfeiyun.agmp.iots.service.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.*;
+
+@Component(ServiceNameConst.SERVICE_ZJSF_XYCB)
+@Slf4j
+public class ZjsfXycbDeviceImpl extends HttpDeviceAbstractImpl implements ZjsfXycbDevice {
+    private final String SERVICE_NAME = ServiceNameConst.SERVICE_ZJSF_XYCB;
+
+    private String DEVICE_VERSION = "ZJSF_XYCB";
+
+    @Autowired
+    private IIotDeviceService iotDeviceService;
+
+    @Autowired
+    private IIotDeviceconfigService iIotDeviceconfigService;
+
+    @Autowired
+    private IIotDevicelasteddataService iIotDevicelasteddataService;
+
+    @Autowired
+    private MongoService mongoService;
+
+    @Autowired
+    private IotDeviceAddressService iotDeviceAddressService;
+
+    @Autowired
+    private IIotZjsfXycbdataService iIotZjsfXycbdataService;
+
+    @Autowired
+    private IIotXyinfoService iIotXyinfoService;
+
+    @Autowired
+    private IIotPestService iIotPestService;
+
+    @Autowired
+    private IotPestRecogService iotPestRecogService;
+
+    @Autowired
+    private IIotXyImageService iIotXyImageService;
+
+    @Resource
+    private HttpManager httpManager;
+
+    private String imgBaseUrl = "https://bigdata-image.oss-cn-hangzhou.aliyuncs.com";
+
+    @Value("${runMode.modeName:dev}")
+    private String modeName;
+
+    /** 线上环境 */
+    private final String onlineEnv = "nanpi";
+
+
+
+    /**
+     * 下发指令
+     *
+     * @param cmdModel
+     * @return
+     */
+    @Override
+    public Object sendCmd(CmdModel cmdModel) throws Exception {
+        return null;
+    }
+
+
+
+    /**
+     * @param cmdJson
+     * @return
+     */
+    @Override
+    public boolean isDeviceProps(JSONObject cmdJson) {
+        return false;
+    }
+
+
+
+
+
+    private Map<String, JSONObject> getDeviceMap(ZjsfXycbHttpClient zjsfXycbHttpClient){
+        List<JSONObject> deviceList = zjsfXycbHttpClient.getDeviceList();
+        Map<String, JSONObject> deviceMap = new HashMap<>();
+        for(JSONObject device : deviceList){
+            deviceMap.put(device.getString("deviceMac"), device);
+        }
+        return deviceMap;
+    }
+
+    private Map<String, JSONObject> getDeviceLogMap(ZjsfXycbHttpClient zjsfXycbHttpClient){
+        List<JSONObject> deviceLogList = zjsfXycbHttpClient.getDeviceLogList();
+        Map<String, JSONObject> deviceLogMap = new HashMap<>();
+        for(JSONObject device : deviceLogList){
+            deviceLogMap.put(device.getString("deviceMac"), device);
+        }
+        return deviceLogMap;
+    }
+
+    private Map<String, JSONArray> getDeviceImageMap(ZjsfXycbHttpClient zjsfXycbHttpClient){
+        List<JSONObject> dataList = zjsfXycbHttpClient.getDeviceImageList();
+        Map<String, JSONArray> deviceImageMap = new HashMap<>();
+        for(JSONObject device : dataList){
+            String deviceMac = device.getString("DeviceMac");
+            JSONArray photoList = device.getJSONArray("PhotoList");
+            if(!Objects.equals(modeName, onlineEnv) && (photoList == null || photoList.isEmpty())){
+                photoList = new JSONArray();
+                JSONObject jsonObject = new JSONObject();
+                jsonObject.put("path", "Basics/xyv3/861551051653129/2023/9/20/192.168.100.100_01_20230920154158615_ALARM_INPUT.jpg");
+                jsonObject.put("createTime", DateUtils.dateTimeNow());
+
+                photoList.add(jsonObject);
+            }
+            deviceImageMap.put(deviceMac, photoList);
+        }
+        return deviceImageMap;
+    }
+
+    public void syncPestCount(Map<IotDevice, JSONObject> pestCountMap){
+        for(Map.Entry<IotDevice, JSONObject> entry : pestCountMap.entrySet()) {
+            JSONObject jsonObject = entry.getValue();
+            IotDevice iotDevice = entry.getKey();
+            Integer pestCount = jsonObject.getInteger("ct");
+            String devBid = iotDevice.getDevBid();
+            IotXyinfo iotXyinfo = new IotXyinfo();
+            iotXyinfo.setDevBid(devBid);
+
+            try {
+                IotXyinfo oldIotXyinfo = iIotXyinfoService.selectIotXyinfoList(iotXyinfo).get(0);
+                IotPest iotPest = iIotPestService.selectIotPestByBid(oldIotXyinfo.getPestBusid());
+                if (iotPest == null) {
+                    log.info("未设置诱芯,无法统计虫情数据");
+                    continue;
+                }
+
+
+
+            } catch (Exception e) {
+                e.printStackTrace();
+                log.info("未设置诱芯,无法统计虫情数据");
+            }
+        }
+    }
+
+    public void syncImageInfo(Map<IotDevice, JSONArray> imgInfoMap){
+        List<JSONObject> jsonObjectList = iIotXyImageService.selectImageAlreadyExistsList(imgInfoMap);
+        Set<String> imgSet = new HashSet<>();
+        for(JSONObject jsonObject : jsonObjectList){
+            String k = jsonObject.getString("k");
+            imgSet.add(k);
+        }
+        List<IotXycbimg> iotXycbimgList = new ArrayList<>();
+        for(Map.Entry<IotDevice, JSONArray> entry : imgInfoMap.entrySet()) {
+            JSONArray jsonArray = entry.getValue();
+            IotDevice iotDevice = entry.getKey();
+            String devBid = iotDevice.getDevBid();
+            for (Object object : jsonArray) {
+                JSONObject jsonObject = (JSONObject) object;
+                String createTime = jsonObject.getString("createTime");
+                String path = jsonObject.getString("path");
+                String k = devBid + createTime;
+                if(!imgSet.contains(k)){
+                    IotXycbimg iotXycbimg = new IotXycbimg();
+                    iotXycbimg.setDevBid(devBid);
+                    iotXycbimg.setXycbimgBid(iotXycbimg.getUUId());
+                    iotXycbimg.setXycbimgAddr(imgBaseUrl + "/" + path);
+                    iotXycbimg.setXycbimgCreatedDate(createTime);
+                    iotXycbimg.setXycbimgModifieddate(createTime);
+                    iotXycbimg.setXycbimgDelstatus("0");
+                    iotXycbimg.setTid(iotDevice.getTid());
+                    iotXycbimgList.add(iotXycbimg);
+                }
+            }
+        }
+        if(iotXycbimgList.size() > 0) {
+            iIotXyImageService.batchInsert(iotXycbimgList);
+        }
+    }
+    @Override
+    public void syncDeviceList(String devConnBid) {
+        ZjsfXycbHttpClient zjsfXycbHttpClient = zjsfXycbHttpClient(devConnBid);
+        List<String> devTypeBidList = Collections.singletonList(IotDeviceDictConst.TYPE_ZJSF_XYCB);
+        List<IotDevice> iotDeviceList = iotDeviceService.selectIotDeviceByDevtypeBidList(devTypeBidList);
+        if(iotDeviceList == null || iotDeviceList.isEmpty()){
+            log.error("中捷四方性诱 获取设备为空");
+            return;
+        }
+        // 调用http接口获取设备信息
+        Map<String, JSONObject> deviceMap = getDeviceMap(zjsfXycbHttpClient);
+        if(deviceMap.isEmpty()){
+            log.error("中捷四方性诱 获取厂家设备为空");
+            return;
+        }
+        // 调用http接口获取设备日志
+        Map<String, JSONObject> deviceLogMap = getDeviceLogMap(zjsfXycbHttpClient);
+        // 调用http接口获取图片信息
+        Map<String, JSONArray> deviceImageMap = getDeviceImageMap(zjsfXycbHttpClient);
+
+        List<String> devBidList = new ArrayList<>();
+        for(IotDevice oldIotDevice: iotDeviceList) {
+            devBidList.add(oldIotDevice.getDevBid());
+        }
+        Map<String, IotZjsfXycbdata> iotZjsfXycbdataMap = iIotZjsfXycbdataService.selectDataMapByDevBidList(devBidList);
+
+        List<IotDevice> updateIotDeviceList = new ArrayList<>();
+        Map<IotDevice, List<JSONObject>> insertDataMap = new HashMap<>();
+        Map<IotDevice, JSONObject> pestCountMap = new HashMap<>();
+        Map<IotDevice, JSONArray> imgInfoMap = new HashMap<>();
+
+        for(IotDevice oldIotDevice: iotDeviceList){
+            String devCode = oldIotDevice.getDevCode();
+            if(!deviceMap.containsKey(devCode)){
+                continue;
+            }
+            JSONObject deviceInfo = deviceMap.get(devCode);
+            String lng = deviceInfo.getString("gpsLng");
+            String lat = deviceInfo.getString("gpsLat");
+
+            String version = deviceInfo.getString("otaVersion");
+            String pestName = deviceInfo.getString("bugName");
+            String totalBugCount = deviceInfo.getString("bugCount");
+
+            // 工作状态
+            String workType = deviceInfo.getJSONObject("schedule").getString( "workType");
+
+            JSONObject deviceLogInfo = deviceLogMap.get(devCode);
+            String chargeStatus = deviceLogInfo.getString("chargeStatus");
+            String humidity = deviceLogInfo.getString("humidity");
+            String temperature = deviceLogInfo.getString("temperature");
+            String windDirection = deviceLogInfo.getString("windDirection");
+            String windSpeed = deviceLogInfo.getString("windSpeed");
+            String updatedDate = deviceLogInfo.getString("timeStamp");
+            String illumination = deviceLogInfo.getString("illumination");
+            String light = deviceLogInfo.getString("light");
+            String solarStatus = deviceLogInfo.getString("solarStatus");
+
+            String oldTotalBugCount = null;
+            try{
+                if(iotZjsfXycbdataMap.containsKey(oldIotDevice.getDevBid())){
+                    IotZjsfXycbdata iotZjsfXycbdata = iotZjsfXycbdataMap.get(oldIotDevice.getDevBid());
+                    JSONObject xycbdataContent = iotZjsfXycbdata.getXycbdataContent();
+                    oldTotalBugCount = xycbdataContent.getString("totalCt");
+                    String oldUpdatedDate = xycbdataContent.getString("uptime");
+                    if(Objects.equals(updatedDate, oldUpdatedDate)){
+                        continue;
+                    }
+                }
+            }catch (Exception e){
+
+            }
+            int bugCountInt = 0;
+            try{
+                int totalBugCountInt = Integer.parseInt(totalBugCount);
+                int oldTotalBugCountInt = totalBugCountInt;
+                if(oldTotalBugCount != null){
+                    oldTotalBugCountInt = Integer.parseInt(oldTotalBugCount);
+                }
+                if(totalBugCountInt >= oldTotalBugCountInt){
+                    bugCountInt = totalBugCountInt - oldTotalBugCountInt;
+                }
+
+            }catch (Exception e){
+
+            }
+
+            bugCountInt = bugCountInt + 1;
+
+            IotDevice iotDevice = new IotDevice();
+            iotDevice.setDevBid(oldIotDevice.getDevBid());
+            iotDevice.setDevVersion(version);
+            iotDevice.setDevUpdateddate(updatedDate);
+            iotDevice.setDevStatus("1");
+            iotDevice.setTid(oldIotDevice.getTid());
+
+            if (!Objects.equals(oldIotDevice.getDevPositionstatus(), "0")) {
+                iotDeviceAddressService.setDeviceAddress(iotDevice, lng, lat);
+            }
+            updateIotDeviceList.add(iotDevice);
+
+            JSONObject extConf = new JSONObject();
+            extConf.put("ds", "1");
+            extConf.put("ws", workType);
+            extConf.put("at", temperature);
+            extConf.put("ah", humidity);
+            extConf.put("b_v", "0");
+            extConf.put("b_c", "0");
+            extConf.put("p_v", "0");
+            extConf.put("p_c", "0");
+            extConf.put("lp", illumination);
+            extConf.put("lt", light);
+            extConf.put("ss", solarStatus);
+            extConf.put("cs", chargeStatus);
+            extConf.put("win", windDirection);
+            extConf.put("win_speed", windSpeed);
+            extConf.put("ct", String.valueOf(bugCountInt));
+            extConf.put("totalCt", totalBugCount);
+            extConf.put("uptime", updatedDate);
+
+            String devConfig = JSONUtils.toJSONString(extConf);
+            // 创建或更新设备配置信息
+            if (StringUtils.isNotEmpty(devConfig)) {
+                iIotDeviceconfigService.createOrUpdateDevConfig(oldIotDevice, devConfig, iotDevice.getDevUpdateddate());
+            }
+
+            // 保存 设备最新数据 到redis
+            iIotDevicelasteddataService.createOrUpdateDeviceLastedData(
+                    extConf, oldIotDevice, iotDevice.getDevUpdateddate(), 60 * 60 * 24L);
+
+            if(!insertDataMap.containsKey(oldIotDevice)){
+                insertDataMap.put(oldIotDevice, new ArrayList<>());
+            }
+            insertDataMap.get(oldIotDevice).add(extConf);
+            if(bugCountInt > 0){
+                pestCountMap.put(iotDevice, extConf);
+            }
+
+            if(deviceImageMap.containsKey(devCode)){
+                JSONArray imgList = deviceImageMap.get(devCode);
+                imgInfoMap.put(iotDevice, imgList);
+            }
+        }
+
+        if(updateIotDeviceList.size() > 0){
+            iotDeviceService.updateIotDeviceBatch(updateIotDeviceList);
+        }
+        for(Map.Entry<IotDevice, List<JSONObject>> entry : insertDataMap.entrySet()) {
+            List<JSONObject> insertDeviceDatalist = entry.getValue();
+            IotDevice iotDevice = entry.getKey();
+            // 批量插入设备数据到mongodb
+            if (insertDeviceDatalist.size() > 0) {
+                // 批量插入设备数据到mongodb
+                iIotZjsfXycbdataService.batchInsertData(iotDevice, insertDeviceDatalist);
+            }
+        }
+        if(pestCountMap.size() > 0){
+            syncPestCount(pestCountMap);
+        }
+        if(imgInfoMap.size() > 0){
+            syncImageInfo(imgInfoMap);
+        }
+    }
+
+    public ZjsfXycbHttpClient zjsfXycbHttpClient(String devConnBid){
+        return (ZjsfXycbHttpClient) httpManager.getHttpClientByDevice(devConnBid);
+    }
+}

+ 28 - 0
src/main/java/com/yunfeiyun/agmp/iots/service/IIotXyImageService.java

@@ -0,0 +1,28 @@
+package com.yunfeiyun.agmp.iots.service;
+
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
+import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
+import com.yunfeiyun.agmp.iot.common.domain.IotXycbimg;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 性诱测报详细信息Service接口
+ * 
+ * @author 杨晓辉
+ * @date 2024-06-03
+ */
+public interface IIotXyImageService
+{
+    /**
+     * 查询性诱测报详细信息列表
+     * 
+     * @param iotXyinfo 性诱测报详细信息
+     * @return 性诱测报详细信息集合
+     */
+    public List<JSONObject> selectImageAlreadyExistsList(Map<IotDevice, JSONArray> imgInfoMap);
+
+    public void batchInsert(List<IotXycbimg> iotXycbimgList);
+}

+ 22 - 0
src/main/java/com/yunfeiyun/agmp/iots/service/IIotXyinfoService.java

@@ -0,0 +1,22 @@
+package com.yunfeiyun.agmp.iots.service;
+
+import com.yunfeiyun.agmp.iot.common.domain.IotXyinfo;
+
+import java.util.List;
+
+/**
+ * 性诱测报详细信息Service接口
+ * 
+ * @author 杨晓辉
+ * @date 2024-06-03
+ */
+public interface IIotXyinfoService 
+{
+    /**
+     * 查询性诱测报详细信息列表
+     * 
+     * @param iotXyinfo 性诱测报详细信息
+     * @return 性诱测报详细信息集合
+     */
+    public List<IotXyinfo> selectIotXyinfoList(IotXyinfo iotXyinfo);
+}

+ 17 - 0
src/main/java/com/yunfeiyun/agmp/iots/service/IIotZjsfXycbdataService.java

@@ -0,0 +1,17 @@
+package com.yunfeiyun.agmp.iots.service;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
+import com.yunfeiyun.agmp.iot.common.domain.IotZjsfXycbdata;
+
+import java.util.List;
+import java.util.Map;
+
+public interface IIotZjsfXycbdataService {
+    public List<IotZjsfXycbdata> selectDataListByDevBidList(List<String> devBidList);
+
+    public Map<String, IotZjsfXycbdata> selectDataMapByDevBidList(List<String> devBidList);
+
+    public void batchInsertData(IotDevice iotDevice, List<JSONObject> jsonObjectList);
+
+}

+ 102 - 0
src/main/java/com/yunfeiyun/agmp/iots/service/impl/IotXyImageServiceImpl.java

@@ -0,0 +1,102 @@
+package com.yunfeiyun.agmp.iots.service.impl;
+
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
+import com.yunfeiyun.agmp.common.constant.ResConstants;
+import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
+import com.yunfeiyun.agmp.iot.common.domain.IotXycbimg;
+import com.yunfeiyun.agmp.iot.common.service.MongoService;
+import com.yunfeiyun.agmp.iot.common.util.tmn.xycb.XycbImgOssUtil;
+
+import com.yunfeiyun.agmp.iots.service.IIotXyImageService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.aggregation.Aggregation;
+import org.springframework.data.mongodb.core.aggregation.GroupOperation;
+import org.springframework.data.mongodb.core.aggregation.MatchOperation;
+import org.springframework.data.mongodb.core.aggregation.ProjectionOperation;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+
+/**
+ * 性诱测报详细信息Service业务层处理
+ * 
+ * @author 杨晓辉
+ * @date 2024-06-03
+ */
+@Service
+public class IotXyImageServiceImpl implements IIotXyImageService
+{
+    @Autowired
+    private MongoService mongoService;
+
+    /**
+     * 查询性诱测报详细信息列表
+     *
+     * @param imgInfoMap@return 性诱测报详细信息集合
+     */
+    @Override
+    public List<JSONObject> selectImageAlreadyExistsList(Map<IotDevice, JSONArray> imgInfoMap) {
+        Set<String> devBidSet = new HashSet<>();
+        Set<String> dateSet = new HashSet<>();
+        for(Map.Entry<IotDevice, JSONArray> entry : imgInfoMap.entrySet()) {
+            JSONArray imageList = entry.getValue();
+            IotDevice iotDevice = entry.getKey();
+            String devBid = iotDevice.getDevBid();
+            for (Object object : imageList) {
+                JSONObject jsonObject = JSONObject.from(object);
+                String date = jsonObject.getString("createTime");
+                dateSet.add(date);
+            }
+            devBidSet.add(devBid);
+        }
+        List<JSONObject> jsonObjectList = new ArrayList<>();
+        if (devBidSet.size() == 0 || dateSet.size() == 0) {
+            return jsonObjectList;
+        }
+
+        Criteria criteria = new Criteria()
+                .and("devBid").in(devBidSet)
+                .and("xycbimgCreatedDate").in(dateSet);
+        MatchOperation matchOperation = Aggregation.match(criteria);
+
+        ProjectionOperation projectionOperation = Aggregation.project()
+                .and("k").concatArrays("devBid", "xycbimgCreatedDate").as("k");
+        GroupOperation groupOperation = Aggregation.group("k");
+
+        ProjectionOperation projectionOperation2 = Aggregation.project()
+                .and("_id").as("k");
+
+        Aggregation aggregation = Aggregation.newAggregation(
+                matchOperation,
+                projectionOperation,
+                groupOperation,
+                projectionOperation2
+        );
+        jsonObjectList = mongoService.aggregate(
+                IotXycbimg.class, aggregation, JSONObject.class
+        );
+
+        return jsonObjectList;
+    }
+
+    /**
+     * @param iotXycbimgList
+     */
+    @Override
+    public void batchInsert(List<IotXycbimg> iotXycbimgList) {
+        List<IotXycbimg> insertList = new ArrayList<>();
+        for(IotXycbimg iotXycbimg : iotXycbimgList) {
+            String imgUrl = iotXycbimg.getXycbimgAddr();
+            String ossUrl = XycbImgOssUtil.uploadOss(imgUrl, ResConstants.BizType.XYCB_IMAGE, iotXycbimg.getXycbimgBid(),iotXycbimg.getTid());
+            if(ossUrl != null) {
+                iotXycbimg.setXycbimgAddr(ossUrl);
+                insertList.add(iotXycbimg);
+            }
+        }
+        if(insertList.size() > 0) {
+            mongoService.insertList(IotXycbimg.class, insertList);
+        }
+    }
+}

+ 34 - 0
src/main/java/com/yunfeiyun/agmp/iots/service/impl/IotXyinfoServiceImpl.java

@@ -0,0 +1,34 @@
+package com.yunfeiyun.agmp.iots.service.impl;
+
+import com.yunfeiyun.agmp.iot.common.domain.IotXyinfo;
+import com.yunfeiyun.agmp.iots.device.mapper.IotXyinfoMapper;
+
+import com.yunfeiyun.agmp.iots.service.IIotXyinfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 性诱测报详细信息Service业务层处理
+ * 
+ * @author 杨晓辉
+ * @date 2024-06-03
+ */
+@Service
+public class IotXyinfoServiceImpl implements IIotXyinfoService
+{
+    @Autowired
+    private IotXyinfoMapper iotXyinfoMapper;
+
+    /**
+     * 查询性诱测报详细信息列表
+     *
+     * @param iotXyinfo 性诱测报详细信息
+     * @return 性诱测报详细信息集合
+     */
+    @Override
+    public List<IotXyinfo> selectIotXyinfoList(IotXyinfo iotXyinfo) {
+        return iotXyinfoMapper.selectIotXyinfoList(iotXyinfo);
+    }
+}

+ 81 - 0
src/main/java/com/yunfeiyun/agmp/iots/service/impl/IotZjsfXycbdataServiceImpl.java

@@ -0,0 +1,81 @@
+package com.yunfeiyun.agmp.iots.service.impl;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
+import com.yunfeiyun.agmp.iot.common.domain.IotZjsfXycbdata;
+import com.yunfeiyun.agmp.iot.common.service.MongoService;
+
+import com.yunfeiyun.agmp.iots.service.IIotZjsfXycbdataService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.mongodb.core.aggregation.*;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class IotZjsfXycbdataServiceImpl implements IIotZjsfXycbdataService {
+    @Autowired
+    private MongoService mongoService;
+
+    /**
+     *
+     */
+    @Override
+    public List<IotZjsfXycbdata> selectDataListByDevBidList(List<String> devBidList) {
+        Criteria criteria = new Criteria().and("devBid").in(devBidList);
+        MatchOperation matchOperation = Aggregation.match(criteria);
+
+        SortOperation sortOperation = Aggregation.sort(Sort.Direction.DESC, "xycbdataCreatedDate");
+
+        GroupOperation groupOperation = Aggregation.group("devBid")
+                .first("$$ROOT").as("firstData");
+
+        ReplaceRootOperation replaceRootOperation = Aggregation.replaceRoot("firstData");
+        Aggregation aggregation = Aggregation.newAggregation(
+                matchOperation,
+                sortOperation,
+                groupOperation,
+                replaceRootOperation
+        );
+        return (List<IotZjsfXycbdata>) mongoService.aggregate(IotZjsfXycbdata.class, aggregation, IotZjsfXycbdata.class);
+    }
+
+    /**
+     * @param devBidList
+     * @return
+     */
+    @Override
+    public Map<String, IotZjsfXycbdata> selectDataMapByDevBidList(List<String> devBidList) {
+        List<IotZjsfXycbdata> iotZjsfXycbdataList = selectDataListByDevBidList(devBidList);
+        Map<String, IotZjsfXycbdata> iotZjsfXycbdataMap = new HashMap<>();
+        for(IotZjsfXycbdata iotZjsfXycbdata : iotZjsfXycbdataList) {
+            iotZjsfXycbdataMap.put(iotZjsfXycbdata.getDevBid(), iotZjsfXycbdata);
+        }
+        return iotZjsfXycbdataMap;
+    }
+
+    /**
+     * @param iotDevice
+     * @param jsonObjectList
+     */
+    @Override
+    public void batchInsertData(IotDevice iotDevice, List<JSONObject> jsonObjectList) {
+        List<IotZjsfXycbdata> iotZjsfXycbdataList = new ArrayList<>();
+        for(JSONObject jsonObject : jsonObjectList) {
+            IotZjsfXycbdata iotZjsfXycbdata = new IotZjsfXycbdata();
+            iotZjsfXycbdata.setDevBid(iotDevice.getDevBid());
+            iotZjsfXycbdata.setTid(iotDevice.getTid());
+            iotZjsfXycbdata.setXycbdataBid(iotZjsfXycbdata.getUUId());
+            iotZjsfXycbdata.setXycbdataCreatedDate(jsonObject.getString("uptime"));
+            iotZjsfXycbdata.setXycbdataContent(jsonObject);
+
+            iotZjsfXycbdataList.add(iotZjsfXycbdata);
+        }
+        mongoService.insertList(IotZjsfXycbdata.class, iotZjsfXycbdataList);
+    }
+}

+ 40 - 0
src/main/java/com/yunfeiyun/agmp/iots/task/ZjsfXycbScheduler.java

@@ -0,0 +1,40 @@
+package com.yunfeiyun.agmp.iots.task;
+
+import com.yunfeiyun.agmp.iot.common.constant.devicetype.IotDeviceDictEnum;
+import com.yunfeiyun.agmp.iot.common.constant.devicetype.IotDeviceTypeLv1Enum;
+import com.yunfeiyun.agmp.iot.common.domain.IotDevicetype;
+import com.yunfeiyun.agmp.iots.common.modal.IotDeviceconnResVo;
+import com.yunfeiyun.agmp.iots.core.http.ZjsfXycbHttpClient;
+import com.yunfeiyun.agmp.iots.device.service.ZjsfXycbDevice;
+import com.yunfeiyun.agmp.iots.service.BusinessCoreService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import java.util.List;
+
+/**
+ * 中捷四方性诱测报定时更新数据调度
+ */
+@Slf4j
+@Component
+public class ZjsfXycbScheduler {
+
+    @Autowired
+    private ZjsfXycbDevice zjsfXycbDevice;
+    @Autowired
+    private BusinessCoreService businessCoreService;
+
+
+    @Scheduled(cron = "3 0/10 * * * ?")
+    public void syncDeviceList() throws Exception {
+        log.info("==========开始执行 中捷四方性诱测报 设备信息更新调度==========");
+        List<IotDeviceconnResVo> iotDeviceConnResVoList = businessCoreService.selectDevConnResVoListByDevTypeBid(IotDeviceDictEnum.TYPE_ZJSF_XYCB.getCode());
+        for(IotDeviceconnResVo iotDeviceconnResVo :iotDeviceConnResVoList){
+            zjsfXycbDevice.syncDeviceList(iotDeviceconnResVo.getDevconnBid());
+        }
+        log.info("==========结束执行 中捷四方性诱测报 设备信息更新调度==========");
+    }
+}