浏览代码

导入摄像头

wwh 7 月之前
父节点
当前提交
799361e20d

+ 56 - 0
musk/pom.xml

@@ -113,6 +113,62 @@
             <artifactId>easy-trans-mybatis-plus-extend</artifactId>
             <version>2.1.7</version>
         </dependency>
+
+        <!--sftp文件上传-->
+        <dependency>
+            <groupId>com.jcraft</groupId>
+            <artifactId>jsch</artifactId>
+            <version>0.1.54</version>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.jxls</groupId>
+            <artifactId>jxls</artifactId>
+            <version>2.6.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.jxls</groupId>
+            <artifactId>jxls-poi</artifactId>
+            <version>1.1.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+            <version>3.15</version>
+        </dependency>
+
+        <!-- poi 读取word doc-->
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-scratchpad</artifactId>
+            <version>3.15</version>
+        </dependency>
+
+        <!-- poi 读取word docx-->
+        <!--        <dependency>-->
+        <!--            <groupId>fr.opensagres.xdocreport</groupId>-->
+        <!--            <artifactId>xdocreport</artifactId>-->
+        <!--            <version>1.0.6</version>-->
+        <!--        </dependency>-->
+
+        <!-- poi xml-->
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>3.15</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml-schemas</artifactId>
+            <version>3.15</version>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 192 - 0
musk/src/main/java/com/huimv/farm/musk/common/utils/ExcelImportSheet.java

