Procházet zdrojové kódy

新增 气象墒情配置下发接口

zhaiyifei před 1 rokem
rodič
revize
d1aacf0ec7

+ 59 - 3
src/main/java/com/yunfeiyun/agmp/iotm/device/qxsqz/controller/IotDeviceQxzController.java

@@ -1,21 +1,26 @@
 package com.yunfeiyun.agmp.iotm.device.qxsqz.controller;
 
+import com.alibaba.fastjson2.JSONObject;
 import com.yunfeiyun.agmp.common.annotation.Excel;
 import com.yunfeiyun.agmp.common.constant.ErrorCode;
 import com.yunfeiyun.agmp.common.core.domain.AjaxResult;
 import com.yunfeiyun.agmp.common.core.page.TableDataInfo;
+import com.yunfeiyun.agmp.common.log.LogCore;
+import com.yunfeiyun.agmp.common.utils.DateUtils;
 import com.yunfeiyun.agmp.common.utils.StringUtils;
 import com.yunfeiyun.agmp.common.utils.poi.SensdataExcelUtil;
 import com.yunfeiyun.agmp.iot.common.constant.IotErrorCode;
 import com.yunfeiyun.agmp.iot.common.constant.devicetype.IotDeviceDictConst;
 import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
 import com.yunfeiyun.agmp.iot.common.domain.IotQxzDataListRseVo;
+import com.yunfeiyun.agmp.iot.common.enums.IotDeviceStatusTypeEnum;
 import com.yunfeiyun.agmp.iot.common.exception.IotBizException;
 import com.yunfeiyun.agmp.iotm.common.controller.BaseController;
 import com.yunfeiyun.agmp.iotm.device.common.domin.IotDeviceBaseFunReqVo;
 import com.yunfeiyun.agmp.iotm.device.common.domin.IotDeviceDataListReqVo;
 import com.yunfeiyun.agmp.iotm.device.common.service.IotDeviceCommonService;
 import com.yunfeiyun.agmp.iotm.device.common.service.IotDeviceRefreshService;
+import com.yunfeiyun.agmp.iotm.device.qxsqz.domain.IotQxzConfigEditReqVo;
 import com.yunfeiyun.agmp.iotm.device.qxsqz.domain.QxzExportDataDto;
 import com.yunfeiyun.agmp.iotm.web.domain.reqvo.IotDeviceListReqVo;
 import com.yunfeiyun.agmp.iotm.web.domain.resvo.IotDeviceListResVo;
