From b54cc99fd6fa8923db4cc1600681dba04b14117b Mon Sep 17 00:00:00 2001 From: 4670101279 Date: Tue, 28 Jun 2022 13:25:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=91=84=E5=83=8F=E6=9C=BA=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CameraNetFtpController.java | 130 ++++++++++++++++++ .../code/camera/domain/CameraNetFtp.java | 55 ++++++++ .../camera/mapper/CameraNetFtpMapper.java | 18 +++ .../code/camera/scheduled/RegisterServer.java | 14 +- .../camera/service/ICameraNetFtpService.java | 25 ++++ .../service/impl/CameraNetFtpServiceImpl.java | 70 ++++++++++ .../src/main/java/utils/run_device_cfg.java | 34 +++++ .../java/com/ruoyi/common/utils/IPUtils.java | 91 ++++++++++++ 8 files changed, 432 insertions(+), 5 deletions(-) create mode 100644 ruoyi-code/src/main/java/com/ruoyi/code/camera/controller/CameraNetFtpController.java create mode 100644 ruoyi-code/src/main/java/com/ruoyi/code/camera/domain/CameraNetFtp.java create mode 100644 ruoyi-code/src/main/java/com/ruoyi/code/camera/mapper/CameraNetFtpMapper.java create mode 100644 ruoyi-code/src/main/java/com/ruoyi/code/camera/service/ICameraNetFtpService.java create mode 100644 ruoyi-code/src/main/java/com/ruoyi/code/camera/service/impl/CameraNetFtpServiceImpl.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/IPUtils.java diff --git a/ruoyi-code/src/main/java/com/ruoyi/code/camera/controller/CameraNetFtpController.java b/ruoyi-code/src/main/java/com/ruoyi/code/camera/controller/CameraNetFtpController.java new file mode 100644 index 0000000..ba0e2ab --- /dev/null +++ b/ruoyi-code/src/main/java/com/ruoyi/code/camera/controller/CameraNetFtpController.java @@ -0,0 +1,130 @@ +package com.ruoyi.code.camera.controller; + +import java.util.List; +import java.util.Arrays; +import java.util.Map; +import javax.servlet.http.HttpServletResponse; +import javax.annotation.Resource; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.ruoyi.code.camera.domain.Camera; +import com.ruoyi.code.camera.service.ICameraService; +import com.ruoyi.common.core.page.R; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.code.camera.domain.CameraNetFtp; +import com.ruoyi.code.camera.service.ICameraNetFtpService; +import com.ruoyi.common.utils.poi.ExcelUtil; +/** + * 摄像机FTP配置Controller + * + * @author ruoyi + * @date 2022-06-28 + */ +@RestController +@RequestMapping("/camera/ftp") +public class CameraNetFtpController extends BaseController +{ + @Resource + private ICameraNetFtpService cameraNetFtpService; + @Resource + private ICameraService cameraService; + + /** + * 查询列表 + */ + @PreAuthorize("@ss.hasPermi('camera:ftp:list')") + @RequestMapping("/list") + public R list(@RequestParam Map params){ + return cameraNetFtpService.queryPage(params); + } + + @RequestMapping("/getNetCfg") + public R getNetCfg(Long cameraId){ + Camera camera = cameraService.getById(cameraId); + CameraNetFtp cfg = cameraNetFtpService.getNetCfg(camera); + return R.ok().put("data",cfg); + } + + @RequestMapping("/editNetCfg") + public R editNetCfg(@RequestBody CameraNetFtp cameraNetFtp){ + Camera camera = cameraService.getOne(new QueryWrapper().eq("devsn",cameraNetFtp.getDevsn()).eq("status","1")); + if(camera == null){ + return R.error("设备未在线"); + } + cameraNetFtp.setLoginId(camera.getLoginId()); + return cameraNetFtpService.editNetCfg(cameraNetFtp); + } + + + /** + * 获取详细信息 + */ + @RequestMapping("/info/{id}") + @PreAuthorize("@ss.hasPermi('camera:ftp:query')") + public R info(@PathVariable("id") Long id){ + CameraNetFtp cameraNetFtp = cameraNetFtpService.getById(id); + + return R.ok().put("data", cameraNetFtp); + } + + + /** + * 导出列表 + */ + @PreAuthorize("@ss.hasPermi('camera:ftp:export')") + @Log(title = "列表", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, CameraNetFtp cameraNetFtp) + { + List list = cameraNetFtpService.list(); + ExcelUtil util = new ExcelUtil(CameraNetFtp.class); + util.exportExcel(response, list, "列表数据"); + } + + /** + * 新增 + */ + @RequestMapping("/add") + @Log(title = "CameraNetFtp", businessType = BusinessType.INSERT) + @PreAuthorize("@ss.hasPermi('camera:ftp:add')") + public R add(@RequestBody CameraNetFtp cameraNetFtp){ + cameraNetFtpService.save(cameraNetFtp); + return R.ok(); + } + + /** + * 修改 + */ + @RequestMapping("/edit") + @PreAuthorize("@ss.hasPermi('camera:ftp:edit')") + @Log(title = "CameraNetFtp", businessType = BusinessType.UPDATE) + public R edit(@RequestBody CameraNetFtp cameraNetFtp){ + cameraNetFtpService.updateById(cameraNetFtp); + return R.ok(); + } + + /** + * 删除 + */ + @RequestMapping("/delete/{ids}") + @PreAuthorize("@ss.hasPermi('camera:ftp:remove')") + @Log(title = "CameraNetFtp", businessType = BusinessType.DELETE) + public R delete(@PathVariable Long[] ids){ + cameraNetFtpService.removeByIds(Arrays.asList(ids)); + return R.ok(); + } + +} diff --git a/ruoyi-code/src/main/java/com/ruoyi/code/camera/domain/CameraNetFtp.java b/ruoyi-code/src/main/java/com/ruoyi/code/camera/domain/CameraNetFtp.java new file mode 100644 index 0000000..0f60fd7 --- /dev/null +++ b/ruoyi-code/src/main/java/com/ruoyi/code/camera/domain/CameraNetFtp.java @@ -0,0 +1,55 @@ +package com.ruoyi.code.camera.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.TableId; +import com.ruoyi.common.annotation.Excel; +import java.io.Serializable; +import lombok.Data; + + +/** + * 摄像机FTP配置对象 camera_net_ftp + * + * @author ruoyi + * @date 2022-06-28 + */ +@Data +@TableName("camera_net_ftp") +public class CameraNetFtp implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** $column.columnComment */ + @TableId(type = IdType.INPUT) + private Long id; + + /** 序列号 */ + private String devsn; + + /** 服务地址 */ + private String address; + + /** 是否启用 1是0否 */ + private Long isEnable; + + /** 用户名 */ + private String username; + + /** 密码 */ + private String password; + + /** 端口 */ + private Long port; + + /** 存储路径 */ + private String pathRule; + + @TableField(exist = false) + private String loginId; + + +} diff --git a/ruoyi-code/src/main/java/com/ruoyi/code/camera/mapper/CameraNetFtpMapper.java b/ruoyi-code/src/main/java/com/ruoyi/code/camera/mapper/CameraNetFtpMapper.java new file mode 100644 index 0000000..1ae9fd6 --- /dev/null +++ b/ruoyi-code/src/main/java/com/ruoyi/code/camera/mapper/CameraNetFtpMapper.java @@ -0,0 +1,18 @@ +package com.ruoyi.code.camera.mapper; + +import java.util.List; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import com.ruoyi.code.camera.domain.CameraNetFtp; + +/** + * Mapper接口 + * + * @author ruoyi + * @date 2022-06-28 + */ +@Mapper +public interface CameraNetFtpMapper extends BaseMapper +{ + +} diff --git a/ruoyi-code/src/main/java/com/ruoyi/code/camera/scheduled/RegisterServer.java b/ruoyi-code/src/main/java/com/ruoyi/code/camera/scheduled/RegisterServer.java index a991927..013b006 100644 --- a/ruoyi-code/src/main/java/com/ruoyi/code/camera/scheduled/RegisterServer.java +++ b/ruoyi-code/src/main/java/com/ruoyi/code/camera/scheduled/RegisterServer.java @@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject; import com.ruoyi.code.camera.domain.Camera; import com.ruoyi.code.camera.service.ICameraService; import com.ruoyi.common.core.page.R; +import com.ruoyi.common.utils.IPUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; @@ -34,11 +35,14 @@ public class RegisterServer { } private void start(){ - R result = cameraService.register(); - if("0".equals(result.get("code").toString())){ - System.out.println("主动注册服务已启动"); - }else{ - System.out.println("主动注册服务启动失败"); + String ip = IPUtils.getLocalIpAddress(); + if("172.16.46.58".equals(ip)){ + R result = cameraService.register(); + if("0".equals(result.get("code").toString())){ + System.out.println("主动注册服务已启动"); + }else{ + System.out.println("主动注册服务启动失败"); + } } } diff --git a/ruoyi-code/src/main/java/com/ruoyi/code/camera/service/ICameraNetFtpService.java b/ruoyi-code/src/main/java/com/ruoyi/code/camera/service/ICameraNetFtpService.java new file mode 100644 index 0000000..b5175d0 --- /dev/null +++ b/ruoyi-code/src/main/java/com/ruoyi/code/camera/service/ICameraNetFtpService.java @@ -0,0 +1,25 @@ +package com.ruoyi.code.camera.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.code.camera.domain.Camera; +import com.ruoyi.common.core.page.R; +import java.util.Map; +import com.ruoyi.code.camera.domain.CameraNetFtp; + +/** + * Service接口 + * + * @author ruoyi + * @date 2022-06-28 + */ +public interface ICameraNetFtpService extends IService +{ + /** + * 查询 + */ + R queryPage(Map params); + + CameraNetFtp getNetCfg(Camera camera); + + R editNetCfg(CameraNetFtp netFtp); +} diff --git a/ruoyi-code/src/main/java/com/ruoyi/code/camera/service/impl/CameraNetFtpServiceImpl.java b/ruoyi-code/src/main/java/com/ruoyi/code/camera/service/impl/CameraNetFtpServiceImpl.java new file mode 100644 index 0000000..4c372cd --- /dev/null +++ b/ruoyi-code/src/main/java/com/ruoyi/code/camera/service/impl/CameraNetFtpServiceImpl.java @@ -0,0 +1,70 @@ +package com.ruoyi.code.camera.service.impl; + +import java.util.Map; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.code.camera.domain.Camera; +import com.ruoyi.common.core.page.R; +import com.ruoyi.common.exception.RYException; +import com.ruoyi.common.utils.Query; +import com.ruoyi.common.utils.StringUtils; +import com.sun.jna.NativeLong; +import org.springframework.stereotype.Service; +import com.ruoyi.code.camera.mapper.CameraNetFtpMapper; +import com.ruoyi.code.camera.domain.CameraNetFtp; +import com.ruoyi.code.camera.service.ICameraNetFtpService; +import utils.run_device_cfg; + +/** + * Service业务层处理 + * + * @author ruoyi + * @date 2022-06-28 + */ +@Service("cameraNetFtpService") +public class CameraNetFtpServiceImpl extends ServiceImpl implements ICameraNetFtpService +{ + @Override + public R queryPage(Map params) { + IPage page = this.page( + new Query().getPage(params), + new QueryWrapper() + ); + + return R.ok().put("count", page.getTotal()).put("data", page.getRecords()); + } + + @Override + public CameraNetFtp getNetCfg(Camera camera){ + run_device_cfg cfg = new run_device_cfg(); + if(camera == null || StringUtils.isBlank(camera.getLoginId())){ + throw new RYException("设备未在线"); + } + CameraNetFtp netFtp = cfg.getCfg(new NativeLong(Long.parseLong(camera.getLoginId()))); + netFtp.setDevsn(camera.getDevsn()); + + CameraNetFtp localCfg = getOne(new QueryWrapper().eq("devsn",camera.getDevsn())); + if(localCfg != null){ + netFtp.setId(localCfg.getId()); + updateById(netFtp); + }else{ + save(netFtp); + } + return netFtp; + } + @Override + public R editNetCfg(CameraNetFtp netFtp){ + run_device_cfg cfg = new run_device_cfg(); + int bOfflineEnable = netFtp.getIsEnable().intValue(); + + boolean result = cfg.setDeviceFtpCfg(new NativeLong(Long.parseLong(netFtp.getLoginId())), netFtp.getIsEnable().intValue(), bOfflineEnable, netFtp.getAddress(), + netFtp.getPort().intValue(), netFtp.getUsername(), netFtp.getPassword()); + + if(!result){ + return R.error(); + } + return R.ok(); + } + +} diff --git a/ruoyi-code/src/main/java/utils/run_device_cfg.java b/ruoyi-code/src/main/java/utils/run_device_cfg.java index 411120b..2093e28 100644 --- a/ruoyi-code/src/main/java/utils/run_device_cfg.java +++ b/ruoyi-code/src/main/java/utils/run_device_cfg.java @@ -27,6 +27,8 @@ import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import com.alibaba.fastjson.JSON; +import com.ruoyi.code.camera.domain.Camera; +import com.ruoyi.code.camera.domain.CameraNetFtp; import com.sun.jna.NativeLong; import com.sun.jna.Pointer; import com.sun.jna.Structure; @@ -3635,4 +3637,36 @@ public class run_device_cfg implements ActionListener, ListSelectionListener { DataUtils.sdk_data_structureToPtr(stuCfgNetStorageTrans, ptrInBuffer, 0); return ptrInBuffer; } + + public CameraNetFtp getCfg(NativeLong loginID){ + STU_CFG_NET_STORAGE_TRANS stuCfgNetStorageTrans = getStuCfgNetStorageTrans(loginID,EM_DEVICE_CFG_TYPE.DEVICE_CFG_NET_STORAGE_TRANS); + + CameraNetFtp ftpCfg = new CameraNetFtp(); + for(int i=0; i 15) { +// if(ip.indexOf(",") > 0) { +// ip = ip.substring(0, ip.indexOf(",")); +// } +// } + + return ip; + } + + + public static String getLocalIpAddress() { + try { + Enumeration allNetInterfaces = NetworkInterface.getNetworkInterfaces(); + InetAddress ip; + while (allNetInterfaces.hasMoreElements()) { + NetworkInterface netInterface = allNetInterfaces.nextElement(); + if (!netInterface.isLoopback() && !netInterface.isVirtual() && netInterface.isUp()) { + Enumeration addresses = netInterface.getInetAddresses(); + while (addresses.hasMoreElements()) { + ip = addresses.nextElement(); + if (ip instanceof Inet4Address) { + return ip.getHostAddress(); + } + } + } + } + } catch (Exception e) { + log.error("本地IP地址获取失败", e); + } + return ""; + } +}