@@ -0,0 +1,192 @@
+package com.huimv.farm.musk.common.utils;
+
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+
+import java.io.InputStream;
+import java.lang.reflect.Field;
+import java.math.BigDecimal;
+import java.util.*;
+
+/**
+ * @author 三文鱼先生
+ * @title
+ * @description 导入工具类
+ * @date 2022/8/17
+ **/
+public class ExcelImportSheet {
+
+    /**
+     * @description 根据文件后缀获取相应的Workbook对象
+     * @author 三文鱼先生
+     * @date 9:46 2022/8/17
+     * @param in 用于构建Workbook对象的输入流
+     * @param fileName 文件名称
+     * @return org.apache.poi.ss.usermodel.Workbook
+     **/
+    public static Workbook getTypeFromExtends(InputStream in , String fileName) throws Exception {
+        String[] str = fileName.split("\\.");
+        //获取文件后缀
+        String extend = str[1];
+        if(extend.equals("xls")) {
+            //2003版的excel
+            return new HSSFWorkbook(in);
+        } else if(extend.equals("xlsx")){
+            //2007版的excel
+            return new XSSFWorkbook(in);
+        }else {
+            throw new Exception("请检查文件类型是否正确。");
+        }
+    }
+
+    /**
+     * @description 将单个sheet里的数据获取到List<T>的泛型列表里面
+     * @author 三文鱼先生
+     * @date 9:47 2022/8/17
+     * @param sheet 单个的工作表
+     * @param cs 生成的对象类名
+     * @param map 表头与对象属性映射
+     * @return java.util.List<T>
+     **/
+    public static <T> List<T> getListFromExcel(Sheet sheet , Class cs , Map<String , String> map) throws Exception {
+        T e;
+        List<T> list = new ArrayList<>();
+        //根据第一行获取表头对应的属性顺序
+        List<String> paramsList = getMethodFromFirstRow(sheet , map);
+        //根据类和属性顺序的List 获取属性对应的类型属性
+        List<Class> typeClass = getParamsType(cs , paramsList);
+        //遍历所有行 从第二行开始 首行是表头字段
+        for (int i = sheet.getFirstRowNum() + 1; i <= sheet.getLastRowNum(); i++) {
+            //单元行
+            Row row = sheet.getRow(i);
+            //一行对应一个T,将对象强转为泛型
+            e = (T) cs.newInstance();
+            //遍历单元行的每一列 设置值给泛型e
+
+            for (int j = 0; j < row.getLastCellNum(); j++) {
+                //获取一个单元格
+                Cell cell = row.getCell(j);
+
+                //调用泛型对象的set方法设置单元格里的值 这也就是为什么我们要获取属性顺序以及其对应的类型
+                cs.getMethod(getSetterMethodName(paramsList.get(j)) , typeClass.get(j))
+                        .invoke(e , getValueFromType(cell , typeClass.get(j)));
+            }
+            list.add(e);
+        }
+        return list;
+    }
+
+    /**
+     * @description 获取属性的setter方法
+     * @author 三文鱼先生
+     * @date 9:54 2022/8/17
+     * @param param 属性
+     * @return java.lang.String 返回一个setXxx
+     **/
+    public static String getSetterMethodName(String param) {
+        char[] chars = param.toCharArray();
+        //首字母大写
+        if(Character.isLowerCase(chars[0])) {
+            chars[0] -= 32;
+        }
+        //拼接set方法
+        return "set" + new String(chars);
+    }
+
+    /**
+     * @description 从第一行(表头)获取字段对应的属性的顺序
+     * @author 三文鱼先生
+     * @date 9:51 2022/8/17
+     * @param sheet 工作表
+     * @param map 表头字段与对象属性的映射
+     * @return java.util.List<java.lang.String> 属性的集合
+     **/
+    public static List<String> getMethodFromFirstRow(Sheet sheet , Map<String,String> map) throws Exception {
+        //获取表头
+        Row row = sheet.getRow(sheet.getFirstRowNum());
+        //获取到的属性列表
+        List<String> paramsList = new ArrayList<>();
+        //遍历表头
+        for(int i = row.getFirstCellNum(); i  < row.getLastCellNum(); i++) {
+            Cell cell = row.getCell(i);
+            //获取行字符串的值
+            String str = cell.getStringCellValue();
+            //键值对映射获取对应方法名称
+            if(map.containsKey(str)) {
+                //获取对应属性的set方法
+                paramsList.add(map.get(str));
+            } else {
+                throw new Exception("请检查首行数据是否正确。");
+            }
+        }
+        return  paramsList;
+    }
+
+    /**
+     * @description  根据对象和属性顺序列表,返回对应顺序的参数类型List
+     * @author 三文鱼先生
+     * @date 9:55 2022/8/17
+     * @param cs 对象类
+     * @param paramsList 表头对应的属性顺序List
+     * @return java.util.List<java.lang.Class>
+     **/
+    public static List<Class> getParamsType(Class cs , List<String> paramsList) {
+        List<Class> typeClass = new ArrayList<>();
+        //对象的所有属性
+        Field[] fields = cs.getDeclaredFields();
+        //临时的属性 - 类型映射
+        Map<String , Class> map = new HashMap();
+        //获取属性名称及类型
+        for (Field field : fields) {
+            map.put(field.getName(), field.getType());
+        }
+        //遍历属性List获取对应的类型List
+        for (String s : paramsList) {
+            typeClass.add(map.get(s));
+        }
+        return typeClass;
+    }
+
+
+    /**
+     * @description 根据对应的Class获取将对应的值类型
+     * @author 三文鱼先生
+     * @date 9:59 2022/8/17
+     * @param cell
+     * @param cs
+     * @return java.lang.Object
+     **/
+    public static Object getValueFromType(Cell cell , Class cs) {
+        if(boolean.class.equals(cs)){
+            //boolean类型
+            cell.setCellType(CellType.BOOLEAN);
+            return cell.getBooleanCellValue();
+        }else if (Date.class.equals(cs)) {
+            //日期类型 此种数据并未测试
+            return cell.getDateCellValue();
+        } else if (int.class.equals(cs) || Integer.class.equals(cs)){
+            //int类型
+            cell.setCellType(CellType.NUMERIC);
+            return (int)cell.getNumericCellValue();
+        } else if(double.class.equals(cs) || Double.class.equals(cs)) {
+            //double类型
+            cell.setCellType(CellType.NUMERIC);
+            return cell.getNumericCellValue();
+        }else if(BigDecimal.class.equals(cs) || BigDecimal.class.equals(cs)) {
+            //bigdecimal类型
+            cell.setCellType(CellType.NUMERIC);
+            return cell.getNumericCellValue();
+        }  //字符串类型
+        if (cs.equals(String.class)) {
+            //设置对应的类型
+            cell.setCellType(CellType.STRING);
+            return cell.getStringCellValue();
+        }
+        //这里还可以填充其他类型
+        else {
+            //未知类型 默认为错误类型
+            return cell.getErrorCellValue();
+        }
+    }
+}

