TRX 1 年間 前
コミット
bf40e57d8d

+ 34 - 0
src/main/java/com/zswl/dataservice/controller/free/FixDataController.java

@@ -0,0 +1,34 @@
+package com.zswl.dataservice.controller.free;
+
+import com.zswl.dataservice.model.mqtt.GateWayInfoAddParam;
+import com.zswl.dataservice.service.fix.FixDataService;
+import com.zswl.dataservice.utils.result.ResultContent;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.Assert;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author TRX
+ * @date 2024/6/27
+ */
+@RequestMapping("/fixData")
+@RestController
+@Validated
+@Tag(name = "修复数据")
+public class FixDataController {
+
+    @Autowired
+    private FixDataService fixDataService;
+
+    @Operation(summary = "同步全部设备")
+    @RequestMapping(value = "fixSyncDevice", method = {RequestMethod.GET})
+    public ResultContent fixSyncDevice() {
+        return fixDataService.fixSyncDevice();
+    }
+}

+ 13 - 6
src/main/java/com/zswl/dataservice/controller/free/GateWayFreeController.java

@@ -1,7 +1,10 @@
 package com.zswl.dataservice.controller.free;
 
+import com.zswl.dataservice.model.mqtt.DeviceInfoAddParam;
+import com.zswl.dataservice.model.mqtt.DeviceInfoRegisterParam;
 import com.zswl.dataservice.model.mqtt.GateWayBindDeviceParam;
 import com.zswl.dataservice.model.mqtt.GateWayInfoAddParam;
+import com.zswl.dataservice.service.mqtt.DeviceInfoService;
 import com.zswl.dataservice.service.mqtt.GateWayInfoService;
 import com.zswl.dataservice.utils.result.ResultContent;
 import io.swagger.v3.oas.annotations.Operation;
@@ -29,12 +32,8 @@ public class GateWayFreeController {
     @Autowired
     GateWayInfoService gateWayInfoService;
 
-    @Operation(summary = "网关绑定设备、连接账号")
-    @RequestMapping(value = "gateWayBindDevice", method = {RequestMethod.POST})
-    public ResultContent gateWayBindDevice(@RequestBody GateWayBindDeviceParam param) {
-        Assert.hasText(param.getGateWayId(), "网关ID不能为空");
-        return gateWayInfoService.gateWayBindDevice(param);
-    }
+    @Autowired
+    DeviceInfoService deviceInfoService;
 
     @Operation(summary = "注册网关")
     @RequestMapping(value = "registerGateWay", method = {RequestMethod.POST})
@@ -42,4 +41,12 @@ public class GateWayFreeController {
         Assert.hasText(param.getGateWayId(), "网关ID不能为空");
         return gateWayInfoService.registerGateWay(param);
     }
+
+    @Operation(summary = "网关绑定设备")
+    @RequestMapping(value = "gateWayBindDevice", method = {RequestMethod.POST})
+    public ResultContent gateWayBindDevice(@RequestBody GateWayBindDeviceParam param) {
+        Assert.hasText(param.getGateWayId(), "网关ID不能为空");
+        return gateWayInfoService.gateWayBindDevice(param);
+    }
+
 }

+ 9 - 0
src/main/java/com/zswl/dataservice/controller/hardware/DeviceController.java

@@ -80,6 +80,15 @@ public class DeviceController {
         return deviceInfoService.updateIopTemplate(param);
     }
 
