Pārlūkot izejas kodu

Merge branch 'master' of http://124.70.58.209:3000/ytrd-project-management/GeoHazardMonitor

gao.qiang 2 gadi atpakaļ
vecāks
revīzija
96dc1a4b3b

+ 15 - 0
business-service/src/main/java/com/ozs/service/mapper/BaseUserMapper.java

@@ -5,6 +5,7 @@ import com.ozs.service.entity.BaseUser;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
 import java.util.Set;
 
 /**
@@ -14,4 +15,18 @@ import java.util.Set;
 public interface BaseUserMapper extends BaseMapper<BaseUser> {
     
     Set<String> getUserIdList(@Param("userId") String userId);
+
+    Set<String> getUserIdByDeptId(@Param("deptId") Long deptId);
+
+    List<Long> getDeptId(@Param("deptId") Long deptId);
+
+    Set<String> getUserIdByDeptIds(@Param("deptList") List<Long> deptList);
+
+    Set<String> getUserIdByDeptIdAndUserId(@Param("userId") String userId, @Param("deptId") Long deptId);
+
+    Set<String> getUserIdListBy5(@Param("userId") String userId);
+
+    Set<String> getUserIdByDeptIdsBy5(@Param("deptList") List<Long> deptList);
+
+    Set<String> getUserIdList6();
 }

+ 2 - 2
business-service/src/main/java/com/ozs/service/service/BaseUserService.java

@@ -10,6 +10,6 @@ import java.util.Set;
  * @author Administrator
  */
 public interface BaseUserService extends IService<BaseUser> {
-    
-    Set<String> getUserIdList(String createBy);
+
+    Set<String> getUserIdList(String createBy, Long deptId);
 }

+ 34 - 2
business-service/src/main/java/com/ozs/service/service/impl/BaseUserServiceImpl.java

@@ -7,6 +7,8 @@ import com.ozs.service.service.BaseUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 
 /**
@@ -18,7 +20,37 @@ public class BaseUserServiceImpl extends ServiceImpl<BaseUserMapper, BaseUser> i
     private BaseUserMapper baseUserMapper;
 
     @Override
-    public Set<String> getUserIdList(String createBy) {
-       return baseUserMapper.getUserIdList(createBy);
+    public Set<String> getUserIdList(String createBy, Long deptId) {
+        Set<String> set = new HashSet<>();
+        // 根据create_by、data_permission=1(本人)
+        Set<String> set1 = baseUserMapper.getUserIdList(createBy);
+        set.addAll(set1);
+        // 根据 dept_id(本部门)data_permission=2
+        Set<String> set2 = baseUserMapper.getUserIdByDeptId(deptId);
+        set.addAll(set2);
+        // 根据 dept_id(本部门及下级部门数据) data_permission=3
+        // 获取部门数据
+        List<Long> deptList = baseUserMapper.getDeptId(deptId);
+        // 获取用户列表
+        Set<String> set3 = baseUserMapper.getUserIdByDeptIds(deptList);
+        set.addAll(set3);
+        // 本人及本级部门数据 data_permission=4
+        Set<String> set4 = baseUserMapper.getUserIdByDeptIdAndUserId(createBy, deptId);
+        set.addAll(set4);
+        // 本人及本部门及下级部门数据 data_permission=5
+        // 获取本人
+        Set<String> setUser = baseUserMapper.getUserIdListBy5(createBy);
+        // 获取部门数据
+        List<Long> deptList5 = baseUserMapper.getDeptId(deptId);
+        // 获取用户列表
+        Set<String> setUsers = baseUserMapper.getUserIdByDeptIdsBy5(deptList5);
+        Set<String> set5 = new HashSet<>();
+        set5.addAll(setUser);
+        set5.addAll(setUsers);
+        set.addAll(set5);
+        // 全部 data_permission=6
+        Set<String> set6 = baseUserMapper.getUserIdList6();
+        set.addAll(set6);
+        return set;
     }
 }

+ 51 - 2
business-service/src/main/resources/mapper/service/BaseUserMapper.xml

@@ -3,7 +3,56 @@
 <mapper namespace="com.ozs.service.mapper.BaseUserMapper">
 
     <select id="getUserIdList" resultType="java.lang.String" parameterType="java.lang.String">
-        select user_id from  sys_user 
-        where user_id = #{userId}  and data_permission=1
+        select user_id
+        from sys_user
+        where user_id = #{userId}
+          and data_permission = 1
+    </select>
+
+    <select id="getUserIdByDeptId" resultType="java.lang.String" parameterType="java.lang.Long">
+        select user_id
+        from sys_user
+        where dept_id = #{deptId}
+          and data_permission = 2
+    </select>
+
+    <select id="getDeptId" resultType="java.lang.Long" parameterType="java.lang.Long">
+        select dept_id
+        from sys_dept
+        where find_in_set(#{deptId}, ancestors)
+    </select>
+
+    <select id="getUserIdByDeptIds" resultType="java.util.List" parameterType="java.lang.Long">
+        select user_id
+        from sys_user
+        where dept_id in #{deptList}
+          and data_permission = 3
+    </select>
+
+    <select id="getUserIdByDeptIdAndUserId" resultType="java.lang.String">
+        select user_id
+        from sys_user
+        where (user_id = #{userId} or dept_id = #{deptId})
+          and data_permission = 4
+    </select>
+
+    <select id="getUserIdListBy5" resultType="java.lang.String" parameterType="java.lang.String">
+        select user_id
+        from sys_user
+        where user_id = #{userId}
+          and data_permission = 5
+    </select>
+
+    <select id="getUserIdByDeptIdsBy5" resultType="java.util.List" parameterType="java.lang.Long">
+        select user_id
+        from sys_user
+        where dept_id in #{deptList}
+          and data_permission = 5
+    </select>
+
+    <select id="getUserIdList6" resultType="java.lang.String">
+        select user_id
+        from sys_user
+        where data_permission = 6
     </select>
 </mapper>

+ 96 - 5
hazard-admin/src/main/java/com/ozs/web/core/util/CameraUtil.java

@@ -48,12 +48,21 @@ public class CameraUtil {
      * @return
      * @throws IOException
      */