+ 21 - 7
musk/src/main/java/com/huimv/farm/musk/controller/SysCameraController.java

@@ -12,6 +12,7 @@ import com.huimv.farm.musk.service.ISysCameraService;
 import org.aspectj.weaver.ast.Var;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.List;
@@ -19,7 +20,7 @@ import java.util.Map;
 
 /**
  * <p>
- *  前端控制器
+ * 前端控制器
  * </p>
  *
  * @author author
@@ -33,14 +34,15 @@ public class SysCameraController {
     private ISysCameraService cameraService;
 
     @PostMapping("/list")
-    public Result list( @RequestBody CameraListVo cameraListVo) {
+    public Result list(@RequestBody CameraListVo cameraListVo) {
         return cameraService.listPage(cameraListVo);
     }
 
     @PostMapping("/listApp")
     public Result listApp(HttpServletRequest request, @RequestBody CameraListVo cameraListVo) {
         Integer userId = TokenSign.getMemberIdByJwtToken(request);
-        return cameraService.listApp(cameraListVo,userId);
+        System.out.println("用户ID:" + userId);
+        return cameraService.listApp(cameraListVo, userId);
     }
 
     @PostMapping("/add")
@@ -69,7 +71,7 @@ public class SysCameraController {
     public Result updateStatus(@RequestBody Map<String, String> paramsMap) {
         String id = paramsMap.get("id");
         SysCamera sysCamera = cameraService.getById(id);
-        sysCamera.setRunStatus(Math.abs(1-sysCamera.getRunStatus()));
+        sysCamera.setRunStatus(Math.abs(1 - sysCamera.getRunStatus()));
         cameraService.updateById(sysCamera);
         return new Result(10000, "修改成功", true);
     }
@@ -81,16 +83,28 @@ public class SysCameraController {
     }
 
     @PostMapping("/getCameraDetails")
-    private Result getCameraDetails(HttpServletRequest request,@RequestBody CameraListsVo cameraListsVo) throws InterruptedException {
+    private Result getCameraDetails(HttpServletRequest request, @RequestBody CameraListsVo cameraListsVo) throws InterruptedException {
         Integer userId = TokenSign.getMemberIdByJwtToken(request);
-        List list = cameraService.getCameraDetails(cameraListsVo,userId);
+        List list = cameraService.getCameraDetails(cameraListsVo, userId);
         return new Result(ResultCode.SUCCESS, list);
     }
 
-//    @GetMapping("/initCamera")
+    //    @GetMapping("/initCamera")
 //    private Result initCamera(@RequestParam(name = "farmId") Integer farmId, HttpServletRequest request) {
 //        Integer userId = TokenSign.getMemberIdByJwtToken(request);
 //
 //        return cameraService.initCamera(farmId, userId);
 //    }
+    @PostMapping("/listAll")
+    public Result listAll(@RequestBody Map<String, String> paramsMap) {
+        return cameraService.listAll(paramsMap);
+
+    }
+
+    @PostMapping("/importData")
+    public Result importData(@RequestParam("file") MultipartFile file) {
+
+        return cameraService.importData(file);
+
+    }
 }

+ 1 - 1
musk/src/main/java/com/huimv/farm/musk/entity/SysCamera.java

@@ -101,7 +101,7 @@ public class SysCamera implements Serializable {
     /**
      * 1在线  0离线
      */
-    private Boolean isOnline;
+    private Integer isOnline;
 
 
 }

