Prechádzať zdrojové kódy

新增相关类型查询接口,完善海康大华相关接口

hanzhengyi 9 hodín pred
rodič
commit
01efeeccd1

+ 1 - 1
service-sas/service-sas-biz/src/main/java/com/usky/sas/common/dahua/InitNetSDKLib.java

@@ -36,7 +36,7 @@ public class InitNetSDKLib {
 
                 try {
                     if (OsSelect.isWindows()) {
-                        strDllPath = "C:\\Users\\41932\\Desktop\\dahua\\libs\\win64\\dhnetsdk.dll";
+                        strDllPath = "D:\\文档和图片\\工作文档\\厂家协议\\海康\\设备网络SDK_JAVA_Win64_IS_V3.060.0000003.0.R.251127\\General_NetSDK_ChnEng_JAVA_Win64_IS_V3.060.0000003.0.R.251127\\libs\\win64\\dhnetsdk.dll";
                     } else if (OsSelect.isLinux()) {
                         strDllPath = "/www/wwwroot/fjkjagapp.fj724.com/dhSDK/libdhnetsdk.so";
                     }

+ 4 - 1
service-sas/service-sas-biz/src/main/java/com/usky/sas/common/dahua/NET_IN_STARTSERACH_DEVICE.java

@@ -6,15 +6,18 @@ import java.util.Arrays;
 import java.util.List;
 
 public class NET_IN_STARTSERACH_DEVICE extends Structure {
-    public int dwSize = this.size();
+    public int dwSize;
     public byte[] szLocalIp = new byte[64];
     public NetSDKLib.fSearchDevicesCBEx cbSearchDevices;
     public Pointer pUserData;
     public int emSendType;
 
     public NET_IN_STARTSERACH_DEVICE() {
+        // 必须在数组字段初始化之后再设置 size
+        this.dwSize = this.size();
     }
 
+    @Override
     protected List<String> getFieldOrder() {
         return Arrays.asList("dwSize", "szLocalIp", "cbSearchDevices", "pUserData", "emSendType");
     }

+ 28 - 0
service-sas/service-sas-biz/src/main/java/com/usky/sas/controller/web/SasDeviceController.java

@@ -39,6 +39,9 @@ import java.util.List;
  * POST /prod-api/service-sas/device/config/batch-add   批量新增设备配置
  * GET  /prod-api/service-sas/device/unitySearchDevice  扫描获取周边设备
  * POST /prod-api/service-sas/device/unityAddSearchDevice  统一扫描添加设备
+ * POST /prod-api/service-sas/device/getProtocolCode    视频协议下拉列表
+ * POST /prod-api/service-sas/device/getVideoTypeCode   视频设备类型下拉列表
+ * POST /prod-api/service-sas/device/updateDeviceIp     海康更改设备IP地址
  */
 @RestController
 @RequestMapping("/device")
@@ -162,6 +165,31 @@ public class SasDeviceController {
         return ApiResult.success(sasDeviceService.unityAddSearchDevice(request));
     }
 
+    /**
+     * 视频协议下拉列表
+     */
+    @PostMapping("/getProtocolCode")
+    public ApiResult<List<DeviceProtocolOptionVO>> getProtocolCode() {
+        return ApiResult.success(sasDeviceService.getProtocolCodes());
+    }
+
+    /**
+     * 视频设备类型下拉列表
+     */
+    @PostMapping("/getVideoTypeCode")
+    public ApiResult<List<DeviceVideoTypeOptionVO>> getVideoTypeCode() {
+        return ApiResult.success(sasDeviceService.getVideoTypeCodes());
+    }
+
+    /**
+     * 海康更改设备 IP 地址
+     */
+    @PostMapping("/updateDeviceIp")
+    public ApiResult<Void> updateHikDeviceIp(@RequestBody UpdateDeviceIpAddrRequest request) {
+        sasDeviceService.updateHikDeviceIp(request);
+        return ApiResult.success();
+    }
+
     /**
      * 获取设备导入模板(Excel)
      */

+ 13 - 0
service-sas/service-sas-biz/src/main/java/com/usky/sas/controller/web/SasEventGroupController.java

@@ -2,6 +2,7 @@ package com.usky.sas.controller.web;
 
 import com.usky.common.core.bean.ApiResult;
 import com.usky.common.core.bean.CommonPage;
+import com.usky.sas.enums.SystemTypeCodeEnum;
 import com.usky.sas.service.SasEventTypeGroupService;
 import com.usky.sas.service.vo.EventGroupInfo;
 import com.usky.sas.service.vo.EventGroupPageRequest;
@@ -17,6 +18,8 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 /**
  * 事件组配置接口
  *
@@ -41,6 +44,16 @@ public class SasEventGroupController {
         return ApiResult.success(eventTypeGroupService.page(request));
     }
 
+    /**
+     * 获取设备事件类型列表(根据授权模块过滤)
+     *
+     * GET /prod-api/service-sas/event/group/getSystemTypeCodes
+     */
+    @GetMapping("/getSystemTypeCodes")
+    public ApiResult<List<SystemTypeCodeEnum>> getSystemTypeCodes() {
+        return ApiResult.success(eventTypeGroupService.getSystemTypeCodes());
+    }
+
     /**
      * 新增事件组
      */

+ 11 - 0
service-sas/service-sas-biz/src/main/java/com/usky/sas/service/SasDeviceService.java

@@ -75,5 +75,16 @@ public interface SasDeviceService extends CrudService<SasDevice> {
      * 统一扫描添加设备:根据前端选择的扫描结果和协议类型,批量生成 sas_device 记录。
      */
     List<String> unityAddSearchDevice(UnityAddSearchDeviceRequest request);
+
+    /** 视频协议下拉列表 */
+    List<DeviceProtocolOptionVO> getProtocolCodes();
+
+    /** 视频设备类型下拉列表 */
+    List<DeviceVideoTypeOptionVO> getVideoTypeCodes();
+
+    /**
+     * 海康设备修改 IP 地址
+     */
+    void updateHikDeviceIp(UpdateDeviceIpAddrRequest request);
 }
 

+ 6 - 0
service-sas/service-sas-biz/src/main/java/com/usky/sas/service/SasEventTypeGroupService.java

@@ -3,6 +3,7 @@ package com.usky.sas.service;
 import com.usky.common.core.bean.CommonPage;
 import com.usky.common.mybatis.core.CrudService;
 import com.usky.sas.domain.SasEventTypeGroup;
+import com.usky.sas.enums.SystemTypeCodeEnum;
 import com.usky.sas.service.vo.EventGroupInfo;
 import com.usky.sas.service.vo.EventGroupPageRequest;
 import com.usky.sas.service.vo.EventGroupSaveRequest;
@@ -19,5 +20,10 @@ public interface SasEventTypeGroupService extends CrudService<SasEventTypeGroup>
     void update(String id, EventGroupSaveRequest request);
 
     void delete(String id);
+
+    /**
+     * 根据授权模块获取设备事件类型列表
+     */
+    java.util.List<SystemTypeCodeEnum> getSystemTypeCodes();
 }
 

+ 77 - 0
service-sas/service-sas-biz/src/main/java/com/usky/sas/service/impl/SasDeviceServiceImpl.java

@@ -59,6 +59,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.math.BigDecimal;
+import java.nio.charset.StandardCharsets;
 import java.time.LocalDateTime;
 import java.time.temporal.ChronoUnit;
 import java.time.format.DateTimeFormatter;
@@ -917,6 +918,82 @@ public class SasDeviceServiceImpl extends AbstractCrudService<SasDeviceMapper, S
         return ids;
     }
 
+    @Override
+    public void updateHikDeviceIp(UpdateDeviceIpAddrRequest request) {
+        if (request == null
+                || StrUtil.isBlank(request.getIpAddr())
+                || request.getPort() == null
+                || StrUtil.isBlank(request.getNetMask())
+                || StrUtil.isBlank(request.getGateway())
+                || StrUtil.isBlank(request.getMacAddr())) {
+            throw new BusinessException("修改设备IP参数不完整");
+        }
+
+        String setIp = request.getIpAddr();
+        String netmask = request.getNetMask();
+        String gateway = request.getGateway();
+        String macAddr = request.getMacAddr();
+        String password = request.getPassword() != null ? request.getPassword() : "";
+
+        Sadp.SADP_DEV_NET_PARAM netParam = new Sadp.SADP_DEV_NET_PARAM();
+
+        byte[] ipBytes = setIp.getBytes(StandardCharsets.US_ASCII);
+        System.arraycopy(ipBytes, 0, netParam.szIPv4Address, 0,
+                Math.min(ipBytes.length, netParam.szIPv4Address.length));
+
+        byte[] maskBytes = netmask.getBytes(StandardCharsets.US_ASCII);
+        System.arraycopy(maskBytes, 0, netParam.szIPv4SubNetMask, 0,
+                Math.min(maskBytes.length, netParam.szIPv4SubNetMask.length));
+
+        byte[] gwBytes = gateway.getBytes(StandardCharsets.US_ASCII);
+        System.arraycopy(gwBytes, 0, netParam.szIPv4Gateway, 0,
+                Math.min(gwBytes.length, netParam.szIPv4Gateway.length));
+
+        netParam.wPort = request.getPort().shortValue();
+        netParam.wHttpPort = 80;
+        netParam.byDhcpEnable = 0;
+        netParam.byIPv6MaskLen = 64;
+
+        Sadp.SADP_DEV_RET_NET_PARAM retNetParam = new Sadp.SADP_DEV_RET_NET_PARAM();
+
+        long startTime = System.currentTimeMillis();
+        boolean flag = InitSadp.sadp.SADP_ModifyDeviceNetParam_V40(macAddr, password, netParam, retNetParam, retNetParam.size());
+        long endTime = System.currentTimeMillis();
+        log.info("修改设备IP耗时: {}s", (endTime - startTime) / 1000L);
+
+        if (!flag) {
+            int error = InitSadp.sadp.SADP_GetLastError();
+            log.error("修改设备IP失败 : errorCode {}", error);
+            throw new BusinessException("修改设备IP失败,错误码: " + error);
+        }
+
+        log.info("修改设备IP成功");
+    }
+
+    @Override
+    public List<DeviceProtocolOptionVO> getProtocolCodes() {
+        List<DeviceProtocolOptionVO> list = new ArrayList<>();
+        for (ProtocolEnum p : ProtocolEnum.values()) {
+            DeviceProtocolOptionVO vo = new DeviceProtocolOptionVO();
+            vo.setCode(p.getCode());
+            vo.setName(p.getDesc());
+            list.add(vo);
+        }
+        return list;
+    }
+
+    @Override
+    public List<DeviceVideoTypeOptionVO> getVideoTypeCodes() {
+        List<DeviceVideoTypeOptionVO> list = new ArrayList<>();
+        for (DeviceTypeEnum t : DeviceTypeEnum.values()) {
+            DeviceVideoTypeOptionVO vo = new DeviceVideoTypeOptionVO();
+            vo.setCode(t.getCode());
+            vo.setName(t.getDesc());
+            list.add(vo);
+        }
+        return list;
+    }
+
     private String deviceTypeName(Integer code) {
         SystemTypeCodeEnum e = SystemTypeCodeEnum.getByCode(code);
         return e != null ? e.getMessage() : null;

+ 24 - 0
service-sas/service-sas-biz/src/main/java/com/usky/sas/service/impl/SasEventTypeGroupServiceImpl.java

@@ -7,10 +7,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.usky.common.core.bean.CommonPage;
 import com.usky.common.mybatis.core.AbstractCrudService;
 import com.usky.sas.domain.SasEventTypeGroup;
+import com.usky.sas.domain.SasSystemActivation;
 import com.usky.sas.enums.SystemTypeCodeEnum;
 import com.usky.sas.mapper.SasEventTypeGroupMapper;
 import com.usky.sas.service.SasEventCodeService;
 import com.usky.sas.service.SasEventTypeGroupService;
+import com.usky.sas.service.SasSystemActivationService;
 import com.usky.sas.service.vo.EventGroupInfo;
 import com.usky.sas.service.vo.EventGroupPageRequest;
 import com.usky.sas.service.vo.EventGroupSaveRequest;
@@ -30,6 +32,9 @@ public class SasEventTypeGroupServiceImpl extends AbstractCrudService<SasEventTy
     @Autowired
     private SasEventCodeService sasEventCodeService;
 
+    @Autowired
+    private SasSystemActivationService systemActivationService;
+
     @Override
     public CommonPage<EventGroupInfo> page(EventGroupPageRequest request) {
         IPage<SasEventTypeGroup> page = new Page<>(request.getCurrent(), request.getSize());
@@ -136,5 +141,24 @@ public class SasEventTypeGroupServiceImpl extends AbstractCrudService<SasEventTy
         }
         this.removeById(id);
     }
+
+    @Override
+    public List<SystemTypeCodeEnum> getSystemTypeCodes() {
+        SasSystemActivation activation = systemActivationService.currentActivation();
+        if (activation == null || activation.getAuthorizationModule() == null
+                || activation.getAuthorizationModule().trim().isEmpty()) {
+            return java.util.Collections.emptyList();
+        }
+        String authorizationModule = activation.getAuthorizationModule();
+        List<Integer> codes = Arrays.stream(authorizationModule.split(","))
+                .map(String::trim)
+                .filter(s -> !s.isEmpty())
+                .map(Integer::valueOf)
+                .collect(Collectors.toList());
+        return codes.stream()
+                .map(SystemTypeCodeEnum::getByCode)
+                .filter(e -> e != null)
+                .collect(Collectors.toList());
+    }
 }
 