+    @Operation(summary = "编辑关联的项目信息")
+    @RequestMapping(value = "updateProject", method = {RequestMethod.POST})
+    public ResultContent updateProject(@RequestBody DeviceInfoUpdateRemark param) {
+        Assert.hasText(param.getId(), "ID不能为空");
+        Assert.hasText(param.getProjectCode(), "projectCode不能为空");
+        return deviceInfoService.updateProject(param);
+    }
+
+
     @Operation(summary = "启用-禁用 设备")
     @RequestMapping(value = "updateDeviceState", method = {RequestMethod.POST})
     public ResultContent updateDeviceState(@RequestBody DeviceInfoUpdateRemark param) {

+ 4 - 0
src/main/java/com/zswl/dataservice/domain/mqtt/DeviceInfo.java

@@ -1,6 +1,7 @@
 package com.zswl.dataservice.domain.mqtt;
 
 import cn.hutool.json.JSONObject;
+import com.github.microservice.models.type.DeviceType;
 import com.zswl.dataservice.domain.base.SuperEntity;
 import com.zswl.dataservice.domain.iot.IotTemplate;
 import com.zswl.dataservice.type.DataState;
@@ -30,6 +31,9 @@ public class DeviceInfo extends SuperEntity {
     @Schema(description = "设备名称")
     private String deviceName;
 
+    @Schema(description = "设备类型:消费机 闸机")
+    private DeviceType deviceType;
+
     @Schema(description = "在线状态")
     private OnLineState onLineState;
 

+ 4 - 14
src/main/java/com/zswl/dataservice/model/mqtt/DeviceInfoAddParam.java

@@ -1,6 +1,7 @@
 package com.zswl.dataservice.model.mqtt;
 
 import cn.hutool.json.JSONObject;
+import com.github.microservice.models.type.DeviceType;
 import com.zswl.dataservice.domain.iot.IotTemplate;
 import com.zswl.dataservice.domain.mqtt.ProjectInfo;
 import com.zswl.dataservice.model.baseParam.SuperParam;
@@ -23,29 +24,18 @@ public class DeviceInfoAddParam extends SuperParam {
     @Schema(description = "设备名称")
     private String deviceName;
 
-    @Schema(description = "在线状态")
-    private OnLineState onLineState;
-
-    @Schema(description = "数据状态")
-    private DataState state = DataState.Enable;
+    @Schema(description = "设备类型:消费机 闸机")
+    private DeviceType deviceType;
 
     @Schema(description = "ip地址")
     private String ip;
 
     @Schema(description = "所属项目")
-    @DBRef(lazy = true)
-    private String projectInfoOid;
+    private String projectInfoCode;
 
     @Schema(description = "固件版本")
     private String firmwareVersion;
 
     @Schema(description = "连接参数")
     private JSONObject connectParam;
-
-    @Schema(description = "是否开启日志上传")
-    private Boolean isReportLogs = Boolean.TRUE;
-
-    @Schema(description = "物联网模版信息")
-    @DBRef(lazy = true)
-    private String iotTemplateId;
 }

+ 41 - 0
src/main/java/com/zswl/dataservice/model/mqtt/DeviceInfoRegisterParam.java

@@ -0,0 +1,41 @@
+package com.zswl.dataservice.model.mqtt;
+
+import cn.hutool.json.JSONObject;
+import com.github.microservice.models.type.DeviceType;
+import com.zswl.dataservice.model.baseParam.SuperParam;
+import com.zswl.dataservice.type.DataState;
+import com.zswl.dataservice.utils.mqtt.type.OnLineState;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.data.mongodb.core.mapping.DBRef;
+
+/**
+ * @author TRX
+ * @date 2024/5/16
+ */
+@Data
+public class DeviceInfoRegisterParam  {
+
+    @Schema(description = "设备ID")
+    private String deviceId;
+
+    @Schema(description = "设备名称")
+    private String deviceName;
+
+    @Schema(description = "设备类型:消费机 闸机")
+    private DeviceType deviceType;
+
+    @Schema(description = "ip地址")
+    private String ip;
+
+    @Schema(description = "所属项目")
+    @DBRef(lazy = true)
+    private String projectInfoCode;
+
+    @Schema(description = "固件版本")
+    private String firmwareVersion;
+
+    @Schema(description = "连接参数")
+    private JSONObject connectParam;
+
+}

+ 3 - 0
src/main/java/com/zswl/dataservice/model/mqtt/DeviceInfoUpdateRemark.java

@@ -25,4 +25,7 @@ public class DeviceInfoUpdateRemark {
 
     @Schema(description = "数据状态")
     private DataState state;
+
+    @Schema(description = "所属项目code")
+    private String projectCode;
 }

+ 2 - 2
src/main/java/com/zswl/dataservice/model/mqtt/GateWayBindDeviceParam.java

@@ -24,10 +24,10 @@ public class GateWayBindDeviceParam {
     @Schema(description = "设备列表")
     private List<DeviceInfoAddParam> devices;
 
-    @Schema(description = "网关连接账号")
+    @Schema(description = "网关连接账号", hidden = true)
     private String userName;
 
     @Schema(description = "所属项目")
     @DBRef(lazy = true)
-    private String projectInfoOid;
+    private String projectInfoCode;
 }

+ 43 - 0
src/main/java/com/zswl/dataservice/service/fix/FixDataService.java

@@ -0,0 +1,43 @@
+package com.zswl.dataservice.service.fix;
+
+import com.zswl.dataservice.dao.mqtt.DeviceInfoDao;
+import com.zswl.dataservice.domain.mqtt.DeviceInfo;
+import com.zswl.dataservice.service.mqtt.DeviceSyncFullCardService;
+import com.zswl.dataservice.utils.result.ResultContent;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author TRX
+ * @date 2024/6/27
+ */
+@Slf4j
+@Service
+public class FixDataService {
+
+    @Autowired
+    DeviceInfoDao deviceInfoDao;
+
+    @Autowired
+    private DeviceSyncFullCardService deviceSyncFullCardService;
+
+    /**
+     * 同步全部设备
+     *
+     * @return
+     */
+    public ResultContent fixSyncDevice() {
+        int count = 0;
+        List<DeviceInfo> deviceInfoList = deviceInfoDao.findAll();
+        if (ObjectUtils.isNotEmpty(deviceInfoList)) {
+            count = deviceInfoList.size();
+            deviceSyncFullCardService.noticeSyncDevice(deviceInfoList);
+        }
+        return ResultContent.buildSuccess();
+    }
+
+}

+ 26 - 32
src/main/java/com/zswl/dataservice/service/mqtt/DeviceInfoService.java

@@ -8,10 +8,7 @@ import com.zswl.dataservice.domain.iot.IotTemplate;
 import com.zswl.dataservice.domain.mqtt.DeviceInfo;
 import com.zswl.dataservice.domain.mqtt.ProjectInfo;
 import com.zswl.dataservice.model.iot.IotMainModel;
-import com.zswl.dataservice.model.mqtt.DeviceInfoAddParam;
-import com.zswl.dataservice.model.mqtt.DeviceInfoModel;
-import com.zswl.dataservice.model.mqtt.DeviceInfoSearchParam;
-import com.zswl.dataservice.model.mqtt.DeviceInfoUpdateRemark;
+import com.zswl.dataservice.model.mqtt.*;
 import com.zswl.dataservice.service.iot.IotServiceImpl;
 import com.zswl.dataservice.type.FunctionType;
 import com.zswl.dataservice.utils.bean.BeanUtils;
@@ -56,7 +53,7 @@ public class DeviceInfoService {
     DeviceSyncFullCardService deviceSyncFullCardService;
 
     /**
-     * 添加-编辑设备
+     * 添加-编辑设备 (基础信息)
      *
      * @param param
      * @return
@@ -69,40 +66,18 @@ public class DeviceInfoService {
             param.setId(null);
         }
         BeanUtils.copyProperties(param, deviceInfo, "id");
+
         // 项目
-        ProjectInfo projectInfo = null;
-        if (StringUtils.isNotEmpty(param.getProjectInfoOid())) {
-            projectInfo = projectInfoDao.findTopByCode(param.getProjectInfoOid());
+        if (StringUtils.isNotEmpty(param.getProjectInfoCode())) {
+            ProjectInfo projectInfo = projectInfoDao.findTopByCode(param.getProjectInfoCode());
+            deviceInfo.setProjectInfo(projectInfo);
         }
-        deviceInfo.setProjectInfo(projectInfo);
 
-        // 模版
-        IotTemplate iotTemplate = null;
-        if (StringUtils.isNotEmpty(param.getIotTemplateId())) {
-            iotTemplate = iotTemplateDao.findTopById(param.getIotTemplateId());
-        }
-        deviceInfo.setIotTemplate(iotTemplate);
         deviceInfoDao.save(deviceInfo);
         operationLogsService.addLogs(String.format("添加了设备;%s", deviceInfo.getDeviceName()), LogsLevel.Middle, deviceInfo);
         return ResultContent.buildSuccess(deviceInfo);
     }
 
-    /**
-     * 初始设备
-     *
-     * @param param
-     * @return
-     */
-    public ResultContent<DeviceInfo> initDeviceInfo(DeviceInfoAddParam param) {
-        DeviceInfo deviceInfo = deviceInfoDao.findTopByDeviceId(param.getDeviceId());
-        if (ObjectUtils.isEmpty(deviceInfo)) {
-            ResultContent<DeviceInfo> resultContent = addDeviceInfo(param);
-            deviceInfo = resultContent.getContent();
-            operationLogsService.addLogs(String.format("添加了设备;%s", deviceInfo.getDeviceName()), LogsLevel.Middle, deviceInfo);
-        }
-        return ResultContent.buildSuccess(deviceInfo);
-    }
-
     /**
      * 设备列表
      *
@@ -148,6 +123,26 @@ public class DeviceInfoService {
         return ResultContent.buildSuccess();
     }
 
+    /**
+     * 编辑设备关联的项目信息
+     *
+     * @param param
+     * @return
+     */
+    public ResultContent updateProject(DeviceInfoUpdateRemark param) {
+        DeviceInfo deviceInfo = deviceInfoDao.findTopById(param.getId());
+        if (ObjectUtils.isEmpty(deviceInfo)) {
+            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, param.getId()));
+        }
+        ProjectInfo projectInfo = projectInfoDao.findTopByCode(param.getProjectCode());
+        if (ObjectUtils.isEmpty(projectInfo)) {
+            return ResultContent.buildFail(String.format("项目不存在:", param.getId()));
+        }
+        deviceInfo.setProjectInfo(projectInfo);
+        deviceInfoDao.save(deviceInfo);
+        return ResultContent.buildSuccess();
+    }
+
     /**
      * 编辑设备关联的模版
      *
@@ -212,7 +207,6 @@ public class DeviceInfoService {
     }
 
 
-
     /**
      * 删除设备
      *

+ 21 - 11
src/main/java/com/zswl/dataservice/service/mqtt/GateWayInfoService.java

@@ -79,7 +79,7 @@ public class GateWayInfoService extends SuperService {
     public ResultContent addGateWayInfo(GateWayInfoAddParam param) {
         initDefaultUser(param);
         GateWayInfo gateWayInfo = gateWayInfoDao.findTopByGateWayId(param.getGateWayId());
-        if(ObjectUtils.isEmpty(gateWayInfo)){
+        if (ObjectUtils.isEmpty(gateWayInfo)) {
             gateWayInfo = new GateWayInfo();
         }
         BeanUtils.copyProperties(param, gateWayInfo, "id");
@@ -93,10 +93,11 @@ public class GateWayInfoService extends SuperService {
 
     /**
      * 注册网关
+     *
      * @param param
      * @return
      */
-    public ResultContent registerGateWay(GateWayInfoAddParam param){
+    public ResultContent registerGateWay(GateWayInfoAddParam param) {
         addGateWayInfo(param);
         return ResultContent.buildSuccess();
     }
@@ -108,13 +109,21 @@ public class GateWayInfoService extends SuperService {
      * @return
      */
     public ResultContent gateWayBindDevice(GateWayBindDeviceParam param) {
-        GateWayInfoAddParam addParam = new GateWayInfoAddParam();
-        addParam.setGateWayId(param.getGateWayId());
-        addParam.setGateWayName(param.getGateWayName());
-        addParam.setOid(param.getProjectInfoOid());
-        addGateWayInfo(addParam);
         // 网关信息
         GateWayInfo gateWayInfo = gateWayInfoDao.findTopByGateWayId(param.getGateWayId());
+        if (ObjectUtils.isEmpty(gateWayInfo)) {
+            return ResultContent.buildFail(String.format("网关未注册:%s", param.getGateWayId()));
+        }
+        List<DeviceInfoAddParam> devices = param.getDevices();
+        if (ObjectUtils.isNotEmpty(devices)) {
+            // 检查设备数据合法性
+            for (DeviceInfoAddParam device : devices) {
+                if (StringUtils.isEmpty(device.getDeviceId())) {
+                    return ResultContent.buildFail("deviceId不能为空");
+                }
+            }
+        }
+
         if (StringUtils.isEmpty(param.getUserName())) {
             param.setUserName("admin");
         }
@@ -135,15 +144,15 @@ public class GateWayInfoService extends SuperService {
 
         // 设备列表
         List<DeviceInfo> deviceInfos = new ArrayList<>();
-        List<DeviceInfoAddParam> devices = new ArrayList<>();
         if (ObjectUtils.isNotEmpty(devices)) {
             // 绑定网关和设备的关系
             for (DeviceInfoAddParam device : devices) {
-                // 如果设备不存在,,则初始化
-                ResultContent<DeviceInfo> resultContent = deviceInfoService.initDeviceInfo(device);
+                device.setProjectInfoCode(param.getProjectInfoCode());
+                // 保存设备信息
+                ResultContent<DeviceInfo> resultContent = deviceInfoService.addDeviceInfo(device);
                 DeviceInfo deviceInfo = resultContent.getContent();
-                GateWay2Device gateWay2Device = gateWay2DeviceDao.findTopByGateWayInfoAndDeviceInfo(gateWayInfo, deviceInfo);
 
+                GateWay2Device gateWay2Device = gateWay2DeviceDao.findTopByGateWayInfoAndDeviceInfo(gateWayInfo, deviceInfo);
                 if (ObjectUtils.isEmpty(gateWay2Device)) {
                     gateWay2Device = new GateWay2Device();
                     gateWay2Device.setState(OnLineState.OffLine);
@@ -172,6 +181,7 @@ public class GateWayInfoService extends SuperService {
         // 绑定用户设备权限
         bindUserDevicesPermissions(MqttTopicUtils.getUserRoleName(gateWayUserInfo), deviceInfos);
 
+        deviceSyncFullCardService.noticeSyncDevice(deviceInfos);
         return ResultContent.buildSuccess();
     }