@@ -27,9 +32,7 @@ import org.springframework.web.bind.annotation.*;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import java.util.*;
 
 /**
  * 气象站,墒情站 设备控制器
@@ -207,4 +210,57 @@ public class IotDeviceQxzController extends BaseController {
         response.setCharacterEncoding("utf-8");
         util.exportExcel(response);
     }
+
+    @GetMapping("/config/info/{devBid}")
+    public AjaxResult configInfo(@PathVariable("devBid") String devBid){
+        IotDeviceDataListReqVo reqVo = new IotDeviceDataListReqVo();
+        reqVo.setDevBid(devBid);
+
+        IotDeviceBaseFunReqVo iotDeviceBaseFunReqVo = new IotDeviceBaseFunReqVo();
+        iotDeviceBaseFunReqVo.setDevBid(reqVo.getDevBid());
+        iotDeviceBaseFunReqVo.setMethodName("configInfo");
+        iotDeviceBaseFunReqVo.setParam(reqVo);
+        JSONObject jsonObject = iotDeviceCommonService.func(iotDeviceBaseFunReqVo);
+        return AjaxResult.success(jsonObject);
+    }
+
+    /**
+     * 下发杀虫灯配置指令
+     *
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/config/edit")
+    public AjaxResult sendConfigCmd(@RequestBody IotQxzConfigEditReqVo reqVo) {
+        log.info("【{}】【气象墒情】【下发指令配置】客户id {}", LogCore.getSeq(), getCustomerId());
+        String devBid = reqVo.getDevBid();
+        JSONObject devConfig = reqVo.getDevConfig();
+        if(StringUtils.isEmpty(devBid) || devConfig == null){
+            throw new IotBizException(IotErrorCode.PARAM_INVALID.getCode(),"参数不能为空");
+        }
+        IotDevice iotDevice = iIotDeviceService.selectIotDeviceByDevBid(devBid);
+        if(iotDevice == null){
+            throw new IotBizException(ErrorCode.INVALID_PARAMETER.getCode(),"设备不存在");
+        }
+        String devStatus = iotDevice.getDevStatus();
+        String devCreateddate = iotDevice.getDevCreateddate();
+        Date createdDate = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, devCreateddate);
+        Date nowDate = DateUtils.getNowDate();
+        long diffTime = nowDate.getTime() - createdDate.getTime();
+        if(diffTime > 10 * 1000){
+            if (!Objects.equals(devStatus, IotDeviceStatusTypeEnum.ONLINE.getCode()) && !Objects.equals(devStatus, IotDeviceStatusTypeEnum.WAIT_ACTIVATE.getCode())) {
+                throw new IotBizException(IotErrorCode.FAILURE.getCode(), "设备离线无法操作");
+            }
+        }
+
+        reqVo.setIotDevice(iotDevice);
+
+        IotDeviceBaseFunReqVo iotDeviceBaseFunReqVo = new IotDeviceBaseFunReqVo();
+        iotDeviceBaseFunReqVo.setDevBid(reqVo.getDevBid());
+        iotDeviceBaseFunReqVo.setMethodName("sendConfigCmd");
+        iotDeviceBaseFunReqVo.setParam(reqVo);
+        String taskId = iotDeviceCommonService.func(iotDeviceBaseFunReqVo);
+
+        return new AjaxResult(ErrorCode.SUCCESS.getCode(), "下发成功,等待设备响应结果", taskId);
+    }
 }

+ 12 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/qxsqz/domain/IotQxzConfigEditReqVo.java

@@ -0,0 +1,12 @@
+package com.yunfeiyun.agmp.iotm.device.qxsqz.domain;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
+import lombok.Data;
+
+@Data
+public class IotQxzConfigEditReqVo {
+    private String devBid;
+    private JSONObject devConfig;
+    private IotDevice iotDevice;
+}

+ 52 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/qxsqz/service/IIotQxzCommService.java

@@ -8,6 +8,7 @@ import com.yunfeiyun.agmp.common.core.page.PageDomain;
 import com.yunfeiyun.agmp.common.core.page.TableDataInfo;
 import com.yunfeiyun.agmp.common.core.page.TableSupport;
 import com.yunfeiyun.agmp.common.framework.manager.RedisCacheManager;
+import com.yunfeiyun.agmp.common.log.LogCore;
 import com.yunfeiyun.agmp.common.utils.DateUtils;
 import com.yunfeiyun.agmp.common.utils.JSONUtils;
 import com.yunfeiyun.agmp.common.utils.StringUtils;
@@ -23,6 +24,7 @@ import com.yunfeiyun.agmp.iotm.device.common.domin.DeviceRefreshDto;
 import com.yunfeiyun.agmp.iotm.device.common.domin.IotDeviceDataListReqVo;
 import com.yunfeiyun.agmp.iotm.device.common.service.IotDeviceBaseService;
 import com.yunfeiyun.agmp.iotm.device.common.service.impl.IotDeviceBaseServiceImpl;
+import com.yunfeiyun.agmp.iotm.device.qxsqz.domain.IotQxzConfigEditReqVo;
 import com.yunfeiyun.agmp.iotm.device.qxsqz.domain.QxzDataLast24hDto;
 import com.yunfeiyun.agmp.iotm.util.MongoUtil;
 import com.yunfeiyun.agmp.iotm.web.service.IIotCmdtaskService;
@@ -395,4 +397,54 @@ public class IIotQxzCommService extends IotDeviceBaseServiceImpl implements IotD
         String taskUuid = cmdGroupModel.getTaskUuid();
         log.info("【“刷新”指令集任务】创建成功,taskUuid:{}", taskUuid);
     }
+
+    public JSONObject configInfo(IotDeviceDataListReqVo reqVo){
+        String devBid = reqVo.getDevBid();
+        if(StringUtils.isEmpty(devBid)){
+            throw new IotBizException(IotErrorCode.PARAM_INVALID.getCode(),"参数不能为空");
+        }
+        IotDevice iotDevice = iotDeviceService.selectIotDeviceByDevBid(devBid);
+        if(iotDevice == null){
+            throw new IotBizException(ErrorCode.INVALID_PARAMETER.getCode(),"设备不存在");
+        }
+        IotDeviceconfig iotDeviceconfig = iIotDeviceconfigService.selectIotDeviceConfigByDevBid(devBid);
+        JSONObject jsonObject = new JSONObject();
+        if(iotDeviceconfig != null){
+            jsonObject = JSONObject.parseObject(iotDeviceconfig.getDevcfgContext());
+        }
+        return jsonObject;
+    }
+
+    public String sendConfigCmd(IotQxzConfigEditReqVo reqVo) {
+        IotDevice iotDevice = reqVo.getIotDevice();
+        String devBid = iotDevice.getDevBid();
+        JSONObject devConfig = reqVo.getDevConfig();
+
+        IotDeviceconfig iotDeviceconfig = iIotDeviceconfigService.selectIotDeviceConfigByDevBid(devBid);
+        if (null == iotDeviceconfig) {
+            iotDeviceconfig = new IotDeviceconfig();
+            iotDeviceconfig.setDevcfgBid(iotDeviceconfig.getUUId());
+            iotDeviceconfig.setTid(iotDevice.getTid());
+            iotDeviceconfig.setDevBid(devBid);
+            iotDeviceconfig.setDevcfgContext(JSONUtils.toJSONString(devConfig));
+            iotDeviceconfig.setDevcfgDelstatus("0");
+            iIotDeviceconfigService.insertIotDeviceconfig(iotDeviceconfig);
+        } else {
+            iotDeviceconfig.setDevcfgContext(JSONUtils.toJSONString(devConfig));
+            iIotDeviceconfigService.updateIotDeviceconfig(iotDeviceconfig);
+        }
+
+        CmdGroupModel cmdGroupModel = iIotDeviceconfigService.createConfigCmd(iotDeviceconfig);
+        log.info("【{}】【气象墒情 [下发配置]】【构建 cmdGroupModel】{}", LogCore.getSeq(), JSONUtils.toJSONString(cmdGroupModel));
+        cmdGroupModel.setRequestId(IdUtils.fastUUID());
+
+        // 适配增加详细日志使用
+        cmdGroupModel.setDevCode(iotDevice.getDevCode());
+        cmdGroupModel.setCtBiztitle(iotDevice.getDevtypeName() + ":" + iotDevice.getDevCode());
+        cmdGroupModel.setCtBiztype("3");
+        cmdGroupModel.setCtDevtype(iotDevice.getDevtypeBid());
+        cmdGroupModel.setCtParam(JSONUtils.toJSONString(reqVo));
+        iIotCmdtaskService.handInternalCmd(cmdGroupModel);
+        return cmdGroupModel.getTaskUuid();
+    }
 }