+ 17 - 0
service-sas/service-sas-biz/src/main/java/com/usky/sas/service/vo/DeviceProtocolOptionVO.java

@@ -0,0 +1,17 @@
+package com.usky.sas.service.vo;
+
+import lombok.Data;
+
+/**
+ * 视频协议下拉选项
+ */
+@Data
+public class DeviceProtocolOptionVO {
+
+    /** 协议编码:1-ONVIF,2-海康,3-大华 等 */
+    private Integer code;
+
+    /** 协议名称/描述 */
+    private String name;
+}
+

+ 17 - 0
service-sas/service-sas-biz/src/main/java/com/usky/sas/service/vo/DeviceVideoTypeOptionVO.java

@@ -0,0 +1,17 @@
+package com.usky.sas.service.vo;
+
+import lombok.Data;
+
+/**
+ * 视频设备类型下拉选项
+ */
+@Data
+public class DeviceVideoTypeOptionVO {
+
+    /** 类型编码:1-IPC,2-NVR 等 */
+    private Integer code;
+
+    /** 类型名称/描述 */
+    private String name;
+}
+

+ 29 - 0
service-sas/service-sas-biz/src/main/java/com/usky/sas/service/vo/UpdateDeviceIpAddrRequest.java

@@ -0,0 +1,29 @@
+package com.usky.sas.service.vo;
+
+import lombok.Data;
+
+/**
+ * 海康设备修改 IP 请求参数
+ */
+@Data
+public class UpdateDeviceIpAddrRequest {
+
+    /** 设备新的 IPv4 地址,例如 192.168.1.100 */
+    private String ipAddr;
+
+    /** 设备端口,例如 8000 */
+    private Integer port;
+
+    /** 子网掩码,例如 255.255.255.0 */
+    private String netMask;
+
+    /** 网关地址,例如 192.168.1.1 */
+    private String gateway;
+
+    /** 设备 MAC 地址,例如 00-11-22-33-44-55 */
+    private String macAddr;
+
+    /** 设备管理员密码(用于校验权限) */
+    private String password;
+}
+