+ 11 - 0
musk/src/main/java/com/huimv/farm/musk/entity/vo/ImportDataVo.java

@@ -0,0 +1,11 @@
+package com.huimv.farm.musk.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class ImportDataVo {
+
+    private String cameraName;
+
+    private String cameraIp;
+}

+ 8 - 0
musk/src/main/java/com/huimv/farm/musk/service/ISysCameraService.java

@@ -5,8 +5,10 @@ import com.huimv.farm.musk.common.utils.Result;
 import com.huimv.farm.musk.entity.SysCamera;
 import com.huimv.farm.musk.entity.vo.CameraListVo;
 import com.huimv.farm.musk.entity.vo.CameraListsVo;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -29,5 +31,11 @@ public interface ISysCameraService extends IService<SysCamera> {
 
     Result listApp(CameraListVo cameraListVo, Integer userId);
 
+    //大屏摄像头统计
+    Result listAll(Map<String, String> paramsMap);
 //    Result initCamera(Integer farmId, Integer userId);
+
+    //摄像头导入
+    Result importData(MultipartFile file);
+
 }

+ 90 - 9
musk/src/main/java/com/huimv/farm/musk/service/impl/SysCameraServiceImpl.java

@@ -1,11 +1,13 @@
 package com.huimv.farm.musk.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huimv.farm.musk.common.utils.ExcelImportSheet;
 import com.huimv.farm.musk.common.utils.Result;
 import com.huimv.farm.musk.common.utils.ResultCode;
 import com.huimv.farm.musk.entity.SysAccountMultilevel;
