Browse Source

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

wyyay 2 years ago
parent
commit
80f59c09a1
20 changed files with 469 additions and 98 deletions
  1. 4 4
      business-service/src/main/java/com/ozs/service/entity/BaseCameraManagement.java
  2. 0 5
      business-service/src/main/java/com/ozs/service/entity/BaseDeviceDynamicManagement.java
  3. 0 5
      business-service/src/main/java/com/ozs/service/entity/MsgAlarm.java
  4. 3 3
      business-service/src/main/java/com/ozs/service/entity/vo/BaseCameraManagementVo.java
  5. 53 0
      business-service/src/main/java/com/ozs/service/entity/vo/BaseCameraResVo.java
  6. 5 2
      business-service/src/main/java/com/ozs/service/entity/vo/BaseRailwayManagementVo.java
  7. 1 2
      business-service/src/main/resources/mapper/service/BaseDeviceDynamicManagementMapper.xml
  8. 33 27
      hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseCameraManagementController.java
  9. 8 8
      hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseRailwayManagementController.java
  10. 0 3
      hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/MsgAlarmController.java
  11. 1 1
      hazard-admin/src/main/java/com/ozs/web/controller/system/SysDictDataController.java
  12. 1 1
      hazard-admin/src/main/java/com/ozs/web/controller/system/SysLoginController.java
  13. 3 3
      hazard-admin/src/main/java/com/ozs/web/controller/system/SysMenuController.java
  14. 4 6
      hazard-admin/src/main/java/com/ozs/web/controller/system/SysProfileController.java
  15. 13 13
      hazard-admin/src/main/java/com/ozs/web/controller/system/SysUserController.java
  16. 18 9
      hazard-admin/src/main/java/com/ozs/web/controller/upload/UploadController.java
  17. 19 3
      hazard-admin/src/main/java/com/ozs/web/core/config/CaneraConfig.java
  18. 299 0
      hazard-admin/src/main/java/com/ozs/web/core/util/CameraUtil.java
  19. 4 2
      hazard-admin/src/main/resources/application.yml
  20. 0 1
      hazard-sdk/src/main/java/com/ozs/controller/upload/GeoHazardMonitorTokenController.java

+ 4 - 4
business-service/src/main/java/com/ozs/service/entity/BaseCameraManagement.java

