Procházet zdrojové kódy

平台设备维护:监控主机新增 代码提交

jingyuanchao před 11 měsíci
rodič
revize
ed77531443

+ 3 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/constant/RedisConstant.java

@@ -19,5 +19,8 @@ public class RedisConstant {
     // redis 订阅者因链接不在当前实例而发送失败后 增加发送失败数量
     public static final String ADD_SUBSCRIBERS_AND_FAIL_NUMS = "add_SubscribersAndFailNums";
 
+    // redis 生成deviceCod锁
+    public static final String GENERAL_DEVICE_CODE = "GENERAL_DEVICE_CODE";
+
 
 }

+ 9 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/controller/IotDeviceInfoController.java

@@ -2,6 +2,7 @@ package com.xunmei.iot.controller;
 
 import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.common.core.web.page.TableDataInfo;
+import com.xunmei.iot.dto.deviceInfo.EditDvrHostDeviceDto;
 import com.xunmei.iot.dto.deviceInfo.IotDeviceInfoPageDto;
 import com.xunmei.iot.service.IIotDeviceInfoService;
 import com.xunmei.iot.vo.deviceInfo.IotDeviceInfoPageVo;
@@ -17,6 +18,7 @@ public class IotDeviceInfoController {
 
     @Resource
     private IIotDeviceInfoService deviceInfoService;
+
     @ApiOperation("iot设备列表")
     @GetMapping({"/page"})
     TableDataInfo<IotDeviceInfoPageVo> webPage(IotDeviceInfoPageDto req) {
@@ -42,4 +44,11 @@ public class IotDeviceInfoController {
     }
 
 
+    @ApiOperation("新增/编辑监控主机")
+    @PostMapping({"/editDvrHostDevice"})
+    AjaxResult addDvrHostDevice(@RequestBody EditDvrHostDeviceDto req) {
+        return AjaxResult.success(deviceInfoService.editDvrHostDevice(req));
+    }
+
+
 }

+ 46 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/dto/deviceInfo/EditDvrHostDeviceDto.java

@@ -0,0 +1,46 @@
+package com.xunmei.iot.dto.deviceInfo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class EditDvrHostDeviceDto {
+
+    @ApiModelProperty(value = "设备id")
+    private Long id;
+
+    @ApiModelProperty(value = "机构id")
+    private Long orgId;
+
+    @ApiModelProperty(value = "主机iotCode")
+    private String iotCode;
+
+    @ApiModelProperty(value = "设备名称")
+    private String deviceName;
+
+    @ApiModelProperty(value = "设备产品")
+    private String deviceProduct;
+
+    @ApiModelProperty(value = "主机ip")
+    private String serverIp;
+
+    @ApiModelProperty(value = "主机端口")
+    private String serverPort;
+
+    @ApiModelProperty(value = "设备用户名")
+    private String userName;
+
+    @ApiModelProperty(value = "设备密码")
+    private String password;
+
+    @ApiModelProperty(value = "设备型号")
+    private String models;
+
+    @ApiModelProperty(value = "是否启用",notes = "0:未启用 1:启用")
+    private Integer enable;
+
+}

+ 9 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/mapper/IotDeviceInfoExtendMapper.java

@@ -0,0 +1,9 @@
+package com.xunmei.iot.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xunmei.system.api.domain.iot.IotDeviceInfoExtend;
+
+public interface IotDeviceInfoExtendMapper extends BaseMapper<IotDeviceInfoExtend> {
+
+
+}

+ 7 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/IIotDeviceInfoService.java

@@ -3,6 +3,7 @@ package com.xunmei.iot.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.xunmei.common.core.domain.iot.domain.IotServerProduct;
 import com.xunmei.common.core.web.page.TableDataInfo;
+import com.xunmei.iot.dto.deviceInfo.EditDvrHostDeviceDto;
 import com.xunmei.iot.dto.deviceInfo.IotDeviceInfoPageDto;
 import com.xunmei.iot.vo.deviceInfo.DeviceDetailInfoVo;
 import com.xunmei.iot.vo.deviceInfo.IotDeviceInfoPageVo;
@@ -26,4 +27,10 @@ public interface IIotDeviceInfoService extends IService<IotDeviceInfo> {
     List<DeviceDetailInfoVo> getByProductTypesAndOrgId(List<String> productTypes,Long orgId);
 
     List<IotServerProduct> getProductDisplayName(String type);
+
+    Integer editDvrHostDevice(EditDvrHostDeviceDto req);
+
+
+    String  generalDeviceCode();
+
 }

+ 14 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/IotDeviceInfoExtendService.java

@@ -0,0 +1,14 @@
+package com.xunmei.iot.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.xunmei.iot.dto.deviceInfo.EditDvrHostDeviceDto;
+import com.xunmei.system.api.domain.iot.IotDeviceInfoExtend;
+
+/**
+ * 设备扩展信息
+ */
+public interface IotDeviceInfoExtendService extends IService<IotDeviceInfoExtend> {
+
+
+    void updateByDeviceId(Long deviceId, EditDvrHostDeviceDto req);
+}

+ 33 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/IotDeviceInfoExtendServiceImpl.java

@@ -0,0 +1,33 @@
+package com.xunmei.iot.service;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xunmei.iot.dto.deviceInfo.EditDvrHostDeviceDto;
+import com.xunmei.iot.mapper.IotDeviceInfoExtendMapper;
+import com.xunmei.system.api.domain.iot.IotDeviceInfoExtend;
+import org.springframework.stereotype.Service;
+
+@Service
+public class IotDeviceInfoExtendServiceImpl extends ServiceImpl<IotDeviceInfoExtendMapper, IotDeviceInfoExtend> implements IotDeviceInfoExtendService {
+
+
+    @Override
+    public void updateByDeviceId(Long deviceId, EditDvrHostDeviceDto req) {
+        LambdaQueryWrapper<IotDeviceInfoExtend> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(IotDeviceInfoExtend::getDeviceId,deviceId);
+        remove(wrapper);
+
+        IotDeviceInfoExtend extend = new IotDeviceInfoExtend();
+        extend.setId(IdWorker.getId());
+        extend.setDeviceId(deviceId);
+        extend.setUserName(req.getUserName());
+        extend.setPassword(req.getPassword());
+        extend.setNetAddress(req.getServerIp());
+        extend.setPort(Integer.parseInt(req.getServerPort()));
+        extend.setDeleted(0);
+        extend.setIotToken(req.getIotCode());
+        save(extend);
+    }
+}

+ 74 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/IotDeviceInfoServiceImpl.java

@@ -2,29 +2,40 @@ package com.xunmei.iot.service.impl;
 
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xunmei.common.core.constant.Constants;
+import com.xunmei.common.core.constant.RedisConstant;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.domain.iot.domain.IotServerProduct;
 import com.xunmei.common.core.enums.iot.BaseDeviceTypeEnum;
+import com.xunmei.common.core.utils.DateUtils;
 import com.xunmei.common.core.utils.StringUtils;
 import com.xunmei.common.core.web.page.TableDataInfo;
+import com.xunmei.common.redis.utils.RedisUtils;
+import com.xunmei.common.security.utils.SecurityUtils;
+import com.xunmei.iot.dto.deviceInfo.EditDvrHostDeviceDto;
 import com.xunmei.iot.dto.deviceInfo.IotDeviceInfoPageDto;
 import com.xunmei.iot.mapper.IotAlarmSubsystemMapper;
 import com.xunmei.iot.mapper.IotDeviceInfoMapper;
 import com.xunmei.iot.mapper.IotServerProductMapper;
 import com.xunmei.iot.service.IIotDeviceInfoService;
+import com.xunmei.iot.service.IotDeviceInfoExtendService;
 import com.xunmei.iot.vo.deviceInfo.DeviceDetailInfoVo;
 import com.xunmei.iot.vo.deviceInfo.IotDeviceInfoPageVo;
 import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.system.api.domain.iot.IotDeviceInfo;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.io.Serializable;
+import java.util.Date;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 @Service
 public class IotDeviceInfoServiceImpl extends ServiceImpl<IotDeviceInfoMapper, IotDeviceInfo> implements IIotDeviceInfoService {
@@ -36,6 +47,8 @@ public class IotDeviceInfoServiceImpl extends ServiceImpl<IotDeviceInfoMapper, I
 
     @Resource
     private IotServerProductMapper productMapper;
+    @Resource
+    private IotDeviceInfoExtendService extendService;
 
     @Override
     public TableDataInfo<IotDeviceInfoPageVo> deviceInfoPage(IotDeviceInfoPageDto request) {
@@ -119,4 +132,65 @@ public class IotDeviceInfoServiceImpl extends ServiceImpl<IotDeviceInfoMapper, I
         wrapper.like(IotServerProduct::getName, type);
         return productMapper.selectList(wrapper);
     }
+
+    @Override
+    public String generalDeviceCode() {
+        RedissonClient client = RedisUtils.getClient();
+        RLock lock = client.getLock(RedisConstant.GENERAL_DEVICE_CODE);
+        try {
+            boolean tryLock = lock.tryLock(10, 10, TimeUnit.SECONDS);
+            if (tryLock) {
+                return "PT_" + DateUtils.parseDateToStr("yyyyMMddHHmmssSSS", new Date());
+            }
+        } catch (InterruptedException e) {
+            throw new RuntimeException("生成设备编码失败");
+        } finally {
+            if (lock.isHeldByCurrentThread()) {
+                lock.unlock();
+            }
+        }
+        throw new RuntimeException("生成设备编码失败");
+    }
+
+    @Override
+    public Integer editDvrHostDevice(EditDvrHostDeviceDto req) {
+        Long deviceId = req.getId();
+        SysOrg sysOrg = orgService.selectOrgById(req.getOrgId(), SecurityConstants.INNER);
+        int effect = 0;
+        if (deviceId == null) {
+            IotDeviceInfo deviceInfo = new IotDeviceInfo();
+            buildDeviceInfo(deviceInfo, req, sysOrg);
+            deviceInfo.setId(IdWorker.getId());
+            deviceInfo.setCreateTime(new Date());
+            deviceInfo.setCreateBy(SecurityUtils.getLoginUser().getSysUser().getId().toString());
+            effect = baseMapper.insert(deviceInfo);
+            deviceId = deviceInfo.getId();
+        } else {
+            IotDeviceInfo deviceInfo = baseMapper.selectById(deviceId);
+            if (deviceInfo != null) {
+                buildDeviceInfo(deviceInfo, req, sysOrg);
+            }
+            effect = baseMapper.updateById(deviceInfo);
+        }
+
+        extendService.updateByDeviceId(deviceId, req);
+
+        return effect;
+    }
+
+    private void buildDeviceInfo(IotDeviceInfo deviceInfo, EditDvrHostDeviceDto req, SysOrg sysOrg) {
+        deviceInfo.setDeviceName(req.getDeviceName());
+        deviceInfo.setDeviceType(BaseDeviceTypeEnum.Dvs.getCode());
+        deviceInfo.setDeviceProduct(req.getDeviceProduct());
+        deviceInfo.setDeviceCode(generalDeviceCode());
+        deviceInfo.setDeviceModel(req.getModels());
+        deviceInfo.setIotToken(req.getIotCode());
+        deviceInfo.setOrgId(req.getOrgId());
+        deviceInfo.setEnable(req.getEnable());
+        deviceInfo.setDeleted(0);
+        deviceInfo.setUpdateTime(new Date());
+        deviceInfo.setUpdateBy(SecurityUtils.getLoginUser().getSysUser().getName());
+        deviceInfo.setOrgName(sysOrg.getShortName());
+        deviceInfo.setOrgPath(sysOrg.getPath());
+    }
 }