-    public static String historyPlay(List<String> fromVideoFileList, String ph) throws IOException {
+    public static String historyPlay(List<String> fromVideoFileList, String ph) {
         // 视频服务映射路径
         String NewfilePath = flvPath + ph;
         log.info("NewfilePath:{}", NewfilePath);
         log.info("fromVideoFileList:{}", fromVideoFileList);
-        convetor(fromVideoFileList, NewfilePath);
+        new Thread(() -> {
+            try {
+                myConvetor(fromVideoFileList, NewfilePath);
+            } catch (IOException e) {
+                log.error(e.getMessage());
+                e.printStackTrace();
+            }
+        }).start();
+        // windows可以 linux不行
+//        convetor(fromVideoFileList, NewfilePath);
         return mappingUrl + "record/flv/hazard/" + ph;
     }
 
@@ -107,12 +116,12 @@ public class CameraUtil {
 
     public static String historyPlayListStr(String channel, Date startTm, Date endTm) {
         List<String> list = historyPlayList(channel, startTm, endTm, filePath);
-        String ph = "flv/" + DateUtils.parseDateToStr(DateUtils.YYYYMMDDHHMMSS, new Date())
-                + "-" + channel + "-"
+        String ph = "flv/" + DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, new Date())
+                + "/" + channel + "/"
                 + UUID.randomUUID().toString() + ".flv";
         try {
             return historyPlay(list, ph);
-        } catch (IOException e) {
+        } catch (Exception e) {
             log.error(e.getMessage());
             e.printStackTrace();
         }
@@ -257,6 +266,9 @@ public class CameraUtil {
                 log.info("文件不存在:{}", fromVideoFile);
             }
         }
+        for (String voidT : voidTS) {
+            Runtime.getRuntime().exec("chmod 777 " + voidT);
+        }
         log.info("ffmpegPath:{}", ffmpegPath);
         List<String> dos = new ArrayList<>();
         StringBuffer tsPath = new StringBuffer();
@@ -299,6 +311,7 @@ public class CameraUtil {
         } finally {
             pr.destroy();
         }
+
         //删除生成的ts文件
 //        for (String filePath : voidTS) {
 //            File filet = new File(filePath);
@@ -307,6 +320,84 @@ public class CameraUtil {
 //        }
     }
 
+
+    public static void myConvetor(List<String> fromVideoFileList,
+                                  String newfilePath) throws IOException {
+        /*
+        * for f in *.flv; do echo "file '$f'" >> mylist.txt; done
+            ffmpeg -f concat -i mylist.txt -c copy output.flv
+        * */
+
+        List<String> rspList = new ArrayList<String>();
+        File file = new File(newfilePath);
+        boolean flay = false;
+        if (!file.getParentFile().exists()) {
+            file.getParentFile().mkdirs();
+            log.info("创建文件夹:{}", file.getParentFile().getPath());
+            flay = true;
+        }
+        log.info("newfilePath:{}", newfilePath);
+
+
+        StringBuffer sm = new StringBuffer("for f in ");
+        for (int t = 0; t < fromVideoFileList.size(); t++) {
+            File ft = new File(fromVideoFileList.get(t));
+            if (ft.exists()) {
+                if (t != fromVideoFileList.size() - 1) {
+                    sm.append(fromVideoFileList.get(t) + " ");
+                } else {
+                    sm.append(fromVideoFileList.get(t));
+                }
+            }
+        }
+        String substring = newfilePath.substring(0, newfilePath.lastIndexOf("."));
+        substring = substring + ".txt";
+        log.info("临时转化的文件:{}", substring);
+
+
+        sm.append("; do echo \"file '$f'\" >> " + substring + "; done");
+        String commit = sm.toString();
+        log.info("合并转化文件的命令:{}", commit);
+        Process proc = Runtime.getRuntime().exec("/bin/bash", null, null);
+        BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
+        PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())), true);
+
+        try {
+            String commit1 = ffmpegPath + " -f concat -safe 0 -i " + substring + " -c copy " + newfilePath;
+            List<String> commands = new ArrayList<>();
+            if (flay) {
+                commands.add("chomd -R 777 " + file.getParentFile().getPath());
+            }
+            // 合并成一个临时文件
+            commands.add(commit);
+            // 临时文件转化为 flv
+            commands.add(commit1);
+            for (String line : commands) {
+                out.println(line);
+            }
+            out.println("exit");// 这个命令必须执行,否则in流不结束。
+            String rspLine = "";
+            while ((rspLine = in.readLine()) != null) {
+                System.out.println(rspLine);
+                rspList.add(rspLine);
+            }
+            int i = proc.waitFor();
+            log.info("执行结果:{}", i);
+            //删除生成的ts文件
+            File file1 = new File(substring);
+            if (file1.exists()) {
+                file1.delete();
+            }
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        } finally {
+            in.close();
+            out.close();
+            proc.destroy();
+        }
+        log.info("返回结果:{}", rspList);
+    }
+
     public static void main(String[] args) throws IOException {
 
         List<String> fromVideoFileList = new ArrayList();

+ 26 - 20
hazard-sdk/src/main/java/com/ozs/controller/upload/GeoHazardMonitorTokenController.java

@@ -38,10 +38,7 @@ import org.springframework.web.bind.annotation.RestController;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 
 /**
  * 1. 获取身份认证控制层
@@ -129,21 +126,6 @@ public class GeoHazardMonitorTokenController {
         if (StringUtils.isNotEmpty(token)) {
             String s = SM4Utils.decryptData_ECB(parameter, "4370780c9a8c43e5");
             ReqMsgAlarmVo reqMsgAlarmVo = JSON.parseObject(s, ReqMsgAlarmVo.class);
-            // 推送消息reqMsgAlarmVo
-            // 初始化 -> 运行中 -> 成功或失败
-//            try {
-//                // 1、初始化
-//                webSocketServer.sendMoreMessage(ids,objStr(pipelineId,1));
-//                Thread.sleep(3 * 1000);
-//                // 2、运行中
-//                webSocketServer.sendMoreMessage(ids,objStr(pipelineId,2));
-//                Thread.sleep(5 * 1000);
-//                // 3、成功或失败
-//                webSocketServer.sendMoreMessage(ids,Math.random() * 10 > 5 ? objStr(pipelineId,6) : objStr(pipelineId,7));
-//            } catch (InterruptedException e) {
-//                e.printStackTrace();
-//                throw new RuntimeException("构建失败");
-//            }
             log.info("reqMsgAlarmVo:{}", reqMsgAlarmVo);
             RespMsgAlarmVo respMsgAlarmVo = new RespMsgAlarmVo();
             LambdaQueryWrapper<BaseCameraManagement> wrapper = new LambdaQueryWrapper<BaseCameraManagement>();
@@ -151,7 +133,25 @@ public class GeoHazardMonitorTokenController {
                 wrapper.eq(BaseCameraManagement::getCameraCode, reqMsgAlarmVo.getAlarmCamera());
             }
             BaseCameraManagement baseCameraManagement = baseCameraManagementService.getOne(wrapper);
-            Set<String> userList= baseUserService.getUserIdList(baseCameraManagement.getCreateBy());
+            // 获取推送人ID列表
+            Set<String> set = baseUserService.getUserIdList(baseCameraManagement.getCreateBy(), baseCameraManagement.getDeptId());
+            // List<String> list = new ArrayList<>(set);
+            String[] list = set.toArray(new String[set.size()]);
+            // 推送消息reqMsgAlarmVo
+            // 初始化 -> 运行中 -> 成功或失败
+            try {
+                // 1、初始化
+                webSocketServer.sendMoreMessage(list, objStr(baseCameraManagement, 1));
+                Thread.sleep(3 * 1000);
+                // 2、运行中
+                webSocketServer.sendMoreMessage(list, objStr(baseCameraManagement, 2));
+                Thread.sleep(5 * 1000);
+                // 3、成功或失败
+                webSocketServer.sendMoreMessage(list, Math.random() * 10 > 5 ? objStr(baseCameraManagement, 6) : objStr(baseCameraManagement, 7));
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+                throw new RuntimeException("构建失败");
+            }
             log.info("baseCameraManagement:{}", baseCameraManagement);
             if (ObjectUtils.isEmpty(reqMsgAlarmVo.getLineDir())) {
                 reqMsgAlarmVo.setLineDir(baseCameraManagement.getLineDir());
@@ -215,6 +215,12 @@ public class GeoHazardMonitorTokenController {
         }
     }
 
+    private String objStr(BaseCameraManagement baseCameraManagement, int status) {
+        JSONObject obj = new JSONObject();
+        obj.put("pipelineId", baseCameraManagement); //流水线ID
+        obj.put("status", status);
+        return obj.toJSONString();
+    }
 
     /**
      * 设备状态数据传输