@@ -53,10 +53,10 @@ public class BaseCameraManagement extends BaseEntity implements Serializable {
     private String channel;
 
     /**
-     * 所属工务段
+     * 所属工务段编码(单位id)
      */
-    @Excel(name = "所属工务段")
-    private String publicWorksSection;
+    @Excel(name = "所属工务段编码(单位id)")
+    private String deptId;
 
     /**
      * 行别(1上行2下行)
@@ -104,7 +104,7 @@ public class BaseCameraManagement extends BaseEntity implements Serializable {
      * 物联网卡号
      */
     @Excel(name = "物联网卡号")
-    private String cardNo;
+    private String cardNum;
 
     /**
      * 创建人

+ 0 - 5
business-service/src/main/java/com/ozs/service/entity/BaseDeviceDynamicManagement.java

@@ -46,11 +46,6 @@ public class BaseDeviceDynamicManagement extends BaseEntity implements Serializa
      */
     private Integer electricity;
 
-    /**
-     * 相机状态 1正常 2离线
-     */
-    private Integer cameraState;
-
     /**
      * 创建人
      */

+ 0 - 5
business-service/src/main/java/com/ozs/service/entity/MsgAlarm.java

@@ -57,11 +57,6 @@ public class MsgAlarm extends BaseEntity implements Serializable {
      */
     private String alarmMile;
 
-    /**
-     * 报警线路
-     */
-    private String alarmLine;
-
     /**
      * 报警内容
      */

+ 3 - 3
business-service/src/main/java/com/ozs/service/entity/vo/BaseCameraManagementVo.java

@@ -16,18 +16,18 @@ import java.io.Serializable;
 public class BaseCameraManagementVo extends PageVo implements Serializable {
 
     private static final long serialVersionUID = 1L;
-    
+
     /**
      * 所属工务段
      */
-    private String publicWorksSection;
+    private Long deptId;
 
     /**
      * 行别
      */
     private String lineDir;
 
-  
+
     /**
      * 线路名称
      */

+ 53 - 0
business-service/src/main/java/com/ozs/service/entity/vo/BaseCameraResVo.java

@@ -0,0 +1,53 @@
+package com.ozs.service.entity.vo;
+
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ozs.common.annotation.Excel;
+import com.ozs.common.core.domain.BaseEntity;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 线路和相机台账联合表
+ * </p>
+ *
+ * @author ozs
+ * @since 2023-02-17
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class BaseCameraResVo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+
+    /**
+     * 相机编码
+     */
+    @NotBlank(message = "相机编码不能为空")
+    private String cameraCode;
+
+    /**
+     * 开始时间
+     */
+    @NotNull(message = "开始时间不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date startTime;
+
+    /**
+     * 结束时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @NotNull(message = "结束时间不能为空")
+    private Date entTime;
+
+}

+ 5 - 2
business-service/src/main/java/com/ozs/service/entity/vo/BaseRailwayManagementVo.java

@@ -1,6 +1,7 @@
 package com.ozs.service.entity.vo;
 
 
+import com.ozs.common.annotation.Excel;
 import com.ozs.common.vo.PageVo;
 import lombok.Data;
 import java.io.Serializable;
@@ -23,8 +24,10 @@ public class BaseRailwayManagementVo extends PageVo implements Serializable {
      */
     private Integer railwayType;
 
+
     /**
-     * 线路名称
+     * 线路编码(四位数字)
      */
-    private String railwayName;
+    @Excel(name = "编码")
+    private String railwayCode;
 }

+ 1 - 2
business-service/src/main/resources/mapper/service/BaseDeviceDynamicManagementMapper.xml

@@ -9,8 +9,7 @@
 			a.camera_code AS cameraCode, 
 			a.line_dir AS lineDir, 
 			a.install_mile AS installMile, 
-			a.id AS id, 
-			a.public_works_section
+			a.id AS id
 		FROM
 		    base_camera_management AS a left join
 		    base_railway_management AS l  on  a.railway_code=l.railway_code

+ 33 - 27
hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseCameraManagementController.java

@@ -7,23 +7,28 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ozs.common.config.BaseConfig;
 import com.ozs.common.core.controller.BaseController;
 import com.ozs.common.core.domain.AjaxResult;
+import com.ozs.common.exception.base.BaseException;
 import com.ozs.common.utils.StringUtils;
 import com.ozs.common.utils.file.FileUtils;
 import com.ozs.common.utils.http.HttpUtils;
 import com.ozs.common.utils.poi.ExcelUtil;
+import com.ozs.framework.config.ServerConfig;
 import com.ozs.service.entity.BaseCameraManagement;
 import com.ozs.service.entity.BaseDeviceDynamicManagement;
 import com.ozs.service.entity.vo.BaseCameraManagementVo;
+import com.ozs.service.entity.vo.BaseCameraResVo;
 import com.ozs.service.service.BaseCameraManagementService;
 import com.ozs.service.service.BaseDeviceDynamicManagementService;
 import com.ozs.service.service.BaseRailwayManagementService;
 import com.ozs.web.core.config.CaneraConfig;
+import com.ozs.web.core.util.CameraUtil;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.http.MediaType;
 import org.springframework.util.ObjectUtils;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -39,6 +44,7 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import java.io.InputStream;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -59,6 +65,8 @@ public class BaseCameraManagementController extends BaseController {
     BaseDeviceDynamicManagementService baseDeviceDynamicManagementService;
     @Autowired
     private CaneraConfig caneraConfig;
+    @Autowired
+    private ServerConfig serverConfig;
 
     /**
      * 相机台账管理分页
@@ -76,8 +84,8 @@ public class BaseCameraManagementController extends BaseController {
         if (!StringUtils.isBlank(baseCameraManagementVo.getRailwayName())) {
             lw.eq(BaseCameraManagement::getRailwayCode, baseCameraManagementVo.getRailwayName());
         }
-        if (!StringUtils.isBlank(baseCameraManagementVo.getPublicWorksSection())) {
-            lw.eq(BaseCameraManagement::getPublicWorksSection, baseCameraManagementVo.getPublicWorksSection());
+        if (!ObjectUtils.isEmpty(baseCameraManagementVo.getDeptId())) {
+            lw.eq(BaseCameraManagement::getDeptId, baseCameraManagementVo.getDeptId());
         }
         if (!ObjectUtils.isEmpty(baseCameraManagementVo.getBeginMile())) {
             lw.ge(BaseCameraManagement::getBeginMile, baseCameraManagementVo.getBeginMile());
@@ -176,8 +184,8 @@ public class BaseCameraManagementController extends BaseController {
         if (!StringUtils.isBlank(baseAccountManagementVo.getRailwayName())) {
             lw.eq(BaseCameraManagement::getRailwayCode, baseAccountManagementVo.getRailwayName());
         }
-        if (!StringUtils.isBlank(baseAccountManagementVo.getPublicWorksSection())) {
-            lw.eq(BaseCameraManagement::getPublicWorksSection, baseAccountManagementVo.getPublicWorksSection());
+        if (!ObjectUtils.isEmpty(baseAccountManagementVo.getDeptId())) {
+            lw.eq(BaseCameraManagement::getDeptId, baseAccountManagementVo.getDeptId());
         }
         if (!ObjectUtils.isEmpty(baseAccountManagementVo.getBeginMile())) {
             lw.ge(BaseCameraManagement::getBeginMile, baseAccountManagementVo.getBeginMile());
@@ -205,19 +213,27 @@ public class BaseCameraManagementController extends BaseController {
     }
 
     @ApiOperation("查询录像")
-    @GetMapping("/api/records/{cameraCode}/{channel}")
-    public AjaxResult apiRecords(@PathVariable String cameraCode,@PathVariable String channel) {
-        String param = "id=" + cameraCode + "&channel=" + channel;
-        String s = HttpUtils.sendGet(caneraConfig.getPath() + "/gb28181/api/records", param);
-        System.out.println(s);
-        return success(HttpUtils.sendGet(caneraConfig.getPath() + "/gb28181/api/records", param));
+    @GetMapping("/api/records/{cameraCode}")
+    public AjaxResult apiRecords(@PathVariable String cameraCode) {
+        LambdaQueryWrapper<BaseCameraManagement> lw = new LambdaQueryWrapper<BaseCameraManagement>();
+        lw.eq(BaseCameraManagement::getCameraCode, cameraCode);
+        BaseCameraManagement one = baseCameraManagementService.getOne(lw);
+        if (ObjectUtils.isEmpty(one)) {
+            throw new BaseException("相机编号【" + cameraCode + "】不存在");
+        }
+        return new AjaxResult(200, "ok", CameraUtil.getPlayFlv(cameraCode, one.getChannel()));
     }
 
     @ApiOperation("播放回放")
-    @GetMapping("/api/invite/{cameraCode}/{channel}/{startTime}/{endTime}")
-    public AjaxResult apiInvite(@PathVariable String cameraCode,@PathVariable String channel,@PathVariable String startTime,@PathVariable String endTime) {
-        String param = "id="+cameraCode+"&channel="+channel+"&startTime="+startTime+"&endTime="+endTime;
-        return success(HttpUtils.sendGet(caneraConfig.getPath() + "/gb28181/api/invite/", param));
+    @PostMapping("/api/invite")
+    public AjaxResult apiInvite(@Validated @RequestBody BaseCameraResVo vo) {
+        LambdaQueryWrapper<BaseCameraManagement> lw = new LambdaQueryWrapper<BaseCameraManagement>();
+        lw.eq(BaseCameraManagement::getCameraCode, vo.getCameraCode());
+        BaseCameraManagement one = baseCameraManagementService.getOne(lw);
+        if (ObjectUtils.isEmpty(one)) {
+            throw new BaseException("相机编号【" + vo.getCameraCode() + "】不存在");
+        }
+        return success(serverConfig.getUrl() + CameraUtil.historyPlayList(one.getChannel(), vo.getStartTime(), vo.getEntTime()));
     }
 
 
@@ -225,24 +241,14 @@ public class BaseCameraManagementController extends BaseController {
     @GetMapping("/totalNumberOfDevices")
     public AjaxResult totalNumberOfDevices() {
         long count = baseDeviceDynamicManagementService.count();
-        LambdaQueryWrapper<BaseDeviceDynamicManagement> lw = new LambdaQueryWrapper<BaseDeviceDynamicManagement>();
-        lw.eq(BaseDeviceDynamicManagement::getCameraState, 1);
-        long onLine = baseDeviceDynamicManagementService.count(lw);
-        LambdaQueryWrapper<BaseDeviceDynamicManagement> wrapper = new LambdaQueryWrapper<BaseDeviceDynamicManagement>();
-        wrapper.eq(BaseDeviceDynamicManagement::getCameraState, 2);
-        long offLine = baseDeviceDynamicManagementService.count(wrapper);
-        List<Long> size = new ArrayList<>();
-        size.add(count);
-        size.add(onLine);
-        size.add(offLine);
-        return success(size);
+        return success(count);
     }
 
     @ApiOperation("视频服务树形结构")
     @GetMapping("/cameraTree")
     @Cacheable(value = "baseAccountManagement", key = "'cameraTree'")
-    public AjaxResult cameraTree(@RequestParam(value = "name",required = false) String name) {
-     return    success(baseDeviceDynamicManagementService.cameraTree(name));
+    public AjaxResult cameraTree(@RequestParam(value = "name", required = false) String name) {
+        return success(baseDeviceDynamicManagementService.cameraTree(name));
     }
 }
 

+ 8 - 8
hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseRailwayManagementController.java

@@ -56,11 +56,11 @@ public class BaseRailwayManagementController extends BaseController {
     @PostMapping("/list")
     public AjaxResult selectBaseLineManagement(@RequestBody BaseRailwayManagementVo baseRailwayManagementVo) {
         LambdaQueryWrapper<BaseRailwayManagement> lw = new LambdaQueryWrapper<BaseRailwayManagement>();
-        if (!StringUtils.isBlank(baseRailwayManagementVo.getRailwayName())) {
-            lw.eq(BaseRailwayManagement::getRailwayName, baseRailwayManagementVo.getRailwayName());
+        if (!StringUtils.isBlank(baseRailwayManagementVo.getRailwayCode())) {
+            lw.like(BaseRailwayManagement::getRailwayCode, "%" + baseRailwayManagementVo.getRailwayCode() + "%");
         }
         if (!ObjectUtils.isEmpty(baseRailwayManagementVo.getRailwayType())) {
-            lw.like(BaseRailwayManagement::getRailwayType, "%" + baseRailwayManagementVo.getRailwayType() + "%");
+            lw.eq(BaseRailwayManagement::getRailwayType, baseRailwayManagementVo.getRailwayType());
         }
         IPage<BaseRailwayManagement> page = baseRailwayManagementService.page(new Page<BaseRailwayManagement>(baseRailwayManagementVo.getPageNum(), baseRailwayManagementVo.getPageSize()), lw);
         return AjaxResult.success(page);
@@ -87,7 +87,7 @@ public class BaseRailwayManagementController extends BaseController {
      * @param baseRailwayManagement
      * @return
      */
-    @PostMapping("/saveLineManagement")
+    @PostMapping("/saveRailwayManagement")
     @ApiOperation("新增线路管理表信息")
     public AjaxResult saveLineManagement(@RequestBody BaseRailwayManagement baseRailwayManagement) {
         baseRailwayManagement.setCreateBy(getUsername());
@@ -103,7 +103,7 @@ public class BaseRailwayManagementController extends BaseController {
      * @param baseRailwayManagement
      * @return
      */
-    @PutMapping("/editLineManagement")
+    @PutMapping("/editRailwayManagement")
     @ApiOperation("修改线路管理表信息")
     public AjaxResult editLineManagement(@RequestBody BaseRailwayManagement baseRailwayManagement) {
         baseRailwayManagement.setUpdateBy(getUsername());
@@ -145,11 +145,11 @@ public class BaseRailwayManagementController extends BaseController {
     @PostMapping("/exportBaseLineManagement")
     public void exportBaseLineManagement(HttpServletResponse response, @RequestBody BaseRailwayManagementVo baseRailwayManagementVo) {
         LambdaQueryWrapper<BaseRailwayManagement> lw = new LambdaQueryWrapper<BaseRailwayManagement>();
-        if (!StringUtils.isBlank(baseRailwayManagementVo.getRailwayName())) {
-            lw.eq(BaseRailwayManagement::getRailwayName, baseRailwayManagementVo.getRailwayName());
+        if (!StringUtils.isBlank(baseRailwayManagementVo.getRailwayCode())) {
+            lw.like(BaseRailwayManagement::getRailwayCode, "%" + baseRailwayManagementVo.getRailwayCode() + "%");
         }
         if (!ObjectUtils.isEmpty(baseRailwayManagementVo.getRailwayType())) {
-            lw.like(BaseRailwayManagement::getRailwayType, "%" + baseRailwayManagementVo.getRailwayType() + "%");
+            lw.eq(BaseRailwayManagement::getRailwayType,  baseRailwayManagementVo.getRailwayType());
         }
         List<BaseRailwayManagement> list = baseRailwayManagementService.list(lw);
         ExcelUtil<BaseRailwayManagement> util = new ExcelUtil<>(BaseRailwayManagement.class);

+ 0 - 3
hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/MsgAlarmController.java

@@ -71,9 +71,6 @@ public class MsgAlarmController extends BaseController {
     @PostMapping("/list")
     public AjaxResult selectMsgAlarm(@RequestBody MsgAlarmVo msgAlarmVo) {
         LambdaQueryWrapper<MsgAlarm> lw = new LambdaQueryWrapper<MsgAlarm>();
-        if (!StringUtils.isBlank(msgAlarmVo.getAlarmLine())) {
-            lw.eq(MsgAlarm::getAlarmLine, msgAlarmVo.getAlarmLine());
-        }
         if (!ObjectUtils.isEmpty(msgAlarmVo.getLineDir())) {
             lw.eq(MsgAlarm::getLineDir, msgAlarmVo.getLineDir());
         }

+ 1 - 1
hazard-admin/src/main/java/com/ozs/web/controller/system/SysDictDataController.java

@@ -72,7 +72,7 @@ public class SysDictDataController extends BaseController
     /**
      * 根据字典类型查询字典数据信息
      */
-    @GetMapping(value = "/type/{dictType}")
+        @GetMapping(value = "/type/{dictType}")
     public AjaxResult dictType(@PathVariable String dictType)
     {
         List<SysDictData> data = dictTypeService.selectDictDataByType(dictType);

+ 1 - 1
hazard-admin/src/main/java/com/ozs/web/controller/system/SysLoginController.java

@@ -77,7 +77,7 @@ public class SysLoginController
     @GetMapping("getRouters")
     public AjaxResult getRouters()
     {
-        Long userId = SecurityUtils.getUserId();
+        Long userId = SecurityUtils.getId();
         List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId);
         return AjaxResult.success(menuService.buildMenus(menus));
     }

+ 3 - 3
hazard-admin/src/main/java/com/ozs/web/controller/system/SysMenuController.java

@@ -40,7 +40,7 @@ public class SysMenuController extends BaseController
     @GetMapping("/list")
     public AjaxResult list(SysMenu menu)
     {
-        List<SysMenu> menus = menuService.selectMenuList(menu, getUserId());
+        List<SysMenu> menus = menuService.selectMenuList(menu, getId());
         return success(menus);
     }
 
@@ -60,7 +60,7 @@ public class SysMenuController extends BaseController
     @GetMapping("/treeselect")
     public AjaxResult treeselect(SysMenu menu)
     {
-        List<SysMenu> menus = menuService.selectMenuList(menu, getUserId());
+        List<SysMenu> menus = menuService.selectMenuList(menu, getId());
         return success(menuService.buildMenuTreeSelect(menus));
     }
 
@@ -70,7 +70,7 @@ public class SysMenuController extends BaseController
     @GetMapping(value = "/roleMenuTreeselect/{roleId}")
     public AjaxResult roleMenuTreeselect(@PathVariable("roleId") Long roleId)
     {
-        List<SysMenu> menus = menuService.selectMenuList(getUserId());
+        List<SysMenu> menus = menuService.selectMenuList(getId());
         AjaxResult ajax = AjaxResult.success();
         ajax.put("checkedKeys", menuService.selectMenuListByRoleId(roleId));
         ajax.put("menus", menuService.buildMenuTreeSelect(menus));

+ 4 - 6
hazard-admin/src/main/java/com/ozs/web/controller/system/SysProfileController.java

@@ -63,14 +63,12 @@ public class SysProfileController extends BaseController
         LoginUser loginUser = getLoginUser();
         SysUser sysUser = loginUser.getUser();
         user.setUserName(sysUser.getUserName());
-        if (StringUtils.isNotEmpty(user.getPhonenumber())
-                && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user)))
-        {
+        if (StringUtils.isNotEmpty(user.getPhoneNum())
+                && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) {
             return error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
         }
         if (StringUtils.isNotEmpty(user.getEmail())
-                && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user)))
-        {
+                && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) {
             return error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
         }
         user.setUserId(sysUser.getUserId());
@@ -81,7 +79,7 @@ public class SysProfileController extends BaseController
         {
             // 更新缓存用户信息
             sysUser.setNickName(user.getNickName());
-            sysUser.setPhonenumber(user.getPhonenumber());
+            sysUser.setPhoneNum(user.getPhoneNum());
             sysUser.setEmail(user.getEmail());
             sysUser.setSex(user.getSex());
             tokenService.setLoginUser(loginUser);

+ 13 - 13
hazard-admin/src/main/java/com/ozs/web/controller/system/SysUserController.java

@@ -118,7 +118,7 @@ public class SysUserController extends BaseController {
     public AjaxResult add(@Validated @RequestBody SysUser user) {
         if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user))) {
             return error("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
-        } else if (StringUtils.isNotEmpty(user.getPhonenumber())
+        } else if (StringUtils.isNotEmpty(user.getPhoneNum())
                 && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) {
             return error("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
         }
@@ -135,10 +135,10 @@ public class SysUserController extends BaseController {
     @PutMapping
     public AjaxResult edit(@Validated @RequestBody SysUser user) {
         userService.checkUserAllowed(user);
-        userService.checkUserDataScope(user.getUserId());
+        userService.checkUserDataScope(user.getId());
         if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user))) {
             return error("修改用户'" + user.getUserName() + "'失败,登录账号已存在");
-        } else if (StringUtils.isNotEmpty(user.getPhonenumber())
+        } else if (StringUtils.isNotEmpty(user.getPhoneNum())
                 && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) {
             return error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
         } else if (StringUtils.isNotEmpty(user.getEmail())
@@ -154,12 +154,12 @@ public class SysUserController extends BaseController {
      */
     @PreAuthorize("@ss.hasPermi('system:user:remove')")
     @Log(title = "用户管理", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{userIds}")
-    public AjaxResult remove(@PathVariable Long[] userIds) {
-        if (ArrayUtils.contains(userIds, getUserId())) {
+    @DeleteMapping("/{Ids}")
+    public AjaxResult remove(@PathVariable Long[] Ids) {
+        if (ArrayUtils.contains(Ids, getId())) {
             return error("当前用户不能删除");
         }
-        return toAjax(userService.deleteUserByIds(userIds));
+        return toAjax(userService.deleteUserByIds(Ids));
     }
     ///**
     // * 删除用户
@@ -186,7 +186,7 @@ public class SysUserController extends BaseController {
     @PutMapping("/resetPwd")
     public AjaxResult resetPwd(@RequestBody SysUser user) {
         userService.checkUserAllowed(user);
-        userService.checkUserDataScope(user.getUserId());
+        userService.checkUserDataScope(user.getId());
         user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
         user.setUpdateBy(getUsername());
         return toAjax(userService.resetPwd(user));
@@ -200,7 +200,7 @@ public class SysUserController extends BaseController {
     @PutMapping("/changeStatus")
     public AjaxResult changeStatus(@RequestBody SysUser user) {
         userService.checkUserAllowed(user);
-        userService.checkUserDataScope(user.getUserId());
+        userService.checkUserDataScope(user.getId());
         user.setUpdateBy(getUsername());
         return toAjax(userService.updateUserStatus(user));
     }
@@ -210,12 +210,12 @@ public class SysUserController extends BaseController {
      */
     @PreAuthorize("@ss.hasPermi('system:user:query')")
     @GetMapping("/authRole/{userId}")
-    public AjaxResult authRole(@PathVariable("userId") Long userId) {
+    public AjaxResult authRole(@PathVariable("userId") Long id) {
         AjaxResult ajax = AjaxResult.success();
-        SysUser user = userService.selectUserById(userId);
-        List<SysRole> roles = roleService.selectRolesByUserId(userId);
+        SysUser user = userService.selectUserById(id);
+        List<SysRole> roles = roleService.selectRolesByUserId(id);
         ajax.put("user", user);
-        ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
+        ajax.put("roles", SysUser.isAdmin(id) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
         return ajax;
     }
 

+ 18 - 9
hazard-admin/src/main/java/com/ozs/web/controller/upload/UploadController.java

@@ -5,7 +5,11 @@ import com.ozs.common.core.domain.AjaxResult;
 import com.ozs.common.utils.MinioUtils;
 import com.ozs.common.utils.StringUtils;
 import com.ozs.common.utils.uuid.IdUtils;
+import com.ozs.service.entity.BaseCameraManagement;
+import com.ozs.service.entity.BaseRailwayManagement;
 import com.ozs.service.entity.MsgAlarm;
+import com.ozs.service.service.BaseCameraManagementService;
+import com.ozs.service.service.BaseRailwayManagementService;
 import com.ozs.service.service.MsgAlarmService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -31,7 +35,9 @@ public class UploadController {
     @Resource
     MinioUtils minioUtils;
     @Autowired
-    MsgAlarmService msgAlarmService;
+    BaseCameraManagementService baseCameraManagementService;
+    @Autowired
+    BaseRailwayManagementService baseRailwayManagementService;
 
 
     @PostMapping("/upLoadImage")
@@ -48,20 +54,23 @@ public class UploadController {
 
             String imageName = image.getOriginalFilename();
             if (StringUtils.isNotBlank(imageName)) {
-                LambdaQueryWrapper<MsgAlarm> lw = new LambdaQueryWrapper<MsgAlarm>();
+                LambdaQueryWrapper<BaseCameraManagement> lw = new LambdaQueryWrapper<BaseCameraManagement>();
                 if (!ObjectUtils.isEmpty(cameraCode)) {
-                    lw.eq(MsgAlarm::getCameraCode, cameraCode);
-                    lw.orderByDesc(MsgAlarm::getAlarmTime);
+                    lw.eq(BaseCameraManagement::getCameraCode, cameraCode);
+                }
+                BaseCameraManagement baseCameraManagement = baseCameraManagementService.getOne(lw);
+                LambdaQueryWrapper<BaseRailwayManagement> wrapper = new LambdaQueryWrapper<BaseRailwayManagement>();
+                if (!ObjectUtils.isEmpty(baseCameraManagement.getCameraCode())) {
+                    wrapper.eq(BaseRailwayManagement::getRailwayCode,baseCameraManagement.getCameraCode());
                 }
-                List<MsgAlarm> list = msgAlarmService.list(lw);
-                MsgAlarm msgAlarm = list.get(0);
+                BaseRailwayManagement baseRailwayManagement = baseRailwayManagementService.getOne(wrapper);
                 String date = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
                 String filename = IdUtils.fastSimpleUUID() + image.getOriginalFilename().substring(image.getOriginalFilename().lastIndexOf("."));
                 SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd");
-                String format1 = dateFormat1.format(msgAlarm.getAlarmTime());
-                String imgName = msgAlarm.getAlarmLine() + "/" + lineType + "/" + msgAlarm.getAlarmMile() + format1 + "/" + filename;
+                String format1 = dateFormat1.format(dateFormat1.format(date));
+                String imgName = baseRailwayManagement.getRailwayName() + "/" + lineType + "/" + baseCameraManagement.getInstallMile() + format1 + "/" + filename;
                 minioUtils.minIoClientUpload(image.getInputStream(), imgName);
-                uploadFile = "/" + msgAlarm.getAlarmLine() + "/" + lineType + "/" + msgAlarm.getAlarmMile() + "/" + format1 + "/" + filename;
+                uploadFile = "/" + baseRailwayManagement.getRailwayName() + "/" + lineType + "/" + baseCameraManagement.getInstallMile() + "/" + format1 + "/" + filename;
 
             }
         } else {

+ 19 - 3
hazard-admin/src/main/java/com/ozs/web/core/config/CaneraConfig.java

@@ -9,10 +9,26 @@ import org.springframework.context.annotation.Configuration;
 public class CaneraConfig {
 
     /**
-     * 是否开启swagger
+     * 视频服务器访问路径
      */
-    @Value("${base.path}")
-    private String path;
+    @Value("${base.url:http://47.106.159.135:8554}")
+    private String url;
+
+    /**
+     * 视频服务器访问路径
+     */
+    @Value("${base.historyUrl:http://47.106.159.135/streams}")
+    private String historyUrl;
+    /**
+     * ffmpeg.exe路径
+     * "D:\\Java\\operSources\\ffmpeg-4.3.1\\bin\\ffmpeg.exe"
+     */
+    @Value("${base.ffmpegPath:C:\\Users\\Administrator.DESKTOP-0NUUTMM\\Downloads\\ffmpeg-5.1.2-essentials_build\\ffmpeg-5.1.2-essentials_build\\bin\\ffmpeg.exe}")
+    private String ffmpegPath;
+
+
+    @Value("${base.mappingUrl:http://47.106.159.135/}")
+    private String mappingUrl;
 
 
 }

+ 299 - 0
hazard-admin/src/main/java/com/ozs/web/core/util/CameraUtil.java

@@ -0,0 +1,299 @@
+package com.ozs.web.core.util;
+
+
+import com.alibaba.fastjson2.JSON;
+import com.ozs.common.config.BaseConfig;
+import com.ozs.common.exception.base.BaseException;
+import com.ozs.common.utils.DateUtils;
+import com.ozs.common.utils.http.HttpUtils;
+import com.ozs.web.core.config.CaneraConfig;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+
+import javax.annotation.PostConstruct;
+import java.io.*;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * 相机工具
+ */
+@Component
+@Slf4j
+public class CameraUtil {
+
+    private static String url;
+    private static String historyUrl;
+    private static String ffmpegPath;
+    private static String mappingUrl;
+    @Autowired
+    private CaneraConfig caneraConfig;
+
+
+    /**
+     * 历史回放
+     *
+     * @param fromVideoFileList
+     * @param ph
+     * @return
+     * @throws IOException
+     */
+    public static String historyPlay(List<String> fromVideoFileList, String ph) throws IOException {
+        // 视频服务映射路径
+        String NewfilePath = BaseConfig.getProfile() + ph;
+        log.info("NewfilePath:{}", NewfilePath);
+        log.info("fromVideoFileList:{}", fromVideoFileList);
+        convetor(fromVideoFileList, NewfilePath);
+        return "/profile" + ph;
+    }
+
+    public static String getPlayFlv(String cameraCode, String channel) {
+        return historyUrl + "/hdl/" + channel + "/" + cameraCode + ".flv";
+    }
+
+    /**
+     * 实时播放
+     *
+     * @param cameraCode
+     * @param channel
+     * @return
+     */
+    public static String play(String cameraCode, String channel) {
+        if (StringUtils.isBlank(cameraCode) || StringUtils.isBlank(channel)) {
+            return null;
+        }
+        String param = "id=" + cameraCode + "&channel=" + channel;
+        return HttpUtils.sendGet(url + "/gb28181/api/records", param);
+    }
+
+
+    public static List<String> historyPlayList(String channel, Date startTm, Date endTm) {
+        if (StringUtils.isBlank(channel)
+                || ObjectUtils.isEmpty(startTm)
+                || ObjectUtils.isEmpty(endTm)) {
+            return null;
+        }
+
+        List<String> ls = new ArrayList<>();
+        // 调用视频服务返回参数
+        String startTime = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, startTm);
+        String endTime = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, endTm);
+        String ph = "/flv/" + DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, new Date())
+                + "/" + channel + "/" + startTime + "/" + endTime + "/"
+                + UUID.randomUUID().toString() + ".flv";
+        String param = "channel=" + channel + "&startTime=" + startTime + "&endTime=" + endTime;
+        String s = HttpUtils.sendGet(historyUrl + "/api/record/flv/list", param);
+        // 视频拼接
+        if (!StringUtils.isBlank(s) || "null".equals(s)) {
+            List<Map<String, Object>> maps = JSON.parseArray(s, Map.class);
+            for (Map<String, Object> map : maps) {
+                Object path = map.get("Path");
+                if (!ObjectUtils.isEmpty(path)) {
+                    String s1 = path.toString();
+                    String substring = s1.substring(s1.lastIndexOf("/") + 1, s1.length());
+                    String substring1 = substring.substring(0, substring.indexOf("-"));
+                    String[] s2 = substring1.split("_");
+                    if (!ObjectUtils.isEmpty(s2)) {
+                        String s3 = s2[0] + s2[1];
+                        String s4 = s2[0] + s2[2];
+                        Date sdate = DateUtils.dateTime(DateUtils.YYYYMMDDHHMMSS, s3);
+                        Date edate = DateUtils.dateTime(DateUtils.YYYYMMDDHHMMSS, s4);
+                        /*     s | e     | */
+                        if (startTm.compareTo(sdate) <= 0 && endTm.compareTo(edate) > 0) {
+                            ls.add(mappingUrl + path.toString());
+
+                            /*  |   s    e    | */
+                        } else if (startTm.compareTo(sdate) >= 0 && endTm.compareTo(edate) <= 0) {
+                            ls.add(mappingUrl + path.toString());
+
+                            /*  |   s     |  e  */
+                        } else if (startTm.compareTo(sdate) >= 0 && endTm.compareTo(edate) >= 0) {
+                            ls.add(mappingUrl + path.toString());
+
+                            /*  s|      | e  */
+                        } else if (startTm.compareTo(sdate) <= 0 && endTm.compareTo(edate) >= 0) {
+                            ls.add(mappingUrl + path.toString());
+                        }
+                    }
+                }
+            }
+        }
+        if (!ObjectUtils.isEmpty(ls)) {
+            return ls;
+//            try {
+//                return historyPlay(ls, ph);
+//            } catch (IOException e) {
+//                e.printStackTrace();
+//            }
+        }
+        return null;
+    }
+
+    @PostConstruct
+    public void init() {
+        url = caneraConfig.getUrl();
+        mappingUrl = caneraConfig.getMappingUrl();
+        historyUrl = caneraConfig.getHistoryUrl();
+        ffmpegPath = caneraConfig.getFfmpegPath();
+    }
+
+    /**
+     * * 参数:
+     * **List<String> fromVideoFileList 需要合并的多视频url地址以List存放**
+     * **String ffmpeg 此处是ffmpeg 配置地址,可写死如“E:/ffmpeg/bin/ffmpeg.exe”**
+     * **String NewfilePath 合并后的视频存放地址,如:E:/mergevideo.mp4***
+     */
+    public static void convetor(List<String> fromVideoFileList,
+                                String NewfilePath) throws IOException {
+
+        new Thread(
+                () -> {
+                    try {
+                        List<String> voidTS = new ArrayList<>();
+                        Process process = null;
+                        ProcessBuilder builder = null;
+                        List<String> command = null;
+                        for (int i = 0; i < fromVideoFileList.size(); i++) {
+                            String fromVideoFile = fromVideoFileList.get(i);
+                            command = new ArrayList<String>();
+                            command.add(ffmpegPath);
+                            command.add("-y");
+                            command.add("-i");
+                            command.add(fromVideoFile);
+                            command.add("-vcodec");
+                            command.add("copy");
+                            command.add("-bsf:v");
+                            command.add("h264_mp4toannexb");
+                            command.add("-f");
+                            command.add("mpegts");
+                            command.add(fromVideoFile.substring(0,
+                                    fromVideoFile.lastIndexOf(".")) + ".ts");
+                            builder = new ProcessBuilder(command);
+                            voidTS.add(fromVideoFile.substring(0,
+                                    fromVideoFile.lastIndexOf("."))
+                                    + ".ts");
+                            try {
+                                process = builder.start();
+                                InputStream errorStream = process
+                                        .getErrorStream();
+                                InputStreamReader inputStreamReader = new InputStreamReader(
+                                        errorStream);
+                                BufferedReader br = new BufferedReader(
+                                        inputStreamReader);
+                                String line = "";
+                                StringBuffer sb = new StringBuffer();
+                                while ((line = br.readLine()) != null) {
+                                    sb.append(line);
+                                }
+                                String regexDuration = "Duration: (.*?), start: (.*?), bitrate: (\\d*) kb\\/s";
+                                Pattern pattern = Pattern
+                                        .compile(regexDuration);
+                                Matcher m = pattern.matcher(sb.toString());
+                                System.out.println(sb.toString());
+                                br.close();
+                                inputStreamReader.close();
+                                errorStream.close();
+                            } catch (IOException e) {
+                                e.printStackTrace();
+                            }
+                        }
+                        List<String> dos = new ArrayList<>();
+                        StringBuffer tsPath = new StringBuffer();
+                        tsPath.append(ffmpegPath);
+                        tsPath.append(" -i ");
+                        tsPath.append("concat:");
+                        for (int t = 0; t < voidTS.size(); t++) {
+                            if (t != voidTS.size() - 1) {
+                                tsPath.append(voidTS.get(t) + "|");
+                            } else {
+                                tsPath.append(voidTS.get(t));
+                            }
+                        }
+                        tsPath.append(" -vcodec ");
+                        tsPath.append(" copy ");
+                        tsPath.append(" -bsf:a ");
+                        tsPath.append(" aac_adtstoasc ");
+                        tsPath.append(" -movflags ");
+                        tsPath.append(" +faststart ");
+                        tsPath.append(NewfilePath);
+                        Process pr = Runtime.getRuntime().exec(
+                                tsPath.toString());
+                        process.getInputStream();
+                        pr.getOutputStream().close();
+                        pr.getInputStream().close();
+                        pr.getErrorStream().close();
+                        try {
+                            pr.waitFor();
+                            Thread.sleep(1000);
+                            pr.destroy();
+                        } catch (InterruptedException e) {
+                            // TODO Auto-generated catch block
+                            e.printStackTrace();
+                        }
+                        //删除生成的ts文件
+                        for (String filePath : voidTS) {
+                            File file = new File(filePath);
+                            file.delete();
+                            pr.destroy();
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                }).start();
+    }
+
+    //工具类
+
+    public static void queryRecords(String cameraCode, String channel, Date startTm, Date endTm) {
+        if (StringUtils.isBlank(cameraCode)
+                || StringUtils.isBlank(channel)
+                || ObjectUtils.isEmpty(startTm)
+                || ObjectUtils.isEmpty(endTm)) {
+            throw new BaseException("参数为空");
+        }
+        String param = "id=" + cameraCode + "&channel=" + channel + "&startTime=" + DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, startTm) + "&endTm=" + DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, endTm);
+        String s = HttpUtils.sendGet(historyUrl + "/api/gb28181/query/records", param);
+        System.out.println(s);
+    }
+
+
+    /**
+     * 合并多个视频文件
+     */
+    public static void mergeFile(List<String> fromVideoFileList, String NewfilePath) {
+        // 合并命令
+        String commit = "$0 -f concat -safe 0 -i $1 -c copy $2";
+
+        String str = commit.replace("$0", ffmpegPath);
+        if (!ObjectUtils.isEmpty(fromVideoFileList)) {
+            for (String s : fromVideoFileList) {
+                str = str.replace("$1", s);
+            }
+        }
+        str = str.replace("$2", NewfilePath);
+        System.out.println(str);
+        Runtime runtime = Runtime.getRuntime();
+        try {
+            Process proce = runtime.exec(str);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void main(String[] args) throws IOException {
+
+        List<String> fromVideoFileList = new ArrayList();
+        String p = "C:\\Users\\Administrator.DESKTOP-0NUUTMM\\Desktop\\work\\106\\流媒体\\";
+        String NewfilePath = p + "mergevideo.flv";
+        fromVideoFileList.add(p + "20230303_174931_175031-d6d56396-b9a8-11ed-aeb9-00163e06a5f3.flv");
+        fromVideoFileList.add(p + "20230303_175032_175132-fb32b9fe-b9a8-11ed-aeb9-00163e06a5f3.flv");
+        fromVideoFileList.add(p + "20230303_175133_175233-1f97af04-b9a9-11ed-aeb9-00163e06a5f3.flv");
+        fromVideoFileList.add(p + "20230303_175234_175334-43f4daf1-b9a9-11ed-aeb9-00163e06a5f3.flv");
+        convetor(fromVideoFileList, NewfilePath);
+
+    }
+}

+ 4 - 2
hazard-admin/src/main/resources/application.yml

@@ -9,13 +9,15 @@ base:
   # 实例演示开关
   demoEnabled: true
   # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
-  profile: C:/base/uploadPath
+  #  profile: /data/service/hazard-admin/uploadPath
+  profile: C:\base\uploadPath
   # 获取ip地址开关
   addressEnabled: false
   # 验证码类型 math 数组计算 char 字符验证
   captchaType: math
-#  path: http://47.106.159.135:8554
+  #  path: http://47.106.159.135:8554
   path: http://47.106.159.135:8554
+  ffmpegPath: /usr/local/ffmpeg/bin/ffmpeg
 
 # 开发环境配置
 server:

+ 0 - 1
hazard-sdk/src/main/java/com/ozs/controller/upload/GeoHazardMonitorTokenController.java

@@ -221,7 +221,6 @@ public class GeoHazardMonitorTokenController {
             BaseDeviceDynamicManagement baseDynamicManagement = baseDeviceDynamicManagementService.getOne(lw);
             baseDynamicManagement.setElectricity(reqDeviceVo.getElectricity());
             baseDynamicManagement.setUpdateTime(new Date(reqDeviceVo.getTime()));
-            baseDynamicManagement.setCameraState(reqDeviceVo.getCameraState());
             log.info("reqDeviceVo:{}", baseDynamicManagement);
             if (baseDeviceDynamicManagementService.updateById(baseDynamicManagement)) {
                 jsonObject.put("resultCode", 1);