@@ -18,9 +20,14 @@ import com.huimv.farm.musk.mapper.SysCameraAreaMapper;
 import com.huimv.farm.musk.mapper.SysCameraBrandMapper;
 import com.huimv.farm.musk.mapper.SysCameraMapper;
 import com.huimv.farm.musk.service.ISysCameraService;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.io.InputStream;
 import java.util.*;
 
 /**
@@ -220,18 +227,24 @@ public class SysCameraServiceImpl extends ServiceImpl<SysCameraMapper, SysCamera
     @Override
     public Result listApp(CameraListVo cameraListVo, Integer userId) {
         List endList = new ArrayList();
-        List<SysCameraArea> cameraAreaList = cameraAreaMapper.selectList(new QueryWrapper<SysCameraArea>().eq("farm_id", cameraListVo.getFarmId()).eq("run_status",1).orderByAsc("sort"));
+        List<SysCameraArea> cameraAreaList = cameraAreaMapper.selectList(new QueryWrapper<SysCameraArea>().eq("farm_id", cameraListVo.getFarmId())
+                .eq("run_status",1).orderByAsc("sort"));
         SysAccountMultilevel sysAccountMultilevel = sysAccountMultilevelMapper.selectById(userId);
+        String cameraIds = sysAccountMultilevel.getCameraIds();
+        String[] split = cameraIds.split(",");
         if (userId != 1){
             for (SysCameraArea cameraArea : cameraAreaList) {
-                List<SysCamera> sysCameras = cameraMapper.selectList(new QueryWrapper<SysCamera>().eq("area_id", cameraArea.getId()).eq("run_status", 1).in("id", Arrays.asList(sysAccountMultilevel.getCameraIds())).orderByAsc("sort"));
-                if(ObjectUtils.isNotEmpty(sysCameras)){
-                    Map map = new HashMap();
-                    map.put("cameraName", cameraArea.getAreaName());
-                    map.put("id", cameraArea.getId());
-                    map.put("cameraList",sysCameras );
-                    endList.add(map);
+                List<SysCamera> sysCameras = cameraMapper.selectList(new QueryWrapper<SysCamera>().eq("area_id", cameraArea.getId())
+                        .eq("run_status", 1).in("id",split).orderByAsc("sort"));
+                Map map = new HashMap();
+                map.put("cameraName", cameraArea.getAreaName());
+                map.put("id", cameraArea.getId());
+                if (ObjectUtils.isNotEmpty(sysCameras)) {
+                    map.put("cameraList", sysCameras);
+                } else {
+                    map.put("cameraList", "");
                 }
+                endList.add(map);
             }
             return new Result(ResultCode.SUCCESS, endList);
         }else {
@@ -239,7 +252,8 @@ public class SysCameraServiceImpl extends ServiceImpl<SysCameraMapper, SysCamera
                 Map map = new HashMap();
                 map.put("cameraName", cameraArea.getAreaName());
                 map.put("id", cameraArea.getId());
-                map.put("cameraList", cameraMapper.selectList(new QueryWrapper<SysCamera>().eq("area_id", cameraArea.getId()).eq("run_status",1).orderByAsc("sort")));
+                map.put("cameraList", cameraMapper.selectList(new QueryWrapper<SysCamera>().eq("area_id", cameraArea.getId())
+                        .eq("run_status",1).orderByAsc("sort")));
                 endList.add(map);
             }
             return new Result(ResultCode.SUCCESS, endList);
@@ -247,6 +261,73 @@ public class SysCameraServiceImpl extends ServiceImpl<SysCameraMapper, SysCamera
 
     }
 
+    @Override
+    public Result listAll(Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+        List<SysCamera> cameras = cameraMapper.selectList(new QueryWrapper<SysCamera>().eq("farm_id", farmId));
+        JSONObject jsonObject = new JSONObject();
+        Integer count = 0;
+        Integer offCount = 0;
+        Integer onCount = 0;
+        count = cameras.size();
+        if (cameras.size() != 0) {
+            for (SysCamera camera : cameras) {
+                if (camera.getIsOnline()==1) {
+                    onCount = onCount + 1;
+                } else {
+                    offCount = offCount + 1;
+                }
+            }
+        }
+        jsonObject.put("count", count);
+        jsonObject.put("offCount", count);
+        jsonObject.put("onCount", count);
+        return new Result(ResultCode.SUCCESS,jsonObject);
+    }
+
+    @Transactional
+    @Override
+    public Result importData( MultipartFile file) {
+
+        Map<String, String> map = new HashMap<>();
+        //表头与键值对的映射关系
+        map.put("摄像头名称", "cameraName");
+        map.put("地址", "cameraIp");
+
+        try (
+                //这里面的对象会自动关闭
+                InputStream in = file.getInputStream();
+                Workbook workbook = ExcelImportSheet.getTypeFromExtends(in, file.getOriginalFilename())
+        ) {
+
+            //根据名称获取单张表对象 也可以使用getSheetAt(int index)获取单张表的对象 获取第一张表
+            Sheet sheet = workbook.getSheetAt(0);
+            List<ImportDataVo> list = ExcelImportSheet.getListFromExcel(sheet, ImportDataVo.class, map);
+
+            for (ImportDataVo importDataVo : list) {
+                SysCamera sysCamera = new SysCamera();
+                sysCamera.setCameraName(importDataVo.getCameraName());
+                sysCamera.setCameraIp(importDataVo.getCameraIp());
+                sysCamera.setAccount("admin");
+                sysCamera.setPassword("adminjhd123");
+                sysCamera.setAreaName("B区");
+                sysCamera.setAreaId(4);
+                sysCamera.setAttention(0);
+                sysCamera.setBrandName("大华");
+                sysCamera.setBrandId(1);
+                sysCamera.setRunStatus(1);
+                sysCamera.setSort(1);
+                sysCamera.setFarmId(330110007);
+                sysCamera.setIsOnline(1);
+                cameraMapper.insert(sysCamera);
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+            return new Result(10001, "数据格式异常!", false);
+        }
+        return new Result(ResultCode.SUCCESS);
+    }
+
 //    @Override
 //    public Result initCamera(Integer farmId, Integer userId) {
 //        BaseScreenCameraAccount cameraAccount = cameraAccountMapper.selectOne(new QueryWrapper<BaseScreenCameraAccount>().eq("farm_id", farmId).eq("account_id", userId));